radeon/llvm: Fix encoding of V_CNDMASK_B32
authorTom Stellard <thomas.stellard@amd.com>
Fri, 31 Aug 2012 20:11:38 +0000 (16:11 -0400)
committerTom Stellard <thomas.stellard@amd.com>
Tue, 4 Sep 2012 18:21:10 +0000 (14:21 -0400)
The CodeEmitter was not setting the VGPR bit for src0, because the
instruction definition had the VCC register in the src0 slot, instead of
the actual src0 register.  This has been fixed by moving the VCC
register to the end of the operand list.

src/gallium/drivers/radeon/SIISelLowering.cpp
src/gallium/drivers/radeon/SIInstructions.td

index d2fd995ad015b493307d3fb6dc35c1100e2e1f75..a64e2a378ff2ef910c0bae06e14082638334417a 100644 (file)
@@ -242,9 +242,9 @@ void SITargetLowering::LowerSI_V_CNDLT(MachineInstr *MI, MachineBasicBlock &BB,
 
   BuildMI(BB, I, BB.findDebugLoc(I), TII->get(AMDGPU::V_CNDMASK_B32))
           .addOperand(MI->getOperand(0))
-         .addReg(AMDGPU::VCC)
           .addOperand(MI->getOperand(2))
-          .addOperand(MI->getOperand(3));
+          .addOperand(MI->getOperand(3))
+         .addReg(AMDGPU::VCC);
 
   MI->eraseFromParent();
 }
index 291c03418a0f5373f5a7bf40c7ef7d5b9d328d30..e9e91fda58a98db66874e2b44d57a845b894f4cf 100644 (file)
@@ -670,7 +670,7 @@ def S_WAITCNT : SOPP <0x0000000c, (ins i32imm:$simm16), "S_WAITCNT $simm16",
 
 /* XXX: No VOP3 version of this instruction yet */
 def V_CNDMASK_B32 : VOP2 <0x00000000, (outs VReg_32:$dst),
-  (ins VCCReg:$vcc, AllReg_32:$src0, VReg_32:$src1), "V_CNDMASK_B32",
+  (ins AllReg_32:$src0, VReg_32:$src1, VCCReg:$vcc), "V_CNDMASK_B32",
   [(set (i32 VReg_32:$dst),
    (select VCCReg:$vcc, AllReg_32:$src0, VReg_32:$src1))] > {
 
@@ -680,7 +680,7 @@ def V_CNDMASK_B32 : VOP2 <0x00000000, (outs VReg_32:$dst),
 //f32 pattern for V_CNDMASK_B32
 def : Pat <
   (f32 (select VCCReg:$vcc, AllReg_32:$src0, VReg_32:$src1)),
-  (V_CNDMASK_B32 VCCReg:$vcc, AllReg_32:$src0, VReg_32:$src1)
+  (V_CNDMASK_B32 AllReg_32:$src0, VReg_32:$src1, VCCReg:$vcc)
 >;
 
 defm V_READLANE_B32 : VOP2_32 <0x00000001, "V_READLANE_B32", []>;