From ad6af45dc172fe23801771200eabb6a7f764e2cb Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Thu, 12 Nov 2009 00:39:10 +0000 Subject: Tail merge at any size when there are two potentials blocks and one can be made to fall through into the other. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86909 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/X86/tail-opts.ll | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'test/CodeGen/X86/tail-opts.ll') diff --git a/test/CodeGen/X86/tail-opts.ll b/test/CodeGen/X86/tail-opts.ll index 79825b7fd5..fdf96d6086 100644 --- a/test/CodeGen/X86/tail-opts.ll +++ b/test/CodeGen/X86/tail-opts.ll @@ -266,3 +266,30 @@ bb3: ; preds = %bb2, %bb1, %lvalue_ declare fastcc i32 @lvalue_p(%union.tree_node* nocapture) nounwind readonly declare fastcc %union.tree_node* @default_conversion(%union.tree_node*) nounwind + + +; If one tail merging candidate falls through into the other, +; tail merging is likely profitable regardless of how few +; instructions are involved. This function should have only +; one ret instruction. + +; CHECK: foo: +; CHECK: call func +; CHECK-NEXT: .LBB5_2: +; CHECK-NEXT: addq $8, %rsp +; CHECK-NEXT: ret + +define void @foo(i1* %V) nounwind { +entry: + %t0 = icmp eq i1* %V, null + br i1 %t0, label %return, label %bb + +bb: + call void @func() + ret void + +return: + ret void +} + +declare void @func() -- cgit v1.2.3