summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86FastISel.cpp
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2011-04-27 01:34:27 +0000
committerEli Friedman <eli.friedman@gmail.com>2011-04-27 01:34:27 +0000
commit0eea0293d91904d6ffd699c3f7f5a681ac3e5d7a (patch)
tree7c005eb654c439c479f6c1fbfeb169a5d8475adc /llvm/lib/Target/X86/X86FastISel.cpp
parent759ba0802de4c7afd3dcdc1f15943fbb84ece743 (diff)
downloadbcm5719-llvm-0eea0293d91904d6ffd699c3f7f5a681ac3e5d7a.tar.gz
bcm5719-llvm-0eea0293d91904d6ffd699c3f7f5a681ac3e5d7a.zip
Fix an edge case involving branches in fast-isel on x86.
rdar://problem/9303306 . llvm-svn: 130272
Diffstat (limited to 'llvm/lib/Target/X86/X86FastISel.cpp')
-rw-r--r--llvm/lib/Target/X86/X86FastISel.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86FastISel.cpp b/llvm/lib/Target/X86/X86FastISel.cpp
index b35ec0d3a3f..257b4741cee 100644
--- a/llvm/lib/Target/X86/X86FastISel.cpp
+++ b/llvm/lib/Target/X86/X86FastISel.cpp
@@ -1098,11 +1098,13 @@ bool X86FastISel::X86SelectBranch(const Instruction *I) {
}
// Otherwise do a clumsy setcc and re-test it.
+ // Note that i1 essentially gets ANY_EXTEND'ed to i8 where it isn't used
+ // in an explicit cast, so make sure to handle that correctly.
unsigned OpReg = getRegForValue(BI->getCondition());
if (OpReg == 0) return false;
- BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(X86::TEST8rr))
- .addReg(OpReg).addReg(OpReg);
+ BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(X86::TEST8ri))
+ .addReg(OpReg).addImm(1);
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(X86::JNE_4))
.addMBB(TrueMBB);
FastEmitBranch(FalseMBB, DL);
OpenPOWER on IntegriCloud