1*9880d681SAndroid Build Coastguard Worker; RUN: opt -licm -disable-output < %s 2*9880d681SAndroid Build Coastguard Worker; RUN: opt -aa-pipeline=basic-aa -passes='require<aa>,require<targetir>,require<scalar-evolution>,loop(licm)' -disable-output < %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" 5*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-apple-darwin10.0.0" 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; PR8068 9*9880d681SAndroid Build Coastguard Worker@g_12 = external global i8, align 1 10*9880d681SAndroid Build Coastguard Workerdefine void @test1() nounwind ssp { 11*9880d681SAndroid Build Coastguard Workerentry: 12*9880d681SAndroid Build Coastguard Worker br label %for.body 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.cond, %bb.nph 15*9880d681SAndroid Build Coastguard Worker store i8 0, i8* @g_12, align 1 16*9880d681SAndroid Build Coastguard Worker %tmp6 = load i8, i8* @g_12, align 1 17*9880d681SAndroid Build Coastguard Worker br label %for.cond 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerfor.cond: ; preds = %for.body 20*9880d681SAndroid Build Coastguard Worker store i8 %tmp6, i8* @g_12, align 1 21*9880d681SAndroid Build Coastguard Worker br i1 false, label %for.cond.for.end10_crit_edge, label %for.body 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerfor.cond.for.end10_crit_edge: ; preds = %for.cond 24*9880d681SAndroid Build Coastguard Worker br label %for.end10 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workerfor.end10: ; preds = %for.cond.for.end10_crit_edge, %entry 27*9880d681SAndroid Build Coastguard Worker ret void 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; PR8067 31*9880d681SAndroid Build Coastguard Worker@g_8 = external global i32, align 4 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerdefine void @test2() noreturn nounwind ssp { 34*9880d681SAndroid Build Coastguard Workerentry: 35*9880d681SAndroid Build Coastguard Worker br label %for.body 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body, %entry 38*9880d681SAndroid Build Coastguard Worker %tmp7 = load i32, i32* @g_8, align 4 39*9880d681SAndroid Build Coastguard Worker store i32* @g_8, i32** undef, align 16 40*9880d681SAndroid Build Coastguard Worker store i32 undef, i32* @g_8, align 4 41*9880d681SAndroid Build Coastguard Worker br label %for.body 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker; PR8102 45*9880d681SAndroid Build Coastguard Workerdefine void @test3() { 46*9880d681SAndroid Build Coastguard Workerentry: 47*9880d681SAndroid Build Coastguard Worker %__first = alloca { i32* } 48*9880d681SAndroid Build Coastguard Worker br i1 undef, label %for.cond, label %for.end 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Workerfor.cond: ; preds = %for.cond, %entry 51*9880d681SAndroid Build Coastguard Worker %tmp1 = getelementptr { i32*}, { i32*}* %__first, i32 0, i32 0 52*9880d681SAndroid Build Coastguard Worker %tmp2 = load i32*, i32** %tmp1, align 4 53*9880d681SAndroid Build Coastguard Worker %call = tail call i32* @test3helper(i32* %tmp2) 54*9880d681SAndroid Build Coastguard Worker %tmp3 = getelementptr { i32*}, { i32*}* %__first, i32 0, i32 0 55*9880d681SAndroid Build Coastguard Worker store i32* %call, i32** %tmp3, align 4 56*9880d681SAndroid Build Coastguard Worker br i1 false, label %for.cond, label %for.end 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.cond, %entry 59*9880d681SAndroid Build Coastguard Worker ret void 60*9880d681SAndroid Build Coastguard Worker} 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdeclare i32* @test3helper(i32*) 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker; PR8602 66*9880d681SAndroid Build Coastguard Worker@g_47 = external global i32, align 4 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Workerdefine void @test4() noreturn nounwind { 69*9880d681SAndroid Build Coastguard Worker br label %1 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker; <label>:1 ; preds = %1, %0 72*9880d681SAndroid Build Coastguard Worker store volatile i32* @g_47, i32** undef, align 8 73*9880d681SAndroid Build Coastguard Worker store i32 undef, i32* @g_47, align 4 74*9880d681SAndroid Build Coastguard Worker br label %1 75*9880d681SAndroid Build Coastguard Worker} 76