full-unroll-bad-cost.ll 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. ; RUN: opt -S -loop-unroll < %s | FileCheck %s
  2. ; LLVM should not try to fully unroll this loop.
  3. declare void @f()
  4. declare void @g()
  5. declare void @h()
  6. define void @trivial_loop() {
  7. ; CHECK-LABEL: @trivial_loop(
  8. entry:
  9. br label %loop
  10. loop:
  11. %idx = phi i32 [ 0, %entry ], [ %idx.inc, %loop ]
  12. %idx.inc = add i32 %idx, 1
  13. call void @f()
  14. call void @g()
  15. call void @h()
  16. call void @f()
  17. call void @g()
  18. call void @h()
  19. call void @f()
  20. call void @g()
  21. call void @h()
  22. call void @f()
  23. call void @g()
  24. call void @h()
  25. call void @f()
  26. call void @g()
  27. call void @h()
  28. %be = icmp slt i32 %idx, 268435456
  29. br i1 %be, label %loop, label %exit
  30. ; CHECK: loop:
  31. ; CHECK-NEXT: %idx = phi i32 [ 0, %entry ], [ %idx.inc, %loop ]
  32. ; CHECK-NEXT: %idx.inc = add i32 %idx, 1
  33. ; CHECK-NEXT: call void @f()
  34. ; CHECK-NEXT: call void @g()
  35. ; CHECK-NEXT: call void @h()
  36. ; CHECK-NEXT: call void @f()
  37. ; CHECK-NEXT: call void @g()
  38. ; CHECK-NEXT: call void @h()
  39. ; CHECK-NEXT: call void @f()
  40. ; CHECK-NEXT: call void @g()
  41. ; CHECK-NEXT: call void @h()
  42. ; CHECK-NEXT: call void @f()
  43. ; CHECK-NEXT: call void @g()
  44. ; CHECK-NEXT: call void @h()
  45. ; CHECK-NEXT: call void @f()
  46. ; CHECK-NEXT: call void @g()
  47. ; CHECK-NEXT: call void @h()
  48. ; CHECK-NEXT: %be = icmp slt i32 %idx, 268435456
  49. ; CHECK-NEXT: br i1 %be, label %loop, label %exit
  50. exit:
  51. ret void
  52. }