| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: opt -passes=loop-unroll -S < %s | FileCheck %s |
| |
| ; llvm.loop.estimated_trip_count can't actually become a negative value. |
| ; It must be treated as an unsigned all around. |
| ; We are testing the overflow case of EstimatedTripCount + AlreadyPeeled |
| ; e.g AlreadyPeeled == 1 and EstimatedTripCount == -1 (INT_MAX) |
| ; would overflow the <= MaxPeelCount check and peel for a long time. |
| |
| define void @PR173169() !prof !0 { |
| ; CHECK-LABEL: define void @PR173169( |
| ; CHECK-SAME: ) !prof [[PROF0:![0-9]+]] { |
| ; CHECK-NEXT: [[ENTRY:.*:]] |
| ; CHECK-NEXT: br label %[[LOOP:.*]] |
| ; CHECK: [[LOOP]]: |
| ; CHECK-NEXT: br i1 true, label %[[LOOP]], label %[[EXIT:.*]], !llvm.loop [[LOOP1:![0-9]+]] |
| ; CHECK: [[EXIT]]: |
| ; CHECK-NEXT: ret void |
| ; |
| entry: |
| br label %loop |
| |
| loop: ; preds = %loop, %entry |
| br i1 true, label %loop, label %exit, !llvm.loop !1 |
| |
| exit: ; preds = %loop |
| ret void |
| } |
| |
| !0 = !{!"function_entry_count", i64 1000} |
| !1 = distinct !{!1, !2, !3} |
| !2 = !{!"llvm.loop.peeled.count", i32 1} |
| !3 = !{!"llvm.loop.estimated_trip_count", i32 -1} |
| ;. |
| ; CHECK: [[PROF0]] = !{!"function_entry_count", i64 1000} |
| ; CHECK: [[LOOP1]] = distinct !{[[LOOP1]], [[META2:![0-9]+]], [[META3:![0-9]+]]} |
| ; CHECK: [[META2]] = !{!"llvm.loop.peeled.count", i32 1} |
| ; CHECK: [[META3]] = !{!"llvm.loop.estimated_trip_count", i32 -1} |
| ;. |