2012-03-26-LoadConstant.ll 1.6 KB

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