1234 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 -o - %s | FileCheck -check-prefix=GFX6 %s3; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -o - %s | FileCheck -check-prefix=GFX10NSA %s4; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 -amdgpu-enable-vopd=0 -o - %s | FileCheck -check-prefix=GFX10NSA %s5; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 -amdgpu-enable-delay-alu=0 -amdgpu-enable-vopd=0 -o - %s | FileCheck -check-prefix=GFX12 %s6 7define amdgpu_ps <4 x float> @gather4_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t) {8; GFX6-LABEL: gather4_2d:9; GFX6: ; %bb.0: ; %main_body10; GFX6-NEXT: s_mov_b64 s[14:15], exec11; GFX6-NEXT: s_mov_b32 s0, s212; GFX6-NEXT: s_mov_b32 s1, s313; GFX6-NEXT: s_mov_b32 s2, s414; GFX6-NEXT: s_mov_b32 s3, s515; GFX6-NEXT: s_mov_b32 s4, s616; GFX6-NEXT: s_mov_b32 s5, s717; GFX6-NEXT: s_mov_b32 s6, s818; GFX6-NEXT: s_mov_b32 s7, s919; GFX6-NEXT: s_mov_b32 s8, s1020; GFX6-NEXT: s_mov_b32 s9, s1121; GFX6-NEXT: s_mov_b32 s10, s1222; GFX6-NEXT: s_mov_b32 s11, s1323; GFX6-NEXT: s_wqm_b64 exec, exec24; GFX6-NEXT: s_and_b64 exec, exec, s[14:15]25; GFX6-NEXT: image_gather4 v[0:3], v[0:1], s[0:7], s[8:11] dmask:0x126; GFX6-NEXT: s_waitcnt vmcnt(0)27; GFX6-NEXT: ; return to shader part epilog28;29; GFX10NSA-LABEL: gather4_2d:30; GFX10NSA: ; %bb.0: ; %main_body31; GFX10NSA-NEXT: s_mov_b32 s1, exec_lo32; GFX10NSA-NEXT: s_mov_b32 s0, s233; GFX10NSA-NEXT: s_wqm_b32 exec_lo, exec_lo34; GFX10NSA-NEXT: s_and_b32 exec_lo, exec_lo, s135; GFX10NSA-NEXT: s_mov_b32 s1, s336; GFX10NSA-NEXT: s_mov_b32 s2, s437; GFX10NSA-NEXT: s_mov_b32 s3, s538; GFX10NSA-NEXT: s_mov_b32 s4, s639; GFX10NSA-NEXT: s_mov_b32 s5, s740; GFX10NSA-NEXT: s_mov_b32 s6, s841; GFX10NSA-NEXT: s_mov_b32 s7, s942; GFX10NSA-NEXT: s_mov_b32 s8, s1043; GFX10NSA-NEXT: s_mov_b32 s9, s1144; GFX10NSA-NEXT: s_mov_b32 s10, s1245; GFX10NSA-NEXT: s_mov_b32 s11, s1346; GFX10NSA-NEXT: image_gather4 v[0:3], v[0:1], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D47; GFX10NSA-NEXT: s_waitcnt vmcnt(0)48; GFX10NSA-NEXT: ; return to shader part epilog49;50; GFX12-LABEL: gather4_2d:51; GFX12: ; %bb.0: ; %main_body52; GFX12-NEXT: s_mov_b32 s1, exec_lo53; GFX12-NEXT: s_mov_b32 s0, s254; GFX12-NEXT: s_wqm_b32 exec_lo, exec_lo55; GFX12-NEXT: s_and_b32 exec_lo, exec_lo, s156; GFX12-NEXT: s_mov_b32 s1, s357; GFX12-NEXT: s_mov_b32 s2, s458; GFX12-NEXT: s_mov_b32 s3, s559; GFX12-NEXT: s_mov_b32 s4, s660; GFX12-NEXT: s_mov_b32 s5, s761; GFX12-NEXT: s_mov_b32 s6, s862; GFX12-NEXT: s_mov_b32 s7, s963; GFX12-NEXT: s_mov_b32 s8, s1064; GFX12-NEXT: s_mov_b32 s9, s1165; GFX12-NEXT: s_mov_b32 s10, s1266; GFX12-NEXT: s_mov_b32 s11, s1367; GFX12-NEXT: image_gather4 v[0:3], [v0, v1], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D68; GFX12-NEXT: s_wait_samplecnt 0x069; GFX12-NEXT: ; return to shader part epilog70main_body:71 %v = call <4 x float> @llvm.amdgcn.image.gather4.2d.v4f32.f32(i32 1, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)72 ret <4 x float> %v73}74 75define amdgpu_ps <4 x float> @gather4_2d_tfe(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t) {76; GFX6-LABEL: gather4_2d_tfe:77; GFX6: ; %bb.0: ; %main_body78; GFX6-NEXT: s_mov_b64 s[14:15], exec79; GFX6-NEXT: s_mov_b32 s0, s280; GFX6-NEXT: s_mov_b32 s1, s381; GFX6-NEXT: s_mov_b32 s2, s482; GFX6-NEXT: s_mov_b32 s3, s583; GFX6-NEXT: s_mov_b32 s4, s684; GFX6-NEXT: s_mov_b32 s5, s785; GFX6-NEXT: s_mov_b32 s6, s886; GFX6-NEXT: s_mov_b32 s7, s987; GFX6-NEXT: s_mov_b32 s8, s1088; GFX6-NEXT: s_mov_b32 s9, s1189; GFX6-NEXT: s_mov_b32 s10, s1290; GFX6-NEXT: s_mov_b32 s11, s1391; GFX6-NEXT: s_wqm_b64 exec, exec92; GFX6-NEXT: v_mov_b32_e32 v5, v093; GFX6-NEXT: v_mov_b32_e32 v0, 094; GFX6-NEXT: v_mov_b32_e32 v6, v195; GFX6-NEXT: v_mov_b32_e32 v1, v096; GFX6-NEXT: v_mov_b32_e32 v2, v097; GFX6-NEXT: v_mov_b32_e32 v3, v098; GFX6-NEXT: v_mov_b32_e32 v4, v099; GFX6-NEXT: s_and_b64 exec, exec, s[14:15]100; GFX6-NEXT: image_gather4 v[0:4], v[5:6], s[0:7], s[8:11] dmask:0x1 tfe101; GFX6-NEXT: s_waitcnt vmcnt(0)102; GFX6-NEXT: ; return to shader part epilog103;104; GFX10NSA-LABEL: gather4_2d_tfe:105; GFX10NSA: ; %bb.0: ; %main_body106; GFX10NSA-NEXT: s_mov_b32 s14, exec_lo107; GFX10NSA-NEXT: s_mov_b32 s0, s2108; GFX10NSA-NEXT: s_wqm_b32 exec_lo, exec_lo109; GFX10NSA-NEXT: v_mov_b32_e32 v5, v0110; GFX10NSA-NEXT: v_mov_b32_e32 v0, 0111; GFX10NSA-NEXT: v_mov_b32_e32 v6, v1112; GFX10NSA-NEXT: s_mov_b32 s1, s3113; GFX10NSA-NEXT: s_mov_b32 s2, s4114; GFX10NSA-NEXT: s_mov_b32 s3, s5115; GFX10NSA-NEXT: s_mov_b32 s4, s6116; GFX10NSA-NEXT: s_mov_b32 s5, s7117; GFX10NSA-NEXT: s_mov_b32 s6, s8118; GFX10NSA-NEXT: s_mov_b32 s7, s9119; GFX10NSA-NEXT: s_mov_b32 s8, s10120; GFX10NSA-NEXT: s_mov_b32 s9, s11121; GFX10NSA-NEXT: s_mov_b32 s10, s12122; GFX10NSA-NEXT: s_mov_b32 s11, s13123; GFX10NSA-NEXT: v_mov_b32_e32 v1, v0124; GFX10NSA-NEXT: v_mov_b32_e32 v2, v0125; GFX10NSA-NEXT: v_mov_b32_e32 v3, v0126; GFX10NSA-NEXT: v_mov_b32_e32 v4, v0127; GFX10NSA-NEXT: s_and_b32 exec_lo, exec_lo, s14128; GFX10NSA-NEXT: image_gather4 v[0:4], v[5:6], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D tfe129; GFX10NSA-NEXT: s_waitcnt vmcnt(0)130; GFX10NSA-NEXT: ; return to shader part epilog131;132; GFX12-LABEL: gather4_2d_tfe:133; GFX12: ; %bb.0: ; %main_body134; GFX12-NEXT: s_mov_b32 s14, exec_lo135; GFX12-NEXT: s_mov_b32 s0, s2136; GFX12-NEXT: s_wqm_b32 exec_lo, exec_lo137; GFX12-NEXT: v_mov_b32_e32 v5, v0138; GFX12-NEXT: v_mov_b32_e32 v0, 0139; GFX12-NEXT: v_mov_b32_e32 v6, v1140; GFX12-NEXT: s_mov_b32 s1, s3141; GFX12-NEXT: s_mov_b32 s2, s4142; GFX12-NEXT: s_mov_b32 s3, s5143; GFX12-NEXT: s_mov_b32 s4, s6144; GFX12-NEXT: s_mov_b32 s5, s7145; GFX12-NEXT: s_mov_b32 s6, s8146; GFX12-NEXT: s_mov_b32 s7, s9147; GFX12-NEXT: s_mov_b32 s8, s10148; GFX12-NEXT: s_mov_b32 s9, s11149; GFX12-NEXT: s_mov_b32 s10, s12150; GFX12-NEXT: s_mov_b32 s11, s13151; GFX12-NEXT: v_mov_b32_e32 v1, v0152; GFX12-NEXT: v_mov_b32_e32 v2, v0153; GFX12-NEXT: v_mov_b32_e32 v3, v0154; GFX12-NEXT: v_mov_b32_e32 v4, v0155; GFX12-NEXT: s_and_b32 exec_lo, exec_lo, s14156; GFX12-NEXT: image_gather4 v[0:4], [v5, v6], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D tfe157; GFX12-NEXT: s_wait_samplecnt 0x0158; GFX12-NEXT: ; return to shader part epilog159main_body:160 %v = call { <4 x float>, i32 } @llvm.amdgcn.image.gather4.2d.sl_v4f32i32s.f32(i32 1, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 1, i32 0)161 %r = extractvalue { <4 x float>, i32 } %v, 0162 ret <4 x float> %r163}164 165define amdgpu_ps <4 x float> @gather4_cube(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t, float %face) {166; GFX6-LABEL: gather4_cube:167; GFX6: ; %bb.0: ; %main_body168; GFX6-NEXT: s_mov_b64 s[14:15], exec169; GFX6-NEXT: s_mov_b32 s0, s2170; GFX6-NEXT: s_mov_b32 s1, s3171; GFX6-NEXT: s_mov_b32 s2, s4172; GFX6-NEXT: s_mov_b32 s3, s5173; GFX6-NEXT: s_mov_b32 s4, s6174; GFX6-NEXT: s_mov_b32 s5, s7175; GFX6-NEXT: s_mov_b32 s6, s8176; GFX6-NEXT: s_mov_b32 s7, s9177; GFX6-NEXT: s_mov_b32 s8, s10178; GFX6-NEXT: s_mov_b32 s9, s11179; GFX6-NEXT: s_mov_b32 s10, s12180; GFX6-NEXT: s_mov_b32 s11, s13181; GFX6-NEXT: s_wqm_b64 exec, exec182; GFX6-NEXT: s_and_b64 exec, exec, s[14:15]183; GFX6-NEXT: image_gather4 v[0:3], v[0:2], s[0:7], s[8:11] dmask:0x1 da184; GFX6-NEXT: s_waitcnt vmcnt(0)185; GFX6-NEXT: ; return to shader part epilog186;187; GFX10NSA-LABEL: gather4_cube:188; GFX10NSA: ; %bb.0: ; %main_body189; GFX10NSA-NEXT: s_mov_b32 s1, exec_lo190; GFX10NSA-NEXT: s_mov_b32 s0, s2191; GFX10NSA-NEXT: s_wqm_b32 exec_lo, exec_lo192; GFX10NSA-NEXT: s_and_b32 exec_lo, exec_lo, s1193; GFX10NSA-NEXT: s_mov_b32 s1, s3194; GFX10NSA-NEXT: s_mov_b32 s2, s4195; GFX10NSA-NEXT: s_mov_b32 s3, s5196; GFX10NSA-NEXT: s_mov_b32 s4, s6197; GFX10NSA-NEXT: s_mov_b32 s5, s7198; GFX10NSA-NEXT: s_mov_b32 s6, s8199; GFX10NSA-NEXT: s_mov_b32 s7, s9200; GFX10NSA-NEXT: s_mov_b32 s8, s10201; GFX10NSA-NEXT: s_mov_b32 s9, s11202; GFX10NSA-NEXT: s_mov_b32 s10, s12203; GFX10NSA-NEXT: s_mov_b32 s11, s13204; GFX10NSA-NEXT: image_gather4 v[0:3], v[0:2], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_CUBE205; GFX10NSA-NEXT: s_waitcnt vmcnt(0)206; GFX10NSA-NEXT: ; return to shader part epilog207;208; GFX12-LABEL: gather4_cube:209; GFX12: ; %bb.0: ; %main_body210; GFX12-NEXT: s_mov_b32 s1, exec_lo211; GFX12-NEXT: s_mov_b32 s0, s2212; GFX12-NEXT: s_wqm_b32 exec_lo, exec_lo213; GFX12-NEXT: s_and_b32 exec_lo, exec_lo, s1214; GFX12-NEXT: s_mov_b32 s1, s3215; GFX12-NEXT: s_mov_b32 s2, s4216; GFX12-NEXT: s_mov_b32 s3, s5217; GFX12-NEXT: s_mov_b32 s4, s6218; GFX12-NEXT: s_mov_b32 s5, s7219; GFX12-NEXT: s_mov_b32 s6, s8220; GFX12-NEXT: s_mov_b32 s7, s9221; GFX12-NEXT: s_mov_b32 s8, s10222; GFX12-NEXT: s_mov_b32 s9, s11223; GFX12-NEXT: s_mov_b32 s10, s12224; GFX12-NEXT: s_mov_b32 s11, s13225; GFX12-NEXT: image_gather4 v[0:3], [v0, v1, v2], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_CUBE226; GFX12-NEXT: s_wait_samplecnt 0x0227; GFX12-NEXT: ; return to shader part epilog228main_body:229 %v = call <4 x float> @llvm.amdgcn.image.gather4.cube.v4f32.f32(i32 1, float %s, float %t, float %face, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)230 ret <4 x float> %v231}232 233define amdgpu_ps <4 x float> @gather4_2darray(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t, float %slice) {234; GFX6-LABEL: gather4_2darray:235; GFX6: ; %bb.0: ; %main_body236; GFX6-NEXT: s_mov_b64 s[14:15], exec237; GFX6-NEXT: s_mov_b32 s0, s2238; GFX6-NEXT: s_mov_b32 s1, s3239; GFX6-NEXT: s_mov_b32 s2, s4240; GFX6-NEXT: s_mov_b32 s3, s5241; GFX6-NEXT: s_mov_b32 s4, s6242; GFX6-NEXT: s_mov_b32 s5, s7243; GFX6-NEXT: s_mov_b32 s6, s8244; GFX6-NEXT: s_mov_b32 s7, s9245; GFX6-NEXT: s_mov_b32 s8, s10246; GFX6-NEXT: s_mov_b32 s9, s11247; GFX6-NEXT: s_mov_b32 s10, s12248; GFX6-NEXT: s_mov_b32 s11, s13249; GFX6-NEXT: s_wqm_b64 exec, exec250; GFX6-NEXT: s_and_b64 exec, exec, s[14:15]251; GFX6-NEXT: image_gather4 v[0:3], v[0:2], s[0:7], s[8:11] dmask:0x1 da252; GFX6-NEXT: s_waitcnt vmcnt(0)253; GFX6-NEXT: ; return to shader part epilog254;255; GFX10NSA-LABEL: gather4_2darray:256; GFX10NSA: ; %bb.0: ; %main_body257; GFX10NSA-NEXT: s_mov_b32 s1, exec_lo258; GFX10NSA-NEXT: s_mov_b32 s0, s2259; GFX10NSA-NEXT: s_wqm_b32 exec_lo, exec_lo260; GFX10NSA-NEXT: s_and_b32 exec_lo, exec_lo, s1261; GFX10NSA-NEXT: s_mov_b32 s1, s3262; GFX10NSA-NEXT: s_mov_b32 s2, s4263; GFX10NSA-NEXT: s_mov_b32 s3, s5264; GFX10NSA-NEXT: s_mov_b32 s4, s6265; GFX10NSA-NEXT: s_mov_b32 s5, s7266; GFX10NSA-NEXT: s_mov_b32 s6, s8267; GFX10NSA-NEXT: s_mov_b32 s7, s9268; GFX10NSA-NEXT: s_mov_b32 s8, s10269; GFX10NSA-NEXT: s_mov_b32 s9, s11270; GFX10NSA-NEXT: s_mov_b32 s10, s12271; GFX10NSA-NEXT: s_mov_b32 s11, s13272; GFX10NSA-NEXT: image_gather4 v[0:3], v[0:2], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D_ARRAY273; GFX10NSA-NEXT: s_waitcnt vmcnt(0)274; GFX10NSA-NEXT: ; return to shader part epilog275;276; GFX12-LABEL: gather4_2darray:277; GFX12: ; %bb.0: ; %main_body278; GFX12-NEXT: s_mov_b32 s1, exec_lo279; GFX12-NEXT: s_mov_b32 s0, s2280; GFX12-NEXT: s_wqm_b32 exec_lo, exec_lo281; GFX12-NEXT: s_and_b32 exec_lo, exec_lo, s1282; GFX12-NEXT: s_mov_b32 s1, s3283; GFX12-NEXT: s_mov_b32 s2, s4284; GFX12-NEXT: s_mov_b32 s3, s5285; GFX12-NEXT: s_mov_b32 s4, s6286; GFX12-NEXT: s_mov_b32 s5, s7287; GFX12-NEXT: s_mov_b32 s6, s8288; GFX12-NEXT: s_mov_b32 s7, s9289; GFX12-NEXT: s_mov_b32 s8, s10290; GFX12-NEXT: s_mov_b32 s9, s11291; GFX12-NEXT: s_mov_b32 s10, s12292; GFX12-NEXT: s_mov_b32 s11, s13293; GFX12-NEXT: image_gather4 v[0:3], [v0, v1, v2], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D_ARRAY294; GFX12-NEXT: s_wait_samplecnt 0x0295; GFX12-NEXT: ; return to shader part epilog296main_body:297 %v = call <4 x float> @llvm.amdgcn.image.gather4.2darray.v4f32.f32(i32 1, float %s, float %t, float %slice, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)298 ret <4 x float> %v299}300 301define amdgpu_ps <4 x float> @gather4_c_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %s, float %t) {302; GFX6-LABEL: gather4_c_2d:303; GFX6: ; %bb.0: ; %main_body304; GFX6-NEXT: s_mov_b64 s[14:15], exec305; GFX6-NEXT: s_mov_b32 s0, s2306; GFX6-NEXT: s_mov_b32 s1, s3307; GFX6-NEXT: s_mov_b32 s2, s4308; GFX6-NEXT: s_mov_b32 s3, s5309; GFX6-NEXT: s_mov_b32 s4, s6310; GFX6-NEXT: s_mov_b32 s5, s7311; GFX6-NEXT: s_mov_b32 s6, s8312; GFX6-NEXT: s_mov_b32 s7, s9313; GFX6-NEXT: s_mov_b32 s8, s10314; GFX6-NEXT: s_mov_b32 s9, s11315; GFX6-NEXT: s_mov_b32 s10, s12316; GFX6-NEXT: s_mov_b32 s11, s13317; GFX6-NEXT: s_wqm_b64 exec, exec318; GFX6-NEXT: s_and_b64 exec, exec, s[14:15]319; GFX6-NEXT: image_gather4_c v[0:3], v[0:2], s[0:7], s[8:11] dmask:0x1320; GFX6-NEXT: s_waitcnt vmcnt(0)321; GFX6-NEXT: ; return to shader part epilog322;323; GFX10NSA-LABEL: gather4_c_2d:324; GFX10NSA: ; %bb.0: ; %main_body325; GFX10NSA-NEXT: s_mov_b32 s1, exec_lo326; GFX10NSA-NEXT: s_mov_b32 s0, s2327; GFX10NSA-NEXT: s_wqm_b32 exec_lo, exec_lo328; GFX10NSA-NEXT: s_and_b32 exec_lo, exec_lo, s1329; GFX10NSA-NEXT: s_mov_b32 s1, s3330; GFX10NSA-NEXT: s_mov_b32 s2, s4331; GFX10NSA-NEXT: s_mov_b32 s3, s5332; GFX10NSA-NEXT: s_mov_b32 s4, s6333; GFX10NSA-NEXT: s_mov_b32 s5, s7334; GFX10NSA-NEXT: s_mov_b32 s6, s8335; GFX10NSA-NEXT: s_mov_b32 s7, s9336; GFX10NSA-NEXT: s_mov_b32 s8, s10337; GFX10NSA-NEXT: s_mov_b32 s9, s11338; GFX10NSA-NEXT: s_mov_b32 s10, s12339; GFX10NSA-NEXT: s_mov_b32 s11, s13340; GFX10NSA-NEXT: image_gather4_c v[0:3], v[0:2], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D341; GFX10NSA-NEXT: s_waitcnt vmcnt(0)342; GFX10NSA-NEXT: ; return to shader part epilog343;344; GFX12-LABEL: gather4_c_2d:345; GFX12: ; %bb.0: ; %main_body346; GFX12-NEXT: s_mov_b32 s1, exec_lo347; GFX12-NEXT: s_mov_b32 s0, s2348; GFX12-NEXT: s_wqm_b32 exec_lo, exec_lo349; GFX12-NEXT: s_and_b32 exec_lo, exec_lo, s1350; GFX12-NEXT: s_mov_b32 s1, s3351; GFX12-NEXT: s_mov_b32 s2, s4352; GFX12-NEXT: s_mov_b32 s3, s5353; GFX12-NEXT: s_mov_b32 s4, s6354; GFX12-NEXT: s_mov_b32 s5, s7355; GFX12-NEXT: s_mov_b32 s6, s8356; GFX12-NEXT: s_mov_b32 s7, s9357; GFX12-NEXT: s_mov_b32 s8, s10358; GFX12-NEXT: s_mov_b32 s9, s11359; GFX12-NEXT: s_mov_b32 s10, s12360; GFX12-NEXT: s_mov_b32 s11, s13361; GFX12-NEXT: image_gather4_c v[0:3], [v0, v1, v2], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D362; GFX12-NEXT: s_wait_samplecnt 0x0363; GFX12-NEXT: ; return to shader part epilog364main_body:365 %v = call <4 x float> @llvm.amdgcn.image.gather4.c.2d.v4f32.f32(i32 1, float %zcompare, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)366 ret <4 x float> %v367}368 369define amdgpu_ps <4 x float> @gather4_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t, float %clamp) {370; GFX6-LABEL: gather4_cl_2d:371; GFX6: ; %bb.0: ; %main_body372; GFX6-NEXT: s_mov_b64 s[14:15], exec373; GFX6-NEXT: s_mov_b32 s0, s2374; GFX6-NEXT: s_mov_b32 s1, s3375; GFX6-NEXT: s_mov_b32 s2, s4376; GFX6-NEXT: s_mov_b32 s3, s5377; GFX6-NEXT: s_mov_b32 s4, s6378; GFX6-NEXT: s_mov_b32 s5, s7379; GFX6-NEXT: s_mov_b32 s6, s8380; GFX6-NEXT: s_mov_b32 s7, s9381; GFX6-NEXT: s_mov_b32 s8, s10382; GFX6-NEXT: s_mov_b32 s9, s11383; GFX6-NEXT: s_mov_b32 s10, s12384; GFX6-NEXT: s_mov_b32 s11, s13385; GFX6-NEXT: s_wqm_b64 exec, exec386; GFX6-NEXT: s_and_b64 exec, exec, s[14:15]387; GFX6-NEXT: image_gather4_cl v[0:3], v[0:2], s[0:7], s[8:11] dmask:0x1388; GFX6-NEXT: s_waitcnt vmcnt(0)389; GFX6-NEXT: ; return to shader part epilog390;391; GFX10NSA-LABEL: gather4_cl_2d:392; GFX10NSA: ; %bb.0: ; %main_body393; GFX10NSA-NEXT: s_mov_b32 s1, exec_lo394; GFX10NSA-NEXT: s_mov_b32 s0, s2395; GFX10NSA-NEXT: s_wqm_b32 exec_lo, exec_lo396; GFX10NSA-NEXT: s_and_b32 exec_lo, exec_lo, s1397; GFX10NSA-NEXT: s_mov_b32 s1, s3398; GFX10NSA-NEXT: s_mov_b32 s2, s4399; GFX10NSA-NEXT: s_mov_b32 s3, s5400; GFX10NSA-NEXT: s_mov_b32 s4, s6401; GFX10NSA-NEXT: s_mov_b32 s5, s7402; GFX10NSA-NEXT: s_mov_b32 s6, s8403; GFX10NSA-NEXT: s_mov_b32 s7, s9404; GFX10NSA-NEXT: s_mov_b32 s8, s10405; GFX10NSA-NEXT: s_mov_b32 s9, s11406; GFX10NSA-NEXT: s_mov_b32 s10, s12407; GFX10NSA-NEXT: s_mov_b32 s11, s13408; GFX10NSA-NEXT: image_gather4_cl v[0:3], v[0:2], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D409; GFX10NSA-NEXT: s_waitcnt vmcnt(0)410; GFX10NSA-NEXT: ; return to shader part epilog411;412; GFX12-LABEL: gather4_cl_2d:413; GFX12: ; %bb.0: ; %main_body414; GFX12-NEXT: s_mov_b32 s1, exec_lo415; GFX12-NEXT: s_mov_b32 s0, s2416; GFX12-NEXT: s_wqm_b32 exec_lo, exec_lo417; GFX12-NEXT: s_and_b32 exec_lo, exec_lo, s1418; GFX12-NEXT: s_mov_b32 s1, s3419; GFX12-NEXT: s_mov_b32 s2, s4420; GFX12-NEXT: s_mov_b32 s3, s5421; GFX12-NEXT: s_mov_b32 s4, s6422; GFX12-NEXT: s_mov_b32 s5, s7423; GFX12-NEXT: s_mov_b32 s6, s8424; GFX12-NEXT: s_mov_b32 s7, s9425; GFX12-NEXT: s_mov_b32 s8, s10426; GFX12-NEXT: s_mov_b32 s9, s11427; GFX12-NEXT: s_mov_b32 s10, s12428; GFX12-NEXT: s_mov_b32 s11, s13429; GFX12-NEXT: image_gather4_cl v[0:3], [v0, v1, v2], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D430; GFX12-NEXT: s_wait_samplecnt 0x0431; GFX12-NEXT: ; return to shader part epilog432main_body:433 %v = call <4 x float> @llvm.amdgcn.image.gather4.cl.2d.v4f32.f32(i32 1, float %s, float %t, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)434 ret <4 x float> %v435}436 437define amdgpu_ps <4 x float> @gather4_c_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %s, float %t, float %clamp) {438; GFX6-LABEL: gather4_c_cl_2d:439; GFX6: ; %bb.0: ; %main_body440; GFX6-NEXT: s_mov_b64 s[14:15], exec441; GFX6-NEXT: s_mov_b32 s0, s2442; GFX6-NEXT: s_mov_b32 s1, s3443; GFX6-NEXT: s_mov_b32 s2, s4444; GFX6-NEXT: s_mov_b32 s3, s5445; GFX6-NEXT: s_mov_b32 s4, s6446; GFX6-NEXT: s_mov_b32 s5, s7447; GFX6-NEXT: s_mov_b32 s6, s8448; GFX6-NEXT: s_mov_b32 s7, s9449; GFX6-NEXT: s_mov_b32 s8, s10450; GFX6-NEXT: s_mov_b32 s9, s11451; GFX6-NEXT: s_mov_b32 s10, s12452; GFX6-NEXT: s_mov_b32 s11, s13453; GFX6-NEXT: s_wqm_b64 exec, exec454; GFX6-NEXT: s_and_b64 exec, exec, s[14:15]455; GFX6-NEXT: image_gather4_c_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0x1456; GFX6-NEXT: s_waitcnt vmcnt(0)457; GFX6-NEXT: ; return to shader part epilog458;459; GFX10NSA-LABEL: gather4_c_cl_2d:460; GFX10NSA: ; %bb.0: ; %main_body461; GFX10NSA-NEXT: s_mov_b32 s1, exec_lo462; GFX10NSA-NEXT: s_mov_b32 s0, s2463; GFX10NSA-NEXT: s_wqm_b32 exec_lo, exec_lo464; GFX10NSA-NEXT: s_and_b32 exec_lo, exec_lo, s1465; GFX10NSA-NEXT: s_mov_b32 s1, s3466; GFX10NSA-NEXT: s_mov_b32 s2, s4467; GFX10NSA-NEXT: s_mov_b32 s3, s5468; GFX10NSA-NEXT: s_mov_b32 s4, s6469; GFX10NSA-NEXT: s_mov_b32 s5, s7470; GFX10NSA-NEXT: s_mov_b32 s6, s8471; GFX10NSA-NEXT: s_mov_b32 s7, s9472; GFX10NSA-NEXT: s_mov_b32 s8, s10473; GFX10NSA-NEXT: s_mov_b32 s9, s11474; GFX10NSA-NEXT: s_mov_b32 s10, s12475; GFX10NSA-NEXT: s_mov_b32 s11, s13476; GFX10NSA-NEXT: image_gather4_c_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D477; GFX10NSA-NEXT: s_waitcnt vmcnt(0)478; GFX10NSA-NEXT: ; return to shader part epilog479;480; GFX12-LABEL: gather4_c_cl_2d:481; GFX12: ; %bb.0: ; %main_body482; GFX12-NEXT: s_mov_b32 s1, exec_lo483; GFX12-NEXT: s_mov_b32 s0, s2484; GFX12-NEXT: s_wqm_b32 exec_lo, exec_lo485; GFX12-NEXT: s_and_b32 exec_lo, exec_lo, s1486; GFX12-NEXT: s_mov_b32 s1, s3487; GFX12-NEXT: s_mov_b32 s2, s4488; GFX12-NEXT: s_mov_b32 s3, s5489; GFX12-NEXT: s_mov_b32 s4, s6490; GFX12-NEXT: s_mov_b32 s5, s7491; GFX12-NEXT: s_mov_b32 s6, s8492; GFX12-NEXT: s_mov_b32 s7, s9493; GFX12-NEXT: s_mov_b32 s8, s10494; GFX12-NEXT: s_mov_b32 s9, s11495; GFX12-NEXT: s_mov_b32 s10, s12496; GFX12-NEXT: s_mov_b32 s11, s13497; GFX12-NEXT: image_gather4_c_cl v[0:3], [v0, v1, v2, v3], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D498; GFX12-NEXT: s_wait_samplecnt 0x0499; GFX12-NEXT: ; return to shader part epilog500main_body:501 %v = call <4 x float> @llvm.amdgcn.image.gather4.c.cl.2d.v4f32.f32(i32 1, float %zcompare, float %s, float %t, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)502 ret <4 x float> %v503}504 505define amdgpu_ps <4 x float> @gather4_b_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %bias, float %s, float %t) {506; GFX6-LABEL: gather4_b_2d:507; GFX6: ; %bb.0: ; %main_body508; GFX6-NEXT: s_mov_b64 s[14:15], exec509; GFX6-NEXT: s_mov_b32 s0, s2510; GFX6-NEXT: s_mov_b32 s1, s3511; GFX6-NEXT: s_mov_b32 s2, s4512; GFX6-NEXT: s_mov_b32 s3, s5513; GFX6-NEXT: s_mov_b32 s4, s6514; GFX6-NEXT: s_mov_b32 s5, s7515; GFX6-NEXT: s_mov_b32 s6, s8516; GFX6-NEXT: s_mov_b32 s7, s9517; GFX6-NEXT: s_mov_b32 s8, s10518; GFX6-NEXT: s_mov_b32 s9, s11519; GFX6-NEXT: s_mov_b32 s10, s12520; GFX6-NEXT: s_mov_b32 s11, s13521; GFX6-NEXT: s_wqm_b64 exec, exec522; GFX6-NEXT: s_and_b64 exec, exec, s[14:15]523; GFX6-NEXT: image_gather4_b v[0:3], v[0:2], s[0:7], s[8:11] dmask:0x1524; GFX6-NEXT: s_waitcnt vmcnt(0)525; GFX6-NEXT: ; return to shader part epilog526;527; GFX10NSA-LABEL: gather4_b_2d:528; GFX10NSA: ; %bb.0: ; %main_body529; GFX10NSA-NEXT: s_mov_b32 s1, exec_lo530; GFX10NSA-NEXT: s_mov_b32 s0, s2531; GFX10NSA-NEXT: s_wqm_b32 exec_lo, exec_lo532; GFX10NSA-NEXT: s_and_b32 exec_lo, exec_lo, s1533; GFX10NSA-NEXT: s_mov_b32 s1, s3534; GFX10NSA-NEXT: s_mov_b32 s2, s4535; GFX10NSA-NEXT: s_mov_b32 s3, s5536; GFX10NSA-NEXT: s_mov_b32 s4, s6537; GFX10NSA-NEXT: s_mov_b32 s5, s7538; GFX10NSA-NEXT: s_mov_b32 s6, s8539; GFX10NSA-NEXT: s_mov_b32 s7, s9540; GFX10NSA-NEXT: s_mov_b32 s8, s10541; GFX10NSA-NEXT: s_mov_b32 s9, s11542; GFX10NSA-NEXT: s_mov_b32 s10, s12543; GFX10NSA-NEXT: s_mov_b32 s11, s13544; GFX10NSA-NEXT: image_gather4_b v[0:3], v[0:2], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D545; GFX10NSA-NEXT: s_waitcnt vmcnt(0)546; GFX10NSA-NEXT: ; return to shader part epilog547;548; GFX12-LABEL: gather4_b_2d:549; GFX12: ; %bb.0: ; %main_body550; GFX12-NEXT: s_mov_b32 s1, exec_lo551; GFX12-NEXT: s_mov_b32 s0, s2552; GFX12-NEXT: s_wqm_b32 exec_lo, exec_lo553; GFX12-NEXT: s_and_b32 exec_lo, exec_lo, s1554; GFX12-NEXT: s_mov_b32 s1, s3555; GFX12-NEXT: s_mov_b32 s2, s4556; GFX12-NEXT: s_mov_b32 s3, s5557; GFX12-NEXT: s_mov_b32 s4, s6558; GFX12-NEXT: s_mov_b32 s5, s7559; GFX12-NEXT: s_mov_b32 s6, s8560; GFX12-NEXT: s_mov_b32 s7, s9561; GFX12-NEXT: s_mov_b32 s8, s10562; GFX12-NEXT: s_mov_b32 s9, s11563; GFX12-NEXT: s_mov_b32 s10, s12564; GFX12-NEXT: s_mov_b32 s11, s13565; GFX12-NEXT: image_gather4_b v[0:3], [v0, v1, v2], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D566; GFX12-NEXT: s_wait_samplecnt 0x0567; GFX12-NEXT: ; return to shader part epilog568main_body:569 %v = call <4 x float> @llvm.amdgcn.image.gather4.b.2d.v4f32.f32.f32(i32 1, float %bias, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)570 ret <4 x float> %v571}572 573define amdgpu_ps <4 x float> @gather4_c_b_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %bias, float %zcompare, float %s, float %t) {574; GFX6-LABEL: gather4_c_b_2d:575; GFX6: ; %bb.0: ; %main_body576; GFX6-NEXT: s_mov_b64 s[14:15], exec577; GFX6-NEXT: s_mov_b32 s0, s2578; GFX6-NEXT: s_mov_b32 s1, s3579; GFX6-NEXT: s_mov_b32 s2, s4580; GFX6-NEXT: s_mov_b32 s3, s5581; GFX6-NEXT: s_mov_b32 s4, s6582; GFX6-NEXT: s_mov_b32 s5, s7583; GFX6-NEXT: s_mov_b32 s6, s8584; GFX6-NEXT: s_mov_b32 s7, s9585; GFX6-NEXT: s_mov_b32 s8, s10586; GFX6-NEXT: s_mov_b32 s9, s11587; GFX6-NEXT: s_mov_b32 s10, s12588; GFX6-NEXT: s_mov_b32 s11, s13589; GFX6-NEXT: s_wqm_b64 exec, exec590; GFX6-NEXT: s_and_b64 exec, exec, s[14:15]591; GFX6-NEXT: image_gather4_c_b v[0:3], v[0:3], s[0:7], s[8:11] dmask:0x1592; GFX6-NEXT: s_waitcnt vmcnt(0)593; GFX6-NEXT: ; return to shader part epilog594;595; GFX10NSA-LABEL: gather4_c_b_2d:596; GFX10NSA: ; %bb.0: ; %main_body597; GFX10NSA-NEXT: s_mov_b32 s1, exec_lo598; GFX10NSA-NEXT: s_mov_b32 s0, s2599; GFX10NSA-NEXT: s_wqm_b32 exec_lo, exec_lo600; GFX10NSA-NEXT: s_and_b32 exec_lo, exec_lo, s1601; GFX10NSA-NEXT: s_mov_b32 s1, s3602; GFX10NSA-NEXT: s_mov_b32 s2, s4603; GFX10NSA-NEXT: s_mov_b32 s3, s5604; GFX10NSA-NEXT: s_mov_b32 s4, s6605; GFX10NSA-NEXT: s_mov_b32 s5, s7606; GFX10NSA-NEXT: s_mov_b32 s6, s8607; GFX10NSA-NEXT: s_mov_b32 s7, s9608; GFX10NSA-NEXT: s_mov_b32 s8, s10609; GFX10NSA-NEXT: s_mov_b32 s9, s11610; GFX10NSA-NEXT: s_mov_b32 s10, s12611; GFX10NSA-NEXT: s_mov_b32 s11, s13612; GFX10NSA-NEXT: image_gather4_c_b v[0:3], v[0:3], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D613; GFX10NSA-NEXT: s_waitcnt vmcnt(0)614; GFX10NSA-NEXT: ; return to shader part epilog615;616; GFX12-LABEL: gather4_c_b_2d:617; GFX12: ; %bb.0: ; %main_body618; GFX12-NEXT: s_mov_b32 s1, exec_lo619; GFX12-NEXT: s_mov_b32 s0, s2620; GFX12-NEXT: s_wqm_b32 exec_lo, exec_lo621; GFX12-NEXT: s_and_b32 exec_lo, exec_lo, s1622; GFX12-NEXT: s_mov_b32 s1, s3623; GFX12-NEXT: s_mov_b32 s2, s4624; GFX12-NEXT: s_mov_b32 s3, s5625; GFX12-NEXT: s_mov_b32 s4, s6626; GFX12-NEXT: s_mov_b32 s5, s7627; GFX12-NEXT: s_mov_b32 s6, s8628; GFX12-NEXT: s_mov_b32 s7, s9629; GFX12-NEXT: s_mov_b32 s8, s10630; GFX12-NEXT: s_mov_b32 s9, s11631; GFX12-NEXT: s_mov_b32 s10, s12632; GFX12-NEXT: s_mov_b32 s11, s13633; GFX12-NEXT: image_gather4_c_b v[0:3], [v0, v1, v2, v3], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D634; GFX12-NEXT: s_wait_samplecnt 0x0635; GFX12-NEXT: ; return to shader part epilog636main_body:637 %v = call <4 x float> @llvm.amdgcn.image.gather4.c.b.2d.v4f32.f32.f32(i32 1, float %bias, float %zcompare, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)638 ret <4 x float> %v639}640 641define amdgpu_ps <4 x float> @gather4_b_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %bias, float %s, float %t, float %clamp) {642; GFX6-LABEL: gather4_b_cl_2d:643; GFX6: ; %bb.0: ; %main_body644; GFX6-NEXT: s_mov_b64 s[14:15], exec645; GFX6-NEXT: s_mov_b32 s0, s2646; GFX6-NEXT: s_mov_b32 s1, s3647; GFX6-NEXT: s_mov_b32 s2, s4648; GFX6-NEXT: s_mov_b32 s3, s5649; GFX6-NEXT: s_mov_b32 s4, s6650; GFX6-NEXT: s_mov_b32 s5, s7651; GFX6-NEXT: s_mov_b32 s6, s8652; GFX6-NEXT: s_mov_b32 s7, s9653; GFX6-NEXT: s_mov_b32 s8, s10654; GFX6-NEXT: s_mov_b32 s9, s11655; GFX6-NEXT: s_mov_b32 s10, s12656; GFX6-NEXT: s_mov_b32 s11, s13657; GFX6-NEXT: s_wqm_b64 exec, exec658; GFX6-NEXT: s_and_b64 exec, exec, s[14:15]659; GFX6-NEXT: image_gather4_b_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0x1660; GFX6-NEXT: s_waitcnt vmcnt(0)661; GFX6-NEXT: ; return to shader part epilog662;663; GFX10NSA-LABEL: gather4_b_cl_2d:664; GFX10NSA: ; %bb.0: ; %main_body665; GFX10NSA-NEXT: s_mov_b32 s1, exec_lo666; GFX10NSA-NEXT: s_mov_b32 s0, s2667; GFX10NSA-NEXT: s_wqm_b32 exec_lo, exec_lo668; GFX10NSA-NEXT: s_and_b32 exec_lo, exec_lo, s1669; GFX10NSA-NEXT: s_mov_b32 s1, s3670; GFX10NSA-NEXT: s_mov_b32 s2, s4671; GFX10NSA-NEXT: s_mov_b32 s3, s5672; GFX10NSA-NEXT: s_mov_b32 s4, s6673; GFX10NSA-NEXT: s_mov_b32 s5, s7674; GFX10NSA-NEXT: s_mov_b32 s6, s8675; GFX10NSA-NEXT: s_mov_b32 s7, s9676; GFX10NSA-NEXT: s_mov_b32 s8, s10677; GFX10NSA-NEXT: s_mov_b32 s9, s11678; GFX10NSA-NEXT: s_mov_b32 s10, s12679; GFX10NSA-NEXT: s_mov_b32 s11, s13680; GFX10NSA-NEXT: image_gather4_b_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D681; GFX10NSA-NEXT: s_waitcnt vmcnt(0)682; GFX10NSA-NEXT: ; return to shader part epilog683;684; GFX12-LABEL: gather4_b_cl_2d:685; GFX12: ; %bb.0: ; %main_body686; GFX12-NEXT: s_mov_b32 s1, exec_lo687; GFX12-NEXT: s_mov_b32 s0, s2688; GFX12-NEXT: s_wqm_b32 exec_lo, exec_lo689; GFX12-NEXT: s_and_b32 exec_lo, exec_lo, s1690; GFX12-NEXT: s_mov_b32 s1, s3691; GFX12-NEXT: s_mov_b32 s2, s4692; GFX12-NEXT: s_mov_b32 s3, s5693; GFX12-NEXT: s_mov_b32 s4, s6694; GFX12-NEXT: s_mov_b32 s5, s7695; GFX12-NEXT: s_mov_b32 s6, s8696; GFX12-NEXT: s_mov_b32 s7, s9697; GFX12-NEXT: s_mov_b32 s8, s10698; GFX12-NEXT: s_mov_b32 s9, s11699; GFX12-NEXT: s_mov_b32 s10, s12700; GFX12-NEXT: s_mov_b32 s11, s13701; GFX12-NEXT: image_gather4_b_cl v[0:3], [v0, v1, v2, v3], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D702; GFX12-NEXT: s_wait_samplecnt 0x0703; GFX12-NEXT: ; return to shader part epilog704main_body:705 %v = call <4 x float> @llvm.amdgcn.image.gather4.b.cl.2d.v4f32.f32.f32(i32 1, float %bias, float %s, float %t, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)706 ret <4 x float> %v707}708 709define amdgpu_ps <4 x float> @gather4_c_b_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %bias, float %zcompare, float %s, float %t, float %clamp) {710; GFX6-LABEL: gather4_c_b_cl_2d:711; GFX6: ; %bb.0: ; %main_body712; GFX6-NEXT: s_mov_b64 s[14:15], exec713; GFX6-NEXT: s_mov_b32 s0, s2714; GFX6-NEXT: s_mov_b32 s1, s3715; GFX6-NEXT: s_mov_b32 s2, s4716; GFX6-NEXT: s_mov_b32 s3, s5717; GFX6-NEXT: s_mov_b32 s4, s6718; GFX6-NEXT: s_mov_b32 s5, s7719; GFX6-NEXT: s_mov_b32 s6, s8720; GFX6-NEXT: s_mov_b32 s7, s9721; GFX6-NEXT: s_mov_b32 s8, s10722; GFX6-NEXT: s_mov_b32 s9, s11723; GFX6-NEXT: s_mov_b32 s10, s12724; GFX6-NEXT: s_mov_b32 s11, s13725; GFX6-NEXT: s_wqm_b64 exec, exec726; GFX6-NEXT: s_and_b64 exec, exec, s[14:15]727; GFX6-NEXT: image_gather4_c_b_cl v[0:3], v[0:4], s[0:7], s[8:11] dmask:0x1728; GFX6-NEXT: s_waitcnt vmcnt(0)729; GFX6-NEXT: ; return to shader part epilog730;731; GFX10NSA-LABEL: gather4_c_b_cl_2d:732; GFX10NSA: ; %bb.0: ; %main_body733; GFX10NSA-NEXT: s_mov_b32 s1, exec_lo734; GFX10NSA-NEXT: s_mov_b32 s0, s2735; GFX10NSA-NEXT: s_wqm_b32 exec_lo, exec_lo736; GFX10NSA-NEXT: s_and_b32 exec_lo, exec_lo, s1737; GFX10NSA-NEXT: s_mov_b32 s1, s3738; GFX10NSA-NEXT: s_mov_b32 s2, s4739; GFX10NSA-NEXT: s_mov_b32 s3, s5740; GFX10NSA-NEXT: s_mov_b32 s4, s6741; GFX10NSA-NEXT: s_mov_b32 s5, s7742; GFX10NSA-NEXT: s_mov_b32 s6, s8743; GFX10NSA-NEXT: s_mov_b32 s7, s9744; GFX10NSA-NEXT: s_mov_b32 s8, s10745; GFX10NSA-NEXT: s_mov_b32 s9, s11746; GFX10NSA-NEXT: s_mov_b32 s10, s12747; GFX10NSA-NEXT: s_mov_b32 s11, s13748; GFX10NSA-NEXT: image_gather4_c_b_cl v[0:3], v[0:4], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D749; GFX10NSA-NEXT: s_waitcnt vmcnt(0)750; GFX10NSA-NEXT: ; return to shader part epilog751;752; GFX12-LABEL: gather4_c_b_cl_2d:753; GFX12: ; %bb.0: ; %main_body754; GFX12-NEXT: s_mov_b32 s1, exec_lo755; GFX12-NEXT: s_mov_b32 s0, s2756; GFX12-NEXT: s_wqm_b32 exec_lo, exec_lo757; GFX12-NEXT: s_and_b32 exec_lo, exec_lo, s1758; GFX12-NEXT: s_mov_b32 s1, s3759; GFX12-NEXT: s_mov_b32 s2, s4760; GFX12-NEXT: s_mov_b32 s3, s5761; GFX12-NEXT: s_mov_b32 s4, s6762; GFX12-NEXT: s_mov_b32 s5, s7763; GFX12-NEXT: s_mov_b32 s6, s8764; GFX12-NEXT: s_mov_b32 s7, s9765; GFX12-NEXT: s_mov_b32 s8, s10766; GFX12-NEXT: s_mov_b32 s9, s11767; GFX12-NEXT: s_mov_b32 s10, s12768; GFX12-NEXT: s_mov_b32 s11, s13769; GFX12-NEXT: image_gather4_c_b_cl v[0:3], [v0, v1, v2, v[3:4]], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D770; GFX12-NEXT: s_wait_samplecnt 0x0771; GFX12-NEXT: ; return to shader part epilog772main_body:773 %v = call <4 x float> @llvm.amdgcn.image.gather4.c.b.cl.2d.v4f32.f32.f32(i32 1, float %bias, float %zcompare, float %s, float %t, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)774 ret <4 x float> %v775}776 777define amdgpu_ps <4 x float> @gather4_l_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t, float %lod) {778; GFX6-LABEL: gather4_l_2d:779; GFX6: ; %bb.0: ; %main_body780; GFX6-NEXT: s_mov_b32 s0, s2781; GFX6-NEXT: s_mov_b32 s1, s3782; GFX6-NEXT: s_mov_b32 s2, s4783; GFX6-NEXT: s_mov_b32 s3, s5784; GFX6-NEXT: s_mov_b32 s4, s6785; GFX6-NEXT: s_mov_b32 s5, s7786; GFX6-NEXT: s_mov_b32 s6, s8787; GFX6-NEXT: s_mov_b32 s7, s9788; GFX6-NEXT: s_mov_b32 s8, s10789; GFX6-NEXT: s_mov_b32 s9, s11790; GFX6-NEXT: s_mov_b32 s10, s12791; GFX6-NEXT: s_mov_b32 s11, s13792; GFX6-NEXT: image_gather4_l v[0:3], v[0:2], s[0:7], s[8:11] dmask:0x1793; GFX6-NEXT: s_waitcnt vmcnt(0)794; GFX6-NEXT: ; return to shader part epilog795;796; GFX10NSA-LABEL: gather4_l_2d:797; GFX10NSA: ; %bb.0: ; %main_body798; GFX10NSA-NEXT: s_mov_b32 s0, s2799; GFX10NSA-NEXT: s_mov_b32 s1, s3800; GFX10NSA-NEXT: s_mov_b32 s2, s4801; GFX10NSA-NEXT: s_mov_b32 s3, s5802; GFX10NSA-NEXT: s_mov_b32 s4, s6803; GFX10NSA-NEXT: s_mov_b32 s5, s7804; GFX10NSA-NEXT: s_mov_b32 s6, s8805; GFX10NSA-NEXT: s_mov_b32 s7, s9806; GFX10NSA-NEXT: s_mov_b32 s8, s10807; GFX10NSA-NEXT: s_mov_b32 s9, s11808; GFX10NSA-NEXT: s_mov_b32 s10, s12809; GFX10NSA-NEXT: s_mov_b32 s11, s13810; GFX10NSA-NEXT: image_gather4_l v[0:3], v[0:2], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D811; GFX10NSA-NEXT: s_waitcnt vmcnt(0)812; GFX10NSA-NEXT: ; return to shader part epilog813;814; GFX12-LABEL: gather4_l_2d:815; GFX12: ; %bb.0: ; %main_body816; GFX12-NEXT: s_mov_b32 s0, s2817; GFX12-NEXT: s_mov_b32 s1, s3818; GFX12-NEXT: s_mov_b32 s2, s4819; GFX12-NEXT: s_mov_b32 s3, s5820; GFX12-NEXT: s_mov_b32 s4, s6821; GFX12-NEXT: s_mov_b32 s5, s7822; GFX12-NEXT: s_mov_b32 s6, s8823; GFX12-NEXT: s_mov_b32 s7, s9824; GFX12-NEXT: s_mov_b32 s8, s10825; GFX12-NEXT: s_mov_b32 s9, s11826; GFX12-NEXT: s_mov_b32 s10, s12827; GFX12-NEXT: s_mov_b32 s11, s13828; GFX12-NEXT: image_gather4_l v[0:3], [v0, v1, v2], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D829; GFX12-NEXT: s_wait_samplecnt 0x0830; GFX12-NEXT: ; return to shader part epilog831main_body:832 %v = call <4 x float> @llvm.amdgcn.image.gather4.l.2d.v4f32.f32(i32 1, float %s, float %t, float %lod, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)833 ret <4 x float> %v834}835 836define amdgpu_ps <4 x float> @gather4_c_l_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %s, float %t, float %lod) {837; GFX6-LABEL: gather4_c_l_2d:838; GFX6: ; %bb.0: ; %main_body839; GFX6-NEXT: s_mov_b32 s0, s2840; GFX6-NEXT: s_mov_b32 s1, s3841; GFX6-NEXT: s_mov_b32 s2, s4842; GFX6-NEXT: s_mov_b32 s3, s5843; GFX6-NEXT: s_mov_b32 s4, s6844; GFX6-NEXT: s_mov_b32 s5, s7845; GFX6-NEXT: s_mov_b32 s6, s8846; GFX6-NEXT: s_mov_b32 s7, s9847; GFX6-NEXT: s_mov_b32 s8, s10848; GFX6-NEXT: s_mov_b32 s9, s11849; GFX6-NEXT: s_mov_b32 s10, s12850; GFX6-NEXT: s_mov_b32 s11, s13851; GFX6-NEXT: image_gather4_c_l v[0:3], v[0:3], s[0:7], s[8:11] dmask:0x1852; GFX6-NEXT: s_waitcnt vmcnt(0)853; GFX6-NEXT: ; return to shader part epilog854;855; GFX10NSA-LABEL: gather4_c_l_2d:856; GFX10NSA: ; %bb.0: ; %main_body857; GFX10NSA-NEXT: s_mov_b32 s0, s2858; GFX10NSA-NEXT: s_mov_b32 s1, s3859; GFX10NSA-NEXT: s_mov_b32 s2, s4860; GFX10NSA-NEXT: s_mov_b32 s3, s5861; GFX10NSA-NEXT: s_mov_b32 s4, s6862; GFX10NSA-NEXT: s_mov_b32 s5, s7863; GFX10NSA-NEXT: s_mov_b32 s6, s8864; GFX10NSA-NEXT: s_mov_b32 s7, s9865; GFX10NSA-NEXT: s_mov_b32 s8, s10866; GFX10NSA-NEXT: s_mov_b32 s9, s11867; GFX10NSA-NEXT: s_mov_b32 s10, s12868; GFX10NSA-NEXT: s_mov_b32 s11, s13869; GFX10NSA-NEXT: image_gather4_c_l v[0:3], v[0:3], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D870; GFX10NSA-NEXT: s_waitcnt vmcnt(0)871; GFX10NSA-NEXT: ; return to shader part epilog872;873; GFX12-LABEL: gather4_c_l_2d:874; GFX12: ; %bb.0: ; %main_body875; GFX12-NEXT: s_mov_b32 s0, s2876; GFX12-NEXT: s_mov_b32 s1, s3877; GFX12-NEXT: s_mov_b32 s2, s4878; GFX12-NEXT: s_mov_b32 s3, s5879; GFX12-NEXT: s_mov_b32 s4, s6880; GFX12-NEXT: s_mov_b32 s5, s7881; GFX12-NEXT: s_mov_b32 s6, s8882; GFX12-NEXT: s_mov_b32 s7, s9883; GFX12-NEXT: s_mov_b32 s8, s10884; GFX12-NEXT: s_mov_b32 s9, s11885; GFX12-NEXT: s_mov_b32 s10, s12886; GFX12-NEXT: s_mov_b32 s11, s13887; GFX12-NEXT: image_gather4_c_l v[0:3], [v0, v1, v2, v3], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D888; GFX12-NEXT: s_wait_samplecnt 0x0889; GFX12-NEXT: ; return to shader part epilog890main_body:891 %v = call <4 x float> @llvm.amdgcn.image.gather4.c.l.2d.v4f32.f32(i32 1, float %zcompare, float %s, float %t, float %lod, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)892 ret <4 x float> %v893}894 895define amdgpu_ps <4 x float> @gather4_lz_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t) {896; GFX6-LABEL: gather4_lz_2d:897; GFX6: ; %bb.0: ; %main_body898; GFX6-NEXT: s_mov_b32 s0, s2899; GFX6-NEXT: s_mov_b32 s1, s3900; GFX6-NEXT: s_mov_b32 s2, s4901; GFX6-NEXT: s_mov_b32 s3, s5902; GFX6-NEXT: s_mov_b32 s4, s6903; GFX6-NEXT: s_mov_b32 s5, s7904; GFX6-NEXT: s_mov_b32 s6, s8905; GFX6-NEXT: s_mov_b32 s7, s9906; GFX6-NEXT: s_mov_b32 s8, s10907; GFX6-NEXT: s_mov_b32 s9, s11908; GFX6-NEXT: s_mov_b32 s10, s12909; GFX6-NEXT: s_mov_b32 s11, s13910; GFX6-NEXT: image_gather4_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0x1911; GFX6-NEXT: s_waitcnt vmcnt(0)912; GFX6-NEXT: ; return to shader part epilog913;914; GFX10NSA-LABEL: gather4_lz_2d:915; GFX10NSA: ; %bb.0: ; %main_body916; GFX10NSA-NEXT: s_mov_b32 s0, s2917; GFX10NSA-NEXT: s_mov_b32 s1, s3918; GFX10NSA-NEXT: s_mov_b32 s2, s4919; GFX10NSA-NEXT: s_mov_b32 s3, s5920; GFX10NSA-NEXT: s_mov_b32 s4, s6921; GFX10NSA-NEXT: s_mov_b32 s5, s7922; GFX10NSA-NEXT: s_mov_b32 s6, s8923; GFX10NSA-NEXT: s_mov_b32 s7, s9924; GFX10NSA-NEXT: s_mov_b32 s8, s10925; GFX10NSA-NEXT: s_mov_b32 s9, s11926; GFX10NSA-NEXT: s_mov_b32 s10, s12927; GFX10NSA-NEXT: s_mov_b32 s11, s13928; GFX10NSA-NEXT: image_gather4_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D929; GFX10NSA-NEXT: s_waitcnt vmcnt(0)930; GFX10NSA-NEXT: ; return to shader part epilog931;932; GFX12-LABEL: gather4_lz_2d:933; GFX12: ; %bb.0: ; %main_body934; GFX12-NEXT: s_mov_b32 s0, s2935; GFX12-NEXT: s_mov_b32 s1, s3936; GFX12-NEXT: s_mov_b32 s2, s4937; GFX12-NEXT: s_mov_b32 s3, s5938; GFX12-NEXT: s_mov_b32 s4, s6939; GFX12-NEXT: s_mov_b32 s5, s7940; GFX12-NEXT: s_mov_b32 s6, s8941; GFX12-NEXT: s_mov_b32 s7, s9942; GFX12-NEXT: s_mov_b32 s8, s10943; GFX12-NEXT: s_mov_b32 s9, s11944; GFX12-NEXT: s_mov_b32 s10, s12945; GFX12-NEXT: s_mov_b32 s11, s13946; GFX12-NEXT: image_gather4_lz v[0:3], [v0, v1], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D947; GFX12-NEXT: s_wait_samplecnt 0x0948; GFX12-NEXT: ; return to shader part epilog949main_body:950 %v = call <4 x float> @llvm.amdgcn.image.gather4.lz.2d.v4f32.f32(i32 1, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)951 ret <4 x float> %v952}953 954define amdgpu_ps <4 x float> @gather4_c_lz_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %s, float %t) {955; GFX6-LABEL: gather4_c_lz_2d:956; GFX6: ; %bb.0: ; %main_body957; GFX6-NEXT: s_mov_b32 s0, s2958; GFX6-NEXT: s_mov_b32 s1, s3959; GFX6-NEXT: s_mov_b32 s2, s4960; GFX6-NEXT: s_mov_b32 s3, s5961; GFX6-NEXT: s_mov_b32 s4, s6962; GFX6-NEXT: s_mov_b32 s5, s7963; GFX6-NEXT: s_mov_b32 s6, s8964; GFX6-NEXT: s_mov_b32 s7, s9965; GFX6-NEXT: s_mov_b32 s8, s10966; GFX6-NEXT: s_mov_b32 s9, s11967; GFX6-NEXT: s_mov_b32 s10, s12968; GFX6-NEXT: s_mov_b32 s11, s13969; GFX6-NEXT: image_gather4_c_lz v[0:3], v[0:2], s[0:7], s[8:11] dmask:0x1970; GFX6-NEXT: s_waitcnt vmcnt(0)971; GFX6-NEXT: ; return to shader part epilog972;973; GFX10NSA-LABEL: gather4_c_lz_2d:974; GFX10NSA: ; %bb.0: ; %main_body975; GFX10NSA-NEXT: s_mov_b32 s0, s2976; GFX10NSA-NEXT: s_mov_b32 s1, s3977; GFX10NSA-NEXT: s_mov_b32 s2, s4978; GFX10NSA-NEXT: s_mov_b32 s3, s5979; GFX10NSA-NEXT: s_mov_b32 s4, s6980; GFX10NSA-NEXT: s_mov_b32 s5, s7981; GFX10NSA-NEXT: s_mov_b32 s6, s8982; GFX10NSA-NEXT: s_mov_b32 s7, s9983; GFX10NSA-NEXT: s_mov_b32 s8, s10984; GFX10NSA-NEXT: s_mov_b32 s9, s11985; GFX10NSA-NEXT: s_mov_b32 s10, s12986; GFX10NSA-NEXT: s_mov_b32 s11, s13987; GFX10NSA-NEXT: image_gather4_c_lz v[0:3], v[0:2], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D988; GFX10NSA-NEXT: s_waitcnt vmcnt(0)989; GFX10NSA-NEXT: ; return to shader part epilog990;991; GFX12-LABEL: gather4_c_lz_2d:992; GFX12: ; %bb.0: ; %main_body993; GFX12-NEXT: s_mov_b32 s0, s2994; GFX12-NEXT: s_mov_b32 s1, s3995; GFX12-NEXT: s_mov_b32 s2, s4996; GFX12-NEXT: s_mov_b32 s3, s5997; GFX12-NEXT: s_mov_b32 s4, s6998; GFX12-NEXT: s_mov_b32 s5, s7999; GFX12-NEXT: s_mov_b32 s6, s81000; GFX12-NEXT: s_mov_b32 s7, s91001; GFX12-NEXT: s_mov_b32 s8, s101002; GFX12-NEXT: s_mov_b32 s9, s111003; GFX12-NEXT: s_mov_b32 s10, s121004; GFX12-NEXT: s_mov_b32 s11, s131005; GFX12-NEXT: image_gather4_c_lz v[0:3], [v0, v1, v2], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D1006; GFX12-NEXT: s_wait_samplecnt 0x01007; GFX12-NEXT: ; return to shader part epilog1008main_body:1009 %v = call <4 x float> @llvm.amdgcn.image.gather4.c.lz.2d.v4f32.f32(i32 1, float %zcompare, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)1010 ret <4 x float> %v1011}1012 1013define amdgpu_ps <4 x float> @gather4_2d_dmask_2(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t) {1014; GFX6-LABEL: gather4_2d_dmask_2:1015; GFX6: ; %bb.0: ; %main_body1016; GFX6-NEXT: s_mov_b64 s[14:15], exec1017; GFX6-NEXT: s_mov_b32 s0, s21018; GFX6-NEXT: s_mov_b32 s1, s31019; GFX6-NEXT: s_mov_b32 s2, s41020; GFX6-NEXT: s_mov_b32 s3, s51021; GFX6-NEXT: s_mov_b32 s4, s61022; GFX6-NEXT: s_mov_b32 s5, s71023; GFX6-NEXT: s_mov_b32 s6, s81024; GFX6-NEXT: s_mov_b32 s7, s91025; GFX6-NEXT: s_mov_b32 s8, s101026; GFX6-NEXT: s_mov_b32 s9, s111027; GFX6-NEXT: s_mov_b32 s10, s121028; GFX6-NEXT: s_mov_b32 s11, s131029; GFX6-NEXT: s_wqm_b64 exec, exec1030; GFX6-NEXT: s_and_b64 exec, exec, s[14:15]1031; GFX6-NEXT: image_gather4 v[0:3], v[0:1], s[0:7], s[8:11] dmask:0x21032; GFX6-NEXT: s_waitcnt vmcnt(0)1033; GFX6-NEXT: ; return to shader part epilog1034;1035; GFX10NSA-LABEL: gather4_2d_dmask_2:1036; GFX10NSA: ; %bb.0: ; %main_body1037; GFX10NSA-NEXT: s_mov_b32 s1, exec_lo1038; GFX10NSA-NEXT: s_mov_b32 s0, s21039; GFX10NSA-NEXT: s_wqm_b32 exec_lo, exec_lo1040; GFX10NSA-NEXT: s_and_b32 exec_lo, exec_lo, s11041; GFX10NSA-NEXT: s_mov_b32 s1, s31042; GFX10NSA-NEXT: s_mov_b32 s2, s41043; GFX10NSA-NEXT: s_mov_b32 s3, s51044; GFX10NSA-NEXT: s_mov_b32 s4, s61045; GFX10NSA-NEXT: s_mov_b32 s5, s71046; GFX10NSA-NEXT: s_mov_b32 s6, s81047; GFX10NSA-NEXT: s_mov_b32 s7, s91048; GFX10NSA-NEXT: s_mov_b32 s8, s101049; GFX10NSA-NEXT: s_mov_b32 s9, s111050; GFX10NSA-NEXT: s_mov_b32 s10, s121051; GFX10NSA-NEXT: s_mov_b32 s11, s131052; GFX10NSA-NEXT: image_gather4 v[0:3], v[0:1], s[0:7], s[8:11] dmask:0x2 dim:SQ_RSRC_IMG_2D1053; GFX10NSA-NEXT: s_waitcnt vmcnt(0)1054; GFX10NSA-NEXT: ; return to shader part epilog1055;1056; GFX12-LABEL: gather4_2d_dmask_2:1057; GFX12: ; %bb.0: ; %main_body1058; GFX12-NEXT: s_mov_b32 s1, exec_lo1059; GFX12-NEXT: s_mov_b32 s0, s21060; GFX12-NEXT: s_wqm_b32 exec_lo, exec_lo1061; GFX12-NEXT: s_and_b32 exec_lo, exec_lo, s11062; GFX12-NEXT: s_mov_b32 s1, s31063; GFX12-NEXT: s_mov_b32 s2, s41064; GFX12-NEXT: s_mov_b32 s3, s51065; GFX12-NEXT: s_mov_b32 s4, s61066; GFX12-NEXT: s_mov_b32 s5, s71067; GFX12-NEXT: s_mov_b32 s6, s81068; GFX12-NEXT: s_mov_b32 s7, s91069; GFX12-NEXT: s_mov_b32 s8, s101070; GFX12-NEXT: s_mov_b32 s9, s111071; GFX12-NEXT: s_mov_b32 s10, s121072; GFX12-NEXT: s_mov_b32 s11, s131073; GFX12-NEXT: image_gather4 v[0:3], [v0, v1], s[0:7], s[8:11] dmask:0x2 dim:SQ_RSRC_IMG_2D1074; GFX12-NEXT: s_wait_samplecnt 0x01075; GFX12-NEXT: ; return to shader part epilog1076main_body:1077 %v = call <4 x float> @llvm.amdgcn.image.gather4.2d.v4f32.f32(i32 2, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)1078 ret <4 x float> %v1079}1080 1081define amdgpu_ps <4 x float> @gather4_2d_dmask_4(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t) {1082; GFX6-LABEL: gather4_2d_dmask_4:1083; GFX6: ; %bb.0: ; %main_body1084; GFX6-NEXT: s_mov_b64 s[14:15], exec1085; GFX6-NEXT: s_mov_b32 s0, s21086; GFX6-NEXT: s_mov_b32 s1, s31087; GFX6-NEXT: s_mov_b32 s2, s41088; GFX6-NEXT: s_mov_b32 s3, s51089; GFX6-NEXT: s_mov_b32 s4, s61090; GFX6-NEXT: s_mov_b32 s5, s71091; GFX6-NEXT: s_mov_b32 s6, s81092; GFX6-NEXT: s_mov_b32 s7, s91093; GFX6-NEXT: s_mov_b32 s8, s101094; GFX6-NEXT: s_mov_b32 s9, s111095; GFX6-NEXT: s_mov_b32 s10, s121096; GFX6-NEXT: s_mov_b32 s11, s131097; GFX6-NEXT: s_wqm_b64 exec, exec1098; GFX6-NEXT: s_and_b64 exec, exec, s[14:15]1099; GFX6-NEXT: image_gather4 v[0:3], v[0:1], s[0:7], s[8:11] dmask:0x41100; GFX6-NEXT: s_waitcnt vmcnt(0)1101; GFX6-NEXT: ; return to shader part epilog1102;1103; GFX10NSA-LABEL: gather4_2d_dmask_4:1104; GFX10NSA: ; %bb.0: ; %main_body1105; GFX10NSA-NEXT: s_mov_b32 s1, exec_lo1106; GFX10NSA-NEXT: s_mov_b32 s0, s21107; GFX10NSA-NEXT: s_wqm_b32 exec_lo, exec_lo1108; GFX10NSA-NEXT: s_and_b32 exec_lo, exec_lo, s11109; GFX10NSA-NEXT: s_mov_b32 s1, s31110; GFX10NSA-NEXT: s_mov_b32 s2, s41111; GFX10NSA-NEXT: s_mov_b32 s3, s51112; GFX10NSA-NEXT: s_mov_b32 s4, s61113; GFX10NSA-NEXT: s_mov_b32 s5, s71114; GFX10NSA-NEXT: s_mov_b32 s6, s81115; GFX10NSA-NEXT: s_mov_b32 s7, s91116; GFX10NSA-NEXT: s_mov_b32 s8, s101117; GFX10NSA-NEXT: s_mov_b32 s9, s111118; GFX10NSA-NEXT: s_mov_b32 s10, s121119; GFX10NSA-NEXT: s_mov_b32 s11, s131120; GFX10NSA-NEXT: image_gather4 v[0:3], v[0:1], s[0:7], s[8:11] dmask:0x4 dim:SQ_RSRC_IMG_2D1121; GFX10NSA-NEXT: s_waitcnt vmcnt(0)1122; GFX10NSA-NEXT: ; return to shader part epilog1123;1124; GFX12-LABEL: gather4_2d_dmask_4:1125; GFX12: ; %bb.0: ; %main_body1126; GFX12-NEXT: s_mov_b32 s1, exec_lo1127; GFX12-NEXT: s_mov_b32 s0, s21128; GFX12-NEXT: s_wqm_b32 exec_lo, exec_lo1129; GFX12-NEXT: s_and_b32 exec_lo, exec_lo, s11130; GFX12-NEXT: s_mov_b32 s1, s31131; GFX12-NEXT: s_mov_b32 s2, s41132; GFX12-NEXT: s_mov_b32 s3, s51133; GFX12-NEXT: s_mov_b32 s4, s61134; GFX12-NEXT: s_mov_b32 s5, s71135; GFX12-NEXT: s_mov_b32 s6, s81136; GFX12-NEXT: s_mov_b32 s7, s91137; GFX12-NEXT: s_mov_b32 s8, s101138; GFX12-NEXT: s_mov_b32 s9, s111139; GFX12-NEXT: s_mov_b32 s10, s121140; GFX12-NEXT: s_mov_b32 s11, s131141; GFX12-NEXT: image_gather4 v[0:3], [v0, v1], s[0:7], s[8:11] dmask:0x4 dim:SQ_RSRC_IMG_2D1142; GFX12-NEXT: s_wait_samplecnt 0x01143; GFX12-NEXT: ; return to shader part epilog1144main_body:1145 %v = call <4 x float> @llvm.amdgcn.image.gather4.2d.v4f32.f32(i32 4, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)1146 ret <4 x float> %v1147}1148 1149define amdgpu_ps <4 x float> @gather4_2d_dmask_8(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t) {1150; GFX6-LABEL: gather4_2d_dmask_8:1151; GFX6: ; %bb.0: ; %main_body1152; GFX6-NEXT: s_mov_b64 s[14:15], exec1153; GFX6-NEXT: s_mov_b32 s0, s21154; GFX6-NEXT: s_mov_b32 s1, s31155; GFX6-NEXT: s_mov_b32 s2, s41156; GFX6-NEXT: s_mov_b32 s3, s51157; GFX6-NEXT: s_mov_b32 s4, s61158; GFX6-NEXT: s_mov_b32 s5, s71159; GFX6-NEXT: s_mov_b32 s6, s81160; GFX6-NEXT: s_mov_b32 s7, s91161; GFX6-NEXT: s_mov_b32 s8, s101162; GFX6-NEXT: s_mov_b32 s9, s111163; GFX6-NEXT: s_mov_b32 s10, s121164; GFX6-NEXT: s_mov_b32 s11, s131165; GFX6-NEXT: s_wqm_b64 exec, exec1166; GFX6-NEXT: s_and_b64 exec, exec, s[14:15]1167; GFX6-NEXT: image_gather4 v[0:3], v[0:1], s[0:7], s[8:11] dmask:0x81168; GFX6-NEXT: s_waitcnt vmcnt(0)1169; GFX6-NEXT: ; return to shader part epilog1170;1171; GFX10NSA-LABEL: gather4_2d_dmask_8:1172; GFX10NSA: ; %bb.0: ; %main_body1173; GFX10NSA-NEXT: s_mov_b32 s1, exec_lo1174; GFX10NSA-NEXT: s_mov_b32 s0, s21175; GFX10NSA-NEXT: s_wqm_b32 exec_lo, exec_lo1176; GFX10NSA-NEXT: s_and_b32 exec_lo, exec_lo, s11177; GFX10NSA-NEXT: s_mov_b32 s1, s31178; GFX10NSA-NEXT: s_mov_b32 s2, s41179; GFX10NSA-NEXT: s_mov_b32 s3, s51180; GFX10NSA-NEXT: s_mov_b32 s4, s61181; GFX10NSA-NEXT: s_mov_b32 s5, s71182; GFX10NSA-NEXT: s_mov_b32 s6, s81183; GFX10NSA-NEXT: s_mov_b32 s7, s91184; GFX10NSA-NEXT: s_mov_b32 s8, s101185; GFX10NSA-NEXT: s_mov_b32 s9, s111186; GFX10NSA-NEXT: s_mov_b32 s10, s121187; GFX10NSA-NEXT: s_mov_b32 s11, s131188; GFX10NSA-NEXT: image_gather4 v[0:3], v[0:1], s[0:7], s[8:11] dmask:0x8 dim:SQ_RSRC_IMG_2D1189; GFX10NSA-NEXT: s_waitcnt vmcnt(0)1190; GFX10NSA-NEXT: ; return to shader part epilog1191;1192; GFX12-LABEL: gather4_2d_dmask_8:1193; GFX12: ; %bb.0: ; %main_body1194; GFX12-NEXT: s_mov_b32 s1, exec_lo1195; GFX12-NEXT: s_mov_b32 s0, s21196; GFX12-NEXT: s_wqm_b32 exec_lo, exec_lo1197; GFX12-NEXT: s_and_b32 exec_lo, exec_lo, s11198; GFX12-NEXT: s_mov_b32 s1, s31199; GFX12-NEXT: s_mov_b32 s2, s41200; GFX12-NEXT: s_mov_b32 s3, s51201; GFX12-NEXT: s_mov_b32 s4, s61202; GFX12-NEXT: s_mov_b32 s5, s71203; GFX12-NEXT: s_mov_b32 s6, s81204; GFX12-NEXT: s_mov_b32 s7, s91205; GFX12-NEXT: s_mov_b32 s8, s101206; GFX12-NEXT: s_mov_b32 s9, s111207; GFX12-NEXT: s_mov_b32 s10, s121208; GFX12-NEXT: s_mov_b32 s11, s131209; GFX12-NEXT: image_gather4 v[0:3], [v0, v1], s[0:7], s[8:11] dmask:0x8 dim:SQ_RSRC_IMG_2D1210; GFX12-NEXT: s_wait_samplecnt 0x01211; GFX12-NEXT: ; return to shader part epilog1212main_body:1213 %v = call <4 x float> @llvm.amdgcn.image.gather4.2d.v4f32.f32(i32 8, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)1214 ret <4 x float> %v1215}1216 1217declare <4 x float> @llvm.amdgcn.image.gather4.2d.v4f32.f32(i32 immarg, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #01218declare { <4 x float>, i32 } @llvm.amdgcn.image.gather4.2d.sl_v4f32i32s.f32(i32 immarg, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #01219declare <4 x float> @llvm.amdgcn.image.gather4.cube.v4f32.f32(i32 immarg, float, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #01220declare <4 x float> @llvm.amdgcn.image.gather4.2darray.v4f32.f32(i32 immarg, float, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #01221declare <4 x float> @llvm.amdgcn.image.gather4.c.2d.v4f32.f32(i32 immarg, float, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #01222declare <4 x float> @llvm.amdgcn.image.gather4.cl.2d.v4f32.f32(i32 immarg, float, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #01223declare <4 x float> @llvm.amdgcn.image.gather4.c.cl.2d.v4f32.f32(i32 immarg, float, float, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #01224declare <4 x float> @llvm.amdgcn.image.gather4.b.2d.v4f32.f32.f32(i32 immarg, float, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #01225declare <4 x float> @llvm.amdgcn.image.gather4.c.b.2d.v4f32.f32.f32(i32 immarg, float, float, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #01226declare <4 x float> @llvm.amdgcn.image.gather4.b.cl.2d.v4f32.f32.f32(i32 immarg, float, float, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #01227declare <4 x float> @llvm.amdgcn.image.gather4.c.b.cl.2d.v4f32.f32.f32(i32 immarg, float, float, float, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #01228declare <4 x float> @llvm.amdgcn.image.gather4.l.2d.v4f32.f32(i32 immarg, float, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #01229declare <4 x float> @llvm.amdgcn.image.gather4.c.l.2d.v4f32.f32(i32 immarg, float, float, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #01230declare <4 x float> @llvm.amdgcn.image.gather4.lz.2d.v4f32.f32(i32 immarg, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #01231declare <4 x float> @llvm.amdgcn.image.gather4.c.lz.2d.v4f32.f32(i32 immarg, float, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #01232 1233attributes #0 = { nounwind readonly }1234