blob: 2c768fcf95910b95262e90d1327545b25e3965c2 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=amdgpu13.10 < %s | FileCheck -check-prefixes=GFX13 %s
define amdgpu_ps <4 x float> @sample_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: sample_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_mov_b32_e32 v4, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:3], v4, s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_1d_tfe(<8 x i32> inreg %rsrc, i32 inreg %samp, ptr addrspace(1) inreg %out, float %s) {
; GFX13-LABEL: sample_1d_tfe:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s12, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v6, 0
; GFX13-NEXT: s_mov_b32 s11, s10
; GFX13-NEXT: s_mov_b32 s10, s9
; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
; GFX13-NEXT: v_dual_mov_b32 v7, v6 :: v_dual_mov_b32 v8, v6
; GFX13-NEXT: v_dual_mov_b32 v9, v6 :: v_dual_mov_b32 v10, v6
; GFX13-NEXT: v_dual_mov_b32 v0, v6 :: v_dual_mov_b32 v1, v7
; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
; GFX13-NEXT: v_dual_mov_b32 v2, v8 :: v_dual_mov_b32 v3, v9
; GFX13-NEXT: v_mov_b32_e32 v4, v10
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s12
; GFX13-NEXT: image_sample v[0:4], v5, s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D tfe
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: global_store_b32 v6, v4, s[10:11]
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 1, i32 0)
%v.vec = extractvalue {<4 x float>, i32} %v, 0
%v.err = extractvalue {<4 x float>, i32} %v, 1
store i32 %v.err, ptr addrspace(1) %out, align 4
ret <4 x float> %v.vec
}
define amdgpu_ps <2 x float> @sample_1d_tfe_adjust_writemask_1(<8 x i32> inreg %rsrc, i32 inreg %samp, ptr addrspace(1) inreg %out, float %s) {
; GFX13-LABEL: sample_1d_tfe_adjust_writemask_1:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v0, 0
; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX13-NEXT: v_mov_b32_e32 v1, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:1], v2, s[0:7], rsrcidx(s8) dmask:0x1 dim:SQ_RSRC_IMG_1D tfe
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 1, i32 0)
%res.vec = extractvalue {<4 x float>,i32} %v, 0
%res.f = extractelement <4 x float> %res.vec, i32 0
%res.err = extractvalue {<4 x float>,i32} %v, 1
%res.errf = bitcast i32 %res.err to float
%res.tmp = insertelement <2 x float> poison, float %res.f, i32 0
%res = insertelement <2 x float> %res.tmp, float %res.errf, i32 1
ret <2 x float> %res
}
define amdgpu_ps <2 x float> @sample_1d_tfe_adjust_writemask_2(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: sample_1d_tfe_adjust_writemask_2:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v0, 0
; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX13-NEXT: v_mov_b32_e32 v1, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:1], v2, s[0:7], rsrcidx(s8) dmask:0x2 dim:SQ_RSRC_IMG_1D tfe
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 1, i32 0)
%res.vec = extractvalue {<4 x float>,i32} %v, 0
%res.f = extractelement <4 x float> %res.vec, i32 1
%res.err = extractvalue {<4 x float>,i32} %v, 1
%res.errf = bitcast i32 %res.err to float
%res.tmp = insertelement <2 x float> poison, float %res.f, i32 0
%res = insertelement <2 x float> %res.tmp, float %res.errf, i32 1
ret <2 x float> %res
}
define amdgpu_ps <2 x float> @sample_1d_tfe_adjust_writemask_3(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: sample_1d_tfe_adjust_writemask_3:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v0, 0
; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX13-NEXT: v_mov_b32_e32 v1, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:1], v2, s[0:7], rsrcidx(s8) dmask:0x4 dim:SQ_RSRC_IMG_1D tfe
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 1, i32 0)
%res.vec = extractvalue {<4 x float>,i32} %v, 0
%res.f = extractelement <4 x float> %res.vec, i32 2
%res.err = extractvalue {<4 x float>,i32} %v, 1
%res.errf = bitcast i32 %res.err to float
%res.tmp = insertelement <2 x float> poison, float %res.f, i32 0
%res = insertelement <2 x float> %res.tmp, float %res.errf, i32 1
ret <2 x float> %res
}
define amdgpu_ps <2 x float> @sample_1d_tfe_adjust_writemask_4(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: sample_1d_tfe_adjust_writemask_4:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v0, 0
; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX13-NEXT: v_mov_b32_e32 v1, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:1], v2, s[0:7], rsrcidx(s8) dmask:0x8 dim:SQ_RSRC_IMG_1D tfe
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 1, i32 0)
%res.vec = extractvalue {<4 x float>,i32} %v, 0
%res.f = extractelement <4 x float> %res.vec, i32 3
%res.err = extractvalue {<4 x float>,i32} %v, 1
%res.errf = bitcast i32 %res.err to float
%res.tmp = insertelement <2 x float> poison, float %res.f, i32 0
%res = insertelement <2 x float> %res.tmp, float %res.errf, i32 1
ret <2 x float> %res
}
define amdgpu_ps <4 x float> @sample_1d_tfe_adjust_writemask_12(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: sample_1d_tfe_adjust_writemask_12:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v3, v0 :: v_dual_mov_b32 v0, 0
; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX13-NEXT: v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v2, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:2], v3, s[0:7], rsrcidx(s8) dmask:0x3 dim:SQ_RSRC_IMG_1D tfe
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 1, i32 0)
%res.vec = extractvalue {<4 x float>,i32} %v, 0
%res.f1 = extractelement <4 x float> %res.vec, i32 0
%res.f2 = extractelement <4 x float> %res.vec, i32 1
%res.err = extractvalue {<4 x float>,i32} %v, 1
%res.errf = bitcast i32 %res.err to float
%res.tmp1 = insertelement <4 x float> poison, float %res.f1, i32 0
%res.tmp2 = insertelement <4 x float> %res.tmp1, float %res.f2, i32 1
%res = insertelement <4 x float> %res.tmp2, float %res.errf, i32 2
ret <4 x float> %res
}
define amdgpu_ps <4 x float> @sample_1d_tfe_adjust_writemask_24(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: sample_1d_tfe_adjust_writemask_24:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v3, v0 :: v_dual_mov_b32 v0, 0
; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX13-NEXT: v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v2, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:2], v3, s[0:7], rsrcidx(s8) dmask:0xa dim:SQ_RSRC_IMG_1D tfe
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 1, i32 0)
%res.vec = extractvalue {<4 x float>,i32} %v, 0
%res.f1 = extractelement <4 x float> %res.vec, i32 1
%res.f2 = extractelement <4 x float> %res.vec, i32 3
%res.err = extractvalue {<4 x float>,i32} %v, 1
%res.errf = bitcast i32 %res.err to float
%res.tmp1 = insertelement <4 x float> poison, float %res.f1, i32 0
%res.tmp2 = insertelement <4 x float> %res.tmp1, float %res.f2, i32 1
%res = insertelement <4 x float> %res.tmp2, float %res.errf, i32 2
ret <4 x float> %res
}
define amdgpu_ps <4 x float> @sample_1d_tfe_adjust_writemask_134(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: sample_1d_tfe_adjust_writemask_134:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v0 :: v_dual_mov_b32 v0, 0
; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX13-NEXT: v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v2, v0
; GFX13-NEXT: v_mov_b32_e32 v3, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:3], v4, s[0:7], rsrcidx(s8) dmask:0xd dim:SQ_RSRC_IMG_1D tfe
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 1, i32 0)
%res.vec = extractvalue {<4 x float>,i32} %v, 0
%res.f1 = extractelement <4 x float> %res.vec, i32 0
%res.f2 = extractelement <4 x float> %res.vec, i32 2
%res.f3 = extractelement <4 x float> %res.vec, i32 3
%res.err = extractvalue {<4 x float>,i32} %v, 1
%res.errf = bitcast i32 %res.err to float
%res.tmp1 = insertelement <4 x float> poison, float %res.f1, i32 0
%res.tmp2 = insertelement <4 x float> %res.tmp1, float %res.f2, i32 1
%res.tmp3 = insertelement <4 x float> %res.tmp2, float %res.f3, i32 2
%res = insertelement <4 x float> %res.tmp3, float %res.errf, i32 3
ret <4 x float> %res
}
define amdgpu_ps <4 x float> @sample_1d_lwe(<8 x i32> inreg %rsrc, i32 inreg %samp, ptr addrspace(1) inreg %out, float %s) {
; GFX13-LABEL: sample_1d_lwe:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s12, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v6, 0
; GFX13-NEXT: s_mov_b32 s11, s10
; GFX13-NEXT: s_mov_b32 s10, s9
; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
; GFX13-NEXT: v_dual_mov_b32 v7, v6 :: v_dual_mov_b32 v8, v6
; GFX13-NEXT: v_dual_mov_b32 v9, v6 :: v_dual_mov_b32 v10, v6
; GFX13-NEXT: v_dual_mov_b32 v0, v6 :: v_dual_mov_b32 v1, v7
; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
; GFX13-NEXT: v_dual_mov_b32 v2, v8 :: v_dual_mov_b32 v3, v9
; GFX13-NEXT: v_mov_b32_e32 v4, v10
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s12
; GFX13-NEXT: image_sample v[0:4], v5, s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D lwe
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: global_store_b32 v6, v4, s[10:11]
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 2, i32 0)
%v.vec = extractvalue {<4 x float>, i32} %v, 0
%v.err = extractvalue {<4 x float>, i32} %v, 1
store i32 %v.err, ptr addrspace(1) %out, align 4
ret <4 x float> %v.vec
}
define amdgpu_ps <4 x float> @sample_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s, float %t) {
; GFX13-LABEL: sample_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v5, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:3], [v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.2d.v4f32.f32(i32 15, float %s, float %t, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_3d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s, float %t, float %r) {
; GFX13-LABEL: sample_3d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v2 :: v_dual_mov_b32 v5, v1
; GFX13-NEXT: v_mov_b32_e32 v6, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:3], [v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_3D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.3d.v4f32.f32(i32 15, float %s, float %t, float %r, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_cube(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s, float %t, float %face) {
; GFX13-LABEL: sample_cube:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v2 :: v_dual_mov_b32 v5, v1
; GFX13-NEXT: v_mov_b32_e32 v6, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:3], [v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_CUBE
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.cube.v4f32.f32(i32 15, float %s, float %t, float %face, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_1darray(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s, float %slice) {
; GFX13-LABEL: sample_1darray:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v5, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:3], [v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.1darray.v4f32.f32(i32 15, float %s, float %slice, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_2darray(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s, float %t, float %slice) {
; GFX13-LABEL: sample_2darray:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v2 :: v_dual_mov_b32 v5, v1
; GFX13-NEXT: v_mov_b32_e32 v6, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:3], [v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.2darray.v4f32.f32(i32 15, float %s, float %t, float %slice, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %zcompare, float %s) {
; GFX13-LABEL: sample_c_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v5, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample_c v[0:3], [v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.1d.v4f32.f32(i32 15, float %zcompare, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %zcompare, float %s, float %t) {
; GFX13-LABEL: sample_c_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v2 :: v_dual_mov_b32 v5, v1
; GFX13-NEXT: v_mov_b32_e32 v6, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample_c v[0:3], [v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.2d.v4f32.f32(i32 15, float %zcompare, float %s, float %t, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_cl_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s, float %clamp) {
; GFX13-LABEL: sample_cl_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v5, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample_cl v[0:3], [v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.cl.1d.v4f32.f32(i32 15, float %s, float %clamp, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_cl_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s, float %t, float %clamp) {
; GFX13-LABEL: sample_cl_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v2 :: v_dual_mov_b32 v5, v1
; GFX13-NEXT: v_mov_b32_e32 v6, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample_cl v[0:3], [v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.cl.2d.v4f32.f32(i32 15, float %s, float %t, float %clamp, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_cl_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %zcompare, float %s, float %clamp) {
; GFX13-LABEL: sample_c_cl_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v2 :: v_dual_mov_b32 v5, v1
; GFX13-NEXT: v_mov_b32_e32 v6, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample_c_cl v[0:3], [v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.cl.1d.v4f32.f32(i32 15, float %zcompare, float %s, float %clamp, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_cl_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %zcompare, float %s, float %t, float %clamp) {
; GFX13-LABEL: sample_c_cl_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v3 :: v_dual_mov_b32 v5, v2
; GFX13-NEXT: v_dual_mov_b32 v6, v1 :: v_dual_mov_b32 v7, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample_c_cl v[0:3], [v7, v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.cl.2d.v4f32.f32(i32 15, float %zcompare, float %s, float %t, float %clamp, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_b_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %bias, float %s) {
; GFX13-LABEL: sample_b_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v5, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample_b v[0:3], [v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.b.1d.v4f32.f32.f32(i32 15, float %bias, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_b_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %bias, float %s, float %t) {
; GFX13-LABEL: sample_b_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v2 :: v_dual_mov_b32 v5, v1
; GFX13-NEXT: v_mov_b32_e32 v6, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample_b v[0:3], [v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.b.2d.v4f32.f32.f32(i32 15, float %bias, float %s, float %t, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_b_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %bias, float %zcompare, float %s) {
; GFX13-LABEL: sample_c_b_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v2 :: v_dual_mov_b32 v5, v1
; GFX13-NEXT: v_mov_b32_e32 v6, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample_c_b v[0:3], [v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.b.1d.v4f32.f32.f32(i32 15, float %bias, float %zcompare, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_b_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %bias, float %zcompare, float %s, float %t) {
; GFX13-LABEL: sample_c_b_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v3 :: v_dual_mov_b32 v5, v2
; GFX13-NEXT: v_dual_mov_b32 v6, v1 :: v_dual_mov_b32 v7, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample_c_b v[0:3], [v7, v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.b.2d.v4f32.f32.f32(i32 15, float %bias, float %zcompare, float %s, float %t, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_b_cl_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %bias, float %s, float %clamp) {
; GFX13-LABEL: sample_b_cl_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v2 :: v_dual_mov_b32 v5, v1
; GFX13-NEXT: v_mov_b32_e32 v6, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample_b_cl v[0:3], [v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.b.cl.1d.v4f32.f32.f32(i32 15, float %bias, float %s, float %clamp, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_b_cl_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %bias, float %s, float %t, float %clamp) {
; GFX13-LABEL: sample_b_cl_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v3 :: v_dual_mov_b32 v5, v2
; GFX13-NEXT: v_dual_mov_b32 v6, v1 :: v_dual_mov_b32 v7, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample_b_cl v[0:3], [v7, v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.b.cl.2d.v4f32.f32.f32(i32 15, float %bias, float %s, float %t, float %clamp, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_b_cl_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %bias, float %zcompare, float %s, float %clamp) {
; GFX13-LABEL: sample_c_b_cl_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v4, v3 :: v_dual_mov_b32 v5, v2
; GFX13-NEXT: v_dual_mov_b32 v6, v1 :: v_dual_mov_b32 v7, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample_c_b_cl v[0:3], [v7, v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.b.cl.1d.v4f32.f32.f32(i32 15, float %bias, float %zcompare, float %s, float %clamp, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_b_cl_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %bias, float %zcompare, float %s, float %t, float %clamp) {
; GFX13-LABEL: sample_c_b_cl_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_dual_mov_b32 v5, v4 :: v_dual_mov_b32 v4, v3
; GFX13-NEXT: v_dual_mov_b32 v6, v2 :: v_dual_mov_b32 v7, v1
; GFX13-NEXT: v_mov_b32_e32 v8, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample_c_b_cl v[0:3], [v8, v7, v6, v[4:5]], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.b.cl.2d.v4f32.f32.f32(i32 15, float %bias, float %zcompare, float %s, float %t, float %clamp, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_d_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %dsdh, float %dsdv, float %s) {
; GFX13-LABEL: sample_d_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_dual_mov_b32 v4, v2 :: v_dual_mov_b32 v5, v1
; GFX13-NEXT: v_mov_b32_e32 v6, v0
; GFX13-NEXT: image_sample_d v[0:3], [v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.d.1d.v4f32.f32.f32(i32 15, float %dsdh, float %dsdv, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_d_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t) {
; GFX13-LABEL: sample_d_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_dual_mov_b32 v6, v5 :: v_dual_mov_b32 v5, v4
; GFX13-NEXT: v_dual_mov_b32 v4, v3 :: v_dual_mov_b32 v7, v2
; GFX13-NEXT: v_dual_mov_b32 v8, v1 :: v_dual_mov_b32 v9, v0
; GFX13-NEXT: image_sample_d v[0:3], [v9, v8, v7, v[4:6]], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.d.2d.v4f32.f32.f32(i32 15, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_d_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %zcompare, float %dsdh, float %dsdv, float %s) {
; GFX13-LABEL: sample_c_d_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_dual_mov_b32 v4, v3 :: v_dual_mov_b32 v5, v2
; GFX13-NEXT: v_dual_mov_b32 v6, v1 :: v_dual_mov_b32 v7, v0
; GFX13-NEXT: image_sample_c_d v[0:3], [v7, v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.d.1d.v4f32.f32.f32(i32 15, float %zcompare, float %dsdh, float %dsdv, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_d_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t) {
; GFX13-LABEL: sample_c_d_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: image_sample_c_d v[7:10], [v0, v1, v2, v[3:6]], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8
; GFX13-NEXT: v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.d.2d.v4f32.f32.f32(i32 15, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_d_cl_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %dsdh, float %dsdv, float %s, float %clamp) {
; GFX13-LABEL: sample_d_cl_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_dual_mov_b32 v4, v3 :: v_dual_mov_b32 v5, v2
; GFX13-NEXT: v_dual_mov_b32 v6, v1 :: v_dual_mov_b32 v7, v0
; GFX13-NEXT: image_sample_d_cl v[0:3], [v7, v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.d.cl.1d.v4f32.f32.f32(i32 15, float %dsdh, float %dsdv, float %s, float %clamp, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_d_cl_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %clamp) {
; GFX13-LABEL: sample_d_cl_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: image_sample_d_cl v[7:10], [v0, v1, v2, v[3:6]], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8
; GFX13-NEXT: v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.d.cl.2d.v4f32.f32.f32(i32 15, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %clamp, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_d_cl_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %zcompare, float %dsdh, float %dsdv, float %s, float %clamp) {
; GFX13-LABEL: sample_c_d_cl_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_dual_mov_b32 v5, v4 :: v_dual_mov_b32 v4, v3
; GFX13-NEXT: v_dual_mov_b32 v6, v2 :: v_dual_mov_b32 v7, v1
; GFX13-NEXT: v_mov_b32_e32 v8, v0
; GFX13-NEXT: image_sample_c_d_cl v[0:3], [v8, v7, v6, v[4:5]], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.d.cl.1d.v4f32.f32.f32(i32 15, float %zcompare, float %dsdh, float %dsdv, float %s, float %clamp, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_d_cl_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %clamp) {
; GFX13-LABEL: sample_c_d_cl_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: image_sample_c_d_cl v[8:11], [v0, v1, v2, v[3:7]], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9
; GFX13-NEXT: v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.d.cl.2d.v4f32.f32.f32(i32 15, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %clamp, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_l_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s, float %lod) {
; GFX13-LABEL: sample_l_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v5, v0
; GFX13-NEXT: image_sample_l v[0:3], [v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.l.1d.v4f32.f32(i32 15, float %s, float %lod, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_l_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s, float %t, float %lod) {
; GFX13-LABEL: sample_l_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_dual_mov_b32 v4, v2 :: v_dual_mov_b32 v5, v1
; GFX13-NEXT: v_mov_b32_e32 v6, v0
; GFX13-NEXT: image_sample_l v[0:3], [v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.l.2d.v4f32.f32(i32 15, float %s, float %t, float %lod, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_l_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %zcompare, float %s, float %lod) {
; GFX13-LABEL: sample_c_l_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_dual_mov_b32 v4, v2 :: v_dual_mov_b32 v5, v1
; GFX13-NEXT: v_mov_b32_e32 v6, v0
; GFX13-NEXT: image_sample_c_l v[0:3], [v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.l.1d.v4f32.f32(i32 15, float %zcompare, float %s, float %lod, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_l_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %zcompare, float %s, float %t, float %lod) {
; GFX13-LABEL: sample_c_l_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_dual_mov_b32 v4, v3 :: v_dual_mov_b32 v5, v2
; GFX13-NEXT: v_dual_mov_b32 v6, v1 :: v_dual_mov_b32 v7, v0
; GFX13-NEXT: image_sample_c_l v[0:3], [v7, v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.l.2d.v4f32.f32(i32 15, float %zcompare, float %s, float %t, float %lod, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_lz_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: sample_lz_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_mov_b32_e32 v4, v0
; GFX13-NEXT: image_sample_lz v[0:3], v4, s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.lz.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_lz_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s, float %t) {
; GFX13-LABEL: sample_lz_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v5, v0
; GFX13-NEXT: image_sample_lz v[0:3], [v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.lz.2d.v4f32.f32(i32 15, float %s, float %t, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_lz_1d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %zcompare, float %s) {
; GFX13-LABEL: sample_c_lz_1d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v5, v0
; GFX13-NEXT: image_sample_c_lz v[0:3], [v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.lz.1d.v4f32.f32(i32 15, float %zcompare, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_lz_2d(<8 x i32> inreg %rsrc, i32 inreg %samp, float %zcompare, float %s, float %t) {
; GFX13-LABEL: sample_c_lz_2d:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_dual_mov_b32 v4, v2 :: v_dual_mov_b32 v5, v1
; GFX13-NEXT: v_mov_b32_e32 v6, v0
; GFX13-NEXT: image_sample_c_lz v[0:3], [v6, v5, v4], s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_2D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.c.lz.2d.v4f32.f32(i32 15, float %zcompare, float %s, float %t, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps float @sample_c_d_o_2darray_V1(<8 x i32> inreg %rsrc, i32 inreg %samp, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice) {
; GFX13-LABEL: sample_c_d_o_2darray_V1:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: image_sample_c_d_o v9, [v0, v1, v2, v[3:8]], s[0:7], rsrcidx(s8) dmask:0x4 dim:SQ_RSRC_IMG_2D_ARRAY
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: v_mov_b32_e32 v0, v9
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call float @llvm.amdgcn.image.sample.c.d.o.2darray.f32.f32.f32(i32 4, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret float %v
}
define amdgpu_ps float @sample_c_d_o_2darray_V1_tfe(<8 x i32> inreg %rsrc, i32 inreg %samp, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice, ptr addrspace(1) inreg %out) {
; GFX13-LABEL: sample_c_d_o_2darray_V1_tfe:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_dual_mov_b32 v11, 0 :: v_dual_mov_b32 v9, v1
; GFX13-NEXT: v_mov_b32_e32 v10, v0
; GFX13-NEXT: s_mov_b32 s11, s10
; GFX13-NEXT: s_mov_b32 s10, s9
; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
; GFX13-NEXT: v_mov_b32_e32 v12, v11
; GFX13-NEXT: v_dual_mov_b32 v0, v11 :: v_dual_mov_b32 v1, v12
; GFX13-NEXT: image_sample_c_d_o v[0:1], [v10, v9, v2, v[3:8]], s[0:7], rsrcidx(s8) dmask:0x4 dim:SQ_RSRC_IMG_2D_ARRAY tfe
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: global_store_b32 v11, v1, s[10:11]
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call {float,i32} @llvm.amdgcn.image.sample.c.d.o.2darray.f32i32.f32.f32(i32 4, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice, <8 x i32> %rsrc, i32 %samp, i1 0, i32 1, i32 0)
%v.vec = extractvalue {float, i32} %v, 0
%v.err = extractvalue {float, i32} %v, 1
store i32 %v.err, ptr addrspace(1) %out, align 4
ret float %v.vec
}
define amdgpu_ps <2 x float> @sample_c_d_o_2darray_V2(<8 x i32> inreg %rsrc, i32 inreg %samp, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice) {
; GFX13-LABEL: sample_c_d_o_2darray_V2:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v10, v0
; GFX13-NEXT: image_sample_c_d_o v[0:1], [v10, v9, v2, v[3:8]], s[0:7], rsrcidx(s8) dmask:0x6 dim:SQ_RSRC_IMG_2D_ARRAY
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <2 x float> @llvm.amdgcn.image.sample.c.d.o.2darray.v2f32.f32.f32(i32 6, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <2 x float> %v
}
define amdgpu_ps <4 x float> @sample_c_d_o_2darray_V2_tfe(<8 x i32> inreg %rsrc, i32 inreg %samp, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice) {
; GFX13-LABEL: sample_c_d_o_2darray_V2_tfe:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: v_dual_mov_b32 v11, v0 :: v_dual_mov_b32 v0, 0
; GFX13-NEXT: v_dual_mov_b32 v9, v2 :: v_dual_mov_b32 v10, v1
; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2)
; GFX13-NEXT: v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v2, v0
; GFX13-NEXT: image_sample_c_d_o v[0:2], [v11, v10, v9, v[3:8]], s[0:7], rsrcidx(s8) dmask:0x6 dim:SQ_RSRC_IMG_2D_ARRAY tfe
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call {<2 x float>, i32} @llvm.amdgcn.image.sample.c.d.o.2darray.v2f32i32.f32.f32(i32 6, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice, <8 x i32> %rsrc, i32 %samp, i1 0, i32 1, i32 0)
%v.vec = extractvalue {<2 x float>, i32} %v, 0
%v.f1 = extractelement <2 x float> %v.vec, i32 0
%v.f2 = extractelement <2 x float> %v.vec, i32 1
%v.err = extractvalue {<2 x float>, i32} %v, 1
%v.errf = bitcast i32 %v.err to float
%res.0 = insertelement <4 x float> poison, float %v.f1, i32 0
%res.1 = insertelement <4 x float> %res.0, float %v.f2, i32 1
%res.2 = insertelement <4 x float> %res.1, float %v.errf, i32 2
ret <4 x float> %res.2
}
define amdgpu_ps <4 x float> @sample_1d_unorm(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: sample_1d_unorm:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_mov_b32_e32 v4, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:3], v4, s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D unorm
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 1, i32 0, i32 0)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_1d_glc(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: sample_1d_glc:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_mov_b32_e32 v4, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:3], v4, s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D th:TH_LOAD_NT
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 1)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_1d_slc(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: sample_1d_slc:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_mov_b32_e32 v4, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:3], v4, s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D th:TH_LOAD_HT
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 2)
ret <4 x float> %v
}
define amdgpu_ps <4 x float> @sample_1d_glc_slc(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: sample_1d_glc_slc:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_mov_b32_e32 v4, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:3], v4, s[0:7], rsrcidx(s8) dmask:0xf dim:SQ_RSRC_IMG_1D th:TH_LOAD_LU
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%v = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 3)
ret <4 x float> %v
}
define amdgpu_ps float @adjust_writemask_sample_0(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: adjust_writemask_sample_0:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v1, v0, s[0:7], rsrcidx(s8) dmask:0x1 dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: v_mov_b32_e32 v0, v1
; GFX13-NEXT: ; return to shader part epilog
main_body:
%r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
%elt0 = extractelement <4 x float> %r, i32 0
ret float %elt0
}
define amdgpu_ps <2 x float> @adjust_writemask_sample_01(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: adjust_writemask_sample_01:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_mov_b32_e32 v2, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:1], v2, s[0:7], rsrcidx(s8) dmask:0x3 dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
%out = shufflevector <4 x float> %r, <4 x float> poison, <2 x i32> <i32 0, i32 1>
ret <2 x float> %out
}
define amdgpu_ps <3 x float> @adjust_writemask_sample_012(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: adjust_writemask_sample_012:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_mov_b32_e32 v3, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:2], v3, s[0:7], rsrcidx(s8) dmask:0x7 dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
%out = shufflevector <4 x float> %r, <4 x float> poison, <3 x i32> <i32 0, i32 1, i32 2>
ret <3 x float> %out
}
define amdgpu_ps <2 x float> @adjust_writemask_sample_12(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: adjust_writemask_sample_12:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_mov_b32_e32 v2, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:1], v2, s[0:7], rsrcidx(s8) dmask:0x6 dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
%out = shufflevector <4 x float> %r, <4 x float> poison, <2 x i32> <i32 1, i32 2>
ret <2 x float> %out
}
define amdgpu_ps <2 x float> @adjust_writemask_sample_03(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: adjust_writemask_sample_03:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_mov_b32_e32 v2, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:1], v2, s[0:7], rsrcidx(s8) dmask:0x9 dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
%out = shufflevector <4 x float> %r, <4 x float> poison, <2 x i32> <i32 0, i32 3>
ret <2 x float> %out
}
define amdgpu_ps <2 x float> @adjust_writemask_sample_13(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: adjust_writemask_sample_13:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_mov_b32_e32 v2, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:1], v2, s[0:7], rsrcidx(s8) dmask:0xa dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
%out = shufflevector <4 x float> %r, <4 x float> poison, <2 x i32> <i32 1, i32 3>
ret <2 x float> %out
}
define amdgpu_ps <3 x float> @adjust_writemask_sample_123(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: adjust_writemask_sample_123:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_mov_b32_e32 v3, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:2], v3, s[0:7], rsrcidx(s8) dmask:0xe dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
%out = shufflevector <4 x float> %r, <4 x float> poison, <3 x i32> <i32 1, i32 2, i32 3>
ret <3 x float> %out
}
define amdgpu_ps <4 x float> @adjust_writemask_sample_none_enabled(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: adjust_writemask_sample_none_enabled:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: ; return to shader part epilog
main_body:
%r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 0, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
ret <4 x float> %r
}
define amdgpu_ps <2 x float> @adjust_writemask_sample_123_to_12(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: adjust_writemask_sample_123_to_12:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_mov_b32_e32 v2, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:1], v2, s[0:7], rsrcidx(s8) dmask:0x6 dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 14, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
%out = shufflevector <4 x float> %r, <4 x float> poison, <2 x i32> <i32 0, i32 1>
ret <2 x float> %out
}
define amdgpu_ps <2 x float> @adjust_writemask_sample_013_to_13(<8 x i32> inreg %rsrc, i32 inreg %samp, float %s) {
; GFX13-LABEL: adjust_writemask_sample_013_to_13:
; GFX13: ; %bb.0: ; %main_body
; GFX13-NEXT: s_mov_b32 s9, exec_lo
; GFX13-NEXT: s_wqm_b32 exec_lo, exec_lo
; GFX13-NEXT: v_mov_b32_e32 v2, v0
; GFX13-NEXT: s_and_b32 exec_lo, exec_lo, s9
; GFX13-NEXT: image_sample v[0:1], v2, s[0:7], rsrcidx(s8) dmask:0xa dim:SQ_RSRC_IMG_1D
; GFX13-NEXT: s_wait_samplecnt 0x0
; GFX13-NEXT: ; return to shader part epilog
main_body:
%r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 11, float %s, <8 x i32> %rsrc, i32 %samp, i1 0, i32 0, i32 0)
%out = shufflevector <4 x float> %r, <4 x float> poison, <2 x i32> <i32 1, i32 2>
ret <2 x float> %out
}