1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX9 %s 3; RUN: llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10 %s 4 5define amdgpu_ps void @store_f32_1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) { 6; GFX9-LABEL: store_f32_1d: 7; GFX9: ; %bb.0: ; %main_body 8; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x1 unorm a16 9; GFX9-NEXT: s_endpgm 10; 11; GFX10-LABEL: store_f32_1d: 12; GFX10: ; %bb.0: ; %main_body 13; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm a16 14; GFX10-NEXT: s_endpgm 15main_body: 16 %x = extractelement <2 x i16> %coords, i32 0 17 call void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float> %val, i32 1, i16 %x, <8 x i32> %rsrc, i32 0, i32 0) 18 ret void 19} 20 21define amdgpu_ps void @store_v2f32_1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) { 22; GFX9-LABEL: store_v2f32_1d: 23; GFX9: ; %bb.0: ; %main_body 24; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x3 unorm a16 25; GFX9-NEXT: s_endpgm 26; 27; GFX10-LABEL: store_v2f32_1d: 28; GFX10: ; %bb.0: ; %main_body 29; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm a16 30; GFX10-NEXT: s_endpgm 31main_body: 32 %x = extractelement <2 x i16> %coords, i32 0 33 call void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float> %val, i32 3, i16 %x, <8 x i32> %rsrc, i32 0, i32 0) 34 ret void 35} 36 37define amdgpu_ps void @store_v3f32_1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) { 38; GFX9-LABEL: store_v3f32_1d: 39; GFX9: ; %bb.0: ; %main_body 40; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x7 unorm a16 41; GFX9-NEXT: s_endpgm 42; 43; GFX10-LABEL: store_v3f32_1d: 44; GFX10: ; %bb.0: ; %main_body 45; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm a16 46; GFX10-NEXT: s_endpgm 47main_body: 48 %x = extractelement <2 x i16> %coords, i32 0 49 call void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float> %val, i32 7, i16 %x, <8 x i32> %rsrc, i32 0, i32 0) 50 ret void 51} 52 53define amdgpu_ps void @store_v4f32_1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) { 54; GFX9-LABEL: store_v4f32_1d: 55; GFX9: ; %bb.0: ; %main_body 56; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0xf unorm a16 57; GFX9-NEXT: s_endpgm 58; 59; GFX10-LABEL: store_v4f32_1d: 60; GFX10: ; %bb.0: ; %main_body 61; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm a16 62; GFX10-NEXT: s_endpgm 63main_body: 64 %x = extractelement <2 x i16> %coords, i32 0 65 call void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float> %val, i32 15, i16 %x, <8 x i32> %rsrc, i32 0, i32 0) 66 ret void 67} 68 69define amdgpu_ps void @store_f32_2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) { 70; GFX9-LABEL: store_f32_2d: 71; GFX9: ; %bb.0: ; %main_body 72; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x1 unorm a16 73; GFX9-NEXT: s_endpgm 74; 75; GFX10-LABEL: store_f32_2d: 76; GFX10: ; %bb.0: ; %main_body 77; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm a16 78; GFX10-NEXT: s_endpgm 79main_body: 80 %x = extractelement <2 x i16> %coords, i32 0 81 %y = extractelement <2 x i16> %coords, i32 1 82 call void @llvm.amdgcn.image.store.2d.v4f32.i16(<4 x float> %val, i32 1, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0) 83 ret void 84} 85 86define amdgpu_ps void @store_v2f32_2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) { 87; GFX9-LABEL: store_v2f32_2d: 88; GFX9: ; %bb.0: ; %main_body 89; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x3 unorm a16 90; GFX9-NEXT: s_endpgm 91; 92; GFX10-LABEL: store_v2f32_2d: 93; GFX10: ; %bb.0: ; %main_body 94; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D unorm a16 95; GFX10-NEXT: s_endpgm 96main_body: 97 %x = extractelement <2 x i16> %coords, i32 0 98 %y = extractelement <2 x i16> %coords, i32 1 99 call void @llvm.amdgcn.image.store.2d.v4f32.i16(<4 x float> %val, i32 3, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0) 100 ret void 101} 102 103define amdgpu_ps void @store_v3f32_2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) { 104; GFX9-LABEL: store_v3f32_2d: 105; GFX9: ; %bb.0: ; %main_body 106; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x7 unorm a16 107; GFX9-NEXT: s_endpgm 108; 109; GFX10-LABEL: store_v3f32_2d: 110; GFX10: ; %bb.0: ; %main_body 111; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_2D unorm a16 112; GFX10-NEXT: s_endpgm 113main_body: 114 %x = extractelement <2 x i16> %coords, i32 0 115 %y = extractelement <2 x i16> %coords, i32 1 116 call void @llvm.amdgcn.image.store.2d.v4f32.i16(<4 x float> %val, i32 7, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0) 117 ret void 118} 119 120define amdgpu_ps void @store_v4f32_2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) { 121; GFX9-LABEL: store_v4f32_2d: 122; GFX9: ; %bb.0: ; %main_body 123; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0xf unorm a16 124; GFX9-NEXT: s_endpgm 125; 126; GFX10-LABEL: store_v4f32_2d: 127; GFX10: ; %bb.0: ; %main_body 128; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm a16 129; GFX10-NEXT: s_endpgm 130main_body: 131 %x = extractelement <2 x i16> %coords, i32 0 132 %y = extractelement <2 x i16> %coords, i32 1 133 call void @llvm.amdgcn.image.store.2d.v4f32.i16(<4 x float> %val, i32 15, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0) 134 ret void 135} 136 137define amdgpu_ps void @store_f32_3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi, <4 x float> %val) { 138; GFX9-LABEL: store_f32_3d: 139; GFX9: ; %bb.0: ; %main_body 140; GFX9-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0x1 unorm a16 141; GFX9-NEXT: s_endpgm 142; 143; GFX10-LABEL: store_f32_3d: 144; GFX10: ; %bb.0: ; %main_body 145; GFX10-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_3D unorm a16 146; GFX10-NEXT: s_endpgm 147main_body: 148 %x = extractelement <2 x i16> %coords_lo, i32 0 149 %y = extractelement <2 x i16> %coords_lo, i32 1 150 %z = extractelement <2 x i16> %coords_hi, i32 0 151 call void @llvm.amdgcn.image.store.3d.v4f32.i16(<4 x float> %val, i32 1, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0) 152 ret void 153} 154 155define amdgpu_ps void @store_v2f32_3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi, <4 x float> %val) { 156; GFX9-LABEL: store_v2f32_3d: 157; GFX9: ; %bb.0: ; %main_body 158; GFX9-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0x3 unorm a16 159; GFX9-NEXT: s_endpgm 160; 161; GFX10-LABEL: store_v2f32_3d: 162; GFX10: ; %bb.0: ; %main_body 163; GFX10-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_3D unorm a16 164; GFX10-NEXT: s_endpgm 165main_body: 166 %x = extractelement <2 x i16> %coords_lo, i32 0 167 %y = extractelement <2 x i16> %coords_lo, i32 1 168 %z = extractelement <2 x i16> %coords_hi, i32 0 169 call void @llvm.amdgcn.image.store.3d.v4f32.i16(<4 x float> %val, i32 3, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0) 170 ret void 171} 172 173define amdgpu_ps void @store_v3f32_3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi, <4 x float> %val) { 174; GFX9-LABEL: store_v3f32_3d: 175; GFX9: ; %bb.0: ; %main_body 176; GFX9-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0x7 unorm a16 177; GFX9-NEXT: s_endpgm 178; 179; GFX10-LABEL: store_v3f32_3d: 180; GFX10: ; %bb.0: ; %main_body 181; GFX10-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_3D unorm a16 182; GFX10-NEXT: s_endpgm 183main_body: 184 %x = extractelement <2 x i16> %coords_lo, i32 0 185 %y = extractelement <2 x i16> %coords_lo, i32 1 186 %z = extractelement <2 x i16> %coords_hi, i32 0 187 call void @llvm.amdgcn.image.store.3d.v4f32.i16(<4 x float> %val, i32 7, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0) 188 ret void 189} 190 191define amdgpu_ps void @store_v4f32_3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi, <4 x float> %val) { 192; GFX9-LABEL: store_v4f32_3d: 193; GFX9: ; %bb.0: ; %main_body 194; GFX9-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0xf unorm a16 195; GFX9-NEXT: s_endpgm 196; 197; GFX10-LABEL: store_v4f32_3d: 198; GFX10: ; %bb.0: ; %main_body 199; GFX10-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 200; GFX10-NEXT: s_endpgm 201main_body: 202 %x = extractelement <2 x i16> %coords_lo, i32 0 203 %y = extractelement <2 x i16> %coords_lo, i32 1 204 %z = extractelement <2 x i16> %coords_hi, i32 0 205 call void @llvm.amdgcn.image.store.3d.v4f32.i16(<4 x float> %val, i32 15, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0) 206 ret void 207} 208 209declare void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float>, i32, i16, <8 x i32>, i32, i32) #2 210declare void @llvm.amdgcn.image.store.2d.v4f32.i16(<4 x float>, i32, i16, i16, <8 x i32>, i32, i32) #2 211declare void @llvm.amdgcn.image.store.3d.v4f32.i16(<4 x float>, i32, i16, i16, i16, <8 x i32>, i32, i32) #2 212 213attributes #0 = { nounwind } 214attributes #1 = { nounwind readonly } 215