[llvm] r356343 - [X86] Remove the _alt forms of XOP VPCOM instructions. Use a combination of custom printing and custom parsing to achieve the same result and more

Mikael Holmén via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 18 00:24:40 PDT 2019



On 3/18/19 8:04 AM, Craig Topper wrote:
> Sorry about that. Hopefully fixed after r356359.

Thanks! Now it's silent.

> Is clang less 
> aggressive with that warning in newer versions?

Don't know, but I suppose so since I suspect some build bots using 
werror would have failed otherwise?

Anyway, now old clang is happy too :)
/Mikael

> 
> ~Craig
> 
> On Sun, Mar 17, 2019 at 11:52 PM Mikael Holmén via llvm-commits 
> <llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>> wrote:
> 
>     Hi Craig,
> 
>     I get compilation warnings with clang 3.6 and gcc 7.4 on this patch:
> 
>     ../lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp:99:13: error:
>     comparison of unsigned expression >= 0 is always true
>     [-Werror,-Wtautological-compare]
>           if (Imm >= 0 && Imm <= 7) {
>               ~~~ ^  ~
>     ../lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp:176:14: error:
>     comparison of unsigned expression >= 0 is always true
>     [-Werror,-Wtautological-compare]
>           if ((Imm >= 0 && Imm <= 2) || (Imm >= 4 && Imm <= 6)) {
>                ~~~ ^  ~
>     2 errors generated.
> 
>     and
> 
>     ../lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp:80:13: error:
>     comparison of unsigned expression >= 0 is always true
>     [-Werror,-Wtautological-compare]
>           if (Imm >= 0 && Imm <= 7) {
>               ~~~ ^  ~
>     ../lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp:155:14: error:
>     comparison of unsigned expression >= 0 is always true
>     [-Werror,-Wtautological-compare]
>           if ((Imm >= 0 && Imm <= 2) || (Imm >= 4 && Imm <= 6)) {
>                ~~~ ^  ~
>     2 errors generated.
> 
> 
>     On 3/17/19 10:21 PM, Craig Topper via llvm-commits wrote:
>      > Author: ctopper
>      > Date: Sun Mar 17 14:21:37 2019
>      > New Revision: 356343
>      >
>      > URL: http://llvm.org/viewvc/llvm-project?rev=356343&view=rev
>      > Log:
>      > [X86] Remove the _alt forms of XOP VPCOM instructions. Use a
>     combination of custom printing and custom parsing to achieve the
>     same result and more
>      >
>      > Previously we had a regular form of the instruction used when the
>     immediate was 0-7. And _alt form that allowed the full 8 bit
>     immediate. Codegen would always use the 0-7 form since the immediate
>     was always checked to be in range. Assembly parsing would use the
>     0-7 form when a mnemonic like vpcomtrueb was used. If the immediate
>     was specified directly the _alt form was used. The disassembler
>     would prefer to use the 0-7 form instruction when the immediate was
>     in range and the _alt form otherwise. This way disassembly would
>     print the most readable form when possible.
>      >
>      > The assembly parsing for things like vpcomtrueb relied on
>     splitting the mnemonic into 3 pieces. A "vpcom" prefix, an immediate
>     representing the "true", and a suffix of "b". The tablegenerated
>     printing code would similarly print a "vpcom" prefix, decode the
>     immediate into a string, and then print "b".
>      >
>      > The _alt form on the other hand parsed and printed like any other
>     instruction with no specialness.
>      >
>      > With this patch we drop to one form and solve the disassembly
>     printing issue by doing custom printing when the immediate is 0-7.
>     The parsing code has been tweaked to turn "vpcomtrueb" into "vpcomb"
>     and then the immediate for the "true" is inserted either before or
>     after the other operands depending on at&t or intel syntax.
>      >
>      > I'd rather not do the custom printing, but I tried using an
>     InstAlias for each possible mnemonic for all 8 immediates for all 16
>     combinations of element size, signedness, and memory/register. The
>     code emitted into printAliasInstr ended up checking the number of
>     operands, the register class of each operand, and the immediate for
>     all 256 aliases. This was repeated for both the at&t and intel
>     printer. Despite a lot of common checks between all of the aliases,
>     when compiled with clang at least this commonality was not well
>     optimized. Nor do all the checks seem necessary. Since I want to do
>     a similar thing for vcmpps/pd/ss/sd which have 32 immediate values
>     and 3 encoding flavors, 3 register sizes, etc. This didn't seem to
>     scale well for clang binary size. So custom printing seemed a better
>     trade off.
>      >
>      > I also considered just using the InstAlias for the matching and
>     not the printing. But that seemed like it would add a lot of extra
>     rows to the matcher table. Especially given that the 32 immediates
>     for vpcmpps have 46 strings associated with them.
>      >
>      > Differential Revision: https://reviews.llvm.org/D59398
>      >
>      > Modified:
>      >      llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp
>      >      llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp
>      >      llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
>      >      llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h
>      >      llvm/trunk/lib/Target/X86/InstPrinter/X86InstPrinterCommon.cpp
>      >      llvm/trunk/lib/Target/X86/InstPrinter/X86InstPrinterCommon.h
>      >      llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp
>      >      llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h
>      >      llvm/trunk/lib/Target/X86/X86InstrInfo.td
>      >      llvm/trunk/lib/Target/X86/X86InstrXOP.td
>      >      llvm/trunk/test/tools/llvm-mca/X86/BdVer2/resources-xop.s
>      >      llvm/trunk/test/tools/llvm-mca/X86/Generic/resources-xop.s
>      >      llvm/trunk/utils/TableGen/X86RecognizableInstr.cpp
>      >
>      > Modified: llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp
>      > URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp?rev=356343&r1=356342&r2=356343&view=diff
>      >
>     ==============================================================================
>      > --- llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp (original)
>      > +++ llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp Sun Mar
>     17 14:21:37 2019
>      > @@ -2414,13 +2414,15 @@ bool X86AsmParser::ParseInstruction(Pars
>      >       }
>      >     }
>      >
>      > +  unsigned ComparisonCode = ~0U;
>      > +
>      >     // FIXME: Hack to recognize vpcom<comparison
>     code>{ub,uw,ud,uq,b,w,d,q}.
>      >     if (PatchedName.startswith("vpcom") &&
>      > -      (PatchedName.endswith("b") || PatchedName.endswith("w") ||
>      > -       PatchedName.endswith("d") || PatchedName.endswith("q"))) {
>      > -    unsigned CCIdx = PatchedName.drop_back().back() == 'u' ? 2 : 1;
>      > -    unsigned ComparisonCode = StringSwitch<unsigned>(
>      > -      PatchedName.slice(5, PatchedName.size() - CCIdx))
>      > +      (PatchedName.back() == 'b' || PatchedName.back() == 'w' ||
>      > +       PatchedName.back() == 'd' || PatchedName.back() == 'q')) {
>      > +    unsigned SuffixSize = PatchedName.drop_back().back() == 'u'
>     ? 2 : 1;
>      > +    unsigned CC = StringSwitch<unsigned>(
>      > +      PatchedName.slice(5, PatchedName.size() - SuffixSize))
>      >         .Case("lt",    0x0)
>      >         .Case("le",    0x1)
>      >         .Case("gt",    0x2)
>      > @@ -2430,14 +2432,16 @@ bool X86AsmParser::ParseInstruction(Pars
>      >         .Case("false", 0x6)
>      >         .Case("true",  0x7)
>      >         .Default(~0U);
>      > -    if (ComparisonCode != ~0U) {
>      > -      Operands.push_back(X86Operand::CreateToken("vpcom", NameLoc));
>      > -
>      > -      const MCExpr *ImmOp = MCConstantExpr::create(ComparisonCode,
>      > -                                                 
>       getParser().getContext());
>      > -      Operands.push_back(X86Operand::CreateImm(ImmOp, NameLoc,
>     NameLoc));
>      > -
>      > -      PatchedName = PatchedName.substr(PatchedName.size() - CCIdx);
>      > +    if (CC != ~0U) {
>      > +      switch (PatchedName.back()) {
>      > +      default: llvm_unreachable("Unexpected character!");
>      > +      case 'b': PatchedName = SuffixSize == 2 ? "vpcomub" :
>     "vpcomb"; break;
>      > +      case 'w': PatchedName = SuffixSize == 2 ? "vpcomuw" :
>     "vpcomw"; break;
>      > +      case 'd': PatchedName = SuffixSize == 2 ? "vpcomud" :
>     "vpcomd"; break;
>      > +      case 'q': PatchedName = SuffixSize == 2 ? "vpcomuq" :
>     "vpcomq"; break;
>      > +      }
>      > +      // Set up the immediate to push into the operands later.
>      > +      ComparisonCode = CC;
>      >       }
>      >     }
>      >
>      > @@ -2510,6 +2514,13 @@ bool X86AsmParser::ParseInstruction(Pars
>      >
>      >     Operands.push_back(X86Operand::CreateToken(PatchedName,
>     NameLoc));
>      >
>      > +  // Push the immediate if we extracted one from the mnemonic.
>      > +  if (ComparisonCode != ~0U && !isParsingIntelSyntax()) {
>      > +    const MCExpr *ImmOp = MCConstantExpr::create(ComparisonCode,
>      > +                                               
>       getParser().getContext());
>      > +    Operands.push_back(X86Operand::CreateImm(ImmOp, NameLoc,
>     NameLoc));
>      > +  }
>      > +
>      >     // This does the actual operand parsing.  Don't parse any
>     more if we have a
>      >     // prefix juxtaposed with an operation like "lock incl
>     4(%rax)", because we
>      >     // just want to parse the "lock" as the first instruction and
>     the "incl" as
>      > @@ -2544,6 +2555,13 @@ bool X86AsmParser::ParseInstruction(Pars
>      >         return TokError("unexpected token in argument list");
>      >     }
>      >
>      > +  // Push the immediate if we extracted one from the mnemonic.
>      > +  if (ComparisonCode != ~0U && isParsingIntelSyntax()) {
>      > +    const MCExpr *ImmOp = MCConstantExpr::create(ComparisonCode,
>      > +                                               
>       getParser().getContext());
>      > +    Operands.push_back(X86Operand::CreateImm(ImmOp, NameLoc,
>     NameLoc));
>      > +  }
>      > +
>      >     // Consume the EndOfStatement or the prefix separator Slash
>      >     if (getLexer().is(AsmToken::EndOfStatement) ||
>      >         (isPrefix && getLexer().is(AsmToken::Slash)))
>      >
>      > Modified: llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp
>      > URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp?rev=356343&r1=356342&r2=356343&view=diff
>      >
>     ==============================================================================
>      > --- llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp
>     (original)
>      > +++ llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp
>     Sun Mar 17 14:21:37 2019
>      > @@ -459,22 +459,6 @@ static void translateImmediate(MCInst &m
>      >         case X86::CMPSDrr:   NewOpc = X86::CMPSDrr_alt;   break;
>      >         case X86::CMPSSrm:   NewOpc = X86::CMPSSrm_alt;   break;
>      >         case X86::CMPSSrr:   NewOpc = X86::CMPSSrr_alt;   break;
>      > -      case X86::VPCOMBri:  NewOpc = X86::VPCOMBri_alt;  break;
>      > -      case X86::VPCOMBmi:  NewOpc = X86::VPCOMBmi_alt;  break;
>      > -      case X86::VPCOMWri:  NewOpc = X86::VPCOMWri_alt;  break;
>      > -      case X86::VPCOMWmi:  NewOpc = X86::VPCOMWmi_alt;  break;
>      > -      case X86::VPCOMDri:  NewOpc = X86::VPCOMDri_alt;  break;
>      > -      case X86::VPCOMDmi:  NewOpc = X86::VPCOMDmi_alt;  break;
>      > -      case X86::VPCOMQri:  NewOpc = X86::VPCOMQri_alt;  break;
>      > -      case X86::VPCOMQmi:  NewOpc = X86::VPCOMQmi_alt;  break;
>      > -      case X86::VPCOMUBri: NewOpc = X86::VPCOMUBri_alt; break;
>      > -      case X86::VPCOMUBmi: NewOpc = X86::VPCOMUBmi_alt; break;
>      > -      case X86::VPCOMUWri: NewOpc = X86::VPCOMUWri_alt; break;
>      > -      case X86::VPCOMUWmi: NewOpc = X86::VPCOMUWmi_alt; break;
>      > -      case X86::VPCOMUDri: NewOpc = X86::VPCOMUDri_alt; break;
>      > -      case X86::VPCOMUDmi: NewOpc = X86::VPCOMUDmi_alt; break;
>      > -      case X86::VPCOMUQri: NewOpc = X86::VPCOMUQri_alt; break;
>      > -      case X86::VPCOMUQmi: NewOpc = X86::VPCOMUQmi_alt; break;
>      >         }
>      >         // Switch opcode to the one that doesn't get special
>     printing.
>      >         mcInst.setOpcode(NewOpc);
>      >
>      > Modified: llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
>      > URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp?rev=356343&r1=356342&r2=356343&view=diff
>      >
>     ==============================================================================
>      > --- llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
>     (original)
>      > +++ llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
>     Sun Mar 17 14:21:37 2019
>      > @@ -67,13 +67,55 @@ void X86ATTInstPrinter::printInst(const
>      >      OS << "\tdata32";
>      >     }
>      >     // Try to print any aliases first.
>      > -  else if (!printAliasInstr(MI, OS))
>      > +  else if (!printAliasInstr(MI, OS) &&
>      > +           !printVecCompareInstr(MI, OS))
>      >       printInstruction(MI, OS);
>      >
>      >     // Next always print the annotation.
>      >     printAnnotation(OS, Annot);
>      >   }
>      >
>      > +bool X86ATTInstPrinter::printVecCompareInstr(const MCInst *MI,
>      > +                                             raw_ostream &OS) {
>      > +  if (MI->getNumOperands() == 0 ||
>      > +      !MI->getOperand(MI->getNumOperands() - 1).isImm())
>      > +    return false;
>      > +
>      > +  unsigned Imm = MI->getOperand(MI->getNumOperands() - 1).getImm();
>      > +
>      > +  const MCInstrDesc &Desc = MII.get(MI->getOpcode());
>      > +
>      > +  // Custom print the vector compare instructions to get the
>     immediate
>      > +  // translated into the mnemonic.
>      > +  switch (MI->getOpcode()) {
>      > +  case X86::VPCOMBmi:  case X86::VPCOMBri:
>      > +  case X86::VPCOMDmi:  case X86::VPCOMDri:
>      > +  case X86::VPCOMQmi:  case X86::VPCOMQri:
>      > +  case X86::VPCOMUBmi: case X86::VPCOMUBri:
>      > +  case X86::VPCOMUDmi: case X86::VPCOMUDri:
>      > +  case X86::VPCOMUQmi: case X86::VPCOMUQri:
>      > +  case X86::VPCOMUWmi: case X86::VPCOMUWri:
>      > +  case X86::VPCOMWmi:  case X86::VPCOMWri:
>      > +    if (Imm >= 0 && Imm <= 7) {
>      > +      printVPCOMMnemonic(MI, OS);
>      > +
>      > +      if ((Desc.TSFlags & X86II::FormMask) == X86II::MRMSrcMem)
>      > +        printi128mem(MI, 2, OS);
>      > +      else
>      > +        printOperand(MI, 2, OS);
>      > +
>      > +      OS << ", ";
>      > +      printOperand(MI, 1, OS);
>      > +      OS << ", ";
>      > +      printOperand(MI, 0, OS);
>      > +      return true;
>      > +    }
>      > +    break;
>      > +  }
>      > +
>      > +  return false;
>      > +}
>      > +
>      >   void X86ATTInstPrinter::printOperand(const MCInst *MI, unsigned
>     OpNo,
>      >                                        raw_ostream &O) {
>      >     const MCOperand &Op = MI->getOperand(OpNo);
>      >
>      > Modified: llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h
>      > URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h?rev=356343&r1=356342&r2=356343&view=diff
>      >
>     ==============================================================================
>      > --- llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h
>     (original)
>      > +++ llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h Sun
>     Mar 17 14:21:37 2019
>      > @@ -26,6 +26,7 @@ public:
>      >     void printRegName(raw_ostream &OS, unsigned RegNo) const
>     override;
>      >     void printInst(const MCInst *MI, raw_ostream &OS, StringRef
>     Annot,
>      >                    const MCSubtargetInfo &STI) override;
>      > +  bool printVecCompareInstr(const MCInst *MI, raw_ostream &OS);
>      >
>      >     // Autogenerated by tblgen, returns true if we successfully
>     printed an
>      >     // alias.
>      >
>      > Modified:
>     llvm/trunk/lib/Target/X86/InstPrinter/X86InstPrinterCommon.cpp
>      > URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/InstPrinter/X86InstPrinterCommon.cpp?rev=356343&r1=356342&r2=356343&view=diff
>      >
>     ==============================================================================
>      > ---
>     llvm/trunk/lib/Target/X86/InstPrinter/X86InstPrinterCommon.cpp
>     (original)
>      > +++
>     llvm/trunk/lib/Target/X86/InstPrinter/X86InstPrinterCommon.cpp Sun
>     Mar 17 14:21:37 2019
>      > @@ -64,19 +64,33 @@ void X86InstPrinterCommon::printSSEAVXCC
>      >     }
>      >   }
>      >
>      > -void X86InstPrinterCommon::printXOPCC(const MCInst *MI, unsigned Op,
>      > -                                      raw_ostream &O) {
>      > -  int64_t Imm = MI->getOperand(Op).getImm();
>      > +void X86InstPrinterCommon::printVPCOMMnemonic(const MCInst *MI,
>      > +                                              raw_ostream &OS) {
>      > +  OS << "vpcom";
>      > +
>      > +  int64_t Imm = MI->getOperand(MI->getNumOperands() - 1).getImm();
>      >     switch (Imm) {
>      > -  default: llvm_unreachable("Invalid xopcc argument!");
>      > -  case 0: O << "lt"; break;
>      > -  case 1: O << "le"; break;
>      > -  case 2: O << "gt"; break;
>      > -  case 3: O << "ge"; break;
>      > -  case 4: O << "eq"; break;
>      > -  case 5: O << "neq"; break;
>      > -  case 6: O << "false"; break;
>      > -  case 7: O << "true"; break;
>      > +  default: llvm_unreachable("Invalid vpcom argument!");
>      > +  case 0: OS << "lt"; break;
>      > +  case 1: OS << "le"; break;
>      > +  case 2: OS << "gt"; break;
>      > +  case 3: OS << "ge"; break;
>      > +  case 4: OS << "eq"; break;
>      > +  case 5: OS << "neq"; break;
>      > +  case 6: OS << "false"; break;
>      > +  case 7: OS << "true"; break;
>      > +  }
>      > +
>      > +  switch (MI->getOpcode()) {
>      > +  default: llvm_unreachable("Unexpected opcode!");
>      > +  case X86::VPCOMBmi:  case X86::VPCOMBri:  OS << "b\t";  break;
>      > +  case X86::VPCOMDmi:  case X86::VPCOMDri:  OS << "d\t";  break;
>      > +  case X86::VPCOMQmi:  case X86::VPCOMQri:  OS << "q\t";  break;
>      > +  case X86::VPCOMUBmi: case X86::VPCOMUBri: OS << "ub\t"; break;
>      > +  case X86::VPCOMUDmi: case X86::VPCOMUDri: OS << "ud\t"; break;
>      > +  case X86::VPCOMUQmi: case X86::VPCOMUQri: OS << "uq\t"; break;
>      > +  case X86::VPCOMUWmi: case X86::VPCOMUWri: OS << "uw\t"; break;
>      > +  case X86::VPCOMWmi:  case X86::VPCOMWri:  OS << "w\t";  break;
>      >     }
>      >   }
>      >
>      >
>      > Modified:
>     llvm/trunk/lib/Target/X86/InstPrinter/X86InstPrinterCommon.h
>      > URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/InstPrinter/X86InstPrinterCommon.h?rev=356343&r1=356342&r2=356343&view=diff
>      >
>     ==============================================================================
>      > --- llvm/trunk/lib/Target/X86/InstPrinter/X86InstPrinterCommon.h
>     (original)
>      > +++ llvm/trunk/lib/Target/X86/InstPrinter/X86InstPrinterCommon.h
>     Sun Mar 17 14:21:37 2019
>      > @@ -24,7 +24,7 @@ public:
>      >
>      >     virtual void printOperand(const MCInst *MI, unsigned OpNo,
>     raw_ostream &O) = 0;
>      >     void printSSEAVXCC(const MCInst *MI, unsigned Op, raw_ostream
>     &OS);
>      > -  void printXOPCC(const MCInst *MI, unsigned Op, raw_ostream &OS);
>      > +  void printVPCOMMnemonic(const MCInst *MI, raw_ostream &OS);
>      >     void printRoundingControl(const MCInst *MI, unsigned Op,
>     raw_ostream &O);
>      >     void printPCRelImm(const MCInst *MI, unsigned OpNo,
>     raw_ostream &O);
>      >   protected:
>      >
>      > Modified:
>     llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp
>      > URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp?rev=356343&r1=356342&r2=356343&view=diff
>      >
>     ==============================================================================
>      > --- llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp
>     (original)
>      > +++ llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp
>     Sun Mar 17 14:21:37 2019
>      > @@ -45,7 +45,8 @@ void X86IntelInstPrinter::printInst(cons
>      >     if (MI->getOpcode() == X86::DATA16_PREFIX &&
>      >         STI.getFeatureBits()[X86::Mode16Bit]) {
>      >       OS << "\tdata32";
>      > -  } else if (!printAliasInstr(MI, OS))
>      > +  } else if (!printAliasInstr(MI, OS) &&
>      > +             !printVecCompareInstr(MI, OS))
>      >       printInstruction(MI, OS);
>      >
>      >     // Next always print the annotation.
>      > @@ -56,6 +57,44 @@ void X86IntelInstPrinter::printInst(cons
>      >       EmitAnyX86InstComments(MI, *CommentStream, MII);
>      >   }
>      >
>      > +bool X86IntelInstPrinter::printVecCompareInstr(const MCInst *MI,
>     raw_ostream &OS) {
>      > +  if (MI->getNumOperands() == 0 ||
>      > +      !MI->getOperand(MI->getNumOperands() - 1).isImm())
>      > +    return false;
>      > +
>      > +  unsigned Imm = MI->getOperand(MI->getNumOperands() - 1).getImm();
>      > +
>      > +  const MCInstrDesc &Desc = MII.get(MI->getOpcode());
>      > +
>      > +  // Custom print the vector compare instructions to get the
>     immediate
>      > +  // translated into the mnemonic.
>      > +  switch (MI->getOpcode()) {
>      > +  case X86::VPCOMBmi:  case X86::VPCOMBri:
>      > +  case X86::VPCOMDmi:  case X86::VPCOMDri:
>      > +  case X86::VPCOMQmi:  case X86::VPCOMQri:
>      > +  case X86::VPCOMUBmi: case X86::VPCOMUBri:
>      > +  case X86::VPCOMUDmi: case X86::VPCOMUDri:
>      > +  case X86::VPCOMUQmi: case X86::VPCOMUQri:
>      > +  case X86::VPCOMUWmi: case X86::VPCOMUWri:
>      > +  case X86::VPCOMWmi:  case X86::VPCOMWri:
>      > +    if (Imm >= 0 && Imm <= 7) {
>      > +      printVPCOMMnemonic(MI, OS);
>      > +      printOperand(MI, 0, OS);
>      > +      OS << ", ";
>      > +      printOperand(MI, 1, OS);
>      > +      OS << ", ";
>      > +      if ((Desc.TSFlags & X86II::FormMask) == X86II::MRMSrcMem)
>      > +        printi128mem(MI, 2, OS);
>      > +      else
>      > +        printOperand(MI, 2, OS);
>      > +      return true;
>      > +    }
>      > +    break;
>      > +  }
>      > +
>      > +  return false;
>      > +}
>      > +
>      >   void X86IntelInstPrinter::printOperand(const MCInst *MI,
>     unsigned OpNo,
>      >                                          raw_ostream &O) {
>      >     const MCOperand &Op = MI->getOperand(OpNo);
>      >
>      > Modified: llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h
>      > URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h?rev=356343&r1=356342&r2=356343&view=diff
>      >
>     ==============================================================================
>      > --- llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h
>     (original)
>      > +++ llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h
>     Sun Mar 17 14:21:37 2019
>      > @@ -27,6 +27,7 @@ public:
>      >     void printRegName(raw_ostream &OS, unsigned RegNo) const
>     override;
>      >     void printInst(const MCInst *MI, raw_ostream &OS, StringRef
>     Annot,
>      >                    const MCSubtargetInfo &STI) override;
>      > +  bool printVecCompareInstr(const MCInst *MI, raw_ostream &OS);
>      >
>      >     // Autogenerated by tblgen, returns true if we successfully
>     printed an
>      >     // alias.
>      >
>      > Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td
>      > URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=356343&r1=356342&r2=356343&view=diff
>      >
>     ==============================================================================
>      > --- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original)
>      > +++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Sun Mar 17 14:21:37
>     2019
>      > @@ -617,11 +617,6 @@ def AVX512ICC : Operand<i8> {
>      >     let OperandType = "OPERAND_IMMEDIATE";
>      >   }
>      >
>      > -def XOPCC : Operand<i8> {
>      > -  let PrintMethod = "printXOPCC";
>      > -  let OperandType = "OPERAND_IMMEDIATE";
>      > -}
>      > -
>      >   class ImmSExtAsmOperandClass : AsmOperandClass {
>      >     let SuperClasses = [ImmAsmOperand];
>      >     let RenderMethod = "addImmOperands";
>      >
>      > Modified: llvm/trunk/lib/Target/X86/X86InstrXOP.td
>      > URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrXOP.td?rev=356343&r1=356342&r2=356343&view=diff
>      >
>     ==============================================================================
>      > --- llvm/trunk/lib/Target/X86/X86InstrXOP.td (original)
>      > +++ llvm/trunk/lib/Target/X86/X86InstrXOP.td Sun Mar 17 14:21:37 2019
>      > @@ -246,36 +246,22 @@ multiclass xopvpcom<bits<8> opc, string
>      >     let ExeDomain = SSEPackedInt in { // SSE integer instructions
>      >       let isCommutable = 1 in
>      >       def ri : IXOPi8<opc, MRMSrcReg, (outs VR128:$dst),
>      > -             (ins VR128:$src1, VR128:$src2, XOPCC:$cc),
>      > -             !strconcat("vpcom${cc}", Suffix,
>      > -             "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
>      > +             (ins VR128:$src1, VR128:$src2, u8imm:$cc),
>      > +             !strconcat("vpcom", Suffix,
>      > +             "\t{$cc, $src2, $src1, $dst|$dst, $src1, $src2, $cc}"),
>      >                [(set VR128:$dst,
>      >                   (vt128 (OpNode (vt128 VR128:$src1), (vt128
>     VR128:$src2),
>      >                                  imm:$cc)))]>,
>      >                XOP_4V, Sched<[sched]>;
>      >       def mi : IXOPi8<opc, MRMSrcMem, (outs VR128:$dst),
>      > -             (ins VR128:$src1, i128mem:$src2, XOPCC:$cc),
>      > -             !strconcat("vpcom${cc}", Suffix,
>      > -             "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
>      > +             (ins VR128:$src1, i128mem:$src2, u8imm:$cc),
>      > +             !strconcat("vpcom", Suffix,
>      > +             "\t{$cc, $src2, $src1, $dst|$dst, $src1, $src2, $cc}"),
>      >                [(set VR128:$dst,
>      >                   (vt128 (OpNode (vt128 VR128:$src1),
>      >                                  (vt128 (load addr:$src2)),
>      >                                   imm:$cc)))]>,
>      >                XOP_4V, Sched<[sched.Folded, sched.ReadAfterFold]>;
>      > -    let isAsmParserOnly = 1, hasSideEffects = 0 in {
>      > -      def ri_alt : IXOPi8<opc, MRMSrcReg, (outs VR128:$dst),
>      > -                   (ins VR128:$src1, VR128:$src2, u8imm:$src3),
>      > -                   !strconcat("vpcom", Suffix,
>      > -                   "\t{$src3, $src2, $src1, $dst|$dst, $src1,
>     $src2, $src3}"),
>      > -                   []>, XOP_4V, Sched<[sched]>, NotMemoryFoldable;
>      > -      let mayLoad = 1 in
>      > -      def mi_alt : IXOPi8<opc, MRMSrcMem, (outs VR128:$dst),
>      > -                   (ins VR128:$src1, i128mem:$src2, u8imm:$src3),
>      > -                   !strconcat("vpcom", Suffix,
>      > -                   "\t{$src3, $src2, $src1, $dst|$dst, $src1,
>     $src2, $src3}"),
>      > -                   []>, XOP_4V, Sched<[sched.Folded,
>     sched.ReadAfterFold]>,
>      > -                   NotMemoryFoldable;
>      > -    }
>      >     }
>      >
>      >     def : Pat<(OpNode (load addr:$src2),
>      >
>      > Modified: llvm/trunk/test/tools/llvm-mca/X86/BdVer2/resources-xop.s
>      > URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mca/X86/BdVer2/resources-xop.s?rev=356343&r1=356342&r2=356343&view=diff
>      >
>     ==============================================================================
>      > --- llvm/trunk/test/tools/llvm-mca/X86/BdVer2/resources-xop.s
>     (original)
>      > +++ llvm/trunk/test/tools/llvm-mca/X86/BdVer2/resources-xop.s Sun
>     Mar 17 14:21:37 2019
>      > @@ -239,22 +239,22 @@ vpshlw %xmm0, (%rax), %xmm3
>      >   # CHECK-NEXT:  2      2     0.50                        vpcmov 
>          %ymm0, %ymm1, %ymm2, %ymm3
>      >   # CHECK-NEXT:  2      7     1.00    *                   vpcmov 
>          (%rax), %ymm0, %ymm1, %ymm3
>      >   # CHECK-NEXT:  2      7     1.00    *                   vpcmov 
>          %ymm0, (%rax), %ymm1, %ymm3
>      > -# CHECK-NEXT:  1      2     0.50                        vpcomb 
>           $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  1      7     0.50    *                   vpcomb 
>           $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  1      2     0.50                        vpcomd 
>           $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  1      7     0.50    *                   vpcomd 
>           $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  1      2     0.50                        vpcomq 
>           $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  1      7     0.50    *                   vpcomq 
>           $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  1      2     0.50                        vpcomub 
>          $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  1      7     0.50    *                   vpcomub 
>          $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  1      2     0.50                        vpcomud 
>          $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  1      7     0.50    *                   vpcomud 
>          $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  1      2     0.50                        vpcomuq 
>          $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  1      7     0.50    *                   vpcomuq 
>          $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  1      2     0.50                        vpcomuw 
>          $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  1      7     0.50    *                   vpcomuw 
>          $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  1      2     0.50                        vpcomw 
>           $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  1      7     0.50    *                   vpcomw 
>           $0, (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      2     0.50                       
>     vpcomltb     %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  1      7     0.50    *                 
>       vpcomltb     (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      2     0.50                       
>     vpcomltd     %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  1      7     0.50    *                 
>       vpcomltd     (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      2     0.50                       
>     vpcomltq     %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  1      7     0.50    *                 
>       vpcomltq     (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      2     0.50                       
>     vpcomltub    %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  1      7     0.50    *                 
>       vpcomltub    (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      2     0.50                       
>     vpcomltud    %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  1      7     0.50    *                 
>       vpcomltud    (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      2     0.50                       
>     vpcomltuq    %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  1      7     0.50    *                 
>       vpcomltuq    (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      2     0.50                       
>     vpcomltuw    %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  1      7     0.50    *                 
>       vpcomltuw    (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      2     0.50                       
>     vpcomltw     %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  1      7     0.50    *                 
>       vpcomltw     (%rax), %xmm0, %xmm3
>      >   # CHECK-NEXT:  1      3     2.00                       
>     vpermil2pd  $0, %xmm0, %xmm1, %xmm2, %xmm3
>      >   # CHECK-NEXT:  1      8     2.00    *                 
>       vpermil2pd  $0, (%rax), %xmm0, %xmm1, %xmm3
>      >   # CHECK-NEXT:  1      8     2.00    *                 
>       vpermil2pd  $0, %xmm0, (%rax), %xmm1, %xmm3
>      > @@ -418,22 +418,22 @@ vpshlw %xmm0, (%rax), %xmm3
>      >   # CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcmov       %ymm0,
>     %ymm1, %ymm2, %ymm3
>      >   # CHECK-NEXT: 1.00   1.00    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     1.00   1.00    -      -     vpcmov       (%rax),
>     %ymm0, %ymm1, %ymm3
>      >   # CHECK-NEXT: 1.00   1.00    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     1.00   1.00    -      -     vpcmov       %ymm0,
>     (%rax), %ymm1, %ymm3
>      > -# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomb        $0, %xmm0,
>     %xmm1, %xmm3
>      > -# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomb        $0,
>     (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomd        $0, %xmm0,
>     %xmm1, %xmm3
>      > -# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomd        $0,
>     (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomq        $0, %xmm0,
>     %xmm1, %xmm3
>      > -# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomq        $0,
>     (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomub       $0, %xmm0,
>     %xmm1, %xmm3
>      > -# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomub       $0,
>     (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomud       $0, %xmm0,
>     %xmm1, %xmm3
>      > -# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomud       $0,
>     (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomuq       $0, %xmm0,
>     %xmm1, %xmm3
>      > -# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomuq       $0,
>     (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomuw       $0, %xmm0,
>     %xmm1, %xmm3
>      > -# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomuw       $0,
>     (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomw        $0, %xmm0,
>     %xmm1, %xmm3
>      > -# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomw        $0,
>     (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomltb      %xmm0,
>     %xmm1, %xmm3
>      > +# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomltb      (%rax),
>     %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomltd      %xmm0,
>     %xmm1, %xmm3
>      > +# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomltd      (%rax),
>     %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomltq      %xmm0,
>     %xmm1, %xmm3
>      > +# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomltq      (%rax),
>     %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomltub     %xmm0,
>     %xmm1, %xmm3
>      > +# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomltub     (%rax),
>     %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomltud     %xmm0,
>     %xmm1, %xmm3
>      > +# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomltud     (%rax),
>     %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomltuq     %xmm0,
>     %xmm1, %xmm3
>      > +# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomltuq     (%rax),
>     %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomltuw     %xmm0,
>     %xmm1, %xmm3
>      > +# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomltuw     (%rax),
>     %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpcomltw      %xmm0,
>     %xmm1, %xmm3
>      > +# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -      -      -     0.50   0.50    -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpcomltw      (%rax),
>     %xmm0, %xmm3
>      >   # CHECK-NEXT:  -      -      -      -      -      -      -     
>     -     2.00   2.00    -      -      -      -     0.50   0.50    -   
>        -      -      -      -      -      -     vpermil2pd   $0, %xmm0,
>     %xmm1, %xmm2, %xmm3
>      >   # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -     2.00   2.00    -      -      -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpermil2pd   $0, (%rax),
>     %xmm0, %xmm1, %xmm3
>      >   # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     
>     -     2.00   2.00    -      -      -      -     0.50   0.50    -   
>        -      -     0.50   0.50    -      -     vpermil2pd   $0, %xmm0,
>     (%rax), %xmm1, %xmm3
>      >
>      > Modified: llvm/trunk/test/tools/llvm-mca/X86/Generic/resources-xop.s
>      > URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mca/X86/Generic/resources-xop.s?rev=356343&r1=356342&r2=356343&view=diff
>      >
>     ==============================================================================
>      > --- llvm/trunk/test/tools/llvm-mca/X86/Generic/resources-xop.s
>     (original)
>      > +++ llvm/trunk/test/tools/llvm-mca/X86/Generic/resources-xop.s
>     Sun Mar 17 14:21:37 2019
>      > @@ -239,22 +239,22 @@ vpshlw %xmm0, (%rax), %xmm3
>      >   # CHECK-NEXT:  1      1     1.00                        vpcmov 
>          %ymm0, %ymm1, %ymm2, %ymm3
>      >   # CHECK-NEXT:  2      8     1.00    *                   vpcmov 
>          (%rax), %ymm0, %ymm1, %ymm3
>      >   # CHECK-NEXT:  2      8     1.00    *                   vpcmov 
>          %ymm0, (%rax), %ymm1, %ymm3
>      > -# CHECK-NEXT:  1      1     0.50                        vpcomb 
>           $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  2      7     0.50    *                   vpcomb 
>           $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  1      1     0.50                        vpcomd 
>           $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  2      7     0.50    *                   vpcomd 
>           $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  1      1     0.50                        vpcomq 
>           $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  2      7     0.50    *                   vpcomq 
>           $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  1      1     0.50                        vpcomub 
>          $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  2      7     0.50    *                   vpcomub 
>          $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  1      1     0.50                        vpcomud 
>          $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  2      7     0.50    *                   vpcomud 
>          $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  1      1     0.50                        vpcomuq 
>          $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  2      7     0.50    *                   vpcomuq 
>          $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  1      1     0.50                        vpcomuw 
>          $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  2      7     0.50    *                   vpcomuw 
>          $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  1      1     0.50                        vpcomw 
>           $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  2      7     0.50    *                   vpcomw 
>           $0, (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      1     0.50                       
>     vpcomltb     %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  2      7     0.50    *                 
>       vpcomltb     (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      1     0.50                       
>     vpcomltd     %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  2      7     0.50    *                 
>       vpcomltd     (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      1     0.50                       
>     vpcomltq     %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  2      7     0.50    *                 
>       vpcomltq     (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      1     0.50                       
>     vpcomltub    %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  2      7     0.50    *                 
>       vpcomltub    (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      1     0.50                       
>     vpcomltud    %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  2      7     0.50    *                 
>       vpcomltud    (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      1     0.50                       
>     vpcomltuq    %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  2      7     0.50    *                 
>       vpcomltuq    (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      1     0.50                       
>     vpcomltuw    %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  2      7     0.50    *                 
>       vpcomltuw    (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  1      1     0.50                       
>     vpcomltw     %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  2      7     0.50    *                 
>       vpcomltw     (%rax), %xmm0, %xmm3
>      >   # CHECK-NEXT:  1      1     1.00                       
>     vpermil2pd  $0, %xmm0, %xmm1, %xmm2, %xmm3
>      >   # CHECK-NEXT:  2      7     1.00    *                 
>       vpermil2pd  $0, (%rax), %xmm0, %xmm1, %xmm3
>      >   # CHECK-NEXT:  2      7     1.00    *                 
>       vpermil2pd  $0, %xmm0, (%rax), %xmm1, %xmm3
>      > @@ -403,22 +403,22 @@ vpshlw %xmm0, (%rax), %xmm3
>      >   # CHECK-NEXT:  -      -      -      -      -     1.00    -     
>     -     vpcmov        %ymm0, %ymm1, %ymm2, %ymm3
>      >   # CHECK-NEXT:  -      -      -      -      -     1.00   0.50 
>       0.50   vpcmov        (%rax), %ymm0, %ymm1, %ymm3
>      >   # CHECK-NEXT:  -      -      -      -      -     1.00   0.50 
>       0.50   vpcmov        %ymm0, (%rax), %ymm1, %ymm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomb $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomb $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomd $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomd $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomq $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomq $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomub        $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomub        $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomud        $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomud        $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomuq        $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomuq        $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomuw        $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomuw        $0, (%rax), %xmm0, %xmm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomw $0, %xmm0, %xmm1, %xmm3
>      > -# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomw $0, (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomltb       %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomltb       (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomltd       %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomltd       (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomltq       %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomltq       (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomltub      %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomltub      (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomltud      %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomltud      (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomltuq      %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomltuq      (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomltuw      %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomltuw      (%rax), %xmm0, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50    -     
>     -     vpcomltw       %xmm0, %xmm1, %xmm3
>      > +# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50 
>       0.50   vpcomltw       (%rax), %xmm0, %xmm3
>      >   # CHECK-NEXT:  -      -      -      -      -     1.00    -     
>     -     vpermil2pd    $0, %xmm0, %xmm1, %xmm2, %xmm3
>      >   # CHECK-NEXT:  -      -      -      -      -     1.00   0.50 
>       0.50   vpermil2pd    $0, (%rax), %xmm0, %xmm1, %xmm3
>      >   # CHECK-NEXT:  -      -      -      -      -     1.00   0.50 
>       0.50   vpermil2pd    $0, %xmm0, (%rax), %xmm1, %xmm3
>      >
>      > Modified: llvm/trunk/utils/TableGen/X86RecognizableInstr.cpp
>      > URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/X86RecognizableInstr.cpp?rev=356343&r1=356342&r2=356343&view=diff
>      >
>     ==============================================================================
>      > --- llvm/trunk/utils/TableGen/X86RecognizableInstr.cpp (original)
>      > +++ llvm/trunk/utils/TableGen/X86RecognizableInstr.cpp Sun Mar 17
>     14:21:37 2019
>      > @@ -849,7 +849,6 @@ OperandType RecognizableInstr::typeFromS
>      >     TYPE("i16imm_pcrel",        TYPE_REL)
>      >     TYPE("i32imm_pcrel",        TYPE_REL)
>      >     TYPE("SSECC",               TYPE_IMM3)
>      > -  TYPE("XOPCC",               TYPE_IMM3)
>      >     TYPE("AVXCC",               TYPE_IMM5)
>      >     TYPE("AVX512ICC",           TYPE_AVX512ICC)
>      >     TYPE("AVX512RC",            TYPE_IMM)
>      > @@ -932,7 +931,6 @@ RecognizableInstr::immediateEncodingFrom
>      >     }
>      >     ENCODING("i32i8imm",        ENCODING_IB)
>      >     ENCODING("SSECC",           ENCODING_IB)
>      > -  ENCODING("XOPCC",           ENCODING_IB)
>      >     ENCODING("AVXCC",           ENCODING_IB)
>      >     ENCODING("AVX512ICC",       ENCODING_IB)
>      >     ENCODING("AVX512RC",        ENCODING_IRC)
>      >
>      >
>      > _______________________________________________
>      > llvm-commits mailing list
>      > llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
>      > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>      >
>     _______________________________________________
>     llvm-commits mailing list
>     llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
>     https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
> 



More information about the llvm-commits mailing list