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 | |
| 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')
| -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);  | 

