diff options
Diffstat (limited to 'lib/Target/X86/X86ISelLowering.cpp')
-rw-r--r-- | lib/Target/X86/X86ISelLowering.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index c0831a734a..3dbedba7b9 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -1970,28 +1970,25 @@ static bool translateX86CC(ISD::CondCode SetCCOpcode, bool isFP, case ISD::SETUGE: X86CC = X86::COND_AE; break; } } else { - // First determine if it requires or is profitable to flip the operands. - bool Flip = false; + // First determine if it is required or is profitable to flip the operands. + + // If LHS is a foldable load, but RHS is not, flip the condition. + if ((ISD::isNON_EXTLoad(LHS.getNode()) && LHS.hasOneUse()) && + !(ISD::isNON_EXTLoad(RHS.getNode()) && RHS.hasOneUse())) { + SetCCOpcode = getSetCCSwappedOperands(SetCCOpcode); + std::swap(LHS, RHS); + } + switch (SetCCOpcode) { default: break; case ISD::SETOLT: case ISD::SETOLE: case ISD::SETUGT: case ISD::SETUGE: - Flip = true; + std::swap(LHS, RHS); break; } - // If LHS is a foldable load, but RHS is not, flip the condition. - if (!Flip && - (ISD::isNON_EXTLoad(LHS.getNode()) && LHS.hasOneUse()) && - !(ISD::isNON_EXTLoad(RHS.getNode()) && RHS.hasOneUse())) { - SetCCOpcode = getSetCCSwappedOperands(SetCCOpcode); - Flip = true; - } - if (Flip) - std::swap(LHS, RHS); - // On a floating point condition, the flags are set as follows: // ZF PF CF op // 0 | 0 | 0 | X > Y |