brintos

brintos / llvm-project-archived public Read only

0
0
Text · 65.0 KiB · 4df8294 Raw
1601 lines · plain
1; RUN: opt -passes=amdgpu-attributor -mcpu=kaveri -mattr=-promote-alloca < %s | llc | FileCheck -enable-var-scope -check-prefix=HSA -check-prefix=CI %s2; RUN: opt -passes=amdgpu-attributor -mcpu=gfx900 -mattr=-promote-alloca < %s | llc | FileCheck -enable-var-scope -check-prefix=HSA -check-prefix=GFX9 %s3 4target triple = "amdgcn-amd-amdhsa"5 6; HSA-LABEL: {{^}}use_group_to_flat_addrspacecast:7 8; CI-DAG: s_load_dword [[PTR:s[0-9]+]], s[6:7], 0x0{{$}}9; CI-DAG: s_load_dword [[APERTURE:s[0-9]+]], s[4:5], 0x10{{$}}10; CI-DAG: s_cmp_lg_u32 [[PTR]], -111; CI-DAG: s_cselect_b32 s[[SHI:[0-9]+]], [[APERTURE]], 012; CI-DAG: s_cselect_b32 s[[SLO:[0-9]+]], [[PTR]], 013 14; GFX9-DAG: s_mov_b64 s[{{[0-9]+}}:[[HIBASE:[0-9]+]]], src_shared_base15 16; HSA-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 717; GFX9-DAG: s_load_dword [[PTR:s[0-9]+]], s[4:5], 0x0{{$}}18 19; GFX9: s_cmp_lg_u32 [[PTR]], -120; GFX9-DAG: s_cselect_b32 s[[SHI:[0-9]+]], s[[HIBASE]], 021; GFX9-DAG: s_cselect_b32 s[[SLO:[0-9]+]], [[PTR]], 022 23; HSA-DAG: v_mov_b32_e32 v[[VLO:[0-9]+]], s[[SLO]]24; HSA-DAG: v_mov_b32_e32 v[[VHI:[0-9]+]], s[[SHI]]25 26; HSA: flat_store_dword v[[[VLO]]:[[VHI]]], [[K]]27 28; HSA:  .amdhsa_user_sgpr_private_segment_buffer 129; HSA:  .amdhsa_user_sgpr_dispatch_ptr 030; CI:   .amdhsa_user_sgpr_queue_ptr 131; GFX9: .amdhsa_user_sgpr_queue_ptr 032 33; At most 2 digits. Make sure src_shared_base is not counted as a high34; number SGPR.35 36; HSA: NumSgprs: {{[0-9]+}}37define amdgpu_kernel void @use_group_to_flat_addrspacecast(ptr addrspace(3) %ptr) #0 {38  %stof = addrspacecast ptr addrspace(3) %ptr to ptr39  store volatile i32 7, ptr %stof40  ret void41}42 43; Test handling inside a non-kernel44; HSA-LABEL: {{^}}use_group_to_flat_addrspacecast_func:45; CI-DAG: s_load_dword [[APERTURE:s[0-9]+]], s[6:7], 0x10{{$}}46; CI-DAG: v_mov_b32_e32 [[VAPERTURE:v[0-9]+]], [[APERTURE]]47; CI-DAG: v_cmp_ne_u32_e32 vcc, -1, v048; CI-DAG: v_cndmask_b32_e32 v[[HI:[0-9]+]], 0, [[VAPERTURE]], vcc49; CI-DAG: v_cndmask_b32_e32 v[[LO:[0-9]+]], 0, v050 51; GFX9-DAG: s_mov_b64 s[{{[0-9]+}}:[[HIBASE:[0-9]+]]], src_shared_base52 53; HSA-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 754 55; GFX9-DAG: v_mov_b32_e32 v[[VREG_HIBASE:[0-9]+]], s[[HIBASE]]56; GFX9-DAG: v_cmp_ne_u32_e32 vcc, -1, v057; GFX9-DAG: v_cndmask_b32_e32 v[[LO:[0-9]+]], 0, v0, vcc58; GFX9-DAG: v_cndmask_b32_e32 v[[HI:[0-9]+]], 0, v[[VREG_HIBASE]], vcc59 60; HSA: flat_store_dword v[[[LO]]:[[HI]]], [[K]]61define void @use_group_to_flat_addrspacecast_func(ptr addrspace(3) %ptr) #0 {62  %stof = addrspacecast ptr addrspace(3) %ptr to ptr63  store volatile i32 7, ptr %stof64  ret void65}66 67; HSA-LABEL: {{^}}use_private_to_flat_addrspacecast:68 69; CI-DAG: s_load_dword [[PTR:s[0-9]+]], s[6:7], 0x0{{$}}70; CI-DAG: s_load_dword [[APERTURE:s[0-9]+]], s[4:5], 0x11{{$}}71 72; CI-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 773; CI-DAG: s_cmp_lg_u32 [[PTR]], -174; CI-DAG: s_cselect_b32 s[[SHI:[0-9]+]], [[APERTURE]], 075; CI-DAG: s_cselect_b32 s[[SLO:[0-9]+]], [[PTR]], 076 77; GFX9-DAG: s_load_dword [[PTR:s[0-9]+]], s[4:5], 0x0{{$}}78; GFX9-DAG: s_mov_b64 s[{{[0-9]+}}:[[HIBASE:[0-9]+]]], src_private_base79 80; GFX9-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 781; GFX9: s_cmp_lg_u32 [[PTR]], -182; GFX9: s_cselect_b32 s[[SHI:[0-9]+]], s[[HIBASE]], 083; GFX9: s_cselect_b32 s[[SLO:[0-9]+]], [[PTR]], 084 85; HSA-DAG: v_mov_b32_e32 v[[VHI:[0-9]+]], s[[SHI]]86; HSA-DAG: v_mov_b32_e32 v[[VLO:[0-9]+]], s[[SLO]]87 88; HSA: flat_store_dword v[[[VLO]]:[[VHI]]], [[K]]89 90; HSA:  .amdhsa_user_sgpr_private_segment_buffer 191; HSA:  .amdhsa_user_sgpr_dispatch_ptr 092; CI:   .amdhsa_user_sgpr_queue_ptr 193; GFX9: .amdhsa_user_sgpr_queue_ptr 094 95; HSA: NumSgprs: {{[0-9]+}}96define amdgpu_kernel void @use_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) #0 {97  %stof = addrspacecast ptr addrspace(5) %ptr to ptr98  store volatile i32 7, ptr %stof99  ret void100}101 102; no-op103; HSA-LABEL: {{^}}use_global_to_flat_addrspacecast:104 105; HSA: s_load_dwordx2 s[[[PTRLO:[0-9]+]]:[[PTRHI:[0-9]+]]]106; HSA-DAG: v_mov_b32_e32 v[[VPTRLO:[0-9]+]], s[[PTRLO]]107; HSA-DAG: v_mov_b32_e32 v[[VPTRHI:[0-9]+]], s[[PTRHI]]108; HSA-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 7109; HSA: flat_store_dword v[[[VPTRLO]]:[[VPTRHI]]], [[K]]110 111; HSA:  .amdhsa_user_sgpr_queue_ptr 0112define amdgpu_kernel void @use_global_to_flat_addrspacecast(ptr addrspace(1) %ptr) #0 {113  %stof = addrspacecast ptr addrspace(1) %ptr to ptr114  store volatile i32 7, ptr %stof115  ret void116}117 118; no-op119; HSA-LABEL: {{^}}use_constant_to_flat_addrspacecast:120; HSA: s_load_dwordx2 s[[[PTRLO:[0-9]+]]:[[PTRHI:[0-9]+]]]121; HSA-DAG: v_mov_b32_e32 v[[VPTRLO:[0-9]+]], s[[PTRLO]]122; HSA-DAG: v_mov_b32_e32 v[[VPTRHI:[0-9]+]], s[[PTRHI]]123; HSA: flat_load_dword v{{[0-9]+}}, v[[[VPTRLO]]:[[VPTRHI]]]124define amdgpu_kernel void @use_constant_to_flat_addrspacecast(ptr addrspace(4) %ptr) #0 {125  %stof = addrspacecast ptr addrspace(4) %ptr to ptr126  %ld = load volatile i32, ptr %stof127  ret void128}129 130; HSA-LABEL: {{^}}use_constant_to_global_addrspacecast:131; HSA: s_load_dwordx2 s[[[PTRLO:[0-9]+]]:[[PTRHI:[0-9]+]]]132; CI-DAG: v_mov_b32_e32 v[[VPTRLO:[0-9]+]], s[[PTRLO]]133; CI-DAG: v_mov_b32_e32 v[[VPTRHI:[0-9]+]], s[[PTRHI]]134; CI: {{flat|global}}_load_dword v{{[0-9]+}}, v[[[VPTRLO]]:[[VPTRHI]]]135 136; GFX9: v_mov_b32_e32 [[ZERO:v[0-9]+]], 0{{$}}137; GFX9: global_load_dword v{{[0-9]+}}, [[ZERO:v[0-9]+]], s[[[PTRLO]]:[[PTRHI]]]138define amdgpu_kernel void @use_constant_to_global_addrspacecast(ptr addrspace(4) %ptr) #0 {139  %stof = addrspacecast ptr addrspace(4) %ptr to ptr addrspace(1)140  %ld = load volatile i32, ptr addrspace(1) %stof141  ret void142}143 144; HSA-LABEL: {{^}}use_flat_to_group_addrspacecast:145 146; HSA: s_load_dwordx2 s[[[PTR_LO:[0-9]+]]:[[PTR_HI:[0-9]+]]]147; CI-DAG: v_cmp_ne_u64_e64 s[[[CMP_LO:[0-9]+]]:[[CMP_HI:[0-9]+]]], s[[[PTR_LO]]:[[PTR_HI]]], 0{{$}}148; CI-DAG: s_and_b64 s{{[[0-9]+:[0-9]+]}}, s[[[CMP_LO]]:[[CMP_HI]]], exec149; CI-DAG: s_cselect_b32 [[CASTPTR:s[0-9]+]], s[[PTR_LO]], -1150; CI-DAG: v_mov_b32_e32 [[VCASTPTR:v[0-9]+]], [[CASTPTR]]151; HSA-DAG: v_mov_b32_e32 v[[K:[0-9]+]], 0{{$}}152; GFX9-DAG: s_cmp_lg_u64 s[[[CMP_LO:[0-9]+]]:[[CMP_HI:[0-9]+]]], 0153; GFX9-DAG: s_cselect_b32 s[[PTR_LO]], s[[PTR_LO]], -1154; GFX9-DAG: v_mov_b32_e32 [[CASTPTR:v[0-9]+]], s[[PTR_LO]]155; CI-DAG: ds_write_b32 [[VCASTPTR]], v[[K]]156; GFX9-DAG: ds_write_b32 [[CASTPTR]], v[[K]]157 158; HSA:  .amdhsa_user_sgpr_private_segment_buffer 1159; HSA:  .amdhsa_user_sgpr_dispatch_ptr 0160; HSA:  .amdhsa_user_sgpr_queue_ptr 0161define amdgpu_kernel void @use_flat_to_group_addrspacecast(ptr %ptr) #0 {162  %ftos = addrspacecast ptr %ptr to ptr addrspace(3)163  store volatile i32 0, ptr addrspace(3) %ftos164  ret void165}166 167; HSA-LABEL: {{^}}use_flat_to_private_addrspacecast:168 169; HSA: s_load_dwordx2 s[[[PTR_LO:[0-9]+]]:[[PTR_HI:[0-9]+]]]170; CI-DAG v_cmp_ne_u64_e64 vcc, s[[[PTR_LO]]:[[PTR_HI]]], 0{{$}}171; CI-DAG v_mov_b32_e32 v[[VPTR_LO:[0-9]+]], s[[PTR_LO]]172; CI-DAG v_cndmask_b32_e32 [[CASTPTR:v[0-9]+]], -1, v[[VPTR_LO]]173; CI-DAG: v_cmp_ne_u64_e64 s[[[CMP_LO:[0-9]+]]:[[CMP_HI:[0-9]+]]], s[[[PTR_LO]]:[[PTR_HI]]], 0{{$}}174; CI-DAG: s_and_b64 s{{[[0-9]+:[0-9]+]}}, s[[[CMP_LO]]:[[CMP_HI]]], exec175; CI-DAG: s_cselect_b32 [[CASTPTR:s[0-9]+]], s[[PTR_LO]], -1176; CI-DAG: v_mov_b32_e32 [[VCASTPTR:v[0-9]+]], [[CASTPTR]]177; HSA-DAG: v_mov_b32_e32 v[[K:[0-9]+]], 0{{$}}178; GFX9-DAG: s_cmp_lg_u64 s[[[CMP_LO:[0-9]+]]:[[CMP_HI:[0-9]+]]], 0179; GFX9-DAG: s_cselect_b32 s[[PTR_LO]], s[[PTR_LO]], -1180; GFX9-DAG: v_mov_b32_e32 [[CASTPTR:v[0-9]+]], s[[PTR_LO]]181; CI: buffer_store_dword v[[K]], [[VCASTPTR]], s{{\[[0-9]+:[0-9]+\]}}, 0 offen{{$}}182; GFX9: buffer_store_dword v[[K]], [[CASTPTR]], s{{\[[0-9]+:[0-9]+\]}}, 0 offen{{$}}183 184; HSA:  .amdhsa_user_sgpr_private_segment_buffer 1185; HSA:  .amdhsa_user_sgpr_dispatch_ptr 0186; HSA:  .amdhsa_user_sgpr_queue_ptr 0187define amdgpu_kernel void @use_flat_to_private_addrspacecast(ptr %ptr) #0 {188  %ftos = addrspacecast ptr %ptr to ptr addrspace(5)189  store volatile i32 0, ptr addrspace(5) %ftos190  ret void191}192 193; HSA-LABEL: {{^}}use_flat_to_global_addrspacecast:194 195; HSA: s_load_dwordx2 s[[[PTRLO:[0-9]+]]:[[PTRHI:[0-9]+]]], s[4:5], 0x0196; CI-DAG: v_mov_b32_e32 v[[VPTRLO:[0-9]+]], s[[PTRLO]]197; CI-DAG: v_mov_b32_e32 v[[VPTRHI:[0-9]+]], s[[PTRHI]]198; CI-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 0199; CI: flat_store_dword v[[[VPTRLO]]:[[VPTRHI]]], [[K]]200 201; GFX9: v_mov_b32_e32 [[ZERO:v[0-9]+]], 0202; GFX9: global_store_dword [[ZERO]], [[ZERO]], s[[[PTRLO]]:[[PTRHI]]{{\]$}}203 204; HSA:  .amdhsa_user_sgpr_queue_ptr 0205define amdgpu_kernel void @use_flat_to_global_addrspacecast(ptr %ptr) #0 {206  %ftos = addrspacecast ptr %ptr to ptr addrspace(1)207  store volatile i32 0, ptr addrspace(1) %ftos208  ret void209}210 211; HSA-LABEL: {{^}}use_flat_to_constant_addrspacecast:212 213; HSA: s_load_dwordx2 s[[[PTRLO:[0-9]+]]:[[PTRHI:[0-9]+]]], s[4:5], 0x0214; HSA: s_load_dword s{{[0-9]+}}, s[[[PTRLO]]:[[PTRHI]]], 0x0215 216; HSA:  .amdhsa_user_sgpr_queue_ptr 0217define amdgpu_kernel void @use_flat_to_constant_addrspacecast(ptr %ptr) #0 {218  %ftos = addrspacecast ptr %ptr to ptr addrspace(4)219  load volatile i32, ptr addrspace(4) %ftos220  ret void221}222 223; HSA-LABEL: {{^}}cast_0_group_to_flat_addrspacecast:224 225; HSA-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}226; HSA-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], s{{[0-9]+}}227; HSA-DAG: v_mov_b32_e32 v[[K:[0-9]+]], 7{{$}}228; HSA: flat_store_dword v[[[LO]]:[[HI]]], v[[K]]229define amdgpu_kernel void @cast_0_group_to_flat_addrspacecast() #0 {230  %cast = addrspacecast ptr addrspace(3) null to ptr231  store volatile i32 7, ptr %cast232  ret void233}234 235; HSA-LABEL: {{^}}cast_0_flat_to_group_addrspacecast:236; HSA-DAG: v_mov_b32_e32 [[PTR:v[0-9]+]], -1{{$}}237; HSA-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 7{{$}}238; HSA: ds_write_b32 [[PTR]], [[K]]239define amdgpu_kernel void @cast_0_flat_to_group_addrspacecast() #0 {240  %cast = addrspacecast ptr null to ptr addrspace(3)241  store volatile i32 7, ptr addrspace(3) %cast242  ret void243}244 245; HSA-LABEL: {{^}}cast_neg1_group_to_flat_addrspacecast:246; HSA: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}247; HSA-DAG: v_mov_b32_e32 v[[K:[0-9]+]], 7{{$}}248; HSA-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}249; HSA: {{flat|global}}_store_dword v[[[LO]]:[[HI]]], v[[K]]250define amdgpu_kernel void @cast_neg1_group_to_flat_addrspacecast() #0 {251  %cast = addrspacecast ptr addrspace(3) inttoptr (i32 -1 to ptr addrspace(3)) to ptr252  store volatile i32 7, ptr %cast253  ret void254}255 256; HSA-LABEL: {{^}}cast_neg1_flat_to_group_addrspacecast:257; HSA-DAG: v_mov_b32_e32 [[PTR:v[0-9]+]], -1{{$}}258; HSA-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 7{{$}}259; HSA: ds_write_b32 [[PTR]], [[K]]260define amdgpu_kernel void @cast_neg1_flat_to_group_addrspacecast() #0 {261  %cast = addrspacecast ptr inttoptr (i64 -1 to ptr) to ptr addrspace(3)262  store volatile i32 7, ptr addrspace(3) %cast263  ret void264}265 266; FIXME: Shouldn't need to enable queue ptr267; HSA-LABEL: {{^}}cast_0_private_to_flat_addrspacecast:268; HSA-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}269; HSA-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], s{{[0-9]+}}270; HSA-DAG: v_mov_b32_e32 v[[K:[0-9]+]], 7{{$}}271; HSA: flat_store_dword v[[[LO]]:[[HI]]], v[[K]]272define amdgpu_kernel void @cast_0_private_to_flat_addrspacecast() #0 {273  %cast = addrspacecast ptr addrspace(5) null to ptr274  store volatile i32 7, ptr %cast275  ret void276}277 278; HSA-LABEL: {{^}}cast_0_flat_to_private_addrspacecast:279; HSA-DAG: v_mov_b32_e32 [[PTR:v[0-9]+]], -1{{$}}280; HSA-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 7{{$}}281; HSA: buffer_store_dword [[K]], [[PTR]], s{{\[[0-9]+:[0-9]+\]}}, 0282define amdgpu_kernel void @cast_0_flat_to_private_addrspacecast() #0 {283  %cast = addrspacecast ptr null to ptr addrspace(5)284  store volatile i32 7, ptr addrspace(5) %cast285  ret void286}287 288; HSA-LABEL: {{^}}cast_neg1_private_to_flat_addrspacecast:289 290; HSA: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}291; HSA-DAG: v_mov_b32_e32 v[[K:[0-9]+]], 7{{$}}292; HSA-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}293; HSA: {{flat|global}}_store_dword v[[[LO]]:[[HI]]], v[[K]]294 295; CI:  .amdhsa_user_sgpr_queue_ptr 1296; GFX9:  .amdhsa_user_sgpr_queue_ptr 0297define amdgpu_kernel void @cast_neg1_private_to_flat_addrspacecast() #0 {298  %cast = addrspacecast ptr addrspace(5) inttoptr (i32 -1 to ptr addrspace(5)) to ptr299  store volatile i32 7, ptr %cast300  ret void301}302 303; HSA-LABEL: {{^}}cast_neg1_flat_to_private_addrspacecast:304; HSA-DAG: v_mov_b32_e32 [[PTR:v[0-9]+]], -1{{$}}305; HSA-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 7{{$}}306; HSA: buffer_store_dword [[K]], [[PTR]], s{{\[[0-9]+:[0-9]+\]}}, 0307define amdgpu_kernel void @cast_neg1_flat_to_private_addrspacecast() #0 {308  %cast = addrspacecast ptr inttoptr (i64 -1 to ptr) to ptr addrspace(5)309  store volatile i32 7, ptr addrspace(5) %cast310  ret void311}312 313 314; Disable optimizations in case there are optimizations added that315; specialize away generic pointer accesses.316 317; HSA-LABEL: {{^}}branch_use_flat_i32:318; HSA: {{flat|global}}_store_dword {{v\[[0-9]+:[0-9]+\]}}, {{v[0-9]+}}319; HSA: s_endpgm320define amdgpu_kernel void @branch_use_flat_i32(ptr addrspace(1) noalias %out, ptr addrspace(1) %gptr, ptr addrspace(3) %lptr, i32 %x, i32 %c) #0 {321entry:322  %cmp = icmp ne i32 %c, 0323  br i1 %cmp, label %local, label %global324 325local:326  %flat_local = addrspacecast ptr addrspace(3) %lptr to ptr327  br label %end328 329global:330  %flat_global = addrspacecast ptr addrspace(1) %gptr to ptr331  br label %end332 333end:334  %fptr = phi ptr [ %flat_local, %local ], [ %flat_global, %global ]335  store volatile i32 %x, ptr %fptr, align 4336;  %val = load i32, ptr %fptr, align 4337;  store i32 %val, ptr addrspace(1) %out, align 4338  ret void339}340 341; Check for prologue initializing special SGPRs pointing to scratch.342; HSA-LABEL: {{^}}store_flat_scratch:343; CI-DAG: s_mov_b32 flat_scratch_lo, s9344; CI-DAG: s_add_i32 [[ADD:s[0-9]+]], s8, s11345; CI-DAG: s_lshr_b32 flat_scratch_hi, [[ADD]], 8346 347; GFX9: s_add_u32 flat_scratch_lo, s6, s9348; GFX9: s_addc_u32 flat_scratch_hi, s7, 0349 350; HSA: {{flat|global}}_store_dword351; HSA: s_barrier352; HSA: {{flat|global}}_load_dword353define amdgpu_kernel void @store_flat_scratch(ptr addrspace(1) noalias %out, i32) #0 {354  %alloca = alloca i32, i32 9, align 4, addrspace(5)355  %x = call i32 @llvm.amdgcn.workitem.id.x() #2356  %pptr = getelementptr i32, ptr addrspace(5) %alloca, i32 %x357  %fptr = addrspacecast ptr addrspace(5) %pptr to ptr358  store volatile i32 %x, ptr %fptr359  ; Dummy call360  call void @llvm.amdgcn.s.barrier() #1361  %reload = load volatile i32, ptr %fptr, align 4362  store volatile i32 %reload, ptr addrspace(1) %out, align 4363  ret void364}365 366; HSA-LABEL: {{^}}use_constant_to_constant32_addrspacecast367; GFX9: s_load_dwordx2 [[PTRPTR:s\[[0-9]+:[0-9]+\]]], s[4:5], 0x0{{$}}368; GFX9: s_load_dword [[OFFSET:s[0-9]+]], s[4:5], 0x8{{$}}369; GFX9: s_load_dwordx2 s[[[PTR_LO:[0-9]+]]:[[PTR_HI:[0-9]+]]], [[PTRPTR]], 0x0{{$}}370; GFX9: s_mov_b32 s[[PTR_HI]], 0{{$}}371; GFX9: s_add_i32 s[[PTR_LO]], s[[PTR_LO]], [[OFFSET]]372; GFX9: s_load_dword s{{[0-9]+}}, s[[[PTR_LO]]:[[PTR_HI]]], 0x0{{$}}373define amdgpu_kernel void @use_constant_to_constant32_addrspacecast(ptr addrspace(4) %ptr.ptr, i32 %offset) #0 {374  %ptr = load volatile ptr addrspace(4), ptr addrspace(4) %ptr.ptr375  %addrspacecast = addrspacecast ptr addrspace(4) %ptr to ptr addrspace(6)376  %gep = getelementptr i8, ptr addrspace(6) %addrspacecast, i32 %offset377  %load = load volatile i32, ptr addrspace(6) %gep, align 4378  ret void379}380 381; HSA-LABEL: {{^}}use_global_to_constant32_addrspacecast382; GFX9: s_load_dwordx2 [[PTRPTR:s\[[0-9]+:[0-9]+\]]], s[4:5], 0x0{{$}}383; GFX9: s_load_dword [[OFFSET:s[0-9]+]], s[4:5], 0x8{{$}}384; GFX9: s_load_dwordx2 s[[[PTR_LO:[0-9]+]]:[[PTR_HI:[0-9]+]]], [[PTRPTR]], 0x0{{$}}385; GFX9: s_mov_b32 s[[PTR_HI]], 0{{$}}386; GFX9: s_add_i32 s[[PTR_LO]], s[[PTR_LO]], [[OFFSET]]387; GFX9: s_load_dword s{{[0-9]+}}, s[[[PTR_LO]]:[[PTR_HI]]], 0x0{{$}}388define amdgpu_kernel void @use_global_to_constant32_addrspacecast(ptr addrspace(4) %ptr.ptr, i32 %offset) #0 {389  %ptr = load volatile ptr addrspace(1), ptr addrspace(4) %ptr.ptr390  %addrspacecast = addrspacecast ptr addrspace(1) %ptr to ptr addrspace(6)391  %gep = getelementptr i8, ptr addrspace(6) %addrspacecast, i32 %offset392  %load = load volatile i32, ptr addrspace(6) %gep, align 4393  ret void394}395 396; GCN-LABEL: {{^}}use_constant32bit_to_flat_addrspacecast_0:397; GCN: s_load_dword [[PTR:s[0-9]+]],398; GCN: v_mov_b32_e32 v[[HI:[0-9]+]], 0399; GCN: v_mov_b32_e32 v[[LO:[0-9]+]], [[PTR]]400; GCN: flat_load_dword v{{[0-9]+}}, v[[[LO]]:[[HI]]]401define amdgpu_kernel void @use_constant32bit_to_flat_addrspacecast_0(ptr addrspace(6) %ptr) #0 {402  %stof = addrspacecast ptr addrspace(6) %ptr to ptr403  %load = load volatile i32, ptr %stof404  ret void405}406 407; GCN-LABEL: {{^}}use_constant32bit_to_flat_addrspacecast_1:408; GCN: s_load_dword [[PTR:s[0-9]+]],409; GCN: v_mov_b32_e32 v[[HI:[0-9]+]], 0xffff8000410; GCN: v_mov_b32_e32 v[[LO:[0-9]+]], [[PTR]]411; GCN: flat_load_dword v{{[0-9]+}}, v[[[LO]]:[[HI]]]412define amdgpu_kernel void @use_constant32bit_to_flat_addrspacecast_1(ptr addrspace(6) %ptr) #3 {413  %stof = addrspacecast ptr addrspace(6) %ptr to ptr414  %load = load volatile i32, ptr %stof415  ret void416}417 418define <2 x ptr addrspace(5)> @addrspacecast_v2p0_to_v2p5(<2 x ptr> %ptr) {419; HSA-LABEL: addrspacecast_v2p0_to_v2p5:420; HSA:       ; %bb.0:421; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)422; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]423; HSA-NEXT:    v_cndmask_b32_e32 v0, -1, v0, vcc424; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]425; HSA-NEXT:    v_cndmask_b32_e32 v1, -1, v2, vcc426; HSA-NEXT:    s_setpc_b64 s[30:31]427  %cast = addrspacecast <2 x ptr> %ptr to <2 x ptr addrspace(5)>428  ret <2 x ptr addrspace(5)> %cast429}430 431define <3 x ptr addrspace(5)> @addrspacecast_v3p0_to_v3p5(<3 x ptr> %ptr) {432; HSA-LABEL: addrspacecast_v3p0_to_v3p5:433; HSA:       ; %bb.0:434; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)435; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]436; HSA-NEXT:    v_cndmask_b32_e32 v0, -1, v0, vcc437; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]438; HSA-NEXT:    v_cndmask_b32_e32 v1, -1, v2, vcc439; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]440; HSA-NEXT:    v_cndmask_b32_e32 v2, -1, v4, vcc441; HSA-NEXT:    s_setpc_b64 s[30:31]442  %cast = addrspacecast <3 x ptr> %ptr to <3 x ptr addrspace(5)>443  ret <3 x ptr addrspace(5)> %cast444}445 446define <4 x ptr addrspace(5)> @addrspacecast_v4p0_to_v4p5(<4 x ptr> %ptr) {447; HSA-LABEL: addrspacecast_v4p0_to_v4p5:448; HSA:       ; %bb.0:449; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)450; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]451; HSA-NEXT:    v_cndmask_b32_e32 v0, -1, v0, vcc452; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]453; HSA-NEXT:    v_cndmask_b32_e32 v1, -1, v2, vcc454; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]455; HSA-NEXT:    v_cndmask_b32_e32 v2, -1, v4, vcc456; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[6:7]457; HSA-NEXT:    v_cndmask_b32_e32 v3, -1, v6, vcc458; HSA-NEXT:    s_setpc_b64 s[30:31]459  %cast = addrspacecast <4 x ptr> %ptr to <4 x ptr addrspace(5)>460  ret <4 x ptr addrspace(5)> %cast461}462 463define <8 x ptr addrspace(5)> @addrspacecast_v8p0_to_v8p5(<8 x ptr> %ptr) {464; HSA-LABEL: addrspacecast_v8p0_to_v8p5:465; HSA:       ; %bb.0:466; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)467; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]468; HSA-NEXT:    v_cndmask_b32_e32 v0, -1, v0, vcc469; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]470; HSA-NEXT:    v_cndmask_b32_e32 v1, -1, v2, vcc471; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]472; HSA-NEXT:    v_cndmask_b32_e32 v2, -1, v4, vcc473; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[6:7]474; HSA-NEXT:    v_cndmask_b32_e32 v3, -1, v6, vcc475; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[8:9]476; HSA-NEXT:    v_cndmask_b32_e32 v4, -1, v8, vcc477; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[10:11]478; HSA-NEXT:    v_cndmask_b32_e32 v5, -1, v10, vcc479; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[12:13]480; HSA-NEXT:    v_cndmask_b32_e32 v6, -1, v12, vcc481; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[14:15]482; HSA-NEXT:    v_cndmask_b32_e32 v7, -1, v14, vcc483; HSA-NEXT:    s_setpc_b64 s[30:31]484  %cast = addrspacecast <8 x ptr> %ptr to <8 x ptr addrspace(5)>485  ret <8 x ptr addrspace(5)> %cast486}487 488define <16 x ptr addrspace(5)> @addrspacecast_v16p0_to_v16p5(<16 x ptr> %ptr) {489; HSA-LABEL: addrspacecast_v16p0_to_v16p5:490; HSA:       ; %bb.0:491; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)492; HSA-NEXT:    buffer_load_dword v31, off, s[0:3], s32493; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]494; HSA-NEXT:    v_cndmask_b32_e32 v0, -1, v0, vcc495; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]496; HSA-NEXT:    v_cndmask_b32_e32 v1, -1, v2, vcc497; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]498; HSA-NEXT:    v_cndmask_b32_e32 v2, -1, v4, vcc499; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[6:7]500; HSA-NEXT:    v_cndmask_b32_e32 v3, -1, v6, vcc501; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[8:9]502; HSA-NEXT:    v_cndmask_b32_e32 v4, -1, v8, vcc503; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[10:11]504; HSA-NEXT:    v_cndmask_b32_e32 v5, -1, v10, vcc505; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[12:13]506; HSA-NEXT:    v_cndmask_b32_e32 v6, -1, v12, vcc507; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[14:15]508; HSA-NEXT:    v_cndmask_b32_e32 v7, -1, v14, vcc509; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[16:17]510; HSA-NEXT:    v_cndmask_b32_e32 v8, -1, v16, vcc511; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[18:19]512; HSA-NEXT:    v_cndmask_b32_e32 v9, -1, v18, vcc513; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[20:21]514; HSA-NEXT:    v_cndmask_b32_e32 v10, -1, v20, vcc515; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[22:23]516; HSA-NEXT:    v_cndmask_b32_e32 v11, -1, v22, vcc517; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[24:25]518; HSA-NEXT:    v_cndmask_b32_e32 v12, -1, v24, vcc519; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[26:27]520; HSA-NEXT:    v_cndmask_b32_e32 v13, -1, v26, vcc521; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[28:29]522; HSA-NEXT:    v_cndmask_b32_e32 v14, -1, v28, vcc523; HSA-NEXT:    s_waitcnt vmcnt(0)524; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[30:31]525; HSA-NEXT:    v_cndmask_b32_e32 v15, -1, v30, vcc526; HSA-NEXT:    s_setpc_b64 s[30:31]527  %cast = addrspacecast <16 x ptr> %ptr to <16 x ptr addrspace(5)>528  ret <16 x ptr addrspace(5)> %cast529}530 531define <2 x ptr> @addrspacecast_v2p5_to_v2p0(<2 x ptr addrspace(5)> %ptr) {532; CI-LABEL: addrspacecast_v2p5_to_v2p0:533; CI:       ; %bb.0:534; CI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)535; CI-NEXT:    s_load_dword s4, s[6:7], 0x11536; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v0537; CI-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc538; CI-NEXT:    s_waitcnt lgkmcnt(0)539; CI-NEXT:    v_mov_b32_e32 v3, s4540; CI-NEXT:    v_cndmask_b32_e32 v4, 0, v3, vcc541; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v1542; CI-NEXT:    v_cndmask_b32_e32 v2, 0, v1, vcc543; CI-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc544; CI-NEXT:    v_mov_b32_e32 v1, v4545; CI-NEXT:    s_setpc_b64 s[30:31]546;547; GFX9-LABEL: addrspacecast_v2p5_to_v2p0:548; GFX9:       ; %bb.0:549; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)550; GFX9-NEXT:    s_mov_b64 s[4:5], src_private_base551; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v0552; GFX9-NEXT:    v_mov_b32_e32 v3, s5553; GFX9-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc554; GFX9-NEXT:    v_cndmask_b32_e32 v4, 0, v3, vcc555; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v1556; GFX9-NEXT:    v_cndmask_b32_e32 v2, 0, v1, vcc557; GFX9-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc558; GFX9-NEXT:    v_mov_b32_e32 v1, v4559; GFX9-NEXT:    s_setpc_b64 s[30:31]560  %cast = addrspacecast <2 x ptr addrspace(5)> %ptr to <2 x ptr>561  ret <2 x ptr> %cast562}563 564define <3 x ptr> @addrspacecast_v3p5_to_v3p0(<3 x ptr addrspace(5)> %ptr) {565; CI-LABEL: addrspacecast_v3p5_to_v3p0:566; CI:       ; %bb.0:567; CI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)568; CI-NEXT:    s_load_dword s4, s[6:7], 0x11569; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v0570; CI-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc571; CI-NEXT:    s_waitcnt lgkmcnt(0)572; CI-NEXT:    v_mov_b32_e32 v5, s4573; CI-NEXT:    v_cndmask_b32_e32 v7, 0, v5, vcc574; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v1575; CI-NEXT:    v_cndmask_b32_e32 v6, 0, v1, vcc576; CI-NEXT:    v_cndmask_b32_e32 v3, 0, v5, vcc577; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v2578; CI-NEXT:    v_cndmask_b32_e32 v4, 0, v2, vcc579; CI-NEXT:    v_cndmask_b32_e32 v5, 0, v5, vcc580; CI-NEXT:    v_mov_b32_e32 v1, v7581; CI-NEXT:    v_mov_b32_e32 v2, v6582; CI-NEXT:    s_setpc_b64 s[30:31]583;584; GFX9-LABEL: addrspacecast_v3p5_to_v3p0:585; GFX9:       ; %bb.0:586; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)587; GFX9-NEXT:    s_mov_b64 s[4:5], src_private_base588; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v0589; GFX9-NEXT:    v_mov_b32_e32 v5, s5590; GFX9-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc591; GFX9-NEXT:    v_cndmask_b32_e32 v7, 0, v5, vcc592; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v1593; GFX9-NEXT:    v_cndmask_b32_e32 v6, 0, v1, vcc594; GFX9-NEXT:    v_cndmask_b32_e32 v3, 0, v5, vcc595; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v2596; GFX9-NEXT:    v_cndmask_b32_e32 v4, 0, v2, vcc597; GFX9-NEXT:    v_cndmask_b32_e32 v5, 0, v5, vcc598; GFX9-NEXT:    v_mov_b32_e32 v1, v7599; GFX9-NEXT:    v_mov_b32_e32 v2, v6600; GFX9-NEXT:    s_setpc_b64 s[30:31]601  %cast = addrspacecast <3 x ptr addrspace(5)> %ptr to <3 x ptr>602  ret <3 x ptr> %cast603}604 605define <4 x ptr> @addrspacecast_v4p5_to_v4p0(<4 x ptr addrspace(5)> %ptr) {606; CI-LABEL: addrspacecast_v4p5_to_v4p0:607; CI:       ; %bb.0:608; CI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)609; CI-NEXT:    s_load_dword s4, s[6:7], 0x11610; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v0611; CI-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc612; CI-NEXT:    s_waitcnt lgkmcnt(0)613; CI-NEXT:    v_mov_b32_e32 v7, s4614; CI-NEXT:    v_cndmask_b32_e32 v10, 0, v7, vcc615; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v1616; CI-NEXT:    v_cndmask_b32_e32 v8, 0, v1, vcc617; CI-NEXT:    v_cndmask_b32_e32 v9, 0, v7, vcc618; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v2619; CI-NEXT:    v_cndmask_b32_e32 v4, 0, v2, vcc620; CI-NEXT:    v_cndmask_b32_e32 v5, 0, v7, vcc621; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v3622; CI-NEXT:    v_cndmask_b32_e32 v6, 0, v3, vcc623; CI-NEXT:    v_cndmask_b32_e32 v7, 0, v7, vcc624; CI-NEXT:    v_mov_b32_e32 v1, v10625; CI-NEXT:    v_mov_b32_e32 v2, v8626; CI-NEXT:    v_mov_b32_e32 v3, v9627; CI-NEXT:    s_setpc_b64 s[30:31]628;629; GFX9-LABEL: addrspacecast_v4p5_to_v4p0:630; GFX9:       ; %bb.0:631; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)632; GFX9-NEXT:    s_mov_b64 s[4:5], src_private_base633; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v0634; GFX9-NEXT:    v_mov_b32_e32 v7, s5635; GFX9-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc636; GFX9-NEXT:    v_cndmask_b32_e32 v10, 0, v7, vcc637; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v1638; GFX9-NEXT:    v_cndmask_b32_e32 v8, 0, v1, vcc639; GFX9-NEXT:    v_cndmask_b32_e32 v9, 0, v7, vcc640; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v2641; GFX9-NEXT:    v_cndmask_b32_e32 v4, 0, v2, vcc642; GFX9-NEXT:    v_cndmask_b32_e32 v5, 0, v7, vcc643; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v3644; GFX9-NEXT:    v_cndmask_b32_e32 v6, 0, v3, vcc645; GFX9-NEXT:    v_cndmask_b32_e32 v7, 0, v7, vcc646; GFX9-NEXT:    v_mov_b32_e32 v1, v10647; GFX9-NEXT:    v_mov_b32_e32 v2, v8648; GFX9-NEXT:    v_mov_b32_e32 v3, v9649; GFX9-NEXT:    s_setpc_b64 s[30:31]650  %cast = addrspacecast <4 x ptr addrspace(5)> %ptr to <4 x ptr>651  ret <4 x ptr> %cast652}653 654define <8 x ptr> @addrspacecast_v8p5_to_v8p0(<8 x ptr addrspace(5)> %ptr) {655; CI-LABEL: addrspacecast_v8p5_to_v8p0:656; CI:       ; %bb.0:657; CI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)658; CI-NEXT:    s_load_dword s4, s[6:7], 0x11659; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v0660; CI-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc661; CI-NEXT:    s_waitcnt lgkmcnt(0)662; CI-NEXT:    v_mov_b32_e32 v15, s4663; CI-NEXT:    v_cndmask_b32_e32 v22, 0, v15, vcc664; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v1665; CI-NEXT:    v_cndmask_b32_e32 v16, 0, v1, vcc666; CI-NEXT:    v_cndmask_b32_e32 v17, 0, v15, vcc667; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v2668; CI-NEXT:    v_cndmask_b32_e32 v18, 0, v2, vcc669; CI-NEXT:    v_cndmask_b32_e32 v19, 0, v15, vcc670; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v3671; CI-NEXT:    v_cndmask_b32_e32 v20, 0, v3, vcc672; CI-NEXT:    v_cndmask_b32_e32 v21, 0, v15, vcc673; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v4674; CI-NEXT:    v_cndmask_b32_e32 v8, 0, v4, vcc675; CI-NEXT:    v_cndmask_b32_e32 v9, 0, v15, vcc676; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v5677; CI-NEXT:    v_cndmask_b32_e32 v10, 0, v5, vcc678; CI-NEXT:    v_cndmask_b32_e32 v11, 0, v15, vcc679; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v6680; CI-NEXT:    v_cndmask_b32_e32 v12, 0, v6, vcc681; CI-NEXT:    v_cndmask_b32_e32 v13, 0, v15, vcc682; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v7683; CI-NEXT:    v_cndmask_b32_e32 v14, 0, v7, vcc684; CI-NEXT:    v_cndmask_b32_e32 v15, 0, v15, vcc685; CI-NEXT:    v_mov_b32_e32 v1, v22686; CI-NEXT:    v_mov_b32_e32 v2, v16687; CI-NEXT:    v_mov_b32_e32 v3, v17688; CI-NEXT:    v_mov_b32_e32 v4, v18689; CI-NEXT:    v_mov_b32_e32 v5, v19690; CI-NEXT:    v_mov_b32_e32 v6, v20691; CI-NEXT:    v_mov_b32_e32 v7, v21692; CI-NEXT:    s_setpc_b64 s[30:31]693;694; GFX9-LABEL: addrspacecast_v8p5_to_v8p0:695; GFX9:       ; %bb.0:696; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)697; GFX9-NEXT:    s_mov_b64 s[4:5], src_private_base698; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v0699; GFX9-NEXT:    v_mov_b32_e32 v15, s5700; GFX9-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc701; GFX9-NEXT:    v_cndmask_b32_e32 v22, 0, v15, vcc702; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v1703; GFX9-NEXT:    v_cndmask_b32_e32 v16, 0, v1, vcc704; GFX9-NEXT:    v_cndmask_b32_e32 v17, 0, v15, vcc705; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v2706; GFX9-NEXT:    v_cndmask_b32_e32 v18, 0, v2, vcc707; GFX9-NEXT:    v_cndmask_b32_e32 v19, 0, v15, vcc708; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v3709; GFX9-NEXT:    v_cndmask_b32_e32 v20, 0, v3, vcc710; GFX9-NEXT:    v_cndmask_b32_e32 v21, 0, v15, vcc711; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v4712; GFX9-NEXT:    v_cndmask_b32_e32 v8, 0, v4, vcc713; GFX9-NEXT:    v_cndmask_b32_e32 v9, 0, v15, vcc714; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v5715; GFX9-NEXT:    v_cndmask_b32_e32 v10, 0, v5, vcc716; GFX9-NEXT:    v_cndmask_b32_e32 v11, 0, v15, vcc717; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v6718; GFX9-NEXT:    v_cndmask_b32_e32 v12, 0, v6, vcc719; GFX9-NEXT:    v_cndmask_b32_e32 v13, 0, v15, vcc720; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v7721; GFX9-NEXT:    v_cndmask_b32_e32 v14, 0, v7, vcc722; GFX9-NEXT:    v_cndmask_b32_e32 v15, 0, v15, vcc723; GFX9-NEXT:    v_mov_b32_e32 v1, v22724; GFX9-NEXT:    v_mov_b32_e32 v2, v16725; GFX9-NEXT:    v_mov_b32_e32 v3, v17726; GFX9-NEXT:    v_mov_b32_e32 v4, v18727; GFX9-NEXT:    v_mov_b32_e32 v5, v19728; GFX9-NEXT:    v_mov_b32_e32 v6, v20729; GFX9-NEXT:    v_mov_b32_e32 v7, v21730; GFX9-NEXT:    s_setpc_b64 s[30:31]731  %cast = addrspacecast <8 x ptr addrspace(5)> %ptr to <8 x ptr>732  ret <8 x ptr> %cast733}734 735define <16 x ptr> @addrspacecast_v16p5_to_v16p0(<16 x ptr addrspace(5)> %ptr) {736; CI-LABEL: addrspacecast_v16p5_to_v16p0:737; CI:       ; %bb.0:738; CI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)739; CI-NEXT:    s_load_dword s4, s[6:7], 0x11740; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v0741; CI-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc742; CI-NEXT:    v_cmp_ne_u32_e64 s[6:7], -1, v5743; CI-NEXT:    v_cmp_ne_u32_e64 s[8:9], -1, v6744; CI-NEXT:    s_waitcnt lgkmcnt(0)745; CI-NEXT:    v_mov_b32_e32 v31, s4746; CI-NEXT:    v_cndmask_b32_e32 v49, 0, v31, vcc747; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v1748; CI-NEXT:    v_cndmask_b32_e32 v34, 0, v1, vcc749; CI-NEXT:    v_cndmask_b32_e32 v39, 0, v31, vcc750; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v2751; CI-NEXT:    v_cndmask_b32_e32 v35, 0, v2, vcc752; CI-NEXT:    v_cndmask_b32_e32 v32, 0, v31, vcc753; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v3754; CI-NEXT:    v_cmp_ne_u32_e64 s[4:5], -1, v4755; CI-NEXT:    v_cmp_ne_u32_e64 s[10:11], -1, v7756; CI-NEXT:    v_cndmask_b32_e32 v36, 0, v3, vcc757; CI-NEXT:    v_cndmask_b32_e64 v48, 0, v4, s[4:5]758; CI-NEXT:    v_cndmask_b32_e64 v37, 0, v5, s[6:7]759; CI-NEXT:    v_cndmask_b32_e64 v33, 0, v6, s[8:9]760; CI-NEXT:    v_cndmask_b32_e64 v38, 0, v7, s[10:11]761; CI-NEXT:    v_cmp_ne_u32_e64 s[12:13], -1, v8762; CI-NEXT:    v_cmp_ne_u32_e64 s[14:15], -1, v9763; CI-NEXT:    v_cmp_ne_u32_e64 s[16:17], -1, v10764; CI-NEXT:    v_cmp_ne_u32_e64 s[18:19], -1, v11765; CI-NEXT:    v_cmp_ne_u32_e64 s[20:21], -1, v12766; CI-NEXT:    v_cmp_ne_u32_e64 s[22:23], -1, v13767; CI-NEXT:    v_cmp_ne_u32_e64 s[24:25], -1, v14768; CI-NEXT:    v_cmp_ne_u32_e64 s[26:27], -1, v15769; CI-NEXT:    v_cndmask_b32_e64 v16, 0, v8, s[12:13]770; CI-NEXT:    v_cndmask_b32_e64 v18, 0, v9, s[14:15]771; CI-NEXT:    v_cndmask_b32_e64 v20, 0, v10, s[16:17]772; CI-NEXT:    v_cndmask_b32_e64 v22, 0, v11, s[18:19]773; CI-NEXT:    v_cndmask_b32_e64 v24, 0, v12, s[20:21]774; CI-NEXT:    v_cndmask_b32_e64 v26, 0, v13, s[22:23]775; CI-NEXT:    v_cndmask_b32_e64 v28, 0, v14, s[24:25]776; CI-NEXT:    v_cndmask_b32_e64 v30, 0, v15, s[26:27]777; CI-NEXT:    v_cndmask_b32_e32 v7, 0, v31, vcc778; CI-NEXT:    v_cndmask_b32_e64 v9, 0, v31, s[4:5]779; CI-NEXT:    v_cndmask_b32_e64 v11, 0, v31, s[6:7]780; CI-NEXT:    v_cndmask_b32_e64 v13, 0, v31, s[8:9]781; CI-NEXT:    v_cndmask_b32_e64 v15, 0, v31, s[10:11]782; CI-NEXT:    v_cndmask_b32_e64 v17, 0, v31, s[12:13]783; CI-NEXT:    v_cndmask_b32_e64 v19, 0, v31, s[14:15]784; CI-NEXT:    v_cndmask_b32_e64 v21, 0, v31, s[16:17]785; CI-NEXT:    v_cndmask_b32_e64 v23, 0, v31, s[18:19]786; CI-NEXT:    v_cndmask_b32_e64 v25, 0, v31, s[20:21]787; CI-NEXT:    v_cndmask_b32_e64 v27, 0, v31, s[22:23]788; CI-NEXT:    v_cndmask_b32_e64 v29, 0, v31, s[24:25]789; CI-NEXT:    v_cndmask_b32_e64 v31, 0, v31, s[26:27]790; CI-NEXT:    v_mov_b32_e32 v1, v49791; CI-NEXT:    v_mov_b32_e32 v2, v34792; CI-NEXT:    v_mov_b32_e32 v3, v39793; CI-NEXT:    v_mov_b32_e32 v4, v35794; CI-NEXT:    v_mov_b32_e32 v5, v32795; CI-NEXT:    v_mov_b32_e32 v6, v36796; CI-NEXT:    v_mov_b32_e32 v8, v48797; CI-NEXT:    v_mov_b32_e32 v10, v37798; CI-NEXT:    v_mov_b32_e32 v12, v33799; CI-NEXT:    v_mov_b32_e32 v14, v38800; CI-NEXT:    s_setpc_b64 s[30:31]801;802; GFX9-LABEL: addrspacecast_v16p5_to_v16p0:803; GFX9:       ; %bb.0:804; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)805; GFX9-NEXT:    s_mov_b64 s[4:5], src_private_base806; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v0807; GFX9-NEXT:    v_mov_b32_e32 v31, s5808; GFX9-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc809; GFX9-NEXT:    v_cndmask_b32_e32 v49, 0, v31, vcc810; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v1811; GFX9-NEXT:    v_cndmask_b32_e32 v34, 0, v1, vcc812; GFX9-NEXT:    v_cndmask_b32_e32 v39, 0, v31, vcc813; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v2814; GFX9-NEXT:    v_cndmask_b32_e32 v35, 0, v2, vcc815; GFX9-NEXT:    v_cndmask_b32_e32 v32, 0, v31, vcc816; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v3817; GFX9-NEXT:    v_cmp_ne_u32_e64 s[4:5], -1, v4818; GFX9-NEXT:    v_cmp_ne_u32_e64 s[6:7], -1, v5819; GFX9-NEXT:    v_cmp_ne_u32_e64 s[8:9], -1, v6820; GFX9-NEXT:    v_cmp_ne_u32_e64 s[10:11], -1, v7821; GFX9-NEXT:    v_cndmask_b32_e32 v36, 0, v3, vcc822; GFX9-NEXT:    v_cndmask_b32_e64 v48, 0, v4, s[4:5]823; GFX9-NEXT:    v_cndmask_b32_e64 v37, 0, v5, s[6:7]824; GFX9-NEXT:    v_cndmask_b32_e64 v33, 0, v6, s[8:9]825; GFX9-NEXT:    v_cndmask_b32_e64 v38, 0, v7, s[10:11]826; GFX9-NEXT:    v_cmp_ne_u32_e64 s[12:13], -1, v8827; GFX9-NEXT:    v_cmp_ne_u32_e64 s[14:15], -1, v9828; GFX9-NEXT:    v_cmp_ne_u32_e64 s[16:17], -1, v10829; GFX9-NEXT:    v_cmp_ne_u32_e64 s[18:19], -1, v11830; GFX9-NEXT:    v_cmp_ne_u32_e64 s[20:21], -1, v12831; GFX9-NEXT:    v_cmp_ne_u32_e64 s[22:23], -1, v13832; GFX9-NEXT:    v_cmp_ne_u32_e64 s[24:25], -1, v14833; GFX9-NEXT:    v_cmp_ne_u32_e64 s[26:27], -1, v15834; GFX9-NEXT:    v_cndmask_b32_e64 v16, 0, v8, s[12:13]835; GFX9-NEXT:    v_cndmask_b32_e64 v18, 0, v9, s[14:15]836; GFX9-NEXT:    v_cndmask_b32_e64 v20, 0, v10, s[16:17]837; GFX9-NEXT:    v_cndmask_b32_e64 v22, 0, v11, s[18:19]838; GFX9-NEXT:    v_cndmask_b32_e64 v24, 0, v12, s[20:21]839; GFX9-NEXT:    v_cndmask_b32_e64 v26, 0, v13, s[22:23]840; GFX9-NEXT:    v_cndmask_b32_e64 v28, 0, v14, s[24:25]841; GFX9-NEXT:    v_cndmask_b32_e64 v30, 0, v15, s[26:27]842; GFX9-NEXT:    v_cndmask_b32_e32 v7, 0, v31, vcc843; GFX9-NEXT:    v_cndmask_b32_e64 v9, 0, v31, s[4:5]844; GFX9-NEXT:    v_cndmask_b32_e64 v11, 0, v31, s[6:7]845; GFX9-NEXT:    v_cndmask_b32_e64 v13, 0, v31, s[8:9]846; GFX9-NEXT:    v_cndmask_b32_e64 v15, 0, v31, s[10:11]847; GFX9-NEXT:    v_cndmask_b32_e64 v17, 0, v31, s[12:13]848; GFX9-NEXT:    v_cndmask_b32_e64 v19, 0, v31, s[14:15]849; GFX9-NEXT:    v_cndmask_b32_e64 v21, 0, v31, s[16:17]850; GFX9-NEXT:    v_cndmask_b32_e64 v23, 0, v31, s[18:19]851; GFX9-NEXT:    v_cndmask_b32_e64 v25, 0, v31, s[20:21]852; GFX9-NEXT:    v_cndmask_b32_e64 v27, 0, v31, s[22:23]853; GFX9-NEXT:    v_cndmask_b32_e64 v29, 0, v31, s[24:25]854; GFX9-NEXT:    v_cndmask_b32_e64 v31, 0, v31, s[26:27]855; GFX9-NEXT:    v_mov_b32_e32 v1, v49856; GFX9-NEXT:    v_mov_b32_e32 v2, v34857; GFX9-NEXT:    v_mov_b32_e32 v3, v39858; GFX9-NEXT:    v_mov_b32_e32 v4, v35859; GFX9-NEXT:    v_mov_b32_e32 v5, v32860; GFX9-NEXT:    v_mov_b32_e32 v6, v36861; GFX9-NEXT:    v_mov_b32_e32 v8, v48862; GFX9-NEXT:    v_mov_b32_e32 v10, v37863; GFX9-NEXT:    v_mov_b32_e32 v12, v33864; GFX9-NEXT:    v_mov_b32_e32 v14, v38865; GFX9-NEXT:    s_setpc_b64 s[30:31]866  %cast = addrspacecast <16 x ptr addrspace(5)> %ptr to <16 x ptr>867  ret <16 x ptr> %cast868}869 870define <2 x ptr addrspace(3)> @addrspacecast_v2p0_to_v2p3(<2 x ptr> %ptr) {871; HSA-LABEL: addrspacecast_v2p0_to_v2p3:872; HSA:       ; %bb.0:873; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)874; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]875; HSA-NEXT:    v_cndmask_b32_e32 v0, -1, v0, vcc876; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]877; HSA-NEXT:    v_cndmask_b32_e32 v1, -1, v2, vcc878; HSA-NEXT:    s_setpc_b64 s[30:31]879  %cast = addrspacecast <2 x ptr> %ptr to <2 x ptr addrspace(3)>880  ret <2 x ptr addrspace(3)> %cast881}882 883define <3 x ptr addrspace(3)> @addrspacecast_v3p0_to_v3p3(<3 x ptr> %ptr) {884; HSA-LABEL: addrspacecast_v3p0_to_v3p3:885; HSA:       ; %bb.0:886; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)887; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]888; HSA-NEXT:    v_cndmask_b32_e32 v0, -1, v0, vcc889; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]890; HSA-NEXT:    v_cndmask_b32_e32 v1, -1, v2, vcc891; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]892; HSA-NEXT:    v_cndmask_b32_e32 v2, -1, v4, vcc893; HSA-NEXT:    s_setpc_b64 s[30:31]894  %cast = addrspacecast <3 x ptr> %ptr to <3 x ptr addrspace(3)>895  ret <3 x ptr addrspace(3)> %cast896}897 898define <4 x ptr addrspace(3)> @addrspacecast_v4p0_to_v4p3(<4 x ptr> %ptr) {899; HSA-LABEL: addrspacecast_v4p0_to_v4p3:900; HSA:       ; %bb.0:901; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)902; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]903; HSA-NEXT:    v_cndmask_b32_e32 v0, -1, v0, vcc904; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]905; HSA-NEXT:    v_cndmask_b32_e32 v1, -1, v2, vcc906; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]907; HSA-NEXT:    v_cndmask_b32_e32 v2, -1, v4, vcc908; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[6:7]909; HSA-NEXT:    v_cndmask_b32_e32 v3, -1, v6, vcc910; HSA-NEXT:    s_setpc_b64 s[30:31]911  %cast = addrspacecast <4 x ptr> %ptr to <4 x ptr addrspace(3)>912  ret <4 x ptr addrspace(3)> %cast913}914 915define <8 x ptr addrspace(3)> @addrspacecast_v8p0_to_v8p3(<8 x ptr> %ptr) {916; HSA-LABEL: addrspacecast_v8p0_to_v8p3:917; HSA:       ; %bb.0:918; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)919; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]920; HSA-NEXT:    v_cndmask_b32_e32 v0, -1, v0, vcc921; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]922; HSA-NEXT:    v_cndmask_b32_e32 v1, -1, v2, vcc923; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]924; HSA-NEXT:    v_cndmask_b32_e32 v2, -1, v4, vcc925; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[6:7]926; HSA-NEXT:    v_cndmask_b32_e32 v3, -1, v6, vcc927; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[8:9]928; HSA-NEXT:    v_cndmask_b32_e32 v4, -1, v8, vcc929; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[10:11]930; HSA-NEXT:    v_cndmask_b32_e32 v5, -1, v10, vcc931; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[12:13]932; HSA-NEXT:    v_cndmask_b32_e32 v6, -1, v12, vcc933; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[14:15]934; HSA-NEXT:    v_cndmask_b32_e32 v7, -1, v14, vcc935; HSA-NEXT:    s_setpc_b64 s[30:31]936  %cast = addrspacecast <8 x ptr> %ptr to <8 x ptr addrspace(3)>937  ret <8 x ptr addrspace(3)> %cast938}939 940define <16 x ptr addrspace(3)> @addrspacecast_v16p0_to_v16p3(<16 x ptr> %ptr) {941; HSA-LABEL: addrspacecast_v16p0_to_v16p3:942; HSA:       ; %bb.0:943; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)944; HSA-NEXT:    buffer_load_dword v31, off, s[0:3], s32945; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]946; HSA-NEXT:    v_cndmask_b32_e32 v0, -1, v0, vcc947; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]948; HSA-NEXT:    v_cndmask_b32_e32 v1, -1, v2, vcc949; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]950; HSA-NEXT:    v_cndmask_b32_e32 v2, -1, v4, vcc951; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[6:7]952; HSA-NEXT:    v_cndmask_b32_e32 v3, -1, v6, vcc953; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[8:9]954; HSA-NEXT:    v_cndmask_b32_e32 v4, -1, v8, vcc955; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[10:11]956; HSA-NEXT:    v_cndmask_b32_e32 v5, -1, v10, vcc957; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[12:13]958; HSA-NEXT:    v_cndmask_b32_e32 v6, -1, v12, vcc959; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[14:15]960; HSA-NEXT:    v_cndmask_b32_e32 v7, -1, v14, vcc961; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[16:17]962; HSA-NEXT:    v_cndmask_b32_e32 v8, -1, v16, vcc963; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[18:19]964; HSA-NEXT:    v_cndmask_b32_e32 v9, -1, v18, vcc965; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[20:21]966; HSA-NEXT:    v_cndmask_b32_e32 v10, -1, v20, vcc967; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[22:23]968; HSA-NEXT:    v_cndmask_b32_e32 v11, -1, v22, vcc969; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[24:25]970; HSA-NEXT:    v_cndmask_b32_e32 v12, -1, v24, vcc971; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[26:27]972; HSA-NEXT:    v_cndmask_b32_e32 v13, -1, v26, vcc973; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[28:29]974; HSA-NEXT:    v_cndmask_b32_e32 v14, -1, v28, vcc975; HSA-NEXT:    s_waitcnt vmcnt(0)976; HSA-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[30:31]977; HSA-NEXT:    v_cndmask_b32_e32 v15, -1, v30, vcc978; HSA-NEXT:    s_setpc_b64 s[30:31]979  %cast = addrspacecast <16 x ptr> %ptr to <16 x ptr addrspace(3)>980  ret <16 x ptr addrspace(3)> %cast981}982 983define <2 x ptr> @addrspacecast_v2p3_to_v2p0(<2 x ptr addrspace(3)> %ptr) {984; CI-LABEL: addrspacecast_v2p3_to_v2p0:985; CI:       ; %bb.0:986; CI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)987; CI-NEXT:    s_load_dword s4, s[6:7], 0x10988; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v0989; CI-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc990; CI-NEXT:    s_waitcnt lgkmcnt(0)991; CI-NEXT:    v_mov_b32_e32 v3, s4992; CI-NEXT:    v_cndmask_b32_e32 v4, 0, v3, vcc993; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v1994; CI-NEXT:    v_cndmask_b32_e32 v2, 0, v1, vcc995; CI-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc996; CI-NEXT:    v_mov_b32_e32 v1, v4997; CI-NEXT:    s_setpc_b64 s[30:31]998;999; GFX9-LABEL: addrspacecast_v2p3_to_v2p0:1000; GFX9:       ; %bb.0:1001; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1002; GFX9-NEXT:    s_mov_b64 s[4:5], src_shared_base1003; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v01004; GFX9-NEXT:    v_mov_b32_e32 v3, s51005; GFX9-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc1006; GFX9-NEXT:    v_cndmask_b32_e32 v4, 0, v3, vcc1007; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v11008; GFX9-NEXT:    v_cndmask_b32_e32 v2, 0, v1, vcc1009; GFX9-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc1010; GFX9-NEXT:    v_mov_b32_e32 v1, v41011; GFX9-NEXT:    s_setpc_b64 s[30:31]1012  %cast = addrspacecast <2 x ptr addrspace(3)> %ptr to <2 x ptr>1013  ret <2 x ptr> %cast1014}1015 1016define <3 x ptr> @addrspacecast_v3p3_to_v3p0(<3 x ptr addrspace(3)> %ptr) {1017; CI-LABEL: addrspacecast_v3p3_to_v3p0:1018; CI:       ; %bb.0:1019; CI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1020; CI-NEXT:    s_load_dword s4, s[6:7], 0x101021; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v01022; CI-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc1023; CI-NEXT:    s_waitcnt lgkmcnt(0)1024; CI-NEXT:    v_mov_b32_e32 v5, s41025; CI-NEXT:    v_cndmask_b32_e32 v7, 0, v5, vcc1026; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v11027; CI-NEXT:    v_cndmask_b32_e32 v6, 0, v1, vcc1028; CI-NEXT:    v_cndmask_b32_e32 v3, 0, v5, vcc1029; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v21030; CI-NEXT:    v_cndmask_b32_e32 v4, 0, v2, vcc1031; CI-NEXT:    v_cndmask_b32_e32 v5, 0, v5, vcc1032; CI-NEXT:    v_mov_b32_e32 v1, v71033; CI-NEXT:    v_mov_b32_e32 v2, v61034; CI-NEXT:    s_setpc_b64 s[30:31]1035;1036; GFX9-LABEL: addrspacecast_v3p3_to_v3p0:1037; GFX9:       ; %bb.0:1038; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1039; GFX9-NEXT:    s_mov_b64 s[4:5], src_shared_base1040; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v01041; GFX9-NEXT:    v_mov_b32_e32 v5, s51042; GFX9-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc1043; GFX9-NEXT:    v_cndmask_b32_e32 v7, 0, v5, vcc1044; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v11045; GFX9-NEXT:    v_cndmask_b32_e32 v6, 0, v1, vcc1046; GFX9-NEXT:    v_cndmask_b32_e32 v3, 0, v5, vcc1047; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v21048; GFX9-NEXT:    v_cndmask_b32_e32 v4, 0, v2, vcc1049; GFX9-NEXT:    v_cndmask_b32_e32 v5, 0, v5, vcc1050; GFX9-NEXT:    v_mov_b32_e32 v1, v71051; GFX9-NEXT:    v_mov_b32_e32 v2, v61052; GFX9-NEXT:    s_setpc_b64 s[30:31]1053  %cast = addrspacecast <3 x ptr addrspace(3)> %ptr to <3 x ptr>1054  ret <3 x ptr> %cast1055}1056 1057define <4 x ptr> @addrspacecast_v4p3_to_v4p0(<4 x ptr addrspace(3)> %ptr) {1058; CI-LABEL: addrspacecast_v4p3_to_v4p0:1059; CI:       ; %bb.0:1060; CI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1061; CI-NEXT:    s_load_dword s4, s[6:7], 0x101062; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v01063; CI-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc1064; CI-NEXT:    s_waitcnt lgkmcnt(0)1065; CI-NEXT:    v_mov_b32_e32 v7, s41066; CI-NEXT:    v_cndmask_b32_e32 v10, 0, v7, vcc1067; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v11068; CI-NEXT:    v_cndmask_b32_e32 v8, 0, v1, vcc1069; CI-NEXT:    v_cndmask_b32_e32 v9, 0, v7, vcc1070; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v21071; CI-NEXT:    v_cndmask_b32_e32 v4, 0, v2, vcc1072; CI-NEXT:    v_cndmask_b32_e32 v5, 0, v7, vcc1073; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v31074; CI-NEXT:    v_cndmask_b32_e32 v6, 0, v3, vcc1075; CI-NEXT:    v_cndmask_b32_e32 v7, 0, v7, vcc1076; CI-NEXT:    v_mov_b32_e32 v1, v101077; CI-NEXT:    v_mov_b32_e32 v2, v81078; CI-NEXT:    v_mov_b32_e32 v3, v91079; CI-NEXT:    s_setpc_b64 s[30:31]1080;1081; GFX9-LABEL: addrspacecast_v4p3_to_v4p0:1082; GFX9:       ; %bb.0:1083; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1084; GFX9-NEXT:    s_mov_b64 s[4:5], src_shared_base1085; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v01086; GFX9-NEXT:    v_mov_b32_e32 v7, s51087; GFX9-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc1088; GFX9-NEXT:    v_cndmask_b32_e32 v10, 0, v7, vcc1089; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v11090; GFX9-NEXT:    v_cndmask_b32_e32 v8, 0, v1, vcc1091; GFX9-NEXT:    v_cndmask_b32_e32 v9, 0, v7, vcc1092; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v21093; GFX9-NEXT:    v_cndmask_b32_e32 v4, 0, v2, vcc1094; GFX9-NEXT:    v_cndmask_b32_e32 v5, 0, v7, vcc1095; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v31096; GFX9-NEXT:    v_cndmask_b32_e32 v6, 0, v3, vcc1097; GFX9-NEXT:    v_cndmask_b32_e32 v7, 0, v7, vcc1098; GFX9-NEXT:    v_mov_b32_e32 v1, v101099; GFX9-NEXT:    v_mov_b32_e32 v2, v81100; GFX9-NEXT:    v_mov_b32_e32 v3, v91101; GFX9-NEXT:    s_setpc_b64 s[30:31]1102  %cast = addrspacecast <4 x ptr addrspace(3)> %ptr to <4 x ptr>1103  ret <4 x ptr> %cast1104}1105 1106define <8 x ptr> @addrspacecast_v8p3_to_v8p0(<8 x ptr addrspace(3)> %ptr) {1107; CI-LABEL: addrspacecast_v8p3_to_v8p0:1108; CI:       ; %bb.0:1109; CI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1110; CI-NEXT:    s_load_dword s4, s[6:7], 0x101111; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v01112; CI-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc1113; CI-NEXT:    s_waitcnt lgkmcnt(0)1114; CI-NEXT:    v_mov_b32_e32 v15, s41115; CI-NEXT:    v_cndmask_b32_e32 v22, 0, v15, vcc1116; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v11117; CI-NEXT:    v_cndmask_b32_e32 v16, 0, v1, vcc1118; CI-NEXT:    v_cndmask_b32_e32 v17, 0, v15, vcc1119; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v21120; CI-NEXT:    v_cndmask_b32_e32 v18, 0, v2, vcc1121; CI-NEXT:    v_cndmask_b32_e32 v19, 0, v15, vcc1122; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v31123; CI-NEXT:    v_cndmask_b32_e32 v20, 0, v3, vcc1124; CI-NEXT:    v_cndmask_b32_e32 v21, 0, v15, vcc1125; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v41126; CI-NEXT:    v_cndmask_b32_e32 v8, 0, v4, vcc1127; CI-NEXT:    v_cndmask_b32_e32 v9, 0, v15, vcc1128; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v51129; CI-NEXT:    v_cndmask_b32_e32 v10, 0, v5, vcc1130; CI-NEXT:    v_cndmask_b32_e32 v11, 0, v15, vcc1131; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v61132; CI-NEXT:    v_cndmask_b32_e32 v12, 0, v6, vcc1133; CI-NEXT:    v_cndmask_b32_e32 v13, 0, v15, vcc1134; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v71135; CI-NEXT:    v_cndmask_b32_e32 v14, 0, v7, vcc1136; CI-NEXT:    v_cndmask_b32_e32 v15, 0, v15, vcc1137; CI-NEXT:    v_mov_b32_e32 v1, v221138; CI-NEXT:    v_mov_b32_e32 v2, v161139; CI-NEXT:    v_mov_b32_e32 v3, v171140; CI-NEXT:    v_mov_b32_e32 v4, v181141; CI-NEXT:    v_mov_b32_e32 v5, v191142; CI-NEXT:    v_mov_b32_e32 v6, v201143; CI-NEXT:    v_mov_b32_e32 v7, v211144; CI-NEXT:    s_setpc_b64 s[30:31]1145;1146; GFX9-LABEL: addrspacecast_v8p3_to_v8p0:1147; GFX9:       ; %bb.0:1148; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1149; GFX9-NEXT:    s_mov_b64 s[4:5], src_shared_base1150; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v01151; GFX9-NEXT:    v_mov_b32_e32 v15, s51152; GFX9-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc1153; GFX9-NEXT:    v_cndmask_b32_e32 v22, 0, v15, vcc1154; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v11155; GFX9-NEXT:    v_cndmask_b32_e32 v16, 0, v1, vcc1156; GFX9-NEXT:    v_cndmask_b32_e32 v17, 0, v15, vcc1157; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v21158; GFX9-NEXT:    v_cndmask_b32_e32 v18, 0, v2, vcc1159; GFX9-NEXT:    v_cndmask_b32_e32 v19, 0, v15, vcc1160; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v31161; GFX9-NEXT:    v_cndmask_b32_e32 v20, 0, v3, vcc1162; GFX9-NEXT:    v_cndmask_b32_e32 v21, 0, v15, vcc1163; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v41164; GFX9-NEXT:    v_cndmask_b32_e32 v8, 0, v4, vcc1165; GFX9-NEXT:    v_cndmask_b32_e32 v9, 0, v15, vcc1166; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v51167; GFX9-NEXT:    v_cndmask_b32_e32 v10, 0, v5, vcc1168; GFX9-NEXT:    v_cndmask_b32_e32 v11, 0, v15, vcc1169; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v61170; GFX9-NEXT:    v_cndmask_b32_e32 v12, 0, v6, vcc1171; GFX9-NEXT:    v_cndmask_b32_e32 v13, 0, v15, vcc1172; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v71173; GFX9-NEXT:    v_cndmask_b32_e32 v14, 0, v7, vcc1174; GFX9-NEXT:    v_cndmask_b32_e32 v15, 0, v15, vcc1175; GFX9-NEXT:    v_mov_b32_e32 v1, v221176; GFX9-NEXT:    v_mov_b32_e32 v2, v161177; GFX9-NEXT:    v_mov_b32_e32 v3, v171178; GFX9-NEXT:    v_mov_b32_e32 v4, v181179; GFX9-NEXT:    v_mov_b32_e32 v5, v191180; GFX9-NEXT:    v_mov_b32_e32 v6, v201181; GFX9-NEXT:    v_mov_b32_e32 v7, v211182; GFX9-NEXT:    s_setpc_b64 s[30:31]1183  %cast = addrspacecast <8 x ptr addrspace(3)> %ptr to <8 x ptr>1184  ret <8 x ptr> %cast1185}1186 1187define <16 x ptr> @addrspacecast_v16p3_to_v16p0(<16 x ptr addrspace(3)> %ptr) {1188; CI-LABEL: addrspacecast_v16p3_to_v16p0:1189; CI:       ; %bb.0:1190; CI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1191; CI-NEXT:    s_load_dword s4, s[6:7], 0x101192; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v01193; CI-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc1194; CI-NEXT:    v_cmp_ne_u32_e64 s[6:7], -1, v51195; CI-NEXT:    v_cmp_ne_u32_e64 s[8:9], -1, v61196; CI-NEXT:    s_waitcnt lgkmcnt(0)1197; CI-NEXT:    v_mov_b32_e32 v31, s41198; CI-NEXT:    v_cndmask_b32_e32 v49, 0, v31, vcc1199; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v11200; CI-NEXT:    v_cndmask_b32_e32 v34, 0, v1, vcc1201; CI-NEXT:    v_cndmask_b32_e32 v39, 0, v31, vcc1202; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v21203; CI-NEXT:    v_cndmask_b32_e32 v35, 0, v2, vcc1204; CI-NEXT:    v_cndmask_b32_e32 v32, 0, v31, vcc1205; CI-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v31206; CI-NEXT:    v_cmp_ne_u32_e64 s[4:5], -1, v41207; CI-NEXT:    v_cmp_ne_u32_e64 s[10:11], -1, v71208; CI-NEXT:    v_cndmask_b32_e32 v36, 0, v3, vcc1209; CI-NEXT:    v_cndmask_b32_e64 v48, 0, v4, s[4:5]1210; CI-NEXT:    v_cndmask_b32_e64 v37, 0, v5, s[6:7]1211; CI-NEXT:    v_cndmask_b32_e64 v33, 0, v6, s[8:9]1212; CI-NEXT:    v_cndmask_b32_e64 v38, 0, v7, s[10:11]1213; CI-NEXT:    v_cmp_ne_u32_e64 s[12:13], -1, v81214; CI-NEXT:    v_cmp_ne_u32_e64 s[14:15], -1, v91215; CI-NEXT:    v_cmp_ne_u32_e64 s[16:17], -1, v101216; CI-NEXT:    v_cmp_ne_u32_e64 s[18:19], -1, v111217; CI-NEXT:    v_cmp_ne_u32_e64 s[20:21], -1, v121218; CI-NEXT:    v_cmp_ne_u32_e64 s[22:23], -1, v131219; CI-NEXT:    v_cmp_ne_u32_e64 s[24:25], -1, v141220; CI-NEXT:    v_cmp_ne_u32_e64 s[26:27], -1, v151221; CI-NEXT:    v_cndmask_b32_e64 v16, 0, v8, s[12:13]1222; CI-NEXT:    v_cndmask_b32_e64 v18, 0, v9, s[14:15]1223; CI-NEXT:    v_cndmask_b32_e64 v20, 0, v10, s[16:17]1224; CI-NEXT:    v_cndmask_b32_e64 v22, 0, v11, s[18:19]1225; CI-NEXT:    v_cndmask_b32_e64 v24, 0, v12, s[20:21]1226; CI-NEXT:    v_cndmask_b32_e64 v26, 0, v13, s[22:23]1227; CI-NEXT:    v_cndmask_b32_e64 v28, 0, v14, s[24:25]1228; CI-NEXT:    v_cndmask_b32_e64 v30, 0, v15, s[26:27]1229; CI-NEXT:    v_cndmask_b32_e32 v7, 0, v31, vcc1230; CI-NEXT:    v_cndmask_b32_e64 v9, 0, v31, s[4:5]1231; CI-NEXT:    v_cndmask_b32_e64 v11, 0, v31, s[6:7]1232; CI-NEXT:    v_cndmask_b32_e64 v13, 0, v31, s[8:9]1233; CI-NEXT:    v_cndmask_b32_e64 v15, 0, v31, s[10:11]1234; CI-NEXT:    v_cndmask_b32_e64 v17, 0, v31, s[12:13]1235; CI-NEXT:    v_cndmask_b32_e64 v19, 0, v31, s[14:15]1236; CI-NEXT:    v_cndmask_b32_e64 v21, 0, v31, s[16:17]1237; CI-NEXT:    v_cndmask_b32_e64 v23, 0, v31, s[18:19]1238; CI-NEXT:    v_cndmask_b32_e64 v25, 0, v31, s[20:21]1239; CI-NEXT:    v_cndmask_b32_e64 v27, 0, v31, s[22:23]1240; CI-NEXT:    v_cndmask_b32_e64 v29, 0, v31, s[24:25]1241; CI-NEXT:    v_cndmask_b32_e64 v31, 0, v31, s[26:27]1242; CI-NEXT:    v_mov_b32_e32 v1, v491243; CI-NEXT:    v_mov_b32_e32 v2, v341244; CI-NEXT:    v_mov_b32_e32 v3, v391245; CI-NEXT:    v_mov_b32_e32 v4, v351246; CI-NEXT:    v_mov_b32_e32 v5, v321247; CI-NEXT:    v_mov_b32_e32 v6, v361248; CI-NEXT:    v_mov_b32_e32 v8, v481249; CI-NEXT:    v_mov_b32_e32 v10, v371250; CI-NEXT:    v_mov_b32_e32 v12, v331251; CI-NEXT:    v_mov_b32_e32 v14, v381252; CI-NEXT:    s_setpc_b64 s[30:31]1253;1254; GFX9-LABEL: addrspacecast_v16p3_to_v16p0:1255; GFX9:       ; %bb.0:1256; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1257; GFX9-NEXT:    s_mov_b64 s[4:5], src_shared_base1258; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v01259; GFX9-NEXT:    v_mov_b32_e32 v31, s51260; GFX9-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc1261; GFX9-NEXT:    v_cndmask_b32_e32 v49, 0, v31, vcc1262; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v11263; GFX9-NEXT:    v_cndmask_b32_e32 v34, 0, v1, vcc1264; GFX9-NEXT:    v_cndmask_b32_e32 v39, 0, v31, vcc1265; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v21266; GFX9-NEXT:    v_cndmask_b32_e32 v35, 0, v2, vcc1267; GFX9-NEXT:    v_cndmask_b32_e32 v32, 0, v31, vcc1268; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, -1, v31269; GFX9-NEXT:    v_cmp_ne_u32_e64 s[4:5], -1, v41270; GFX9-NEXT:    v_cmp_ne_u32_e64 s[6:7], -1, v51271; GFX9-NEXT:    v_cmp_ne_u32_e64 s[8:9], -1, v61272; GFX9-NEXT:    v_cmp_ne_u32_e64 s[10:11], -1, v71273; GFX9-NEXT:    v_cndmask_b32_e32 v36, 0, v3, vcc1274; GFX9-NEXT:    v_cndmask_b32_e64 v48, 0, v4, s[4:5]1275; GFX9-NEXT:    v_cndmask_b32_e64 v37, 0, v5, s[6:7]1276; GFX9-NEXT:    v_cndmask_b32_e64 v33, 0, v6, s[8:9]1277; GFX9-NEXT:    v_cndmask_b32_e64 v38, 0, v7, s[10:11]1278; GFX9-NEXT:    v_cmp_ne_u32_e64 s[12:13], -1, v81279; GFX9-NEXT:    v_cmp_ne_u32_e64 s[14:15], -1, v91280; GFX9-NEXT:    v_cmp_ne_u32_e64 s[16:17], -1, v101281; GFX9-NEXT:    v_cmp_ne_u32_e64 s[18:19], -1, v111282; GFX9-NEXT:    v_cmp_ne_u32_e64 s[20:21], -1, v121283; GFX9-NEXT:    v_cmp_ne_u32_e64 s[22:23], -1, v131284; GFX9-NEXT:    v_cmp_ne_u32_e64 s[24:25], -1, v141285; GFX9-NEXT:    v_cmp_ne_u32_e64 s[26:27], -1, v151286; GFX9-NEXT:    v_cndmask_b32_e64 v16, 0, v8, s[12:13]1287; GFX9-NEXT:    v_cndmask_b32_e64 v18, 0, v9, s[14:15]1288; GFX9-NEXT:    v_cndmask_b32_e64 v20, 0, v10, s[16:17]1289; GFX9-NEXT:    v_cndmask_b32_e64 v22, 0, v11, s[18:19]1290; GFX9-NEXT:    v_cndmask_b32_e64 v24, 0, v12, s[20:21]1291; GFX9-NEXT:    v_cndmask_b32_e64 v26, 0, v13, s[22:23]1292; GFX9-NEXT:    v_cndmask_b32_e64 v28, 0, v14, s[24:25]1293; GFX9-NEXT:    v_cndmask_b32_e64 v30, 0, v15, s[26:27]1294; GFX9-NEXT:    v_cndmask_b32_e32 v7, 0, v31, vcc1295; GFX9-NEXT:    v_cndmask_b32_e64 v9, 0, v31, s[4:5]1296; GFX9-NEXT:    v_cndmask_b32_e64 v11, 0, v31, s[6:7]1297; GFX9-NEXT:    v_cndmask_b32_e64 v13, 0, v31, s[8:9]1298; GFX9-NEXT:    v_cndmask_b32_e64 v15, 0, v31, s[10:11]1299; GFX9-NEXT:    v_cndmask_b32_e64 v17, 0, v31, s[12:13]1300; GFX9-NEXT:    v_cndmask_b32_e64 v19, 0, v31, s[14:15]1301; GFX9-NEXT:    v_cndmask_b32_e64 v21, 0, v31, s[16:17]1302; GFX9-NEXT:    v_cndmask_b32_e64 v23, 0, v31, s[18:19]1303; GFX9-NEXT:    v_cndmask_b32_e64 v25, 0, v31, s[20:21]1304; GFX9-NEXT:    v_cndmask_b32_e64 v27, 0, v31, s[22:23]1305; GFX9-NEXT:    v_cndmask_b32_e64 v29, 0, v31, s[24:25]1306; GFX9-NEXT:    v_cndmask_b32_e64 v31, 0, v31, s[26:27]1307; GFX9-NEXT:    v_mov_b32_e32 v1, v491308; GFX9-NEXT:    v_mov_b32_e32 v2, v341309; GFX9-NEXT:    v_mov_b32_e32 v3, v391310; GFX9-NEXT:    v_mov_b32_e32 v4, v351311; GFX9-NEXT:    v_mov_b32_e32 v5, v321312; GFX9-NEXT:    v_mov_b32_e32 v6, v361313; GFX9-NEXT:    v_mov_b32_e32 v8, v481314; GFX9-NEXT:    v_mov_b32_e32 v10, v371315; GFX9-NEXT:    v_mov_b32_e32 v12, v331316; GFX9-NEXT:    v_mov_b32_e32 v14, v381317; GFX9-NEXT:    s_setpc_b64 s[30:31]1318  %cast = addrspacecast <16 x ptr addrspace(3)> %ptr to <16 x ptr>1319  ret <16 x ptr> %cast1320}1321 1322define <2 x ptr addrspace(1)> @addrspacecast_v2p0_to_v2p1(<2 x ptr> %ptr) {1323; HSA-LABEL: addrspacecast_v2p0_to_v2p1:1324; HSA:       ; %bb.0:1325; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1326; HSA-NEXT:    s_setpc_b64 s[30:31]1327  %cast = addrspacecast <2 x ptr> %ptr to <2 x ptr addrspace(1)>1328  ret <2 x ptr addrspace(1)> %cast1329}1330 1331define <3 x ptr addrspace(1)> @addrspacecast_v3p0_to_v3p1(<3 x ptr> %ptr) {1332; HSA-LABEL: addrspacecast_v3p0_to_v3p1:1333; HSA:       ; %bb.0:1334; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1335; HSA-NEXT:    s_setpc_b64 s[30:31]1336  %cast = addrspacecast <3 x ptr> %ptr to <3 x ptr addrspace(1)>1337  ret <3 x ptr addrspace(1)> %cast1338}1339 1340define <4 x ptr addrspace(1)> @addrspacecast_v4p0_to_v4p1(<4 x ptr> %ptr) {1341; HSA-LABEL: addrspacecast_v4p0_to_v4p1:1342; HSA:       ; %bb.0:1343; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1344; HSA-NEXT:    s_setpc_b64 s[30:31]1345  %cast = addrspacecast <4 x ptr> %ptr to <4 x ptr addrspace(1)>1346  ret <4 x ptr addrspace(1)> %cast1347}1348 1349define <8 x ptr addrspace(1)> @addrspacecast_v8p0_to_v8p1(<8 x ptr> %ptr) {1350; HSA-LABEL: addrspacecast_v8p0_to_v8p1:1351; HSA:       ; %bb.0:1352; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1353; HSA-NEXT:    s_setpc_b64 s[30:31]1354  %cast = addrspacecast <8 x ptr> %ptr to <8 x ptr addrspace(1)>1355  ret <8 x ptr addrspace(1)> %cast1356}1357 1358define <16 x ptr addrspace(1)> @addrspacecast_v16p0_to_v16p1(<16 x ptr> %ptr) {1359; HSA-LABEL: addrspacecast_v16p0_to_v16p1:1360; HSA:       ; %bb.0:1361; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1362; HSA-NEXT:    buffer_load_dword v31, off, s[0:3], s321363; HSA-NEXT:    s_waitcnt vmcnt(0)1364; HSA-NEXT:    s_setpc_b64 s[30:31]1365  %cast = addrspacecast <16 x ptr> %ptr to <16 x ptr addrspace(1)>1366  ret <16 x ptr addrspace(1)> %cast1367}1368 1369define <2 x ptr> @addrspacecast_v2p1_to_v2p0(<2 x ptr addrspace(1)> %ptr) {1370; HSA-LABEL: addrspacecast_v2p1_to_v2p0:1371; HSA:       ; %bb.0:1372; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1373; HSA-NEXT:    s_setpc_b64 s[30:31]1374  %cast = addrspacecast <2 x ptr addrspace(1)> %ptr to <2 x ptr>1375  ret <2 x ptr> %cast1376}1377 1378define <1 x ptr> @addrspacecast_v1p1_to_v1p0(<1 x ptr addrspace(1)> %ptr) {1379; HSA-LABEL: addrspacecast_v1p1_to_v1p0:1380; HSA:       ; %bb.0:1381; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1382; HSA-NEXT:    s_setpc_b64 s[30:31]1383  %cast = addrspacecast <1 x ptr addrspace(1)> %ptr to <1 x ptr>1384  ret <1 x ptr> %cast1385}1386 1387define <4 x ptr> @addrspacecast_v4p1_to_v4p0(<4 x ptr addrspace(1)> %ptr) {1388; HSA-LABEL: addrspacecast_v4p1_to_v4p0:1389; HSA:       ; %bb.0:1390; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1391; HSA-NEXT:    s_setpc_b64 s[30:31]1392  %cast = addrspacecast <4 x ptr addrspace(1)> %ptr to <4 x ptr>1393  ret <4 x ptr> %cast1394}1395 1396define <8 x ptr> @addrspacecast_v8p1_to_v8p0(<8 x ptr addrspace(1)> %ptr) {1397; HSA-LABEL: addrspacecast_v8p1_to_v8p0:1398; HSA:       ; %bb.0:1399; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1400; HSA-NEXT:    s_setpc_b64 s[30:31]1401  %cast = addrspacecast <8 x ptr addrspace(1)> %ptr to <8 x ptr>1402  ret <8 x ptr> %cast1403}1404 1405define <16 x ptr> @addrspacecast_v16p1_to_v16p0(<16 x ptr addrspace(1)> %ptr) {1406; HSA-LABEL: addrspacecast_v16p1_to_v16p0:1407; HSA:       ; %bb.0:1408; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1409; HSA-NEXT:    buffer_load_dword v31, off, s[0:3], s321410; HSA-NEXT:    s_waitcnt vmcnt(0)1411; HSA-NEXT:    s_setpc_b64 s[30:31]1412  %cast = addrspacecast <16 x ptr addrspace(1)> %ptr to <16 x ptr>1413  ret <16 x ptr> %cast1414}1415 1416define <2 x ptr addrspace(6)> @addrspacecast_v2p0_to_v2p6(<2 x ptr> %ptr) {1417; HSA-LABEL: addrspacecast_v2p0_to_v2p6:1418; HSA:       ; %bb.0:1419; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1420; HSA-NEXT:    v_mov_b32_e32 v1, v21421; HSA-NEXT:    s_setpc_b64 s[30:31]1422  %cast = addrspacecast <2 x ptr> %ptr to <2 x ptr addrspace(6)>1423  ret <2 x ptr addrspace(6)> %cast1424}1425 1426define <3 x ptr addrspace(6)> @addrspacecast_v3p0_to_v3p6(<3 x ptr> %ptr) {1427; HSA-LABEL: addrspacecast_v3p0_to_v3p6:1428; HSA:       ; %bb.0:1429; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1430; HSA-NEXT:    v_mov_b32_e32 v1, v21431; HSA-NEXT:    v_mov_b32_e32 v2, v41432; HSA-NEXT:    s_setpc_b64 s[30:31]1433  %cast = addrspacecast <3 x ptr> %ptr to <3 x ptr addrspace(6)>1434  ret <3 x ptr addrspace(6)> %cast1435}1436 1437define <4 x ptr addrspace(6)> @addrspacecast_v4p0_to_v4p6(<4 x ptr> %ptr) {1438; HSA-LABEL: addrspacecast_v4p0_to_v4p6:1439; HSA:       ; %bb.0:1440; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1441; HSA-NEXT:    v_mov_b32_e32 v3, v61442; HSA-NEXT:    v_mov_b32_e32 v1, v21443; HSA-NEXT:    v_mov_b32_e32 v2, v41444; HSA-NEXT:    s_setpc_b64 s[30:31]1445  %cast = addrspacecast <4 x ptr> %ptr to <4 x ptr addrspace(6)>1446  ret <4 x ptr addrspace(6)> %cast1447}1448 1449define <8 x ptr addrspace(6)> @addrspacecast_v8p0_to_v8p6(<8 x ptr> %ptr) {1450; HSA-LABEL: addrspacecast_v8p0_to_v8p6:1451; HSA:       ; %bb.0:1452; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1453; HSA-NEXT:    v_mov_b32_e32 v7, v141454; HSA-NEXT:    v_mov_b32_e32 v5, v101455; HSA-NEXT:    v_mov_b32_e32 v3, v61456; HSA-NEXT:    v_mov_b32_e32 v1, v21457; HSA-NEXT:    v_mov_b32_e32 v2, v41458; HSA-NEXT:    v_mov_b32_e32 v4, v81459; HSA-NEXT:    v_mov_b32_e32 v6, v121460; HSA-NEXT:    s_setpc_b64 s[30:31]1461  %cast = addrspacecast <8 x ptr> %ptr to <8 x ptr addrspace(6)>1462  ret <8 x ptr addrspace(6)> %cast1463}1464 1465define <16 x ptr addrspace(6)> @addrspacecast_v16p0_to_v16p6(<16 x ptr> %ptr) {1466; HSA-LABEL: addrspacecast_v16p0_to_v16p6:1467; HSA:       ; %bb.0:1468; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1469; HSA-NEXT:    v_mov_b32_e32 v15, v301470; HSA-NEXT:    v_mov_b32_e32 v13, v261471; HSA-NEXT:    v_mov_b32_e32 v11, v221472; HSA-NEXT:    v_mov_b32_e32 v9, v181473; HSA-NEXT:    v_mov_b32_e32 v7, v141474; HSA-NEXT:    v_mov_b32_e32 v5, v101475; HSA-NEXT:    v_mov_b32_e32 v3, v61476; HSA-NEXT:    v_mov_b32_e32 v1, v21477; HSA-NEXT:    v_mov_b32_e32 v2, v41478; HSA-NEXT:    v_mov_b32_e32 v4, v81479; HSA-NEXT:    v_mov_b32_e32 v6, v121480; HSA-NEXT:    v_mov_b32_e32 v8, v161481; HSA-NEXT:    v_mov_b32_e32 v10, v201482; HSA-NEXT:    v_mov_b32_e32 v12, v241483; HSA-NEXT:    v_mov_b32_e32 v14, v281484; HSA-NEXT:    s_setpc_b64 s[30:31]1485  %cast = addrspacecast <16 x ptr> %ptr to <16 x ptr addrspace(6)>1486  ret <16 x ptr addrspace(6)> %cast1487}1488 1489define <2 x ptr> @addrspacecast_v2p6_to_v2p0(<2 x ptr addrspace(6)> %ptr) {1490; HSA-LABEL: addrspacecast_v2p6_to_v2p0:1491; HSA:       ; %bb.0:1492; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1493; HSA-NEXT:    v_mov_b32_e32 v2, v11494; HSA-NEXT:    v_mov_b32_e32 v1, 01495; HSA-NEXT:    v_mov_b32_e32 v3, 01496; HSA-NEXT:    s_setpc_b64 s[30:31]1497  %cast = addrspacecast <2 x ptr addrspace(6)> %ptr to <2 x ptr>1498  ret <2 x ptr> %cast1499}1500 1501define <1 x ptr> @addrspacecast_v1p6_to_v1p0(<1 x ptr addrspace(6)> %ptr) {1502; HSA-LABEL: addrspacecast_v1p6_to_v1p0:1503; HSA:       ; %bb.0:1504; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1505; HSA-NEXT:    v_mov_b32_e32 v1, 01506; HSA-NEXT:    s_setpc_b64 s[30:31]1507  %cast = addrspacecast <1 x ptr addrspace(6)> %ptr to <1 x ptr>1508  ret <1 x ptr> %cast1509}1510 1511define <4 x ptr> @addrspacecast_v4p6_to_v4p0(<4 x ptr addrspace(6)> %ptr) {1512; HSA-LABEL: addrspacecast_v4p6_to_v4p0:1513; HSA:       ; %bb.0:1514; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1515; HSA-NEXT:    v_mov_b32_e32 v6, v31516; HSA-NEXT:    v_mov_b32_e32 v4, v21517; HSA-NEXT:    v_mov_b32_e32 v2, v11518; HSA-NEXT:    v_mov_b32_e32 v1, 01519; HSA-NEXT:    v_mov_b32_e32 v3, 01520; HSA-NEXT:    v_mov_b32_e32 v5, 01521; HSA-NEXT:    v_mov_b32_e32 v7, 01522; HSA-NEXT:    s_setpc_b64 s[30:31]1523  %cast = addrspacecast <4 x ptr addrspace(6)> %ptr to <4 x ptr>1524  ret <4 x ptr> %cast1525}1526 1527define <8 x ptr> @addrspacecast_v8p6_to_v8p0(<8 x ptr addrspace(6)> %ptr) {1528; HSA-LABEL: addrspacecast_v8p6_to_v8p0:1529; HSA:       ; %bb.0:1530; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1531; HSA-NEXT:    v_mov_b32_e32 v14, v71532; HSA-NEXT:    v_mov_b32_e32 v12, v61533; HSA-NEXT:    v_mov_b32_e32 v10, v51534; HSA-NEXT:    v_mov_b32_e32 v8, v41535; HSA-NEXT:    v_mov_b32_e32 v6, v31536; HSA-NEXT:    v_mov_b32_e32 v4, v21537; HSA-NEXT:    v_mov_b32_e32 v2, v11538; HSA-NEXT:    v_mov_b32_e32 v1, 01539; HSA-NEXT:    v_mov_b32_e32 v3, 01540; HSA-NEXT:    v_mov_b32_e32 v5, 01541; HSA-NEXT:    v_mov_b32_e32 v7, 01542; HSA-NEXT:    v_mov_b32_e32 v9, 01543; HSA-NEXT:    v_mov_b32_e32 v11, 01544; HSA-NEXT:    v_mov_b32_e32 v13, 01545; HSA-NEXT:    v_mov_b32_e32 v15, 01546; HSA-NEXT:    s_setpc_b64 s[30:31]1547  %cast = addrspacecast <8 x ptr addrspace(6)> %ptr to <8 x ptr>1548  ret <8 x ptr> %cast1549}1550 1551define <16 x ptr> @addrspacecast_v16p6_to_v16p0(<16 x ptr addrspace(6)> %ptr) {1552; HSA-LABEL: addrspacecast_v16p6_to_v16p0:1553; HSA:       ; %bb.0:1554; HSA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1555; HSA-NEXT:    v_mov_b32_e32 v28, v141556; HSA-NEXT:    v_mov_b32_e32 v24, v121557; HSA-NEXT:    v_mov_b32_e32 v20, v101558; HSA-NEXT:    v_mov_b32_e32 v16, v81559; HSA-NEXT:    v_mov_b32_e32 v14, v71560; HSA-NEXT:    v_mov_b32_e32 v12, v61561; HSA-NEXT:    v_mov_b32_e32 v10, v51562; HSA-NEXT:    v_mov_b32_e32 v8, v41563; HSA-NEXT:    v_mov_b32_e32 v6, v31564; HSA-NEXT:    v_mov_b32_e32 v4, v21565; HSA-NEXT:    v_mov_b32_e32 v2, v11566; HSA-NEXT:    v_mov_b32_e32 v1, 01567; HSA-NEXT:    v_mov_b32_e32 v3, 01568; HSA-NEXT:    v_mov_b32_e32 v5, 01569; HSA-NEXT:    v_mov_b32_e32 v7, 01570; HSA-NEXT:    v_mov_b32_e32 v18, v91571; HSA-NEXT:    v_mov_b32_e32 v22, v111572; HSA-NEXT:    v_mov_b32_e32 v26, v131573; HSA-NEXT:    v_mov_b32_e32 v30, v151574; HSA-NEXT:    v_mov_b32_e32 v9, 01575; HSA-NEXT:    v_mov_b32_e32 v11, 01576; HSA-NEXT:    v_mov_b32_e32 v13, 01577; HSA-NEXT:    v_mov_b32_e32 v15, 01578; HSA-NEXT:    v_mov_b32_e32 v17, 01579; HSA-NEXT:    v_mov_b32_e32 v19, 01580; HSA-NEXT:    v_mov_b32_e32 v21, 01581; HSA-NEXT:    v_mov_b32_e32 v23, 01582; HSA-NEXT:    v_mov_b32_e32 v25, 01583; HSA-NEXT:    v_mov_b32_e32 v27, 01584; HSA-NEXT:    v_mov_b32_e32 v29, 01585; HSA-NEXT:    v_mov_b32_e32 v31, 01586; HSA-NEXT:    s_setpc_b64 s[30:31]1587  %cast = addrspacecast <16 x ptr addrspace(6)> %ptr to <16 x ptr>1588  ret <16 x ptr> %cast1589}1590 1591declare void @llvm.amdgcn.s.barrier() #11592declare i32 @llvm.amdgcn.workitem.id.x() #21593 1594attributes #0 = { nounwind }1595attributes #1 = { nounwind convergent }1596attributes #2 = { nounwind readnone }1597attributes #3 = { nounwind "amdgpu-32bit-address-high-bits"="0xffff8000" }1598 1599!llvm.module.flags = !{!0}1600!0 = !{i32 1, !"amdhsa_code_object_version", i32 400}1601