[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