394 lines · plain
1; RUN: llc -mtriple=r600 -mcpu=juniper < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s2 3; === 1 image arg, read_only ===================================================4 5; FUNC-LABEL: {{^}}test_2d_rd_1_0:6; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]7; EG: MOV [[VAL]], literal.x8; EG-NEXT: LSHR9; EG-NEXT: 0(10define amdgpu_kernel void @test_2d_rd_1_0(ptr addrspace(1) %in, ; read_only11 ptr addrspace(1) %out) {12entry:13 %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(14 ptr addrspace(1) %in) #015 store i32 %0, ptr addrspace(1) %out16 ret void17}18 19; FUNC-LABEL: {{^}}test_3d_rd_1_0:20; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]21; EG: MOV [[VAL]], literal.x22; EG-NEXT: LSHR23; EG-NEXT: 0(24define amdgpu_kernel void @test_3d_rd_1_0(ptr addrspace(1) %in, ; read_only25 ptr addrspace(1) %out) {26entry:27 %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(28 ptr addrspace(1) %in) #029 store i32 %0, ptr addrspace(1) %out30 ret void31}32 33; === 1 image arg, write_only ==================================================34 35; FUNC-LABEL: {{^}}test_2d_wr_1_0:36; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]37; EG: MOV [[VAL]], literal.x38; EG-NEXT: LSHR39; EG-NEXT: 0(40define amdgpu_kernel void @test_2d_wr_1_0(ptr addrspace(1) %in, ; write_only41 ptr addrspace(1) %out) {42entry:43 %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(44 ptr addrspace(1) %in) #045 store i32 %0, ptr addrspace(1) %out46 ret void47}48 49; FUNC-LABEL: {{^}}test_3d_wr_1_0:50; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]51; EG: MOV [[VAL]], literal.x52; EG-NEXT: LSHR53; EG-NEXT: 0(54define amdgpu_kernel void @test_3d_wr_1_0(ptr addrspace(1) %in, ; write_only55 ptr addrspace(1) %out) {56entry:57 %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(58 ptr addrspace(1) %in) #059 store i32 %0, ptr addrspace(1) %out60 ret void61}62 63; === 2 image args, read_only ==================================================64 65; FUNC-LABEL: {{^}}test_2d_rd_2_0:66; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]67; EG: MOV [[VAL]], literal.x68; EG-NEXT: LSHR69; EG-NEXT: 0(70define amdgpu_kernel void @test_2d_rd_2_0(ptr addrspace(1) %in1, ; read_only71 ptr addrspace(1) %in2, ; read_only72 ptr addrspace(1) %out) {73entry:74 %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(75 ptr addrspace(1) %in1) #076 store i32 %0, ptr addrspace(1) %out77 ret void78}79 80; FUNC-LABEL: {{^}}test_2d_rd_2_1:81; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]82; EG: MOV [[VAL]], literal.x83; EG-NEXT: LSHR84; EG-NEXT: 1(85define amdgpu_kernel void @test_2d_rd_2_1(ptr addrspace(1) %in1, ; read_only86 ptr addrspace(1) %in2, ; read_only87 ptr addrspace(1) %out) {88entry:89 %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(90 ptr addrspace(1) %in2) #091 store i32 %0, ptr addrspace(1) %out92 ret void93}94 95; FUNC-LABEL: {{^}}test_3d_rd_2_0:96; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]97; EG: MOV [[VAL]], literal.x98; EG-NEXT: LSHR99; EG-NEXT: 0(100define amdgpu_kernel void @test_3d_rd_2_0(ptr addrspace(1) %in1, ; read_only101 ptr addrspace(1) %in2, ; read_only102 ptr addrspace(1) %out) {103entry:104 %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(105 ptr addrspace(1) %in1) #0106 store i32 %0, ptr addrspace(1) %out107 ret void108}109 110; FUNC-LABEL: {{^}}test_3d_rd_2_1:111; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]112; EG: MOV [[VAL]], literal.x113; EG-NEXT: LSHR114; EG-NEXT: 1(115define amdgpu_kernel void @test_3d_rd_2_1(ptr addrspace(1) %in1, ; read_only116 ptr addrspace(1) %in2, ; read_only117 ptr addrspace(1) %out) {118entry:119 %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(120 ptr addrspace(1) %in2) #0121 store i32 %0, ptr addrspace(1) %out122 ret void123}124 125; === 2 image args, write_only =================================================126 127; FUNC-LABEL: {{^}}test_2d_wr_2_0:128; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]129; EG: MOV [[VAL]], literal.x130; EG-NEXT: LSHR131; EG-NEXT: 0(132define amdgpu_kernel void @test_2d_wr_2_0(ptr addrspace(1) %in1, ; write_only133 ptr addrspace(1) %in2, ; write_only134 ptr addrspace(1) %out) {135entry:136 %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(137 ptr addrspace(1) %in1) #0138 store i32 %0, ptr addrspace(1) %out139 ret void140}141 142; FUNC-LABEL: {{^}}test_2d_wr_2_1:143; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]144; EG: MOV [[VAL]], literal.x145; EG-NEXT: LSHR146; EG-NEXT: 1(147define amdgpu_kernel void @test_2d_wr_2_1(ptr addrspace(1) %in1, ; write_only148 ptr addrspace(1) %in2, ; write_only149 ptr addrspace(1) %out) {150entry:151 %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(152 ptr addrspace(1) %in2) #0153 store i32 %0, ptr addrspace(1) %out154 ret void155}156 157; FUNC-LABEL: {{^}}test_3d_wr_2_0:158; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]159; EG: MOV [[VAL]], literal.x160; EG-NEXT: LSHR161; EG-NEXT: 0(162define amdgpu_kernel void @test_3d_wr_2_0(ptr addrspace(1) %in1, ; write_only163 ptr addrspace(1) %in2, ; write_only164 ptr addrspace(1) %out) {165entry:166 %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(167 ptr addrspace(1) %in1) #0168 store i32 %0, ptr addrspace(1) %out169 ret void170}171 172; FUNC-LABEL: {{^}}test_3d_wr_2_1:173; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]174; EG: MOV [[VAL]], literal.x175; EG-NEXT: LSHR176; EG-NEXT: 1(177define amdgpu_kernel void @test_3d_wr_2_1(ptr addrspace(1) %in1, ; write_only178 ptr addrspace(1) %in2, ; write_only179 ptr addrspace(1) %out) {180entry:181 %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(182 ptr addrspace(1) %in2) #0183 store i32 %0, ptr addrspace(1) %out184 ret void185}186 187; === 3 image args, read_only ==================================================188 189; FUNC-LABEL: {{^}}test_2d_rd_3_0:190; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]191; EG: MOV [[VAL]], literal.x192; EG-NEXT: LSHR193; EG-NEXT: 2(194define amdgpu_kernel void @test_2d_rd_3_0(ptr addrspace(1) %in1, ; read_only195 ptr addrspace(1) %in2, ; read_only196 ptr addrspace(1) %in3, ; read_only197 ptr addrspace(1) %out) {198entry:199 %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(200 ptr addrspace(1) %in3) #0201 store i32 %0, ptr addrspace(1) %out202 ret void203}204 205 206; FUNC-LABEL: {{^}}test_3d_rd_3_0:207; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]208; EG: MOV [[VAL]], literal.x209; EG-NEXT: LSHR210; EG-NEXT: 2(211define amdgpu_kernel void @test_3d_rd_3_0(ptr addrspace(1) %in1, ; read_only212 ptr addrspace(1) %in2, ; read_only213 ptr addrspace(1) %in3, ; read_only214 ptr addrspace(1) %out) {215entry:216 %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(217 ptr addrspace(1) %in3) #0218 store i32 %0, ptr addrspace(1) %out219 ret void220}221 222; === 3 image args, write_only =================================================223 224; FUNC-LABEL: {{^}}test_2d_wr_3_0:225; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]226; EG: MOV [[VAL]], literal.x227; EG-NEXT: LSHR228; EG-NEXT: 2(229define amdgpu_kernel void @test_2d_wr_3_0(ptr addrspace(1) %in1, ; write_only230 ptr addrspace(1) %in2, ; write_only231 ptr addrspace(1) %in3, ; write_only232 ptr addrspace(1) %out) {233entry:234 %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(235 ptr addrspace(1) %in3) #0236 store i32 %0, ptr addrspace(1) %out237 ret void238}239 240 241; FUNC-LABEL: {{^}}test_3d_wr_3_0:242; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]243; EG: MOV [[VAL]], literal.x244; EG-NEXT: LSHR245; EG-NEXT: 2(246define amdgpu_kernel void @test_3d_wr_3_0(ptr addrspace(1) %in1, ; write_only247 ptr addrspace(1) %in2, ; write_only248 ptr addrspace(1) %in3, ; write_only249 ptr addrspace(1) %out) {250entry:251 %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(252 ptr addrspace(1) %in3) #0253 store i32 %0, ptr addrspace(1) %out254 ret void255}256 257; === 3 image args, mixed ======================================================258 259; FUNC-LABEL: {{^}}test_2d_mix_3_0:260; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]261; EG: MOV [[VAL]], literal.x262; EG-NEXT: LSHR263; EG-NEXT: 1(264define amdgpu_kernel void @test_2d_mix_3_0(ptr addrspace(1) %in1, ; write_only265 ptr addrspace(1) %in2, ; read_only266 ptr addrspace(1) %in3, ; read_only267 ptr addrspace(1) %out) {268entry:269 %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(270 ptr addrspace(1) %in3) #0271 store i32 %0, ptr addrspace(1) %out272 ret void273}274 275; FUNC-LABEL: {{^}}test_3d_mix_3_0:276; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]277; EG: MOV [[VAL]], literal.x278; EG-NEXT: LSHR279; EG-NEXT: 1(280define amdgpu_kernel void @test_3d_mix_3_0(ptr addrspace(1) %in1, ; write_only281 ptr addrspace(1) %in2, ; read_only282 ptr addrspace(1) %in3, ; read_only283 ptr addrspace(1) %out) {284entry:285 %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(286 ptr addrspace(1) %in3) #0287 store i32 %0, ptr addrspace(1) %out288 ret void289}290 291; FUNC-LABEL: {{^}}test_2d_mix_3_1:292; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]293; EG: MOV [[VAL]], literal.x294; EG-NEXT: LSHR295; EG-NEXT: 1(296define amdgpu_kernel void @test_2d_mix_3_1(ptr addrspace(1) %in1, ; write_only297 ptr addrspace(1) %in2, ; read_only298 ptr addrspace(1) %in3, ; write_only299 ptr addrspace(1) %out) {300entry:301 %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(302 ptr addrspace(1) %in3) #0303 store i32 %0, ptr addrspace(1) %out304 ret void305}306 307; FUNC-LABEL: {{^}}test_3d_mix_3_1:308; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]309; EG: MOV [[VAL]], literal.x310; EG-NEXT: LSHR311; EG-NEXT: 1(312define amdgpu_kernel void @test_3d_mix_3_1(ptr addrspace(1) %in1, ; write_only313 ptr addrspace(1) %in2, ; read_only314 ptr addrspace(1) %in3, ; write_only315 ptr addrspace(1) %out) {316entry:317 %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(318 ptr addrspace(1) %in3) #0319 store i32 %0, ptr addrspace(1) %out320 ret void321}322 323 324%opencl.image2d_t = type opaque325%opencl.image3d_t = type opaque326 327declare i32 @llvm.OpenCL.image.get.resource.id.2d(ptr addrspace(1)) #0328declare i32 @llvm.OpenCL.image.get.resource.id.3d(ptr addrspace(1)) #0329 330attributes #0 = { readnone }331 332!opencl.kernels = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11, !12, !13,333 !14, !15, !16, !17, !18, !19}334!0 = !{ptr @test_2d_rd_1_0,335 !110, !120, !130, !140, !150}336!1 = !{ptr @test_3d_rd_1_0,337 !110, !120, !131, !141, !150}338!2 = !{ptr @test_2d_wr_1_0,339 !110, !121, !130, !140, !150}340!3 = !{ptr @test_3d_wr_1_0,341 !110, !121, !131, !141, !150}342!110 = !{!"kernel_arg_addr_space", i32 1, i32 1}343!120 = !{!"kernel_arg_access_qual", !"read_only", !"none"}344!121 = !{!"kernel_arg_access_qual", !"write_only", !"none"}345!130 = !{!"kernel_arg_type", !"image2d_t", !"int*"}346!131 = !{!"kernel_arg_type", !"image3d_t", !"int*"}347!140 = !{!"kernel_arg_base_type", !"image2d_t", !"int*"}348!141 = !{!"kernel_arg_base_type", !"image3d_t", !"int*"}349!150 = !{!"kernel_arg_type_qual", !"", !""}350 351!4 = !{ptr @test_2d_rd_2_0, !112, !122, !132, !142, !152}352!5 = !{ptr @test_2d_rd_2_1, !112, !122, !132, !142, !152}353!6 = !{ptr @test_3d_rd_2_0, !112, !122, !133, !143, !152}354!7 = !{ptr @test_3d_rd_2_1, !112, !122, !133, !143, !152}355!8 = !{ptr @test_2d_wr_2_0, !112, !123, !132, !142, !152}356!9 = !{ptr @test_2d_wr_2_1, !112, !123, !132, !142, !152}357!10 = !{ptr @test_3d_wr_2_0, !112, !123, !133, !143, !152}358!11 = !{ptr @test_3d_wr_2_1, !112, !123, !133, !143, !152}359!112 = !{!"kernel_arg_addr_space", i32 1, i32 1, i32 1}360!122 = !{!"kernel_arg_access_qual", !"read_only", !"read_only", !"none"}361!123 = !{!"kernel_arg_access_qual", !"write_only", !"write_only", !"none"}362!132 = !{!"kernel_arg_type", !"image2d_t", !"image2d_t", !"int*"}363!133 = !{!"kernel_arg_type", !"image3d_t", !"image3d_t", !"int*"}364!142 = !{!"kernel_arg_base_type", !"image2d_t", !"image2d_t", !"int*"}365!143 = !{!"kernel_arg_base_type", !"image3d_t", !"image3d_t", !"int*"}366!152 = !{!"kernel_arg_type_qual", !"", !"", !""}367 368!12 = !{ptr @test_2d_rd_3_0,369 !114, !124, !134, !144, !154}370!13 = !{ptr @test_3d_rd_3_0,371 !114, !124, !135, !145, !154}372!14 = !{ptr @test_2d_wr_3_0,373 !114, !125, !134, !144, !154}374!15 = !{ptr @test_3d_wr_3_0,375 !114, !125, !135, !145, !154}376!16 = !{ptr @test_2d_mix_3_0,377 !114, !126, !134, !144, !154}378!17 = !{ptr @test_3d_mix_3_0,379 !114, !126, !135, !145, !154}380!18 = !{ptr @test_2d_mix_3_1,381 !114, !127, !134, !144, !154}382!19 = !{ptr @test_3d_mix_3_1,383 !114, !127, !135, !145, !154}384!114 = !{!"kernel_arg_addr_space", i32 1, i32 1, i32 1, i32 1}385!124 = !{!"kernel_arg_access_qual", !"read_only", !"read_only", !"read_only", !"none"}386!125 = !{!"kernel_arg_access_qual", !"write_only", !"write_only", !"write_only", !"none"}387!126 = !{!"kernel_arg_access_qual", !"write_only", !"read_only", !"read_only", !"none"}388!127 = !{!"kernel_arg_access_qual", !"write_only", !"read_only", !"write_only", !"none"}389!134 = !{!"kernel_arg_type", !"image2d_t", !"image3d_t", !"image2d_t", !"int*"}390!135 = !{!"kernel_arg_type", !"image3d_t", !"image2d_t", !"image3d_t", !"int*"}391!144 = !{!"kernel_arg_base_type", !"image2d_t", !"image3d_t", !"image2d_t", !"int*"}392!145 = !{!"kernel_arg_base_type", !"image3d_t", !"image2d_t", !"image3d_t", !"int*"}393!154 = !{!"kernel_arg_type_qual", !"", !"", !"", !""}394