diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2014-09-24 02:24:41 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2014-09-24 02:24:41 +0000 |
commit | ab8b37a9d2178543ea7402704dc9c183979101a3 (patch) | |
tree | 02067174419b747d7ac96be1045c0bc51b7928a1 /llvm/lib/Target/X86/X86MCInstLower.cpp | |
parent | 2c419874908cada35c2fb973a3ddb897e6862575 (diff) | |
download | bcm5719-llvm-ab8b37a9d2178543ea7402704dc9c183979101a3.tar.gz bcm5719-llvm-ab8b37a9d2178543ea7402704dc9c183979101a3.zip |
[x86] Hoist the logic for extracting the relevant bits of information
from the MachineInstr into the caller which is already doing a switch
over the instruction.
This will make it more clear how to compute different operands to feed
the comment selection for example.
Also, in a drive-by-fix, don't append an empty comment string (which is
a no-op ultimately).
No functionality changed.
llvm-svn: 218361
Diffstat (limited to 'llvm/lib/Target/X86/X86MCInstLower.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86MCInstLower.cpp | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/llvm/lib/Target/X86/X86MCInstLower.cpp b/llvm/lib/Target/X86/X86MCInstLower.cpp index 411b046f71c..e6f06057377 100644 --- a/llvm/lib/Target/X86/X86MCInstLower.cpp +++ b/llvm/lib/Target/X86/X86MCInstLower.cpp @@ -864,22 +864,16 @@ PrevCrossBBInst(MachineBasicBlock::const_iterator MBBI) { return --MBBI; } -static std::string getShuffleComment(const MachineInstr &MI) { +static std::string getShuffleComment(int Opcode, const MachineOperand &DstOp, + const MachineOperand &SrcOp, + const MachineOperand &MaskOp, + ArrayRef<MachineConstantPoolEntry> Constants) { std::string Comment; SmallVector<int, 16> Mask; - // All of these instructions accept a constant pool operand as their fifth. - assert(MI.getNumOperands() > 5 && - "We should always have at least 5 operands!"); - const MachineOperand &DstOp = MI.getOperand(0); - const MachineOperand &SrcOp = MI.getOperand(1); - const MachineOperand &MaskOp = MI.getOperand(5); - if (!MaskOp.isCPI()) return Comment; - ArrayRef<MachineConstantPoolEntry> Constants = - MI.getParent()->getParent()->getConstantPool()->getConstants(); const MachineConstantPoolEntry &MaskConstantEntry = Constants[MaskOp.getIndex()]; @@ -895,7 +889,7 @@ static std::string getShuffleComment(const MachineInstr &MI) { assert(MaskConstantEntry.getType() == C->getType() && "Expected a constant of the same type!"); - switch (MI.getOpcode()) { + switch (Opcode) { case X86::PSHUFBrm: case X86::VPSHUFBrm: DecodePSHUFBMask(C, Mask); @@ -1118,17 +1112,27 @@ void X86AsmPrinter::EmitInstruction(const MachineInstr *MI) { return; } + // Lower PSHUFB and VPERMILP normally but add a comment if we can find + // a constant shuffle mask. We won't be able to do this at the MC layer + // because the mask isn't an immediate. case X86::PSHUFBrm: case X86::VPSHUFBrm: case X86::VPERMILPSrm: case X86::VPERMILPDrm: case X86::VPERMILPSYrm: case X86::VPERMILPDYrm: { - // Lower PSHUFB and VPERMILP normally but add a comment if we can find - // a constant shuffle mask. We won't be able to do this at the MC layer - // because the mask isn't an immediate. - std::string Comment = getShuffleComment(*MI); - OutStreamer.AddComment(Comment); + // All of these instructions accept a constant pool operand as their fifth. + assert(MI->getNumOperands() > 5 && + "We should always have at least 5 operands!"); + const MachineOperand &DstOp = MI->getOperand(0); + const MachineOperand &SrcOp = MI->getOperand(1); + const MachineOperand &MaskOp = MI->getOperand(5); + + std::string Comment = getShuffleComment( + MI->getOpcode(), DstOp, SrcOp, MaskOp, + MI->getParent()->getParent()->getConstantPool()->getConstants()); + if (!Comment.empty()) + OutStreamer.AddComment(Comment); break; } } |