On Wed, Dec 26, 2012 at 05:37:21PM +0100, Vincent Lejeune wrote: > --- > lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp | 27 ++++++++++++++++++++++++++- > 1 file changed, 26 insertions(+), 1 deletion(-) >
Reviewed-by: Tom Stellard <thomas.stell...@amd.com> > diff --git a/lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp > b/lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp > index 6f156df..6e07734 100644 > --- a/lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp > +++ b/lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp > @@ -261,7 +261,32 @@ SDNode *AMDGPUDAGToDAGISel::Select(SDNode *N) { > break; > } > } > - return SelectCode(N); > + SDNode *Result = SelectCode(N); > + > + const AMDGPUSubtarget &ST = TM.getSubtarget<AMDGPUSubtarget>(); > + if (ST.device()->getGeneration() <= AMDGPUDeviceInfo::HD6XXX) { > + const R600InstrInfo *TII = > + static_cast<const R600InstrInfo*>(TM.getInstrInfo()); > + if (Result && TII->isALUInstr(Result->getMachineOpcode())) { > + std::vector<SDValue> Ops; > + for(SDNode::op_iterator I = Result->op_begin(), E = Result->op_end(); > + I != E; ++I) { > + SDValue Value = *I; > + SDValue PotentialTGA; > + if (Value.getOpcode() == AMDGPUISD::CONST_ADDRESS && > + !Value.getValueType().isVector() && > + SelectGlobalValueConstantOffset(Value.getOperand(0), > PotentialTGA)) { > + Ops.push_back(PotentialTGA); > + } else { > + Ops.push_back(Value); > + } > + } > + CurDAG->MorphNodeTo(Result, Result->getOpcode(), Result->getVTList(), > + Ops.data(), Ops.size()); > + } > + } > + > + return Result; > } > > bool AMDGPUDAGToDAGISel::checkType(const Value *ptr, unsigned int addrspace) > { > -- > 1.8.0.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev