diff options
| author | Igor Breger <igor.breger@intel.com> | 2017-05-11 06:36:37 +0000 | 
|---|---|---|
| committer | Igor Breger <igor.breger@intel.com> | 2017-05-11 06:36:37 +0000 | 
| commit | db75455990b9eeeb90698a4c518246bf65bfbda4 (patch) | |
| tree | c92767f017cf679cb1658cd2bbaceca5b325d22c /llvm/lib/Target | |
| parent | cf84800ea0219001d493e8e7ecb8ce22bea443cd (diff) | |
| download | bcm5719-llvm-db75455990b9eeeb90698a4c518246bf65bfbda4.tar.gz bcm5719-llvm-db75455990b9eeeb90698a4c518246bf65bfbda4.zip  | |
[X86] Move getX86ConditionCode() from X86FastISel.cpp to X86InstrInfo.cpp. NFC
Summary:
Move getX86ConditionCode() from X86FastISel.cpp to X86InstrInfo.cpp so it can be used by GloabalIsel instruction selector.
This is a pre-commit for a patch I'm working on to support G_ICMP. NFC.
Reviewers: zvi, guyblank, delena
Reviewed By: guyblank, delena
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D33038
llvm-svn: 302767
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/X86FastISel.cpp | 46 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.cpp | 38 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.h | 4 | 
3 files changed, 46 insertions, 42 deletions
diff --git a/llvm/lib/Target/X86/X86FastISel.cpp b/llvm/lib/Target/X86/X86FastISel.cpp index 015306db6b4..fc3b4836c17 100644 --- a/llvm/lib/Target/X86/X86FastISel.cpp +++ b/llvm/lib/Target/X86/X86FastISel.cpp @@ -180,44 +180,6 @@ private:  } // end anonymous namespace. -static std::pair<X86::CondCode, bool> -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); -} -  static std::pair<unsigned, bool>  getX86SSEConditionCode(CmpInst::Predicate Predicate) {    unsigned CC; @@ -1559,7 +1521,7 @@ bool X86FastISel::X86SelectCmp(const Instruction *I) {    X86::CondCode CC;    bool SwapArgs; -  std::tie(CC, SwapArgs) = getX86ConditionCode(Predicate); +  std::tie(CC, SwapArgs) = X86::getX86ConditionCode(Predicate);    assert(CC <= X86::LAST_VALID_COND && "Unexpected condition code.");    unsigned Opc = X86::getSETFromCond(CC); @@ -1697,7 +1659,7 @@ bool X86FastISel::X86SelectBranch(const Instruction *I) {        bool SwapArgs;        unsigned BranchOpc; -      std::tie(CC, SwapArgs) = getX86ConditionCode(Predicate); +      std::tie(CC, SwapArgs) = X86::getX86ConditionCode(Predicate);        assert(CC <= X86::LAST_VALID_COND && "Unexpected condition code.");        BranchOpc = X86::GetCondBranchFromCond(CC); @@ -2070,7 +2032,7 @@ bool X86FastISel::X86FastEmitCMoveSelect(MVT RetVT, const Instruction *I) {      }      bool NeedSwap; -    std::tie(CC, NeedSwap) = getX86ConditionCode(Predicate); +    std::tie(CC, NeedSwap) = X86::getX86ConditionCode(Predicate);      assert(CC <= X86::LAST_VALID_COND && "Unexpected condition code.");      const Value *CmpLHS = CI->getOperand(0); @@ -2319,7 +2281,7 @@ bool X86FastISel::X86FastEmitPseudoSelect(MVT RetVT, const Instruction *I) {    const auto *CI = dyn_cast<CmpInst>(Cond);    if (CI && (CI->getParent() == I->getParent())) {      bool NeedSwap; -    std::tie(CC, NeedSwap) = getX86ConditionCode(CI->getPredicate()); +    std::tie(CC, NeedSwap) = X86::getX86ConditionCode(CI->getPredicate());      if (CC > X86::LAST_VALID_COND)        return false; 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) { diff --git a/llvm/lib/Target/X86/X86InstrInfo.h b/llvm/lib/Target/X86/X86InstrInfo.h index 6120541cc39..e64876073cc 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.h +++ b/llvm/lib/Target/X86/X86InstrInfo.h @@ -64,6 +64,10 @@ enum CondCode {  // Turn condition code into conditional branch opcode.  unsigned GetCondBranchFromCond(CondCode CC); +/// \brief Return a pair of condition code for the given predicate and whether +/// the instruction operands should be swaped to match the condition code. +std::pair<CondCode, bool> getX86ConditionCode(CmpInst::Predicate Predicate); +  /// \brief Return a set opcode for the given condition and whether it has  /// a memory operand.  unsigned getSETFromCond(CondCode CC, bool HasMemoryOperand = false);  | 

