brintos

brintos / llvm-project-archived public Read only

0
0
Text · 43.7 KiB · e882769 Raw
1089 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn -mcpu=gfx90a < %s | FileCheck %s3 4;---------------------------------------------------------------------5; i32 cases6;---------------------------------------------------------------------7 8define void @flat_atomic_cmpxchg_i32_ret_av_av__av(ptr %ptr) #0 {9; CHECK-LABEL: flat_atomic_cmpxchg_i32_ret_av_av__av:10; CHECK:       ; %bb.0:11; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12; CHECK-NEXT:    ;;#ASMSTART13; CHECK-NEXT:    ; def v314; CHECK-NEXT:    ;;#ASMEND15; CHECK-NEXT:    ;;#ASMSTART16; CHECK-NEXT:    ; def v217; CHECK-NEXT:    ;;#ASMEND18; CHECK-NEXT:    buffer_wbl219; CHECK-NEXT:    flat_atomic_cmpswap v0, v[0:1], v[2:3] offset:40 glc20; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)21; CHECK-NEXT:    buffer_invl222; CHECK-NEXT:    buffer_wbinvl1_vol23; CHECK-NEXT:    ;;#ASMSTART24; CHECK-NEXT:    ; use v025; CHECK-NEXT:    ;;#ASMEND26; CHECK-NEXT:    s_setpc_b64 s[30:31]27  %gep.0 = getelementptr inbounds [512 x i32], ptr %ptr, i32 0, i32 1028  %data0 = call i32 asm "; def $0", "=^VA"()29  %data1 = call i32 asm "; def $0", "=^VA"()30  %pair = cmpxchg ptr %gep.0, i32 %data0, i32 %data1 seq_cst monotonic31  %result = extractvalue { i32, i1 } %pair, 032  call void asm "; use $0", "^VA"(i32 %result)33  ret void34}35 36define void @flat_atomic_cmpxchg_i32_ret_av_av__v(ptr %ptr) #0 {37; CHECK-LABEL: flat_atomic_cmpxchg_i32_ret_av_av__v:38; CHECK:       ; %bb.0:39; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)40; CHECK-NEXT:    ;;#ASMSTART41; CHECK-NEXT:    ; def v342; CHECK-NEXT:    ;;#ASMEND43; CHECK-NEXT:    ;;#ASMSTART44; CHECK-NEXT:    ; def v245; CHECK-NEXT:    ;;#ASMEND46; CHECK-NEXT:    buffer_wbl247; CHECK-NEXT:    flat_atomic_cmpswap v0, v[0:1], v[2:3] offset:40 glc48; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)49; CHECK-NEXT:    buffer_invl250; CHECK-NEXT:    buffer_wbinvl1_vol51; CHECK-NEXT:    ;;#ASMSTART52; CHECK-NEXT:    ; use v053; CHECK-NEXT:    ;;#ASMEND54; CHECK-NEXT:    s_setpc_b64 s[30:31]55  %gep.0 = getelementptr inbounds [512 x i32], ptr %ptr, i32 0, i32 1056  %data0 = call i32 asm "; def $0", "=^VA"()57  %data1 = call i32 asm "; def $0", "=^VA"()58  %pair = cmpxchg ptr %gep.0, i32 %data0, i32 %data1 seq_cst monotonic59  %result = extractvalue { i32, i1 } %pair, 060  call void asm "; use $0", "v"(i32 %result)61  ret void62}63 64define void @flat_atomic_cmpxchg_i32_ret_av_av__a(ptr %ptr) #0 {65; CHECK-LABEL: flat_atomic_cmpxchg_i32_ret_av_av__a:66; CHECK:       ; %bb.0:67; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)68; CHECK-NEXT:    ;;#ASMSTART69; CHECK-NEXT:    ; def v370; CHECK-NEXT:    ;;#ASMEND71; CHECK-NEXT:    ;;#ASMSTART72; CHECK-NEXT:    ; def v273; CHECK-NEXT:    ;;#ASMEND74; CHECK-NEXT:    buffer_wbl275; CHECK-NEXT:    flat_atomic_cmpswap v0, v[0:1], v[2:3] offset:40 glc76; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)77; CHECK-NEXT:    buffer_invl278; CHECK-NEXT:    buffer_wbinvl1_vol79; CHECK-NEXT:    v_accvgpr_write_b32 a0, v080; CHECK-NEXT:    ;;#ASMSTART81; CHECK-NEXT:    ; use a082; CHECK-NEXT:    ;;#ASMEND83; CHECK-NEXT:    s_setpc_b64 s[30:31]84  %gep.0 = getelementptr inbounds [512 x i32], ptr %ptr, i32 0, i32 1085  %data0 = call i32 asm "; def $0", "=^VA"()86  %data1 = call i32 asm "; def $0", "=^VA"()87  %pair = cmpxchg ptr %gep.0, i32 %data0, i32 %data1 seq_cst monotonic88  %result = extractvalue { i32, i1 } %pair, 089  call void asm "; use $0", "a"(i32 %result)90  ret void91}92 93define void @flat_atomic_cmpxchg_i32_ret_a_a__a(ptr %ptr) #0 {94; CHECK-LABEL: flat_atomic_cmpxchg_i32_ret_a_a__a:95; CHECK:       ; %bb.0:96; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)97; CHECK-NEXT:    ;;#ASMSTART98; CHECK-NEXT:    ; def a199; CHECK-NEXT:    ;;#ASMEND100; CHECK-NEXT:    ;;#ASMSTART101; CHECK-NEXT:    ; def a0102; CHECK-NEXT:    ;;#ASMEND103; CHECK-NEXT:    v_accvgpr_read_b32 v3, a1104; CHECK-NEXT:    v_accvgpr_read_b32 v2, a0105; CHECK-NEXT:    buffer_wbl2106; CHECK-NEXT:    flat_atomic_cmpswap v0, v[0:1], v[2:3] offset:40 glc107; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)108; CHECK-NEXT:    buffer_invl2109; CHECK-NEXT:    buffer_wbinvl1_vol110; CHECK-NEXT:    v_accvgpr_write_b32 a0, v0111; CHECK-NEXT:    ;;#ASMSTART112; CHECK-NEXT:    ; use a0113; CHECK-NEXT:    ;;#ASMEND114; CHECK-NEXT:    s_setpc_b64 s[30:31]115  %gep.0 = getelementptr inbounds [512 x i32], ptr %ptr, i32 0, i32 10116  %data0 = call i32 asm "; def $0", "=a"()117  %data1 = call i32 asm "; def $0", "=a"()118  %pair = cmpxchg ptr %gep.0, i32 %data0, i32 %data1 seq_cst monotonic119  %result = extractvalue { i32, i1 } %pair, 0120  call void asm "; use $0", "a"(i32 %result)121  ret void122}123 124define void @flat_atomic_cmpxchg_i32_ret_a_a__v(ptr %ptr) #0 {125; CHECK-LABEL: flat_atomic_cmpxchg_i32_ret_a_a__v:126; CHECK:       ; %bb.0:127; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)128; CHECK-NEXT:    ;;#ASMSTART129; CHECK-NEXT:    ; def a1130; CHECK-NEXT:    ;;#ASMEND131; CHECK-NEXT:    ;;#ASMSTART132; CHECK-NEXT:    ; def a0133; CHECK-NEXT:    ;;#ASMEND134; CHECK-NEXT:    v_accvgpr_read_b32 v3, a1135; CHECK-NEXT:    v_accvgpr_read_b32 v2, a0136; CHECK-NEXT:    buffer_wbl2137; CHECK-NEXT:    flat_atomic_cmpswap v0, v[0:1], v[2:3] offset:40 glc138; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)139; CHECK-NEXT:    buffer_invl2140; CHECK-NEXT:    buffer_wbinvl1_vol141; CHECK-NEXT:    ;;#ASMSTART142; CHECK-NEXT:    ; use v0143; CHECK-NEXT:    ;;#ASMEND144; CHECK-NEXT:    s_setpc_b64 s[30:31]145  %gep.0 = getelementptr inbounds [512 x i32], ptr %ptr, i32 0, i32 10146  %data0 = call i32 asm "; def $0", "=a"()147  %data1 = call i32 asm "; def $0", "=a"()148  %pair = cmpxchg ptr %gep.0, i32 %data0, i32 %data1 seq_cst monotonic149  %result = extractvalue { i32, i1 } %pair, 0150  call void asm "; use $0", "v"(i32 %result)151  ret void152}153 154define void @flat_atomic_cmpxchg_i32_ret_v_a__v(ptr %ptr) #0 {155; CHECK-LABEL: flat_atomic_cmpxchg_i32_ret_v_a__v:156; CHECK:       ; %bb.0:157; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)158; CHECK-NEXT:    ;;#ASMSTART159; CHECK-NEXT:    ; def v2160; CHECK-NEXT:    ;;#ASMEND161; CHECK-NEXT:    v_accvgpr_write_b32 a1, v2162; CHECK-NEXT:    ;;#ASMSTART163; CHECK-NEXT:    ; def a0164; CHECK-NEXT:    ;;#ASMEND165; CHECK-NEXT:    v_accvgpr_read_b32 v3, a1166; CHECK-NEXT:    v_accvgpr_read_b32 v2, a0167; CHECK-NEXT:    buffer_wbl2168; CHECK-NEXT:    flat_atomic_cmpswap v0, v[0:1], v[2:3] offset:40 glc169; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)170; CHECK-NEXT:    buffer_invl2171; CHECK-NEXT:    buffer_wbinvl1_vol172; CHECK-NEXT:    ;;#ASMSTART173; CHECK-NEXT:    ; use v0174; CHECK-NEXT:    ;;#ASMEND175; CHECK-NEXT:    s_setpc_b64 s[30:31]176  %gep.0 = getelementptr inbounds [512 x i32], ptr %ptr, i32 0, i32 10177  %data0 = call i32 asm "; def $0", "=v"()178  %data1 = call i32 asm "; def $0", "=a"()179  %pair = cmpxchg ptr %gep.0, i32 %data0, i32 %data1 seq_cst monotonic180  %result = extractvalue { i32, i1 } %pair, 0181  call void asm "; use $0", "v"(i32 %result)182  ret void183}184 185define void @flat_atomic_cmpxchg_i32_ret_a_v__v(ptr %ptr) #0 {186; CHECK-LABEL: flat_atomic_cmpxchg_i32_ret_a_v__v:187; CHECK:       ; %bb.0:188; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)189; CHECK-NEXT:    ;;#ASMSTART190; CHECK-NEXT:    ; def a0191; CHECK-NEXT:    ;;#ASMEND192; CHECK-NEXT:    v_accvgpr_read_b32 v3, a0193; CHECK-NEXT:    ;;#ASMSTART194; CHECK-NEXT:    ; def v2195; CHECK-NEXT:    ;;#ASMEND196; CHECK-NEXT:    buffer_wbl2197; CHECK-NEXT:    flat_atomic_cmpswap v0, v[0:1], v[2:3] offset:40 glc198; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)199; CHECK-NEXT:    buffer_invl2200; CHECK-NEXT:    buffer_wbinvl1_vol201; CHECK-NEXT:    ;;#ASMSTART202; CHECK-NEXT:    ; use v0203; CHECK-NEXT:    ;;#ASMEND204; CHECK-NEXT:    s_setpc_b64 s[30:31]205  %gep.0 = getelementptr inbounds [512 x i32], ptr %ptr, i32 0, i32 10206  %data0 = call i32 asm "; def $0", "=a"()207  %data1 = call i32 asm "; def $0", "=v"()208  %pair = cmpxchg ptr %gep.0, i32 %data0, i32 %data1 seq_cst monotonic209  %result = extractvalue { i32, i1 } %pair, 0210  call void asm "; use $0", "v"(i32 %result)211  ret void212}213 214define void @flat_atomic_cmpxchg_i32_ret_v_v__a(ptr %ptr) #0 {215; CHECK-LABEL: flat_atomic_cmpxchg_i32_ret_v_v__a:216; CHECK:       ; %bb.0:217; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)218; CHECK-NEXT:    ;;#ASMSTART219; CHECK-NEXT:    ; def v3220; CHECK-NEXT:    ;;#ASMEND221; CHECK-NEXT:    ;;#ASMSTART222; CHECK-NEXT:    ; def v2223; CHECK-NEXT:    ;;#ASMEND224; CHECK-NEXT:    buffer_wbl2225; CHECK-NEXT:    flat_atomic_cmpswap v0, v[0:1], v[2:3] offset:40 glc226; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)227; CHECK-NEXT:    buffer_invl2228; CHECK-NEXT:    buffer_wbinvl1_vol229; CHECK-NEXT:    v_accvgpr_write_b32 a0, v0230; CHECK-NEXT:    ;;#ASMSTART231; CHECK-NEXT:    ; use a0232; CHECK-NEXT:    ;;#ASMEND233; CHECK-NEXT:    s_setpc_b64 s[30:31]234  %gep.0 = getelementptr inbounds [512 x i32], ptr %ptr, i32 0, i32 10235  %data0 = call i32 asm "; def $0", "=v"()236  %data1 = call i32 asm "; def $0", "=v"()237  %pair = cmpxchg ptr %gep.0, i32 %data0, i32 %data1 seq_cst monotonic238  %result = extractvalue { i32, i1 } %pair, 0239  call void asm "; use $0", "a"(i32 %result)240  ret void241}242 243define void @flat_atomic_cmpxchg_i32_ret_av_v__av(ptr %ptr) #0 {244; CHECK-LABEL: flat_atomic_cmpxchg_i32_ret_av_v__av:245; CHECK:       ; %bb.0:246; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)247; CHECK-NEXT:    ;;#ASMSTART248; CHECK-NEXT:    ; def v3249; CHECK-NEXT:    ;;#ASMEND250; CHECK-NEXT:    ;;#ASMSTART251; CHECK-NEXT:    ; def v2252; CHECK-NEXT:    ;;#ASMEND253; CHECK-NEXT:    buffer_wbl2254; CHECK-NEXT:    flat_atomic_cmpswap v0, v[0:1], v[2:3] offset:40 glc255; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)256; CHECK-NEXT:    buffer_invl2257; CHECK-NEXT:    buffer_wbinvl1_vol258; CHECK-NEXT:    ;;#ASMSTART259; CHECK-NEXT:    ; use v0260; CHECK-NEXT:    ;;#ASMEND261; CHECK-NEXT:    s_setpc_b64 s[30:31]262  %gep.0 = getelementptr inbounds [512 x i32], ptr %ptr, i32 0, i32 10263  %data0 = call i32 asm "; def $0", "=^VA"()264  %data1 = call i32 asm "; def $0", "=v"()265  %pair = cmpxchg ptr %gep.0, i32 %data0, i32 %data1 seq_cst monotonic266  %result = extractvalue { i32, i1 } %pair, 0267  call void asm "; use $0", "^VA"(i32 %result)268  ret void269}270 271define void @flat_atomic_cmpxchg_i32_ret_v_av__av(ptr %ptr) #0 {272; CHECK-LABEL: flat_atomic_cmpxchg_i32_ret_v_av__av:273; CHECK:       ; %bb.0:274; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)275; CHECK-NEXT:    ;;#ASMSTART276; CHECK-NEXT:    ; def v3277; CHECK-NEXT:    ;;#ASMEND278; CHECK-NEXT:    ;;#ASMSTART279; CHECK-NEXT:    ; def v2280; CHECK-NEXT:    ;;#ASMEND281; CHECK-NEXT:    buffer_wbl2282; CHECK-NEXT:    flat_atomic_cmpswap v0, v[0:1], v[2:3] offset:40 glc283; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)284; CHECK-NEXT:    buffer_invl2285; CHECK-NEXT:    buffer_wbinvl1_vol286; CHECK-NEXT:    ;;#ASMSTART287; CHECK-NEXT:    ; use v0288; CHECK-NEXT:    ;;#ASMEND289; CHECK-NEXT:    s_setpc_b64 s[30:31]290  %gep.0 = getelementptr inbounds [512 x i32], ptr %ptr, i32 0, i32 10291  %data0 = call i32 asm "; def $0", "=v"()292  %data1 = call i32 asm "; def $0", "=^VA"()293  %pair = cmpxchg ptr %gep.0, i32 %data0, i32 %data1 seq_cst monotonic294  %result = extractvalue { i32, i1 } %pair, 0295  call void asm "; use $0", "^VA"(i32 %result)296  ret void297}298 299define void @flat_atomic_cmpxchg_i32_ret_av_a__av(ptr %ptr) #0 {300; CHECK-LABEL: flat_atomic_cmpxchg_i32_ret_av_a__av:301; CHECK:       ; %bb.0:302; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)303; CHECK-NEXT:    ;;#ASMSTART304; CHECK-NEXT:    ; def a1305; CHECK-NEXT:    ;;#ASMEND306; CHECK-NEXT:    ;;#ASMSTART307; CHECK-NEXT:    ; def a0308; CHECK-NEXT:    ;;#ASMEND309; CHECK-NEXT:    v_accvgpr_read_b32 v3, a1310; CHECK-NEXT:    v_accvgpr_read_b32 v2, a0311; CHECK-NEXT:    buffer_wbl2312; CHECK-NEXT:    flat_atomic_cmpswap v0, v[0:1], v[2:3] offset:40 glc313; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)314; CHECK-NEXT:    buffer_invl2315; CHECK-NEXT:    buffer_wbinvl1_vol316; CHECK-NEXT:    ;;#ASMSTART317; CHECK-NEXT:    ; use v0318; CHECK-NEXT:    ;;#ASMEND319; CHECK-NEXT:    s_setpc_b64 s[30:31]320  %gep.0 = getelementptr inbounds [512 x i32], ptr %ptr, i32 0, i32 10321  %data0 = call i32 asm "; def $0", "=^VA"()322  %data1 = call i32 asm "; def $0", "=a"()323  %pair = cmpxchg ptr %gep.0, i32 %data0, i32 %data1 seq_cst monotonic324  %result = extractvalue { i32, i1 } %pair, 0325  call void asm "; use $0", "^VA"(i32 %result)326  ret void327}328 329define void @flat_atomic_cmpxchg_i32_ret_a_av__av(ptr %ptr) #0 {330; CHECK-LABEL: flat_atomic_cmpxchg_i32_ret_a_av__av:331; CHECK:       ; %bb.0:332; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)333; CHECK-NEXT:    ;;#ASMSTART334; CHECK-NEXT:    ; def a1335; CHECK-NEXT:    ;;#ASMEND336; CHECK-NEXT:    ;;#ASMSTART337; CHECK-NEXT:    ; def a0338; CHECK-NEXT:    ;;#ASMEND339; CHECK-NEXT:    v_accvgpr_read_b32 v3, a1340; CHECK-NEXT:    v_accvgpr_read_b32 v2, a0341; CHECK-NEXT:    buffer_wbl2342; CHECK-NEXT:    flat_atomic_cmpswap v0, v[0:1], v[2:3] offset:40 glc343; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)344; CHECK-NEXT:    buffer_invl2345; CHECK-NEXT:    buffer_wbinvl1_vol346; CHECK-NEXT:    ;;#ASMSTART347; CHECK-NEXT:    ; use v0348; CHECK-NEXT:    ;;#ASMEND349; CHECK-NEXT:    s_setpc_b64 s[30:31]350  %gep.0 = getelementptr inbounds [512 x i32], ptr %ptr, i32 0, i32 10351  %data0 = call i32 asm "; def $0", "=a"()352  %data1 = call i32 asm "; def $0", "=^VA"()353  %pair = cmpxchg ptr %gep.0, i32 %data0, i32 %data1 seq_cst monotonic354  %result = extractvalue { i32, i1 } %pair, 0355  call void asm "; use $0", "^VA"(i32 %result)356  ret void357}358 359;---------------------------------------------------------------------360; i64 cases361;---------------------------------------------------------------------362 363define void @flat_atomic_cmpxchg_i64_ret_av_av__av(ptr %ptr) #0 {364; CHECK-LABEL: flat_atomic_cmpxchg_i64_ret_av_av__av:365; CHECK:       ; %bb.0:366; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)367; CHECK-NEXT:    v_add_co_u32_e32 v6, vcc, 0x50, v0368; CHECK-NEXT:    s_mov_b64 s[4:5], src_private_base369; CHECK-NEXT:    v_addc_co_u32_e32 v7, vcc, 0, v1, vcc370; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, s5, v7371; CHECK-NEXT:    ;;#ASMSTART372; CHECK-NEXT:    ; def v[2:3]373; CHECK-NEXT:    ;;#ASMEND374; CHECK-NEXT:    ;;#ASMSTART375; CHECK-NEXT:    ; def v[0:1]376; CHECK-NEXT:    ;;#ASMEND377; CHECK-NEXT:    ; implicit-def: $vgpr4_vgpr5378; CHECK-NEXT:    s_and_saveexec_b64 s[4:5], vcc379; CHECK-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]380; CHECK-NEXT:    s_cbranch_execz .LBB12_2381; CHECK-NEXT:  ; %bb.1: ; %atomicrmw.global382; CHECK-NEXT:    buffer_wbl2383; CHECK-NEXT:    flat_atomic_cmpswap_x2 v[4:5], v[6:7], v[0:3] glc384; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)385; CHECK-NEXT:    buffer_invl2386; CHECK-NEXT:    buffer_wbinvl1_vol387; CHECK-NEXT:    ; implicit-def: $vgpr6_vgpr7388; CHECK-NEXT:    ; implicit-def: $vgpr2_vgpr3389; CHECK-NEXT:  .LBB12_2: ; %Flow390; CHECK-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]391; CHECK-NEXT:    s_cbranch_execz .LBB12_4392; CHECK-NEXT:  ; %bb.3: ; %atomicrmw.private393; CHECK-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[6:7]394; CHECK-NEXT:    v_cndmask_b32_e32 v6, -1, v6, vcc395; CHECK-NEXT:    buffer_load_dword v4, v6, s[0:3], 0 offen396; CHECK-NEXT:    buffer_load_dword v5, v6, s[0:3], 0 offen offset:4397; CHECK-NEXT:    s_waitcnt vmcnt(0)398; CHECK-NEXT:    v_cmp_eq_u64_e32 vcc, v[4:5], v[2:3]399; CHECK-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc400; CHECK-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc401; CHECK-NEXT:    buffer_store_dword v0, v6, s[0:3], 0 offen402; CHECK-NEXT:    buffer_store_dword v1, v6, s[0:3], 0 offen offset:4403; CHECK-NEXT:  .LBB12_4: ; %atomicrmw.phi404; CHECK-NEXT:    s_or_b64 exec, exec, s[4:5]405; CHECK-NEXT:    ;;#ASMSTART406; CHECK-NEXT:    ; use v[4:5]407; CHECK-NEXT:    ;;#ASMEND408; CHECK-NEXT:    s_waitcnt vmcnt(0)409; CHECK-NEXT:    s_setpc_b64 s[30:31]410  %gep.0 = getelementptr inbounds [512 x i64], ptr %ptr, i64 0, i64 10411  %data0 = call i64 asm "; def $0", "=^VA"()412  %data1 = call i64 asm "; def $0", "=^VA"()413  %pair = cmpxchg ptr %gep.0, i64 %data0, i64 %data1 seq_cst monotonic414  %result = extractvalue { i64, i1 } %pair, 0415  call void asm "; use $0", "^VA"(i64 %result)416  ret void417}418 419define void @flat_atomic_cmpxchg_i64_ret_av_av__v(ptr %ptr) #0 {420; CHECK-LABEL: flat_atomic_cmpxchg_i64_ret_av_av__v:421; CHECK:       ; %bb.0:422; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)423; CHECK-NEXT:    v_add_co_u32_e32 v6, vcc, 0x50, v0424; CHECK-NEXT:    s_mov_b64 s[4:5], src_private_base425; CHECK-NEXT:    v_addc_co_u32_e32 v7, vcc, 0, v1, vcc426; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, s5, v7427; CHECK-NEXT:    ;;#ASMSTART428; CHECK-NEXT:    ; def v[2:3]429; CHECK-NEXT:    ;;#ASMEND430; CHECK-NEXT:    ;;#ASMSTART431; CHECK-NEXT:    ; def v[0:1]432; CHECK-NEXT:    ;;#ASMEND433; CHECK-NEXT:    ; implicit-def: $vgpr4_vgpr5434; CHECK-NEXT:    s_and_saveexec_b64 s[4:5], vcc435; CHECK-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]436; CHECK-NEXT:    s_cbranch_execz .LBB13_2437; CHECK-NEXT:  ; %bb.1: ; %atomicrmw.global438; CHECK-NEXT:    buffer_wbl2439; CHECK-NEXT:    flat_atomic_cmpswap_x2 v[4:5], v[6:7], v[0:3] glc440; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)441; CHECK-NEXT:    buffer_invl2442; CHECK-NEXT:    buffer_wbinvl1_vol443; CHECK-NEXT:    ; implicit-def: $vgpr6_vgpr7444; CHECK-NEXT:    ; implicit-def: $vgpr2_vgpr3445; CHECK-NEXT:  .LBB13_2: ; %Flow446; CHECK-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]447; CHECK-NEXT:    s_cbranch_execz .LBB13_4448; CHECK-NEXT:  ; %bb.3: ; %atomicrmw.private449; CHECK-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[6:7]450; CHECK-NEXT:    v_cndmask_b32_e32 v6, -1, v6, vcc451; CHECK-NEXT:    buffer_load_dword v4, v6, s[0:3], 0 offen452; CHECK-NEXT:    buffer_load_dword v5, v6, s[0:3], 0 offen offset:4453; CHECK-NEXT:    s_waitcnt vmcnt(0)454; CHECK-NEXT:    v_cmp_eq_u64_e32 vcc, v[4:5], v[2:3]455; CHECK-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc456; CHECK-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc457; CHECK-NEXT:    buffer_store_dword v0, v6, s[0:3], 0 offen458; CHECK-NEXT:    buffer_store_dword v1, v6, s[0:3], 0 offen offset:4459; CHECK-NEXT:  .LBB13_4: ; %atomicrmw.phi460; CHECK-NEXT:    s_or_b64 exec, exec, s[4:5]461; CHECK-NEXT:    ;;#ASMSTART462; CHECK-NEXT:    ; use v[4:5]463; CHECK-NEXT:    ;;#ASMEND464; CHECK-NEXT:    s_waitcnt vmcnt(0)465; CHECK-NEXT:    s_setpc_b64 s[30:31]466  %gep.0 = getelementptr inbounds [512 x i64], ptr %ptr, i64 0, i64 10467  %data0 = call i64 asm "; def $0", "=^VA"()468  %data1 = call i64 asm "; def $0", "=^VA"()469  %pair = cmpxchg ptr %gep.0, i64 %data0, i64 %data1 seq_cst monotonic470  %result = extractvalue { i64, i1 } %pair, 0471  call void asm "; use $0", "v"(i64 %result)472  ret void473}474 475define void @flat_atomic_cmpxchg_i64_ret_av_av__a(ptr %ptr) #0 {476; CHECK-LABEL: flat_atomic_cmpxchg_i64_ret_av_av__a:477; CHECK:       ; %bb.0:478; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)479; CHECK-NEXT:    v_add_co_u32_e32 v4, vcc, 0x50, v0480; CHECK-NEXT:    s_mov_b64 s[4:5], src_private_base481; CHECK-NEXT:    v_addc_co_u32_e32 v5, vcc, 0, v1, vcc482; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, s5, v5483; CHECK-NEXT:    ;;#ASMSTART484; CHECK-NEXT:    ; def v[2:3]485; CHECK-NEXT:    ;;#ASMEND486; CHECK-NEXT:    ;;#ASMSTART487; CHECK-NEXT:    ; def v[0:1]488; CHECK-NEXT:    ;;#ASMEND489; CHECK-NEXT:    ; implicit-def: $agpr0_agpr1490; CHECK-NEXT:    s_and_saveexec_b64 s[4:5], vcc491; CHECK-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]492; CHECK-NEXT:    s_cbranch_execz .LBB14_2493; CHECK-NEXT:  ; %bb.1: ; %atomicrmw.global494; CHECK-NEXT:    buffer_wbl2495; CHECK-NEXT:    flat_atomic_cmpswap_x2 v[0:1], v[4:5], v[0:3] glc496; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)497; CHECK-NEXT:    buffer_invl2498; CHECK-NEXT:    buffer_wbinvl1_vol499; CHECK-NEXT:    ; implicit-def: $vgpr4_vgpr5500; CHECK-NEXT:    v_accvgpr_write_b32 a0, v0501; CHECK-NEXT:    v_accvgpr_write_b32 a1, v1502; CHECK-NEXT:    ; implicit-def: $vgpr2_vgpr3503; CHECK-NEXT:  .LBB14_2: ; %Flow504; CHECK-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]505; CHECK-NEXT:    s_cbranch_execz .LBB14_4506; CHECK-NEXT:  ; %bb.3: ; %atomicrmw.private507; CHECK-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]508; CHECK-NEXT:    v_cndmask_b32_e32 v6, -1, v4, vcc509; CHECK-NEXT:    buffer_load_dword v4, v6, s[0:3], 0 offen510; CHECK-NEXT:    buffer_load_dword v5, v6, s[0:3], 0 offen offset:4511; CHECK-NEXT:    s_waitcnt vmcnt(1)512; CHECK-NEXT:    v_accvgpr_write_b32 a0, v4513; CHECK-NEXT:    s_waitcnt vmcnt(0)514; CHECK-NEXT:    v_cmp_eq_u64_e32 vcc, v[4:5], v[2:3]515; CHECK-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc516; CHECK-NEXT:    v_accvgpr_write_b32 a1, v5517; CHECK-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc518; CHECK-NEXT:    buffer_store_dword v1, v6, s[0:3], 0 offen offset:4519; CHECK-NEXT:    buffer_store_dword v0, v6, s[0:3], 0 offen520; CHECK-NEXT:  .LBB14_4: ; %atomicrmw.phi521; CHECK-NEXT:    s_or_b64 exec, exec, s[4:5]522; CHECK-NEXT:    ;;#ASMSTART523; CHECK-NEXT:    ; use a[0:1]524; CHECK-NEXT:    ;;#ASMEND525; CHECK-NEXT:    s_waitcnt vmcnt(0)526; CHECK-NEXT:    s_setpc_b64 s[30:31]527  %gep.0 = getelementptr inbounds [512 x i64], ptr %ptr, i64 0, i64 10528  %data0 = call i64 asm "; def $0", "=^VA"()529  %data1 = call i64 asm "; def $0", "=^VA"()530  %pair = cmpxchg ptr %gep.0, i64 %data0, i64 %data1 seq_cst monotonic531  %result = extractvalue { i64, i1 } %pair, 0532  call void asm "; use $0", "a"(i64 %result)533  ret void534}535 536define void @flat_atomic_cmpxchg_i64_ret_a_a__a(ptr %ptr) #0 {537; CHECK-LABEL: flat_atomic_cmpxchg_i64_ret_a_a__a:538; CHECK:       ; %bb.0:539; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)540; CHECK-NEXT:    v_add_co_u32_e32 v0, vcc, 0x50, v0541; CHECK-NEXT:    s_mov_b64 s[4:5], src_private_base542; CHECK-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc543; CHECK-NEXT:    ;;#ASMSTART544; CHECK-NEXT:    ; def a[2:3]545; CHECK-NEXT:    ;;#ASMEND546; CHECK-NEXT:    v_accvgpr_read_b32 v5, a3547; CHECK-NEXT:    ;;#ASMSTART548; CHECK-NEXT:    ; def a[4:5]549; CHECK-NEXT:    ;;#ASMEND550; CHECK-NEXT:    v_accvgpr_read_b32 v2, a4551; CHECK-NEXT:    v_accvgpr_read_b32 v4, a2552; CHECK-NEXT:    v_accvgpr_read_b32 v3, a5553; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, s5, v1554; CHECK-NEXT:    ; implicit-def: $agpr0_agpr1555; CHECK-NEXT:    s_and_saveexec_b64 s[4:5], vcc556; CHECK-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]557; CHECK-NEXT:    s_cbranch_execz .LBB15_2558; CHECK-NEXT:  ; %bb.1: ; %atomicrmw.global559; CHECK-NEXT:    v_accvgpr_read_b32 v2, a4560; CHECK-NEXT:    v_accvgpr_read_b32 v3, a5561; CHECK-NEXT:    v_accvgpr_read_b32 v4, a2562; CHECK-NEXT:    v_accvgpr_read_b32 v5, a3563; CHECK-NEXT:    buffer_wbl2564; CHECK-NEXT:    flat_atomic_cmpswap_x2 v[0:1], v[0:1], v[2:5] glc565; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)566; CHECK-NEXT:    buffer_invl2567; CHECK-NEXT:    buffer_wbinvl1_vol568; CHECK-NEXT:    ; implicit-def: $vgpr4_vgpr5569; CHECK-NEXT:    ; implicit-def: $vgpr2_vgpr3570; CHECK-NEXT:    v_accvgpr_write_b32 a0, v0571; CHECK-NEXT:    v_accvgpr_write_b32 a1, v1572; CHECK-NEXT:    ; implicit-def: $vgpr0_vgpr1573; CHECK-NEXT:  .LBB15_2: ; %Flow574; CHECK-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]575; CHECK-NEXT:    s_cbranch_execz .LBB15_4576; CHECK-NEXT:  ; %bb.3: ; %atomicrmw.private577; CHECK-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]578; CHECK-NEXT:    v_cndmask_b32_e32 v6, -1, v0, vcc579; CHECK-NEXT:    buffer_load_dword v0, v6, s[0:3], 0 offen580; CHECK-NEXT:    buffer_load_dword v1, v6, s[0:3], 0 offen offset:4581; CHECK-NEXT:    s_waitcnt vmcnt(1)582; CHECK-NEXT:    v_accvgpr_write_b32 a0, v0583; CHECK-NEXT:    s_waitcnt vmcnt(0)584; CHECK-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[4:5]585; CHECK-NEXT:    v_cndmask_b32_e32 v3, v1, v3, vcc586; CHECK-NEXT:    v_accvgpr_write_b32 a1, v1587; CHECK-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc588; CHECK-NEXT:    buffer_store_dword v3, v6, s[0:3], 0 offen offset:4589; CHECK-NEXT:    buffer_store_dword v0, v6, s[0:3], 0 offen590; CHECK-NEXT:  .LBB15_4: ; %atomicrmw.phi591; CHECK-NEXT:    s_or_b64 exec, exec, s[4:5]592; CHECK-NEXT:    ;;#ASMSTART593; CHECK-NEXT:    ; use a[0:1]594; CHECK-NEXT:    ;;#ASMEND595; CHECK-NEXT:    s_waitcnt vmcnt(0)596; CHECK-NEXT:    s_setpc_b64 s[30:31]597  %gep.0 = getelementptr inbounds [512 x i64], ptr %ptr, i64 0, i64 10598  %data0 = call i64 asm "; def $0", "=a"()599  %data1 = call i64 asm "; def $0", "=a"()600  %pair = cmpxchg ptr %gep.0, i64 %data0, i64 %data1 seq_cst monotonic601  %result = extractvalue { i64, i1 } %pair, 0602  call void asm "; use $0", "a"(i64 %result)603  ret void604}605 606define void @flat_atomic_cmpxchg_i64_ret_a_a__v(ptr %ptr) #0 {607; CHECK-LABEL: flat_atomic_cmpxchg_i64_ret_a_a__v:608; CHECK:       ; %bb.0:609; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)610; CHECK-NEXT:    v_add_co_u32_e32 v0, vcc, 0x50, v0611; CHECK-NEXT:    s_mov_b64 s[4:5], src_private_base612; CHECK-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc613; CHECK-NEXT:    ;;#ASMSTART614; CHECK-NEXT:    ; def a[0:1]615; CHECK-NEXT:    ;;#ASMEND616; CHECK-NEXT:    v_accvgpr_read_b32 v5, a1617; CHECK-NEXT:    ;;#ASMSTART618; CHECK-NEXT:    ; def a[2:3]619; CHECK-NEXT:    ;;#ASMEND620; CHECK-NEXT:    v_accvgpr_read_b32 v7, a3621; CHECK-NEXT:    v_accvgpr_read_b32 v4, a0622; CHECK-NEXT:    v_accvgpr_read_b32 v6, a2623; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, s5, v1624; CHECK-NEXT:    ; implicit-def: $vgpr2_vgpr3625; CHECK-NEXT:    s_and_saveexec_b64 s[4:5], vcc626; CHECK-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]627; CHECK-NEXT:    s_cbranch_execz .LBB16_2628; CHECK-NEXT:  ; %bb.1: ; %atomicrmw.global629; CHECK-NEXT:    v_accvgpr_read_b32 v2, a2630; CHECK-NEXT:    v_accvgpr_read_b32 v3, a3631; CHECK-NEXT:    v_accvgpr_read_b32 v4, a0632; CHECK-NEXT:    v_accvgpr_read_b32 v5, a1633; CHECK-NEXT:    buffer_wbl2634; CHECK-NEXT:    flat_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5] glc635; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)636; CHECK-NEXT:    buffer_invl2637; CHECK-NEXT:    buffer_wbinvl1_vol638; CHECK-NEXT:    ; implicit-def: $vgpr0_vgpr1639; CHECK-NEXT:    ; implicit-def: $vgpr4_vgpr5640; CHECK-NEXT:    ; implicit-def: $vgpr6_vgpr7641; CHECK-NEXT:  .LBB16_2: ; %Flow642; CHECK-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]643; CHECK-NEXT:    s_cbranch_execz .LBB16_4644; CHECK-NEXT:  ; %bb.3: ; %atomicrmw.private645; CHECK-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]646; CHECK-NEXT:    v_cndmask_b32_e32 v0, -1, v0, vcc647; CHECK-NEXT:    buffer_load_dword v2, v0, s[0:3], 0 offen648; CHECK-NEXT:    buffer_load_dword v3, v0, s[0:3], 0 offen offset:4649; CHECK-NEXT:    s_waitcnt vmcnt(0)650; CHECK-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]651; CHECK-NEXT:    v_cndmask_b32_e32 v4, v2, v6, vcc652; CHECK-NEXT:    v_cndmask_b32_e32 v1, v3, v7, vcc653; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen654; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:4655; CHECK-NEXT:  .LBB16_4: ; %atomicrmw.phi656; CHECK-NEXT:    s_or_b64 exec, exec, s[4:5]657; CHECK-NEXT:    ;;#ASMSTART658; CHECK-NEXT:    ; use v[2:3]659; CHECK-NEXT:    ;;#ASMEND660; CHECK-NEXT:    s_waitcnt vmcnt(0)661; CHECK-NEXT:    s_setpc_b64 s[30:31]662  %gep.0 = getelementptr inbounds [512 x i64], ptr %ptr, i64 0, i64 10663  %data0 = call i64 asm "; def $0", "=a"()664  %data1 = call i64 asm "; def $0", "=a"()665  %pair = cmpxchg ptr %gep.0, i64 %data0, i64 %data1 seq_cst monotonic666  %result = extractvalue { i64, i1 } %pair, 0667  call void asm "; use $0", "v"(i64 %result)668  ret void669}670 671define void @flat_atomic_cmpxchg_i64_ret_v_a__v(ptr %ptr) #0 {672; CHECK-LABEL: flat_atomic_cmpxchg_i64_ret_v_a__v:673; CHECK:       ; %bb.0:674; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)675; CHECK-NEXT:    v_add_co_u32_e32 v4, vcc, 0x50, v0676; CHECK-NEXT:    s_mov_b64 s[4:5], src_private_base677; CHECK-NEXT:    v_addc_co_u32_e32 v5, vcc, 0, v1, vcc678; CHECK-NEXT:    ;;#ASMSTART679; CHECK-NEXT:    ; def a[0:1]680; CHECK-NEXT:    ;;#ASMEND681; CHECK-NEXT:    v_accvgpr_read_b32 v7, a1682; CHECK-NEXT:    v_accvgpr_read_b32 v6, a0683; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, s5, v5684; CHECK-NEXT:    ;;#ASMSTART685; CHECK-NEXT:    ; def v[2:3]686; CHECK-NEXT:    ;;#ASMEND687; CHECK-NEXT:    ; implicit-def: $vgpr0_vgpr1688; CHECK-NEXT:    s_and_saveexec_b64 s[4:5], vcc689; CHECK-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]690; CHECK-NEXT:    s_cbranch_execz .LBB17_2691; CHECK-NEXT:  ; %bb.1: ; %atomicrmw.global692; CHECK-NEXT:    v_accvgpr_read_b32 v0, a0693; CHECK-NEXT:    v_accvgpr_read_b32 v1, a1694; CHECK-NEXT:    buffer_wbl2695; CHECK-NEXT:    flat_atomic_cmpswap_x2 v[0:1], v[4:5], v[0:3] glc696; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)697; CHECK-NEXT:    buffer_invl2698; CHECK-NEXT:    buffer_wbinvl1_vol699; CHECK-NEXT:    ; implicit-def: $vgpr4_vgpr5700; CHECK-NEXT:    ; implicit-def: $vgpr2_vgpr3701; CHECK-NEXT:    ; implicit-def: $vgpr6_vgpr7702; CHECK-NEXT:  .LBB17_2: ; %Flow703; CHECK-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]704; CHECK-NEXT:    s_cbranch_execz .LBB17_4705; CHECK-NEXT:  ; %bb.3: ; %atomicrmw.private706; CHECK-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]707; CHECK-NEXT:    v_cndmask_b32_e32 v4, -1, v4, vcc708; CHECK-NEXT:    buffer_load_dword v0, v4, s[0:3], 0 offen709; CHECK-NEXT:    buffer_load_dword v1, v4, s[0:3], 0 offen offset:4710; CHECK-NEXT:    s_waitcnt vmcnt(0)711; CHECK-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]712; CHECK-NEXT:    v_cndmask_b32_e32 v3, v0, v6, vcc713; CHECK-NEXT:    v_cndmask_b32_e32 v2, v1, v7, vcc714; CHECK-NEXT:    buffer_store_dword v3, v4, s[0:3], 0 offen715; CHECK-NEXT:    buffer_store_dword v2, v4, s[0:3], 0 offen offset:4716; CHECK-NEXT:  .LBB17_4: ; %atomicrmw.phi717; CHECK-NEXT:    s_or_b64 exec, exec, s[4:5]718; CHECK-NEXT:    ;;#ASMSTART719; CHECK-NEXT:    ; use v[0:1]720; CHECK-NEXT:    ;;#ASMEND721; CHECK-NEXT:    s_waitcnt vmcnt(0)722; CHECK-NEXT:    s_setpc_b64 s[30:31]723  %gep.0 = getelementptr inbounds [512 x i64], ptr %ptr, i64 0, i64 10724  %data0 = call i64 asm "; def $0", "=v"()725  %data1 = call i64 asm "; def $0", "=a"()726  %pair = cmpxchg ptr %gep.0, i64 %data0, i64 %data1 seq_cst monotonic727  %result = extractvalue { i64, i1 } %pair, 0728  call void asm "; use $0", "v"(i64 %result)729  ret void730}731 732define void @flat_atomic_cmpxchg_i64_ret_a_v__v(ptr %ptr) #0 {733; CHECK-LABEL: flat_atomic_cmpxchg_i64_ret_a_v__v:734; CHECK:       ; %bb.0:735; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)736; CHECK-NEXT:    v_add_co_u32_e32 v4, vcc, 0x50, v0737; CHECK-NEXT:    s_mov_b64 s[4:5], src_private_base738; CHECK-NEXT:    v_addc_co_u32_e32 v5, vcc, 0, v1, vcc739; CHECK-NEXT:    ;;#ASMSTART740; CHECK-NEXT:    ; def a[0:1]741; CHECK-NEXT:    ;;#ASMEND742; CHECK-NEXT:    v_accvgpr_read_b32 v7, a1743; CHECK-NEXT:    v_accvgpr_read_b32 v6, a0744; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, s5, v5745; CHECK-NEXT:    ;;#ASMSTART746; CHECK-NEXT:    ; def v[0:1]747; CHECK-NEXT:    ;;#ASMEND748; CHECK-NEXT:    ; implicit-def: $vgpr2_vgpr3749; CHECK-NEXT:    s_and_saveexec_b64 s[4:5], vcc750; CHECK-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]751; CHECK-NEXT:    s_cbranch_execz .LBB18_2752; CHECK-NEXT:  ; %bb.1: ; %atomicrmw.global753; CHECK-NEXT:    v_accvgpr_read_b32 v2, a0754; CHECK-NEXT:    v_accvgpr_read_b32 v3, a1755; CHECK-NEXT:    buffer_wbl2756; CHECK-NEXT:    flat_atomic_cmpswap_x2 v[2:3], v[4:5], v[0:3] glc757; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)758; CHECK-NEXT:    buffer_invl2759; CHECK-NEXT:    buffer_wbinvl1_vol760; CHECK-NEXT:    ; implicit-def: $vgpr4_vgpr5761; CHECK-NEXT:    ; implicit-def: $vgpr6_vgpr7762; CHECK-NEXT:    ; implicit-def: $vgpr0_vgpr1763; CHECK-NEXT:  .LBB18_2: ; %Flow764; CHECK-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]765; CHECK-NEXT:    s_cbranch_execz .LBB18_4766; CHECK-NEXT:  ; %bb.3: ; %atomicrmw.private767; CHECK-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]768; CHECK-NEXT:    v_cndmask_b32_e32 v4, -1, v4, vcc769; CHECK-NEXT:    buffer_load_dword v2, v4, s[0:3], 0 offen770; CHECK-NEXT:    buffer_load_dword v3, v4, s[0:3], 0 offen offset:4771; CHECK-NEXT:    s_waitcnt vmcnt(0)772; CHECK-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[6:7]773; CHECK-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc774; CHECK-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc775; CHECK-NEXT:    buffer_store_dword v0, v4, s[0:3], 0 offen776; CHECK-NEXT:    buffer_store_dword v1, v4, s[0:3], 0 offen offset:4777; CHECK-NEXT:  .LBB18_4: ; %atomicrmw.phi778; CHECK-NEXT:    s_or_b64 exec, exec, s[4:5]779; CHECK-NEXT:    ;;#ASMSTART780; CHECK-NEXT:    ; use v[2:3]781; CHECK-NEXT:    ;;#ASMEND782; CHECK-NEXT:    s_waitcnt vmcnt(0)783; CHECK-NEXT:    s_setpc_b64 s[30:31]784  %gep.0 = getelementptr inbounds [512 x i64], ptr %ptr, i64 0, i64 10785  %data0 = call i64 asm "; def $0", "=a"()786  %data1 = call i64 asm "; def $0", "=v"()787  %pair = cmpxchg ptr %gep.0, i64 %data0, i64 %data1 seq_cst monotonic788  %result = extractvalue { i64, i1 } %pair, 0789  call void asm "; use $0", "v"(i64 %result)790  ret void791}792 793define void @flat_atomic_cmpxchg_i64_ret_v_v__a(ptr %ptr) #0 {794; CHECK-LABEL: flat_atomic_cmpxchg_i64_ret_v_v__a:795; CHECK:       ; %bb.0:796; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)797; CHECK-NEXT:    v_add_co_u32_e32 v4, vcc, 0x50, v0798; CHECK-NEXT:    s_mov_b64 s[4:5], src_private_base799; CHECK-NEXT:    v_addc_co_u32_e32 v5, vcc, 0, v1, vcc800; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, s5, v5801; CHECK-NEXT:    ;;#ASMSTART802; CHECK-NEXT:    ; def v[2:3]803; CHECK-NEXT:    ;;#ASMEND804; CHECK-NEXT:    ;;#ASMSTART805; CHECK-NEXT:    ; def v[0:1]806; CHECK-NEXT:    ;;#ASMEND807; CHECK-NEXT:    ; implicit-def: $agpr0_agpr1808; CHECK-NEXT:    s_and_saveexec_b64 s[4:5], vcc809; CHECK-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]810; CHECK-NEXT:    s_cbranch_execz .LBB19_2811; CHECK-NEXT:  ; %bb.1: ; %atomicrmw.global812; CHECK-NEXT:    buffer_wbl2813; CHECK-NEXT:    flat_atomic_cmpswap_x2 v[0:1], v[4:5], v[0:3] glc814; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)815; CHECK-NEXT:    buffer_invl2816; CHECK-NEXT:    buffer_wbinvl1_vol817; CHECK-NEXT:    ; implicit-def: $vgpr4_vgpr5818; CHECK-NEXT:    v_accvgpr_write_b32 a0, v0819; CHECK-NEXT:    v_accvgpr_write_b32 a1, v1820; CHECK-NEXT:    ; implicit-def: $vgpr2_vgpr3821; CHECK-NEXT:  .LBB19_2: ; %Flow822; CHECK-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]823; CHECK-NEXT:    s_cbranch_execz .LBB19_4824; CHECK-NEXT:  ; %bb.3: ; %atomicrmw.private825; CHECK-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]826; CHECK-NEXT:    v_cndmask_b32_e32 v6, -1, v4, vcc827; CHECK-NEXT:    buffer_load_dword v4, v6, s[0:3], 0 offen828; CHECK-NEXT:    buffer_load_dword v5, v6, s[0:3], 0 offen offset:4829; CHECK-NEXT:    s_waitcnt vmcnt(1)830; CHECK-NEXT:    v_accvgpr_write_b32 a0, v4831; CHECK-NEXT:    s_waitcnt vmcnt(0)832; CHECK-NEXT:    v_cmp_eq_u64_e32 vcc, v[4:5], v[2:3]833; CHECK-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc834; CHECK-NEXT:    v_accvgpr_write_b32 a1, v5835; CHECK-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc836; CHECK-NEXT:    buffer_store_dword v1, v6, s[0:3], 0 offen offset:4837; CHECK-NEXT:    buffer_store_dword v0, v6, s[0:3], 0 offen838; CHECK-NEXT:  .LBB19_4: ; %atomicrmw.phi839; CHECK-NEXT:    s_or_b64 exec, exec, s[4:5]840; CHECK-NEXT:    ;;#ASMSTART841; CHECK-NEXT:    ; use a[0:1]842; CHECK-NEXT:    ;;#ASMEND843; CHECK-NEXT:    s_waitcnt vmcnt(0)844; CHECK-NEXT:    s_setpc_b64 s[30:31]845  %gep.0 = getelementptr inbounds [512 x i64], ptr %ptr, i64 0, i64 10846  %data0 = call i64 asm "; def $0", "=v"()847  %data1 = call i64 asm "; def $0", "=v"()848  %pair = cmpxchg ptr %gep.0, i64 %data0, i64 %data1 seq_cst monotonic849  %result = extractvalue { i64, i1 } %pair, 0850  call void asm "; use $0", "a"(i64 %result)851  ret void852}853 854define void @flat_atomic_cmpxchg_i64_ret_av_v__av(ptr %ptr) #0 {855; CHECK-LABEL: flat_atomic_cmpxchg_i64_ret_av_v__av:856; CHECK:       ; %bb.0:857; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)858; CHECK-NEXT:    v_add_co_u32_e32 v6, vcc, 0x50, v0859; CHECK-NEXT:    s_mov_b64 s[4:5], src_private_base860; CHECK-NEXT:    v_addc_co_u32_e32 v7, vcc, 0, v1, vcc861; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, s5, v7862; CHECK-NEXT:    ;;#ASMSTART863; CHECK-NEXT:    ; def v[2:3]864; CHECK-NEXT:    ;;#ASMEND865; CHECK-NEXT:    ;;#ASMSTART866; CHECK-NEXT:    ; def v[0:1]867; CHECK-NEXT:    ;;#ASMEND868; CHECK-NEXT:    ; implicit-def: $vgpr4_vgpr5869; CHECK-NEXT:    s_and_saveexec_b64 s[4:5], vcc870; CHECK-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]871; CHECK-NEXT:    s_cbranch_execz .LBB20_2872; CHECK-NEXT:  ; %bb.1: ; %atomicrmw.global873; CHECK-NEXT:    buffer_wbl2874; CHECK-NEXT:    flat_atomic_cmpswap_x2 v[4:5], v[6:7], v[0:3] glc875; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)876; CHECK-NEXT:    buffer_invl2877; CHECK-NEXT:    buffer_wbinvl1_vol878; CHECK-NEXT:    ; implicit-def: $vgpr6_vgpr7879; CHECK-NEXT:    ; implicit-def: $vgpr2_vgpr3880; CHECK-NEXT:  .LBB20_2: ; %Flow881; CHECK-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]882; CHECK-NEXT:    s_cbranch_execz .LBB20_4883; CHECK-NEXT:  ; %bb.3: ; %atomicrmw.private884; CHECK-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[6:7]885; CHECK-NEXT:    v_cndmask_b32_e32 v6, -1, v6, vcc886; CHECK-NEXT:    buffer_load_dword v4, v6, s[0:3], 0 offen887; CHECK-NEXT:    buffer_load_dword v5, v6, s[0:3], 0 offen offset:4888; CHECK-NEXT:    s_waitcnt vmcnt(0)889; CHECK-NEXT:    v_cmp_eq_u64_e32 vcc, v[4:5], v[2:3]890; CHECK-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc891; CHECK-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc892; CHECK-NEXT:    buffer_store_dword v0, v6, s[0:3], 0 offen893; CHECK-NEXT:    buffer_store_dword v1, v6, s[0:3], 0 offen offset:4894; CHECK-NEXT:  .LBB20_4: ; %atomicrmw.phi895; CHECK-NEXT:    s_or_b64 exec, exec, s[4:5]896; CHECK-NEXT:    ;;#ASMSTART897; CHECK-NEXT:    ; use v[4:5]898; CHECK-NEXT:    ;;#ASMEND899; CHECK-NEXT:    s_waitcnt vmcnt(0)900; CHECK-NEXT:    s_setpc_b64 s[30:31]901  %gep.0 = getelementptr inbounds [512 x i64], ptr %ptr, i64 0, i64 10902  %data0 = call i64 asm "; def $0", "=^VA"()903  %data1 = call i64 asm "; def $0", "=v"()904  %pair = cmpxchg ptr %gep.0, i64 %data0, i64 %data1 seq_cst monotonic905  %result = extractvalue { i64, i1 } %pair, 0906  call void asm "; use $0", "^VA"(i64 %result)907  ret void908}909 910define void @flat_atomic_cmpxchg_i64_ret_v_av__av(ptr %ptr) #0 {911; CHECK-LABEL: flat_atomic_cmpxchg_i64_ret_v_av__av:912; CHECK:       ; %bb.0:913; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)914; CHECK-NEXT:    v_add_co_u32_e32 v6, vcc, 0x50, v0915; CHECK-NEXT:    s_mov_b64 s[4:5], src_private_base916; CHECK-NEXT:    v_addc_co_u32_e32 v7, vcc, 0, v1, vcc917; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, s5, v7918; CHECK-NEXT:    ;;#ASMSTART919; CHECK-NEXT:    ; def v[2:3]920; CHECK-NEXT:    ;;#ASMEND921; CHECK-NEXT:    ;;#ASMSTART922; CHECK-NEXT:    ; def v[0:1]923; CHECK-NEXT:    ;;#ASMEND924; CHECK-NEXT:    ; implicit-def: $vgpr4_vgpr5925; CHECK-NEXT:    s_and_saveexec_b64 s[4:5], vcc926; CHECK-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]927; CHECK-NEXT:    s_cbranch_execz .LBB21_2928; CHECK-NEXT:  ; %bb.1: ; %atomicrmw.global929; CHECK-NEXT:    buffer_wbl2930; CHECK-NEXT:    flat_atomic_cmpswap_x2 v[4:5], v[6:7], v[0:3] glc931; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)932; CHECK-NEXT:    buffer_invl2933; CHECK-NEXT:    buffer_wbinvl1_vol934; CHECK-NEXT:    ; implicit-def: $vgpr6_vgpr7935; CHECK-NEXT:    ; implicit-def: $vgpr2_vgpr3936; CHECK-NEXT:  .LBB21_2: ; %Flow937; CHECK-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]938; CHECK-NEXT:    s_cbranch_execz .LBB21_4939; CHECK-NEXT:  ; %bb.3: ; %atomicrmw.private940; CHECK-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[6:7]941; CHECK-NEXT:    v_cndmask_b32_e32 v6, -1, v6, vcc942; CHECK-NEXT:    buffer_load_dword v4, v6, s[0:3], 0 offen943; CHECK-NEXT:    buffer_load_dword v5, v6, s[0:3], 0 offen offset:4944; CHECK-NEXT:    s_waitcnt vmcnt(0)945; CHECK-NEXT:    v_cmp_eq_u64_e32 vcc, v[4:5], v[2:3]946; CHECK-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc947; CHECK-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc948; CHECK-NEXT:    buffer_store_dword v0, v6, s[0:3], 0 offen949; CHECK-NEXT:    buffer_store_dword v1, v6, s[0:3], 0 offen offset:4950; CHECK-NEXT:  .LBB21_4: ; %atomicrmw.phi951; CHECK-NEXT:    s_or_b64 exec, exec, s[4:5]952; CHECK-NEXT:    ;;#ASMSTART953; CHECK-NEXT:    ; use v[4:5]954; CHECK-NEXT:    ;;#ASMEND955; CHECK-NEXT:    s_waitcnt vmcnt(0)956; CHECK-NEXT:    s_setpc_b64 s[30:31]957  %gep.0 = getelementptr inbounds [512 x i64], ptr %ptr, i64 0, i64 10958  %data0 = call i64 asm "; def $0", "=v"()959  %data1 = call i64 asm "; def $0", "=^VA"()960  %pair = cmpxchg ptr %gep.0, i64 %data0, i64 %data1 seq_cst monotonic961  %result = extractvalue { i64, i1 } %pair, 0962  call void asm "; use $0", "^VA"(i64 %result)963  ret void964}965 966define void @flat_atomic_cmpxchg_i64_ret_av_a__av(ptr %ptr) #0 {967; CHECK-LABEL: flat_atomic_cmpxchg_i64_ret_av_a__av:968; CHECK:       ; %bb.0:969; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)970; CHECK-NEXT:    v_add_co_u32_e32 v4, vcc, 0x50, v0971; CHECK-NEXT:    s_mov_b64 s[4:5], src_private_base972; CHECK-NEXT:    v_addc_co_u32_e32 v5, vcc, 0, v1, vcc973; CHECK-NEXT:    ;;#ASMSTART974; CHECK-NEXT:    ; def a[0:1]975; CHECK-NEXT:    ;;#ASMEND976; CHECK-NEXT:    v_accvgpr_read_b32 v7, a1977; CHECK-NEXT:    v_accvgpr_read_b32 v6, a0978; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, s5, v5979; CHECK-NEXT:    ;;#ASMSTART980; CHECK-NEXT:    ; def v[2:3]981; CHECK-NEXT:    ;;#ASMEND982; CHECK-NEXT:    ; implicit-def: $vgpr0_vgpr1983; CHECK-NEXT:    s_and_saveexec_b64 s[4:5], vcc984; CHECK-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]985; CHECK-NEXT:    s_cbranch_execz .LBB22_2986; CHECK-NEXT:  ; %bb.1: ; %atomicrmw.global987; CHECK-NEXT:    v_accvgpr_read_b32 v0, a0988; CHECK-NEXT:    v_accvgpr_read_b32 v1, a1989; CHECK-NEXT:    buffer_wbl2990; CHECK-NEXT:    flat_atomic_cmpswap_x2 v[0:1], v[4:5], v[0:3] glc991; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)992; CHECK-NEXT:    buffer_invl2993; CHECK-NEXT:    buffer_wbinvl1_vol994; CHECK-NEXT:    ; implicit-def: $vgpr4_vgpr5995; CHECK-NEXT:    ; implicit-def: $vgpr2_vgpr3996; CHECK-NEXT:    ; implicit-def: $vgpr6_vgpr7997; CHECK-NEXT:  .LBB22_2: ; %Flow998; CHECK-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]999; CHECK-NEXT:    s_cbranch_execz .LBB22_41000; CHECK-NEXT:  ; %bb.3: ; %atomicrmw.private1001; CHECK-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]1002; CHECK-NEXT:    v_cndmask_b32_e32 v4, -1, v4, vcc1003; CHECK-NEXT:    buffer_load_dword v0, v4, s[0:3], 0 offen1004; CHECK-NEXT:    buffer_load_dword v1, v4, s[0:3], 0 offen offset:41005; CHECK-NEXT:    s_waitcnt vmcnt(0)1006; CHECK-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]1007; CHECK-NEXT:    v_cndmask_b32_e32 v3, v0, v6, vcc1008; CHECK-NEXT:    v_cndmask_b32_e32 v2, v1, v7, vcc1009; CHECK-NEXT:    buffer_store_dword v3, v4, s[0:3], 0 offen1010; CHECK-NEXT:    buffer_store_dword v2, v4, s[0:3], 0 offen offset:41011; CHECK-NEXT:  .LBB22_4: ; %atomicrmw.phi1012; CHECK-NEXT:    s_or_b64 exec, exec, s[4:5]1013; CHECK-NEXT:    ;;#ASMSTART1014; CHECK-NEXT:    ; use v[0:1]1015; CHECK-NEXT:    ;;#ASMEND1016; CHECK-NEXT:    s_waitcnt vmcnt(0)1017; CHECK-NEXT:    s_setpc_b64 s[30:31]1018  %gep.0 = getelementptr inbounds [512 x i64], ptr %ptr, i64 0, i64 101019  %data0 = call i64 asm "; def $0", "=^VA"()1020  %data1 = call i64 asm "; def $0", "=a"()1021  %pair = cmpxchg ptr %gep.0, i64 %data0, i64 %data1 seq_cst monotonic1022  %result = extractvalue { i64, i1 } %pair, 01023  call void asm "; use $0", "^VA"(i64 %result)1024  ret void1025}1026 1027define void @flat_atomic_cmpxchg_i64_ret_a_av__av(ptr %ptr) #0 {1028; CHECK-LABEL: flat_atomic_cmpxchg_i64_ret_a_av__av:1029; CHECK:       ; %bb.0:1030; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1031; CHECK-NEXT:    v_add_co_u32_e32 v4, vcc, 0x50, v01032; CHECK-NEXT:    s_mov_b64 s[4:5], src_private_base1033; CHECK-NEXT:    v_addc_co_u32_e32 v5, vcc, 0, v1, vcc1034; CHECK-NEXT:    ;;#ASMSTART1035; CHECK-NEXT:    ; def a[0:1]1036; CHECK-NEXT:    ;;#ASMEND1037; CHECK-NEXT:    v_accvgpr_read_b32 v7, a11038; CHECK-NEXT:    v_accvgpr_read_b32 v6, a01039; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, s5, v51040; CHECK-NEXT:    ;;#ASMSTART1041; CHECK-NEXT:    ; def v[0:1]1042; CHECK-NEXT:    ;;#ASMEND1043; CHECK-NEXT:    ; implicit-def: $vgpr2_vgpr31044; CHECK-NEXT:    s_and_saveexec_b64 s[4:5], vcc1045; CHECK-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]1046; CHECK-NEXT:    s_cbranch_execz .LBB23_21047; CHECK-NEXT:  ; %bb.1: ; %atomicrmw.global1048; CHECK-NEXT:    v_accvgpr_read_b32 v2, a01049; CHECK-NEXT:    v_accvgpr_read_b32 v3, a11050; CHECK-NEXT:    buffer_wbl21051; CHECK-NEXT:    flat_atomic_cmpswap_x2 v[2:3], v[4:5], v[0:3] glc1052; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1053; CHECK-NEXT:    buffer_invl21054; CHECK-NEXT:    buffer_wbinvl1_vol1055; CHECK-NEXT:    ; implicit-def: $vgpr4_vgpr51056; CHECK-NEXT:    ; implicit-def: $vgpr6_vgpr71057; CHECK-NEXT:    ; implicit-def: $vgpr0_vgpr11058; CHECK-NEXT:  .LBB23_2: ; %Flow1059; CHECK-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]1060; CHECK-NEXT:    s_cbranch_execz .LBB23_41061; CHECK-NEXT:  ; %bb.3: ; %atomicrmw.private1062; CHECK-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]1063; CHECK-NEXT:    v_cndmask_b32_e32 v4, -1, v4, vcc1064; CHECK-NEXT:    buffer_load_dword v2, v4, s[0:3], 0 offen1065; CHECK-NEXT:    buffer_load_dword v3, v4, s[0:3], 0 offen offset:41066; CHECK-NEXT:    s_waitcnt vmcnt(0)1067; CHECK-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[6:7]1068; CHECK-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc1069; CHECK-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc1070; CHECK-NEXT:    buffer_store_dword v0, v4, s[0:3], 0 offen1071; CHECK-NEXT:    buffer_store_dword v1, v4, s[0:3], 0 offen offset:41072; CHECK-NEXT:  .LBB23_4: ; %atomicrmw.phi1073; CHECK-NEXT:    s_or_b64 exec, exec, s[4:5]1074; CHECK-NEXT:    ;;#ASMSTART1075; CHECK-NEXT:    ; use v[2:3]1076; CHECK-NEXT:    ;;#ASMEND1077; CHECK-NEXT:    s_waitcnt vmcnt(0)1078; CHECK-NEXT:    s_setpc_b64 s[30:31]1079  %gep.0 = getelementptr inbounds [512 x i64], ptr %ptr, i64 0, i64 101080  %data0 = call i64 asm "; def $0", "=a"()1081  %data1 = call i64 asm "; def $0", "=^VA"()1082  %pair = cmpxchg ptr %gep.0, i64 %data0, i64 %data1 seq_cst monotonic1083  %result = extractvalue { i64, i1 } %pair, 01084  call void asm "; use $0", "^VA"(i64 %result)1085  ret void1086}1087 1088attributes #0 = { nounwind "amdgpu-waves-per-eu"="10,10" }1089