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 | 0eea0293d91904d6ffd699c3f7f5a681ac3e5d7a (patch) | |
| tree | 7c005eb654c439c479f6c1fbfeb169a5d8475adc /llvm/lib/Target/X86/X86FastISel.cpp | |
| parent | 759ba0802de4c7afd3dcdc1f15943fbb84ece743 (diff) | |
| download | bcm5719-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.cpp | 6 |
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); |

