summaryrefslogtreecommitdiff
path: root/lib/Target/X86/InstPrinter/X86InstComments.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/X86/InstPrinter/X86InstComments.cpp')
-rw-r--r--lib/Target/X86/InstPrinter/X86InstComments.cpp43
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.