|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
| 2 | +; RUN: opt < %s -passes=constraint-elimination -S | FileCheck %s |
| 3 | + |
| 4 | +define i32 @foo() { |
| 5 | +; CHECK-LABEL: define i32 @foo() { |
| 6 | +; CHECK-NEXT: init: |
| 7 | +; CHECK-NEXT: br label %[[OUTER_LOOP_CONTROL:.*]] |
| 8 | +; CHECK: outer.loop.control: |
| 9 | +; CHECK-NEXT: [[X_0:%.*]] = phi i32 [ 0, [[INIT:%.*]] ], [ [[X_OUTER:%.*]], %[[OUTER_LOOP_INC:.*]] ] |
| 10 | +; CHECK-NEXT: [[TMP0:%.*]] = icmp slt i32 [[X_0]], 10 |
| 11 | +; CHECK-NEXT: br i1 [[TMP0]], label %[[INNER_LOOP_CONTROL:.*]], label %[[EXIT:.*]] |
| 12 | +; CHECK: inner.loop.control: |
| 13 | +; CHECK-NEXT: [[X_1:%.*]] = phi i32 [ [[X_0]], %[[OUTER_LOOP_CONTROL]] ], [ [[X_INNER:%.*]], %[[INNER_LOOP_BODY:.*]] ] |
| 14 | +; CHECK-NEXT: br i1 false, label %[[INNER_LOOP_BODY]], label %[[OUTER_LOOP_INC]] |
| 15 | +; CHECK: inner.loop.body: |
| 16 | +; CHECK-NEXT: [[X_INNER]] = add nsw i32 [[X_1]], -1 |
| 17 | +; CHECK-NEXT: br label %[[INNER_LOOP_CONTROL]] |
| 18 | +; CHECK: outer.loop.inc: |
| 19 | +; CHECK-NEXT: [[X_OUTER]] = add nsw i32 [[X_1]], 2 |
| 20 | +; CHECK-NEXT: br label %[[OUTER_LOOP_CONTROL]] |
| 21 | +; CHECK: exit: |
| 22 | +; CHECK-NEXT: ret i32 [[X_0]] |
| 23 | +; |
| 24 | +init: |
| 25 | + br label %outer.loop.control |
| 26 | + |
| 27 | +outer.loop.control: ; preds = %init, %outer.loop.inc |
| 28 | + %x.0 = phi i32 [ 0, %init ], [ %x.outer, %outer.loop.inc ] |
| 29 | + %0 = icmp slt i32 %x.0, 10 |
| 30 | + br i1 %0, label %inner.loop.control, label %exit |
| 31 | + |
| 32 | +inner.loop.control: ; preds = %outer.loop.control, %inner.loop.body |
| 33 | + %x.1 = phi i32 [ %x.0, %outer.loop.control ], [ %x.inner, %inner.loop.body ] |
| 34 | + %1 = icmp sgt i32 %x.1, 20 |
| 35 | + br i1 %1, label %inner.loop.body, label %outer.loop.inc |
| 36 | + |
| 37 | +inner.loop.body: ; preds = %inner.loop.control |
| 38 | + %x.inner = add nsw i32 %x.1, -1 |
| 39 | + br label %inner.loop.control |
| 40 | + |
| 41 | +outer.loop.inc: ; preds = %inner.loop.control |
| 42 | + %x.outer = add nsw i32 %x.1, 2 |
| 43 | + br label %outer.loop.control |
| 44 | + |
| 45 | +exit: ; preds = %1 |
| 46 | + ret i32 %x.0 |
| 47 | +} |
0 commit comments