mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-21 06:30:16 +00:00
R600/SI: add folding helper
Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Tom Stellard <thomas.stellard@amd.com> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176100 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
749428f852
commit
c018ecac2f
@ -65,6 +65,10 @@ public:
|
|||||||
SDValue LowerMinMax(SDValue Op, SelectionDAG &DAG) const;
|
SDValue LowerMinMax(SDValue Op, SelectionDAG &DAG) const;
|
||||||
virtual const char* getTargetNodeName(unsigned Opcode) const;
|
virtual const char* getTargetNodeName(unsigned Opcode) const;
|
||||||
|
|
||||||
|
virtual SDNode *PostISelFolding(MachineSDNode *N, SelectionDAG &DAG) const {
|
||||||
|
return N;
|
||||||
|
}
|
||||||
|
|
||||||
// Functions defined in AMDILISelLowering.cpp
|
// Functions defined in AMDILISelLowering.cpp
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@ public:
|
|||||||
|
|
||||||
SDNode *Select(SDNode *N);
|
SDNode *Select(SDNode *N);
|
||||||
virtual const char *getPassName() const;
|
virtual const char *getPassName() const;
|
||||||
|
virtual void PostprocessISelDAG();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
inline SDValue getSmallIPtrImm(unsigned Imm);
|
inline SDValue getSmallIPtrImm(unsigned Imm);
|
||||||
@ -575,3 +576,21 @@ bool AMDGPUDAGToDAGISel::SelectADDRIndirect(SDValue Addr, SDValue &Base,
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AMDGPUDAGToDAGISel::PostprocessISelDAG() {
|
||||||
|
|
||||||
|
// Go over all selected nodes and try to fold them a bit more
|
||||||
|
const AMDGPUTargetLowering& Lowering = ((const AMDGPUTargetLowering&)TLI);
|
||||||
|
for (SelectionDAG::allnodes_iterator I = CurDAG->allnodes_begin(),
|
||||||
|
E = CurDAG->allnodes_end(); I != E; ++I) {
|
||||||
|
|
||||||
|
MachineSDNode *Node = dyn_cast<MachineSDNode>(I);
|
||||||
|
if (!Node)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
SDNode *ResNode = Lowering.PostISelFolding(Node, *CurDAG);
|
||||||
|
if (ResNode != Node)
|
||||||
|
ReplaceUses(Node, ResNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -357,3 +357,9 @@ SDValue SITargetLowering::PerformDAGCombine(SDNode *N,
|
|||||||
}
|
}
|
||||||
return SDValue();
|
return SDValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDNode *SITargetLowering::PostISelFolding(MachineSDNode *Node,
|
||||||
|
SelectionDAG &DAG) const {
|
||||||
|
// TODO: Implement immediate folding
|
||||||
|
return Node;
|
||||||
|
}
|
||||||
|
@ -41,6 +41,7 @@ public:
|
|||||||
virtual EVT getSetCCResultType(EVT VT) const;
|
virtual EVT getSetCCResultType(EVT VT) const;
|
||||||
virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const;
|
virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const;
|
||||||
virtual SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const;
|
virtual SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const;
|
||||||
|
virtual SDNode *PostISelFolding(MachineSDNode *N, SelectionDAG &DAG) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // End namespace llvm
|
} // End namespace llvm
|
||||||
|
Loading…
x
Reference in New Issue
Block a user