| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: opt < %s -passes="require<no-op-loop>" -S | FileCheck %s |
| ; RUN: opt < %s -passes="loop(invalidate<all>)" -S | FileCheck %s |
| |
| ;; Test that if we have a loop out of LCSSA in an optnone function, we do not |
| ;; assert when we require a loop analysis. |
| |
| define i32 @foo() #0 { |
| ; CHECK-LABEL: define i32 @foo( |
| ; CHECK-SAME: ) #[[ATTR0:[0-9]+]] { |
| ; CHECK-NEXT: [[ENTRY:.*:]] |
| ; CHECK-NEXT: br label %[[FOR_COND:.*]] |
| ; CHECK: [[FOR_COND]]: |
| ; CHECK-NEXT: [[TMP0:%.*]] = add i16 0, 0 |
| ; CHECK-NEXT: br i1 false, label %[[FOR_COND]], label %[[HANDLER_POINTER_OVERFLOW:.*]] |
| ; CHECK: [[HANDLER_POINTER_OVERFLOW]]: |
| ; CHECK-NEXT: [[TMP1:%.*]] = zext i16 [[TMP0]] to i32 |
| ; CHECK-NEXT: ret i32 [[TMP1]] |
| ; |
| entry: |
| br label %for.cond |
| for.cond: |
| %0 = add i16 0, 0 |
| br i1 false, label %for.cond, label %handler.pointer_overflow |
| handler.pointer_overflow: |
| %1 = zext i16 %0 to i32 |
| ret i32 %1 |
| } |
| |
| attributes #0 = { noinline optnone } |