1*9880d681SAndroid Build Coastguard Worker//===-- SIIntrinsics.td - SI Intrinsic defs ----------------*- tablegen -*-===// 2*9880d681SAndroid Build Coastguard Worker// 3*9880d681SAndroid Build Coastguard Worker// The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker// 5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker// 8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker// 10*9880d681SAndroid Build Coastguard Worker// SI Intrinsic Definitions 11*9880d681SAndroid Build Coastguard Worker// 12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerlet TargetPrefix = "SI", isTarget = 1 in { 16*9880d681SAndroid Build Coastguard Worker def int_SI_packf16 : Intrinsic <[llvm_i32_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem]>; 17*9880d681SAndroid Build Coastguard Worker def int_SI_export : Intrinsic <[], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], []>; 18*9880d681SAndroid Build Coastguard Worker def int_SI_load_const : Intrinsic <[llvm_float_ty], [llvm_anyint_ty, llvm_i32_ty], [IntrNoMem]>; 19*9880d681SAndroid Build Coastguard Worker def int_SI_vs_load_input : Intrinsic <[llvm_v4f32_ty], [llvm_anyint_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]> ; 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker // Fully-flexible TBUFFER_STORE_FORMAT_* except for the ADDR64 bit, which is not exposed 22*9880d681SAndroid Build Coastguard Worker def int_SI_tbuffer_store : Intrinsic < 23*9880d681SAndroid Build Coastguard Worker [], 24*9880d681SAndroid Build Coastguard Worker [llvm_anyint_ty, // rsrc(SGPR) 25*9880d681SAndroid Build Coastguard Worker llvm_anyint_ty, // vdata(VGPR), overloaded for types i32, v2i32, v4i32 26*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // num_channels(imm), selects opcode suffix: 1=X, 2=XY, 3=XYZ, 4=XYZW 27*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // vaddr(VGPR) 28*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // soffset(SGPR) 29*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // inst_offset(imm) 30*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // dfmt(imm) 31*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // nfmt(imm) 32*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // offen(imm) 33*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // idxen(imm) 34*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // glc(imm) 35*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // slc(imm) 36*9880d681SAndroid Build Coastguard Worker llvm_i32_ty], // tfe(imm) 37*9880d681SAndroid Build Coastguard Worker []>; 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker // Fully-flexible BUFFER_LOAD_DWORD_* except for the ADDR64 bit, which is not exposed 40*9880d681SAndroid Build Coastguard Worker def int_SI_buffer_load_dword : Intrinsic < 41*9880d681SAndroid Build Coastguard Worker [llvm_anyint_ty], // vdata(VGPR), overloaded for types i32, v2i32, v4i32 42*9880d681SAndroid Build Coastguard Worker [llvm_anyint_ty, // rsrc(SGPR) 43*9880d681SAndroid Build Coastguard Worker llvm_anyint_ty, // vaddr(VGPR) 44*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // soffset(SGPR) 45*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // inst_offset(imm) 46*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // offen(imm) 47*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // idxen(imm) 48*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // glc(imm) 49*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // slc(imm) 50*9880d681SAndroid Build Coastguard Worker llvm_i32_ty], // tfe(imm) 51*9880d681SAndroid Build Coastguard Worker [IntrReadMem, IntrArgMemOnly]>; 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker def int_SI_sendmsg : Intrinsic <[], [llvm_i32_ty, llvm_i32_ty], []>; 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker // Fully-flexible SAMPLE instruction. 56*9880d681SAndroid Build Coastguard Worker class SampleRaw : Intrinsic < 57*9880d681SAndroid Build Coastguard Worker [llvm_v4f32_ty], // vdata(VGPR) 58*9880d681SAndroid Build Coastguard Worker [llvm_anyint_ty, // vaddr(VGPR) 59*9880d681SAndroid Build Coastguard Worker llvm_v8i32_ty, // rsrc(SGPR) 60*9880d681SAndroid Build Coastguard Worker llvm_v4i32_ty, // sampler(SGPR) 61*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // dmask(imm) 62*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // unorm(imm) 63*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // r128(imm) 64*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // da(imm) 65*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // glc(imm) 66*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // slc(imm) 67*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // tfe(imm) 68*9880d681SAndroid Build Coastguard Worker llvm_i32_ty], // lwe(imm) 69*9880d681SAndroid Build Coastguard Worker [IntrNoMem]>; 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker // Image instruction without a sampler. 72*9880d681SAndroid Build Coastguard Worker class Image : Intrinsic < 73*9880d681SAndroid Build Coastguard Worker [llvm_v4f32_ty], // vdata(VGPR) 74*9880d681SAndroid Build Coastguard Worker [llvm_anyint_ty, // vaddr(VGPR) 75*9880d681SAndroid Build Coastguard Worker llvm_v8i32_ty, // rsrc(SGPR) 76*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // dmask(imm) 77*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // unorm(imm) 78*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // r128(imm) 79*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // da(imm) 80*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // glc(imm) 81*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // slc(imm) 82*9880d681SAndroid Build Coastguard Worker llvm_i32_ty, // tfe(imm) 83*9880d681SAndroid Build Coastguard Worker llvm_i32_ty], // lwe(imm) 84*9880d681SAndroid Build Coastguard Worker [IntrNoMem]>; 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Worker // Basic sample 87*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample : SampleRaw; 88*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_cl : SampleRaw; 89*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_d : SampleRaw; 90*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_d_cl : SampleRaw; 91*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_l : SampleRaw; 92*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_b : SampleRaw; 93*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_b_cl : SampleRaw; 94*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_lz : SampleRaw; 95*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_cd : SampleRaw; 96*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_cd_cl : SampleRaw; 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Worker // Sample with comparison 99*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c : SampleRaw; 100*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_cl : SampleRaw; 101*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_d : SampleRaw; 102*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_d_cl : SampleRaw; 103*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_l : SampleRaw; 104*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_b : SampleRaw; 105*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_b_cl : SampleRaw; 106*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_lz : SampleRaw; 107*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_cd : SampleRaw; 108*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_cd_cl : SampleRaw; 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Worker // Sample with offsets 111*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_o : SampleRaw; 112*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_cl_o : SampleRaw; 113*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_d_o : SampleRaw; 114*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_d_cl_o : SampleRaw; 115*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_l_o : SampleRaw; 116*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_b_o : SampleRaw; 117*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_b_cl_o : SampleRaw; 118*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_lz_o : SampleRaw; 119*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_cd_o : SampleRaw; 120*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_cd_cl_o : SampleRaw; 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Worker // Sample with comparison and offsets 123*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_o : SampleRaw; 124*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_cl_o : SampleRaw; 125*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_d_o : SampleRaw; 126*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_d_cl_o : SampleRaw; 127*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_l_o : SampleRaw; 128*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_b_o : SampleRaw; 129*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_b_cl_o : SampleRaw; 130*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_lz_o : SampleRaw; 131*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_cd_o : SampleRaw; 132*9880d681SAndroid Build Coastguard Worker def int_SI_image_sample_c_cd_cl_o : SampleRaw; 133*9880d681SAndroid Build Coastguard Worker 134*9880d681SAndroid Build Coastguard Worker // Basic gather4 135*9880d681SAndroid Build Coastguard Worker def int_SI_gather4 : SampleRaw; 136*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_cl : SampleRaw; 137*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_l : SampleRaw; 138*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_b : SampleRaw; 139*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_b_cl : SampleRaw; 140*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_lz : SampleRaw; 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker // Gather4 with comparison 143*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_c : SampleRaw; 144*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_c_cl : SampleRaw; 145*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_c_l : SampleRaw; 146*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_c_b : SampleRaw; 147*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_c_b_cl : SampleRaw; 148*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_c_lz : SampleRaw; 149*9880d681SAndroid Build Coastguard Worker 150*9880d681SAndroid Build Coastguard Worker // Gather4 with offsets 151*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_o : SampleRaw; 152*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_cl_o : SampleRaw; 153*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_l_o : SampleRaw; 154*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_b_o : SampleRaw; 155*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_b_cl_o : SampleRaw; 156*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_lz_o : SampleRaw; 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Worker // Gather4 with comparison and offsets 159*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_c_o : SampleRaw; 160*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_c_cl_o : SampleRaw; 161*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_c_l_o : SampleRaw; 162*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_c_b_o : SampleRaw; 163*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_c_b_cl_o : SampleRaw; 164*9880d681SAndroid Build Coastguard Worker def int_SI_gather4_c_lz_o : SampleRaw; 165*9880d681SAndroid Build Coastguard Worker 166*9880d681SAndroid Build Coastguard Worker def int_SI_getlod : SampleRaw; 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Worker // Image instrinsics. 169*9880d681SAndroid Build Coastguard Worker def int_SI_image_load : Image; 170*9880d681SAndroid Build Coastguard Worker def int_SI_image_load_mip : Image; 171*9880d681SAndroid Build Coastguard Worker def int_SI_getresinfo : Image; 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Worker /* Interpolation Intrinsics */ 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Worker def int_SI_fs_constant : Intrinsic <[llvm_float_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 176*9880d681SAndroid Build Coastguard Worker def int_SI_fs_interp : Intrinsic <[llvm_float_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_v2i32_ty], [IntrNoMem]>; 177*9880d681SAndroid Build Coastguard Worker} // End TargetPrefix = "SI", isTarget = 1 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Workerlet TargetPrefix = "amdgcn", isTarget = 1 in { 180*9880d681SAndroid Build Coastguard Worker /* Control flow Intrinsics */ 181*9880d681SAndroid Build Coastguard Worker 182*9880d681SAndroid Build Coastguard Worker def int_amdgcn_if : Intrinsic<[llvm_i64_ty], [llvm_i1_ty, llvm_empty_ty], []>; 183*9880d681SAndroid Build Coastguard Worker def int_amdgcn_else : Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_empty_ty], []>; 184*9880d681SAndroid Build Coastguard Worker def int_amdgcn_break : Intrinsic<[llvm_i64_ty], [llvm_i64_ty], []>; 185*9880d681SAndroid Build Coastguard Worker def int_amdgcn_if_break : Intrinsic<[llvm_i64_ty], [llvm_i1_ty, llvm_i64_ty], []>; 186*9880d681SAndroid Build Coastguard Worker def int_amdgcn_else_break : Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], []>; 187*9880d681SAndroid Build Coastguard Worker def int_amdgcn_loop : Intrinsic<[], [llvm_i64_ty, llvm_empty_ty], []>; 188*9880d681SAndroid Build Coastguard Worker def int_amdgcn_end_cf : Intrinsic<[], [llvm_i64_ty], []>; 189*9880d681SAndroid Build Coastguard Worker} 190