summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86MCInstLower.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2014-09-24 02:24:41 +0000
committerChandler Carruth <chandlerc@gmail.com>2014-09-24 02:24:41 +0000
commitab8b37a9d2178543ea7402704dc9c183979101a3 (patch)
tree02067174419b747d7ac96be1045c0bc51b7928a1 /llvm/lib/Target/X86/X86MCInstLower.cpp
parent2c419874908cada35c2fb973a3ddb897e6862575 (diff)
downloadbcm5719-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.cpp36
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;
}
}
OpenPOWER on IntegriCloud