aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2011-04-19 04:26:32 +0000
committerChris Lattner <sabre@nondot.org>2011-04-19 04:26:32 +0000
commitc76d12180765782d6abd0fdeb359c3fec7983e2c (patch)
tree42579220a1a5fe66b92c697d47107cc99af291af
parent90cb88a9b43764ae945e137bcb83fe14ac97d6fd (diff)
downloadexternal_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.cpp9
-rw-r--r--test/CodeGen/X86/fast-isel-x86-64.ll2
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
}