1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -basicaa -globalopt -instcombine -loop-rotate -licm -instcombine -indvars -loop-deletion -constmerge -S | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; PR11882: ComputeLoadConstantCompareExitLimit crash. 3*9880d681SAndroid Build Coastguard Worker; 4*9880d681SAndroid Build Coastguard Worker; for.body is deleted leaving a loop-invariant load. 5*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: for.body 6*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:64:64:64-n32:64" 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker@func_21_l_773 = external global i32, align 4 9*9880d681SAndroid Build Coastguard Worker@g_814 = external global i32, align 4 10*9880d681SAndroid Build Coastguard Worker@g_244 = internal global [1 x [0 x i32]] zeroinitializer, align 4 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine void @func_21() nounwind uwtable ssp { 13*9880d681SAndroid Build Coastguard Workerentry: 14*9880d681SAndroid Build Coastguard Worker br label %lbl_818 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerlbl_818: ; preds = %for.end, %entry 17*9880d681SAndroid Build Coastguard Worker call void (...) @func_27() 18*9880d681SAndroid Build Coastguard Worker store i32 0, i32* @g_814, align 4 19*9880d681SAndroid Build Coastguard Worker br label %for.cond 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerfor.cond: ; preds = %for.body, %lbl_818 22*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* @g_814, align 4 23*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %0, 0 24*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.body, label %for.end 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.cond 27*9880d681SAndroid Build Coastguard Worker %idxprom = sext i32 %0 to i64 28*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* getelementptr inbounds ([1 x [0 x i32]], [1 x [0 x i32]]* @g_244, i32 0, i64 0), i32 0, i64 %idxprom 29*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %arrayidx, align 1 30*9880d681SAndroid Build Coastguard Worker store i32 %1, i32* @func_21_l_773, align 4 31*9880d681SAndroid Build Coastguard Worker store i32 1, i32* @g_814, align 4 32*9880d681SAndroid Build Coastguard Worker br label %for.cond 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.cond 35*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* @func_21_l_773, align 4 36*9880d681SAndroid Build Coastguard Worker %tobool = icmp ne i32 %2, 0 37*9880d681SAndroid Build Coastguard Worker br i1 %tobool, label %lbl_818, label %if.end 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerif.end: ; preds = %for.end 40*9880d681SAndroid Build Coastguard Worker ret void 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdeclare void @func_27(...) 44