trip-count-pow2.ll 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. ; RUN: opt < %s -scalar-evolution -analyze | FileCheck %s
  2. define void @test1(i32 %n) {
  3. entry:
  4. %s = mul i32 %n, 96
  5. br label %loop
  6. loop:
  7. %i = phi i32 [ 0, %entry ], [ %i.next, %loop ]
  8. %i.next = add i32 %i, 32
  9. %t = icmp ne i32 %i.next, %s
  10. br i1 %t, label %loop, label %exit
  11. exit:
  12. ret void
  13. ; CHECK-LABEL: @test1
  14. ; CHECK: Loop %loop: backedge-taken count is ((-32 + (96 * %n)) /u 32)
  15. ; CHECK: Loop %loop: max backedge-taken count is ((-32 + (96 * %n)) /u 32)
  16. }
  17. ; PR19183
  18. define i32 @test2(i32 %n) {
  19. entry:
  20. %s = and i32 %n, -32
  21. br label %loop
  22. loop:
  23. %i = phi i32 [ 0, %entry ], [ %i.next, %loop ]
  24. %i.next = add i32 %i, 32
  25. %t = icmp ne i32 %i.next, %s
  26. br i1 %t, label %loop, label %exit
  27. exit:
  28. ret i32 %i
  29. ; CHECK-LABEL: @test2
  30. ; CHECK: Loop %loop: backedge-taken count is ((-32 + (32 * (%n /u 32))) /u 32)
  31. ; CHECK: Loop %loop: max backedge-taken count is ((-32 + (32 * (%n /u 32))) /u 32)
  32. }
  33. define void @test3(i32 %n) {
  34. entry:
  35. %s = mul i32 %n, 96
  36. br label %loop
  37. loop:
  38. %i = phi i32 [ 0, %entry ], [ %i.next, %loop ]
  39. %i.next = add i32 %i, 96
  40. %t = icmp ne i32 %i.next, %s
  41. br i1 %t, label %loop, label %exit
  42. exit:
  43. ret void
  44. ; CHECK-LABEL: @test3
  45. ; CHECK: Loop %loop: Unpredictable backedge-taken count.
  46. ; CHECK: Loop %loop: Unpredictable max backedge-taken count.
  47. }