summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp44
-rw-r--r--llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp16
-rw-r--r--llvm/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp44
-rw-r--r--llvm/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h1
-rw-r--r--llvm/lib/Target/X86/InstPrinter/X86InstPrinterCommon.cpp38
-rw-r--r--llvm/lib/Target/X86/InstPrinter/X86InstPrinterCommon.h2
-rw-r--r--llvm/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp41
-rw-r--r--llvm/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h1
-rw-r--r--llvm/lib/Target/X86/X86InstrInfo.td5
-rw-r--r--llvm/lib/Target/X86/X86InstrXOP.td26
-rw-r--r--llvm/test/tools/llvm-mca/X86/BdVer2/resources-xop.s64
-rw-r--r--llvm/test/tools/llvm-mca/X86/Generic/resources-xop.s64
-rw-r--r--llvm/utils/TableGen/X86RecognizableInstr.cpp2
13 files changed, 213 insertions, 135 deletions
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
index 3f135641991..82cc90526bf 100644
--- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -2414,13 +2414,15 @@ bool X86AsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
}
}
+ 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(ParseInstructionInfo &Info, StringRef Name,
.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(ParseInstructionInfo &Info, StringRef Name,
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(ParseInstructionInfo &Info, StringRef Name,
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)))
diff --git a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
index 83379956222..49ebe9c85fe 100644
--- a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
+++ b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
@@ -459,22 +459,6 @@ static void translateImmediate(MCInst &mcInst, uint64_t immediate,
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);
diff --git a/llvm/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp b/llvm/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
index b70ce4bab6f..8951bac52d6 100644
--- a/llvm/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
+++ b/llvm/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
@@ -67,13 +67,55 @@ void X86ATTInstPrinter::printInst(const MCInst *MI, raw_ostream &OS,
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);
diff --git a/llvm/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h b/llvm/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h
index 977b4445589..1f6f38abffb 100644
--- a/llvm/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h
+++ b/llvm/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h
@@ -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.
diff --git a/llvm/lib/Target/X86/InstPrinter/X86InstPrinterCommon.cpp b/llvm/lib/Target/X86/InstPrinter/X86InstPrinterCommon.cpp
index cf08389876b..182a83c29a3 100644
--- a/llvm/lib/Target/X86/InstPrinter/X86InstPrinterCommon.cpp
+++ b/llvm/lib/Target/X86/InstPrinter/X86InstPrinterCommon.cpp
@@ -64,19 +64,33 @@ void X86InstPrinterCommon::printSSEAVXCC(const MCInst *MI, unsigned Op,
}
}
-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;
}
}
diff --git a/llvm/lib/Target/X86/InstPrinter/X86InstPrinterCommon.h b/llvm/lib/Target/X86/InstPrinter/X86InstPrinterCommon.h
index 917f7121807..e6fd5adfd8f 100644
--- a/llvm/lib/Target/X86/InstPrinter/X86InstPrinterCommon.h
+++ b/llvm/lib/Target/X86/InstPrinter/X86InstPrinterCommon.h
@@ -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:
diff --git a/llvm/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp b/llvm/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp
index 6c597166dbf..81a62e2b9f2 100644
--- a/llvm/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp
+++ b/llvm/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp
@@ -45,7 +45,8 @@ void X86IntelInstPrinter::printInst(const MCInst *MI, raw_ostream &OS,
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(const MCInst *MI, raw_ostream &OS,
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);
diff --git a/llvm/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h b/llvm/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h
index 67ea9b7fa97..1496612685c 100644
--- a/llvm/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h
+++ b/llvm/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h
@@ -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.
diff --git a/llvm/lib/Target/X86/X86InstrInfo.td b/llvm/lib/Target/X86/X86InstrInfo.td
index af17bdd6d69..c84c649f4f4 100644
--- a/llvm/lib/Target/X86/X86InstrInfo.td
+++ b/llvm/lib/Target/X86/X86InstrInfo.td
@@ -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";
diff --git a/llvm/lib/Target/X86/X86InstrXOP.td b/llvm/lib/Target/X86/X86InstrXOP.td
index bc2e3c6e66a..66ca78556b8 100644
--- a/llvm/lib/Target/X86/X86InstrXOP.td
+++ b/llvm/lib/Target/X86/X86InstrXOP.td
@@ -246,36 +246,22 @@ multiclass xopvpcom<bits<8> opc, string Suffix, SDNode OpNode, ValueType vt128,
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),
diff --git a/llvm/test/tools/llvm-mca/X86/BdVer2/resources-xop.s b/llvm/test/tools/llvm-mca/X86/BdVer2/resources-xop.s
index 88d15c958bc..fabd125307e 100644
--- a/llvm/test/tools/llvm-mca/X86/BdVer2/resources-xop.s
+++ b/llvm/test/tools/llvm-mca/X86/BdVer2/resources-xop.s
@@ -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
diff --git a/llvm/test/tools/llvm-mca/X86/Generic/resources-xop.s b/llvm/test/tools/llvm-mca/X86/Generic/resources-xop.s
index 61f39f07d78..8b79a9589de 100644
--- a/llvm/test/tools/llvm-mca/X86/Generic/resources-xop.s
+++ b/llvm/test/tools/llvm-mca/X86/Generic/resources-xop.s
@@ -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
diff --git a/llvm/utils/TableGen/X86RecognizableInstr.cpp b/llvm/utils/TableGen/X86RecognizableInstr.cpp
index f7f7966075a..d68cac339b5 100644
--- a/llvm/utils/TableGen/X86RecognizableInstr.cpp
+++ b/llvm/utils/TableGen/X86RecognizableInstr.cpp
@@ -849,7 +849,6 @@ OperandType RecognizableInstr::typeFromString(const std::string &s,
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::immediateEncodingFromString(const std::string &s,
}
ENCODING("i32i8imm", ENCODING_IB)
ENCODING("SSECC", ENCODING_IB)
- ENCODING("XOPCC", ENCODING_IB)
ENCODING("AVXCC", ENCODING_IB)
ENCODING("AVX512ICC", ENCODING_IB)
ENCODING("AVX512RC", ENCODING_IRC)
OpenPOWER on IntegriCloud