1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -global-isel -march=amdgcn -mcpu=gfx1030 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX10,GFX1030 %s 3; RUN: llc -global-isel -march=amdgcn -mcpu=gfx1013 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX10,GFX1013 %s 4; RUN: llc -global-isel -march=amdgcn -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX11 %s 5; RUN: not --crash llc -global-isel -march=amdgcn -mcpu=gfx1012 -verify-machineinstrs < %s -o /dev/null 2>&1 | FileCheck -check-prefix=ERR %s 6 7; uint4 llvm.amdgcn.image.bvh.intersect.ray.i32.v4f32(uint node_ptr, float ray_extent, float3 ray_origin, float3 ray_dir, float3 ray_inv_dir, uint4 texture_descr) 8; uint4 llvm.amdgcn.image.bvh.intersect.ray.i32.v4f16(uint node_ptr, float ray_extent, float3 ray_origin, half3 ray_dir, half3 ray_inv_dir, uint4 texture_descr) 9; uint4 llvm.amdgcn.image.bvh.intersect.ray.i64.v4f32(ulong node_ptr, float ray_extent, float3 ray_origin, float3 ray_dir, float3 ray_inv_dir, uint4 texture_descr) 10; uint4 llvm.amdgcn.image.bvh.intersect.ray.i64.v4f16(ulong node_ptr, float ray_extent, float3 ray_origin, half3 ray_dir, half3 ray_inv_dir, uint4 texture_descr) 11 12declare <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i32.v4f32(i32, float, <3 x float>, <3 x float>, <3 x float>, <4 x i32>) 13declare <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i32.v4f16(i32, float, <3 x float>, <3 x half>, <3 x half>, <4 x i32>) 14declare <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i64.v4f32(i64, float, <3 x float>, <3 x float>, <3 x float>, <4 x i32>) 15declare <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i64.v4f16(i64, float, <3 x float>, <3 x half>, <3 x half>, <4 x i32>) 16declare i32 @llvm.amdgcn.workitem.id.x() 17 18define amdgpu_ps <4 x float> @image_bvh_intersect_ray(i32 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x float> %ray_dir, <3 x float> %ray_inv_dir, <4 x i32> inreg %tdescr) { 19; GCN-LABEL: image_bvh_intersect_ray: 20; GCN: ; %bb.0: 21; GCN-NEXT: image_bvh_intersect_ray v[0:3], v[0:15], s[0:3] 22; GCN-NEXT: s_waitcnt vmcnt(0) 23; GCN-NEXT: ; return to shader part epilog 24; ERR: in function image_bvh_intersect_ray{{.*}}intrinsic not supported on subtarget 25 %v = call <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i32.v4f32(i32 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x float> %ray_dir, <3 x float> %ray_inv_dir, <4 x i32> %tdescr) 26 %r = bitcast <4 x i32> %v to <4 x float> 27 ret <4 x float> %r 28} 29 30define amdgpu_ps <4 x float> @image_bvh_intersect_ray_flat(i32 %node_ptr, float %ray_extent, float %ray_origin_x, float %ray_origin_y, float %ray_origin_z, float %ray_dir_x, float %ray_dir_y, float %ray_dir_z, float %ray_inv_dir_x, float %ray_inv_dir_y, float %ray_inv_dir_z, <4 x i32> inreg %tdescr) { 31; GCN-LABEL: image_bvh_intersect_ray_flat: 32; GCN: ; %bb.0: 33; GCN-NEXT: image_bvh_intersect_ray v[0:3], v[0:15], s[0:3] 34; GCN-NEXT: s_waitcnt vmcnt(0) 35; GCN-NEXT: ; return to shader part epilog 36 %ray_origin0 = insertelement <3 x float> undef, float %ray_origin_x, i32 0 37 %ray_origin1 = insertelement <3 x float> %ray_origin0, float %ray_origin_y, i32 1 38 %ray_origin = insertelement <3 x float> %ray_origin1, float %ray_origin_z, i32 2 39 %ray_dir0 = insertelement <3 x float> undef, float %ray_dir_x, i32 0 40 %ray_dir1 = insertelement <3 x float> %ray_dir0, float %ray_dir_y, i32 1 41 %ray_dir = insertelement <3 x float> %ray_dir1, float %ray_dir_z, i32 2 42 %ray_inv_dir0 = insertelement <3 x float> undef, float %ray_inv_dir_x, i32 0 43 %ray_inv_dir1 = insertelement <3 x float> %ray_inv_dir0, float %ray_inv_dir_y, i32 1 44 %ray_inv_dir = insertelement <3 x float> %ray_inv_dir1, float %ray_inv_dir_z, i32 2 45 %v = call <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i32.v4f32(i32 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x float> %ray_dir, <3 x float> %ray_inv_dir, <4 x i32> %tdescr) 46 %r = bitcast <4 x i32> %v to <4 x float> 47 ret <4 x float> %r 48} 49 50define amdgpu_ps <4 x float> @image_bvh_intersect_ray_a16(i32 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x half> %ray_dir, <3 x half> %ray_inv_dir, <4 x i32> inreg %tdescr) { 51; GFX10-LABEL: image_bvh_intersect_ray_a16: 52; GFX10: ; %bb.0: 53; GFX10-NEXT: v_lshrrev_b32_e32 v9, 16, v5 54; GFX10-NEXT: v_and_b32_e32 v10, 0xffff, v7 55; GFX10-NEXT: v_and_b32_e32 v8, 0xffff, v8 56; GFX10-NEXT: v_lshlrev_b32_e32 v9, 16, v9 57; GFX10-NEXT: v_lshlrev_b32_e32 v10, 16, v10 58; GFX10-NEXT: v_alignbit_b32 v7, v8, v7, 16 59; GFX10-NEXT: v_and_or_b32 v5, v5, 0xffff, v9 60; GFX10-NEXT: v_and_or_b32 v6, v6, 0xffff, v10 61; GFX10-NEXT: image_bvh_intersect_ray v[0:3], v[0:7], s[0:3] a16 62; GFX10-NEXT: s_waitcnt vmcnt(0) 63; GFX10-NEXT: ; return to shader part epilog 64; 65; GFX11-LABEL: image_bvh_intersect_ray_a16: 66; GFX11: ; %bb.0: 67; GFX11-NEXT: v_lshrrev_b32_e32 v9, 16, v5 68; GFX11-NEXT: v_lshrrev_b32_e32 v10, 16, v7 69; GFX11-NEXT: v_lshlrev_b32_e32 v5, 16, v5 70; GFX11-NEXT: v_lshlrev_b32_e32 v11, 16, v6 71; GFX11-NEXT: v_lshlrev_b32_e32 v9, 16, v9 72; GFX11-NEXT: v_and_or_b32 v5, 0xffff, v7, v5 73; GFX11-NEXT: v_and_or_b32 v7, 0xffff, v8, v11 74; GFX11-NEXT: v_and_or_b32 v6, 0xffff, v10, v9 75; GFX11-NEXT: image_bvh_intersect_ray v[0:3], v[0:7], s[0:3] a16 76; GFX11-NEXT: s_waitcnt vmcnt(0) 77; GFX11-NEXT: ; return to shader part epilog 78 %v = call <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i32.v4f16(i32 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x half> %ray_dir, <3 x half> %ray_inv_dir, <4 x i32> %tdescr) 79 %r = bitcast <4 x i32> %v to <4 x float> 80 ret <4 x float> %r 81} 82 83define amdgpu_ps <4 x float> @image_bvh64_intersect_ray(i64 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x float> %ray_dir, <3 x float> %ray_inv_dir, <4 x i32> inreg %tdescr) { 84; GCN-LABEL: image_bvh64_intersect_ray: 85; GCN: ; %bb.0: 86; GCN-NEXT: image_bvh64_intersect_ray v[0:3], v[0:15], s[0:3] 87; GCN-NEXT: s_waitcnt vmcnt(0) 88; GCN-NEXT: ; return to shader part epilog 89 %v = call <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i64.v4f32(i64 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x float> %ray_dir, <3 x float> %ray_inv_dir, <4 x i32> %tdescr) 90 %r = bitcast <4 x i32> %v to <4 x float> 91 ret <4 x float> %r 92} 93 94define amdgpu_ps <4 x float> @image_bvh64_intersect_ray_flat(<2 x i32> %node_ptr_vec, float %ray_extent, float %ray_origin_x, float %ray_origin_y, float %ray_origin_z, float %ray_dir_x, float %ray_dir_y, float %ray_dir_z, float %ray_inv_dir_x, float %ray_inv_dir_y, float %ray_inv_dir_z, <4 x i32> inreg %tdescr) { 95; GCN-LABEL: image_bvh64_intersect_ray_flat: 96; GCN: ; %bb.0: 97; GCN-NEXT: image_bvh64_intersect_ray v[0:3], v[0:15], s[0:3] 98; GCN-NEXT: s_waitcnt vmcnt(0) 99; GCN-NEXT: ; return to shader part epilog 100 %node_ptr = bitcast <2 x i32> %node_ptr_vec to i64 101 %ray_origin0 = insertelement <3 x float> undef, float %ray_origin_x, i32 0 102 %ray_origin1 = insertelement <3 x float> %ray_origin0, float %ray_origin_y, i32 1 103 %ray_origin = insertelement <3 x float> %ray_origin1, float %ray_origin_z, i32 2 104 %ray_dir0 = insertelement <3 x float> undef, float %ray_dir_x, i32 0 105 %ray_dir1 = insertelement <3 x float> %ray_dir0, float %ray_dir_y, i32 1 106 %ray_dir = insertelement <3 x float> %ray_dir1, float %ray_dir_z, i32 2 107 %ray_inv_dir0 = insertelement <3 x float> undef, float %ray_inv_dir_x, i32 0 108 %ray_inv_dir1 = insertelement <3 x float> %ray_inv_dir0, float %ray_inv_dir_y, i32 1 109 %ray_inv_dir = insertelement <3 x float> %ray_inv_dir1, float %ray_inv_dir_z, i32 2 110 %v = call <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i64.v4f32(i64 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x float> %ray_dir, <3 x float> %ray_inv_dir, <4 x i32> %tdescr) 111 %r = bitcast <4 x i32> %v to <4 x float> 112 ret <4 x float> %r 113} 114 115define amdgpu_ps <4 x float> @image_bvh64_intersect_ray_a16(i64 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x half> %ray_dir, <3 x half> %ray_inv_dir, <4 x i32> inreg %tdescr) { 116; GFX10-LABEL: image_bvh64_intersect_ray_a16: 117; GFX10: ; %bb.0: 118; GFX10-NEXT: v_lshrrev_b32_e32 v10, 16, v6 119; GFX10-NEXT: v_and_b32_e32 v11, 0xffff, v8 120; GFX10-NEXT: v_and_b32_e32 v9, 0xffff, v9 121; GFX10-NEXT: v_lshlrev_b32_e32 v10, 16, v10 122; GFX10-NEXT: v_lshlrev_b32_e32 v11, 16, v11 123; GFX10-NEXT: v_alignbit_b32 v8, v9, v8, 16 124; GFX10-NEXT: v_and_or_b32 v6, v6, 0xffff, v10 125; GFX10-NEXT: v_and_or_b32 v7, v7, 0xffff, v11 126; GFX10-NEXT: image_bvh64_intersect_ray v[0:3], v[0:15], s[0:3] a16 127; GFX10-NEXT: s_waitcnt vmcnt(0) 128; GFX10-NEXT: ; return to shader part epilog 129; 130; GFX11-LABEL: image_bvh64_intersect_ray_a16: 131; GFX11: ; %bb.0: 132; GFX11-NEXT: v_lshrrev_b32_e32 v10, 16, v6 133; GFX11-NEXT: v_lshrrev_b32_e32 v11, 16, v8 134; GFX11-NEXT: v_lshlrev_b32_e32 v6, 16, v6 135; GFX11-NEXT: v_lshlrev_b32_e32 v12, 16, v7 136; GFX11-NEXT: v_lshlrev_b32_e32 v10, 16, v10 137; GFX11-NEXT: v_and_or_b32 v6, 0xffff, v8, v6 138; GFX11-NEXT: v_and_or_b32 v8, 0xffff, v9, v12 139; GFX11-NEXT: v_and_or_b32 v7, 0xffff, v11, v10 140; GFX11-NEXT: image_bvh64_intersect_ray v[0:3], v[0:15], s[0:3] a16 141; GFX11-NEXT: s_waitcnt vmcnt(0) 142; GFX11-NEXT: ; return to shader part epilog 143 %v = call <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i64.v4f16(i64 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x half> %ray_dir, <3 x half> %ray_inv_dir, <4 x i32> %tdescr) 144 %r = bitcast <4 x i32> %v to <4 x float> 145 ret <4 x float> %r 146} 147 148define amdgpu_ps <4 x float> @image_bvh_intersect_ray_vgpr_descr(i32 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x float> %ray_dir, <3 x float> %ray_inv_dir, <4 x i32> %tdescr) { 149; GFX1030-LABEL: image_bvh_intersect_ray_vgpr_descr: 150; GFX1030: ; %bb.0: 151; GFX1030-NEXT: v_mov_b32_e32 v15, v0 152; GFX1030-NEXT: v_mov_b32_e32 v16, v1 153; GFX1030-NEXT: v_mov_b32_e32 v17, v2 154; GFX1030-NEXT: v_mov_b32_e32 v18, v3 155; GFX1030-NEXT: v_mov_b32_e32 v19, v4 156; GFX1030-NEXT: v_mov_b32_e32 v20, v5 157; GFX1030-NEXT: v_mov_b32_e32 v21, v6 158; GFX1030-NEXT: v_mov_b32_e32 v22, v7 159; GFX1030-NEXT: v_mov_b32_e32 v23, v8 160; GFX1030-NEXT: v_mov_b32_e32 v24, v9 161; GFX1030-NEXT: v_mov_b32_e32 v25, v10 162; GFX1030-NEXT: s_mov_b32 s1, exec_lo 163; GFX1030-NEXT: .LBB6_1: ; =>This Inner Loop Header: Depth=1 164; GFX1030-NEXT: v_readfirstlane_b32 s4, v11 165; GFX1030-NEXT: v_readfirstlane_b32 s5, v12 166; GFX1030-NEXT: v_readfirstlane_b32 s6, v13 167; GFX1030-NEXT: v_readfirstlane_b32 s7, v14 168; GFX1030-NEXT: v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[11:12] 169; GFX1030-NEXT: v_cmp_eq_u64_e64 s0, s[6:7], v[13:14] 170; GFX1030-NEXT: s_and_b32 s0, vcc_lo, s0 171; GFX1030-NEXT: s_and_saveexec_b32 s0, s0 172; GFX1030-NEXT: image_bvh_intersect_ray v[0:3], v[15:30], s[4:7] 173; GFX1030-NEXT: ; implicit-def: $vgpr11 174; GFX1030-NEXT: ; implicit-def: $vgpr15 175; GFX1030-NEXT: ; implicit-def: $vgpr16 176; GFX1030-NEXT: ; implicit-def: $vgpr17 177; GFX1030-NEXT: ; implicit-def: $vgpr18 178; GFX1030-NEXT: ; implicit-def: $vgpr19 179; GFX1030-NEXT: ; implicit-def: $vgpr20 180; GFX1030-NEXT: ; implicit-def: $vgpr21 181; GFX1030-NEXT: ; implicit-def: $vgpr22 182; GFX1030-NEXT: ; implicit-def: $vgpr23 183; GFX1030-NEXT: ; implicit-def: $vgpr24 184; GFX1030-NEXT: ; implicit-def: $vgpr25 185; GFX1030-NEXT: ; implicit-def: $vgpr11_vgpr12_vgpr13_vgpr14 186; GFX1030-NEXT: s_xor_b32 exec_lo, exec_lo, s0 187; GFX1030-NEXT: s_cbranch_execnz .LBB6_1 188; GFX1030-NEXT: ; %bb.2: 189; GFX1030-NEXT: s_mov_b32 exec_lo, s1 190; GFX1030-NEXT: s_waitcnt vmcnt(0) 191; GFX1030-NEXT: ; return to shader part epilog 192; 193; GFX1013-LABEL: image_bvh_intersect_ray_vgpr_descr: 194; GFX1013: ; %bb.0: 195; GFX1013-NEXT: v_mov_b32_e32 v16, v11 196; GFX1013-NEXT: v_mov_b32_e32 v17, v12 197; GFX1013-NEXT: v_mov_b32_e32 v18, v13 198; GFX1013-NEXT: v_mov_b32_e32 v19, v14 199; GFX1013-NEXT: s_mov_b32 s1, exec_lo 200; GFX1013-NEXT: .LBB6_1: ; =>This Inner Loop Header: Depth=1 201; GFX1013-NEXT: v_readfirstlane_b32 s4, v16 202; GFX1013-NEXT: v_readfirstlane_b32 s5, v17 203; GFX1013-NEXT: v_readfirstlane_b32 s6, v18 204; GFX1013-NEXT: v_readfirstlane_b32 s7, v19 205; GFX1013-NEXT: v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[16:17] 206; GFX1013-NEXT: v_cmp_eq_u64_e64 s0, s[6:7], v[18:19] 207; GFX1013-NEXT: s_and_b32 s0, vcc_lo, s0 208; GFX1013-NEXT: s_and_saveexec_b32 s0, s0 209; GFX1013-NEXT: image_bvh_intersect_ray v[20:23], v[0:15], s[4:7] 210; GFX1013-NEXT: ; implicit-def: $vgpr16 211; GFX1013-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 212; GFX1013-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18_vgpr19 213; GFX1013-NEXT: s_waitcnt_depctr 0xffe3 214; GFX1013-NEXT: s_xor_b32 exec_lo, exec_lo, s0 215; GFX1013-NEXT: s_cbranch_execnz .LBB6_1 216; GFX1013-NEXT: ; %bb.2: 217; GFX1013-NEXT: s_mov_b32 exec_lo, s1 218; GFX1013-NEXT: s_waitcnt vmcnt(0) 219; GFX1013-NEXT: v_mov_b32_e32 v0, v20 220; GFX1013-NEXT: v_mov_b32_e32 v1, v21 221; GFX1013-NEXT: v_mov_b32_e32 v2, v22 222; GFX1013-NEXT: v_mov_b32_e32 v3, v23 223; GFX1013-NEXT: ; return to shader part epilog 224; 225; GFX11-LABEL: image_bvh_intersect_ray_vgpr_descr: 226; GFX11: ; %bb.0: 227; GFX11-NEXT: v_mov_b32_e32 v18, v0 228; GFX11-NEXT: v_mov_b32_e32 v19, v1 229; GFX11-NEXT: v_mov_b32_e32 v15, v2 230; GFX11-NEXT: v_mov_b32_e32 v16, v3 231; GFX11-NEXT: v_mov_b32_e32 v17, v4 232; GFX11-NEXT: s_mov_b32 s1, exec_lo 233; GFX11-NEXT: .LBB6_1: ; =>This Inner Loop Header: Depth=1 234; GFX11-NEXT: v_readfirstlane_b32 s4, v11 235; GFX11-NEXT: v_readfirstlane_b32 s5, v12 236; GFX11-NEXT: v_readfirstlane_b32 s6, v13 237; GFX11-NEXT: v_readfirstlane_b32 s7, v14 238; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[11:12] 239; GFX11-NEXT: v_cmp_eq_u64_e64 s0, s[6:7], v[13:14] 240; GFX11-NEXT: s_and_b32 s0, vcc_lo, s0 241; GFX11-NEXT: s_and_saveexec_b32 s0, s0 242; GFX11-NEXT: image_bvh_intersect_ray v[0:3], [v18, v19, v[15:17], v[5:7], v[8:10]], s[4:7] 243; GFX11-NEXT: ; implicit-def: $vgpr11 244; GFX11-NEXT: ; implicit-def: $vgpr18 245; GFX11-NEXT: ; implicit-def: $vgpr19 246; GFX11-NEXT: ; implicit-def: $vgpr15_vgpr16_vgpr17 247; GFX11-NEXT: ; implicit-def: $vgpr5_vgpr6_vgpr7 248; GFX11-NEXT: ; implicit-def: $vgpr8_vgpr9_vgpr10 249; GFX11-NEXT: ; implicit-def: $vgpr11_vgpr12_vgpr13_vgpr14 250; GFX11-NEXT: s_xor_b32 exec_lo, exec_lo, s0 251; GFX11-NEXT: s_cbranch_execnz .LBB6_1 252; GFX11-NEXT: ; %bb.2: 253; GFX11-NEXT: s_mov_b32 exec_lo, s1 254; GFX11-NEXT: s_waitcnt vmcnt(0) 255; GFX11-NEXT: ; return to shader part epilog 256 %v = call <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i32.v4f32(i32 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x float> %ray_dir, <3 x float> %ray_inv_dir, <4 x i32> %tdescr) 257 %r = bitcast <4 x i32> %v to <4 x float> 258 ret <4 x float> %r 259} 260 261define amdgpu_ps <4 x float> @image_bvh_intersect_ray_a16_vgpr_descr(i32 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x half> %ray_dir, <3 x half> %ray_inv_dir, <4 x i32> %tdescr) { 262; GFX1030-LABEL: image_bvh_intersect_ray_a16_vgpr_descr: 263; GFX1030: ; %bb.0: 264; GFX1030-NEXT: v_mov_b32_e32 v13, v0 265; GFX1030-NEXT: v_mov_b32_e32 v14, v1 266; GFX1030-NEXT: v_lshrrev_b32_e32 v0, 16, v5 267; GFX1030-NEXT: v_and_b32_e32 v1, 0xffff, v7 268; GFX1030-NEXT: v_mov_b32_e32 v15, v2 269; GFX1030-NEXT: v_and_b32_e32 v2, 0xffff, v8 270; GFX1030-NEXT: v_mov_b32_e32 v16, v3 271; GFX1030-NEXT: v_lshlrev_b32_e32 v0, 16, v0 272; GFX1030-NEXT: v_lshlrev_b32_e32 v1, 16, v1 273; GFX1030-NEXT: v_mov_b32_e32 v17, v4 274; GFX1030-NEXT: v_alignbit_b32 v20, v2, v7, 16 275; GFX1030-NEXT: s_mov_b32 s1, exec_lo 276; GFX1030-NEXT: v_and_or_b32 v18, v5, 0xffff, v0 277; GFX1030-NEXT: v_and_or_b32 v19, v6, 0xffff, v1 278; GFX1030-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=1 279; GFX1030-NEXT: v_readfirstlane_b32 s4, v9 280; GFX1030-NEXT: v_readfirstlane_b32 s5, v10 281; GFX1030-NEXT: v_readfirstlane_b32 s6, v11 282; GFX1030-NEXT: v_readfirstlane_b32 s7, v12 283; GFX1030-NEXT: v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[9:10] 284; GFX1030-NEXT: v_cmp_eq_u64_e64 s0, s[6:7], v[11:12] 285; GFX1030-NEXT: s_and_b32 s0, vcc_lo, s0 286; GFX1030-NEXT: s_and_saveexec_b32 s0, s0 287; GFX1030-NEXT: image_bvh_intersect_ray v[0:3], v[13:20], s[4:7] a16 288; GFX1030-NEXT: ; implicit-def: $vgpr9 289; GFX1030-NEXT: ; implicit-def: $vgpr13 290; GFX1030-NEXT: ; implicit-def: $vgpr14 291; GFX1030-NEXT: ; implicit-def: $vgpr15 292; GFX1030-NEXT: ; implicit-def: $vgpr16 293; GFX1030-NEXT: ; implicit-def: $vgpr17 294; GFX1030-NEXT: ; implicit-def: $vgpr18 295; GFX1030-NEXT: ; implicit-def: $vgpr19 296; GFX1030-NEXT: ; implicit-def: $vgpr20 297; GFX1030-NEXT: ; implicit-def: $vgpr9_vgpr10_vgpr11_vgpr12 298; GFX1030-NEXT: s_xor_b32 exec_lo, exec_lo, s0 299; GFX1030-NEXT: s_cbranch_execnz .LBB7_1 300; GFX1030-NEXT: ; %bb.2: 301; GFX1030-NEXT: s_mov_b32 exec_lo, s1 302; GFX1030-NEXT: s_waitcnt vmcnt(0) 303; GFX1030-NEXT: ; return to shader part epilog 304; 305; GFX1013-LABEL: image_bvh_intersect_ray_a16_vgpr_descr: 306; GFX1013: ; %bb.0: 307; GFX1013-NEXT: v_lshrrev_b32_e32 v13, 16, v5 308; GFX1013-NEXT: v_and_b32_e32 v14, 0xffff, v7 309; GFX1013-NEXT: v_and_b32_e32 v8, 0xffff, v8 310; GFX1013-NEXT: s_mov_b32 s1, exec_lo 311; GFX1013-NEXT: v_lshlrev_b32_e32 v13, 16, v13 312; GFX1013-NEXT: v_lshlrev_b32_e32 v14, 16, v14 313; GFX1013-NEXT: v_alignbit_b32 v7, v8, v7, 16 314; GFX1013-NEXT: v_and_or_b32 v5, v5, 0xffff, v13 315; GFX1013-NEXT: v_and_or_b32 v6, v6, 0xffff, v14 316; GFX1013-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=1 317; GFX1013-NEXT: v_readfirstlane_b32 s4, v9 318; GFX1013-NEXT: v_readfirstlane_b32 s5, v10 319; GFX1013-NEXT: v_readfirstlane_b32 s6, v11 320; GFX1013-NEXT: v_readfirstlane_b32 s7, v12 321; GFX1013-NEXT: v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[9:10] 322; GFX1013-NEXT: v_cmp_eq_u64_e64 s0, s[6:7], v[11:12] 323; GFX1013-NEXT: s_and_b32 s0, vcc_lo, s0 324; GFX1013-NEXT: s_and_saveexec_b32 s0, s0 325; GFX1013-NEXT: image_bvh_intersect_ray v[13:16], v[0:7], s[4:7] a16 326; GFX1013-NEXT: ; implicit-def: $vgpr9 327; GFX1013-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 328; GFX1013-NEXT: ; implicit-def: $vgpr9_vgpr10_vgpr11_vgpr12 329; GFX1013-NEXT: s_waitcnt_depctr 0xffe3 330; GFX1013-NEXT: s_xor_b32 exec_lo, exec_lo, s0 331; GFX1013-NEXT: s_cbranch_execnz .LBB7_1 332; GFX1013-NEXT: ; %bb.2: 333; GFX1013-NEXT: s_mov_b32 exec_lo, s1 334; GFX1013-NEXT: s_waitcnt vmcnt(0) 335; GFX1013-NEXT: v_mov_b32_e32 v0, v13 336; GFX1013-NEXT: v_mov_b32_e32 v1, v14 337; GFX1013-NEXT: v_mov_b32_e32 v2, v15 338; GFX1013-NEXT: v_mov_b32_e32 v3, v16 339; GFX1013-NEXT: ; return to shader part epilog 340; 341; GFX11-LABEL: image_bvh_intersect_ray_a16_vgpr_descr: 342; GFX11: ; %bb.0: 343; GFX11-NEXT: v_mov_b32_e32 v13, v0 344; GFX11-NEXT: v_lshrrev_b32_e32 v0, 16, v5 345; GFX11-NEXT: v_mov_b32_e32 v14, v1 346; GFX11-NEXT: v_mov_b32_e32 v15, v2 347; GFX11-NEXT: v_mov_b32_e32 v16, v3 348; GFX11-NEXT: v_lshrrev_b32_e32 v1, 16, v7 349; GFX11-NEXT: v_lshlrev_b32_e32 v2, 16, v5 350; GFX11-NEXT: v_lshlrev_b32_e32 v0, 16, v0 351; GFX11-NEXT: v_lshlrev_b32_e32 v3, 16, v6 352; GFX11-NEXT: v_mov_b32_e32 v17, v4 353; GFX11-NEXT: s_mov_b32 s1, exec_lo 354; GFX11-NEXT: v_and_or_b32 v4, 0xffff, v7, v2 355; GFX11-NEXT: v_and_or_b32 v5, 0xffff, v1, v0 356; GFX11-NEXT: v_and_or_b32 v6, 0xffff, v8, v3 357; GFX11-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=1 358; GFX11-NEXT: v_readfirstlane_b32 s4, v9 359; GFX11-NEXT: v_readfirstlane_b32 s5, v10 360; GFX11-NEXT: v_readfirstlane_b32 s6, v11 361; GFX11-NEXT: v_readfirstlane_b32 s7, v12 362; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[9:10] 363; GFX11-NEXT: v_cmp_eq_u64_e64 s0, s[6:7], v[11:12] 364; GFX11-NEXT: s_and_b32 s0, vcc_lo, s0 365; GFX11-NEXT: s_and_saveexec_b32 s0, s0 366; GFX11-NEXT: image_bvh_intersect_ray v[0:3], [v13, v14, v[15:17], v[4:6]], s[4:7] a16 367; GFX11-NEXT: ; implicit-def: $vgpr9 368; GFX11-NEXT: ; implicit-def: $vgpr13 369; GFX11-NEXT: ; implicit-def: $vgpr14 370; GFX11-NEXT: ; implicit-def: $vgpr15_vgpr16_vgpr17 371; GFX11-NEXT: ; implicit-def: $vgpr4_vgpr5_vgpr6 372; GFX11-NEXT: ; implicit-def: $vgpr9_vgpr10_vgpr11_vgpr12 373; GFX11-NEXT: s_xor_b32 exec_lo, exec_lo, s0 374; GFX11-NEXT: s_cbranch_execnz .LBB7_1 375; GFX11-NEXT: ; %bb.2: 376; GFX11-NEXT: s_mov_b32 exec_lo, s1 377; GFX11-NEXT: s_waitcnt vmcnt(0) 378; GFX11-NEXT: ; return to shader part epilog 379 %v = call <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i32.v4f16(i32 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x half> %ray_dir, <3 x half> %ray_inv_dir, <4 x i32> %tdescr) 380 %r = bitcast <4 x i32> %v to <4 x float> 381 ret <4 x float> %r 382} 383 384define amdgpu_ps <4 x float> @image_bvh64_intersect_ray_vgpr_descr(i64 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x float> %ray_dir, <3 x float> %ray_inv_dir, <4 x i32> %tdescr) { 385; GFX1030-LABEL: image_bvh64_intersect_ray_vgpr_descr: 386; GFX1030: ; %bb.0: 387; GFX1030-NEXT: v_mov_b32_e32 v16, v0 388; GFX1030-NEXT: v_mov_b32_e32 v17, v1 389; GFX1030-NEXT: v_mov_b32_e32 v18, v2 390; GFX1030-NEXT: v_mov_b32_e32 v19, v3 391; GFX1030-NEXT: v_mov_b32_e32 v20, v4 392; GFX1030-NEXT: v_mov_b32_e32 v21, v5 393; GFX1030-NEXT: v_mov_b32_e32 v22, v6 394; GFX1030-NEXT: v_mov_b32_e32 v23, v7 395; GFX1030-NEXT: v_mov_b32_e32 v24, v8 396; GFX1030-NEXT: v_mov_b32_e32 v25, v9 397; GFX1030-NEXT: v_mov_b32_e32 v26, v10 398; GFX1030-NEXT: v_mov_b32_e32 v27, v11 399; GFX1030-NEXT: s_mov_b32 s1, exec_lo 400; GFX1030-NEXT: .LBB8_1: ; =>This Inner Loop Header: Depth=1 401; GFX1030-NEXT: v_readfirstlane_b32 s4, v12 402; GFX1030-NEXT: v_readfirstlane_b32 s5, v13 403; GFX1030-NEXT: v_readfirstlane_b32 s6, v14 404; GFX1030-NEXT: v_readfirstlane_b32 s7, v15 405; GFX1030-NEXT: v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[12:13] 406; GFX1030-NEXT: v_cmp_eq_u64_e64 s0, s[6:7], v[14:15] 407; GFX1030-NEXT: s_and_b32 s0, vcc_lo, s0 408; GFX1030-NEXT: s_and_saveexec_b32 s0, s0 409; GFX1030-NEXT: image_bvh64_intersect_ray v[0:3], v[16:31], s[4:7] 410; GFX1030-NEXT: ; implicit-def: $vgpr12 411; GFX1030-NEXT: ; implicit-def: $vgpr16 412; GFX1030-NEXT: ; implicit-def: $vgpr17 413; GFX1030-NEXT: ; implicit-def: $vgpr18 414; GFX1030-NEXT: ; implicit-def: $vgpr19 415; GFX1030-NEXT: ; implicit-def: $vgpr20 416; GFX1030-NEXT: ; implicit-def: $vgpr21 417; GFX1030-NEXT: ; implicit-def: $vgpr22 418; GFX1030-NEXT: ; implicit-def: $vgpr23 419; GFX1030-NEXT: ; implicit-def: $vgpr24 420; GFX1030-NEXT: ; implicit-def: $vgpr25 421; GFX1030-NEXT: ; implicit-def: $vgpr26 422; GFX1030-NEXT: ; implicit-def: $vgpr27 423; GFX1030-NEXT: ; implicit-def: $vgpr12_vgpr13_vgpr14_vgpr15 424; GFX1030-NEXT: s_xor_b32 exec_lo, exec_lo, s0 425; GFX1030-NEXT: s_cbranch_execnz .LBB8_1 426; GFX1030-NEXT: ; %bb.2: 427; GFX1030-NEXT: s_mov_b32 exec_lo, s1 428; GFX1030-NEXT: s_waitcnt vmcnt(0) 429; GFX1030-NEXT: ; return to shader part epilog 430; 431; GFX1013-LABEL: image_bvh64_intersect_ray_vgpr_descr: 432; GFX1013: ; %bb.0: 433; GFX1013-NEXT: v_mov_b32_e32 v16, v12 434; GFX1013-NEXT: v_mov_b32_e32 v17, v13 435; GFX1013-NEXT: v_mov_b32_e32 v18, v14 436; GFX1013-NEXT: v_mov_b32_e32 v19, v15 437; GFX1013-NEXT: s_mov_b32 s1, exec_lo 438; GFX1013-NEXT: .LBB8_1: ; =>This Inner Loop Header: Depth=1 439; GFX1013-NEXT: v_readfirstlane_b32 s4, v16 440; GFX1013-NEXT: v_readfirstlane_b32 s5, v17 441; GFX1013-NEXT: v_readfirstlane_b32 s6, v18 442; GFX1013-NEXT: v_readfirstlane_b32 s7, v19 443; GFX1013-NEXT: v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[16:17] 444; GFX1013-NEXT: v_cmp_eq_u64_e64 s0, s[6:7], v[18:19] 445; GFX1013-NEXT: s_and_b32 s0, vcc_lo, s0 446; GFX1013-NEXT: s_and_saveexec_b32 s0, s0 447; GFX1013-NEXT: image_bvh64_intersect_ray v[20:23], v[0:15], s[4:7] 448; GFX1013-NEXT: ; implicit-def: $vgpr16 449; GFX1013-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 450; GFX1013-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18_vgpr19 451; GFX1013-NEXT: s_waitcnt_depctr 0xffe3 452; GFX1013-NEXT: s_xor_b32 exec_lo, exec_lo, s0 453; GFX1013-NEXT: s_cbranch_execnz .LBB8_1 454; GFX1013-NEXT: ; %bb.2: 455; GFX1013-NEXT: s_mov_b32 exec_lo, s1 456; GFX1013-NEXT: s_waitcnt vmcnt(0) 457; GFX1013-NEXT: v_mov_b32_e32 v0, v20 458; GFX1013-NEXT: v_mov_b32_e32 v1, v21 459; GFX1013-NEXT: v_mov_b32_e32 v2, v22 460; GFX1013-NEXT: v_mov_b32_e32 v3, v23 461; GFX1013-NEXT: ; return to shader part epilog 462; 463; GFX11-LABEL: image_bvh64_intersect_ray_vgpr_descr: 464; GFX11: ; %bb.0: 465; GFX11-NEXT: v_mov_b32_e32 v19, v0 466; GFX11-NEXT: v_mov_b32_e32 v20, v1 467; GFX11-NEXT: v_mov_b32_e32 v21, v2 468; GFX11-NEXT: v_mov_b32_e32 v16, v3 469; GFX11-NEXT: v_mov_b32_e32 v17, v4 470; GFX11-NEXT: v_mov_b32_e32 v18, v5 471; GFX11-NEXT: s_mov_b32 s1, exec_lo 472; GFX11-NEXT: .LBB8_1: ; =>This Inner Loop Header: Depth=1 473; GFX11-NEXT: v_readfirstlane_b32 s4, v12 474; GFX11-NEXT: v_readfirstlane_b32 s5, v13 475; GFX11-NEXT: v_readfirstlane_b32 s6, v14 476; GFX11-NEXT: v_readfirstlane_b32 s7, v15 477; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[12:13] 478; GFX11-NEXT: v_cmp_eq_u64_e64 s0, s[6:7], v[14:15] 479; GFX11-NEXT: s_and_b32 s0, vcc_lo, s0 480; GFX11-NEXT: s_and_saveexec_b32 s0, s0 481; GFX11-NEXT: image_bvh64_intersect_ray v[0:3], [v[19:20], v21, v[16:18], v[6:8], v[9:11]], s[4:7] 482; GFX11-NEXT: ; implicit-def: $vgpr12 483; GFX11-NEXT: ; implicit-def: $vgpr19_vgpr20 484; GFX11-NEXT: ; implicit-def: $vgpr21 485; GFX11-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18 486; GFX11-NEXT: ; implicit-def: $vgpr6_vgpr7_vgpr8 487; GFX11-NEXT: ; implicit-def: $vgpr9_vgpr10_vgpr11 488; GFX11-NEXT: ; implicit-def: $vgpr12_vgpr13_vgpr14_vgpr15 489; GFX11-NEXT: s_xor_b32 exec_lo, exec_lo, s0 490; GFX11-NEXT: s_cbranch_execnz .LBB8_1 491; GFX11-NEXT: ; %bb.2: 492; GFX11-NEXT: s_mov_b32 exec_lo, s1 493; GFX11-NEXT: s_waitcnt vmcnt(0) 494; GFX11-NEXT: ; return to shader part epilog 495 %v = call <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i64.v4f32(i64 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x float> %ray_dir, <3 x float> %ray_inv_dir, <4 x i32> %tdescr) 496 %r = bitcast <4 x i32> %v to <4 x float> 497 ret <4 x float> %r 498} 499 500define amdgpu_ps <4 x float> @image_bvh64_intersect_ray_a16_vgpr_descr(i64 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x half> %ray_dir, <3 x half> %ray_inv_dir, <4 x i32> %tdescr) { 501; GFX1030-LABEL: image_bvh64_intersect_ray_a16_vgpr_descr: 502; GFX1030: ; %bb.0: 503; GFX1030-NEXT: v_mov_b32_e32 v14, v0 504; GFX1030-NEXT: v_mov_b32_e32 v15, v1 505; GFX1030-NEXT: v_lshrrev_b32_e32 v0, 16, v6 506; GFX1030-NEXT: v_and_b32_e32 v1, 0xffff, v8 507; GFX1030-NEXT: v_mov_b32_e32 v16, v2 508; GFX1030-NEXT: v_and_b32_e32 v2, 0xffff, v9 509; GFX1030-NEXT: v_mov_b32_e32 v17, v3 510; GFX1030-NEXT: v_lshlrev_b32_e32 v0, 16, v0 511; GFX1030-NEXT: v_lshlrev_b32_e32 v1, 16, v1 512; GFX1030-NEXT: v_mov_b32_e32 v18, v4 513; GFX1030-NEXT: v_mov_b32_e32 v19, v5 514; GFX1030-NEXT: v_alignbit_b32 v22, v2, v8, 16 515; GFX1030-NEXT: v_and_or_b32 v20, v6, 0xffff, v0 516; GFX1030-NEXT: v_and_or_b32 v21, v7, 0xffff, v1 517; GFX1030-NEXT: s_mov_b32 s1, exec_lo 518; GFX1030-NEXT: .LBB9_1: ; =>This Inner Loop Header: Depth=1 519; GFX1030-NEXT: v_readfirstlane_b32 s4, v10 520; GFX1030-NEXT: v_readfirstlane_b32 s5, v11 521; GFX1030-NEXT: v_readfirstlane_b32 s6, v12 522; GFX1030-NEXT: v_readfirstlane_b32 s7, v13 523; GFX1030-NEXT: v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[10:11] 524; GFX1030-NEXT: v_cmp_eq_u64_e64 s0, s[6:7], v[12:13] 525; GFX1030-NEXT: s_and_b32 s0, vcc_lo, s0 526; GFX1030-NEXT: s_and_saveexec_b32 s0, s0 527; GFX1030-NEXT: image_bvh64_intersect_ray v[0:3], v[14:29], s[4:7] a16 528; GFX1030-NEXT: ; implicit-def: $vgpr10 529; GFX1030-NEXT: ; implicit-def: $vgpr14 530; GFX1030-NEXT: ; implicit-def: $vgpr15 531; GFX1030-NEXT: ; implicit-def: $vgpr16 532; GFX1030-NEXT: ; implicit-def: $vgpr17 533; GFX1030-NEXT: ; implicit-def: $vgpr18 534; GFX1030-NEXT: ; implicit-def: $vgpr19 535; GFX1030-NEXT: ; implicit-def: $vgpr20 536; GFX1030-NEXT: ; implicit-def: $vgpr21 537; GFX1030-NEXT: ; implicit-def: $vgpr22 538; GFX1030-NEXT: ; implicit-def: $vgpr10_vgpr11_vgpr12_vgpr13 539; GFX1030-NEXT: s_xor_b32 exec_lo, exec_lo, s0 540; GFX1030-NEXT: s_cbranch_execnz .LBB9_1 541; GFX1030-NEXT: ; %bb.2: 542; GFX1030-NEXT: s_mov_b32 exec_lo, s1 543; GFX1030-NEXT: s_waitcnt vmcnt(0) 544; GFX1030-NEXT: ; return to shader part epilog 545; 546; GFX1013-LABEL: image_bvh64_intersect_ray_a16_vgpr_descr: 547; GFX1013: ; %bb.0: 548; GFX1013-NEXT: v_mov_b32_e32 v16, v10 549; GFX1013-NEXT: v_mov_b32_e32 v17, v11 550; GFX1013-NEXT: v_lshrrev_b32_e32 v10, 16, v6 551; GFX1013-NEXT: v_and_b32_e32 v11, 0xffff, v8 552; GFX1013-NEXT: v_and_b32_e32 v9, 0xffff, v9 553; GFX1013-NEXT: v_mov_b32_e32 v18, v12 554; GFX1013-NEXT: v_mov_b32_e32 v19, v13 555; GFX1013-NEXT: v_lshlrev_b32_e32 v10, 16, v10 556; GFX1013-NEXT: v_lshlrev_b32_e32 v11, 16, v11 557; GFX1013-NEXT: v_alignbit_b32 v8, v9, v8, 16 558; GFX1013-NEXT: s_mov_b32 s1, exec_lo 559; GFX1013-NEXT: v_and_or_b32 v6, v6, 0xffff, v10 560; GFX1013-NEXT: v_and_or_b32 v7, v7, 0xffff, v11 561; GFX1013-NEXT: .LBB9_1: ; =>This Inner Loop Header: Depth=1 562; GFX1013-NEXT: v_readfirstlane_b32 s4, v16 563; GFX1013-NEXT: v_readfirstlane_b32 s5, v17 564; GFX1013-NEXT: v_readfirstlane_b32 s6, v18 565; GFX1013-NEXT: v_readfirstlane_b32 s7, v19 566; GFX1013-NEXT: v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[16:17] 567; GFX1013-NEXT: v_cmp_eq_u64_e64 s0, s[6:7], v[18:19] 568; GFX1013-NEXT: s_and_b32 s0, vcc_lo, s0 569; GFX1013-NEXT: s_and_saveexec_b32 s0, s0 570; GFX1013-NEXT: image_bvh64_intersect_ray v[20:23], v[0:15], s[4:7] a16 571; GFX1013-NEXT: ; implicit-def: $vgpr16 572; GFX1013-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 573; GFX1013-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18_vgpr19 574; GFX1013-NEXT: s_waitcnt_depctr 0xffe3 575; GFX1013-NEXT: s_xor_b32 exec_lo, exec_lo, s0 576; GFX1013-NEXT: s_cbranch_execnz .LBB9_1 577; GFX1013-NEXT: ; %bb.2: 578; GFX1013-NEXT: s_mov_b32 exec_lo, s1 579; GFX1013-NEXT: s_waitcnt vmcnt(0) 580; GFX1013-NEXT: v_mov_b32_e32 v0, v20 581; GFX1013-NEXT: v_mov_b32_e32 v1, v21 582; GFX1013-NEXT: v_mov_b32_e32 v2, v22 583; GFX1013-NEXT: v_mov_b32_e32 v3, v23 584; GFX1013-NEXT: ; return to shader part epilog 585; 586; GFX11-LABEL: image_bvh64_intersect_ray_a16_vgpr_descr: 587; GFX11: ; %bb.0: 588; GFX11-NEXT: v_mov_b32_e32 v14, v0 589; GFX11-NEXT: v_lshrrev_b32_e32 v0, 16, v6 590; GFX11-NEXT: v_mov_b32_e32 v15, v1 591; GFX11-NEXT: v_mov_b32_e32 v16, v2 592; GFX11-NEXT: v_mov_b32_e32 v17, v3 593; GFX11-NEXT: v_lshrrev_b32_e32 v1, 16, v8 594; GFX11-NEXT: v_lshlrev_b32_e32 v2, 16, v6 595; GFX11-NEXT: v_lshlrev_b32_e32 v0, 16, v0 596; GFX11-NEXT: v_lshlrev_b32_e32 v3, 16, v7 597; GFX11-NEXT: v_mov_b32_e32 v18, v4 598; GFX11-NEXT: v_mov_b32_e32 v19, v5 599; GFX11-NEXT: v_and_or_b32 v4, 0xffff, v8, v2 600; GFX11-NEXT: v_and_or_b32 v5, 0xffff, v1, v0 601; GFX11-NEXT: v_and_or_b32 v6, 0xffff, v9, v3 602; GFX11-NEXT: s_mov_b32 s1, exec_lo 603; GFX11-NEXT: .LBB9_1: ; =>This Inner Loop Header: Depth=1 604; GFX11-NEXT: v_readfirstlane_b32 s4, v10 605; GFX11-NEXT: v_readfirstlane_b32 s5, v11 606; GFX11-NEXT: v_readfirstlane_b32 s6, v12 607; GFX11-NEXT: v_readfirstlane_b32 s7, v13 608; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[10:11] 609; GFX11-NEXT: v_cmp_eq_u64_e64 s0, s[6:7], v[12:13] 610; GFX11-NEXT: s_and_b32 s0, vcc_lo, s0 611; GFX11-NEXT: s_and_saveexec_b32 s0, s0 612; GFX11-NEXT: image_bvh64_intersect_ray v[0:3], [v[14:15], v16, v[17:19], v[4:6]], s[4:7] a16 613; GFX11-NEXT: ; implicit-def: $vgpr10 614; GFX11-NEXT: ; implicit-def: $vgpr14_vgpr15 615; GFX11-NEXT: ; implicit-def: $vgpr16 616; GFX11-NEXT: ; implicit-def: $vgpr17_vgpr18_vgpr19 617; GFX11-NEXT: ; implicit-def: $vgpr4_vgpr5_vgpr6 618; GFX11-NEXT: ; implicit-def: $vgpr10_vgpr11_vgpr12_vgpr13 619; GFX11-NEXT: s_xor_b32 exec_lo, exec_lo, s0 620; GFX11-NEXT: s_cbranch_execnz .LBB9_1 621; GFX11-NEXT: ; %bb.2: 622; GFX11-NEXT: s_mov_b32 exec_lo, s1 623; GFX11-NEXT: s_waitcnt vmcnt(0) 624; GFX11-NEXT: ; return to shader part epilog 625 %v = call <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i64.v4f16(i64 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x half> %ray_dir, <3 x half> %ray_inv_dir, <4 x i32> %tdescr) 626 %r = bitcast <4 x i32> %v to <4 x float> 627 ret <4 x float> %r 628} 629 630define amdgpu_kernel void @image_bvh_intersect_ray_nsa_reassign(i32* %p_node_ptr, float* %p_ray, <4 x i32> inreg %tdescr) { 631; GFX1030-LABEL: image_bvh_intersect_ray_nsa_reassign: 632; GFX1030: ; %bb.0: 633; GFX1030-NEXT: s_clause 0x1 634; GFX1030-NEXT: s_load_dwordx4 s[4:7], s[0:1], 0x24 635; GFX1030-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x34 636; GFX1030-NEXT: v_lshlrev_b32_e32 v4, 2, v0 637; GFX1030-NEXT: v_mov_b32_e32 v5, 0x40400000 638; GFX1030-NEXT: v_mov_b32_e32 v6, 4.0 639; GFX1030-NEXT: v_mov_b32_e32 v7, 0x40a00000 640; GFX1030-NEXT: v_mov_b32_e32 v8, 0x40c00000 641; GFX1030-NEXT: v_mov_b32_e32 v9, 0x40e00000 642; GFX1030-NEXT: v_mov_b32_e32 v10, 0x41000000 643; GFX1030-NEXT: s_waitcnt lgkmcnt(0) 644; GFX1030-NEXT: v_mov_b32_e32 v0, s4 645; GFX1030-NEXT: v_mov_b32_e32 v1, s5 646; GFX1030-NEXT: v_mov_b32_e32 v2, s6 647; GFX1030-NEXT: v_mov_b32_e32 v3, s7 648; GFX1030-NEXT: v_add_co_u32 v0, vcc_lo, v0, v4 649; GFX1030-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo 650; GFX1030-NEXT: v_add_co_u32 v2, vcc_lo, v2, v4 651; GFX1030-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo 652; GFX1030-NEXT: v_mov_b32_e32 v4, 2.0 653; GFX1030-NEXT: flat_load_dword v0, v[0:1] 654; GFX1030-NEXT: flat_load_dword v1, v[2:3] 655; GFX1030-NEXT: v_mov_b32_e32 v2, 0 656; GFX1030-NEXT: v_mov_b32_e32 v3, 1.0 657; GFX1030-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) 658; GFX1030-NEXT: image_bvh_intersect_ray v[0:3], v[0:15], s[0:3] 659; GFX1030-NEXT: s_waitcnt vmcnt(0) 660; GFX1030-NEXT: flat_store_dwordx4 v[0:1], v[0:3] 661; GFX1030-NEXT: s_endpgm 662; 663; GFX1013-LABEL: image_bvh_intersect_ray_nsa_reassign: 664; GFX1013: ; %bb.0: 665; GFX1013-NEXT: s_clause 0x1 666; GFX1013-NEXT: s_load_dwordx4 s[4:7], s[0:1], 0x24 667; GFX1013-NEXT: s_load_dwordx4 s[8:11], s[0:1], 0x34 668; GFX1013-NEXT: v_lshlrev_b32_e32 v6, 2, v0 669; GFX1013-NEXT: v_mov_b32_e32 v7, 0x40a00000 670; GFX1013-NEXT: v_mov_b32_e32 v8, 0x40c00000 671; GFX1013-NEXT: v_mov_b32_e32 v9, 0x40e00000 672; GFX1013-NEXT: v_mov_b32_e32 v10, 0x41000000 673; GFX1013-NEXT: s_waitcnt lgkmcnt(0) 674; GFX1013-NEXT: v_mov_b32_e32 v0, s4 675; GFX1013-NEXT: v_mov_b32_e32 v1, s5 676; GFX1013-NEXT: v_mov_b32_e32 v2, s6 677; GFX1013-NEXT: v_mov_b32_e32 v3, s7 678; GFX1013-NEXT: v_add_co_u32 v4, vcc_lo, v0, v6 679; GFX1013-NEXT: v_add_co_ci_u32_e32 v5, vcc_lo, 0, v1, vcc_lo 680; GFX1013-NEXT: v_add_co_u32 v2, vcc_lo, v2, v6 681; GFX1013-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo 682; GFX1013-NEXT: v_mov_b32_e32 v6, 4.0 683; GFX1013-NEXT: flat_load_dword v0, v[4:5] 684; GFX1013-NEXT: flat_load_dword v1, v[2:3] 685; GFX1013-NEXT: v_mov_b32_e32 v2, 0 686; GFX1013-NEXT: v_mov_b32_e32 v3, 1.0 687; GFX1013-NEXT: v_mov_b32_e32 v4, 2.0 688; GFX1013-NEXT: v_mov_b32_e32 v5, 0x40400000 689; GFX1013-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) 690; GFX1013-NEXT: image_bvh_intersect_ray v[0:3], v[0:15], s[8:11] 691; GFX1013-NEXT: s_waitcnt vmcnt(0) 692; GFX1013-NEXT: flat_store_dwordx4 v[0:1], v[0:3] 693; GFX1013-NEXT: s_endpgm 694; 695; GFX11-LABEL: image_bvh_intersect_ray_nsa_reassign: 696; GFX11: ; %bb.0: 697; GFX11-NEXT: s_clause 0x1 698; GFX11-NEXT: s_load_b128 s[4:7], s[0:1], 0x24 699; GFX11-NEXT: s_load_b128 s[0:3], s[0:1], 0x34 700; GFX11-NEXT: v_lshlrev_b32_e32 v4, 2, v0 701; GFX11-NEXT: s_mov_b32 s9, 0x40400000 702; GFX11-NEXT: s_mov_b32 s12, 0x40c00000 703; GFX11-NEXT: s_mov_b32 s8, 2.0 704; GFX11-NEXT: s_mov_b32 s11, 0x40a00000 705; GFX11-NEXT: s_mov_b32 s10, 4.0 706; GFX11-NEXT: s_mov_b32 s14, 0x41000000 707; GFX11-NEXT: s_mov_b32 s13, 0x40e00000 708; GFX11-NEXT: v_mov_b32_e32 v6, s12 709; GFX11-NEXT: v_mov_b32_e32 v7, s13 710; GFX11-NEXT: v_mov_b32_e32 v8, s14 711; GFX11-NEXT: s_waitcnt lgkmcnt(0) 712; GFX11-NEXT: v_mov_b32_e32 v0, s4 713; GFX11-NEXT: v_mov_b32_e32 v1, s5 714; GFX11-NEXT: v_mov_b32_e32 v2, s6 715; GFX11-NEXT: v_mov_b32_e32 v3, s7 716; GFX11-NEXT: s_mov_b32 s6, 0 717; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v0, v4 718; GFX11-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo 719; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v2, v4 720; GFX11-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo 721; GFX11-NEXT: s_mov_b32 s7, 1.0 722; GFX11-NEXT: flat_load_b32 v9, v[0:1] 723; GFX11-NEXT: flat_load_b32 v10, v[2:3] 724; GFX11-NEXT: v_mov_b32_e32 v0, s6 725; GFX11-NEXT: v_mov_b32_e32 v3, s9 726; GFX11-NEXT: v_mov_b32_e32 v1, s7 727; GFX11-NEXT: v_mov_b32_e32 v2, s8 728; GFX11-NEXT: v_mov_b32_e32 v4, s10 729; GFX11-NEXT: v_mov_b32_e32 v5, s11 730; GFX11-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) 731; GFX11-NEXT: image_bvh_intersect_ray v[0:3], [v9, v10, v[0:2], v[3:5], v[6:8]], s[0:3] 732; GFX11-NEXT: s_waitcnt vmcnt(0) 733; GFX11-NEXT: flat_store_b128 v[0:1], v[0:3] 734; GFX11-NEXT: s_endpgm 735 %lid = tail call i32 @llvm.amdgcn.workitem.id.x() 736 %gep_node_ptr = getelementptr inbounds i32, i32* %p_node_ptr, i32 %lid 737 %node_ptr = load i32, i32* %gep_node_ptr, align 4 738 %gep_ray = getelementptr inbounds float, float* %p_ray, i32 %lid 739 %ray_extent = load float, float* %gep_ray, align 4 740 %ray_origin0 = insertelement <3 x float> undef, float 0.0, i32 0 741 %ray_origin1 = insertelement <3 x float> %ray_origin0, float 1.0, i32 1 742 %ray_origin = insertelement <3 x float> %ray_origin1, float 2.0, i32 2 743 %ray_dir0 = insertelement <3 x float> undef, float 3.0, i32 0 744 %ray_dir1 = insertelement <3 x float> %ray_dir0, float 4.0, i32 1 745 %ray_dir = insertelement <3 x float> %ray_dir1, float 5.0, i32 2 746 %ray_inv_dir0 = insertelement <3 x float> undef, float 6.0, i32 0 747 %ray_inv_dir1 = insertelement <3 x float> %ray_inv_dir0, float 7.0, i32 1 748 %ray_inv_dir = insertelement <3 x float> %ray_inv_dir1, float 8.0, i32 2 749 %v = call <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i32.v4f32(i32 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x float> %ray_dir, <3 x float> %ray_inv_dir, <4 x i32> %tdescr) 750 store <4 x i32> %v, <4 x i32>* undef 751 ret void 752} 753 754define amdgpu_kernel void @image_bvh_intersect_ray_a16_nsa_reassign(i32* %p_node_ptr, float* %p_ray, <4 x i32> inreg %tdescr) { 755; GFX1030-LABEL: image_bvh_intersect_ray_a16_nsa_reassign: 756; GFX1030: ; %bb.0: 757; GFX1030-NEXT: s_clause 0x1 758; GFX1030-NEXT: s_load_dwordx4 s[4:7], s[0:1], 0x24 759; GFX1030-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x34 760; GFX1030-NEXT: v_lshlrev_b32_e32 v4, 2, v0 761; GFX1030-NEXT: s_movk_i32 s9, 0x4600 762; GFX1030-NEXT: s_movk_i32 s8, 0x4700 763; GFX1030-NEXT: s_bfe_u32 s8, s8, 0x100000 764; GFX1030-NEXT: s_waitcnt lgkmcnt(0) 765; GFX1030-NEXT: v_mov_b32_e32 v0, s4 766; GFX1030-NEXT: v_mov_b32_e32 v1, s5 767; GFX1030-NEXT: v_mov_b32_e32 v2, s6 768; GFX1030-NEXT: v_mov_b32_e32 v3, s7 769; GFX1030-NEXT: s_movk_i32 s5, 0x4400 770; GFX1030-NEXT: v_add_co_u32 v0, vcc_lo, v0, v4 771; GFX1030-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo 772; GFX1030-NEXT: v_add_co_u32 v2, vcc_lo, v2, v4 773; GFX1030-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo 774; GFX1030-NEXT: s_movk_i32 s6, 0x4200 775; GFX1030-NEXT: flat_load_dword v0, v[0:1] 776; GFX1030-NEXT: flat_load_dword v1, v[2:3] 777; GFX1030-NEXT: s_bfe_u32 s5, s5, 0x100000 778; GFX1030-NEXT: s_movk_i32 s7, 0x4800 779; GFX1030-NEXT: s_bfe_u32 s6, s6, 0x100000 780; GFX1030-NEXT: s_lshl_b32 s5, s5, 16 781; GFX1030-NEXT: s_movk_i32 s4, 0x4500 782; GFX1030-NEXT: s_or_b32 s5, s6, s5 783; GFX1030-NEXT: s_bfe_u32 s6, s9, 0x100000 784; GFX1030-NEXT: s_bfe_u32 s7, s7, 0x100000 785; GFX1030-NEXT: s_bfe_u32 s4, s4, 0x100000 786; GFX1030-NEXT: s_lshl_b32 s6, s6, 16 787; GFX1030-NEXT: s_lshl_b32 s7, s7, 16 788; GFX1030-NEXT: s_or_b32 s4, s4, s6 789; GFX1030-NEXT: s_or_b32 s6, s8, s7 790; GFX1030-NEXT: v_mov_b32_e32 v2, 0 791; GFX1030-NEXT: v_mov_b32_e32 v3, 1.0 792; GFX1030-NEXT: v_mov_b32_e32 v4, 2.0 793; GFX1030-NEXT: v_mov_b32_e32 v5, s5 794; GFX1030-NEXT: v_mov_b32_e32 v6, s4 795; GFX1030-NEXT: v_mov_b32_e32 v7, s6 796; GFX1030-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) 797; GFX1030-NEXT: image_bvh_intersect_ray v[0:3], v[0:7], s[0:3] a16 798; GFX1030-NEXT: s_waitcnt vmcnt(0) 799; GFX1030-NEXT: flat_store_dwordx4 v[0:1], v[0:3] 800; GFX1030-NEXT: s_endpgm 801; 802; GFX1013-LABEL: image_bvh_intersect_ray_a16_nsa_reassign: 803; GFX1013: ; %bb.0: 804; GFX1013-NEXT: s_clause 0x1 805; GFX1013-NEXT: s_load_dwordx4 s[4:7], s[0:1], 0x24 806; GFX1013-NEXT: s_load_dwordx4 s[8:11], s[0:1], 0x34 807; GFX1013-NEXT: v_lshlrev_b32_e32 v6, 2, v0 808; GFX1013-NEXT: s_movk_i32 s1, 0x4400 809; GFX1013-NEXT: s_movk_i32 s2, 0x4200 810; GFX1013-NEXT: s_bfe_u32 s1, s1, 0x100000 811; GFX1013-NEXT: s_movk_i32 s3, 0x4800 812; GFX1013-NEXT: s_bfe_u32 s2, s2, 0x100000 813; GFX1013-NEXT: s_lshl_b32 s1, s1, 16 814; GFX1013-NEXT: s_movk_i32 s0, 0x4500 815; GFX1013-NEXT: s_or_b32 s1, s2, s1 816; GFX1013-NEXT: s_bfe_u32 s3, s3, 0x100000 817; GFX1013-NEXT: s_bfe_u32 s0, s0, 0x100000 818; GFX1013-NEXT: s_lshl_b32 s3, s3, 16 819; GFX1013-NEXT: s_waitcnt lgkmcnt(0) 820; GFX1013-NEXT: v_mov_b32_e32 v0, s4 821; GFX1013-NEXT: v_mov_b32_e32 v1, s5 822; GFX1013-NEXT: v_mov_b32_e32 v2, s6 823; GFX1013-NEXT: v_mov_b32_e32 v3, s7 824; GFX1013-NEXT: s_movk_i32 s5, 0x4600 825; GFX1013-NEXT: v_add_co_u32 v4, vcc_lo, v0, v6 826; GFX1013-NEXT: v_add_co_ci_u32_e32 v5, vcc_lo, 0, v1, vcc_lo 827; GFX1013-NEXT: v_add_co_u32 v2, vcc_lo, v2, v6 828; GFX1013-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo 829; GFX1013-NEXT: s_movk_i32 s4, 0x4700 830; GFX1013-NEXT: flat_load_dword v0, v[4:5] 831; GFX1013-NEXT: flat_load_dword v1, v[2:3] 832; GFX1013-NEXT: s_bfe_u32 s2, s5, 0x100000 833; GFX1013-NEXT: s_bfe_u32 s4, s4, 0x100000 834; GFX1013-NEXT: s_lshl_b32 s2, s2, 16 835; GFX1013-NEXT: v_mov_b32_e32 v2, 0 836; GFX1013-NEXT: s_or_b32 s0, s0, s2 837; GFX1013-NEXT: s_or_b32 s2, s4, s3 838; GFX1013-NEXT: v_mov_b32_e32 v3, 1.0 839; GFX1013-NEXT: v_mov_b32_e32 v4, 2.0 840; GFX1013-NEXT: v_mov_b32_e32 v5, s1 841; GFX1013-NEXT: v_mov_b32_e32 v6, s0 842; GFX1013-NEXT: v_mov_b32_e32 v7, s2 843; GFX1013-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) 844; GFX1013-NEXT: image_bvh_intersect_ray v[0:3], v[0:7], s[8:11] a16 845; GFX1013-NEXT: s_waitcnt vmcnt(0) 846; GFX1013-NEXT: flat_store_dwordx4 v[0:1], v[0:3] 847; GFX1013-NEXT: s_endpgm 848; 849; GFX11-LABEL: image_bvh_intersect_ray_a16_nsa_reassign: 850; GFX11: ; %bb.0: 851; GFX11-NEXT: s_clause 0x1 852; GFX11-NEXT: s_load_b128 s[4:7], s[0:1], 0x24 853; GFX11-NEXT: s_load_b128 s[0:3], s[0:1], 0x34 854; GFX11-NEXT: v_lshlrev_b32_e32 v4, 2, v0 855; GFX11-NEXT: s_mov_b32 s9, 0x42004600 856; GFX11-NEXT: s_mov_b32 s8, 2.0 857; GFX11-NEXT: s_mov_b32 s10, 0x44004700 858; GFX11-NEXT: s_mov_b32 s11, 0x45004800 859; GFX11-NEXT: s_waitcnt lgkmcnt(0) 860; GFX11-NEXT: v_mov_b32_e32 v0, s4 861; GFX11-NEXT: v_mov_b32_e32 v1, s5 862; GFX11-NEXT: v_mov_b32_e32 v2, s6 863; GFX11-NEXT: v_mov_b32_e32 v3, s7 864; GFX11-NEXT: s_mov_b32 s6, 0 865; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v0, v4 866; GFX11-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo 867; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v2, v4 868; GFX11-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo 869; GFX11-NEXT: s_mov_b32 s7, 1.0 870; GFX11-NEXT: flat_load_b32 v6, v[0:1] 871; GFX11-NEXT: flat_load_b32 v7, v[2:3] 872; GFX11-NEXT: v_mov_b32_e32 v0, s6 873; GFX11-NEXT: v_mov_b32_e32 v3, s9 874; GFX11-NEXT: v_mov_b32_e32 v1, s7 875; GFX11-NEXT: v_mov_b32_e32 v2, s8 876; GFX11-NEXT: v_mov_b32_e32 v4, s10 877; GFX11-NEXT: v_mov_b32_e32 v5, s11 878; GFX11-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) 879; GFX11-NEXT: image_bvh_intersect_ray v[0:3], [v6, v7, v[0:2], v[3:5]], s[0:3] a16 880; GFX11-NEXT: s_waitcnt vmcnt(0) 881; GFX11-NEXT: flat_store_b128 v[0:1], v[0:3] 882; GFX11-NEXT: s_endpgm 883 %lid = tail call i32 @llvm.amdgcn.workitem.id.x() 884 %gep_node_ptr = getelementptr inbounds i32, i32* %p_node_ptr, i32 %lid 885 %node_ptr = load i32, i32* %gep_node_ptr, align 4 886 %gep_ray = getelementptr inbounds float, float* %p_ray, i32 %lid 887 %ray_extent = load float, float* %gep_ray, align 4 888 %ray_origin0 = insertelement <3 x float> undef, float 0.0, i32 0 889 %ray_origin1 = insertelement <3 x float> %ray_origin0, float 1.0, i32 1 890 %ray_origin = insertelement <3 x float> %ray_origin1, float 2.0, i32 2 891 %ray_dir0 = insertelement <3 x half> undef, half 3.0, i32 0 892 %ray_dir1 = insertelement <3 x half> %ray_dir0, half 4.0, i32 1 893 %ray_dir = insertelement <3 x half> %ray_dir1, half 5.0, i32 2 894 %ray_inv_dir0 = insertelement <3 x half> undef, half 6.0, i32 0 895 %ray_inv_dir1 = insertelement <3 x half> %ray_inv_dir0, half 7.0, i32 1 896 %ray_inv_dir = insertelement <3 x half> %ray_inv_dir1, half 8.0, i32 2 897 %v = call <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i32.v4f16(i32 %node_ptr, float %ray_extent, <3 x float> %ray_origin, <3 x half> %ray_dir, <3 x half> %ray_inv_dir, <4 x i32> %tdescr) 898 store <4 x i32> %v, <4 x i32>* undef 899 ret void 900} 901 902define amdgpu_kernel void @image_bvh64_intersect_ray_nsa_reassign(float* %p_ray, <4 x i32> inreg %tdescr) { 903; GFX1030-LABEL: image_bvh64_intersect_ray_nsa_reassign: 904; GFX1030: ; %bb.0: 905; GFX1030-NEXT: s_clause 0x1 906; GFX1030-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x24 907; GFX1030-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x34 908; GFX1030-NEXT: v_lshlrev_b32_e32 v2, 2, v0 909; GFX1030-NEXT: v_mov_b32_e32 v3, 0 910; GFX1030-NEXT: v_mov_b32_e32 v4, 1.0 911; GFX1030-NEXT: v_mov_b32_e32 v5, 2.0 912; GFX1030-NEXT: v_mov_b32_e32 v6, 0x40400000 913; GFX1030-NEXT: v_mov_b32_e32 v7, 4.0 914; GFX1030-NEXT: v_mov_b32_e32 v8, 0x40a00000 915; GFX1030-NEXT: v_mov_b32_e32 v9, 0x40c00000 916; GFX1030-NEXT: v_mov_b32_e32 v10, 0x40e00000 917; GFX1030-NEXT: v_mov_b32_e32 v11, 0x41000000 918; GFX1030-NEXT: s_waitcnt lgkmcnt(0) 919; GFX1030-NEXT: v_mov_b32_e32 v0, s4 920; GFX1030-NEXT: v_mov_b32_e32 v1, s5 921; GFX1030-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 922; GFX1030-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo 923; GFX1030-NEXT: flat_load_dword v2, v[0:1] 924; GFX1030-NEXT: v_mov_b32_e32 v0, 0xb36211c7 925; GFX1030-NEXT: v_mov_b32_e32 v1, 0x102 926; GFX1030-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) 927; GFX1030-NEXT: image_bvh64_intersect_ray v[0:3], v[0:15], s[0:3] 928; GFX1030-NEXT: s_waitcnt vmcnt(0) 929; GFX1030-NEXT: flat_store_dwordx4 v[0:1], v[0:3] 930; GFX1030-NEXT: s_endpgm 931; 932; GFX1013-LABEL: image_bvh64_intersect_ray_nsa_reassign: 933; GFX1013: ; %bb.0: 934; GFX1013-NEXT: s_clause 0x1 935; GFX1013-NEXT: s_load_dwordx2 s[2:3], s[0:1], 0x24 936; GFX1013-NEXT: s_load_dwordx4 s[4:7], s[0:1], 0x34 937; GFX1013-NEXT: v_lshlrev_b32_e32 v2, 2, v0 938; GFX1013-NEXT: v_mov_b32_e32 v3, 0 939; GFX1013-NEXT: v_mov_b32_e32 v4, 1.0 940; GFX1013-NEXT: v_mov_b32_e32 v5, 2.0 941; GFX1013-NEXT: v_mov_b32_e32 v6, 0x40400000 942; GFX1013-NEXT: v_mov_b32_e32 v7, 4.0 943; GFX1013-NEXT: v_mov_b32_e32 v8, 0x40a00000 944; GFX1013-NEXT: v_mov_b32_e32 v9, 0x40c00000 945; GFX1013-NEXT: v_mov_b32_e32 v10, 0x40e00000 946; GFX1013-NEXT: v_mov_b32_e32 v11, 0x41000000 947; GFX1013-NEXT: s_waitcnt lgkmcnt(0) 948; GFX1013-NEXT: v_mov_b32_e32 v0, s2 949; GFX1013-NEXT: v_mov_b32_e32 v1, s3 950; GFX1013-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 951; GFX1013-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo 952; GFX1013-NEXT: flat_load_dword v2, v[0:1] 953; GFX1013-NEXT: v_mov_b32_e32 v0, 0xb36211c7 954; GFX1013-NEXT: v_mov_b32_e32 v1, 0x102 955; GFX1013-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) 956; GFX1013-NEXT: image_bvh64_intersect_ray v[0:3], v[0:15], s[4:7] 957; GFX1013-NEXT: s_waitcnt vmcnt(0) 958; GFX1013-NEXT: flat_store_dwordx4 v[0:1], v[0:3] 959; GFX1013-NEXT: s_endpgm 960; 961; GFX11-LABEL: image_bvh64_intersect_ray_nsa_reassign: 962; GFX11: ; %bb.0: 963; GFX11-NEXT: s_clause 0x1 964; GFX11-NEXT: s_load_b64 s[4:5], s[0:1], 0x24 965; GFX11-NEXT: s_load_b128 s[0:3], s[0:1], 0x34 966; GFX11-NEXT: v_lshlrev_b32_e32 v2, 2, v0 967; GFX11-NEXT: s_mov_b32 s6, 0 968; GFX11-NEXT: s_mov_b32 s9, 0x40400000 969; GFX11-NEXT: s_mov_b32 s12, 0x40c00000 970; GFX11-NEXT: s_mov_b32 s8, 2.0 971; GFX11-NEXT: s_mov_b32 s7, 1.0 972; GFX11-NEXT: s_mov_b32 s11, 0x40a00000 973; GFX11-NEXT: s_mov_b32 s10, 4.0 974; GFX11-NEXT: s_mov_b32 s14, 0x41000000 975; GFX11-NEXT: s_mov_b32 s13, 0x40e00000 976; GFX11-NEXT: v_mov_b32_e32 v3, s9 977; GFX11-NEXT: v_mov_b32_e32 v6, s12 978; GFX11-NEXT: v_mov_b32_e32 v4, s10 979; GFX11-NEXT: v_mov_b32_e32 v5, s11 980; GFX11-NEXT: v_mov_b32_e32 v7, s13 981; GFX11-NEXT: v_mov_b32_e32 v8, s14 982; GFX11-NEXT: s_waitcnt lgkmcnt(0) 983; GFX11-NEXT: v_mov_b32_e32 v0, s4 984; GFX11-NEXT: v_mov_b32_e32 v1, s5 985; GFX11-NEXT: s_mov_b32 s4, 0xb36211c7 986; GFX11-NEXT: s_movk_i32 s5, 0x102 987; GFX11-NEXT: v_mov_b32_e32 v10, s5 988; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 989; GFX11-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo 990; GFX11-NEXT: v_mov_b32_e32 v9, s4 991; GFX11-NEXT: flat_load_b32 v11, v[0:1] 992; GFX11-NEXT: v_mov_b32_e32 v0, s6 993; GFX11-NEXT: v_mov_b32_e32 v1, s7 994; GFX11-NEXT: v_mov_b32_e32 v2, s8 995; GFX11-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) 996; GFX11-NEXT: image_bvh64_intersect_ray v[0:3], [v[9:10], v11, v[0:2], v[3:5], v[6:8]], s[0:3] 997; GFX11-NEXT: s_waitcnt vmcnt(0) 998; GFX11-NEXT: flat_store_b128 v[0:1], v[0:3] 999; GFX11-NEXT: s_endpgm 1000 %lid = tail call i32 @llvm.amdgcn.workitem.id.x() 1001 %gep_ray = getelementptr inbounds float, float* %p_ray, i32 %lid 1002 %ray_extent = load float, float* %gep_ray, align 4 1003 %ray_origin0 = insertelement <3 x float> undef, float 0.0, i32 0 1004 %ray_origin1 = insertelement <3 x float> %ray_origin0, float 1.0, i32 1 1005 %ray_origin = insertelement <3 x float> %ray_origin1, float 2.0, i32 2 1006 %ray_dir0 = insertelement <3 x float> undef, float 3.0, i32 0 1007 %ray_dir1 = insertelement <3 x float> %ray_dir0, float 4.0, i32 1 1008 %ray_dir = insertelement <3 x float> %ray_dir1, float 5.0, i32 2 1009 %ray_inv_dir0 = insertelement <3 x float> undef, float 6.0, i32 0 1010 %ray_inv_dir1 = insertelement <3 x float> %ray_inv_dir0, float 7.0, i32 1 1011 %ray_inv_dir = insertelement <3 x float> %ray_inv_dir1, float 8.0, i32 2 1012 %v = call <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i64.v4f32(i64 1111111111111, float %ray_extent, <3 x float> %ray_origin, <3 x float> %ray_dir, <3 x float> %ray_inv_dir, <4 x i32> %tdescr) 1013 store <4 x i32> %v, <4 x i32>* undef 1014 ret void 1015} 1016 1017define amdgpu_kernel void @image_bvh64_intersect_ray_a16_nsa_reassign(float* %p_ray, <4 x i32> inreg %tdescr) { 1018; GFX1030-LABEL: image_bvh64_intersect_ray_a16_nsa_reassign: 1019; GFX1030: ; %bb.0: 1020; GFX1030-NEXT: s_clause 0x1 1021; GFX1030-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x24 1022; GFX1030-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x34 1023; GFX1030-NEXT: v_lshlrev_b32_e32 v2, 2, v0 1024; GFX1030-NEXT: s_movk_i32 s6, 0x4200 1025; GFX1030-NEXT: s_movk_i32 s7, 0x4800 1026; GFX1030-NEXT: s_bfe_u32 s6, s6, 0x100000 1027; GFX1030-NEXT: s_movk_i32 s9, 0x4600 1028; GFX1030-NEXT: s_movk_i32 s8, 0x4700 1029; GFX1030-NEXT: s_bfe_u32 s7, s7, 0x100000 1030; GFX1030-NEXT: s_bfe_u32 s8, s8, 0x100000 1031; GFX1030-NEXT: s_lshl_b32 s7, s7, 16 1032; GFX1030-NEXT: v_mov_b32_e32 v3, 0 1033; GFX1030-NEXT: v_mov_b32_e32 v4, 1.0 1034; GFX1030-NEXT: v_mov_b32_e32 v5, 2.0 1035; GFX1030-NEXT: s_waitcnt lgkmcnt(0) 1036; GFX1030-NEXT: v_mov_b32_e32 v0, s4 1037; GFX1030-NEXT: v_mov_b32_e32 v1, s5 1038; GFX1030-NEXT: s_movk_i32 s5, 0x4400 1039; GFX1030-NEXT: s_movk_i32 s4, 0x4500 1040; GFX1030-NEXT: s_bfe_u32 s5, s5, 0x100000 1041; GFX1030-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 1042; GFX1030-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo 1043; GFX1030-NEXT: s_lshl_b32 s5, s5, 16 1044; GFX1030-NEXT: s_bfe_u32 s4, s4, 0x100000 1045; GFX1030-NEXT: s_or_b32 s5, s6, s5 1046; GFX1030-NEXT: flat_load_dword v2, v[0:1] 1047; GFX1030-NEXT: s_bfe_u32 s6, s9, 0x100000 1048; GFX1030-NEXT: v_mov_b32_e32 v0, 0xb36211c6 1049; GFX1030-NEXT: s_lshl_b32 s6, s6, 16 1050; GFX1030-NEXT: v_mov_b32_e32 v1, 0x102 1051; GFX1030-NEXT: s_or_b32 s4, s4, s6 1052; GFX1030-NEXT: s_or_b32 s6, s8, s7 1053; GFX1030-NEXT: v_mov_b32_e32 v6, s5 1054; GFX1030-NEXT: v_mov_b32_e32 v7, s4 1055; GFX1030-NEXT: v_mov_b32_e32 v8, s6 1056; GFX1030-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) 1057; GFX1030-NEXT: image_bvh64_intersect_ray v[0:3], v[0:15], s[0:3] a16 1058; GFX1030-NEXT: s_waitcnt vmcnt(0) 1059; GFX1030-NEXT: flat_store_dwordx4 v[0:1], v[0:3] 1060; GFX1030-NEXT: s_endpgm 1061; 1062; GFX1013-LABEL: image_bvh64_intersect_ray_a16_nsa_reassign: 1063; GFX1013: ; %bb.0: 1064; GFX1013-NEXT: s_clause 0x1 1065; GFX1013-NEXT: s_load_dwordx2 s[2:3], s[0:1], 0x24 1066; GFX1013-NEXT: s_load_dwordx4 s[4:7], s[0:1], 0x34 1067; GFX1013-NEXT: v_lshlrev_b32_e32 v2, 2, v0 1068; GFX1013-NEXT: s_movk_i32 s1, 0x4400 1069; GFX1013-NEXT: s_movk_i32 s9, 0x4600 1070; GFX1013-NEXT: s_bfe_u32 s1, s1, 0x100000 1071; GFX1013-NEXT: s_movk_i32 s0, 0x4500 1072; GFX1013-NEXT: s_lshl_b32 s1, s1, 16 1073; GFX1013-NEXT: s_movk_i32 s8, 0x4700 1074; GFX1013-NEXT: s_bfe_u32 s0, s0, 0x100000 1075; GFX1013-NEXT: s_bfe_u32 s8, s8, 0x100000 1076; GFX1013-NEXT: v_mov_b32_e32 v3, 0 1077; GFX1013-NEXT: v_mov_b32_e32 v4, 1.0 1078; GFX1013-NEXT: v_mov_b32_e32 v5, 2.0 1079; GFX1013-NEXT: s_waitcnt lgkmcnt(0) 1080; GFX1013-NEXT: v_mov_b32_e32 v0, s2 1081; GFX1013-NEXT: v_mov_b32_e32 v1, s3 1082; GFX1013-NEXT: s_movk_i32 s2, 0x4200 1083; GFX1013-NEXT: s_movk_i32 s3, 0x4800 1084; GFX1013-NEXT: s_bfe_u32 s2, s2, 0x100000 1085; GFX1013-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 1086; GFX1013-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo 1087; GFX1013-NEXT: s_or_b32 s1, s2, s1 1088; GFX1013-NEXT: s_bfe_u32 s2, s9, 0x100000 1089; GFX1013-NEXT: s_bfe_u32 s3, s3, 0x100000 1090; GFX1013-NEXT: flat_load_dword v2, v[0:1] 1091; GFX1013-NEXT: s_lshl_b32 s2, s2, 16 1092; GFX1013-NEXT: s_lshl_b32 s3, s3, 16 1093; GFX1013-NEXT: s_or_b32 s0, s0, s2 1094; GFX1013-NEXT: s_or_b32 s2, s8, s3 1095; GFX1013-NEXT: v_mov_b32_e32 v0, 0xb36211c6 1096; GFX1013-NEXT: v_mov_b32_e32 v1, 0x102 1097; GFX1013-NEXT: v_mov_b32_e32 v6, s1 1098; GFX1013-NEXT: v_mov_b32_e32 v7, s0 1099; GFX1013-NEXT: v_mov_b32_e32 v8, s2 1100; GFX1013-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) 1101; GFX1013-NEXT: image_bvh64_intersect_ray v[0:3], v[0:15], s[4:7] a16 1102; GFX1013-NEXT: s_waitcnt vmcnt(0) 1103; GFX1013-NEXT: flat_store_dwordx4 v[0:1], v[0:3] 1104; GFX1013-NEXT: s_endpgm 1105; 1106; GFX11-LABEL: image_bvh64_intersect_ray_a16_nsa_reassign: 1107; GFX11: ; %bb.0: 1108; GFX11-NEXT: s_clause 0x1 1109; GFX11-NEXT: s_load_b64 s[4:5], s[0:1], 0x24 1110; GFX11-NEXT: s_load_b128 s[0:3], s[0:1], 0x34 1111; GFX11-NEXT: v_lshlrev_b32_e32 v2, 2, v0 1112; GFX11-NEXT: s_mov_b32 s6, 0 1113; GFX11-NEXT: s_mov_b32 s9, 0x42004600 1114; GFX11-NEXT: s_mov_b32 s8, 2.0 1115; GFX11-NEXT: s_mov_b32 s7, 1.0 1116; GFX11-NEXT: s_mov_b32 s10, 0x44004700 1117; GFX11-NEXT: s_mov_b32 s11, 0x45004800 1118; GFX11-NEXT: v_mov_b32_e32 v3, s9 1119; GFX11-NEXT: v_mov_b32_e32 v4, s10 1120; GFX11-NEXT: v_mov_b32_e32 v5, s11 1121; GFX11-NEXT: s_waitcnt lgkmcnt(0) 1122; GFX11-NEXT: v_mov_b32_e32 v0, s4 1123; GFX11-NEXT: v_mov_b32_e32 v1, s5 1124; GFX11-NEXT: s_mov_b32 s4, 0xb36211c6 1125; GFX11-NEXT: s_movk_i32 s5, 0x102 1126; GFX11-NEXT: v_mov_b32_e32 v7, s5 1127; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 1128; GFX11-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo 1129; GFX11-NEXT: v_mov_b32_e32 v6, s4 1130; GFX11-NEXT: flat_load_b32 v8, v[0:1] 1131; GFX11-NEXT: v_mov_b32_e32 v0, s6 1132; GFX11-NEXT: v_mov_b32_e32 v1, s7 1133; GFX11-NEXT: v_mov_b32_e32 v2, s8 1134; GFX11-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) 1135; GFX11-NEXT: image_bvh64_intersect_ray v[0:3], [v[6:7], v8, v[0:2], v[3:5]], s[0:3] a16 1136; GFX11-NEXT: s_waitcnt vmcnt(0) 1137; GFX11-NEXT: flat_store_b128 v[0:1], v[0:3] 1138; GFX11-NEXT: s_endpgm 1139 %lid = tail call i32 @llvm.amdgcn.workitem.id.x() 1140 %gep_ray = getelementptr inbounds float, float* %p_ray, i32 %lid 1141 %ray_extent = load float, float* %gep_ray, align 4 1142 %ray_origin0 = insertelement <3 x float> undef, float 0.0, i32 0 1143 %ray_origin1 = insertelement <3 x float> %ray_origin0, float 1.0, i32 1 1144 %ray_origin = insertelement <3 x float> %ray_origin1, float 2.0, i32 2 1145 %ray_dir0 = insertelement <3 x half> undef, half 3.0, i32 0 1146 %ray_dir1 = insertelement <3 x half> %ray_dir0, half 4.0, i32 1 1147 %ray_dir = insertelement <3 x half> %ray_dir1, half 5.0, i32 2 1148 %ray_inv_dir0 = insertelement <3 x half> undef, half 6.0, i32 0 1149 %ray_inv_dir1 = insertelement <3 x half> %ray_inv_dir0, half 7.0, i32 1 1150 %ray_inv_dir = insertelement <3 x half> %ray_inv_dir1, half 8.0, i32 2 1151 %v = call <4 x i32> @llvm.amdgcn.image.bvh.intersect.ray.i64.v4f16(i64 1111111111110, float %ray_extent, <3 x float> %ray_origin, <3 x half> %ray_dir, <3 x half> %ray_inv_dir, <4 x i32> %tdescr) 1152 store <4 x i32> %v, <4 x i32>* undef 1153 ret void 1154} 1155