brintos

brintos / llvm-project-archived public Read only

0
0
Text · 64.8 KiB · b75eb73 Raw
1666 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -amdgpu-atomic-optimizer-strategy=None < %s | FileCheck -check-prefix=GFX6 %s3; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=hawaii -amdgpu-atomic-optimizer-strategy=None < %s | FileCheck -check-prefix=GFX7 %s4; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 -amdgpu-atomic-optimizer-strategy=None < %s | FileCheck -check-prefix=GFX12 %s5 6; Test end to end matching of addressing modes when MUBUF is used for7; global memory.8 9define amdgpu_ps void @mubuf_store_sgpr_ptr(ptr addrspace(1) inreg %ptr) {10; GFX6-LABEL: mubuf_store_sgpr_ptr:11; GFX6:       ; %bb.0:12; GFX6-NEXT:    s_mov_b32 s0, s213; GFX6-NEXT:    s_mov_b32 s1, s314; GFX6-NEXT:    v_mov_b32_e32 v0, 015; GFX6-NEXT:    s_mov_b32 s2, -116; GFX6-NEXT:    s_mov_b32 s3, 0xf00017; GFX6-NEXT:    buffer_store_dword v0, off, s[0:3], 018; GFX6-NEXT:    s_endpgm19;20; GFX7-LABEL: mubuf_store_sgpr_ptr:21; GFX7:       ; %bb.0:22; GFX7-NEXT:    s_mov_b32 s0, s223; GFX7-NEXT:    s_mov_b32 s1, s324; GFX7-NEXT:    v_mov_b32_e32 v0, 025; GFX7-NEXT:    s_mov_b32 s2, -126; GFX7-NEXT:    s_mov_b32 s3, 0xf00027; GFX7-NEXT:    buffer_store_dword v0, off, s[0:3], 028; GFX7-NEXT:    s_endpgm29;30; GFX12-LABEL: mubuf_store_sgpr_ptr:31; GFX12:       ; %bb.0:32; GFX12-NEXT:    v_mov_b32_e32 v0, 033; GFX12-NEXT:    global_store_b32 v0, v0, s[2:3]34; GFX12-NEXT:    s_endpgm35  store i32 0, ptr addrspace(1) %ptr36  ret void37}38 39define amdgpu_ps void @mubuf_store_sgpr_ptr_offset4095(ptr addrspace(1) inreg %ptr) {40; GFX6-LABEL: mubuf_store_sgpr_ptr_offset4095:41; GFX6:       ; %bb.0:42; GFX6-NEXT:    s_mov_b32 s0, s243; GFX6-NEXT:    s_mov_b32 s1, s344; GFX6-NEXT:    v_mov_b32_e32 v0, 045; GFX6-NEXT:    s_mov_b32 s2, -146; GFX6-NEXT:    s_mov_b32 s3, 0xf00047; GFX6-NEXT:    s_movk_i32 s4, 0x3ffc48; GFX6-NEXT:    buffer_store_dword v0, off, s[0:3], s449; GFX6-NEXT:    s_endpgm50;51; GFX7-LABEL: mubuf_store_sgpr_ptr_offset4095:52; GFX7:       ; %bb.0:53; GFX7-NEXT:    s_mov_b32 s0, s254; GFX7-NEXT:    s_mov_b32 s1, s355; GFX7-NEXT:    v_mov_b32_e32 v0, 056; GFX7-NEXT:    s_mov_b32 s2, -157; GFX7-NEXT:    s_mov_b32 s3, 0xf00058; GFX7-NEXT:    s_movk_i32 s4, 0x3ffc59; GFX7-NEXT:    buffer_store_dword v0, off, s[0:3], s460; GFX7-NEXT:    s_endpgm61;62; GFX12-LABEL: mubuf_store_sgpr_ptr_offset4095:63; GFX12:       ; %bb.0:64; GFX12-NEXT:    v_mov_b32_e32 v0, 065; GFX12-NEXT:    global_store_b32 v0, v0, s[2:3] offset:1638066; GFX12-NEXT:    s_endpgm67  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 409568  store i32 0, ptr addrspace(1) %gep69  ret void70}71 72define amdgpu_ps void @mubuf_store_sgpr_ptr_offset4294967296(ptr addrspace(1) inreg %ptr) {73; GFX6-LABEL: mubuf_store_sgpr_ptr_offset4294967296:74; GFX6:       ; %bb.0:75; GFX6-NEXT:    v_mov_b32_e32 v0, 076; GFX6-NEXT:    s_mov_b32 s0, s277; GFX6-NEXT:    s_mov_b32 s1, s378; GFX6-NEXT:    s_mov_b32 s2, 079; GFX6-NEXT:    v_mov_b32_e32 v2, 080; GFX6-NEXT:    v_mov_b32_e32 v1, 481; GFX6-NEXT:    s_mov_b32 s3, 0xf00082; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr6483; GFX6-NEXT:    s_endpgm84;85; GFX7-LABEL: mubuf_store_sgpr_ptr_offset4294967296:86; GFX7:       ; %bb.0:87; GFX7-NEXT:    v_mov_b32_e32 v0, 088; GFX7-NEXT:    s_mov_b32 s0, s289; GFX7-NEXT:    s_mov_b32 s1, s390; GFX7-NEXT:    s_mov_b32 s2, 091; GFX7-NEXT:    v_mov_b32_e32 v2, 092; GFX7-NEXT:    v_mov_b32_e32 v1, 493; GFX7-NEXT:    s_mov_b32 s3, 0xf00094; GFX7-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr6495; GFX7-NEXT:    s_endpgm96;97; GFX12-LABEL: mubuf_store_sgpr_ptr_offset4294967296:98; GFX12:       ; %bb.0:99; GFX12-NEXT:    s_add_co_u32 s0, s2, 0100; GFX12-NEXT:    s_add_co_ci_u32 s1, s3, 4101; GFX12-NEXT:    v_mov_b32_e32 v0, s0102; GFX12-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s1103; GFX12-NEXT:    global_store_b32 v[0:1], v2, off104; GFX12-NEXT:    s_endpgm105  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 4294967296106  store i32 0, ptr addrspace(1) %gep107  ret void108}109 110define amdgpu_ps void @mubuf_store_sgpr_ptr_offset4294967297(ptr addrspace(1) inreg %ptr) {111; GFX6-LABEL: mubuf_store_sgpr_ptr_offset4294967297:112; GFX6:       ; %bb.0:113; GFX6-NEXT:    v_mov_b32_e32 v0, 4114; GFX6-NEXT:    s_mov_b32 s0, s2115; GFX6-NEXT:    s_mov_b32 s1, s3116; GFX6-NEXT:    s_mov_b32 s2, 0117; GFX6-NEXT:    v_mov_b32_e32 v2, 0118; GFX6-NEXT:    v_mov_b32_e32 v1, 4119; GFX6-NEXT:    s_mov_b32 s3, 0xf000120; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64121; GFX6-NEXT:    s_endpgm122;123; GFX7-LABEL: mubuf_store_sgpr_ptr_offset4294967297:124; GFX7:       ; %bb.0:125; GFX7-NEXT:    v_mov_b32_e32 v0, 4126; GFX7-NEXT:    s_mov_b32 s0, s2127; GFX7-NEXT:    s_mov_b32 s1, s3128; GFX7-NEXT:    s_mov_b32 s2, 0129; GFX7-NEXT:    v_mov_b32_e32 v2, 0130; GFX7-NEXT:    v_mov_b32_e32 v1, 4131; GFX7-NEXT:    s_mov_b32 s3, 0xf000132; GFX7-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64133; GFX7-NEXT:    s_endpgm134;135; GFX12-LABEL: mubuf_store_sgpr_ptr_offset4294967297:136; GFX12:       ; %bb.0:137; GFX12-NEXT:    s_add_co_u32 s0, s2, 4138; GFX12-NEXT:    s_add_co_ci_u32 s1, s3, 4139; GFX12-NEXT:    v_mov_b32_e32 v0, s0140; GFX12-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s1141; GFX12-NEXT:    global_store_b32 v[0:1], v2, off142; GFX12-NEXT:    s_endpgm143  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 4294967297144  store i32 0, ptr addrspace(1) %gep145  ret void146}147 148define amdgpu_ps void @mubuf_store_sgpr_ptr_offset4096(ptr addrspace(1) inreg %ptr) {149; GFX6-LABEL: mubuf_store_sgpr_ptr_offset4096:150; GFX6:       ; %bb.0:151; GFX6-NEXT:    s_mov_b32 s0, s2152; GFX6-NEXT:    s_mov_b32 s1, s3153; GFX6-NEXT:    v_mov_b32_e32 v0, 0154; GFX6-NEXT:    s_mov_b32 s2, -1155; GFX6-NEXT:    s_mov_b32 s3, 0xf000156; GFX6-NEXT:    s_movk_i32 s4, 0x4000157; GFX6-NEXT:    buffer_store_dword v0, off, s[0:3], s4158; GFX6-NEXT:    s_endpgm159;160; GFX7-LABEL: mubuf_store_sgpr_ptr_offset4096:161; GFX7:       ; %bb.0:162; GFX7-NEXT:    s_mov_b32 s0, s2163; GFX7-NEXT:    s_mov_b32 s1, s3164; GFX7-NEXT:    v_mov_b32_e32 v0, 0165; GFX7-NEXT:    s_mov_b32 s2, -1166; GFX7-NEXT:    s_mov_b32 s3, 0xf000167; GFX7-NEXT:    s_movk_i32 s4, 0x4000168; GFX7-NEXT:    buffer_store_dword v0, off, s[0:3], s4169; GFX7-NEXT:    s_endpgm170;171; GFX12-LABEL: mubuf_store_sgpr_ptr_offset4096:172; GFX12:       ; %bb.0:173; GFX12-NEXT:    v_mov_b32_e32 v0, 0174; GFX12-NEXT:    global_store_b32 v0, v0, s[2:3] offset:16384175; GFX12-NEXT:    s_endpgm176  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 4096177  store i32 0, ptr addrspace(1) %gep178  ret void179}180 181define amdgpu_ps void @mubuf_store_vgpr_ptr_offset4095(ptr addrspace(1) %ptr) {182; GFX6-LABEL: mubuf_store_vgpr_ptr_offset4095:183; GFX6:       ; %bb.0:184; GFX6-NEXT:    s_mov_b32 s2, 0185; GFX6-NEXT:    v_mov_b32_e32 v2, 0186; GFX6-NEXT:    s_mov_b32 s3, 0xf000187; GFX6-NEXT:    s_mov_b64 s[0:1], 0188; GFX6-NEXT:    s_movk_i32 s4, 0x3ffc189; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], s4 addr64190; GFX6-NEXT:    s_endpgm191;192; GFX7-LABEL: mubuf_store_vgpr_ptr_offset4095:193; GFX7:       ; %bb.0:194; GFX7-NEXT:    s_mov_b32 s2, 0195; GFX7-NEXT:    v_mov_b32_e32 v2, 0196; GFX7-NEXT:    s_mov_b32 s3, 0xf000197; GFX7-NEXT:    s_mov_b64 s[0:1], 0198; GFX7-NEXT:    s_movk_i32 s4, 0x3ffc199; GFX7-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], s4 addr64200; GFX7-NEXT:    s_endpgm201;202; GFX12-LABEL: mubuf_store_vgpr_ptr_offset4095:203; GFX12:       ; %bb.0:204; GFX12-NEXT:    v_mov_b32_e32 v2, 0205; GFX12-NEXT:    global_store_b32 v[0:1], v2, off offset:16380206; GFX12-NEXT:    s_endpgm207  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 4095208  store i32 0, ptr addrspace(1) %gep209  ret void210}211 212define amdgpu_ps void @mubuf_store_vgpr_ptr_offset4294967296(ptr addrspace(1) %ptr) {213; GFX6-LABEL: mubuf_store_vgpr_ptr_offset4294967296:214; GFX6:       ; %bb.0:215; GFX6-NEXT:    s_mov_b32 s0, 0216; GFX6-NEXT:    s_mov_b32 s1, 4217; GFX6-NEXT:    s_mov_b32 s2, 0218; GFX6-NEXT:    v_mov_b32_e32 v2, 0219; GFX6-NEXT:    s_mov_b32 s3, 0xf000220; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64221; GFX6-NEXT:    s_endpgm222;223; GFX7-LABEL: mubuf_store_vgpr_ptr_offset4294967296:224; GFX7:       ; %bb.0:225; GFX7-NEXT:    s_mov_b32 s0, 0226; GFX7-NEXT:    s_mov_b32 s1, 4227; GFX7-NEXT:    s_mov_b32 s2, 0228; GFX7-NEXT:    v_mov_b32_e32 v2, 0229; GFX7-NEXT:    s_mov_b32 s3, 0xf000230; GFX7-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64231; GFX7-NEXT:    s_endpgm232;233; GFX12-LABEL: mubuf_store_vgpr_ptr_offset4294967296:234; GFX12:       ; %bb.0:235; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v0, 0236; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)237; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, 4, v1, vcc_lo238; GFX12-NEXT:    v_mov_b32_e32 v2, 0239; GFX12-NEXT:    global_store_b32 v[0:1], v2, off240; GFX12-NEXT:    s_endpgm241  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 4294967296242  store i32 0, ptr addrspace(1) %gep243  ret void244}245 246define amdgpu_ps void @mubuf_store_vgpr_ptr_offset4294967297(ptr addrspace(1) %ptr) {247; GFX6-LABEL: mubuf_store_vgpr_ptr_offset4294967297:248; GFX6:       ; %bb.0:249; GFX6-NEXT:    s_mov_b32 s0, 4250; GFX6-NEXT:    s_mov_b32 s1, 4251; GFX6-NEXT:    s_mov_b32 s2, 0252; GFX6-NEXT:    v_mov_b32_e32 v2, 0253; GFX6-NEXT:    s_mov_b32 s3, 0xf000254; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64255; GFX6-NEXT:    s_endpgm256;257; GFX7-LABEL: mubuf_store_vgpr_ptr_offset4294967297:258; GFX7:       ; %bb.0:259; GFX7-NEXT:    s_mov_b32 s0, 4260; GFX7-NEXT:    s_mov_b32 s1, 4261; GFX7-NEXT:    s_mov_b32 s2, 0262; GFX7-NEXT:    v_mov_b32_e32 v2, 0263; GFX7-NEXT:    s_mov_b32 s3, 0xf000264; GFX7-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64265; GFX7-NEXT:    s_endpgm266;267; GFX12-LABEL: mubuf_store_vgpr_ptr_offset4294967297:268; GFX12:       ; %bb.0:269; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v0, 4270; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)271; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, 4, v1, vcc_lo272; GFX12-NEXT:    v_mov_b32_e32 v2, 0273; GFX12-NEXT:    global_store_b32 v[0:1], v2, off274; GFX12-NEXT:    s_endpgm275  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 4294967297276  store i32 0, ptr addrspace(1) %gep277  ret void278}279 280define amdgpu_ps void @mubuf_store_vgpr_ptr_offset4096(ptr addrspace(1) %ptr) {281; GFX6-LABEL: mubuf_store_vgpr_ptr_offset4096:282; GFX6:       ; %bb.0:283; GFX6-NEXT:    s_mov_b32 s2, 0284; GFX6-NEXT:    v_mov_b32_e32 v2, 0285; GFX6-NEXT:    s_mov_b32 s3, 0xf000286; GFX6-NEXT:    s_mov_b64 s[0:1], 0287; GFX6-NEXT:    s_movk_i32 s4, 0x4000288; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], s4 addr64289; GFX6-NEXT:    s_endpgm290;291; GFX7-LABEL: mubuf_store_vgpr_ptr_offset4096:292; GFX7:       ; %bb.0:293; GFX7-NEXT:    s_mov_b32 s2, 0294; GFX7-NEXT:    v_mov_b32_e32 v2, 0295; GFX7-NEXT:    s_mov_b32 s3, 0xf000296; GFX7-NEXT:    s_mov_b64 s[0:1], 0297; GFX7-NEXT:    s_movk_i32 s4, 0x4000298; GFX7-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], s4 addr64299; GFX7-NEXT:    s_endpgm300;301; GFX12-LABEL: mubuf_store_vgpr_ptr_offset4096:302; GFX12:       ; %bb.0:303; GFX12-NEXT:    v_mov_b32_e32 v2, 0304; GFX12-NEXT:    global_store_b32 v[0:1], v2, off offset:16384305; GFX12-NEXT:    s_endpgm306  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 4096307  store i32 0, ptr addrspace(1) %gep308  ret void309}310 311define amdgpu_ps void @mubuf_store_sgpr_ptr_sgpr_offset(ptr addrspace(1) inreg %ptr, i32 inreg %soffset) {312; GFX6-LABEL: mubuf_store_sgpr_ptr_sgpr_offset:313; GFX6:       ; %bb.0:314; GFX6-NEXT:    s_ashr_i32 s5, s4, 31315; GFX6-NEXT:    s_lshl_b64 s[4:5], s[4:5], 2316; GFX6-NEXT:    v_mov_b32_e32 v0, s4317; GFX6-NEXT:    s_mov_b32 s0, s2318; GFX6-NEXT:    s_mov_b32 s1, s3319; GFX6-NEXT:    s_mov_b32 s2, 0320; GFX6-NEXT:    v_mov_b32_e32 v2, 0321; GFX6-NEXT:    s_mov_b32 s3, 0xf000322; GFX6-NEXT:    v_mov_b32_e32 v1, s5323; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64324; GFX6-NEXT:    s_endpgm325;326; GFX7-LABEL: mubuf_store_sgpr_ptr_sgpr_offset:327; GFX7:       ; %bb.0:328; GFX7-NEXT:    s_ashr_i32 s5, s4, 31329; GFX7-NEXT:    s_lshl_b64 s[4:5], s[4:5], 2330; GFX7-NEXT:    v_mov_b32_e32 v0, s4331; GFX7-NEXT:    s_mov_b32 s0, s2332; GFX7-NEXT:    s_mov_b32 s1, s3333; GFX7-NEXT:    s_mov_b32 s2, 0334; GFX7-NEXT:    v_mov_b32_e32 v2, 0335; GFX7-NEXT:    s_mov_b32 s3, 0xf000336; GFX7-NEXT:    v_mov_b32_e32 v1, s5337; GFX7-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64338; GFX7-NEXT:    s_endpgm339;340; GFX12-LABEL: mubuf_store_sgpr_ptr_sgpr_offset:341; GFX12:       ; %bb.0:342; GFX12-NEXT:    s_ashr_i32 s5, s4, 31343; GFX12-NEXT:    v_mov_b32_e32 v0, 0344; GFX12-NEXT:    s_lshl_b64 s[0:1], s[4:5], 2345; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)346; GFX12-NEXT:    s_add_co_u32 s0, s2, s0347; GFX12-NEXT:    s_add_co_ci_u32 s1, s3, s1348; GFX12-NEXT:    global_store_b32 v0, v0, s[0:1]349; GFX12-NEXT:    s_endpgm350  %gep = getelementptr i32, ptr addrspace(1) %ptr, i32 %soffset351  store i32 0, ptr addrspace(1) %gep352  ret void353}354 355define amdgpu_ps void @mubuf_store_vgpr_ptr_sgpr_offset(ptr addrspace(1) %ptr, i32 inreg %soffset) {356; GFX6-LABEL: mubuf_store_vgpr_ptr_sgpr_offset:357; GFX6:       ; %bb.0:358; GFX6-NEXT:    s_ashr_i32 s3, s2, 31359; GFX6-NEXT:    s_lshl_b64 s[0:1], s[2:3], 2360; GFX6-NEXT:    s_mov_b32 s2, 0361; GFX6-NEXT:    v_mov_b32_e32 v2, 0362; GFX6-NEXT:    s_mov_b32 s3, 0xf000363; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64364; GFX6-NEXT:    s_endpgm365;366; GFX7-LABEL: mubuf_store_vgpr_ptr_sgpr_offset:367; GFX7:       ; %bb.0:368; GFX7-NEXT:    s_ashr_i32 s3, s2, 31369; GFX7-NEXT:    s_lshl_b64 s[0:1], s[2:3], 2370; GFX7-NEXT:    s_mov_b32 s2, 0371; GFX7-NEXT:    v_mov_b32_e32 v2, 0372; GFX7-NEXT:    s_mov_b32 s3, 0xf000373; GFX7-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64374; GFX7-NEXT:    s_endpgm375;376; GFX12-LABEL: mubuf_store_vgpr_ptr_sgpr_offset:377; GFX12:       ; %bb.0:378; GFX12-NEXT:    s_ashr_i32 s3, s2, 31379; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)380; GFX12-NEXT:    s_lshl_b64 s[0:1], s[2:3], 2381; GFX12-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0382; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)383; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2384; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo385; GFX12-NEXT:    v_mov_b32_e32 v2, 0386; GFX12-NEXT:    global_store_b32 v[0:1], v2, off387; GFX12-NEXT:    s_endpgm388  %gep = getelementptr i32, ptr addrspace(1) %ptr, i32 %soffset389  store i32 0, ptr addrspace(1) %gep390  ret void391}392 393define amdgpu_ps void @mubuf_store_vgpr_ptr_sgpr_offset_offset256(ptr addrspace(1) %ptr, i32 inreg %soffset) {394; GFX6-LABEL: mubuf_store_vgpr_ptr_sgpr_offset_offset256:395; GFX6:       ; %bb.0:396; GFX6-NEXT:    s_ashr_i32 s3, s2, 31397; GFX6-NEXT:    s_lshl_b64 s[0:1], s[2:3], 2398; GFX6-NEXT:    s_mov_b32 s2, 0399; GFX6-NEXT:    v_mov_b32_e32 v2, 0400; GFX6-NEXT:    s_mov_b32 s3, 0xf000401; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64 offset:1024402; GFX6-NEXT:    s_endpgm403;404; GFX7-LABEL: mubuf_store_vgpr_ptr_sgpr_offset_offset256:405; GFX7:       ; %bb.0:406; GFX7-NEXT:    s_ashr_i32 s3, s2, 31407; GFX7-NEXT:    s_lshl_b64 s[0:1], s[2:3], 2408; GFX7-NEXT:    s_mov_b32 s2, 0409; GFX7-NEXT:    v_mov_b32_e32 v2, 0410; GFX7-NEXT:    s_mov_b32 s3, 0xf000411; GFX7-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64 offset:1024412; GFX7-NEXT:    s_endpgm413;414; GFX12-LABEL: mubuf_store_vgpr_ptr_sgpr_offset_offset256:415; GFX12:       ; %bb.0:416; GFX12-NEXT:    s_ashr_i32 s3, s2, 31417; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)418; GFX12-NEXT:    s_lshl_b64 s[0:1], s[2:3], 2419; GFX12-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0420; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)421; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2422; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo423; GFX12-NEXT:    v_mov_b32_e32 v2, 0424; GFX12-NEXT:    global_store_b32 v[0:1], v2, off offset:1024425; GFX12-NEXT:    s_endpgm426  %gep0 = getelementptr i32, ptr addrspace(1) %ptr, i32 %soffset427  %gep1 = getelementptr i32, ptr addrspace(1) %gep0, i32 256428  store i32 0, ptr addrspace(1) %gep1429  ret void430}431 432define amdgpu_ps void @mubuf_store_vgpr_ptr_sgpr_offset256_offset(ptr addrspace(1) %ptr, i32 inreg %soffset) {433; GFX6-LABEL: mubuf_store_vgpr_ptr_sgpr_offset256_offset:434; GFX6:       ; %bb.0:435; GFX6-NEXT:    s_ashr_i32 s3, s2, 31436; GFX6-NEXT:    s_lshl_b64 s[0:1], s[2:3], 2437; GFX6-NEXT:    s_mov_b32 s2, 0438; GFX6-NEXT:    v_mov_b32_e32 v2, 0439; GFX6-NEXT:    s_mov_b32 s3, 0xf000440; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64 offset:1024441; GFX6-NEXT:    s_endpgm442;443; GFX7-LABEL: mubuf_store_vgpr_ptr_sgpr_offset256_offset:444; GFX7:       ; %bb.0:445; GFX7-NEXT:    s_ashr_i32 s3, s2, 31446; GFX7-NEXT:    s_lshl_b64 s[0:1], s[2:3], 2447; GFX7-NEXT:    s_mov_b32 s2, 0448; GFX7-NEXT:    v_mov_b32_e32 v2, 0449; GFX7-NEXT:    s_mov_b32 s3, 0xf000450; GFX7-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64 offset:1024451; GFX7-NEXT:    s_endpgm452;453; GFX12-LABEL: mubuf_store_vgpr_ptr_sgpr_offset256_offset:454; GFX12:       ; %bb.0:455; GFX12-NEXT:    s_ashr_i32 s3, s2, 31456; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)457; GFX12-NEXT:    s_lshl_b64 s[0:1], s[2:3], 2458; GFX12-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0459; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)460; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2461; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo462; GFX12-NEXT:    v_mov_b32_e32 v2, 0463; GFX12-NEXT:    global_store_b32 v[0:1], v2, off offset:1024464; GFX12-NEXT:    s_endpgm465  %gep0 = getelementptr i32, ptr addrspace(1) %ptr, i32 256466  %gep1 = getelementptr i32, ptr addrspace(1) %gep0, i32 %soffset467  store i32 0, ptr addrspace(1) %gep1468  ret void469}470 471define amdgpu_ps void @mubuf_store_sgpr_ptr_vgpr_offset(ptr addrspace(1) inreg %ptr, i32 %voffset) {472; GFX6-LABEL: mubuf_store_sgpr_ptr_vgpr_offset:473; GFX6:       ; %bb.0:474; GFX6-NEXT:    v_ashrrev_i32_e32 v1, 31, v0475; GFX6-NEXT:    v_lshl_b64 v[0:1], v[0:1], 2476; GFX6-NEXT:    s_mov_b32 s0, s2477; GFX6-NEXT:    s_mov_b32 s1, s3478; GFX6-NEXT:    s_mov_b32 s2, 0479; GFX6-NEXT:    v_mov_b32_e32 v2, 0480; GFX6-NEXT:    s_mov_b32 s3, 0xf000481; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64482; GFX6-NEXT:    s_endpgm483;484; GFX7-LABEL: mubuf_store_sgpr_ptr_vgpr_offset:485; GFX7:       ; %bb.0:486; GFX7-NEXT:    v_ashrrev_i32_e32 v1, 31, v0487; GFX7-NEXT:    v_lshl_b64 v[0:1], v[0:1], 2488; GFX7-NEXT:    s_mov_b32 s0, s2489; GFX7-NEXT:    s_mov_b32 s1, s3490; GFX7-NEXT:    s_mov_b32 s2, 0491; GFX7-NEXT:    v_mov_b32_e32 v2, 0492; GFX7-NEXT:    s_mov_b32 s3, 0xf000493; GFX7-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64494; GFX7-NEXT:    s_endpgm495;496; GFX12-LABEL: mubuf_store_sgpr_ptr_vgpr_offset:497; GFX12:       ; %bb.0:498; GFX12-NEXT:    v_ashrrev_i32_e32 v1, 31, v0499; GFX12-NEXT:    v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3500; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)501; GFX12-NEXT:    v_lshlrev_b64_e32 v[0:1], 2, v[0:1]502; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v2, v0503; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)504; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo505; GFX12-NEXT:    v_mov_b32_e32 v2, 0506; GFX12-NEXT:    global_store_b32 v[0:1], v2, off507; GFX12-NEXT:    s_endpgm508  %gep = getelementptr i32, ptr addrspace(1) %ptr, i32 %voffset509  store i32 0, ptr addrspace(1) %gep510  ret void511}512 513define amdgpu_ps void @mubuf_store_sgpr_ptr_vgpr_offset_offset4095(ptr addrspace(1) inreg %ptr, i32 %voffset) {514; GFX6-LABEL: mubuf_store_sgpr_ptr_vgpr_offset_offset4095:515; GFX6:       ; %bb.0:516; GFX6-NEXT:    v_ashrrev_i32_e32 v1, 31, v0517; GFX6-NEXT:    v_lshl_b64 v[0:1], v[0:1], 2518; GFX6-NEXT:    s_mov_b32 s0, s2519; GFX6-NEXT:    s_mov_b32 s1, s3520; GFX6-NEXT:    s_mov_b32 s2, 0521; GFX6-NEXT:    v_mov_b32_e32 v2, 0522; GFX6-NEXT:    s_mov_b32 s3, 0xf000523; GFX6-NEXT:    s_movk_i32 s4, 0x3ffc524; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], s4 addr64525; GFX6-NEXT:    s_endpgm526;527; GFX7-LABEL: mubuf_store_sgpr_ptr_vgpr_offset_offset4095:528; GFX7:       ; %bb.0:529; GFX7-NEXT:    v_ashrrev_i32_e32 v1, 31, v0530; GFX7-NEXT:    v_lshl_b64 v[0:1], v[0:1], 2531; GFX7-NEXT:    s_mov_b32 s0, s2532; GFX7-NEXT:    s_mov_b32 s1, s3533; GFX7-NEXT:    s_mov_b32 s2, 0534; GFX7-NEXT:    v_mov_b32_e32 v2, 0535; GFX7-NEXT:    s_mov_b32 s3, 0xf000536; GFX7-NEXT:    s_movk_i32 s4, 0x3ffc537; GFX7-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], s4 addr64538; GFX7-NEXT:    s_endpgm539;540; GFX12-LABEL: mubuf_store_sgpr_ptr_vgpr_offset_offset4095:541; GFX12:       ; %bb.0:542; GFX12-NEXT:    v_ashrrev_i32_e32 v1, 31, v0543; GFX12-NEXT:    v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3544; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)545; GFX12-NEXT:    v_lshlrev_b64_e32 v[0:1], 2, v[0:1]546; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v2, v0547; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)548; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo549; GFX12-NEXT:    v_mov_b32_e32 v2, 0550; GFX12-NEXT:    global_store_b32 v[0:1], v2, off offset:16380551; GFX12-NEXT:    s_endpgm552  %gep0 = getelementptr i32, ptr addrspace(1) %ptr, i32 %voffset553  %gep1 = getelementptr i32, ptr addrspace(1) %gep0, i32 4095554  store i32 0, ptr addrspace(1) %gep1555  ret void556}557define amdgpu_ps void @mubuf_store_sgpr_ptr_offset4095_vgpr_offset(ptr addrspace(1) inreg %ptr, i32 %voffset) {558; GFX6-LABEL: mubuf_store_sgpr_ptr_offset4095_vgpr_offset:559; GFX6:       ; %bb.0:560; GFX6-NEXT:    v_ashrrev_i32_e32 v1, 31, v0561; GFX6-NEXT:    v_lshl_b64 v[0:1], v[0:1], 2562; GFX6-NEXT:    s_mov_b32 s0, s2563; GFX6-NEXT:    s_mov_b32 s1, s3564; GFX6-NEXT:    s_mov_b32 s2, 0565; GFX6-NEXT:    v_mov_b32_e32 v2, 0566; GFX6-NEXT:    s_mov_b32 s3, 0xf000567; GFX6-NEXT:    s_movk_i32 s4, 0x3ffc568; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], s4 addr64569; GFX6-NEXT:    s_endpgm570;571; GFX7-LABEL: mubuf_store_sgpr_ptr_offset4095_vgpr_offset:572; GFX7:       ; %bb.0:573; GFX7-NEXT:    v_ashrrev_i32_e32 v1, 31, v0574; GFX7-NEXT:    v_lshl_b64 v[0:1], v[0:1], 2575; GFX7-NEXT:    s_mov_b32 s0, s2576; GFX7-NEXT:    s_mov_b32 s1, s3577; GFX7-NEXT:    s_mov_b32 s2, 0578; GFX7-NEXT:    v_mov_b32_e32 v2, 0579; GFX7-NEXT:    s_mov_b32 s3, 0xf000580; GFX7-NEXT:    s_movk_i32 s4, 0x3ffc581; GFX7-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], s4 addr64582; GFX7-NEXT:    s_endpgm583;584; GFX12-LABEL: mubuf_store_sgpr_ptr_offset4095_vgpr_offset:585; GFX12:       ; %bb.0:586; GFX12-NEXT:    v_ashrrev_i32_e32 v1, 31, v0587; GFX12-NEXT:    v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3588; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)589; GFX12-NEXT:    v_lshlrev_b64_e32 v[0:1], 2, v[0:1]590; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v2, v0591; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)592; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo593; GFX12-NEXT:    v_mov_b32_e32 v2, 0594; GFX12-NEXT:    global_store_b32 v[0:1], v2, off offset:16380595; GFX12-NEXT:    s_endpgm596  %gep0 = getelementptr i32, ptr addrspace(1) %ptr, i32 4095597  %gep1 = getelementptr i32, ptr addrspace(1) %gep0, i32 %voffset598  store i32 0, ptr addrspace(1) %gep1599  ret void600}601 602define amdgpu_ps float @mubuf_load_sgpr_ptr(ptr addrspace(1) inreg %ptr) {603; GFX6-LABEL: mubuf_load_sgpr_ptr:604; GFX6:       ; %bb.0:605; GFX6-NEXT:    s_mov_b32 s0, s2606; GFX6-NEXT:    s_mov_b32 s1, s3607; GFX6-NEXT:    s_mov_b32 s2, -1608; GFX6-NEXT:    s_mov_b32 s3, 0xf000609; GFX6-NEXT:    buffer_load_dword v0, off, s[0:3], 0 glc610; GFX6-NEXT:    s_waitcnt vmcnt(0)611; GFX6-NEXT:    ; return to shader part epilog612;613; GFX7-LABEL: mubuf_load_sgpr_ptr:614; GFX7:       ; %bb.0:615; GFX7-NEXT:    s_mov_b32 s0, s2616; GFX7-NEXT:    s_mov_b32 s1, s3617; GFX7-NEXT:    s_mov_b32 s2, -1618; GFX7-NEXT:    s_mov_b32 s3, 0xf000619; GFX7-NEXT:    buffer_load_dword v0, off, s[0:3], 0 glc620; GFX7-NEXT:    s_waitcnt vmcnt(0)621; GFX7-NEXT:    ; return to shader part epilog622;623; GFX12-LABEL: mubuf_load_sgpr_ptr:624; GFX12:       ; %bb.0:625; GFX12-NEXT:    v_mov_b32_e32 v0, 0626; GFX12-NEXT:    global_load_b32 v0, v0, s[2:3] scope:SCOPE_SYS627; GFX12-NEXT:    s_wait_loadcnt 0x0628; GFX12-NEXT:    ; return to shader part epilog629  %val = load volatile float, ptr addrspace(1) %ptr630  ret float %val631}632 633define amdgpu_ps float @mubuf_load_sgpr_ptr_offset4095(ptr addrspace(1) inreg %ptr) {634; GFX6-LABEL: mubuf_load_sgpr_ptr_offset4095:635; GFX6:       ; %bb.0:636; GFX6-NEXT:    s_mov_b32 s0, s2637; GFX6-NEXT:    s_mov_b32 s1, s3638; GFX6-NEXT:    s_mov_b32 s2, -1639; GFX6-NEXT:    s_mov_b32 s3, 0xf000640; GFX6-NEXT:    s_movk_i32 s4, 0x3ffc641; GFX6-NEXT:    buffer_load_dword v0, off, s[0:3], s4 glc642; GFX6-NEXT:    s_waitcnt vmcnt(0)643; GFX6-NEXT:    ; return to shader part epilog644;645; GFX7-LABEL: mubuf_load_sgpr_ptr_offset4095:646; GFX7:       ; %bb.0:647; GFX7-NEXT:    s_mov_b32 s0, s2648; GFX7-NEXT:    s_mov_b32 s1, s3649; GFX7-NEXT:    s_mov_b32 s2, -1650; GFX7-NEXT:    s_mov_b32 s3, 0xf000651; GFX7-NEXT:    s_movk_i32 s4, 0x3ffc652; GFX7-NEXT:    buffer_load_dword v0, off, s[0:3], s4 glc653; GFX7-NEXT:    s_waitcnt vmcnt(0)654; GFX7-NEXT:    ; return to shader part epilog655;656; GFX12-LABEL: mubuf_load_sgpr_ptr_offset4095:657; GFX12:       ; %bb.0:658; GFX12-NEXT:    v_mov_b32_e32 v0, 0659; GFX12-NEXT:    global_load_b32 v0, v0, s[2:3] offset:16380 scope:SCOPE_SYS660; GFX12-NEXT:    s_wait_loadcnt 0x0661; GFX12-NEXT:    ; return to shader part epilog662  %gep = getelementptr float, ptr addrspace(1) %ptr, i64 4095663  %val = load volatile float, ptr addrspace(1) %gep664  ret float %val665}666 667define amdgpu_ps float @mubuf_load_sgpr_ptr_offset4294967296(ptr addrspace(1) inreg %ptr) {668; GFX6-LABEL: mubuf_load_sgpr_ptr_offset4294967296:669; GFX6:       ; %bb.0:670; GFX6-NEXT:    v_mov_b32_e32 v0, 0671; GFX6-NEXT:    s_mov_b32 s0, s2672; GFX6-NEXT:    s_mov_b32 s1, s3673; GFX6-NEXT:    s_mov_b32 s2, 0674; GFX6-NEXT:    v_mov_b32_e32 v1, 4675; GFX6-NEXT:    s_mov_b32 s3, 0xf000676; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc677; GFX6-NEXT:    s_waitcnt vmcnt(0)678; GFX6-NEXT:    ; return to shader part epilog679;680; GFX7-LABEL: mubuf_load_sgpr_ptr_offset4294967296:681; GFX7:       ; %bb.0:682; GFX7-NEXT:    v_mov_b32_e32 v0, 0683; GFX7-NEXT:    s_mov_b32 s0, s2684; GFX7-NEXT:    s_mov_b32 s1, s3685; GFX7-NEXT:    s_mov_b32 s2, 0686; GFX7-NEXT:    v_mov_b32_e32 v1, 4687; GFX7-NEXT:    s_mov_b32 s3, 0xf000688; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc689; GFX7-NEXT:    s_waitcnt vmcnt(0)690; GFX7-NEXT:    ; return to shader part epilog691;692; GFX12-LABEL: mubuf_load_sgpr_ptr_offset4294967296:693; GFX12:       ; %bb.0:694; GFX12-NEXT:    s_add_co_u32 s0, s2, 0695; GFX12-NEXT:    s_add_co_ci_u32 s1, s3, 4696; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)697; GFX12-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1698; GFX12-NEXT:    global_load_b32 v0, v[0:1], off scope:SCOPE_SYS699; GFX12-NEXT:    s_wait_loadcnt 0x0700; GFX12-NEXT:    ; return to shader part epilog701  %gep = getelementptr float, ptr addrspace(1) %ptr, i64 4294967296702  %val = load volatile float, ptr addrspace(1) %gep703  ret float %val704}705 706define amdgpu_ps float @mubuf_load_sgpr_ptr_offset4294967297(ptr addrspace(1) inreg %ptr) {707; GFX6-LABEL: mubuf_load_sgpr_ptr_offset4294967297:708; GFX6:       ; %bb.0:709; GFX6-NEXT:    v_mov_b32_e32 v0, 4710; GFX6-NEXT:    s_mov_b32 s0, s2711; GFX6-NEXT:    s_mov_b32 s1, s3712; GFX6-NEXT:    s_mov_b32 s2, 0713; GFX6-NEXT:    v_mov_b32_e32 v1, 4714; GFX6-NEXT:    s_mov_b32 s3, 0xf000715; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc716; GFX6-NEXT:    s_waitcnt vmcnt(0)717; GFX6-NEXT:    ; return to shader part epilog718;719; GFX7-LABEL: mubuf_load_sgpr_ptr_offset4294967297:720; GFX7:       ; %bb.0:721; GFX7-NEXT:    v_mov_b32_e32 v0, 4722; GFX7-NEXT:    s_mov_b32 s0, s2723; GFX7-NEXT:    s_mov_b32 s1, s3724; GFX7-NEXT:    s_mov_b32 s2, 0725; GFX7-NEXT:    v_mov_b32_e32 v1, 4726; GFX7-NEXT:    s_mov_b32 s3, 0xf000727; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc728; GFX7-NEXT:    s_waitcnt vmcnt(0)729; GFX7-NEXT:    ; return to shader part epilog730;731; GFX12-LABEL: mubuf_load_sgpr_ptr_offset4294967297:732; GFX12:       ; %bb.0:733; GFX12-NEXT:    s_add_co_u32 s0, s2, 4734; GFX12-NEXT:    s_add_co_ci_u32 s1, s3, 4735; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)736; GFX12-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1737; GFX12-NEXT:    global_load_b32 v0, v[0:1], off scope:SCOPE_SYS738; GFX12-NEXT:    s_wait_loadcnt 0x0739; GFX12-NEXT:    ; return to shader part epilog740  %gep = getelementptr float, ptr addrspace(1) %ptr, i64 4294967297741  %val = load volatile float, ptr addrspace(1) %gep742  ret float %val743}744 745define amdgpu_ps float @mubuf_load_sgpr_ptr_offset4096(ptr addrspace(1) inreg %ptr) {746; GFX6-LABEL: mubuf_load_sgpr_ptr_offset4096:747; GFX6:       ; %bb.0:748; GFX6-NEXT:    s_mov_b32 s0, s2749; GFX6-NEXT:    s_mov_b32 s1, s3750; GFX6-NEXT:    s_mov_b32 s2, -1751; GFX6-NEXT:    s_mov_b32 s3, 0xf000752; GFX6-NEXT:    s_movk_i32 s4, 0x4000753; GFX6-NEXT:    buffer_load_dword v0, off, s[0:3], s4 glc754; GFX6-NEXT:    s_waitcnt vmcnt(0)755; GFX6-NEXT:    ; return to shader part epilog756;757; GFX7-LABEL: mubuf_load_sgpr_ptr_offset4096:758; GFX7:       ; %bb.0:759; GFX7-NEXT:    s_mov_b32 s0, s2760; GFX7-NEXT:    s_mov_b32 s1, s3761; GFX7-NEXT:    s_mov_b32 s2, -1762; GFX7-NEXT:    s_mov_b32 s3, 0xf000763; GFX7-NEXT:    s_movk_i32 s4, 0x4000764; GFX7-NEXT:    buffer_load_dword v0, off, s[0:3], s4 glc765; GFX7-NEXT:    s_waitcnt vmcnt(0)766; GFX7-NEXT:    ; return to shader part epilog767;768; GFX12-LABEL: mubuf_load_sgpr_ptr_offset4096:769; GFX12:       ; %bb.0:770; GFX12-NEXT:    v_mov_b32_e32 v0, 0771; GFX12-NEXT:    global_load_b32 v0, v0, s[2:3] offset:16384 scope:SCOPE_SYS772; GFX12-NEXT:    s_wait_loadcnt 0x0773; GFX12-NEXT:    ; return to shader part epilog774  %gep = getelementptr float, ptr addrspace(1) %ptr, i64 4096775  %val = load volatile float, ptr addrspace(1) %gep776  ret float %val777}778 779define amdgpu_ps float @mubuf_load_vgpr_ptr_offset4095(ptr addrspace(1) %ptr) {780; GFX6-LABEL: mubuf_load_vgpr_ptr_offset4095:781; GFX6:       ; %bb.0:782; GFX6-NEXT:    s_mov_b32 s2, 0783; GFX6-NEXT:    s_mov_b32 s3, 0xf000784; GFX6-NEXT:    s_mov_b64 s[0:1], 0785; GFX6-NEXT:    s_movk_i32 s4, 0x3ffc786; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], s4 addr64 glc787; GFX6-NEXT:    s_waitcnt vmcnt(0)788; GFX6-NEXT:    ; return to shader part epilog789;790; GFX7-LABEL: mubuf_load_vgpr_ptr_offset4095:791; GFX7:       ; %bb.0:792; GFX7-NEXT:    s_mov_b32 s2, 0793; GFX7-NEXT:    s_mov_b32 s3, 0xf000794; GFX7-NEXT:    s_mov_b64 s[0:1], 0795; GFX7-NEXT:    s_movk_i32 s4, 0x3ffc796; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], s4 addr64 glc797; GFX7-NEXT:    s_waitcnt vmcnt(0)798; GFX7-NEXT:    ; return to shader part epilog799;800; GFX12-LABEL: mubuf_load_vgpr_ptr_offset4095:801; GFX12:       ; %bb.0:802; GFX12-NEXT:    global_load_b32 v0, v[0:1], off offset:16380 scope:SCOPE_SYS803; GFX12-NEXT:    s_wait_loadcnt 0x0804; GFX12-NEXT:    ; return to shader part epilog805  %gep = getelementptr float, ptr addrspace(1) %ptr, i64 4095806  %val = load volatile float, ptr addrspace(1) %gep807  ret float %val808}809 810define amdgpu_ps float @mubuf_load_vgpr_ptr_offset4294967296(ptr addrspace(1) %ptr) {811; GFX6-LABEL: mubuf_load_vgpr_ptr_offset4294967296:812; GFX6:       ; %bb.0:813; GFX6-NEXT:    s_mov_b32 s0, 0814; GFX6-NEXT:    s_mov_b32 s1, 4815; GFX6-NEXT:    s_mov_b32 s2, 0816; GFX6-NEXT:    s_mov_b32 s3, 0xf000817; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc818; GFX6-NEXT:    s_waitcnt vmcnt(0)819; GFX6-NEXT:    ; return to shader part epilog820;821; GFX7-LABEL: mubuf_load_vgpr_ptr_offset4294967296:822; GFX7:       ; %bb.0:823; GFX7-NEXT:    s_mov_b32 s0, 0824; GFX7-NEXT:    s_mov_b32 s1, 4825; GFX7-NEXT:    s_mov_b32 s2, 0826; GFX7-NEXT:    s_mov_b32 s3, 0xf000827; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc828; GFX7-NEXT:    s_waitcnt vmcnt(0)829; GFX7-NEXT:    ; return to shader part epilog830;831; GFX12-LABEL: mubuf_load_vgpr_ptr_offset4294967296:832; GFX12:       ; %bb.0:833; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v0, 0834; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)835; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, 4, v1, vcc_lo836; GFX12-NEXT:    global_load_b32 v0, v[0:1], off scope:SCOPE_SYS837; GFX12-NEXT:    s_wait_loadcnt 0x0838; GFX12-NEXT:    ; return to shader part epilog839  %gep = getelementptr float, ptr addrspace(1) %ptr, i64 4294967296840  %val = load volatile float, ptr addrspace(1) %gep841  ret float %val842}843 844define amdgpu_ps float @mubuf_load_vgpr_ptr_offset4294967297(ptr addrspace(1) %ptr) {845; GFX6-LABEL: mubuf_load_vgpr_ptr_offset4294967297:846; GFX6:       ; %bb.0:847; GFX6-NEXT:    s_mov_b32 s0, 4848; GFX6-NEXT:    s_mov_b32 s1, 4849; GFX6-NEXT:    s_mov_b32 s2, 0850; GFX6-NEXT:    s_mov_b32 s3, 0xf000851; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc852; GFX6-NEXT:    s_waitcnt vmcnt(0)853; GFX6-NEXT:    ; return to shader part epilog854;855; GFX7-LABEL: mubuf_load_vgpr_ptr_offset4294967297:856; GFX7:       ; %bb.0:857; GFX7-NEXT:    s_mov_b32 s0, 4858; GFX7-NEXT:    s_mov_b32 s1, 4859; GFX7-NEXT:    s_mov_b32 s2, 0860; GFX7-NEXT:    s_mov_b32 s3, 0xf000861; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc862; GFX7-NEXT:    s_waitcnt vmcnt(0)863; GFX7-NEXT:    ; return to shader part epilog864;865; GFX12-LABEL: mubuf_load_vgpr_ptr_offset4294967297:866; GFX12:       ; %bb.0:867; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v0, 4868; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)869; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, 4, v1, vcc_lo870; GFX12-NEXT:    global_load_b32 v0, v[0:1], off scope:SCOPE_SYS871; GFX12-NEXT:    s_wait_loadcnt 0x0872; GFX12-NEXT:    ; return to shader part epilog873  %gep = getelementptr float, ptr addrspace(1) %ptr, i64 4294967297874  %val = load volatile float, ptr addrspace(1) %gep875  ret float %val876}877 878define amdgpu_ps float @mubuf_load_vgpr_ptr_offset4096(ptr addrspace(1) %ptr) {879; GFX6-LABEL: mubuf_load_vgpr_ptr_offset4096:880; GFX6:       ; %bb.0:881; GFX6-NEXT:    s_mov_b32 s2, 0882; GFX6-NEXT:    s_mov_b32 s3, 0xf000883; GFX6-NEXT:    s_mov_b64 s[0:1], 0884; GFX6-NEXT:    s_movk_i32 s4, 0x4000885; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], s4 addr64 glc886; GFX6-NEXT:    s_waitcnt vmcnt(0)887; GFX6-NEXT:    ; return to shader part epilog888;889; GFX7-LABEL: mubuf_load_vgpr_ptr_offset4096:890; GFX7:       ; %bb.0:891; GFX7-NEXT:    s_mov_b32 s2, 0892; GFX7-NEXT:    s_mov_b32 s3, 0xf000893; GFX7-NEXT:    s_mov_b64 s[0:1], 0894; GFX7-NEXT:    s_movk_i32 s4, 0x4000895; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], s4 addr64 glc896; GFX7-NEXT:    s_waitcnt vmcnt(0)897; GFX7-NEXT:    ; return to shader part epilog898;899; GFX12-LABEL: mubuf_load_vgpr_ptr_offset4096:900; GFX12:       ; %bb.0:901; GFX12-NEXT:    global_load_b32 v0, v[0:1], off offset:16384 scope:SCOPE_SYS902; GFX12-NEXT:    s_wait_loadcnt 0x0903; GFX12-NEXT:    ; return to shader part epilog904  %gep = getelementptr float, ptr addrspace(1) %ptr, i64 4096905  %val = load volatile float, ptr addrspace(1) %gep906  ret float %val907}908 909define amdgpu_ps float @mubuf_load_sgpr_ptr_sgpr_offset(ptr addrspace(1) inreg %ptr, i32 inreg %soffset) {910; GFX6-LABEL: mubuf_load_sgpr_ptr_sgpr_offset:911; GFX6:       ; %bb.0:912; GFX6-NEXT:    s_ashr_i32 s5, s4, 31913; GFX6-NEXT:    s_lshl_b64 s[4:5], s[4:5], 2914; GFX6-NEXT:    v_mov_b32_e32 v0, s4915; GFX6-NEXT:    s_mov_b32 s0, s2916; GFX6-NEXT:    s_mov_b32 s1, s3917; GFX6-NEXT:    s_mov_b32 s2, 0918; GFX6-NEXT:    s_mov_b32 s3, 0xf000919; GFX6-NEXT:    v_mov_b32_e32 v1, s5920; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc921; GFX6-NEXT:    s_waitcnt vmcnt(0)922; GFX6-NEXT:    ; return to shader part epilog923;924; GFX7-LABEL: mubuf_load_sgpr_ptr_sgpr_offset:925; GFX7:       ; %bb.0:926; GFX7-NEXT:    s_ashr_i32 s5, s4, 31927; GFX7-NEXT:    s_lshl_b64 s[4:5], s[4:5], 2928; GFX7-NEXT:    v_mov_b32_e32 v0, s4929; GFX7-NEXT:    s_mov_b32 s0, s2930; GFX7-NEXT:    s_mov_b32 s1, s3931; GFX7-NEXT:    s_mov_b32 s2, 0932; GFX7-NEXT:    s_mov_b32 s3, 0xf000933; GFX7-NEXT:    v_mov_b32_e32 v1, s5934; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc935; GFX7-NEXT:    s_waitcnt vmcnt(0)936; GFX7-NEXT:    ; return to shader part epilog937;938; GFX12-LABEL: mubuf_load_sgpr_ptr_sgpr_offset:939; GFX12:       ; %bb.0:940; GFX12-NEXT:    s_ashr_i32 s5, s4, 31941; GFX12-NEXT:    v_mov_b32_e32 v0, 0942; GFX12-NEXT:    s_lshl_b64 s[0:1], s[4:5], 2943; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)944; GFX12-NEXT:    s_add_co_u32 s0, s2, s0945; GFX12-NEXT:    s_add_co_ci_u32 s1, s3, s1946; GFX12-NEXT:    global_load_b32 v0, v0, s[0:1] scope:SCOPE_SYS947; GFX12-NEXT:    s_wait_loadcnt 0x0948; GFX12-NEXT:    ; return to shader part epilog949  %gep = getelementptr float, ptr addrspace(1) %ptr, i32 %soffset950  %val = load volatile float, ptr addrspace(1) %gep951  ret float %val952}953 954define amdgpu_ps float @mubuf_load_vgpr_ptr_sgpr_offset(ptr addrspace(1) %ptr, i32 inreg %soffset) {955; GFX6-LABEL: mubuf_load_vgpr_ptr_sgpr_offset:956; GFX6:       ; %bb.0:957; GFX6-NEXT:    s_ashr_i32 s3, s2, 31958; GFX6-NEXT:    s_lshl_b64 s[0:1], s[2:3], 2959; GFX6-NEXT:    s_mov_b32 s2, 0960; GFX6-NEXT:    s_mov_b32 s3, 0xf000961; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc962; GFX6-NEXT:    s_waitcnt vmcnt(0)963; GFX6-NEXT:    ; return to shader part epilog964;965; GFX7-LABEL: mubuf_load_vgpr_ptr_sgpr_offset:966; GFX7:       ; %bb.0:967; GFX7-NEXT:    s_ashr_i32 s3, s2, 31968; GFX7-NEXT:    s_lshl_b64 s[0:1], s[2:3], 2969; GFX7-NEXT:    s_mov_b32 s2, 0970; GFX7-NEXT:    s_mov_b32 s3, 0xf000971; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc972; GFX7-NEXT:    s_waitcnt vmcnt(0)973; GFX7-NEXT:    ; return to shader part epilog974;975; GFX12-LABEL: mubuf_load_vgpr_ptr_sgpr_offset:976; GFX12:       ; %bb.0:977; GFX12-NEXT:    s_ashr_i32 s3, s2, 31978; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)979; GFX12-NEXT:    s_lshl_b64 s[0:1], s[2:3], 2980; GFX12-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0981; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)982; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2983; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo984; GFX12-NEXT:    global_load_b32 v0, v[0:1], off scope:SCOPE_SYS985; GFX12-NEXT:    s_wait_loadcnt 0x0986; GFX12-NEXT:    ; return to shader part epilog987  %gep = getelementptr float, ptr addrspace(1) %ptr, i32 %soffset988  %val = load volatile float, ptr addrspace(1) %gep989  ret float %val990}991 992define amdgpu_ps float @mubuf_load_vgpr_ptr_sgpr_offset_offset256(ptr addrspace(1) %ptr, i32 inreg %soffset) {993; GFX6-LABEL: mubuf_load_vgpr_ptr_sgpr_offset_offset256:994; GFX6:       ; %bb.0:995; GFX6-NEXT:    s_ashr_i32 s3, s2, 31996; GFX6-NEXT:    s_lshl_b64 s[0:1], s[2:3], 2997; GFX6-NEXT:    s_mov_b32 s2, 0998; GFX6-NEXT:    s_mov_b32 s3, 0xf000999; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 offset:1024 glc1000; GFX6-NEXT:    s_waitcnt vmcnt(0)1001; GFX6-NEXT:    ; return to shader part epilog1002;1003; GFX7-LABEL: mubuf_load_vgpr_ptr_sgpr_offset_offset256:1004; GFX7:       ; %bb.0:1005; GFX7-NEXT:    s_ashr_i32 s3, s2, 311006; GFX7-NEXT:    s_lshl_b64 s[0:1], s[2:3], 21007; GFX7-NEXT:    s_mov_b32 s2, 01008; GFX7-NEXT:    s_mov_b32 s3, 0xf0001009; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 offset:1024 glc1010; GFX7-NEXT:    s_waitcnt vmcnt(0)1011; GFX7-NEXT:    ; return to shader part epilog1012;1013; GFX12-LABEL: mubuf_load_vgpr_ptr_sgpr_offset_offset256:1014; GFX12:       ; %bb.0:1015; GFX12-NEXT:    s_ashr_i32 s3, s2, 311016; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1017; GFX12-NEXT:    s_lshl_b64 s[0:1], s[2:3], 21018; GFX12-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01019; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1020; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v21021; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo1022; GFX12-NEXT:    global_load_b32 v0, v[0:1], off offset:1024 scope:SCOPE_SYS1023; GFX12-NEXT:    s_wait_loadcnt 0x01024; GFX12-NEXT:    ; return to shader part epilog1025  %gep0 = getelementptr float, ptr addrspace(1) %ptr, i32 %soffset1026  %gep1 = getelementptr float, ptr addrspace(1) %gep0, i32 2561027  %val = load volatile float, ptr addrspace(1) %gep11028  ret float %val1029}1030 1031define amdgpu_ps float @mubuf_load_vgpr_ptr_sgpr_offset256_offset(ptr addrspace(1) %ptr, i32 inreg %soffset) {1032; GFX6-LABEL: mubuf_load_vgpr_ptr_sgpr_offset256_offset:1033; GFX6:       ; %bb.0:1034; GFX6-NEXT:    s_ashr_i32 s3, s2, 311035; GFX6-NEXT:    s_lshl_b64 s[0:1], s[2:3], 21036; GFX6-NEXT:    s_mov_b32 s2, 01037; GFX6-NEXT:    s_mov_b32 s3, 0xf0001038; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 offset:1024 glc1039; GFX6-NEXT:    s_waitcnt vmcnt(0)1040; GFX6-NEXT:    ; return to shader part epilog1041;1042; GFX7-LABEL: mubuf_load_vgpr_ptr_sgpr_offset256_offset:1043; GFX7:       ; %bb.0:1044; GFX7-NEXT:    s_ashr_i32 s3, s2, 311045; GFX7-NEXT:    s_lshl_b64 s[0:1], s[2:3], 21046; GFX7-NEXT:    s_mov_b32 s2, 01047; GFX7-NEXT:    s_mov_b32 s3, 0xf0001048; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 offset:1024 glc1049; GFX7-NEXT:    s_waitcnt vmcnt(0)1050; GFX7-NEXT:    ; return to shader part epilog1051;1052; GFX12-LABEL: mubuf_load_vgpr_ptr_sgpr_offset256_offset:1053; GFX12:       ; %bb.0:1054; GFX12-NEXT:    s_ashr_i32 s3, s2, 311055; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1056; GFX12-NEXT:    s_lshl_b64 s[0:1], s[2:3], 21057; GFX12-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01058; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1059; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v21060; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo1061; GFX12-NEXT:    global_load_b32 v0, v[0:1], off offset:1024 scope:SCOPE_SYS1062; GFX12-NEXT:    s_wait_loadcnt 0x01063; GFX12-NEXT:    ; return to shader part epilog1064  %gep0 = getelementptr float, ptr addrspace(1) %ptr, i64 2561065  %gep1 = getelementptr float, ptr addrspace(1) %gep0, i32 %soffset1066  %val = load volatile float, ptr addrspace(1) %gep11067  ret float %val1068}1069 1070define amdgpu_ps float @mubuf_load_sgpr_ptr_vgpr_offset(ptr addrspace(1) inreg %ptr, i32 %voffset) {1071; GFX6-LABEL: mubuf_load_sgpr_ptr_vgpr_offset:1072; GFX6:       ; %bb.0:1073; GFX6-NEXT:    v_ashrrev_i32_e32 v1, 31, v01074; GFX6-NEXT:    v_lshl_b64 v[0:1], v[0:1], 21075; GFX6-NEXT:    s_mov_b32 s0, s21076; GFX6-NEXT:    s_mov_b32 s1, s31077; GFX6-NEXT:    s_mov_b32 s2, 01078; GFX6-NEXT:    s_mov_b32 s3, 0xf0001079; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc1080; GFX6-NEXT:    s_waitcnt vmcnt(0)1081; GFX6-NEXT:    ; return to shader part epilog1082;1083; GFX7-LABEL: mubuf_load_sgpr_ptr_vgpr_offset:1084; GFX7:       ; %bb.0:1085; GFX7-NEXT:    v_ashrrev_i32_e32 v1, 31, v01086; GFX7-NEXT:    v_lshl_b64 v[0:1], v[0:1], 21087; GFX7-NEXT:    s_mov_b32 s0, s21088; GFX7-NEXT:    s_mov_b32 s1, s31089; GFX7-NEXT:    s_mov_b32 s2, 01090; GFX7-NEXT:    s_mov_b32 s3, 0xf0001091; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc1092; GFX7-NEXT:    s_waitcnt vmcnt(0)1093; GFX7-NEXT:    ; return to shader part epilog1094;1095; GFX12-LABEL: mubuf_load_sgpr_ptr_vgpr_offset:1096; GFX12:       ; %bb.0:1097; GFX12-NEXT:    v_ashrrev_i32_e32 v1, 31, v01098; GFX12-NEXT:    v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s31099; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1100; GFX12-NEXT:    v_lshlrev_b64_e32 v[0:1], 2, v[0:1]1101; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v2, v01102; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)1103; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo1104; GFX12-NEXT:    global_load_b32 v0, v[0:1], off scope:SCOPE_SYS1105; GFX12-NEXT:    s_wait_loadcnt 0x01106; GFX12-NEXT:    ; return to shader part epilog1107  %gep = getelementptr float, ptr addrspace(1) %ptr, i32 %voffset1108  %val = load volatile float, ptr addrspace(1) %gep1109  ret float %val1110}1111 1112define amdgpu_ps float @mubuf_load_sgpr_ptr_vgpr_offset_offset4095(ptr addrspace(1) inreg %ptr, i32 %voffset) {1113; GFX6-LABEL: mubuf_load_sgpr_ptr_vgpr_offset_offset4095:1114; GFX6:       ; %bb.0:1115; GFX6-NEXT:    v_ashrrev_i32_e32 v1, 31, v01116; GFX6-NEXT:    v_lshl_b64 v[0:1], v[0:1], 21117; GFX6-NEXT:    s_mov_b32 s0, s21118; GFX6-NEXT:    s_mov_b32 s1, s31119; GFX6-NEXT:    s_mov_b32 s2, 01120; GFX6-NEXT:    s_mov_b32 s3, 0xf0001121; GFX6-NEXT:    s_movk_i32 s4, 0x3ffc1122; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], s4 addr64 glc1123; GFX6-NEXT:    s_waitcnt vmcnt(0)1124; GFX6-NEXT:    ; return to shader part epilog1125;1126; GFX7-LABEL: mubuf_load_sgpr_ptr_vgpr_offset_offset4095:1127; GFX7:       ; %bb.0:1128; GFX7-NEXT:    v_ashrrev_i32_e32 v1, 31, v01129; GFX7-NEXT:    v_lshl_b64 v[0:1], v[0:1], 21130; GFX7-NEXT:    s_mov_b32 s0, s21131; GFX7-NEXT:    s_mov_b32 s1, s31132; GFX7-NEXT:    s_mov_b32 s2, 01133; GFX7-NEXT:    s_mov_b32 s3, 0xf0001134; GFX7-NEXT:    s_movk_i32 s4, 0x3ffc1135; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], s4 addr64 glc1136; GFX7-NEXT:    s_waitcnt vmcnt(0)1137; GFX7-NEXT:    ; return to shader part epilog1138;1139; GFX12-LABEL: mubuf_load_sgpr_ptr_vgpr_offset_offset4095:1140; GFX12:       ; %bb.0:1141; GFX12-NEXT:    v_ashrrev_i32_e32 v1, 31, v01142; GFX12-NEXT:    v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s31143; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1144; GFX12-NEXT:    v_lshlrev_b64_e32 v[0:1], 2, v[0:1]1145; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v2, v01146; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)1147; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo1148; GFX12-NEXT:    global_load_b32 v0, v[0:1], off offset:16380 scope:SCOPE_SYS1149; GFX12-NEXT:    s_wait_loadcnt 0x01150; GFX12-NEXT:    ; return to shader part epilog1151  %gep0 = getelementptr float, ptr addrspace(1) %ptr, i32 %voffset1152  %gep1 = getelementptr float, ptr addrspace(1) %gep0, i64 40951153  %val = load volatile float, ptr addrspace(1) %gep11154  ret float %val1155}1156define amdgpu_ps float @mubuf_load_sgpr_ptr_offset4095_vgpr_offset(ptr addrspace(1) inreg %ptr, i32 %voffset) {1157; GFX6-LABEL: mubuf_load_sgpr_ptr_offset4095_vgpr_offset:1158; GFX6:       ; %bb.0:1159; GFX6-NEXT:    v_ashrrev_i32_e32 v1, 31, v01160; GFX6-NEXT:    v_lshl_b64 v[0:1], v[0:1], 21161; GFX6-NEXT:    s_mov_b32 s0, s21162; GFX6-NEXT:    s_mov_b32 s1, s31163; GFX6-NEXT:    s_mov_b32 s2, 01164; GFX6-NEXT:    s_mov_b32 s3, 0xf0001165; GFX6-NEXT:    s_movk_i32 s4, 0x3ffc1166; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], s4 addr64 glc1167; GFX6-NEXT:    s_waitcnt vmcnt(0)1168; GFX6-NEXT:    ; return to shader part epilog1169;1170; GFX7-LABEL: mubuf_load_sgpr_ptr_offset4095_vgpr_offset:1171; GFX7:       ; %bb.0:1172; GFX7-NEXT:    v_ashrrev_i32_e32 v1, 31, v01173; GFX7-NEXT:    v_lshl_b64 v[0:1], v[0:1], 21174; GFX7-NEXT:    s_mov_b32 s0, s21175; GFX7-NEXT:    s_mov_b32 s1, s31176; GFX7-NEXT:    s_mov_b32 s2, 01177; GFX7-NEXT:    s_mov_b32 s3, 0xf0001178; GFX7-NEXT:    s_movk_i32 s4, 0x3ffc1179; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], s4 addr64 glc1180; GFX7-NEXT:    s_waitcnt vmcnt(0)1181; GFX7-NEXT:    ; return to shader part epilog1182;1183; GFX12-LABEL: mubuf_load_sgpr_ptr_offset4095_vgpr_offset:1184; GFX12:       ; %bb.0:1185; GFX12-NEXT:    v_ashrrev_i32_e32 v1, 31, v01186; GFX12-NEXT:    v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s31187; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1188; GFX12-NEXT:    v_lshlrev_b64_e32 v[0:1], 2, v[0:1]1189; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v2, v01190; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)1191; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo1192; GFX12-NEXT:    global_load_b32 v0, v[0:1], off offset:16380 scope:SCOPE_SYS1193; GFX12-NEXT:    s_wait_loadcnt 0x01194; GFX12-NEXT:    ; return to shader part epilog1195  %gep0 = getelementptr float, ptr addrspace(1) %ptr, i64 40951196  %gep1 = getelementptr float, ptr addrspace(1) %gep0, i32 %voffset1197  %val = load volatile float, ptr addrspace(1) %gep11198  ret float %val1199}1200 1201define amdgpu_ps float @mubuf_atomicrmw_sgpr_ptr_offset4095(ptr addrspace(1) inreg %ptr) {1202; GFX6-LABEL: mubuf_atomicrmw_sgpr_ptr_offset4095:1203; GFX6:       ; %bb.0:1204; GFX6-NEXT:    s_mov_b32 s0, s21205; GFX6-NEXT:    s_mov_b32 s1, s31206; GFX6-NEXT:    v_mov_b32_e32 v0, 21207; GFX6-NEXT:    s_mov_b32 s2, -11208; GFX6-NEXT:    s_mov_b32 s3, 0xf0001209; GFX6-NEXT:    s_movk_i32 s4, 0x3ffc1210; GFX6-NEXT:    buffer_atomic_add v0, off, s[0:3], s4 glc1211; GFX6-NEXT:    s_waitcnt vmcnt(0)1212; GFX6-NEXT:    buffer_wbinvl11213; GFX6-NEXT:    s_waitcnt expcnt(0)1214; GFX6-NEXT:    ; return to shader part epilog1215;1216; GFX7-LABEL: mubuf_atomicrmw_sgpr_ptr_offset4095:1217; GFX7:       ; %bb.0:1218; GFX7-NEXT:    s_mov_b32 s0, s21219; GFX7-NEXT:    s_mov_b32 s1, s31220; GFX7-NEXT:    v_mov_b32_e32 v0, 21221; GFX7-NEXT:    s_mov_b32 s2, -11222; GFX7-NEXT:    s_mov_b32 s3, 0xf0001223; GFX7-NEXT:    s_movk_i32 s4, 0x3ffc1224; GFX7-NEXT:    buffer_atomic_add v0, off, s[0:3], s4 glc1225; GFX7-NEXT:    s_waitcnt vmcnt(0)1226; GFX7-NEXT:    buffer_wbinvl11227; GFX7-NEXT:    ; return to shader part epilog1228;1229; GFX12-LABEL: mubuf_atomicrmw_sgpr_ptr_offset4095:1230; GFX12:       ; %bb.0:1231; GFX12-NEXT:    v_dual_mov_b32 v0, 2 :: v_dual_mov_b32 v1, 01232; GFX12-NEXT:    global_atomic_add_u32 v0, v1, v0, s[2:3] offset:16380 th:TH_ATOMIC_RETURN scope:SCOPE_DEV1233; GFX12-NEXT:    s_wait_loadcnt 0x01234; GFX12-NEXT:    global_inv scope:SCOPE_DEV1235; GFX12-NEXT:    s_wait_loadcnt 0x01236; GFX12-NEXT:    ; return to shader part epilog1237  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 40951238  %result = atomicrmw add ptr addrspace(1) %gep, i32 2 syncscope("agent") seq_cst1239  %cast = bitcast i32 %result to float1240  ret float %cast1241}1242 1243define amdgpu_ps float @mubuf_atomicrmw_sgpr_ptr_offset4294967296(ptr addrspace(1) inreg %ptr) {1244; GFX6-LABEL: mubuf_atomicrmw_sgpr_ptr_offset4294967296:1245; GFX6:       ; %bb.0:1246; GFX6-NEXT:    v_mov_b32_e32 v1, 01247; GFX6-NEXT:    s_mov_b32 s0, s21248; GFX6-NEXT:    s_mov_b32 s1, s31249; GFX6-NEXT:    v_mov_b32_e32 v0, 21250; GFX6-NEXT:    s_mov_b32 s2, 01251; GFX6-NEXT:    v_mov_b32_e32 v2, 41252; GFX6-NEXT:    s_mov_b32 s3, 0xf0001253; GFX6-NEXT:    buffer_atomic_add v0, v[1:2], s[0:3], 0 addr64 glc1254; GFX6-NEXT:    s_waitcnt vmcnt(0)1255; GFX6-NEXT:    buffer_wbinvl11256; GFX6-NEXT:    s_waitcnt expcnt(0)1257; GFX6-NEXT:    ; return to shader part epilog1258;1259; GFX7-LABEL: mubuf_atomicrmw_sgpr_ptr_offset4294967296:1260; GFX7:       ; %bb.0:1261; GFX7-NEXT:    v_mov_b32_e32 v1, 01262; GFX7-NEXT:    s_mov_b32 s0, s21263; GFX7-NEXT:    s_mov_b32 s1, s31264; GFX7-NEXT:    v_mov_b32_e32 v0, 21265; GFX7-NEXT:    s_mov_b32 s2, 01266; GFX7-NEXT:    v_mov_b32_e32 v2, 41267; GFX7-NEXT:    s_mov_b32 s3, 0xf0001268; GFX7-NEXT:    buffer_atomic_add v0, v[1:2], s[0:3], 0 addr64 glc1269; GFX7-NEXT:    s_waitcnt vmcnt(0)1270; GFX7-NEXT:    buffer_wbinvl11271; GFX7-NEXT:    ; return to shader part epilog1272;1273; GFX12-LABEL: mubuf_atomicrmw_sgpr_ptr_offset4294967296:1274; GFX12:       ; %bb.0:1275; GFX12-NEXT:    s_add_co_u32 s0, s2, 01276; GFX12-NEXT:    s_add_co_ci_u32 s1, s3, 41277; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)1278; GFX12-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s11279; GFX12-NEXT:    v_mov_b32_e32 v2, 21280; GFX12-NEXT:    global_atomic_add_u32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_DEV1281; GFX12-NEXT:    s_wait_loadcnt 0x01282; GFX12-NEXT:    global_inv scope:SCOPE_DEV1283; GFX12-NEXT:    s_wait_loadcnt 0x01284; GFX12-NEXT:    ; return to shader part epilog1285  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 42949672961286  %result = atomicrmw add ptr addrspace(1) %gep, i32 2 syncscope("agent") seq_cst1287  %cast = bitcast i32 %result to float1288  ret float %cast1289}1290 1291define amdgpu_ps float @mubuf_atomicrmw_vgpr_ptr_offset4095(ptr addrspace(1) %ptr) {1292; GFX6-LABEL: mubuf_atomicrmw_vgpr_ptr_offset4095:1293; GFX6:       ; %bb.0:1294; GFX6-NEXT:    v_mov_b32_e32 v2, 21295; GFX6-NEXT:    s_mov_b32 s2, 01296; GFX6-NEXT:    s_mov_b32 s3, 0xf0001297; GFX6-NEXT:    s_mov_b64 s[0:1], 01298; GFX6-NEXT:    s_movk_i32 s4, 0x3ffc1299; GFX6-NEXT:    buffer_atomic_add v2, v[0:1], s[0:3], s4 addr64 glc1300; GFX6-NEXT:    s_waitcnt vmcnt(0)1301; GFX6-NEXT:    buffer_wbinvl11302; GFX6-NEXT:    v_mov_b32_e32 v0, v21303; GFX6-NEXT:    s_waitcnt expcnt(0)1304; GFX6-NEXT:    ; return to shader part epilog1305;1306; GFX7-LABEL: mubuf_atomicrmw_vgpr_ptr_offset4095:1307; GFX7:       ; %bb.0:1308; GFX7-NEXT:    v_mov_b32_e32 v2, 21309; GFX7-NEXT:    s_mov_b32 s2, 01310; GFX7-NEXT:    s_mov_b32 s3, 0xf0001311; GFX7-NEXT:    s_mov_b64 s[0:1], 01312; GFX7-NEXT:    s_movk_i32 s4, 0x3ffc1313; GFX7-NEXT:    buffer_atomic_add v2, v[0:1], s[0:3], s4 addr64 glc1314; GFX7-NEXT:    s_waitcnt vmcnt(0)1315; GFX7-NEXT:    buffer_wbinvl11316; GFX7-NEXT:    v_mov_b32_e32 v0, v21317; GFX7-NEXT:    ; return to shader part epilog1318;1319; GFX12-LABEL: mubuf_atomicrmw_vgpr_ptr_offset4095:1320; GFX12:       ; %bb.0:1321; GFX12-NEXT:    v_mov_b32_e32 v2, 21322; GFX12-NEXT:    global_atomic_add_u32 v0, v[0:1], v2, off offset:16380 th:TH_ATOMIC_RETURN scope:SCOPE_DEV1323; GFX12-NEXT:    s_wait_loadcnt 0x01324; GFX12-NEXT:    global_inv scope:SCOPE_DEV1325; GFX12-NEXT:    s_wait_loadcnt 0x01326; GFX12-NEXT:    ; return to shader part epilog1327  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 40951328  %result = atomicrmw add ptr addrspace(1) %gep, i32 2 syncscope("agent") seq_cst1329  %cast = bitcast i32 %result to float1330  ret float %cast1331}1332 1333define amdgpu_ps float @mubuf_atomicrmw_vgpr_ptr_offset4294967296(ptr addrspace(1) %ptr) {1334; GFX6-LABEL: mubuf_atomicrmw_vgpr_ptr_offset4294967296:1335; GFX6:       ; %bb.0:1336; GFX6-NEXT:    s_mov_b32 s0, 01337; GFX6-NEXT:    s_mov_b32 s1, 41338; GFX6-NEXT:    v_mov_b32_e32 v2, 21339; GFX6-NEXT:    s_mov_b32 s2, 01340; GFX6-NEXT:    s_mov_b32 s3, 0xf0001341; GFX6-NEXT:    buffer_atomic_add v2, v[0:1], s[0:3], 0 addr64 glc1342; GFX6-NEXT:    s_waitcnt vmcnt(0)1343; GFX6-NEXT:    buffer_wbinvl11344; GFX6-NEXT:    v_mov_b32_e32 v0, v21345; GFX6-NEXT:    s_waitcnt expcnt(0)1346; GFX6-NEXT:    ; return to shader part epilog1347;1348; GFX7-LABEL: mubuf_atomicrmw_vgpr_ptr_offset4294967296:1349; GFX7:       ; %bb.0:1350; GFX7-NEXT:    s_mov_b32 s0, 01351; GFX7-NEXT:    s_mov_b32 s1, 41352; GFX7-NEXT:    v_mov_b32_e32 v2, 21353; GFX7-NEXT:    s_mov_b32 s2, 01354; GFX7-NEXT:    s_mov_b32 s3, 0xf0001355; GFX7-NEXT:    buffer_atomic_add v2, v[0:1], s[0:3], 0 addr64 glc1356; GFX7-NEXT:    s_waitcnt vmcnt(0)1357; GFX7-NEXT:    buffer_wbinvl11358; GFX7-NEXT:    v_mov_b32_e32 v0, v21359; GFX7-NEXT:    ; return to shader part epilog1360;1361; GFX12-LABEL: mubuf_atomicrmw_vgpr_ptr_offset4294967296:1362; GFX12:       ; %bb.0:1363; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v0, 01364; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)1365; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, 4, v1, vcc_lo1366; GFX12-NEXT:    v_mov_b32_e32 v2, 21367; GFX12-NEXT:    global_atomic_add_u32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_DEV1368; GFX12-NEXT:    s_wait_loadcnt 0x01369; GFX12-NEXT:    global_inv scope:SCOPE_DEV1370; GFX12-NEXT:    s_wait_loadcnt 0x01371; GFX12-NEXT:    ; return to shader part epilog1372  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 42949672961373  %result = atomicrmw add ptr addrspace(1) %gep, i32 2 syncscope("agent") seq_cst1374  %cast = bitcast i32 %result to float1375  ret float %cast1376}1377 1378define amdgpu_ps float @mubuf_atomicrmw_sgpr_ptr_vgpr_offset(ptr addrspace(1) inreg %ptr, i32 %voffset) {1379; GFX6-LABEL: mubuf_atomicrmw_sgpr_ptr_vgpr_offset:1380; GFX6:       ; %bb.0:1381; GFX6-NEXT:    v_ashrrev_i32_e32 v1, 31, v01382; GFX6-NEXT:    v_lshl_b64 v[1:2], v[0:1], 21383; GFX6-NEXT:    s_mov_b32 s0, s21384; GFX6-NEXT:    s_mov_b32 s1, s31385; GFX6-NEXT:    v_mov_b32_e32 v0, 21386; GFX6-NEXT:    s_mov_b32 s2, 01387; GFX6-NEXT:    s_mov_b32 s3, 0xf0001388; GFX6-NEXT:    buffer_atomic_add v0, v[1:2], s[0:3], 0 addr64 glc1389; GFX6-NEXT:    s_waitcnt vmcnt(0)1390; GFX6-NEXT:    buffer_wbinvl11391; GFX6-NEXT:    s_waitcnt expcnt(0)1392; GFX6-NEXT:    ; return to shader part epilog1393;1394; GFX7-LABEL: mubuf_atomicrmw_sgpr_ptr_vgpr_offset:1395; GFX7:       ; %bb.0:1396; GFX7-NEXT:    v_ashrrev_i32_e32 v1, 31, v01397; GFX7-NEXT:    v_lshl_b64 v[1:2], v[0:1], 21398; GFX7-NEXT:    s_mov_b32 s0, s21399; GFX7-NEXT:    s_mov_b32 s1, s31400; GFX7-NEXT:    v_mov_b32_e32 v0, 21401; GFX7-NEXT:    s_mov_b32 s2, 01402; GFX7-NEXT:    s_mov_b32 s3, 0xf0001403; GFX7-NEXT:    buffer_atomic_add v0, v[1:2], s[0:3], 0 addr64 glc1404; GFX7-NEXT:    s_waitcnt vmcnt(0)1405; GFX7-NEXT:    buffer_wbinvl11406; GFX7-NEXT:    ; return to shader part epilog1407;1408; GFX12-LABEL: mubuf_atomicrmw_sgpr_ptr_vgpr_offset:1409; GFX12:       ; %bb.0:1410; GFX12-NEXT:    v_ashrrev_i32_e32 v1, 31, v01411; GFX12-NEXT:    v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s31412; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1413; GFX12-NEXT:    v_lshlrev_b64_e32 v[0:1], 2, v[0:1]1414; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v2, v01415; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)1416; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo1417; GFX12-NEXT:    v_mov_b32_e32 v2, 21418; GFX12-NEXT:    global_atomic_add_u32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_DEV1419; GFX12-NEXT:    s_wait_loadcnt 0x01420; GFX12-NEXT:    global_inv scope:SCOPE_DEV1421; GFX12-NEXT:    s_wait_loadcnt 0x01422; GFX12-NEXT:    ; return to shader part epilog1423  %gep = getelementptr i32, ptr addrspace(1) %ptr, i32 %voffset1424  %result = atomicrmw add ptr addrspace(1) %gep, i32 2 syncscope("agent") seq_cst1425  %cast = bitcast i32 %result to float1426  ret float %cast1427}1428 1429define amdgpu_ps float @mubuf_cmpxchg_sgpr_ptr_offset4095(ptr addrspace(1) inreg %ptr, i32 %old, i32 %in) {1430; GFX6-LABEL: mubuf_cmpxchg_sgpr_ptr_offset4095:1431; GFX6:       ; %bb.0:1432; GFX6-NEXT:    s_mov_b32 s0, s21433; GFX6-NEXT:    s_mov_b32 s1, s31434; GFX6-NEXT:    v_mov_b32_e32 v2, v01435; GFX6-NEXT:    s_mov_b32 s2, -11436; GFX6-NEXT:    s_mov_b32 s3, 0xf0001437; GFX6-NEXT:    s_movk_i32 s4, 0x3ffc1438; GFX6-NEXT:    buffer_atomic_cmpswap v[1:2], off, s[0:3], s4 glc1439; GFX6-NEXT:    s_waitcnt vmcnt(0)1440; GFX6-NEXT:    buffer_wbinvl11441; GFX6-NEXT:    v_mov_b32_e32 v0, v11442; GFX6-NEXT:    s_waitcnt expcnt(0)1443; GFX6-NEXT:    ; return to shader part epilog1444;1445; GFX7-LABEL: mubuf_cmpxchg_sgpr_ptr_offset4095:1446; GFX7:       ; %bb.0:1447; GFX7-NEXT:    s_mov_b32 s0, s21448; GFX7-NEXT:    s_mov_b32 s1, s31449; GFX7-NEXT:    v_mov_b32_e32 v2, v01450; GFX7-NEXT:    s_mov_b32 s2, -11451; GFX7-NEXT:    s_mov_b32 s3, 0xf0001452; GFX7-NEXT:    s_movk_i32 s4, 0x3ffc1453; GFX7-NEXT:    buffer_atomic_cmpswap v[1:2], off, s[0:3], s4 glc1454; GFX7-NEXT:    s_waitcnt vmcnt(0)1455; GFX7-NEXT:    buffer_wbinvl11456; GFX7-NEXT:    v_mov_b32_e32 v0, v11457; GFX7-NEXT:    ; return to shader part epilog1458;1459; GFX12-LABEL: mubuf_cmpxchg_sgpr_ptr_offset4095:1460; GFX12:       ; %bb.0:1461; GFX12-NEXT:    v_mov_b32_e32 v2, v01462; GFX12-NEXT:    v_mov_b32_e32 v0, 01463; GFX12-NEXT:    global_atomic_cmpswap_b32 v0, v0, v[1:2], s[2:3] offset:16380 th:TH_ATOMIC_RETURN scope:SCOPE_DEV1464; GFX12-NEXT:    s_wait_loadcnt 0x01465; GFX12-NEXT:    global_inv scope:SCOPE_DEV1466; GFX12-NEXT:    s_wait_loadcnt 0x01467; GFX12-NEXT:    ; return to shader part epilog1468  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 40951469  %result.struct = cmpxchg ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("agent") seq_cst seq_cst1470  %result = extractvalue { i32, i1 } %result.struct, 01471  %cast = bitcast i32 %result to float1472  ret float %cast1473}1474 1475define amdgpu_ps float @mubuf_cmpxchg_sgpr_ptr_offset4294967296(ptr addrspace(1) inreg %ptr, i32 %old, i32 %in) {1476; GFX6-LABEL: mubuf_cmpxchg_sgpr_ptr_offset4294967296:1477; GFX6:       ; %bb.0:1478; GFX6-NEXT:    v_mov_b32_e32 v3, 01479; GFX6-NEXT:    s_mov_b32 s0, s21480; GFX6-NEXT:    s_mov_b32 s1, s31481; GFX6-NEXT:    v_mov_b32_e32 v2, v01482; GFX6-NEXT:    s_mov_b32 s2, 01483; GFX6-NEXT:    v_mov_b32_e32 v4, 41484; GFX6-NEXT:    s_mov_b32 s3, 0xf0001485; GFX6-NEXT:    buffer_atomic_cmpswap v[1:2], v[3:4], s[0:3], 0 addr64 glc1486; GFX6-NEXT:    s_waitcnt vmcnt(0)1487; GFX6-NEXT:    buffer_wbinvl11488; GFX6-NEXT:    v_mov_b32_e32 v0, v11489; GFX6-NEXT:    s_waitcnt expcnt(0)1490; GFX6-NEXT:    ; return to shader part epilog1491;1492; GFX7-LABEL: mubuf_cmpxchg_sgpr_ptr_offset4294967296:1493; GFX7:       ; %bb.0:1494; GFX7-NEXT:    v_mov_b32_e32 v3, 01495; GFX7-NEXT:    s_mov_b32 s0, s21496; GFX7-NEXT:    s_mov_b32 s1, s31497; GFX7-NEXT:    v_mov_b32_e32 v2, v01498; GFX7-NEXT:    s_mov_b32 s2, 01499; GFX7-NEXT:    v_mov_b32_e32 v4, 41500; GFX7-NEXT:    s_mov_b32 s3, 0xf0001501; GFX7-NEXT:    buffer_atomic_cmpswap v[1:2], v[3:4], s[0:3], 0 addr64 glc1502; GFX7-NEXT:    s_waitcnt vmcnt(0)1503; GFX7-NEXT:    buffer_wbinvl11504; GFX7-NEXT:    v_mov_b32_e32 v0, v11505; GFX7-NEXT:    ; return to shader part epilog1506;1507; GFX12-LABEL: mubuf_cmpxchg_sgpr_ptr_offset4294967296:1508; GFX12:       ; %bb.0:1509; GFX12-NEXT:    s_add_co_u32 s0, s2, 01510; GFX12-NEXT:    s_add_co_ci_u32 s1, s3, 41511; GFX12-NEXT:    v_mov_b32_e32 v2, v01512; GFX12-NEXT:    v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v3, s01513; GFX12-NEXT:    global_atomic_cmpswap_b32 v0, v[3:4], v[1:2], off th:TH_ATOMIC_RETURN scope:SCOPE_DEV1514; GFX12-NEXT:    s_wait_loadcnt 0x01515; GFX12-NEXT:    global_inv scope:SCOPE_DEV1516; GFX12-NEXT:    s_wait_loadcnt 0x01517; GFX12-NEXT:    ; return to shader part epilog1518  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 42949672961519  %result.struct = cmpxchg ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("agent") seq_cst seq_cst1520  %result = extractvalue { i32, i1 } %result.struct, 01521  %cast = bitcast i32 %result to float1522  ret float %cast1523}1524 1525define amdgpu_ps float @mubuf_cmpxchg_vgpr_ptr_offset4095(ptr addrspace(1) %ptr, i32 %old, i32 %in) {1526; GFX6-LABEL: mubuf_cmpxchg_vgpr_ptr_offset4095:1527; GFX6:       ; %bb.0:1528; GFX6-NEXT:    v_mov_b32_e32 v4, v21529; GFX6-NEXT:    s_mov_b32 s2, 01530; GFX6-NEXT:    s_mov_b32 s3, 0xf0001531; GFX6-NEXT:    s_mov_b64 s[0:1], 01532; GFX6-NEXT:    s_movk_i32 s4, 0x3ffc1533; GFX6-NEXT:    buffer_atomic_cmpswap v[3:4], v[0:1], s[0:3], s4 addr64 glc1534; GFX6-NEXT:    s_waitcnt vmcnt(0)1535; GFX6-NEXT:    buffer_wbinvl11536; GFX6-NEXT:    v_mov_b32_e32 v0, v31537; GFX6-NEXT:    s_waitcnt expcnt(0)1538; GFX6-NEXT:    ; return to shader part epilog1539;1540; GFX7-LABEL: mubuf_cmpxchg_vgpr_ptr_offset4095:1541; GFX7:       ; %bb.0:1542; GFX7-NEXT:    v_mov_b32_e32 v4, v21543; GFX7-NEXT:    s_mov_b32 s2, 01544; GFX7-NEXT:    s_mov_b32 s3, 0xf0001545; GFX7-NEXT:    s_mov_b64 s[0:1], 01546; GFX7-NEXT:    s_movk_i32 s4, 0x3ffc1547; GFX7-NEXT:    buffer_atomic_cmpswap v[3:4], v[0:1], s[0:3], s4 addr64 glc1548; GFX7-NEXT:    s_waitcnt vmcnt(0)1549; GFX7-NEXT:    buffer_wbinvl11550; GFX7-NEXT:    v_mov_b32_e32 v0, v31551; GFX7-NEXT:    ; return to shader part epilog1552;1553; GFX12-LABEL: mubuf_cmpxchg_vgpr_ptr_offset4095:1554; GFX12:       ; %bb.0:1555; GFX12-NEXT:    v_mov_b32_e32 v4, v21556; GFX12-NEXT:    global_atomic_cmpswap_b32 v0, v[0:1], v[3:4], off offset:16380 th:TH_ATOMIC_RETURN scope:SCOPE_DEV1557; GFX12-NEXT:    s_wait_loadcnt 0x01558; GFX12-NEXT:    global_inv scope:SCOPE_DEV1559; GFX12-NEXT:    s_wait_loadcnt 0x01560; GFX12-NEXT:    ; return to shader part epilog1561  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 40951562  %result.struct = cmpxchg ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("agent") seq_cst seq_cst1563  %result = extractvalue { i32, i1 } %result.struct, 01564  %cast = bitcast i32 %result to float1565  ret float %cast1566}1567 1568define amdgpu_ps float @mubuf_cmpxchg_vgpr_ptr_offset4294967296(ptr addrspace(1) %ptr, i32 %old, i32 %in) {1569; GFX6-LABEL: mubuf_cmpxchg_vgpr_ptr_offset4294967296:1570; GFX6:       ; %bb.0:1571; GFX6-NEXT:    s_mov_b32 s0, 01572; GFX6-NEXT:    v_mov_b32_e32 v4, v21573; GFX6-NEXT:    s_mov_b32 s1, 41574; GFX6-NEXT:    s_mov_b32 s2, 01575; GFX6-NEXT:    s_mov_b32 s3, 0xf0001576; GFX6-NEXT:    buffer_atomic_cmpswap v[3:4], v[0:1], s[0:3], 0 addr64 glc1577; GFX6-NEXT:    s_waitcnt vmcnt(0)1578; GFX6-NEXT:    buffer_wbinvl11579; GFX6-NEXT:    v_mov_b32_e32 v0, v31580; GFX6-NEXT:    s_waitcnt expcnt(0)1581; GFX6-NEXT:    ; return to shader part epilog1582;1583; GFX7-LABEL: mubuf_cmpxchg_vgpr_ptr_offset4294967296:1584; GFX7:       ; %bb.0:1585; GFX7-NEXT:    s_mov_b32 s0, 01586; GFX7-NEXT:    v_mov_b32_e32 v4, v21587; GFX7-NEXT:    s_mov_b32 s1, 41588; GFX7-NEXT:    s_mov_b32 s2, 01589; GFX7-NEXT:    s_mov_b32 s3, 0xf0001590; GFX7-NEXT:    buffer_atomic_cmpswap v[3:4], v[0:1], s[0:3], 0 addr64 glc1591; GFX7-NEXT:    s_waitcnt vmcnt(0)1592; GFX7-NEXT:    buffer_wbinvl11593; GFX7-NEXT:    v_mov_b32_e32 v0, v31594; GFX7-NEXT:    ; return to shader part epilog1595;1596; GFX12-LABEL: mubuf_cmpxchg_vgpr_ptr_offset4294967296:1597; GFX12:       ; %bb.0:1598; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v0, 01599; GFX12-NEXT:    v_mov_b32_e32 v4, v21600; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, 4, v1, vcc_lo1601; GFX12-NEXT:    global_atomic_cmpswap_b32 v0, v[0:1], v[3:4], off th:TH_ATOMIC_RETURN scope:SCOPE_DEV1602; GFX12-NEXT:    s_wait_loadcnt 0x01603; GFX12-NEXT:    global_inv scope:SCOPE_DEV1604; GFX12-NEXT:    s_wait_loadcnt 0x01605; GFX12-NEXT:    ; return to shader part epilog1606  %gep = getelementptr i32, ptr addrspace(1) %ptr, i64 42949672961607  %result.struct = cmpxchg ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("agent") seq_cst seq_cst1608  %result = extractvalue { i32, i1 } %result.struct, 01609  %cast = bitcast i32 %result to float1610  ret float %cast1611}1612 1613define amdgpu_ps float @mubuf_cmpxchg_sgpr_ptr_vgpr_offset(ptr addrspace(1) inreg %ptr, i32 %voffset, i32 %old, i32 %in) {1614; GFX6-LABEL: mubuf_cmpxchg_sgpr_ptr_vgpr_offset:1615; GFX6:       ; %bb.0:1616; GFX6-NEXT:    v_mov_b32_e32 v3, v11617; GFX6-NEXT:    v_ashrrev_i32_e32 v1, 31, v01618; GFX6-NEXT:    v_lshl_b64 v[0:1], v[0:1], 21619; GFX6-NEXT:    s_mov_b32 s0, s21620; GFX6-NEXT:    s_mov_b32 s1, s31621; GFX6-NEXT:    s_mov_b32 s2, 01622; GFX6-NEXT:    s_mov_b32 s3, 0xf0001623; GFX6-NEXT:    buffer_atomic_cmpswap v[2:3], v[0:1], s[0:3], 0 addr64 glc1624; GFX6-NEXT:    s_waitcnt vmcnt(0)1625; GFX6-NEXT:    buffer_wbinvl11626; GFX6-NEXT:    v_mov_b32_e32 v0, v21627; GFX6-NEXT:    s_waitcnt expcnt(0)1628; GFX6-NEXT:    ; return to shader part epilog1629;1630; GFX7-LABEL: mubuf_cmpxchg_sgpr_ptr_vgpr_offset:1631; GFX7:       ; %bb.0:1632; GFX7-NEXT:    v_mov_b32_e32 v3, v11633; GFX7-NEXT:    v_ashrrev_i32_e32 v1, 31, v01634; GFX7-NEXT:    v_lshl_b64 v[0:1], v[0:1], 21635; GFX7-NEXT:    s_mov_b32 s0, s21636; GFX7-NEXT:    s_mov_b32 s1, s31637; GFX7-NEXT:    s_mov_b32 s2, 01638; GFX7-NEXT:    s_mov_b32 s3, 0xf0001639; GFX7-NEXT:    buffer_atomic_cmpswap v[2:3], v[0:1], s[0:3], 0 addr64 glc1640; GFX7-NEXT:    s_waitcnt vmcnt(0)1641; GFX7-NEXT:    buffer_wbinvl11642; GFX7-NEXT:    v_mov_b32_e32 v0, v21643; GFX7-NEXT:    ; return to shader part epilog1644;1645; GFX12-LABEL: mubuf_cmpxchg_sgpr_ptr_vgpr_offset:1646; GFX12:       ; %bb.0:1647; GFX12-NEXT:    v_mov_b32_e32 v3, v11648; GFX12-NEXT:    v_ashrrev_i32_e32 v1, 31, v01649; GFX12-NEXT:    v_dual_mov_b32 v5, s3 :: v_dual_mov_b32 v4, s21650; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1651; GFX12-NEXT:    v_lshlrev_b64_e32 v[0:1], 2, v[0:1]1652; GFX12-NEXT:    v_add_co_u32 v0, vcc_lo, v4, v01653; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)1654; GFX12-NEXT:    v_add_co_ci_u32_e64 v1, null, v5, v1, vcc_lo1655; GFX12-NEXT:    global_atomic_cmpswap_b32 v0, v[0:1], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_DEV1656; GFX12-NEXT:    s_wait_loadcnt 0x01657; GFX12-NEXT:    global_inv scope:SCOPE_DEV1658; GFX12-NEXT:    s_wait_loadcnt 0x01659; GFX12-NEXT:    ; return to shader part epilog1660  %gep = getelementptr i32, ptr addrspace(1) %ptr, i32 %voffset1661  %result.struct = cmpxchg ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("agent") seq_cst seq_cst1662  %result = extractvalue { i32, i1 } %result.struct, 01663  %cast = bitcast i32 %result to float1664  ret float %cast1665}1666