diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2011-04-27 01:34:27 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2011-04-27 01:34:27 +0000 |
commit | 547eb4fd560cdd77e06c88eed1722bdb94c82b26 (patch) | |
tree | 229fcef2bd3c86f640ebc98e23f9f12b879cffe5 /lib/Target/X86/X86FastISel.cpp | |
parent | 3f95c88162cf319bce463d0e5e2d99a96c24dff6 (diff) | |
download | external_llvm-547eb4fd560cdd77e06c88eed1722bdb94c82b26.zip external_llvm-547eb4fd560cdd77e06c88eed1722bdb94c82b26.tar.gz external_llvm-547eb4fd560cdd77e06c88eed1722bdb94c82b26.tar.bz2 |
Fix an edge case involving branches in fast-isel on x86.
rdar://problem/9303306 .
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130272 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86FastISel.cpp')
-rw-r--r-- | lib/Target/X86/X86FastISel.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/Target/X86/X86FastISel.cpp b/lib/Target/X86/X86FastISel.cpp index b35ec0d..257b474 100644 --- a/lib/Target/X86/X86FastISel.cpp +++ b/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); |