156 lines · plain
1; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9 %s2; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GCN,GFX10 %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GCN,GFX10 %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GCN,GFX12 %s5 6; GCN-LABEL: {{^}}load.f32.1d:7; GFX9: image_load v0, v0, s[0:7] dmask:0x1 unorm a168; GFX10: image_load v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm a169; GFX12: image_load v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D a1610define amdgpu_ps <4 x float> @load.f32.1d(<8 x i32> inreg %rsrc, <2 x i16> %coords) {11main_body:12 %x = extractelement <2 x i16> %coords, i32 013 %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i16(i32 1, i16 %x, <8 x i32> %rsrc, i32 0, i32 0)14 ret <4 x float> %v15}16 17; GCN-LABEL: {{^}}load.v2f32.1d:18; GFX9: image_load v[0:1], v0, s[0:7] dmask:0x3 unorm a1619; GFX10: image_load v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm a1620; GFX12: image_load v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D a1621define amdgpu_ps <4 x float> @load.v2f32.1d(<8 x i32> inreg %rsrc, <2 x i16> %coords) {22main_body:23 %x = extractelement <2 x i16> %coords, i32 024 %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i16(i32 3, i16 %x, <8 x i32> %rsrc, i32 0, i32 0)25 ret <4 x float> %v26}27 28; GCN-LABEL: {{^}}load.v3f32.1d:29; GFX9: image_load v[0:2], v0, s[0:7] dmask:0x7 unorm a1630; GFX10: image_load v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm a1631; GFX12: image_load v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D a1632define amdgpu_ps <4 x float> @load.v3f32.1d(<8 x i32> inreg %rsrc, <2 x i16> %coords) {33main_body:34 %x = extractelement <2 x i16> %coords, i32 035 %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i16(i32 7, i16 %x, <8 x i32> %rsrc, i32 0, i32 0)36 ret <4 x float> %v37}38 39; GCN-LABEL: {{^}}load.v4f32.1d:40; GFX9: image_load v[0:3], v0, s[0:7] dmask:0xf unorm a1641; GFX10: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm a1642; GFX12: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D a1643define amdgpu_ps <4 x float> @load.v4f32.1d(<8 x i32> inreg %rsrc, <2 x i16> %coords) {44main_body:45 %x = extractelement <2 x i16> %coords, i32 046 %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i16(i32 15, i16 %x, <8 x i32> %rsrc, i32 0, i32 0)47 ret <4 x float> %v48}49 50; GCN-LABEL: {{^}}load.f32.2d:51; GFX9: image_load v0, v0, s[0:7] dmask:0x1 unorm a1652; GFX10: image_load v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm a1653; GFX12: image_load v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D a1654define amdgpu_ps <4 x float> @load.f32.2d(<8 x i32> inreg %rsrc, <2 x i16> %coords) {55main_body:56 %x = extractelement <2 x i16> %coords, i32 057 %y = extractelement <2 x i16> %coords, i32 158 %v = call <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i16(i32 1, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0)59 ret <4 x float> %v60}61 62; GCN-LABEL: {{^}}load.v2f32.2d:63; GFX9: image_load v[0:1], v0, s[0:7] dmask:0x3 unorm a1664; GFX10: image_load v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D unorm a1665; GFX12: image_load v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D a1666define amdgpu_ps <4 x float> @load.v2f32.2d(<8 x i32> inreg %rsrc, <2 x i16> %coords) {67main_body:68 %x = extractelement <2 x i16> %coords, i32 069 %y = extractelement <2 x i16> %coords, i32 170 %v = call <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i16(i32 3, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0)71 ret <4 x float> %v72}73 74; GCN-LABEL: {{^}}load.v3f32.2d:75; GFX9: image_load v[0:2], v0, s[0:7] dmask:0x7 unorm a1676; GFX10: image_load v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_2D unorm a1677; GFX12: image_load v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_2D a1678define amdgpu_ps <4 x float> @load.v3f32.2d(<8 x i32> inreg %rsrc, <2 x i16> %coords) {79main_body:80 %x = extractelement <2 x i16> %coords, i32 081 %y = extractelement <2 x i16> %coords, i32 182 %v = call <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i16(i32 7, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0)83 ret <4 x float> %v84}85 86; GCN-LABEL: {{^}}load.v4f32.2d:87; GFX9: image_load v[0:3], v0, s[0:7] dmask:0xf unorm a1688; GFX10: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm a1689; GFX12: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D a1690define amdgpu_ps <4 x float> @load.v4f32.2d(<8 x i32> inreg %rsrc, <2 x i16> %coords) {91main_body:92 %x = extractelement <2 x i16> %coords, i32 093 %y = extractelement <2 x i16> %coords, i32 194 %v = call <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i16(i32 15, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0)95 ret <4 x float> %v96}97 98; GCN-LABEL: {{^}}load.f32.3d:99; GFX9: image_load v0, v[0:1], s[0:7] dmask:0x1 unorm a16100; GFX10: image_load v0, v[0:1], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_3D unorm a16101; GFX12: image_load v0, [v0, v1], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_3D a16102define amdgpu_ps <4 x float> @load.f32.3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {103main_body:104 %x = extractelement <2 x i16> %coords_lo, i32 0105 %y = extractelement <2 x i16> %coords_lo, i32 1106 %z = extractelement <2 x i16> %coords_hi, i32 0107 %v = call <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i16(i32 1, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0)108 ret <4 x float> %v109}110 111; GCN-LABEL: {{^}}load.v2f32.3d:112; GFX9: image_load v[0:1], v[0:1], s[0:7] dmask:0x3 unorm a16113; GFX10: image_load v[0:1], v[0:1], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_3D unorm a16114; GFX12: image_load v[0:1], [v0, v1], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_3D a16115define amdgpu_ps <4 x float> @load.v2f32.3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {116main_body:117 %x = extractelement <2 x i16> %coords_lo, i32 0118 %y = extractelement <2 x i16> %coords_lo, i32 1119 %z = extractelement <2 x i16> %coords_hi, i32 0120 %v = call <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i16(i32 3, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0)121 ret <4 x float> %v122}123 124; GCN-LABEL: {{^}}load.v3f32.3d:125; GFX9: image_load v[0:2], v[0:1], s[0:7] dmask:0x7 unorm a16126; GFX10: image_load v[0:2], v[0:1], s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_3D unorm a16127; GFX12: image_load v[0:2], [v0, v1], s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_3D a16128define amdgpu_ps <4 x float> @load.v3f32.3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {129main_body:130 %x = extractelement <2 x i16> %coords_lo, i32 0131 %y = extractelement <2 x i16> %coords_lo, i32 1132 %z = extractelement <2 x i16> %coords_hi, i32 0133 %v = call <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i16(i32 7, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0)134 ret <4 x float> %v135}136 137; GCN-LABEL: {{^}}load.v4f32.3d:138; GFX9: image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm a16139; GFX10: image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16140; GFX12: image_load v[0:3], [v0, v1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D a16141define amdgpu_ps <4 x float> @load.v4f32.3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {142main_body:143 %x = extractelement <2 x i16> %coords_lo, i32 0144 %y = extractelement <2 x i16> %coords_lo, i32 1145 %z = extractelement <2 x i16> %coords_hi, i32 0146 %v = call <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i16(i32 15, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0)147 ret <4 x float> %v148}149 150declare <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i16(i32, i16, <8 x i32>, i32, i32) #2151declare <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i16(i32, i16, i16, <8 x i32>, i32, i32) #2152declare <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i16(i32, i16, i16, i16, <8 x i32>, i32, i32) #2153 154attributes #0 = { nounwind }155attributes #1 = { nounwind readonly }156