From: Chandler Carruth Date: Wed, 24 Sep 2014 02:24:41 +0000 (+0000) Subject: [x86] Hoist the logic for extracting the relevant bits of information X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=7e0f903c6cb7c9238ac60b0d579180e173ecc6f4;p=oota-llvm.git [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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218361 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86MCInstLower.cpp b/lib/Target/X86/X86MCInstLower.cpp index 411b046f71c..e6f06057377 100644 --- a/lib/Target/X86/X86MCInstLower.cpp +++ b/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 Constants) { std::string Comment; SmallVector 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 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; } }