diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2011-05-11 01:03:01 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2011-05-11 01:03:01 +0000 |
| commit | 05fc35e275529eddb6c73bed7595bd7cec93f27a (patch) | |
| tree | fc85d3171c18033d0c423f5fca9bc627faa4ef05 /llvm/test/CodeGen/X86/hoist-common.ll | |
| parent | 4a34e61e53b4a87365b0352256735e104b84d055 (diff) | |
| download | bcm5719-llvm-05fc35e275529eddb6c73bed7595bd7cec93f27a.tar.gz bcm5719-llvm-05fc35e275529eddb6c73bed7595bd7cec93f27a.zip | |
Add a late optimization to BranchFolding that hoist common instruction sequences
at the start of basic blocks to their common predecessor. It's actually quite
common (e.g. about 50 times in JM/lencod) and has shown to be a nice code size
benefit. e.g.
pushq %rax
testl %edi, %edi
jne LBB0_2
## BB#1:
xorb %al, %al
popq %rdx
ret
LBB0_2:
xorb %al, %al
callq _foo
popq %rdx
ret
=>
pushq %rax
xorb %al, %al
testl %edi, %edi
je LBB0_2
## BB#1:
callq _foo
LBB0_2:
popq %rdx
ret
rdar://9145558
llvm-svn: 131172
Diffstat (limited to 'llvm/test/CodeGen/X86/hoist-common.ll')
| -rw-r--r-- | llvm/test/CodeGen/X86/hoist-common.ll | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/hoist-common.ll b/llvm/test/CodeGen/X86/hoist-common.ll new file mode 100644 index 00000000000..2b1550a4ffa --- /dev/null +++ b/llvm/test/CodeGen/X86/hoist-common.ll @@ -0,0 +1,28 @@ +; RUN: llc < %s -march=x86-64 | FileCheck %s + +; Common "xorb al, al" instruction in the two successor blocks should be +; moved to the entry block above the test + je. + +; rdar://9145558 + +define zeroext i1 @t(i32 %c) nounwind ssp { +entry: +; CHECK: t: +; CHECK: xorb %al, %al +; CHECK: test +; CHECK: je + %tobool = icmp eq i32 %c, 0 + br i1 %tobool, label %return, label %if.then + +if.then: +; CHECK: callq + %call = tail call zeroext i1 (...)* @foo() nounwind + br label %return + +return: +; CHECK: ret + %retval.0 = phi i1 [ %call, %if.then ], [ false, %entry ] + ret i1 %retval.0 +} + +declare zeroext i1 @foo(...) |

