diff options
author | Craig Topper <craig.topper@gmail.com> | 2016-06-10 04:48:05 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2016-06-10 04:48:05 +0000 |
commit | 89c1761474e83f54b7b351c75ba5baae5d79f610 (patch) | |
tree | 683a37525e76be36cb57e903c88e611e6af730e1 /llvm/lib/Target/X86/InstPrinter/X86InstComments.cpp | |
parent | e50bf75196e4145ed88e58f92fc8387e9d85b9fa (diff) | |
download | bcm5719-llvm-89c1761474e83f54b7b351c75ba5baae5d79f610.tar.gz bcm5719-llvm-89c1761474e83f54b7b351c75ba5baae5d79f610.zip |
[AVX512] Fix shuffle comment printing to handle the masked versions of some shuffles. Previously we were printing the mask operands as the register names.
llvm-svn: 272367
Diffstat (limited to 'llvm/lib/Target/X86/InstPrinter/X86InstComments.cpp')
-rw-r--r-- | llvm/lib/Target/X86/InstPrinter/X86InstComments.cpp | 76 |
1 files changed, 46 insertions, 30 deletions
diff --git a/llvm/lib/Target/X86/InstPrinter/X86InstComments.cpp b/llvm/lib/Target/X86/InstPrinter/X86InstComments.cpp index c36c025487f..539d8ac603a 100644 --- a/llvm/lib/Target/X86/InstPrinter/X86InstComments.cpp +++ b/llvm/lib/Target/X86/InstPrinter/X86InstComments.cpp @@ -163,6 +163,7 @@ bool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS, SmallVector<int, 8> ShuffleMask; const char *DestName = nullptr, *Src1Name = nullptr, *Src2Name = nullptr; unsigned NumOperands = MI->getNumOperands(); + bool RegForm = false; switch (MI->getOpcode()) { default: @@ -355,10 +356,11 @@ bool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS, break; CASE_SHUF(PALIGNR, rri) - Src1Name = getRegName(MI->getOperand(2).getReg()); + Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg()); + RegForm = true; // FALL THROUGH. CASE_SHUF(PALIGNR, rmi) - Src2Name = getRegName(MI->getOperand(1).getReg()); + Src2Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg()); DestName = getRegName(MI->getOperand(0).getReg()); if (MI->getOperand(NumOperands - 1).isImm()) DecodePALIGNRMask(getRegOperandVectorVT(MI, MVT::i8, 0), @@ -420,109 +422,119 @@ bool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS, CASE_UNPCK(PUNPCKHBW, r) case X86::MMX_PUNPCKHBWirr: - Src2Name = getRegName(MI->getOperand(2).getReg()); + Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg()); + RegForm = true; // FALL THROUGH. CASE_UNPCK(PUNPCKHBW, m) case X86::MMX_PUNPCKHBWirm: - Src1Name = getRegName(MI->getOperand(1).getReg()); + Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg()); DestName = getRegName(MI->getOperand(0).getReg()); DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i8, 0), ShuffleMask); break; CASE_UNPCK(PUNPCKHWD, r) case X86::MMX_PUNPCKHWDirr: - Src2Name = getRegName(MI->getOperand(2).getReg()); + Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg()); + RegForm = true; // FALL THROUGH. CASE_UNPCK(PUNPCKHWD, m) case X86::MMX_PUNPCKHWDirm: - Src1Name = getRegName(MI->getOperand(1).getReg()); + Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg()); DestName = getRegName(MI->getOperand(0).getReg()); DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i16, 0), ShuffleMask); break; CASE_UNPCK(PUNPCKHDQ, r) case X86::MMX_PUNPCKHDQirr: - Src2Name = getRegName(MI->getOperand(2).getReg()); + Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg()); + RegForm = true; // FALL THROUGH. CASE_UNPCK(PUNPCKHDQ, m) case X86::MMX_PUNPCKHDQirm: - Src1Name = getRegName(MI->getOperand(1).getReg()); + Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg()); DestName = getRegName(MI->getOperand(0).getReg()); DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i32, 0), ShuffleMask); break; CASE_UNPCK(PUNPCKHQDQ, r) - Src2Name = getRegName(MI->getOperand(2).getReg()); + Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg()); + RegForm = true; // FALL THROUGH. CASE_UNPCK(PUNPCKHQDQ, m) - Src1Name = getRegName(MI->getOperand(1).getReg()); + Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg()); DestName = getRegName(MI->getOperand(0).getReg()); DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i64, 0), ShuffleMask); break; CASE_UNPCK(PUNPCKLBW, r) case X86::MMX_PUNPCKLBWirr: - Src2Name = getRegName(MI->getOperand(2).getReg()); + Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg()); + RegForm = true; // FALL THROUGH. CASE_UNPCK(PUNPCKLBW, m) case X86::MMX_PUNPCKLBWirm: - Src1Name = getRegName(MI->getOperand(1).getReg()); + Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg()); DestName = getRegName(MI->getOperand(0).getReg()); DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i8, 0), ShuffleMask); break; CASE_UNPCK(PUNPCKLWD, r) case X86::MMX_PUNPCKLWDirr: - Src2Name = getRegName(MI->getOperand(2).getReg()); + Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg()); + RegForm = true; // FALL THROUGH. CASE_UNPCK(PUNPCKLWD, m) case X86::MMX_PUNPCKLWDirm: - Src1Name = getRegName(MI->getOperand(1).getReg()); + Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg()); DestName = getRegName(MI->getOperand(0).getReg()); DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i16, 0), ShuffleMask); break; CASE_UNPCK(PUNPCKLDQ, r) case X86::MMX_PUNPCKLDQirr: - Src2Name = getRegName(MI->getOperand(2).getReg()); + Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg()); + RegForm = true; // FALL THROUGH. CASE_UNPCK(PUNPCKLDQ, m) case X86::MMX_PUNPCKLDQirm: - Src1Name = getRegName(MI->getOperand(1).getReg()); + Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg()); DestName = getRegName(MI->getOperand(0).getReg()); DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i32, 0), ShuffleMask); break; CASE_UNPCK(PUNPCKLQDQ, r) - Src2Name = getRegName(MI->getOperand(2).getReg()); + Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg()); + RegForm = true; // FALL THROUGH. CASE_UNPCK(PUNPCKLQDQ, m) - Src1Name = getRegName(MI->getOperand(1).getReg()); + Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg()); DestName = getRegName(MI->getOperand(0).getReg()); DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i64, 0), ShuffleMask); break; CASE_SHUF(SHUFPD, rri) - Src2Name = getRegName(MI->getOperand(2).getReg()); + Src2Name = getRegName(MI->getOperand(NumOperands - 2).getReg()); + RegForm = true; // FALL THROUGH. CASE_SHUF(SHUFPD, rmi) if (MI->getOperand(NumOperands - 1).isImm()) DecodeSHUFPMask(getRegOperandVectorVT(MI, MVT::f64, 0), MI->getOperand(NumOperands - 1).getImm(), ShuffleMask); - Src1Name = getRegName(MI->getOperand(1).getReg()); + Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg()); DestName = getRegName(MI->getOperand(0).getReg()); break; CASE_SHUF(SHUFPS, rri) - Src2Name = getRegName(MI->getOperand(2).getReg()); + Src2Name = getRegName(MI->getOperand(NumOperands - 2).getReg()); + RegForm = true; // FALL THROUGH. CASE_SHUF(SHUFPS, rmi) if (MI->getOperand(NumOperands - 1).isImm()) DecodeSHUFPMask(getRegOperandVectorVT(MI, MVT::f32, 0), MI->getOperand(NumOperands - 1).getImm(), ShuffleMask); - Src1Name = getRegName(MI->getOperand(1).getReg()); + Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg()); DestName = getRegName(MI->getOperand(0).getReg()); break; @@ -548,38 +560,42 @@ bool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS, } CASE_UNPCK(UNPCKLPD, r) - Src2Name = getRegName(MI->getOperand(2).getReg()); + Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg()); + RegForm = true; // FALL THROUGH. CASE_UNPCK(UNPCKLPD, m) DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::f64, 0), ShuffleMask); - Src1Name = getRegName(MI->getOperand(1).getReg()); + Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg()); DestName = getRegName(MI->getOperand(0).getReg()); break; CASE_UNPCK(UNPCKLPS, r) - Src2Name = getRegName(MI->getOperand(2).getReg()); + Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg()); + RegForm = true; // FALL THROUGH. CASE_UNPCK(UNPCKLPS, m) DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::f32, 0), ShuffleMask); - Src1Name = getRegName(MI->getOperand(1).getReg()); + Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg()); DestName = getRegName(MI->getOperand(0).getReg()); break; CASE_UNPCK(UNPCKHPD, r) - Src2Name = getRegName(MI->getOperand(2).getReg()); + Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg()); + RegForm = true; // FALL THROUGH. CASE_UNPCK(UNPCKHPD, m) DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::f64, 0), ShuffleMask); - Src1Name = getRegName(MI->getOperand(1).getReg()); + Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg()); DestName = getRegName(MI->getOperand(0).getReg()); break; CASE_UNPCK(UNPCKHPS, r) - Src2Name = getRegName(MI->getOperand(2).getReg()); + Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg()); + RegForm = true; // FALL THROUGH. CASE_UNPCK(UNPCKHPS, m) DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::f32, 0), ShuffleMask); - Src1Name = getRegName(MI->getOperand(1).getReg()); + Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg()); DestName = getRegName(MI->getOperand(0).getReg()); break; |