317 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9 %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 -mattr=-real-true16 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefixes=GFX10PLUS,GFX11 %s5; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 -mattr=-real-true16 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefixes=GFX12 %s6 7define amdgpu_ps <4 x float> @load_2darraymsaa_v4f32_xyzw(<8 x i32> inreg %rsrc, i16 %s, i16 %t, i16 %slice, i16 %fragid) {8; GFX9-LABEL: load_2darraymsaa_v4f32_xyzw:9; GFX9: ; %bb.0:10; GFX9-NEXT: v_and_b32_e32 v0, 0xffff, v011; GFX9-NEXT: v_lshl_or_b32 v0, v1, 16, v012; GFX9-NEXT: v_and_b32_e32 v1, 0xffff, v213; GFX9-NEXT: s_mov_b32 s0, s214; GFX9-NEXT: s_mov_b32 s1, s315; GFX9-NEXT: s_mov_b32 s2, s416; GFX9-NEXT: s_mov_b32 s3, s517; GFX9-NEXT: s_mov_b32 s4, s618; GFX9-NEXT: s_mov_b32 s5, s719; GFX9-NEXT: s_mov_b32 s6, s820; GFX9-NEXT: s_mov_b32 s7, s921; GFX9-NEXT: v_lshl_or_b32 v1, v3, 16, v122; GFX9-NEXT: image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm a16 da23; GFX9-NEXT: s_waitcnt vmcnt(0)24; GFX9-NEXT: ; return to shader part epilog25;26; GFX10PLUS-LABEL: load_2darraymsaa_v4f32_xyzw:27; GFX10PLUS: ; %bb.0:28; GFX10PLUS-NEXT: v_and_b32_e32 v0, 0xffff, v029; GFX10PLUS-NEXT: v_and_b32_e32 v2, 0xffff, v230; GFX10PLUS-NEXT: s_mov_b32 s0, s231; GFX10PLUS-NEXT: s_mov_b32 s1, s332; GFX10PLUS-NEXT: s_mov_b32 s2, s433; GFX10PLUS-NEXT: v_lshl_or_b32 v0, v1, 16, v034; GFX10PLUS-NEXT: v_lshl_or_b32 v1, v3, 16, v235; GFX10PLUS-NEXT: s_mov_b32 s3, s536; GFX10PLUS-NEXT: s_mov_b32 s4, s637; GFX10PLUS-NEXT: s_mov_b32 s5, s738; GFX10PLUS-NEXT: s_mov_b32 s6, s839; GFX10PLUS-NEXT: s_mov_b32 s7, s940; GFX10PLUS-NEXT: image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm a1641; GFX10PLUS-NEXT: s_waitcnt vmcnt(0)42; GFX10PLUS-NEXT: ; return to shader part epilog43;44; GFX12-LABEL: load_2darraymsaa_v4f32_xyzw:45; GFX12: ; %bb.0:46; GFX12-NEXT: v_and_b32_e32 v0, 0xffff, v047; GFX12-NEXT: v_and_b32_e32 v2, 0xffff, v248; GFX12-NEXT: s_mov_b32 s0, s249; GFX12-NEXT: s_mov_b32 s1, s350; GFX12-NEXT: s_mov_b32 s2, s451; GFX12-NEXT: v_lshl_or_b32 v0, v1, 16, v052; GFX12-NEXT: v_lshl_or_b32 v1, v3, 16, v253; GFX12-NEXT: s_mov_b32 s3, s554; GFX12-NEXT: s_mov_b32 s4, s655; GFX12-NEXT: s_mov_b32 s5, s756; GFX12-NEXT: s_mov_b32 s6, s857; GFX12-NEXT: s_mov_b32 s7, s958; GFX12-NEXT: image_load v[0:3], [v0, v1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY a1659; GFX12-NEXT: s_wait_loadcnt 0x060; GFX12-NEXT: ; return to shader part epilog61 %v = call <4 x float> @llvm.amdgcn.image.load.2darraymsaa.v4f32.i16(i32 15, i16 %s, i16 %t, i16 %slice, i16 %fragid, <8 x i32> %rsrc, i32 0, i32 0)62 ret <4 x float> %v63}64 65define amdgpu_ps <4 x float> @load_2darraymsaa_v4f32_xyzw_tfe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i16 %s, i16 %t, i16 %slice, i16 %fragid) {66; GFX9-LABEL: load_2darraymsaa_v4f32_xyzw_tfe:67; GFX9: ; %bb.0:68; GFX9-NEXT: v_and_b32_e32 v0, 0xffff, v069; GFX9-NEXT: v_lshl_or_b32 v10, v1, 16, v070; GFX9-NEXT: v_and_b32_e32 v0, 0xffff, v271; GFX9-NEXT: v_mov_b32_e32 v5, 072; GFX9-NEXT: v_lshl_or_b32 v11, v3, 16, v073; GFX9-NEXT: v_mov_b32_e32 v6, v574; GFX9-NEXT: v_mov_b32_e32 v7, v575; GFX9-NEXT: v_mov_b32_e32 v8, v576; GFX9-NEXT: v_mov_b32_e32 v9, v577; GFX9-NEXT: v_mov_b32_e32 v0, v578; GFX9-NEXT: s_mov_b32 s0, s279; GFX9-NEXT: s_mov_b32 s1, s380; GFX9-NEXT: s_mov_b32 s2, s481; GFX9-NEXT: s_mov_b32 s3, s582; GFX9-NEXT: s_mov_b32 s4, s683; GFX9-NEXT: s_mov_b32 s5, s784; GFX9-NEXT: s_mov_b32 s6, s885; GFX9-NEXT: s_mov_b32 s7, s986; GFX9-NEXT: v_mov_b32_e32 v1, v687; GFX9-NEXT: v_mov_b32_e32 v2, v788; GFX9-NEXT: v_mov_b32_e32 v3, v889; GFX9-NEXT: v_mov_b32_e32 v4, v990; GFX9-NEXT: image_load v[0:4], v[10:11], s[0:7] dmask:0xf unorm a16 tfe da91; GFX9-NEXT: s_waitcnt vmcnt(0)92; GFX9-NEXT: global_store_dword v5, v4, s[10:11]93; GFX9-NEXT: s_waitcnt vmcnt(0)94; GFX9-NEXT: ; return to shader part epilog95;96; GFX10-LABEL: load_2darraymsaa_v4f32_xyzw_tfe:97; GFX10: ; %bb.0:98; GFX10-NEXT: v_mov_b32_e32 v5, 099; GFX10-NEXT: v_and_b32_e32 v0, 0xffff, v0100; GFX10-NEXT: v_and_b32_e32 v2, 0xffff, v2101; GFX10-NEXT: s_mov_b32 s0, s2102; GFX10-NEXT: s_mov_b32 s1, s3103; GFX10-NEXT: v_mov_b32_e32 v6, v5104; GFX10-NEXT: v_mov_b32_e32 v7, v5105; GFX10-NEXT: v_mov_b32_e32 v8, v5106; GFX10-NEXT: v_mov_b32_e32 v9, v5107; GFX10-NEXT: v_lshl_or_b32 v10, v1, 16, v0108; GFX10-NEXT: v_lshl_or_b32 v11, v3, 16, v2109; GFX10-NEXT: s_mov_b32 s2, s4110; GFX10-NEXT: s_mov_b32 s3, s5111; GFX10-NEXT: s_mov_b32 s4, s6112; GFX10-NEXT: s_mov_b32 s5, s7113; GFX10-NEXT: s_mov_b32 s6, s8114; GFX10-NEXT: s_mov_b32 s7, s9115; GFX10-NEXT: v_mov_b32_e32 v0, v5116; GFX10-NEXT: v_mov_b32_e32 v1, v6117; GFX10-NEXT: v_mov_b32_e32 v2, v7118; GFX10-NEXT: v_mov_b32_e32 v3, v8119; GFX10-NEXT: v_mov_b32_e32 v4, v9120; GFX10-NEXT: image_load v[0:4], v[10:11], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm a16 tfe121; GFX10-NEXT: s_waitcnt vmcnt(0)122; GFX10-NEXT: global_store_dword v5, v4, s[10:11]123; GFX10-NEXT: ; return to shader part epilog124;125; GFX11-LABEL: load_2darraymsaa_v4f32_xyzw_tfe:126; GFX11: ; %bb.0:127; GFX11-NEXT: v_mov_b32_e32 v5, 0128; GFX11-NEXT: v_and_b32_e32 v0, 0xffff, v0129; GFX11-NEXT: v_and_b32_e32 v2, 0xffff, v2130; GFX11-NEXT: s_mov_b32 s0, s2131; GFX11-NEXT: s_mov_b32 s1, s3132; GFX11-NEXT: v_mov_b32_e32 v6, v5133; GFX11-NEXT: v_mov_b32_e32 v7, v5134; GFX11-NEXT: v_mov_b32_e32 v8, v5135; GFX11-NEXT: v_mov_b32_e32 v9, v5136; GFX11-NEXT: v_lshl_or_b32 v10, v1, 16, v0137; GFX11-NEXT: v_lshl_or_b32 v11, v3, 16, v2138; GFX11-NEXT: s_mov_b32 s2, s4139; GFX11-NEXT: s_mov_b32 s3, s5140; GFX11-NEXT: s_mov_b32 s4, s6141; GFX11-NEXT: s_mov_b32 s5, s7142; GFX11-NEXT: s_mov_b32 s6, s8143; GFX11-NEXT: s_mov_b32 s7, s9144; GFX11-NEXT: v_mov_b32_e32 v0, v5145; GFX11-NEXT: v_mov_b32_e32 v1, v6146; GFX11-NEXT: v_mov_b32_e32 v2, v7147; GFX11-NEXT: v_mov_b32_e32 v3, v8148; GFX11-NEXT: v_mov_b32_e32 v4, v9149; GFX11-NEXT: image_load v[0:4], v[10:11], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm a16 tfe150; GFX11-NEXT: s_waitcnt vmcnt(0)151; GFX11-NEXT: global_store_b32 v5, v4, s[10:11]152; GFX11-NEXT: ; return to shader part epilog153;154; GFX12-LABEL: load_2darraymsaa_v4f32_xyzw_tfe:155; GFX12: ; %bb.0:156; GFX12-NEXT: v_mov_b32_e32 v5, 0157; GFX12-NEXT: v_and_b32_e32 v0, 0xffff, v0158; GFX12-NEXT: v_and_b32_e32 v2, 0xffff, v2159; GFX12-NEXT: s_mov_b32 s0, s2160; GFX12-NEXT: s_mov_b32 s1, s3161; GFX12-NEXT: v_mov_b32_e32 v6, v5162; GFX12-NEXT: v_mov_b32_e32 v7, v5163; GFX12-NEXT: v_mov_b32_e32 v8, v5164; GFX12-NEXT: v_mov_b32_e32 v9, v5165; GFX12-NEXT: v_lshl_or_b32 v10, v1, 16, v0166; GFX12-NEXT: v_lshl_or_b32 v11, v3, 16, v2167; GFX12-NEXT: s_mov_b32 s2, s4168; GFX12-NEXT: s_mov_b32 s3, s5169; GFX12-NEXT: s_mov_b32 s4, s6170; GFX12-NEXT: s_mov_b32 s5, s7171; GFX12-NEXT: s_mov_b32 s6, s8172; GFX12-NEXT: s_mov_b32 s7, s9173; GFX12-NEXT: v_mov_b32_e32 v0, v5174; GFX12-NEXT: v_mov_b32_e32 v1, v6175; GFX12-NEXT: v_mov_b32_e32 v2, v7176; GFX12-NEXT: v_mov_b32_e32 v3, v8177; GFX12-NEXT: v_mov_b32_e32 v4, v9178; GFX12-NEXT: image_load v[0:4], [v10, v11], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY a16 tfe179; GFX12-NEXT: s_wait_loadcnt 0x0180; GFX12-NEXT: global_store_b32 v5, v4, s[10:11]181; GFX12-NEXT: ; return to shader part epilog182 %v = call { <4 x float>, i32 } @llvm.amdgcn.image.load.2darraymsaa.sl_v4f32i32s.i16(i32 15, i16 %s, i16 %t, i16 %slice, i16 %fragid, <8 x i32> %rsrc, i32 1, i32 0)183 %v.vec = extractvalue { <4 x float>, i32 } %v, 0184 %v.err = extractvalue { <4 x float>, i32 } %v, 1185 store i32 %v.err, ptr addrspace(1) %out, align 4186 ret <4 x float> %v.vec187}188 189define amdgpu_ps <4 x float> @load_2darraymsaa_v4f32_xyzw_tfe_lwe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i16 %s, i16 %t, i16 %slice, i16 %fragid) {190; GFX9-LABEL: load_2darraymsaa_v4f32_xyzw_tfe_lwe:191; GFX9: ; %bb.0:192; GFX9-NEXT: v_and_b32_e32 v0, 0xffff, v0193; GFX9-NEXT: v_lshl_or_b32 v10, v1, 16, v0194; GFX9-NEXT: v_and_b32_e32 v0, 0xffff, v2195; GFX9-NEXT: v_mov_b32_e32 v5, 0196; GFX9-NEXT: v_lshl_or_b32 v11, v3, 16, v0197; GFX9-NEXT: v_mov_b32_e32 v6, v5198; GFX9-NEXT: v_mov_b32_e32 v7, v5199; GFX9-NEXT: v_mov_b32_e32 v8, v5200; GFX9-NEXT: v_mov_b32_e32 v9, v5201; GFX9-NEXT: v_mov_b32_e32 v0, v5202; GFX9-NEXT: s_mov_b32 s0, s2203; GFX9-NEXT: s_mov_b32 s1, s3204; GFX9-NEXT: s_mov_b32 s2, s4205; GFX9-NEXT: s_mov_b32 s3, s5206; GFX9-NEXT: s_mov_b32 s4, s6207; GFX9-NEXT: s_mov_b32 s5, s7208; GFX9-NEXT: s_mov_b32 s6, s8209; GFX9-NEXT: s_mov_b32 s7, s9210; GFX9-NEXT: v_mov_b32_e32 v1, v6211; GFX9-NEXT: v_mov_b32_e32 v2, v7212; GFX9-NEXT: v_mov_b32_e32 v3, v8213; GFX9-NEXT: v_mov_b32_e32 v4, v9214; GFX9-NEXT: image_load v[0:4], v[10:11], s[0:7] dmask:0xf unorm a16 tfe lwe da215; GFX9-NEXT: s_waitcnt vmcnt(0)216; GFX9-NEXT: global_store_dword v5, v4, s[10:11]217; GFX9-NEXT: s_waitcnt vmcnt(0)218; GFX9-NEXT: ; return to shader part epilog219;220; GFX10-LABEL: load_2darraymsaa_v4f32_xyzw_tfe_lwe:221; GFX10: ; %bb.0:222; GFX10-NEXT: v_mov_b32_e32 v5, 0223; GFX10-NEXT: v_and_b32_e32 v0, 0xffff, v0224; GFX10-NEXT: v_and_b32_e32 v2, 0xffff, v2225; GFX10-NEXT: s_mov_b32 s0, s2226; GFX10-NEXT: s_mov_b32 s1, s3227; GFX10-NEXT: v_mov_b32_e32 v6, v5228; GFX10-NEXT: v_mov_b32_e32 v7, v5229; GFX10-NEXT: v_mov_b32_e32 v8, v5230; GFX10-NEXT: v_mov_b32_e32 v9, v5231; GFX10-NEXT: v_lshl_or_b32 v10, v1, 16, v0232; GFX10-NEXT: v_lshl_or_b32 v11, v3, 16, v2233; GFX10-NEXT: s_mov_b32 s2, s4234; GFX10-NEXT: s_mov_b32 s3, s5235; GFX10-NEXT: s_mov_b32 s4, s6236; GFX10-NEXT: s_mov_b32 s5, s7237; GFX10-NEXT: s_mov_b32 s6, s8238; GFX10-NEXT: s_mov_b32 s7, s9239; GFX10-NEXT: v_mov_b32_e32 v0, v5240; GFX10-NEXT: v_mov_b32_e32 v1, v6241; GFX10-NEXT: v_mov_b32_e32 v2, v7242; GFX10-NEXT: v_mov_b32_e32 v3, v8243; GFX10-NEXT: v_mov_b32_e32 v4, v9244; GFX10-NEXT: image_load v[0:4], v[10:11], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm a16 tfe lwe245; GFX10-NEXT: s_waitcnt vmcnt(0)246; GFX10-NEXT: global_store_dword v5, v4, s[10:11]247; GFX10-NEXT: ; return to shader part epilog248;249; GFX11-LABEL: load_2darraymsaa_v4f32_xyzw_tfe_lwe:250; GFX11: ; %bb.0:251; GFX11-NEXT: v_mov_b32_e32 v5, 0252; GFX11-NEXT: v_and_b32_e32 v0, 0xffff, v0253; GFX11-NEXT: v_and_b32_e32 v2, 0xffff, v2254; GFX11-NEXT: s_mov_b32 s0, s2255; GFX11-NEXT: s_mov_b32 s1, s3256; GFX11-NEXT: v_mov_b32_e32 v6, v5257; GFX11-NEXT: v_mov_b32_e32 v7, v5258; GFX11-NEXT: v_mov_b32_e32 v8, v5259; GFX11-NEXT: v_mov_b32_e32 v9, v5260; GFX11-NEXT: v_lshl_or_b32 v10, v1, 16, v0261; GFX11-NEXT: v_lshl_or_b32 v11, v3, 16, v2262; GFX11-NEXT: s_mov_b32 s2, s4263; GFX11-NEXT: s_mov_b32 s3, s5264; GFX11-NEXT: s_mov_b32 s4, s6265; GFX11-NEXT: s_mov_b32 s5, s7266; GFX11-NEXT: s_mov_b32 s6, s8267; GFX11-NEXT: s_mov_b32 s7, s9268; GFX11-NEXT: v_mov_b32_e32 v0, v5269; GFX11-NEXT: v_mov_b32_e32 v1, v6270; GFX11-NEXT: v_mov_b32_e32 v2, v7271; GFX11-NEXT: v_mov_b32_e32 v3, v8272; GFX11-NEXT: v_mov_b32_e32 v4, v9273; GFX11-NEXT: image_load v[0:4], v[10:11], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm a16 tfe lwe274; GFX11-NEXT: s_waitcnt vmcnt(0)275; GFX11-NEXT: global_store_b32 v5, v4, s[10:11]276; GFX11-NEXT: ; return to shader part epilog277;278; GFX12-LABEL: load_2darraymsaa_v4f32_xyzw_tfe_lwe:279; GFX12: ; %bb.0:280; GFX12-NEXT: v_mov_b32_e32 v5, 0281; GFX12-NEXT: v_and_b32_e32 v0, 0xffff, v0282; GFX12-NEXT: v_and_b32_e32 v2, 0xffff, v2283; GFX12-NEXT: s_mov_b32 s0, s2284; GFX12-NEXT: s_mov_b32 s1, s3285; GFX12-NEXT: v_mov_b32_e32 v6, v5286; GFX12-NEXT: v_mov_b32_e32 v7, v5287; GFX12-NEXT: v_mov_b32_e32 v8, v5288; GFX12-NEXT: v_mov_b32_e32 v9, v5289; GFX12-NEXT: v_lshl_or_b32 v10, v1, 16, v0290; GFX12-NEXT: v_lshl_or_b32 v11, v3, 16, v2291; GFX12-NEXT: s_mov_b32 s2, s4292; GFX12-NEXT: s_mov_b32 s3, s5293; GFX12-NEXT: s_mov_b32 s4, s6294; GFX12-NEXT: s_mov_b32 s5, s7295; GFX12-NEXT: s_mov_b32 s6, s8296; GFX12-NEXT: s_mov_b32 s7, s9297; GFX12-NEXT: v_mov_b32_e32 v0, v5298; GFX12-NEXT: v_mov_b32_e32 v1, v6299; GFX12-NEXT: v_mov_b32_e32 v2, v7300; GFX12-NEXT: v_mov_b32_e32 v3, v8301; GFX12-NEXT: v_mov_b32_e32 v4, v9302; GFX12-NEXT: image_load v[0:4], [v10, v11], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY a16 tfe303; GFX12-NEXT: s_wait_loadcnt 0x0304; GFX12-NEXT: global_store_b32 v5, v4, s[10:11]305; GFX12-NEXT: ; return to shader part epilog306 %v = call { <4 x float>, i32 } @llvm.amdgcn.image.load.2darraymsaa.sl_v4f32i32s.i16(i32 15, i16 %s, i16 %t, i16 %slice, i16 %fragid, <8 x i32> %rsrc, i32 3, i32 0)307 %v.vec = extractvalue { <4 x float>, i32 } %v, 0308 %v.err = extractvalue { <4 x float>, i32 } %v, 1309 store i32 %v.err, ptr addrspace(1) %out, align 4310 ret <4 x float> %v.vec311}312 313declare <4 x float> @llvm.amdgcn.image.load.2darraymsaa.v4f32.i16(i32 immarg, i16, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0314declare { <4 x float>, i32 } @llvm.amdgcn.image.load.2darraymsaa.sl_v4f32i32s.i16(i32 immarg, i16, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0315 316attributes #0 = { nounwind readonly }317