[PATCH] R600/SI: Remove promotion of instructions to e64 forms.
Tom Stellard
tom at stellard.net
Wed Sep 17 08:28:22 PDT 2014
On Mon, Sep 15, 2014 at 05:26:28PM +0000, Matt Arsenault wrote:
> Instructions are now generally selected to the e64 forms originally,
> and shrunk down later. Rename foldOperands to legalizeOperands,
> since that's really most of what it tries to do.
>
LGTM.
> http://reviews.llvm.org/D5358
>
> Files:
> lib/Target/R600/SIISelLowering.cpp
> lib/Target/R600/SIISelLowering.h
> Index: lib/Target/R600/SIISelLowering.cpp
> ===================================================================
> --- lib/Target/R600/SIISelLowering.cpp
> +++ lib/Target/R600/SIISelLowering.cpp
> @@ -1709,10 +1709,10 @@
> return false;
> }
>
> -/// \brief Try to fold the Nodes operands into the Node
> -SDNode *SITargetLowering::foldOperands(MachineSDNode *Node,
> - SelectionDAG &DAG) const {
> -
> +/// \brief Try to commute instructions and insert copies in order to satisfy the
> +/// operand constraints.
> +SDNode *SITargetLowering::legalizeOperands(MachineSDNode *Node,
> + SelectionDAG &DAG) const {
> // Original encoding (either e32 or e64)
> int Opcode = Node->getMachineOpcode();
> const SIInstrInfo *TII = static_cast<const SIInstrInfo *>(
> @@ -1729,13 +1729,6 @@
> assert(!DescRev || DescRev->getNumDefs() == NumDefs);
> assert(!DescRev || DescRev->getNumOperands() == NumOps);
>
> - // e64 version if available, -1 otherwise
> - int OpcodeE64 = AMDGPU::getVOPe64(Opcode);
> - const MCInstrDesc *DescE64 = OpcodeE64 == -1 ? nullptr : &TII->get(OpcodeE64);
> - int InputModifiers[3] = {0};
> -
> - assert(!DescE64 || DescE64->getNumDefs() == NumDefs);
> -
> int32_t Immediate = Desc->getSize() == 4 ? 0 : -1;
> bool HaveVSrc = false, HaveSSrc = false;
>
> @@ -1767,7 +1760,6 @@
>
> // Second go over the operands and try to fold them
> std::vector<SDValue> Ops;
> - bool Promote2e64 = false;
> for (unsigned i = 0, e = Node->getNumOperands(), Op = NumDefs;
> i != e && Op < NumOps; ++i, ++Op) {
>
> @@ -1816,50 +1808,6 @@
> continue;
> }
> }
> -
> - if (Immediate)
> - continue;
> -
> - if (DescE64) {
> - // Test if it makes sense to switch to e64 encoding
> - unsigned OtherRegClass = DescE64->OpInfo[Op].RegClass;
> - if (!isVSrc(OtherRegClass) && !isSSrc(OtherRegClass))
> - continue;
> -
> - int32_t TmpImm = -1;
> - if (foldImm(Ops[i], TmpImm, ScalarSlotUsed) ||
> - (!fitsRegClass(DAG, Ops[i], RegClass) &&
> - fitsRegClass(DAG, Ops[1], OtherRegClass))) {
> -
> - // Switch to e64 encoding
> - Immediate = -1;
> - Promote2e64 = true;
> - Desc = DescE64;
> - DescE64 = nullptr;
> - }
> - }
> -
> - if (!DescE64 && !Promote2e64)
> - continue;
> - if (!Operand.isMachineOpcode())
> - continue;
> - }
> -
> - if (Promote2e64) {
> - std::vector<SDValue> OldOps(Ops);
> - Ops.clear();
> - bool HasModifiers = TII->hasModifiers(Desc->Opcode);
> - for (unsigned i = 0; i < OldOps.size(); ++i) {
> - // src_modifier
> - if (HasModifiers)
> - Ops.push_back(DAG.getTargetConstant(InputModifiers[i], MVT::i32));
> - Ops.push_back(OldOps[i]);
> - }
> - // Add the modifier flags while promoting
> - if (HasModifiers) {
> - for (unsigned i = 0; i < 2; ++i)
> - Ops.push_back(DAG.getTargetConstant(0, MVT::i32));
> - }
> }
>
> // Add optional chain and glue
> @@ -1978,7 +1926,7 @@
> if (TII->isMIMG(Node->getMachineOpcode()))
> adjustWritemask(Node, DAG);
>
> - return foldOperands(Node, DAG);
> + return legalizeOperands(Node, DAG);
> }
>
> /// \brief Assign the register class depending on the number of
> Index: lib/Target/R600/SIISelLowering.h
> ===================================================================
> --- lib/Target/R600/SIISelLowering.h
> +++ lib/Target/R600/SIISelLowering.h
> @@ -50,7 +50,7 @@
> void ensureSRegLimit(SelectionDAG &DAG, SDValue &Operand,
> unsigned RegClass, bool &ScalarSlotUsed) const;
>
> - SDNode *foldOperands(MachineSDNode *N, SelectionDAG &DAG) const;
> + SDNode *legalizeOperands(MachineSDNode *N, SelectionDAG &DAG) const;
> void adjustWritemask(MachineSDNode *&N, SelectionDAG &DAG) const;
> MachineSDNode *AdjustRegClass(MachineSDNode *N, SelectionDAG &DAG) const;
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list