| ; 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} | |
| ;. |