| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py | |
| ; RUN: opt < %s -passes=instcombine,simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s | |
| ; instcombine should sort the PHI operands so that simplifycfg can see the | |
| ; duplicate and remove it. | |
| define i32 @foo(i1 %t) { | |
| ; CHECK-LABEL: @foo( | |
| ; CHECK-NEXT: entry: | |
| ; CHECK-NEXT: call void @bar() | |
| ; CHECK-NEXT: br i1 [[T:%.*]], label [[TRUE:%.*]], label [[FALSE:%.*]] | |
| ; CHECK: true: | |
| ; CHECK-NEXT: call void @bar() | |
| ; CHECK-NEXT: br label [[FALSE]] | |
| ; CHECK: false: | |
| ; CHECK-NEXT: [[A:%.*]] = phi i32 [ 4, [[TRUE]] ], [ 10, [[ENTRY:%.*]] ] | |
| ; CHECK-NEXT: call void @bar() | |
| ; CHECK-NEXT: ret i32 [[A]] | |
| ; | |
| entry: | |
| call void @bar() | |
| br i1 %t, label %true, label %false | |
| true: | |
| call void @bar() | |
| br label %false | |
| false: | |
| %a = phi i32 [ 2, %true ], [ 5, %entry ] | |
| %b = phi i32 [ 5, %entry ], [ 2, %true ] | |
| call void @bar() | |
| %c = add i32 %a, %b | |
| ret i32 %c | |
| } | |
| declare void @bar() |