[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

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 18 00:04:28 PDT 2019


Sorry about that. Hopefully fixed after r356359. Is clang less aggressive
with that warning in newer versions?

~Craig

On Sun, Mar 17, 2019 at 11:52 PM Mikael Holmén via llvm-commits <
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
> > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
> >
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190318/d6e4e473/attachment.html>


More information about the llvm-commits mailing list