mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-29 22:30:33 +00:00
AMDGPU: Add MEM_RAT STORE_TYPED.
v2: Add test (Matt). Fix capitalization of isEOP (Matt). Move pattern to class parameter (Matt). Make the instruction available to Cayman (Matt). Change name from MEM_RAT WRITE_TYPED to MEM_RAT STORE_TYPED. Patch by: Zoltan Gilian llvm-svn: 249042
This commit is contained in:
parent
2ee4df3f9e
commit
e835f56682
@ -33,6 +33,14 @@ defm int_r600_read_tgid : R600ReadPreloadRegisterIntrinsic_xyz <
|
||||
"__builtin_r600_read_tgid">;
|
||||
defm int_r600_read_tidig : R600ReadPreloadRegisterIntrinsic_xyz <
|
||||
"__builtin_r600_read_tidig">;
|
||||
|
||||
def int_r600_rat_store_typed :
|
||||
// 1st parameter: Data
|
||||
// 2nd parameter: Index
|
||||
// 3rd parameter: Constant RAT ID
|
||||
Intrinsic<[], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty], []>,
|
||||
GCCBuiltin<"__builtin_r600_rat_store_typed">;
|
||||
|
||||
} // End TargetPrefix = "r600"
|
||||
|
||||
let TargetPrefix = "AMDGPU" in {
|
||||
|
@ -82,6 +82,10 @@ def RAT_STORE_DWORD32 : RAT_STORE_DWORD <R600_TReg32_X, i32, 0x1>;
|
||||
def RAT_STORE_DWORD64 : RAT_STORE_DWORD <R600_Reg64, v2i32, 0x3>;
|
||||
def RAT_STORE_DWORD128 : RAT_STORE_DWORD <R600_Reg128, v4i32, 0xf>;
|
||||
|
||||
def RAT_STORE_TYPED_cm: CF_MEM_RAT_STORE_TYPED<0> {
|
||||
let eop = 0; // This bit is not used on Cayman.
|
||||
}
|
||||
|
||||
class VTX_READ_cm <string name, bits<8> buffer_id, dag outs, list<dag> pattern>
|
||||
: VTX_WORD0_cm, VTX_READ<name, buffer_id, outs, pattern> {
|
||||
|
||||
|
@ -40,6 +40,15 @@ class CF_MEM_RAT <bits<6> rat_inst, bits<4> rat_id, dag ins, string name,
|
||||
: EG_CF_RAT <0x56, rat_inst, rat_id, 0xf /* mask */, (outs), ins,
|
||||
"MEM_RAT "#name, pattern>;
|
||||
|
||||
class CF_MEM_RAT_STORE_TYPED<bits<1> has_eop>
|
||||
: CF_MEM_RAT <0x1, ?, (ins R600_Reg128:$rw_gpr, R600_Reg128:$index_gpr,
|
||||
i32imm:$rat_id, InstFlag:$eop),
|
||||
"STORE_TYPED RAT($rat_id) $rw_gpr, $index_gpr"
|
||||
#!if(has_eop, ", $eop", ""),
|
||||
[(int_r600_rat_store_typed R600_Reg128:$rw_gpr,
|
||||
R600_Reg128:$index_gpr,
|
||||
(i32 imm:$rat_id))]>;
|
||||
|
||||
def RAT_MSKOR : CF_MEM_RAT <0x11, 0,
|
||||
(ins R600_Reg128:$rw_gpr, R600_TReg32_X:$index_gpr),
|
||||
"MSKOR $rw_gpr.XW, $index_gpr",
|
||||
@ -105,6 +114,8 @@ def RAT_WRITE_CACHELESS_128_eg : CF_MEM_RAT_CACHELESS <0x2, 0, 0xf,
|
||||
[(global_store v4i32:$rw_gpr, i32:$index_gpr)]
|
||||
>;
|
||||
|
||||
def RAT_STORE_TYPED_eg: CF_MEM_RAT_STORE_TYPED<1>;
|
||||
|
||||
} // End usesCustomInserter = 1
|
||||
|
||||
class VTX_READ_eg <string name, bits<8> buffer_id, dag outs, list<dag> pattern>
|
||||
|
@ -286,6 +286,14 @@ MachineBasicBlock * R600TargetLowering::EmitInstrWithCustomInserter(
|
||||
.addImm(isEOP(I)); // Set End of program bit
|
||||
break;
|
||||
}
|
||||
case AMDGPU::RAT_STORE_TYPED_eg: {
|
||||
BuildMI(*BB, I, BB->findDebugLoc(I), TII->get(MI->getOpcode()))
|
||||
.addOperand(MI->getOperand(0))
|
||||
.addOperand(MI->getOperand(1))
|
||||
.addOperand(MI->getOperand(2))
|
||||
.addImm(isEOP(I)); // Set End of program bit
|
||||
break;
|
||||
}
|
||||
|
||||
case AMDGPU::TXD: {
|
||||
unsigned T0 = MRI.createVirtualRegister(&AMDGPU::R600_Reg128RegClass);
|
||||
|
24
test/CodeGen/AMDGPU/store_typed.ll
Normal file
24
test/CodeGen/AMDGPU/store_typed.ll
Normal file
@ -0,0 +1,24 @@
|
||||
; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck --check-prefix=EG --check-prefix=FUNC %s
|
||||
; RUN: llc -march=r600 -mcpu=cayman < %s | FileCheck --check-prefix=CM --check-prefix=FUNC %s
|
||||
|
||||
; store to rat 0
|
||||
; FUNC-LABEL: {{^}}store_typed_rat0:
|
||||
; EG: MEM_RAT STORE_TYPED RAT(0) {{T[0-9]+, T[0-9]+}}, 1
|
||||
; CM: MEM_RAT STORE_TYPED RAT(0) {{T[0-9]+, T[0-9]+}}
|
||||
|
||||
define void @store_typed_rat0(<4 x i32> %data, <4 x i32> %index) {
|
||||
call void @llvm.r600.rat.store.typed(<4 x i32> %data, <4 x i32> %index, i32 0)
|
||||
ret void
|
||||
}
|
||||
|
||||
; store to rat 11
|
||||
; FUNC-LABEL: {{^}}store_typed_rat11:
|
||||
; EG: MEM_RAT STORE_TYPED RAT(11) {{T[0-9]+, T[0-9]+}}, 1
|
||||
; CM: MEM_RAT STORE_TYPED RAT(11) {{T[0-9]+, T[0-9]+}}
|
||||
|
||||
define void @store_typed_rat11(<4 x i32> %data, <4 x i32> %index) {
|
||||
call void @llvm.r600.rat.store.typed(<4 x i32> %data, <4 x i32> %index, i32 11)
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @llvm.r600.rat.store.typed(<4 x i32>, <4 x i32>, i32)
|
Loading…
Reference in New Issue
Block a user