287 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti < %s | FileCheck -check-prefix=GFX6 %s3; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX10PLUS,GFX10 %s4; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX10PLUS,GFX11 %s5; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GFX12 %s6 7define amdgpu_ps <4 x float> @load_2darraymsaa_v4f32_xyzw(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice, i32 %fragid) {8; GFX6-LABEL: load_2darraymsaa_v4f32_xyzw:9; GFX6: ; %bb.0:10; GFX6-NEXT: s_mov_b32 s0, s211; GFX6-NEXT: s_mov_b32 s1, s312; GFX6-NEXT: s_mov_b32 s2, s413; GFX6-NEXT: s_mov_b32 s3, s514; GFX6-NEXT: s_mov_b32 s4, s615; GFX6-NEXT: s_mov_b32 s5, s716; GFX6-NEXT: s_mov_b32 s6, s817; GFX6-NEXT: s_mov_b32 s7, s918; GFX6-NEXT: image_load v[0:3], v[0:3], s[0:7] dmask:0xf unorm da19; GFX6-NEXT: s_waitcnt vmcnt(0)20; GFX6-NEXT: ; return to shader part epilog21;22; GFX10PLUS-LABEL: load_2darraymsaa_v4f32_xyzw:23; GFX10PLUS: ; %bb.0:24; GFX10PLUS-NEXT: s_mov_b32 s0, s225; GFX10PLUS-NEXT: s_mov_b32 s1, s326; GFX10PLUS-NEXT: s_mov_b32 s2, s427; GFX10PLUS-NEXT: s_mov_b32 s3, s528; GFX10PLUS-NEXT: s_mov_b32 s4, s629; GFX10PLUS-NEXT: s_mov_b32 s5, s730; GFX10PLUS-NEXT: s_mov_b32 s6, s831; GFX10PLUS-NEXT: s_mov_b32 s7, s932; GFX10PLUS-NEXT: image_load v[0:3], v[0:3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm33; GFX10PLUS-NEXT: s_waitcnt vmcnt(0)34; GFX10PLUS-NEXT: ; return to shader part epilog35;36; GFX12-LABEL: load_2darraymsaa_v4f32_xyzw:37; GFX12: ; %bb.0:38; GFX12-NEXT: s_mov_b32 s0, s239; GFX12-NEXT: s_mov_b32 s1, s340; GFX12-NEXT: s_mov_b32 s2, s441; GFX12-NEXT: s_mov_b32 s3, s542; GFX12-NEXT: s_mov_b32 s4, s643; GFX12-NEXT: s_mov_b32 s5, s744; GFX12-NEXT: s_mov_b32 s6, s845; GFX12-NEXT: s_mov_b32 s7, s946; GFX12-NEXT: image_load v[0:3], [v0, v1, v2, v3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY47; GFX12-NEXT: s_wait_loadcnt 0x048; GFX12-NEXT: ; return to shader part epilog49 %v = call <4 x float> @llvm.amdgcn.image.load.2darraymsaa.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0)50 ret <4 x float> %v51}52 53define amdgpu_ps <4 x float> @load_2darraymsaa_v4f32_xyzw_tfe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t, i32 %slice, i32 %fragid) {54; GFX6-LABEL: load_2darraymsaa_v4f32_xyzw_tfe:55; GFX6: ; %bb.0:56; GFX6-NEXT: v_mov_b32_e32 v5, v057; GFX6-NEXT: v_mov_b32_e32 v0, 058; GFX6-NEXT: s_mov_b32 s0, s259; GFX6-NEXT: s_mov_b32 s1, s360; GFX6-NEXT: s_mov_b32 s2, s461; GFX6-NEXT: s_mov_b32 s3, s562; GFX6-NEXT: s_mov_b32 s4, s663; GFX6-NEXT: s_mov_b32 s5, s764; GFX6-NEXT: s_mov_b32 s6, s865; GFX6-NEXT: s_mov_b32 s7, s966; GFX6-NEXT: v_mov_b32_e32 v6, v167; GFX6-NEXT: v_mov_b32_e32 v7, v268; GFX6-NEXT: v_mov_b32_e32 v8, v369; GFX6-NEXT: v_mov_b32_e32 v1, v070; GFX6-NEXT: v_mov_b32_e32 v2, v071; GFX6-NEXT: v_mov_b32_e32 v3, v072; GFX6-NEXT: v_mov_b32_e32 v4, v073; GFX6-NEXT: image_load v[0:4], v[5:8], s[0:7] dmask:0xf unorm tfe da74; GFX6-NEXT: s_mov_b32 s8, s1075; GFX6-NEXT: s_mov_b32 s9, s1176; GFX6-NEXT: s_mov_b32 s10, -177; GFX6-NEXT: s_mov_b32 s11, 0xf00078; GFX6-NEXT: s_waitcnt vmcnt(0)79; GFX6-NEXT: buffer_store_dword v4, off, s[8:11], 080; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0)81; GFX6-NEXT: ; return to shader part epilog82;83; GFX10-LABEL: load_2darraymsaa_v4f32_xyzw_tfe:84; GFX10: ; %bb.0:85; GFX10-NEXT: v_mov_b32_e32 v9, 086; GFX10-NEXT: v_mov_b32_e32 v5, v087; GFX10-NEXT: v_mov_b32_e32 v6, v188; GFX10-NEXT: v_mov_b32_e32 v7, v289; GFX10-NEXT: v_mov_b32_e32 v8, v390; GFX10-NEXT: v_mov_b32_e32 v10, v991; GFX10-NEXT: v_mov_b32_e32 v11, v992; GFX10-NEXT: v_mov_b32_e32 v12, v993; GFX10-NEXT: v_mov_b32_e32 v13, v994; GFX10-NEXT: s_mov_b32 s0, s295; GFX10-NEXT: s_mov_b32 s1, s396; GFX10-NEXT: s_mov_b32 s2, s497; GFX10-NEXT: s_mov_b32 s3, s598; GFX10-NEXT: s_mov_b32 s4, s699; GFX10-NEXT: s_mov_b32 s5, s7100; GFX10-NEXT: s_mov_b32 s6, s8101; GFX10-NEXT: s_mov_b32 s7, s9102; GFX10-NEXT: v_mov_b32_e32 v0, v9103; GFX10-NEXT: v_mov_b32_e32 v1, v10104; GFX10-NEXT: v_mov_b32_e32 v2, v11105; GFX10-NEXT: v_mov_b32_e32 v3, v12106; GFX10-NEXT: v_mov_b32_e32 v4, v13107; GFX10-NEXT: image_load v[0:4], v[5:8], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm tfe108; GFX10-NEXT: s_waitcnt vmcnt(0)109; GFX10-NEXT: global_store_dword v9, v4, s[10:11]110; GFX10-NEXT: ; return to shader part epilog111;112; GFX11-LABEL: load_2darraymsaa_v4f32_xyzw_tfe:113; GFX11: ; %bb.0:114; GFX11-NEXT: v_mov_b32_e32 v9, 0115; GFX11-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v6, v1116; GFX11-NEXT: v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v8, v3117; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3)118; GFX11-NEXT: v_mov_b32_e32 v10, v9119; GFX11-NEXT: v_mov_b32_e32 v11, v9120; GFX11-NEXT: v_mov_b32_e32 v12, v9121; GFX11-NEXT: v_mov_b32_e32 v13, v9122; GFX11-NEXT: s_mov_b32 s0, s2123; GFX11-NEXT: s_mov_b32 s1, s3124; GFX11-NEXT: s_mov_b32 s2, s4125; GFX11-NEXT: s_mov_b32 s3, s5126; GFX11-NEXT: s_mov_b32 s4, s6127; GFX11-NEXT: s_mov_b32 s5, s7128; GFX11-NEXT: s_mov_b32 s6, s8129; GFX11-NEXT: s_mov_b32 s7, s9130; GFX11-NEXT: v_dual_mov_b32 v0, v9 :: v_dual_mov_b32 v1, v10131; GFX11-NEXT: v_dual_mov_b32 v2, v11 :: v_dual_mov_b32 v3, v12132; GFX11-NEXT: v_mov_b32_e32 v4, v13133; GFX11-NEXT: image_load v[0:4], v[5:8], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm tfe134; GFX11-NEXT: s_waitcnt vmcnt(0)135; GFX11-NEXT: global_store_b32 v9, v4, s[10:11]136; GFX11-NEXT: ; return to shader part epilog137;138; GFX12-LABEL: load_2darraymsaa_v4f32_xyzw_tfe:139; GFX12: ; %bb.0:140; GFX12-NEXT: v_mov_b32_e32 v9, 0141; GFX12-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v6, v1142; GFX12-NEXT: v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v8, v3143; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_3)144; GFX12-NEXT: v_dual_mov_b32 v10, v9 :: v_dual_mov_b32 v11, v9145; GFX12-NEXT: v_dual_mov_b32 v12, v9 :: v_dual_mov_b32 v13, v9146; GFX12-NEXT: s_mov_b32 s0, s2147; GFX12-NEXT: s_mov_b32 s1, s3148; GFX12-NEXT: s_mov_b32 s2, s4149; GFX12-NEXT: s_mov_b32 s3, s5150; GFX12-NEXT: s_mov_b32 s4, s6151; GFX12-NEXT: s_mov_b32 s5, s7152; GFX12-NEXT: s_mov_b32 s6, s8153; GFX12-NEXT: s_mov_b32 s7, s9154; GFX12-NEXT: v_dual_mov_b32 v0, v9 :: v_dual_mov_b32 v1, v10155; GFX12-NEXT: v_dual_mov_b32 v2, v11 :: v_dual_mov_b32 v3, v12156; GFX12-NEXT: v_mov_b32_e32 v4, v13157; GFX12-NEXT: image_load v[0:4], [v5, v6, v7, v8], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY tfe158; GFX12-NEXT: s_wait_loadcnt 0x0159; GFX12-NEXT: global_store_b32 v9, v4, s[10:11]160; GFX12-NEXT: ; return to shader part epilog161 %v = call { <4 x float>, i32 } @llvm.amdgcn.image.load.2darraymsaa.sl_v4f32i32s.i32(i32 15, i32 %s, i32 %t, i32 %slice, i32 %fragid, <8 x i32> %rsrc, i32 1, i32 0)162 %v.vec = extractvalue { <4 x float>, i32 } %v, 0163 %v.err = extractvalue { <4 x float>, i32 } %v, 1164 store i32 %v.err, ptr addrspace(1) %out, align 4165 ret <4 x float> %v.vec166}167 168define amdgpu_ps <4 x float> @load_2darraymsaa_v4f32_xyzw_tfe_lwe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t, i32 %slice, i32 %fragid) {169; GFX6-LABEL: load_2darraymsaa_v4f32_xyzw_tfe_lwe:170; GFX6: ; %bb.0:171; GFX6-NEXT: v_mov_b32_e32 v5, v0172; GFX6-NEXT: v_mov_b32_e32 v0, 0173; GFX6-NEXT: s_mov_b32 s0, s2174; GFX6-NEXT: s_mov_b32 s1, s3175; GFX6-NEXT: s_mov_b32 s2, s4176; GFX6-NEXT: s_mov_b32 s3, s5177; GFX6-NEXT: s_mov_b32 s4, s6178; GFX6-NEXT: s_mov_b32 s5, s7179; GFX6-NEXT: s_mov_b32 s6, s8180; GFX6-NEXT: s_mov_b32 s7, s9181; GFX6-NEXT: v_mov_b32_e32 v6, v1182; GFX6-NEXT: v_mov_b32_e32 v7, v2183; GFX6-NEXT: v_mov_b32_e32 v8, v3184; GFX6-NEXT: v_mov_b32_e32 v1, v0185; GFX6-NEXT: v_mov_b32_e32 v2, v0186; GFX6-NEXT: v_mov_b32_e32 v3, v0187; GFX6-NEXT: v_mov_b32_e32 v4, v0188; GFX6-NEXT: image_load v[0:4], v[5:8], s[0:7] dmask:0xf unorm tfe lwe da189; GFX6-NEXT: s_mov_b32 s8, s10190; GFX6-NEXT: s_mov_b32 s9, s11191; GFX6-NEXT: s_mov_b32 s10, -1192; GFX6-NEXT: s_mov_b32 s11, 0xf000193; GFX6-NEXT: s_waitcnt vmcnt(0)194; GFX6-NEXT: buffer_store_dword v4, off, s[8:11], 0195; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0)196; GFX6-NEXT: ; return to shader part epilog197;198; GFX10-LABEL: load_2darraymsaa_v4f32_xyzw_tfe_lwe:199; GFX10: ; %bb.0:200; GFX10-NEXT: v_mov_b32_e32 v9, 0201; GFX10-NEXT: v_mov_b32_e32 v5, v0202; GFX10-NEXT: v_mov_b32_e32 v6, v1203; GFX10-NEXT: v_mov_b32_e32 v7, v2204; GFX10-NEXT: v_mov_b32_e32 v8, v3205; GFX10-NEXT: v_mov_b32_e32 v10, v9206; GFX10-NEXT: v_mov_b32_e32 v11, v9207; GFX10-NEXT: v_mov_b32_e32 v12, v9208; GFX10-NEXT: v_mov_b32_e32 v13, v9209; GFX10-NEXT: s_mov_b32 s0, s2210; GFX10-NEXT: s_mov_b32 s1, s3211; GFX10-NEXT: s_mov_b32 s2, s4212; GFX10-NEXT: s_mov_b32 s3, s5213; GFX10-NEXT: s_mov_b32 s4, s6214; GFX10-NEXT: s_mov_b32 s5, s7215; GFX10-NEXT: s_mov_b32 s6, s8216; GFX10-NEXT: s_mov_b32 s7, s9217; GFX10-NEXT: v_mov_b32_e32 v0, v9218; GFX10-NEXT: v_mov_b32_e32 v1, v10219; GFX10-NEXT: v_mov_b32_e32 v2, v11220; GFX10-NEXT: v_mov_b32_e32 v3, v12221; GFX10-NEXT: v_mov_b32_e32 v4, v13222; GFX10-NEXT: image_load v[0:4], v[5:8], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm tfe lwe223; GFX10-NEXT: s_waitcnt vmcnt(0)224; GFX10-NEXT: global_store_dword v9, v4, s[10:11]225; GFX10-NEXT: ; return to shader part epilog226;227; GFX11-LABEL: load_2darraymsaa_v4f32_xyzw_tfe_lwe:228; GFX11: ; %bb.0:229; GFX11-NEXT: v_mov_b32_e32 v9, 0230; GFX11-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v6, v1231; GFX11-NEXT: v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v8, v3232; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3)233; GFX11-NEXT: v_mov_b32_e32 v10, v9234; GFX11-NEXT: v_mov_b32_e32 v11, v9235; GFX11-NEXT: v_mov_b32_e32 v12, v9236; GFX11-NEXT: v_mov_b32_e32 v13, v9237; GFX11-NEXT: s_mov_b32 s0, s2238; GFX11-NEXT: s_mov_b32 s1, s3239; GFX11-NEXT: s_mov_b32 s2, s4240; GFX11-NEXT: s_mov_b32 s3, s5241; GFX11-NEXT: s_mov_b32 s4, s6242; GFX11-NEXT: s_mov_b32 s5, s7243; GFX11-NEXT: s_mov_b32 s6, s8244; GFX11-NEXT: s_mov_b32 s7, s9245; GFX11-NEXT: v_dual_mov_b32 v0, v9 :: v_dual_mov_b32 v1, v10246; GFX11-NEXT: v_dual_mov_b32 v2, v11 :: v_dual_mov_b32 v3, v12247; GFX11-NEXT: v_mov_b32_e32 v4, v13248; GFX11-NEXT: image_load v[0:4], v[5:8], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm tfe lwe249; GFX11-NEXT: s_waitcnt vmcnt(0)250; GFX11-NEXT: global_store_b32 v9, v4, s[10:11]251; GFX11-NEXT: ; return to shader part epilog252;253; GFX12-LABEL: load_2darraymsaa_v4f32_xyzw_tfe_lwe:254; GFX12: ; %bb.0:255; GFX12-NEXT: v_mov_b32_e32 v9, 0256; GFX12-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v6, v1257; GFX12-NEXT: v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v8, v3258; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_3)259; GFX12-NEXT: v_dual_mov_b32 v10, v9 :: v_dual_mov_b32 v11, v9260; GFX12-NEXT: v_dual_mov_b32 v12, v9 :: v_dual_mov_b32 v13, v9261; GFX12-NEXT: s_mov_b32 s0, s2262; GFX12-NEXT: s_mov_b32 s1, s3263; GFX12-NEXT: s_mov_b32 s2, s4264; GFX12-NEXT: s_mov_b32 s3, s5265; GFX12-NEXT: s_mov_b32 s4, s6266; GFX12-NEXT: s_mov_b32 s5, s7267; GFX12-NEXT: s_mov_b32 s6, s8268; GFX12-NEXT: s_mov_b32 s7, s9269; GFX12-NEXT: v_dual_mov_b32 v0, v9 :: v_dual_mov_b32 v1, v10270; GFX12-NEXT: v_dual_mov_b32 v2, v11 :: v_dual_mov_b32 v3, v12271; GFX12-NEXT: v_mov_b32_e32 v4, v13272; GFX12-NEXT: image_load v[0:4], [v5, v6, v7, v8], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY tfe273; GFX12-NEXT: s_wait_loadcnt 0x0274; GFX12-NEXT: global_store_b32 v9, v4, s[10:11]275; GFX12-NEXT: ; return to shader part epilog276 %v = call { <4 x float>, i32 } @llvm.amdgcn.image.load.2darraymsaa.sl_v4f32i32s.i32(i32 15, i32 %s, i32 %t, i32 %slice, i32 %fragid, <8 x i32> %rsrc, i32 3, i32 0)277 %v.vec = extractvalue { <4 x float>, i32 } %v, 0278 %v.err = extractvalue { <4 x float>, i32 } %v, 1279 store i32 %v.err, ptr addrspace(1) %out, align 4280 ret <4 x float> %v.vec281}282 283declare <4 x float> @llvm.amdgcn.image.load.2darraymsaa.v4f32.i32(i32 immarg, i32, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0284declare { <4 x float>, i32 } @llvm.amdgcn.image.load.2darraymsaa.sl_v4f32i32s.i32(i32 immarg, i32, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0285 286attributes #0 = { nounwind readonly }287