diff options
Diffstat (limited to 'lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp')
-rw-r--r-- | lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp | 47 |
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; +} |