diff options
| author | Craig Topper <craig.topper@intel.com> | 2018-02-20 03:58:11 +0000 | 
|---|---|---|
| committer | Craig Topper <craig.topper@intel.com> | 2018-02-20 03:58:11 +0000 | 
| commit | 9b64bf54b97157bfe46987ce5638fcb78cca76b4 (patch) | |
| tree | 2c0cb59edf703544d510c4987fa49bf1129796ae /llvm | |
| parent | 0848210b745638d297546508f4070ffbe535ab9c (diff) | |
| download | bcm5719-llvm-9b64bf54b97157bfe46987ce5638fcb78cca76b4.tar.gz bcm5719-llvm-9b64bf54b97157bfe46987ce5638fcb78cca76b4.zip  | |
[X86] Make a helper function for commuting AVX512 VPCMP immediates since we do it in two places.
llvm-svn: 325546
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrAVX512.td | 13 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.cpp | 31 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.h | 4 | 
3 files changed, 24 insertions, 24 deletions
diff --git a/llvm/lib/Target/X86/X86InstrAVX512.td b/llvm/lib/Target/X86/X86InstrAVX512.td index 23432072e98..a5a15e84189 100644 --- a/llvm/lib/Target/X86/X86InstrAVX512.td +++ b/llvm/lib/Target/X86/X86InstrAVX512.td @@ -2233,18 +2233,7 @@ defm VPCMPGTQ : avx512_icmp_packed_rmb_vl<0x37, "vpcmpgtq", X86pcmpgtm,  // operand.  def CommutePCMPCC : SDNodeXForm<imm, [{    uint8_t Imm = N->getZExtValue() & 0x7; -  switch (Imm) { -  default: llvm_unreachable("Unreachable!"); -  case 0x01: Imm = 0x06; break; // LT  -> NLE -  case 0x02: Imm = 0x05; break; // LE  -> NLT -  case 0x05: Imm = 0x02; break; // NLT -> LE -  case 0x06: Imm = 0x01; break; // NLE -> LT -  case 0x00: // EQ -  case 0x03: // FALSE -  case 0x04: // NE -  case 0x07: // TRUE -    break; -  } +  Imm = X86::getSwappedVPCMPImm(Imm);    return getI8Imm(Imm, SDLoc(N));  }]>; diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp index ab6ea1e06bc..8fb33512fc6 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.cpp +++ b/llvm/lib/Target/X86/X86InstrInfo.cpp @@ -5399,18 +5399,7 @@ MachineInstr *X86InstrInfo::commuteInstructionImpl(MachineInstr &MI, bool NewMI,    case X86::VPCMPWZrrik:    case X86::VPCMPUWZrrik: {      // Flip comparison mode immediate (if necessary).      unsigned Imm = MI.getOperand(MI.getNumOperands() - 1).getImm() & 0x7; -    switch (Imm) { -    default: llvm_unreachable("Unreachable!"); -    case 0x01: Imm = 0x06; break; // LT  -> NLE -    case 0x02: Imm = 0x05; break; // LE  -> NLT -    case 0x05: Imm = 0x02; break; // NLT -> LE -    case 0x06: Imm = 0x01; break; // NLE -> LT -    case 0x00: // EQ -    case 0x03: // FALSE -    case 0x04: // NE -    case 0x07: // TRUE -      break; -    } +    Imm = X86::getSwappedVPCMPImm(Imm);      auto &WorkingMI = cloneIfNew(MI);      WorkingMI.getOperand(MI.getNumOperands() - 1).setImm(Imm);      return TargetInstrInfo::commuteInstructionImpl(WorkingMI, /*NewMI=*/false, @@ -6133,6 +6122,24 @@ unsigned X86::getCMovFromCond(CondCode CC, unsigned RegBytes,    }  } +/// \brief Get the VPCMP immediate if the opcodes are swapped. +unsigned X86::getSwappedVPCMPImm(unsigned Imm) { +  switch (Imm) { +  default: llvm_unreachable("Unreachable!"); +  case 0x01: Imm = 0x06; break; // LT  -> NLE +  case 0x02: Imm = 0x05; break; // LE  -> NLT +  case 0x05: Imm = 0x02; break; // NLT -> LE +  case 0x06: Imm = 0x01; break; // NLE -> LT +  case 0x00: // EQ +  case 0x03: // FALSE +  case 0x04: // NE +  case 0x07: // TRUE +    break; +  } + +  return Imm; +} +  bool X86InstrInfo::isUnpredicatedTerminator(const MachineInstr &MI) const {    if (!MI.isTerminator()) return false; diff --git a/llvm/lib/Target/X86/X86InstrInfo.h b/llvm/lib/Target/X86/X86InstrInfo.h index b1b5a4a421d..5a2e00152e8 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.h +++ b/llvm/lib/Target/X86/X86InstrInfo.h @@ -83,6 +83,10 @@ CondCode getCondFromCMovOpc(unsigned Opc);  /// GetOppositeBranchCondition - Return the inverse of the specified cond,  /// e.g. turning COND_E to COND_NE.  CondCode GetOppositeBranchCondition(CondCode CC); + +/// \brief Get the VPCMP immediate if the opcodes are swapped. +unsigned getSwappedVPCMPImm(unsigned Imm); +  } // namespace X86  /// isGlobalStubReference - Return true if the specified TargetFlag operand is  | 

