337 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9 %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX10 %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX11 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GFX12 %s6 7define amdgpu_ps void @store_f32_1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {8; GFX9-LABEL: store_f32_1d:9; GFX9: ; %bb.0: ; %main_body10; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x1 unorm a1611; GFX9-NEXT: s_endpgm12;13; GFX10-LABEL: store_f32_1d:14; GFX10: ; %bb.0: ; %main_body15; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm a1616; GFX10-NEXT: s_endpgm17;18; GFX11-LABEL: store_f32_1d:19; GFX11: ; %bb.0: ; %main_body20; GFX11-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm a1621; GFX11-NEXT: s_endpgm22;23; GFX12-LABEL: store_f32_1d:24; GFX12: ; %bb.0: ; %main_body25; GFX12-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D a1626; GFX12-NEXT: s_endpgm27main_body:28 %x = extractelement <2 x i16> %coords, i32 029 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)30 ret void31}32 33define amdgpu_ps void @store_v2f32_1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {34; GFX9-LABEL: store_v2f32_1d:35; GFX9: ; %bb.0: ; %main_body36; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x3 unorm a1637; GFX9-NEXT: s_endpgm38;39; GFX10-LABEL: store_v2f32_1d:40; GFX10: ; %bb.0: ; %main_body41; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm a1642; GFX10-NEXT: s_endpgm43;44; GFX11-LABEL: store_v2f32_1d:45; GFX11: ; %bb.0: ; %main_body46; GFX11-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm a1647; GFX11-NEXT: s_endpgm48;49; GFX12-LABEL: store_v2f32_1d:50; GFX12: ; %bb.0: ; %main_body51; GFX12-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D a1652; GFX12-NEXT: s_endpgm53main_body:54 %x = extractelement <2 x i16> %coords, i32 055 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)56 ret void57}58 59define amdgpu_ps void @store_v3f32_1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {60; GFX9-LABEL: store_v3f32_1d:61; GFX9: ; %bb.0: ; %main_body62; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x7 unorm a1663; GFX9-NEXT: s_endpgm64;65; GFX10-LABEL: store_v3f32_1d:66; GFX10: ; %bb.0: ; %main_body67; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm a1668; GFX10-NEXT: s_endpgm69;70; GFX11-LABEL: store_v3f32_1d:71; GFX11: ; %bb.0: ; %main_body72; GFX11-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm a1673; GFX11-NEXT: s_endpgm74;75; GFX12-LABEL: store_v3f32_1d:76; GFX12: ; %bb.0: ; %main_body77; GFX12-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D a1678; GFX12-NEXT: s_endpgm79main_body:80 %x = extractelement <2 x i16> %coords, i32 081 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)82 ret void83}84 85define amdgpu_ps void @store_v4f32_1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {86; GFX9-LABEL: store_v4f32_1d:87; GFX9: ; %bb.0: ; %main_body88; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0xf unorm a1689; GFX9-NEXT: s_endpgm90;91; GFX10-LABEL: store_v4f32_1d:92; GFX10: ; %bb.0: ; %main_body93; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm a1694; GFX10-NEXT: s_endpgm95;96; GFX11-LABEL: store_v4f32_1d:97; GFX11: ; %bb.0: ; %main_body98; GFX11-NEXT: image_store v[1:4], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm a1699; GFX11-NEXT: s_endpgm100;101; GFX12-LABEL: store_v4f32_1d:102; GFX12: ; %bb.0: ; %main_body103; GFX12-NEXT: image_store v[1:4], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D a16104; GFX12-NEXT: s_endpgm105main_body:106 %x = extractelement <2 x i16> %coords, i32 0107 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)108 ret void109}110 111define amdgpu_ps void @store_f32_2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {112; GFX9-LABEL: store_f32_2d:113; GFX9: ; %bb.0: ; %main_body114; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x1 unorm a16115; GFX9-NEXT: s_endpgm116;117; GFX10-LABEL: store_f32_2d:118; GFX10: ; %bb.0: ; %main_body119; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm a16120; GFX10-NEXT: s_endpgm121;122; GFX11-LABEL: store_f32_2d:123; GFX11: ; %bb.0: ; %main_body124; GFX11-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm a16125; GFX11-NEXT: s_endpgm126;127; GFX12-LABEL: store_f32_2d:128; GFX12: ; %bb.0: ; %main_body129; GFX12-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D a16130; GFX12-NEXT: s_endpgm131main_body:132 %x = extractelement <2 x i16> %coords, i32 0133 %y = extractelement <2 x i16> %coords, i32 1134 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)135 ret void136}137 138define amdgpu_ps void @store_v2f32_2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {139; GFX9-LABEL: store_v2f32_2d:140; GFX9: ; %bb.0: ; %main_body141; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x3 unorm a16142; GFX9-NEXT: s_endpgm143;144; GFX10-LABEL: store_v2f32_2d:145; GFX10: ; %bb.0: ; %main_body146; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D unorm a16147; GFX10-NEXT: s_endpgm148;149; GFX11-LABEL: store_v2f32_2d:150; GFX11: ; %bb.0: ; %main_body151; GFX11-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D unorm a16152; GFX11-NEXT: s_endpgm153;154; GFX12-LABEL: store_v2f32_2d:155; GFX12: ; %bb.0: ; %main_body156; GFX12-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D a16157; GFX12-NEXT: s_endpgm158main_body:159 %x = extractelement <2 x i16> %coords, i32 0160 %y = extractelement <2 x i16> %coords, i32 1161 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)162 ret void163}164 165define amdgpu_ps void @store_v3f32_2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {166; GFX9-LABEL: store_v3f32_2d:167; GFX9: ; %bb.0: ; %main_body168; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x7 unorm a16169; GFX9-NEXT: s_endpgm170;171; GFX10-LABEL: store_v3f32_2d:172; GFX10: ; %bb.0: ; %main_body173; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_2D unorm a16174; GFX10-NEXT: s_endpgm175;176; GFX11-LABEL: store_v3f32_2d:177; GFX11: ; %bb.0: ; %main_body178; GFX11-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_2D unorm a16179; GFX11-NEXT: s_endpgm180;181; GFX12-LABEL: store_v3f32_2d:182; GFX12: ; %bb.0: ; %main_body183; GFX12-NEXT: image_store v[1:4], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_2D a16184; GFX12-NEXT: s_endpgm185main_body:186 %x = extractelement <2 x i16> %coords, i32 0187 %y = extractelement <2 x i16> %coords, i32 1188 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)189 ret void190}191 192define amdgpu_ps void @store_v4f32_2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {193; GFX9-LABEL: store_v4f32_2d:194; GFX9: ; %bb.0: ; %main_body195; GFX9-NEXT: image_store v[1:4], v0, s[0:7] dmask:0xf unorm a16196; GFX9-NEXT: s_endpgm197;198; GFX10-LABEL: store_v4f32_2d:199; GFX10: ; %bb.0: ; %main_body200; GFX10-NEXT: image_store v[1:4], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm a16201; GFX10-NEXT: s_endpgm202;203; GFX11-LABEL: store_v4f32_2d:204; GFX11: ; %bb.0: ; %main_body205; GFX11-NEXT: image_store v[1:4], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm a16206; GFX11-NEXT: s_endpgm207;208; GFX12-LABEL: store_v4f32_2d:209; GFX12: ; %bb.0: ; %main_body210; GFX12-NEXT: image_store v[1:4], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D a16211; GFX12-NEXT: s_endpgm212main_body:213 %x = extractelement <2 x i16> %coords, i32 0214 %y = extractelement <2 x i16> %coords, i32 1215 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)216 ret void217}218 219define 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) {220; GFX9-LABEL: store_f32_3d:221; GFX9: ; %bb.0: ; %main_body222; GFX9-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0x1 unorm a16223; GFX9-NEXT: s_endpgm224;225; GFX10-LABEL: store_f32_3d:226; GFX10: ; %bb.0: ; %main_body227; GFX10-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_3D unorm a16228; GFX10-NEXT: s_endpgm229;230; GFX11-LABEL: store_f32_3d:231; GFX11: ; %bb.0: ; %main_body232; GFX11-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_3D unorm a16233; GFX11-NEXT: s_endpgm234;235; GFX12-LABEL: store_f32_3d:236; GFX12: ; %bb.0: ; %main_body237; GFX12-NEXT: image_store v[2:5], [v0, v1], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_3D a16238; GFX12-NEXT: s_endpgm239main_body:240 %x = extractelement <2 x i16> %coords_lo, i32 0241 %y = extractelement <2 x i16> %coords_lo, i32 1242 %z = extractelement <2 x i16> %coords_hi, i32 0243 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)244 ret void245}246 247define 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) {248; GFX9-LABEL: store_v2f32_3d:249; GFX9: ; %bb.0: ; %main_body250; GFX9-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0x3 unorm a16251; GFX9-NEXT: s_endpgm252;253; GFX10-LABEL: store_v2f32_3d:254; GFX10: ; %bb.0: ; %main_body255; GFX10-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_3D unorm a16256; GFX10-NEXT: s_endpgm257;258; GFX11-LABEL: store_v2f32_3d:259; GFX11: ; %bb.0: ; %main_body260; GFX11-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_3D unorm a16261; GFX11-NEXT: s_endpgm262;263; GFX12-LABEL: store_v2f32_3d:264; GFX12: ; %bb.0: ; %main_body265; GFX12-NEXT: image_store v[2:5], [v0, v1], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_3D a16266; GFX12-NEXT: s_endpgm267main_body:268 %x = extractelement <2 x i16> %coords_lo, i32 0269 %y = extractelement <2 x i16> %coords_lo, i32 1270 %z = extractelement <2 x i16> %coords_hi, i32 0271 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)272 ret void273}274 275define 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) {276; GFX9-LABEL: store_v3f32_3d:277; GFX9: ; %bb.0: ; %main_body278; GFX9-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0x7 unorm a16279; GFX9-NEXT: s_endpgm280;281; GFX10-LABEL: store_v3f32_3d:282; GFX10: ; %bb.0: ; %main_body283; GFX10-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_3D unorm a16284; GFX10-NEXT: s_endpgm285;286; GFX11-LABEL: store_v3f32_3d:287; GFX11: ; %bb.0: ; %main_body288; GFX11-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_3D unorm a16289; GFX11-NEXT: s_endpgm290;291; GFX12-LABEL: store_v3f32_3d:292; GFX12: ; %bb.0: ; %main_body293; GFX12-NEXT: image_store v[2:5], [v0, v1], s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_3D a16294; GFX12-NEXT: s_endpgm295main_body:296 %x = extractelement <2 x i16> %coords_lo, i32 0297 %y = extractelement <2 x i16> %coords_lo, i32 1298 %z = extractelement <2 x i16> %coords_hi, i32 0299 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)300 ret void301}302 303define 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) {304; GFX9-LABEL: store_v4f32_3d:305; GFX9: ; %bb.0: ; %main_body306; GFX9-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0xf unorm a16307; GFX9-NEXT: s_endpgm308;309; GFX10-LABEL: store_v4f32_3d:310; GFX10: ; %bb.0: ; %main_body311; GFX10-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16312; GFX10-NEXT: s_endpgm313;314; GFX11-LABEL: store_v4f32_3d:315; GFX11: ; %bb.0: ; %main_body316; GFX11-NEXT: image_store v[2:5], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16317; GFX11-NEXT: s_endpgm318;319; GFX12-LABEL: store_v4f32_3d:320; GFX12: ; %bb.0: ; %main_body321; GFX12-NEXT: image_store v[2:5], [v0, v1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D a16322; GFX12-NEXT: s_endpgm323main_body:324 %x = extractelement <2 x i16> %coords_lo, i32 0325 %y = extractelement <2 x i16> %coords_lo, i32 1326 %z = extractelement <2 x i16> %coords_hi, i32 0327 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)328 ret void329}330 331declare void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float>, i32, i16, <8 x i32>, i32, i32) #2332declare void @llvm.amdgcn.image.store.2d.v4f32.i16(<4 x float>, i32, i16, i16, <8 x i32>, i32, i32) #2333declare void @llvm.amdgcn.image.store.3d.v4f32.i16(<4 x float>, i32, i16, i16, i16, <8 x i32>, i32, i32) #2334 335attributes #0 = { nounwind }336attributes #1 = { nounwind readonly }337