R600/SI: Fix bug where immediates were being used in DS addr operands
[oota-llvm.git] / lib / Target / R600 / AMDGPUISelDAGToDAG.cpp
index becb7112217fd54a976a55c0c384744d82def94a..c75397165970513ad40b2d5d2a55a99cc728e0ab 100644 (file)
@@ -793,7 +793,10 @@ bool AMDGPUDAGToDAGISel::SelectDS1Addr1Offset(SDValue Addr, SDValue &Base,
   // into read2 / write2 instructions.
   if (const ConstantSDNode *CAddr = dyn_cast<ConstantSDNode>(Addr)) {
     if (isUInt<16>(CAddr->getZExtValue())) {
-      Base = CurDAG->getConstant(0, MVT::i32);
+      SDValue Zero = CurDAG->getTargetConstant(0, MVT::i32);
+      MachineSDNode *MovZero = CurDAG->getMachineNode(AMDGPU::V_MOV_B32_e32,
+                                 SDLoc(Addr), MVT::i32, Zero);
+      Base = SDValue(MovZero, 0);
       Offset = Addr;
       return true;
     }