mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-12 13:30:51 +00:00
R600/SI: Add intrinsic for texture image loading
Patch by: Michel Dänzer Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Tom Stellard <thomas.stellard@amd.com> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181267 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e756ffd888
commit
651a4c8ee0
@ -335,7 +335,22 @@ class MTBUF_Load_Helper <bits<3> op, string asm, RegisterClass regClass> : MTBUF
|
|||||||
let mayStore = 0;
|
let mayStore = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
class MIMG_Load_Helper <bits<7> op, string asm> : MIMG <
|
class MIMG_NoSampler_Helper <bits<7> op, string asm> : MIMG <
|
||||||
|
op,
|
||||||
|
(outs VReg_128:$vdata),
|
||||||
|
(ins i32imm:$dmask, i1imm:$unorm, i1imm:$glc, i1imm:$da, i1imm:$r128,
|
||||||
|
i1imm:$tfe, i1imm:$lwe, i1imm:$slc, unknown:$vaddr,
|
||||||
|
SReg_256:$srsrc),
|
||||||
|
asm#" $vdata, $dmask, $unorm, $glc, $da, $r128,"
|
||||||
|
#" $tfe, $lwe, $slc, $vaddr, $srsrc",
|
||||||
|
[]> {
|
||||||
|
let SSAMP = 0;
|
||||||
|
let mayLoad = 1;
|
||||||
|
let mayStore = 0;
|
||||||
|
let hasPostISelHook = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
class MIMG_Sampler_Helper <bits<7> op, string asm> : MIMG <
|
||||||
op,
|
op,
|
||||||
(outs VReg_128:$vdata),
|
(outs VReg_128:$vdata),
|
||||||
(ins i32imm:$dmask, i1imm:$unorm, i1imm:$glc, i1imm:$da, i1imm:$r128,
|
(ins i32imm:$dmask, i1imm:$unorm, i1imm:$glc, i1imm:$da, i1imm:$r128,
|
||||||
@ -382,7 +397,7 @@ def getCommuteOrig : InstrMapping {
|
|||||||
|
|
||||||
// Test if the supplied opcode is an MIMG instruction
|
// Test if the supplied opcode is an MIMG instruction
|
||||||
def isMIMG : InstrMapping {
|
def isMIMG : InstrMapping {
|
||||||
let FilterClass = "MIMG_Load_Helper";
|
let FilterClass = "MIMG";
|
||||||
let RowFields = ["Inst"];
|
let RowFields = ["Inst"];
|
||||||
let ColFields = ["Size"];
|
let ColFields = ["Size"];
|
||||||
let KeyCol = ["8"];
|
let KeyCol = ["8"];
|
||||||
|
@ -495,7 +495,7 @@ defm S_BUFFER_LOAD_DWORDX16 : SMRD_Helper <
|
|||||||
//def S_MEMTIME : SMRD_ <0x0000001e, "S_MEMTIME", []>;
|
//def S_MEMTIME : SMRD_ <0x0000001e, "S_MEMTIME", []>;
|
||||||
//def S_DCACHE_INV : SMRD_ <0x0000001f, "S_DCACHE_INV", []>;
|
//def S_DCACHE_INV : SMRD_ <0x0000001f, "S_DCACHE_INV", []>;
|
||||||
//def IMAGE_LOAD : MIMG_NoPattern_ <"IMAGE_LOAD", 0x00000000>;
|
//def IMAGE_LOAD : MIMG_NoPattern_ <"IMAGE_LOAD", 0x00000000>;
|
||||||
//def IMAGE_LOAD_MIP : MIMG_NoPattern_ <"IMAGE_LOAD_MIP", 0x00000001>;
|
def IMAGE_LOAD_MIP : MIMG_NoSampler_Helper <0x00000001, "IMAGE_LOAD_MIP">;
|
||||||
//def IMAGE_LOAD_PCK : MIMG_NoPattern_ <"IMAGE_LOAD_PCK", 0x00000002>;
|
//def IMAGE_LOAD_PCK : MIMG_NoPattern_ <"IMAGE_LOAD_PCK", 0x00000002>;
|
||||||
//def IMAGE_LOAD_PCK_SGN : MIMG_NoPattern_ <"IMAGE_LOAD_PCK_SGN", 0x00000003>;
|
//def IMAGE_LOAD_PCK_SGN : MIMG_NoPattern_ <"IMAGE_LOAD_PCK_SGN", 0x00000003>;
|
||||||
//def IMAGE_LOAD_MIP_PCK : MIMG_NoPattern_ <"IMAGE_LOAD_MIP_PCK", 0x00000004>;
|
//def IMAGE_LOAD_MIP_PCK : MIMG_NoPattern_ <"IMAGE_LOAD_MIP_PCK", 0x00000004>;
|
||||||
@ -522,20 +522,20 @@ defm S_BUFFER_LOAD_DWORDX16 : SMRD_Helper <
|
|||||||
//def IMAGE_ATOMIC_FCMPSWAP : MIMG_NoPattern_ <"IMAGE_ATOMIC_FCMPSWAP", 0x0000001d>;
|
//def IMAGE_ATOMIC_FCMPSWAP : MIMG_NoPattern_ <"IMAGE_ATOMIC_FCMPSWAP", 0x0000001d>;
|
||||||
//def IMAGE_ATOMIC_FMIN : MIMG_NoPattern_ <"IMAGE_ATOMIC_FMIN", 0x0000001e>;
|
//def IMAGE_ATOMIC_FMIN : MIMG_NoPattern_ <"IMAGE_ATOMIC_FMIN", 0x0000001e>;
|
||||||
//def IMAGE_ATOMIC_FMAX : MIMG_NoPattern_ <"IMAGE_ATOMIC_FMAX", 0x0000001f>;
|
//def IMAGE_ATOMIC_FMAX : MIMG_NoPattern_ <"IMAGE_ATOMIC_FMAX", 0x0000001f>;
|
||||||
def IMAGE_SAMPLE : MIMG_Load_Helper <0x00000020, "IMAGE_SAMPLE">;
|
def IMAGE_SAMPLE : MIMG_Sampler_Helper <0x00000020, "IMAGE_SAMPLE">;
|
||||||
//def IMAGE_SAMPLE_CL : MIMG_NoPattern_ <"IMAGE_SAMPLE_CL", 0x00000021>;
|
//def IMAGE_SAMPLE_CL : MIMG_NoPattern_ <"IMAGE_SAMPLE_CL", 0x00000021>;
|
||||||
def IMAGE_SAMPLE_D : MIMG_Load_Helper <0x00000022, "IMAGE_SAMPLE_D">;
|
def IMAGE_SAMPLE_D : MIMG_Sampler_Helper <0x00000022, "IMAGE_SAMPLE_D">;
|
||||||
//def IMAGE_SAMPLE_D_CL : MIMG_NoPattern_ <"IMAGE_SAMPLE_D_CL", 0x00000023>;
|
//def IMAGE_SAMPLE_D_CL : MIMG_NoPattern_ <"IMAGE_SAMPLE_D_CL", 0x00000023>;
|
||||||
def IMAGE_SAMPLE_L : MIMG_Load_Helper <0x00000024, "IMAGE_SAMPLE_L">;
|
def IMAGE_SAMPLE_L : MIMG_Sampler_Helper <0x00000024, "IMAGE_SAMPLE_L">;
|
||||||
def IMAGE_SAMPLE_B : MIMG_Load_Helper <0x00000025, "IMAGE_SAMPLE_B">;
|
def IMAGE_SAMPLE_B : MIMG_Sampler_Helper <0x00000025, "IMAGE_SAMPLE_B">;
|
||||||
//def IMAGE_SAMPLE_B_CL : MIMG_NoPattern_ <"IMAGE_SAMPLE_B_CL", 0x00000026>;
|
//def IMAGE_SAMPLE_B_CL : MIMG_NoPattern_ <"IMAGE_SAMPLE_B_CL", 0x00000026>;
|
||||||
//def IMAGE_SAMPLE_LZ : MIMG_NoPattern_ <"IMAGE_SAMPLE_LZ", 0x00000027>;
|
//def IMAGE_SAMPLE_LZ : MIMG_NoPattern_ <"IMAGE_SAMPLE_LZ", 0x00000027>;
|
||||||
def IMAGE_SAMPLE_C : MIMG_Load_Helper <0x00000028, "IMAGE_SAMPLE_C">;
|
def IMAGE_SAMPLE_C : MIMG_Sampler_Helper <0x00000028, "IMAGE_SAMPLE_C">;
|
||||||
//def IMAGE_SAMPLE_C_CL : MIMG_NoPattern_ <"IMAGE_SAMPLE_C_CL", 0x00000029>;
|
//def IMAGE_SAMPLE_C_CL : MIMG_NoPattern_ <"IMAGE_SAMPLE_C_CL", 0x00000029>;
|
||||||
//def IMAGE_SAMPLE_C_D : MIMG_NoPattern_ <"IMAGE_SAMPLE_C_D", 0x0000002a>;
|
//def IMAGE_SAMPLE_C_D : MIMG_NoPattern_ <"IMAGE_SAMPLE_C_D", 0x0000002a>;
|
||||||
//def IMAGE_SAMPLE_C_D_CL : MIMG_NoPattern_ <"IMAGE_SAMPLE_C_D_CL", 0x0000002b>;
|
//def IMAGE_SAMPLE_C_D_CL : MIMG_NoPattern_ <"IMAGE_SAMPLE_C_D_CL", 0x0000002b>;
|
||||||
def IMAGE_SAMPLE_C_L : MIMG_Load_Helper <0x0000002c, "IMAGE_SAMPLE_C_L">;
|
def IMAGE_SAMPLE_C_L : MIMG_Sampler_Helper <0x0000002c, "IMAGE_SAMPLE_C_L">;
|
||||||
def IMAGE_SAMPLE_C_B : MIMG_Load_Helper <0x0000002d, "IMAGE_SAMPLE_C_B">;
|
def IMAGE_SAMPLE_C_B : MIMG_Sampler_Helper <0x0000002d, "IMAGE_SAMPLE_C_B">;
|
||||||
//def IMAGE_SAMPLE_C_B_CL : MIMG_NoPattern_ <"IMAGE_SAMPLE_C_B_CL", 0x0000002e>;
|
//def IMAGE_SAMPLE_C_B_CL : MIMG_NoPattern_ <"IMAGE_SAMPLE_C_B_CL", 0x0000002e>;
|
||||||
//def IMAGE_SAMPLE_C_LZ : MIMG_NoPattern_ <"IMAGE_SAMPLE_C_LZ", 0x0000002f>;
|
//def IMAGE_SAMPLE_C_LZ : MIMG_NoPattern_ <"IMAGE_SAMPLE_C_LZ", 0x0000002f>;
|
||||||
//def IMAGE_SAMPLE_O : MIMG_NoPattern_ <"IMAGE_SAMPLE_O", 0x00000030>;
|
//def IMAGE_SAMPLE_O : MIMG_NoPattern_ <"IMAGE_SAMPLE_O", 0x00000030>;
|
||||||
@ -1281,6 +1281,25 @@ defm : SamplePatterns<v4i32>;
|
|||||||
defm : SamplePatterns<v8i32>;
|
defm : SamplePatterns<v8i32>;
|
||||||
defm : SamplePatterns<v16i32>;
|
defm : SamplePatterns<v16i32>;
|
||||||
|
|
||||||
|
/* int_SI_imageload for texture fetches consuming varying address parameters */
|
||||||
|
class ImageLoadPattern<Intrinsic name, MIMG opcode, ValueType addr_type> : Pat <
|
||||||
|
(name addr_type:$addr, v32i8:$rsrc, imm),
|
||||||
|
(opcode 0xf, 0, 0, 0, 0, 0, 0, 0, $addr, $rsrc)
|
||||||
|
>;
|
||||||
|
|
||||||
|
class ImageLoadArrayPattern<Intrinsic name, MIMG opcode, ValueType addr_type> : Pat <
|
||||||
|
(name addr_type:$addr, v32i8:$rsrc, TEX_ARRAY),
|
||||||
|
(opcode 0xf, 0, 0, 1, 0, 0, 0, 0, $addr, $rsrc)
|
||||||
|
>;
|
||||||
|
|
||||||
|
multiclass ImageLoadPatterns<ValueType addr_type> {
|
||||||
|
def : ImageLoadPattern <int_SI_imageload, IMAGE_LOAD_MIP, addr_type>;
|
||||||
|
def : ImageLoadArrayPattern <int_SI_imageload, IMAGE_LOAD_MIP, addr_type>;
|
||||||
|
}
|
||||||
|
|
||||||
|
defm : ImageLoadPatterns<v2i32>;
|
||||||
|
defm : ImageLoadPatterns<v4i32>;
|
||||||
|
|
||||||
/********** ============================================ **********/
|
/********** ============================================ **********/
|
||||||
/********** Extraction, Insertion, Building and Casting **********/
|
/********** Extraction, Insertion, Building and Casting **********/
|
||||||
/********** ============================================ **********/
|
/********** ============================================ **********/
|
||||||
|
@ -25,6 +25,8 @@ let TargetPrefix = "SI", isTarget = 1 in {
|
|||||||
def int_SI_sampleb : Sample;
|
def int_SI_sampleb : Sample;
|
||||||
def int_SI_samplel : Sample;
|
def int_SI_samplel : Sample;
|
||||||
|
|
||||||
|
def int_SI_imageload : Intrinsic <[llvm_v4i32_ty], [llvm_anyvector_ty, llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
|
||||||
|
|
||||||
/* Interpolation Intrinsics */
|
/* Interpolation Intrinsics */
|
||||||
|
|
||||||
def int_SI_fs_constant : Intrinsic <[llvm_float_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
|
def int_SI_fs_constant : Intrinsic <[llvm_float_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
|
||||||
|
Loading…
Reference in New Issue
Block a user