R600/SI: Try to fix BFE operands when moving to VALU
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 13 May 2014 23:45:50 +0000 (23:45 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 13 May 2014 23:45:50 +0000 (23:45 +0000)
This was broken by r208479

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208740 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/R600/SIInstrInfo.cpp
test/CodeGen/R600/llvm.AMDGPU.bfe.i32.ll

index fbea8f966faf6f6ef3eb9e117eacd0e66f96e470..c6ccbea587391524f511b43c4c432ba57b14058f 100644 (file)
@@ -1217,12 +1217,12 @@ void SIInstrInfo::moveToVALU(MachineInstr &TopInst) const {
       Inst->RemoveOperand(2); // Remove old immediate.
       Inst->addOperand(Inst->getOperand(1));
       Inst->getOperand(1).ChangeToImmediate(0);
+      Inst->addOperand(MachineOperand::CreateImm(0));
       Inst->addOperand(MachineOperand::CreateImm(Offset));
       Inst->addOperand(MachineOperand::CreateImm(0));
       Inst->addOperand(MachineOperand::CreateImm(BitWidth));
       Inst->addOperand(MachineOperand::CreateImm(0));
       Inst->addOperand(MachineOperand::CreateImm(0));
-      Inst->addOperand(MachineOperand::CreateImm(0));
     }
 
     // Update the destination register class.
index d15cb3298302a7b7b7d2b1f63a9297e7b0da37fe..b3fec06f18d92ebea1923db89344a2c07e768295 100644 (file)
@@ -39,3 +39,12 @@ define void @bfe_i32_imm_arg_arg(i32 addrspace(1)* %out, i32 %src1, i32 %src2) n
   store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
   ret void
 }
+
+; FUNC-LABEL: @v_bfe_print_arg
+; SI: V_BFE_I32 v{{[0-9]+}}, v{{[0-9]+}}, 2, 8
+define void @v_bfe_print_arg(i32 addrspace(1)* %out, i32 addrspace(1)* %src0) nounwind {
+  %load = load i32 addrspace(1)* %src0, align 4
+  %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 %load, i32 2, i32 8) nounwind readnone
+  store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
+  ret void
+}