summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorVincent Lejeune <vljn@ovi.com>2013-06-03 15:44:16 +0000
committerVincent Lejeune <vljn@ovi.com>2013-06-03 15:44:16 +0000
commit0962e147a439785279c3665379189017e980e0cc (patch)
tree2580c97e4843b688a58d8cdaf40b0ffbb0153005 /lib
parent3e1d45bf44f882f3ee139d452dd50305d831a341 (diff)
downloadllvm-0962e147a439785279c3665379189017e980e0cc.tar.gz
llvm-0962e147a439785279c3665379189017e980e0cc.tar.bz2
llvm-0962e147a439785279c3665379189017e980e0cc.tar.xz
R600: Constraints input regs of interp_xy,_zw
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183106 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Target/R600/R600ISelLowering.cpp22
-rw-r--r--lib/Target/R600/R600Instructions.td4
2 files changed, 15 insertions, 11 deletions
diff --git a/lib/Target/R600/R600ISelLowering.cpp b/lib/Target/R600/R600ISelLowering.cpp
index de6c5046a7..00adca33e1 100644
--- a/lib/Target/R600/R600ISelLowering.cpp
+++ b/lib/Target/R600/R600ISelLowering.cpp
@@ -543,21 +543,25 @@ SDValue R600TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const
DL, MVT::f32, SDValue(interp, 0));
}
+ MachineFunction &MF = DAG.getMachineFunction();
+ MachineRegisterInfo &MRI = MF.getRegInfo();
+ unsigned RegisterI = AMDGPU::R600_TReg32RegClass.getRegister(2 * ijb);
+ unsigned RegisterJ = AMDGPU::R600_TReg32RegClass.getRegister(2 * ijb + 1);
+ MRI.addLiveIn(RegisterI);
+ MRI.addLiveIn(RegisterJ);
+ SDValue RegisterINode = DAG.getCopyFromReg(DAG.getEntryNode(),
+ SDLoc(DAG.getEntryNode()), RegisterI, MVT::f32);
+ SDValue RegisterJNode = DAG.getCopyFromReg(DAG.getEntryNode(),
+ SDLoc(DAG.getEntryNode()), RegisterJ, MVT::f32);
+
if (slot % 4 < 2)
interp = DAG.getMachineNode(AMDGPU::INTERP_PAIR_XY, DL,
MVT::f32, MVT::f32, DAG.getTargetConstant(slot / 4 , MVT::i32),
- CreateLiveInRegister(DAG, &AMDGPU::R600_TReg32RegClass,
- AMDGPU::R600_TReg32RegClass.getRegister(2 * ijb + 1), MVT::f32),
- CreateLiveInRegister(DAG, &AMDGPU::R600_TReg32RegClass,
- AMDGPU::R600_TReg32RegClass.getRegister(2 * ijb), MVT::f32));
+ RegisterJNode, RegisterINode);
else
interp = DAG.getMachineNode(AMDGPU::INTERP_PAIR_ZW, DL,
MVT::f32, MVT::f32, DAG.getTargetConstant(slot / 4 , MVT::i32),
- CreateLiveInRegister(DAG, &AMDGPU::R600_TReg32RegClass,
- AMDGPU::R600_TReg32RegClass.getRegister(2 * ijb + 1), MVT::f32),
- CreateLiveInRegister(DAG, &AMDGPU::R600_TReg32RegClass,
- AMDGPU::R600_TReg32RegClass.getRegister(2 * ijb), MVT::f32));
-
+ RegisterJNode, RegisterINode);
return SDValue(interp, slot % 2);
}
case AMDGPUIntrinsic::R600_tex:
diff --git a/lib/Target/R600/R600Instructions.td b/lib/Target/R600/R600Instructions.td
index 3f2b4993aa..02a2d55f48 100644
--- a/lib/Target/R600/R600Instructions.td
+++ b/lib/Target/R600/R600Instructions.td
@@ -578,13 +578,13 @@ def isR600toCayman : Predicate<
def INTERP_PAIR_XY : AMDGPUShaderInst <
(outs R600_TReg32_X:$dst0, R600_TReg32_Y:$dst1),
- (ins i32imm:$src0, R600_Reg32:$src1, R600_Reg32:$src2),
+ (ins i32imm:$src0, R600_TReg32_Y:$src1, R600_TReg32_X:$src2),
"INTERP_PAIR_XY $src0 $src1 $src2 : $dst0 dst1",
[]>;
def INTERP_PAIR_ZW : AMDGPUShaderInst <
(outs R600_TReg32_Z:$dst0, R600_TReg32_W:$dst1),
- (ins i32imm:$src0, R600_Reg32:$src1, R600_Reg32:$src2),
+ (ins i32imm:$src0, R600_TReg32_Y:$src1, R600_TReg32_X:$src2),
"INTERP_PAIR_ZW $src0 $src1 $src2 : $dst0 dst1",
[]>;