| ; RUN: opt < %s -callsite-splitting -S | FileCheck %s |
| ; RUN: opt < %s -passes='function(callsite-splitting)' -S | FileCheck %s |
| |
| define i32 @callee(i32*, i32, i32) { |
| ret i32 10 |
| } |
| |
| ; CHECK-LABEL: @test_preds_equal |
| ; CHECK-NOT: split |
| ; CHECK: br i1 %cmp, label %Tail, label %Tail |
| define i32 @test_preds_equal(i32* %a, i32 %v, i32 %p) { |
| TBB: |
| %cmp = icmp eq i32* %a, null |
| br i1 %cmp, label %Tail, label %Tail |
| Tail: |
| %r = call i32 @callee(i32* %a, i32 %v, i32 %p) |
| ret i32 %r |
| } |
| |
| define void @fn1(i16 %p1) { |
| entry: |
| ret void |
| } |
| |
| define void @fn2() { |
| ret void |
| |
| ; Unreachable code below |
| |
| for.inc: ; preds = %for.inc |
| br i1 undef, label %for.end6, label %for.inc |
| |
| for.end6: ; preds = %for.inc |
| br i1 undef, label %lor.rhs, label %lor.end |
| |
| lor.rhs: ; preds = %for.end6 |
| br label %lor.end |
| |
| lor.end: ; preds = %for.end6, %lor.rhs |
| call void @fn1(i16 0) |
| ret void |
| } |