455 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn < %s | FileCheck %s3; RUN: llc -mtriple=amdgcn -mcpu=bonaire < %s | FileCheck -check-prefixes=GFX7 %s4; RUN: llc -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GFX8 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9 %s6; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefixes=GFX11 %s7 8define amdgpu_kernel void @lds_atomic_cmpxchg_ret_i32_offset(ptr addrspace(1) %out, [8 x i32], ptr addrspace(3) %ptr, [8 x i32], i32 %swap) nounwind {9; CHECK-LABEL: lds_atomic_cmpxchg_ret_i32_offset:10; CHECK: ; %bb.0:11; CHECK-NEXT: s_load_dword s2, s[4:5], 0x1312; CHECK-NEXT: s_load_dword s3, s[4:5], 0x1c13; CHECK-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x914; CHECK-NEXT: v_mov_b32_e32 v0, 715; CHECK-NEXT: s_waitcnt lgkmcnt(0)16; CHECK-NEXT: v_mov_b32_e32 v1, s217; CHECK-NEXT: v_mov_b32_e32 v2, s318; CHECK-NEXT: s_mov_b32 m0, -119; CHECK-NEXT: ds_cmpst_rtn_b32 v0, v1, v0, v2 offset:1620; CHECK-NEXT: s_waitcnt lgkmcnt(0)21; CHECK-NEXT: s_mov_b32 s3, 0xf00022; CHECK-NEXT: s_mov_b32 s2, -123; CHECK-NEXT: buffer_store_dword v0, off, s[0:3], 024; CHECK-NEXT: s_endpgm25;26; GFX7-LABEL: lds_atomic_cmpxchg_ret_i32_offset:27; GFX7: ; %bb.0:28; GFX7-NEXT: s_load_dword s2, s[4:5], 0x1329; GFX7-NEXT: s_load_dword s3, s[4:5], 0x1c30; GFX7-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x931; GFX7-NEXT: v_mov_b32_e32 v0, 732; GFX7-NEXT: s_mov_b32 m0, -133; GFX7-NEXT: s_waitcnt lgkmcnt(0)34; GFX7-NEXT: v_mov_b32_e32 v1, s235; GFX7-NEXT: v_mov_b32_e32 v2, s336; GFX7-NEXT: ds_cmpst_rtn_b32 v0, v1, v0, v2 offset:1637; GFX7-NEXT: s_waitcnt lgkmcnt(0)38; GFX7-NEXT: s_mov_b32 s3, 0xf00039; GFX7-NEXT: s_mov_b32 s2, -140; GFX7-NEXT: buffer_store_dword v0, off, s[0:3], 041; GFX7-NEXT: s_endpgm42;43; GFX8-LABEL: lds_atomic_cmpxchg_ret_i32_offset:44; GFX8: ; %bb.0:45; GFX8-NEXT: s_load_dword s2, s[4:5], 0x4c46; GFX8-NEXT: s_load_dword s3, s[4:5], 0x7047; GFX8-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2448; GFX8-NEXT: v_mov_b32_e32 v0, 749; GFX8-NEXT: s_mov_b32 m0, -150; GFX8-NEXT: s_waitcnt lgkmcnt(0)51; GFX8-NEXT: v_mov_b32_e32 v1, s252; GFX8-NEXT: v_mov_b32_e32 v2, s353; GFX8-NEXT: ds_cmpst_rtn_b32 v2, v1, v0, v2 offset:1654; GFX8-NEXT: s_waitcnt lgkmcnt(0)55; GFX8-NEXT: v_mov_b32_e32 v0, s056; GFX8-NEXT: v_mov_b32_e32 v1, s157; GFX8-NEXT: flat_store_dword v[0:1], v258; GFX8-NEXT: s_endpgm59;60; GFX9-LABEL: lds_atomic_cmpxchg_ret_i32_offset:61; GFX9: ; %bb.0:62; GFX9-NEXT: s_load_dword s2, s[4:5], 0x4c63; GFX9-NEXT: s_load_dword s3, s[4:5], 0x7064; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2465; GFX9-NEXT: v_mov_b32_e32 v0, 766; GFX9-NEXT: s_waitcnt lgkmcnt(0)67; GFX9-NEXT: v_mov_b32_e32 v1, s268; GFX9-NEXT: v_mov_b32_e32 v2, s369; GFX9-NEXT: ds_cmpst_rtn_b32 v0, v1, v0, v2 offset:1670; GFX9-NEXT: s_waitcnt lgkmcnt(0)71; GFX9-NEXT: v_mov_b32_e32 v1, 072; GFX9-NEXT: global_store_dword v1, v0, s[0:1]73; GFX9-NEXT: s_endpgm74;75; GFX11-LABEL: lds_atomic_cmpxchg_ret_i32_offset:76; GFX11: ; %bb.0:77; GFX11-NEXT: s_clause 0x178; GFX11-NEXT: s_load_b32 s0, s[4:5], 0x4c79; GFX11-NEXT: s_load_b32 s1, s[4:5], 0x7080; GFX11-NEXT: v_mov_b32_e32 v0, 781; GFX11-NEXT: s_waitcnt lgkmcnt(0)82; GFX11-NEXT: v_mov_b32_e32 v1, s083; GFX11-NEXT: v_mov_b32_e32 v2, s184; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x2485; GFX11-NEXT: s_waitcnt lgkmcnt(0)86; GFX11-NEXT: ds_cmpstore_rtn_b32 v0, v1, v2, v0 offset:1687; GFX11-NEXT: s_waitcnt lgkmcnt(0)88; GFX11-NEXT: buffer_gl0_inv89; GFX11-NEXT: v_mov_b32_e32 v1, 090; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]91; GFX11-NEXT: s_endpgm92 %gep = getelementptr i32, ptr addrspace(3) %ptr, i32 493 %pair = cmpxchg ptr addrspace(3) %gep, i32 7, i32 %swap seq_cst monotonic94 %result = extractvalue { i32, i1 } %pair, 095 store i32 %result, ptr addrspace(1) %out, align 496 ret void97}98 99define amdgpu_kernel void @lds_atomic_cmpxchg_ret_i64_offset(ptr addrspace(1) %out, ptr addrspace(3) %ptr, i64 %swap) nounwind {100; CHECK-LABEL: lds_atomic_cmpxchg_ret_i64_offset:101; CHECK: ; %bb.0:102; CHECK-NEXT: s_load_dword s6, s[4:5], 0xb103; CHECK-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0xd104; CHECK-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9105; CHECK-NEXT: v_mov_b32_e32 v0, 7106; CHECK-NEXT: v_mov_b32_e32 v1, 0107; CHECK-NEXT: s_waitcnt lgkmcnt(0)108; CHECK-NEXT: v_mov_b32_e32 v4, s6109; CHECK-NEXT: v_mov_b32_e32 v2, s2110; CHECK-NEXT: v_mov_b32_e32 v3, s3111; CHECK-NEXT: s_mov_b32 m0, -1112; CHECK-NEXT: ds_cmpst_rtn_b64 v[0:1], v4, v[0:1], v[2:3] offset:32113; CHECK-NEXT: s_waitcnt lgkmcnt(0)114; CHECK-NEXT: s_mov_b32 s3, 0xf000115; CHECK-NEXT: s_mov_b32 s2, -1116; CHECK-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 0117; CHECK-NEXT: s_endpgm118;119; GFX7-LABEL: lds_atomic_cmpxchg_ret_i64_offset:120; GFX7: ; %bb.0:121; GFX7-NEXT: s_load_dword s6, s[4:5], 0xb122; GFX7-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0xd123; GFX7-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9124; GFX7-NEXT: v_mov_b32_e32 v0, 7125; GFX7-NEXT: v_mov_b32_e32 v1, 0126; GFX7-NEXT: s_waitcnt lgkmcnt(0)127; GFX7-NEXT: v_mov_b32_e32 v4, s6128; GFX7-NEXT: v_mov_b32_e32 v2, s2129; GFX7-NEXT: v_mov_b32_e32 v3, s3130; GFX7-NEXT: s_mov_b32 m0, -1131; GFX7-NEXT: ds_cmpst_rtn_b64 v[0:1], v4, v[0:1], v[2:3] offset:32132; GFX7-NEXT: s_waitcnt lgkmcnt(0)133; GFX7-NEXT: s_mov_b32 s3, 0xf000134; GFX7-NEXT: s_mov_b32 s2, -1135; GFX7-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 0136; GFX7-NEXT: s_endpgm137;138; GFX8-LABEL: lds_atomic_cmpxchg_ret_i64_offset:139; GFX8: ; %bb.0:140; GFX8-NEXT: s_load_dword s6, s[4:5], 0x2c141; GFX8-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x34142; GFX8-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x24143; GFX8-NEXT: v_mov_b32_e32 v0, 7144; GFX8-NEXT: v_mov_b32_e32 v1, 0145; GFX8-NEXT: s_waitcnt lgkmcnt(0)146; GFX8-NEXT: v_mov_b32_e32 v4, s6147; GFX8-NEXT: v_mov_b32_e32 v3, s1148; GFX8-NEXT: v_mov_b32_e32 v2, s0149; GFX8-NEXT: s_mov_b32 m0, -1150; GFX8-NEXT: ds_cmpst_rtn_b64 v[0:1], v4, v[0:1], v[2:3] offset:32151; GFX8-NEXT: s_waitcnt lgkmcnt(0)152; GFX8-NEXT: v_mov_b32_e32 v2, s2153; GFX8-NEXT: v_mov_b32_e32 v3, s3154; GFX8-NEXT: flat_store_dwordx2 v[2:3], v[0:1]155; GFX8-NEXT: s_endpgm156;157; GFX9-LABEL: lds_atomic_cmpxchg_ret_i64_offset:158; GFX9: ; %bb.0:159; GFX9-NEXT: s_load_dword s6, s[4:5], 0x2c160; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x34161; GFX9-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x24162; GFX9-NEXT: v_mov_b32_e32 v0, 7163; GFX9-NEXT: v_mov_b32_e32 v1, 0164; GFX9-NEXT: s_waitcnt lgkmcnt(0)165; GFX9-NEXT: v_mov_b32_e32 v4, s6166; GFX9-NEXT: v_mov_b32_e32 v3, s1167; GFX9-NEXT: v_mov_b32_e32 v2, s0168; GFX9-NEXT: ds_cmpst_rtn_b64 v[0:1], v4, v[0:1], v[2:3] offset:32169; GFX9-NEXT: s_waitcnt lgkmcnt(0)170; GFX9-NEXT: v_mov_b32_e32 v2, 0171; GFX9-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]172; GFX9-NEXT: s_endpgm173;174; GFX11-LABEL: lds_atomic_cmpxchg_ret_i64_offset:175; GFX11: ; %bb.0:176; GFX11-NEXT: s_clause 0x1177; GFX11-NEXT: s_load_b32 s2, s[4:5], 0x2c178; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x34179; GFX11-NEXT: v_mov_b32_e32 v0, 7180; GFX11-NEXT: v_mov_b32_e32 v1, 0181; GFX11-NEXT: s_waitcnt lgkmcnt(0)182; GFX11-NEXT: v_mov_b32_e32 v4, s2183; GFX11-NEXT: v_mov_b32_e32 v3, s1184; GFX11-NEXT: v_mov_b32_e32 v2, s0185; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x24186; GFX11-NEXT: s_waitcnt lgkmcnt(0)187; GFX11-NEXT: ds_cmpstore_rtn_b64 v[0:1], v4, v[2:3], v[0:1] offset:32188; GFX11-NEXT: s_waitcnt lgkmcnt(0)189; GFX11-NEXT: buffer_gl0_inv190; GFX11-NEXT: v_mov_b32_e32 v2, 0191; GFX11-NEXT: global_store_b64 v2, v[0:1], s[0:1]192; GFX11-NEXT: s_endpgm193 %gep = getelementptr i64, ptr addrspace(3) %ptr, i32 4194 %pair = cmpxchg ptr addrspace(3) %gep, i64 7, i64 %swap seq_cst monotonic195 %result = extractvalue { i64, i1 } %pair, 0196 store i64 %result, ptr addrspace(1) %out, align 8197 ret void198}199 200define amdgpu_kernel void @lds_atomic_cmpxchg_ret_i32_bad_si_offset(ptr addrspace(1) %out, ptr addrspace(3) %ptr, i32 %swap, i32 %a, i32 %b) nounwind {201; CHECK-LABEL: lds_atomic_cmpxchg_ret_i32_bad_si_offset:202; CHECK: ; %bb.0:203; CHECK-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0xc204; CHECK-NEXT: s_waitcnt lgkmcnt(0)205; CHECK-NEXT: s_load_dword s3, s[4:5], 0xb206; CHECK-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x9207; CHECK-NEXT: s_sub_i32 s1, s1, s2208; CHECK-NEXT: s_lshl_b32 s1, s1, 2209; CHECK-NEXT: s_waitcnt lgkmcnt(0)210; CHECK-NEXT: s_add_i32 s1, s3, s1211; CHECK-NEXT: s_add_i32 s1, s1, 16212; CHECK-NEXT: v_mov_b32_e32 v0, 7213; CHECK-NEXT: v_mov_b32_e32 v1, s0214; CHECK-NEXT: v_mov_b32_e32 v2, s1215; CHECK-NEXT: s_mov_b32 m0, -1216; CHECK-NEXT: ds_cmpst_rtn_b32 v0, v2, v0, v1217; CHECK-NEXT: s_waitcnt lgkmcnt(0)218; CHECK-NEXT: s_mov_b32 s7, 0xf000219; CHECK-NEXT: s_mov_b32 s6, -1220; CHECK-NEXT: buffer_store_dword v0, off, s[4:7], 0221; CHECK-NEXT: s_endpgm222;223; GFX7-LABEL: lds_atomic_cmpxchg_ret_i32_bad_si_offset:224; GFX7: ; %bb.0:225; GFX7-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0xb226; GFX7-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x9227; GFX7-NEXT: v_mov_b32_e32 v0, 7228; GFX7-NEXT: s_mov_b32 m0, -1229; GFX7-NEXT: s_mov_b32 s7, 0xf000230; GFX7-NEXT: s_waitcnt lgkmcnt(0)231; GFX7-NEXT: s_sub_i32 s2, s2, s3232; GFX7-NEXT: v_mov_b32_e32 v1, s1233; GFX7-NEXT: s_lshl_b32 s1, s2, 2234; GFX7-NEXT: s_add_i32 s0, s0, s1235; GFX7-NEXT: v_mov_b32_e32 v2, s0236; GFX7-NEXT: ds_cmpst_rtn_b32 v0, v2, v0, v1 offset:16237; GFX7-NEXT: s_waitcnt lgkmcnt(0)238; GFX7-NEXT: s_mov_b32 s6, -1239; GFX7-NEXT: buffer_store_dword v0, off, s[4:7], 0240; GFX7-NEXT: s_endpgm241;242; GFX8-LABEL: lds_atomic_cmpxchg_ret_i32_bad_si_offset:243; GFX8: ; %bb.0:244; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2c245; GFX8-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x24246; GFX8-NEXT: v_mov_b32_e32 v0, 7247; GFX8-NEXT: s_mov_b32 m0, -1248; GFX8-NEXT: s_waitcnt lgkmcnt(0)249; GFX8-NEXT: s_sub_i32 s2, s2, s3250; GFX8-NEXT: v_mov_b32_e32 v1, s1251; GFX8-NEXT: s_lshl_b32 s1, s2, 2252; GFX8-NEXT: s_add_i32 s0, s0, s1253; GFX8-NEXT: v_mov_b32_e32 v2, s0254; GFX8-NEXT: ds_cmpst_rtn_b32 v2, v2, v0, v1 offset:16255; GFX8-NEXT: s_waitcnt lgkmcnt(0)256; GFX8-NEXT: v_mov_b32_e32 v0, s4257; GFX8-NEXT: v_mov_b32_e32 v1, s5258; GFX8-NEXT: flat_store_dword v[0:1], v2259; GFX8-NEXT: s_endpgm260;261; GFX9-LABEL: lds_atomic_cmpxchg_ret_i32_bad_si_offset:262; GFX9: ; %bb.0:263; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2c264; GFX9-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x24265; GFX9-NEXT: v_mov_b32_e32 v0, 7266; GFX9-NEXT: s_waitcnt lgkmcnt(0)267; GFX9-NEXT: s_sub_i32 s2, s2, s3268; GFX9-NEXT: s_lshl2_add_u32 s0, s2, s0269; GFX9-NEXT: v_mov_b32_e32 v1, s0270; GFX9-NEXT: v_mov_b32_e32 v2, s1271; GFX9-NEXT: ds_cmpst_rtn_b32 v0, v1, v0, v2 offset:16272; GFX9-NEXT: s_waitcnt lgkmcnt(0)273; GFX9-NEXT: v_mov_b32_e32 v1, 0274; GFX9-NEXT: global_store_dword v1, v0, s[6:7]275; GFX9-NEXT: s_endpgm276;277; GFX11-LABEL: lds_atomic_cmpxchg_ret_i32_bad_si_offset:278; GFX11: ; %bb.0:279; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x2c280; GFX11-NEXT: v_mov_b32_e32 v0, 7281; GFX11-NEXT: s_waitcnt lgkmcnt(0)282; GFX11-NEXT: s_sub_i32 s2, s2, s3283; GFX11-NEXT: v_mov_b32_e32 v2, s1284; GFX11-NEXT: s_lshl2_add_u32 s0, s2, s0285; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)286; GFX11-NEXT: v_mov_b32_e32 v1, s0287; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x24288; GFX11-NEXT: s_waitcnt lgkmcnt(0)289; GFX11-NEXT: ds_cmpstore_rtn_b32 v0, v1, v2, v0 offset:16290; GFX11-NEXT: s_waitcnt lgkmcnt(0)291; GFX11-NEXT: buffer_gl0_inv292; GFX11-NEXT: v_mov_b32_e32 v1, 0293; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]294; GFX11-NEXT: s_endpgm295 %sub = sub i32 %a, %b296 %add = add i32 %sub, 4297 %gep = getelementptr i32, ptr addrspace(3) %ptr, i32 %add298 %pair = cmpxchg ptr addrspace(3) %gep, i32 7, i32 %swap seq_cst monotonic299 %result = extractvalue { i32, i1 } %pair, 0300 store i32 %result, ptr addrspace(1) %out, align 4301 ret void302}303 304define amdgpu_kernel void @lds_atomic_cmpxchg_noret_i32_offset(ptr addrspace(3) %ptr, [8 x i32], i32 %swap) nounwind {305; CHECK-LABEL: lds_atomic_cmpxchg_noret_i32_offset:306; CHECK: ; %bb.0:307; CHECK-NEXT: s_load_dword s0, s[4:5], 0x9308; CHECK-NEXT: s_load_dword s1, s[4:5], 0x12309; CHECK-NEXT: v_mov_b32_e32 v0, 7310; CHECK-NEXT: s_waitcnt lgkmcnt(0)311; CHECK-NEXT: v_mov_b32_e32 v1, s0312; CHECK-NEXT: v_mov_b32_e32 v2, s1313; CHECK-NEXT: s_mov_b32 m0, -1314; CHECK-NEXT: ds_cmpst_b32 v1, v0, v2 offset:16315; CHECK-NEXT: s_waitcnt lgkmcnt(0)316; CHECK-NEXT: s_endpgm317;318; GFX7-LABEL: lds_atomic_cmpxchg_noret_i32_offset:319; GFX7: ; %bb.0:320; GFX7-NEXT: s_load_dword s0, s[4:5], 0x9321; GFX7-NEXT: s_load_dword s1, s[4:5], 0x12322; GFX7-NEXT: v_mov_b32_e32 v0, 7323; GFX7-NEXT: s_mov_b32 m0, -1324; GFX7-NEXT: s_waitcnt lgkmcnt(0)325; GFX7-NEXT: v_mov_b32_e32 v1, s0326; GFX7-NEXT: v_mov_b32_e32 v2, s1327; GFX7-NEXT: ds_cmpst_b32 v1, v0, v2 offset:16328; GFX7-NEXT: s_waitcnt lgkmcnt(0)329; GFX7-NEXT: s_endpgm330;331; GFX8-LABEL: lds_atomic_cmpxchg_noret_i32_offset:332; GFX8: ; %bb.0:333; GFX8-NEXT: s_load_dword s0, s[4:5], 0x24334; GFX8-NEXT: s_load_dword s1, s[4:5], 0x48335; GFX8-NEXT: v_mov_b32_e32 v0, 7336; GFX8-NEXT: s_mov_b32 m0, -1337; GFX8-NEXT: s_waitcnt lgkmcnt(0)338; GFX8-NEXT: v_mov_b32_e32 v1, s0339; GFX8-NEXT: v_mov_b32_e32 v2, s1340; GFX8-NEXT: ds_cmpst_b32 v1, v0, v2 offset:16341; GFX8-NEXT: s_waitcnt lgkmcnt(0)342; GFX8-NEXT: s_endpgm343;344; GFX9-LABEL: lds_atomic_cmpxchg_noret_i32_offset:345; GFX9: ; %bb.0:346; GFX9-NEXT: s_load_dword s0, s[4:5], 0x24347; GFX9-NEXT: s_load_dword s1, s[4:5], 0x48348; GFX9-NEXT: v_mov_b32_e32 v0, 7349; GFX9-NEXT: s_waitcnt lgkmcnt(0)350; GFX9-NEXT: v_mov_b32_e32 v1, s0351; GFX9-NEXT: v_mov_b32_e32 v2, s1352; GFX9-NEXT: ds_cmpst_b32 v1, v0, v2 offset:16353; GFX9-NEXT: s_waitcnt lgkmcnt(0)354; GFX9-NEXT: s_endpgm355;356; GFX11-LABEL: lds_atomic_cmpxchg_noret_i32_offset:357; GFX11: ; %bb.0:358; GFX11-NEXT: s_clause 0x1359; GFX11-NEXT: s_load_b32 s0, s[4:5], 0x24360; GFX11-NEXT: s_load_b32 s1, s[4:5], 0x48361; GFX11-NEXT: v_mov_b32_e32 v0, 7362; GFX11-NEXT: s_waitcnt lgkmcnt(0)363; GFX11-NEXT: v_mov_b32_e32 v1, s0364; GFX11-NEXT: v_mov_b32_e32 v2, s1365; GFX11-NEXT: ds_cmpstore_b32 v1, v2, v0 offset:16366; GFX11-NEXT: s_waitcnt lgkmcnt(0)367; GFX11-NEXT: buffer_gl0_inv368; GFX11-NEXT: s_endpgm369 %gep = getelementptr i32, ptr addrspace(3) %ptr, i32 4370 %pair = cmpxchg ptr addrspace(3) %gep, i32 7, i32 %swap seq_cst monotonic371 %result = extractvalue { i32, i1 } %pair, 0372 ret void373}374 375define amdgpu_kernel void @lds_atomic_cmpxchg_noret_i64_offset(ptr addrspace(3) %ptr, i64 %swap) nounwind {376; CHECK-LABEL: lds_atomic_cmpxchg_noret_i64_offset:377; CHECK: ; %bb.0:378; CHECK-NEXT: s_load_dword s2, s[4:5], 0x9379; CHECK-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0xb380; CHECK-NEXT: v_mov_b32_e32 v0, 7381; CHECK-NEXT: v_mov_b32_e32 v1, 0382; CHECK-NEXT: s_waitcnt lgkmcnt(0)383; CHECK-NEXT: v_mov_b32_e32 v4, s2384; CHECK-NEXT: v_mov_b32_e32 v3, s1385; CHECK-NEXT: v_mov_b32_e32 v2, s0386; CHECK-NEXT: s_mov_b32 m0, -1387; CHECK-NEXT: ds_cmpst_b64 v4, v[0:1], v[2:3] offset:32388; CHECK-NEXT: s_waitcnt lgkmcnt(0)389; CHECK-NEXT: s_endpgm390;391; GFX7-LABEL: lds_atomic_cmpxchg_noret_i64_offset:392; GFX7: ; %bb.0:393; GFX7-NEXT: s_load_dword s2, s[4:5], 0x9394; GFX7-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0xb395; GFX7-NEXT: v_mov_b32_e32 v0, 7396; GFX7-NEXT: v_mov_b32_e32 v1, 0397; GFX7-NEXT: s_mov_b32 m0, -1398; GFX7-NEXT: s_waitcnt lgkmcnt(0)399; GFX7-NEXT: v_mov_b32_e32 v4, s2400; GFX7-NEXT: v_mov_b32_e32 v3, s1401; GFX7-NEXT: v_mov_b32_e32 v2, s0402; GFX7-NEXT: ds_cmpst_b64 v4, v[0:1], v[2:3] offset:32403; GFX7-NEXT: s_waitcnt lgkmcnt(0)404; GFX7-NEXT: s_endpgm405;406; GFX8-LABEL: lds_atomic_cmpxchg_noret_i64_offset:407; GFX8: ; %bb.0:408; GFX8-NEXT: s_load_dword s2, s[4:5], 0x24409; GFX8-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c410; GFX8-NEXT: v_mov_b32_e32 v0, 7411; GFX8-NEXT: v_mov_b32_e32 v1, 0412; GFX8-NEXT: s_mov_b32 m0, -1413; GFX8-NEXT: s_waitcnt lgkmcnt(0)414; GFX8-NEXT: v_mov_b32_e32 v4, s2415; GFX8-NEXT: v_mov_b32_e32 v3, s1416; GFX8-NEXT: v_mov_b32_e32 v2, s0417; GFX8-NEXT: ds_cmpst_b64 v4, v[0:1], v[2:3] offset:32418; GFX8-NEXT: s_waitcnt lgkmcnt(0)419; GFX8-NEXT: s_endpgm420;421; GFX9-LABEL: lds_atomic_cmpxchg_noret_i64_offset:422; GFX9: ; %bb.0:423; GFX9-NEXT: s_load_dword s2, s[4:5], 0x24424; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c425; GFX9-NEXT: v_mov_b32_e32 v0, 7426; GFX9-NEXT: v_mov_b32_e32 v1, 0427; GFX9-NEXT: s_waitcnt lgkmcnt(0)428; GFX9-NEXT: v_mov_b32_e32 v4, s2429; GFX9-NEXT: v_mov_b32_e32 v3, s1430; GFX9-NEXT: v_mov_b32_e32 v2, s0431; GFX9-NEXT: ds_cmpst_b64 v4, v[0:1], v[2:3] offset:32432; GFX9-NEXT: s_waitcnt lgkmcnt(0)433; GFX9-NEXT: s_endpgm434;435; GFX11-LABEL: lds_atomic_cmpxchg_noret_i64_offset:436; GFX11: ; %bb.0:437; GFX11-NEXT: s_clause 0x1438; GFX11-NEXT: s_load_b32 s2, s[4:5], 0x24439; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x2c440; GFX11-NEXT: v_mov_b32_e32 v0, 7441; GFX11-NEXT: v_mov_b32_e32 v1, 0442; GFX11-NEXT: s_waitcnt lgkmcnt(0)443; GFX11-NEXT: v_mov_b32_e32 v4, s2444; GFX11-NEXT: v_mov_b32_e32 v3, s1445; GFX11-NEXT: v_mov_b32_e32 v2, s0446; GFX11-NEXT: ds_cmpstore_b64 v4, v[2:3], v[0:1] offset:32447; GFX11-NEXT: s_waitcnt lgkmcnt(0)448; GFX11-NEXT: buffer_gl0_inv449; GFX11-NEXT: s_endpgm450 %gep = getelementptr i64, ptr addrspace(3) %ptr, i32 4451 %pair = cmpxchg ptr addrspace(3) %gep, i64 7, i64 %swap seq_cst monotonic452 %result = extractvalue { i64, i1 } %pair, 0453 ret void454}455