diff options
Diffstat (limited to 'lib/Target/X86/InstPrinter/X86InstComments.cpp')
| -rw-r--r-- | lib/Target/X86/InstPrinter/X86InstComments.cpp | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/lib/Target/X86/InstPrinter/X86InstComments.cpp b/lib/Target/X86/InstPrinter/X86InstComments.cpp index f5f3a4cc83dc..a46f22ff40f5 100644 --- a/lib/Target/X86/InstPrinter/X86InstComments.cpp +++ b/lib/Target/X86/InstPrinter/X86InstComments.cpp @@ -205,16 +205,14 @@ static MVT getZeroExtensionResultType(const MCInst *MI) { } /// Wraps the destination register name with AVX512 mask/maskz filtering. -static std::string getMaskName(const MCInst *MI, const char *DestName, - const char *(*getRegName)(unsigned)) { - std::string OpMaskName(DestName); - +static void printMasking(raw_ostream &OS, const MCInst *MI, + const char *(*getRegName)(unsigned)) { bool MaskWithZero = false; const char *MaskRegName = nullptr; switch (MI->getOpcode()) { default: - return OpMaskName; + return; CASE_MASKZ_MOVDUP(MOVDDUP, m) CASE_MASKZ_MOVDUP(MOVDDUP, r) CASE_MASKZ_MOVDUP(MOVSHDUP, m) @@ -293,6 +291,8 @@ static std::string getMaskName(const MCInst *MI, const char *DestName, CASE_MASKZ_INS_COMMON(BROADCASTI32X4, , rm) CASE_MASKZ_INS_COMMON(BROADCASTF32X8, , rm) CASE_MASKZ_INS_COMMON(BROADCASTI32X8, , rm) + CASE_MASKZ_INS_COMMON(BROADCASTI32X2, Z128, r) + CASE_MASKZ_INS_COMMON(BROADCASTI32X2, Z128, m) CASE_MASKZ_INS_COMMON(BROADCASTF32X2, Z256, r) CASE_MASKZ_INS_COMMON(BROADCASTI32X2, Z256, r) CASE_MASKZ_INS_COMMON(BROADCASTF32X2, Z256, m) @@ -382,6 +382,8 @@ static std::string getMaskName(const MCInst *MI, const char *DestName, CASE_MASK_INS_COMMON(BROADCASTI32X4, , rm) CASE_MASK_INS_COMMON(BROADCASTF32X8, , rm) CASE_MASK_INS_COMMON(BROADCASTI32X8, , rm) + CASE_MASK_INS_COMMON(BROADCASTI32X2, Z128, r) + CASE_MASK_INS_COMMON(BROADCASTI32X2, Z128, m) CASE_MASK_INS_COMMON(BROADCASTF32X2, Z256, r) CASE_MASK_INS_COMMON(BROADCASTI32X2, Z256, r) CASE_MASK_INS_COMMON(BROADCASTF32X2, Z256, m) @@ -395,15 +397,11 @@ static std::string getMaskName(const MCInst *MI, const char *DestName, } // MASK: zmmX {%kY} - OpMaskName += " {%"; - OpMaskName += MaskRegName; - OpMaskName += "}"; + OS << " {%" << MaskRegName << "}"; // MASKZ: zmmX {%kY} {z} if (MaskWithZero) - OpMaskName += " {z}"; - - return OpMaskName; + OS << " {z}"; } //===----------------------------------------------------------------------===// @@ -585,12 +583,12 @@ bool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS, case X86::VPSLLDQYri: case X86::VPSLLDQZ128rr: case X86::VPSLLDQZ256rr: - case X86::VPSLLDQZ512rr: + case X86::VPSLLDQZrr: Src1Name = getRegName(MI->getOperand(1).getReg()); LLVM_FALLTHROUGH; case X86::VPSLLDQZ128rm: case X86::VPSLLDQZ256rm: - case X86::VPSLLDQZ512rm: + case X86::VPSLLDQZrm: DestName = getRegName(MI->getOperand(0).getReg()); if (MI->getOperand(NumOperands - 1).isImm()) DecodePSLLDQMask(getRegOperandVectorVT(MI, MVT::i8, 0), @@ -603,12 +601,12 @@ bool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS, case X86::VPSRLDQYri: case X86::VPSRLDQZ128rr: case X86::VPSRLDQZ256rr: - case X86::VPSRLDQZ512rr: + case X86::VPSRLDQZrr: Src1Name = getRegName(MI->getOperand(1).getReg()); LLVM_FALLTHROUGH; case X86::VPSRLDQZ128rm: case X86::VPSRLDQZ256rm: - case X86::VPSRLDQZ512rm: + case X86::VPSRLDQZrm: DestName = getRegName(MI->getOperand(0).getReg()); if (MI->getOperand(NumOperands - 1).isImm()) DecodePSRLDQMask(getRegOperandVectorVT(MI, MVT::i8, 0), @@ -1090,6 +1088,13 @@ bool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS, DecodeSubVectorBroadcast(MVT::v16f32, MVT::v8f32, ShuffleMask); DestName = getRegName(MI->getOperand(0).getReg()); break; + CASE_AVX512_INS_COMMON(BROADCASTI32X2, Z128, r) + Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg()); + LLVM_FALLTHROUGH; + CASE_AVX512_INS_COMMON(BROADCASTI32X2, Z128, m) + DecodeSubVectorBroadcast(MVT::v4f32, MVT::v2f32, ShuffleMask); + DestName = getRegName(MI->getOperand(0).getReg()); + break; CASE_AVX512_INS_COMMON(BROADCASTF32X2, Z256, r) CASE_AVX512_INS_COMMON(BROADCASTI32X2, Z256, r) Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg()); @@ -1149,7 +1154,13 @@ bool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS, return false; if (!DestName) DestName = Src1Name; - OS << (DestName ? getMaskName(MI, DestName, getRegName) : "mem") << " = "; + if (DestName) { + OS << DestName; + printMasking(OS, MI, getRegName); + } else + OS << "mem"; + + OS << " = "; // If the two sources are the same, canonicalize the input elements to be // from the first src so that we get larger element spans. |
