| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt < %s -S -passes=simplifycfg -bonus-inst-threshold=1 | FileCheck %s |
| |
| declare ptr @llvm.strip.invariant.group.p0(ptr) |
| |
| declare void @g1() |
| declare void @g2() |
| |
| define void @f(ptr %a, ptr %b, i1 %c, i1 %d, i1 %e) { |
| ; CHECK-LABEL: @f( |
| ; CHECK-NEXT: [[A1:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr [[A:%.*]]) |
| ; CHECK-NEXT: [[B1:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr [[B:%.*]]) |
| ; CHECK-NEXT: [[I:%.*]] = icmp eq ptr [[A1]], [[B1]] |
| ; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[C:%.*]], i1 [[I]], i1 false |
| ; CHECK-NEXT: br i1 [[OR_COND]], label [[L2:%.*]], label [[L3:%.*]] |
| ; CHECK: l2: |
| ; CHECK-NEXT: call void @g1() |
| ; CHECK-NEXT: br label [[RET:%.*]] |
| ; CHECK: l3: |
| ; CHECK-NEXT: call void @g2() |
| ; CHECK-NEXT: br label [[RET]] |
| ; CHECK: ret: |
| ; CHECK-NEXT: ret void |
| ; |
| br i1 %c, label %l1, label %l3 |
| l1: |
| %a1 = call ptr @llvm.strip.invariant.group.p0(ptr %a) |
| %b1 = call ptr @llvm.strip.invariant.group.p0(ptr %b) |
| %i = icmp eq ptr %a1, %b1 |
| br i1 %i, label %l2, label %l3 |
| l2: |
| call void @g1() |
| br label %ret |
| l3: |
| call void @g2() |
| br label %ret |
| ret: |
| ret void |
| } |