diff options
author | Chris Lattner <sabre@nondot.org> | 2011-04-19 04:26:32 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2011-04-19 04:26:32 +0000 |
commit | c76d12180765782d6abd0fdeb359c3fec7983e2c (patch) | |
tree | 42579220a1a5fe66b92c697d47107cc99af291af | |
parent | 90cb88a9b43764ae945e137bcb83fe14ac97d6fd (diff) | |
download | external_llvm-c76d12180765782d6abd0fdeb359c3fec7983e2c.zip external_llvm-c76d12180765782d6abd0fdeb359c3fec7983e2c.tar.gz external_llvm-c76d12180765782d6abd0fdeb359c3fec7983e2c.tar.bz2 |
be layout aware, to produce:
testb $1, %al
je LBB0_2
## BB#1: ## %if.then
movb $0, %al
instead of:
testb $1, %al
jne LBB0_1
jmp LBB0_2
LBB0_1: ## %if.then
movb $0, %al
how 'bout that.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129749 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/X86/X86FastISel.cpp | 9 | ||||
-rw-r--r-- | test/CodeGen/X86/fast-isel-x86-64.ll | 2 |
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/Target/X86/X86FastISel.cpp b/lib/Target/X86/X86FastISel.cpp index 2c92961..77e67a1 100644 --- a/lib/Target/X86/X86FastISel.cpp +++ b/lib/Target/X86/X86FastISel.cpp @@ -1084,7 +1084,14 @@ bool X86FastISel::X86SelectBranch(const Instruction *I) { if (OpReg == 0) return false; BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TestOpc)) .addReg(OpReg).addImm(1); - BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(X86::JNE_4)) + + unsigned JmpOpc = X86::JNE_4; + if (FuncInfo.MBB->isLayoutSuccessor(TrueMBB)) { + std::swap(TrueMBB, FalseMBB); + JmpOpc = X86::JE_4; + } + + BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(JmpOpc)) .addMBB(TrueMBB); FastEmitBranch(FalseMBB, DL); FuncInfo.MBB->addSuccessor(TrueMBB); diff --git a/test/CodeGen/X86/fast-isel-x86-64.ll b/test/CodeGen/X86/fast-isel-x86-64.ll index fe8530c..0c289e3 100644 --- a/test/CodeGen/X86/fast-isel-x86-64.ll +++ b/test/CodeGen/X86/fast-isel-x86-64.ll @@ -142,5 +142,7 @@ if.end: ; preds = %if.then, %entry ret void ; CHECK: test12: ; CHECK: testb $1, +; CHECK-NEXT: je L +; CHECK-NEXT: movb $0, %al } |