summaryrefslogtreecommitdiff
path: root/lib/Target/R600/SIIntrinsics.td
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2013-09-12 02:55:14 +0000
committerTom Stellard <thomas.stellard@amd.com>2013-09-12 02:55:14 +0000
commita3c2bcf0ee2f63584f7a1e9df9fa153a8b5dfea1 (patch)
treea84fcefcf9770881c6b14e75021527e62dae6569 /lib/Target/R600/SIIntrinsics.td
parentac779b8494ad3d2f2ea40cb566552c0fb1b17363 (diff)
downloadllvm-a3c2bcf0ee2f63584f7a1e9df9fa153a8b5dfea1.tar.gz
llvm-a3c2bcf0ee2f63584f7a1e9df9fa153a8b5dfea1.tar.bz2
llvm-a3c2bcf0ee2f63584f7a1e9df9fa153a8b5dfea1.tar.xz
R600/SI: expose TBUFFER_STORE_FORMAT_* for OpenGL transform feedback
For _XYZ, the type of VDATA is v4i32, because v3i32 doesn't exist. The ADDR64 bit is not exposed. A simpler intrinsic that doesn't take a resource descriptor might be nicer. The maximum number of input SGPRs is bumped to 17. Signed-off-by: Marek Olšák <marek.olsak@amd.com> Reviewed-by: Tom Stellard <thomas.stellard@amd.com> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190575 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/R600/SIIntrinsics.td')
-rw-r--r--lib/Target/R600/SIIntrinsics.td18
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/Target/R600/SIIntrinsics.td b/lib/Target/R600/SIIntrinsics.td
index d6e26adf65..7fcc964521 100644
--- a/lib/Target/R600/SIIntrinsics.td
+++ b/lib/Target/R600/SIIntrinsics.td
@@ -20,6 +20,24 @@ let TargetPrefix = "SI", isTarget = 1 in {
def int_SI_load_const : Intrinsic <[llvm_float_ty], [llvm_anyint_ty, llvm_i32_ty], [IntrNoMem]>;
def int_SI_vs_load_input : Intrinsic <[llvm_v4f32_ty], [llvm_anyint_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]> ;
+ // Fully-flexible TBUFFER_STORE_FORMAT_* except for the ADDR64 bit, which is not exposed
+ def int_SI_tbuffer_store : Intrinsic <
+ [],
+ [llvm_anyint_ty, // rsrc(SGPR)
+ llvm_anyint_ty, // vdata(VGPR), overloaded for types i32, v2i32, v4i32
+ llvm_i32_ty, // num_channels(imm), selects opcode suffix: 1=X, 2=XY, 3=XYZ, 4=XYZW
+ llvm_i32_ty, // vaddr(VGPR)
+ llvm_i32_ty, // soffset(SGPR)
+ llvm_i32_ty, // inst_offset(imm)
+ llvm_i32_ty, // dfmt(imm)
+ llvm_i32_ty, // nfmt(imm)
+ llvm_i32_ty, // offen(imm)
+ llvm_i32_ty, // idxen(imm)
+ llvm_i32_ty, // glc(imm)
+ llvm_i32_ty, // slc(imm)
+ llvm_i32_ty], // tfe(imm)
+ []>;
+
class Sample : Intrinsic <[llvm_v4f32_ty], [llvm_anyvector_ty, llvm_v32i8_ty, llvm_anyint_ty, llvm_i32_ty], [IntrNoMem]>;
def int_SI_sample : Sample;