infiniteloop.ll 1.3 KB

12345678910111213141516171819202122232425262728293031323334
  1. ; RUN: opt -S -indvars -loop-vectorize -force-vector-width=2 < %s | FileCheck %s
  2. target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S128"
  3. @a = common global i64 0, align 8
  4. @x = common global i32 0, align 4
  5. ; We used to assert on this loop because we could not find an induction
  6. ; variable but assumed there must be one. Scalar evolution returned a exit
  7. ; count for the loop below and from there on we assumed that there must be an
  8. ; induction variable. This is not a valid assumption:
  9. ; // getExitCount - Get the expression for the number of loop iterations for
  10. ; // which this loop is *guaranteed not to exit* via ExitingBlock. Otherwise
  11. ; // return SCEVCouldNotCompute.
  12. ; For an infinite loop SE can return any number.
  13. ; CHECK-LABEL: @fn1(
  14. define void @fn1() {
  15. entry:
  16. store i64 0, i64* @a, align 8
  17. br label %for.body
  18. for.body: ; preds = %for.body, %entry
  19. %inc1 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
  20. store volatile i32 0, i32* @x, align 4
  21. %inc = add nsw i64 %inc1, 1
  22. %cmp = icmp sgt i64 %inc1, -2
  23. br i1 %cmp, label %for.body, label %for.end
  24. for.end: ; preds = %for.body
  25. %inc.lcssa = phi i64 [ %inc, %for.body ]
  26. store i64 %inc.lcssa, i64* @a, align 8
  27. ret void
  28. }