summaryrefslogtreecommitdiff
path: root/lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp')
-rw-r--r--lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp b/lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp
index 807113134d2..a9439b88003 100644
--- a/lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp
+++ b/lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp
@@ -70,6 +70,11 @@ private:
bool SelectADDR8BitOffset(SDValue Addr, SDValue& Base, SDValue& Offset);
bool SelectADDRReg(SDValue Addr, SDValue& Base, SDValue& Offset);
bool SelectADDRVTX_READ(SDValue Addr, SDValue &Base, SDValue &Offset);
+ bool SelectADDRFrame(SDValue Addr, SDValue &Base, SDValue &Offset);
+ bool SelectALUDst(SDValue N, SDValue &GPR, SDValue &WriteMask, SDValue &Omod,
+ SDValue &Rel, SDValue &Clamp);
+ bool SelectALUSrcOp2(SDValue N, SDValue &GPR, SDValue &Neg, SDValue &Rel,
+ SDValue &Abs);
// Include the pieces autogenerated from the target description.
#include "AMDGPUGenDAGISel.inc"
@@ -97,6 +102,8 @@ SDValue AMDGPUDAGToDAGISel::getSmallIPtrImm(unsigned int Imm) {
return CurDAG->getTargetConstant(Imm, MVT::i32);
}
+
+
bool AMDGPUDAGToDAGISel::SelectADDRParam(
SDValue Addr, SDValue& R1, SDValue& R2) {
@@ -393,3 +400,43 @@ bool AMDGPUDAGToDAGISel::SelectADDRReg(SDValue Addr, SDValue& Base,
return true;
}
+
+bool AMDGPUDAGToDAGISel::SelectADDRFrame(SDValue Addr, SDValue &Base,
+ SDValue &Offset) {
+ if (Addr.getOpcode() == ISD::FrameIndex) {
+ Base = CurDAG->getRegister(AMDGPU::ZERO, MVT::i32);
+ Offset = CurDAG->getConstant(0, MVT::i32);
+// unsigned Reg = AMDGPU::R600_TReg32RegClass.getRegister(RegIndex);
+ return true;
+ }
+
+ if (Addr.getOpcode() == ISD::ADD || Addr.getOpcode() == ISD::OR) {
+ if (FrameIndexSDNode *FIN = dyn_cast<FrameIndexSDNode>(Addr.getOperand(0))) {
+ Base = Addr.getOperand(1);
+ } else {
+ Base = Addr;
+ }
+
+ Offset = CurDAG->getConstant(0, MVT::i32);
+ return true;
+ }
+
+ return false;
+}
+
+bool AMDGPUDAGToDAGISel::SelectALUDst(SDValue N, SDValue &GPR,
+ SDValue &WriteMask, SDValue &Omod,
+ SDValue &Rel, SDValue &Clamp)
+{
+ return false;
+}
+
+bool AMDGPUDAGToDAGISel::SelectALUSrcOp2(SDValue N, SDValue &GPR, SDValue &Neg,
+ SDValue &Rel, SDValue &Abs)
+{
+ GPR = N;
+ Neg = CurDAG->getTargetConstant(0, MVT::i32);
+ Rel = CurDAG->getTargetConstant(0, MVT::i32);
+ Abs = CurDAG->getTargetConstant(0, MVT::i32);
+ return true;
+}