diff options
-rw-r--r-- | llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | 44 | ||||
-rw-r--r-- | llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp | 16 | ||||
-rw-r--r-- | llvm/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp | 44 | ||||
-rw-r--r-- | llvm/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h | 1 | ||||
-rw-r--r-- | llvm/lib/Target/X86/InstPrinter/X86InstPrinterCommon.cpp | 38 | ||||
-rw-r--r-- | llvm/lib/Target/X86/InstPrinter/X86InstPrinterCommon.h | 2 | ||||
-rw-r--r-- | llvm/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp | 41 | ||||
-rw-r--r-- | llvm/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h | 1 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.td | 5 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86InstrXOP.td | 26 | ||||
-rw-r--r-- | llvm/test/tools/llvm-mca/X86/BdVer2/resources-xop.s | 64 | ||||
-rw-r--r-- | llvm/test/tools/llvm-mca/X86/Generic/resources-xop.s | 64 | ||||
-rw-r--r-- | llvm/utils/TableGen/X86RecognizableInstr.cpp | 2 |
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) |