diff options
Diffstat (limited to 'llvm/lib/Target/X86/X86InstrInfo.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.cpp | 38 | 
1 files changed, 38 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp index 888daa27526..33c9fcf839e 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.cpp +++ b/llvm/lib/Target/X86/X86InstrInfo.cpp @@ -5729,6 +5729,44 @@ static X86::CondCode getSwappedCondition(X86::CondCode CC) {    }  } +std::pair<X86::CondCode, bool> +X86::getX86ConditionCode(CmpInst::Predicate Predicate) { +  X86::CondCode CC = X86::COND_INVALID; +  bool NeedSwap = false; +  switch (Predicate) { +  default: break; +  // Floating-point Predicates +  case CmpInst::FCMP_UEQ: CC = X86::COND_E;       break; +  case CmpInst::FCMP_OLT: NeedSwap = true;        LLVM_FALLTHROUGH; +  case CmpInst::FCMP_OGT: CC = X86::COND_A;       break; +  case CmpInst::FCMP_OLE: NeedSwap = true;        LLVM_FALLTHROUGH; +  case CmpInst::FCMP_OGE: CC = X86::COND_AE;      break; +  case CmpInst::FCMP_UGT: NeedSwap = true;        LLVM_FALLTHROUGH; +  case CmpInst::FCMP_ULT: CC = X86::COND_B;       break; +  case CmpInst::FCMP_UGE: NeedSwap = true;        LLVM_FALLTHROUGH; +  case CmpInst::FCMP_ULE: CC = X86::COND_BE;      break; +  case CmpInst::FCMP_ONE: CC = X86::COND_NE;      break; +  case CmpInst::FCMP_UNO: CC = X86::COND_P;       break; +  case CmpInst::FCMP_ORD: CC = X86::COND_NP;      break; +  case CmpInst::FCMP_OEQ:                         LLVM_FALLTHROUGH; +  case CmpInst::FCMP_UNE: CC = X86::COND_INVALID; break; + +  // Integer Predicates +  case CmpInst::ICMP_EQ:  CC = X86::COND_E;       break; +  case CmpInst::ICMP_NE:  CC = X86::COND_NE;      break; +  case CmpInst::ICMP_UGT: CC = X86::COND_A;       break; +  case CmpInst::ICMP_UGE: CC = X86::COND_AE;      break; +  case CmpInst::ICMP_ULT: CC = X86::COND_B;       break; +  case CmpInst::ICMP_ULE: CC = X86::COND_BE;      break; +  case CmpInst::ICMP_SGT: CC = X86::COND_G;       break; +  case CmpInst::ICMP_SGE: CC = X86::COND_GE;      break; +  case CmpInst::ICMP_SLT: CC = X86::COND_L;       break; +  case CmpInst::ICMP_SLE: CC = X86::COND_LE;      break; +  } + +  return std::make_pair(CC, NeedSwap); +} +  /// Return a set opcode for the given condition and  /// whether it has memory operand.  unsigned X86::getSETFromCond(CondCode CC, bool HasMemoryOperand) {  | 

