brintos

brintos / llvm-project-archived public Read only

0
0
Text · 27.3 KiB · 6f1cb79 Raw
722 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 @global_atomic_cmpxchg_i32_ret_av_av__av(ptr addrspace(1) %ptr) #0 {9; CHECK-LABEL: global_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:    global_atomic_cmpswap v0, v[0:1], v[2:3], off offset:40 glc20; CHECK-NEXT:    s_waitcnt vmcnt(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 addrspace(1) %ptr, i64 0, i64 1028  %data0 = call i32 asm "; def $0", "=^VA"()29  %data1 = call i32 asm "; def $0", "=^VA"()30  %pair = cmpxchg ptr addrspace(1) %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 @global_atomic_cmpxchg_i32_ret_av_av__v(ptr addrspace(1) %ptr) #0 {37; CHECK-LABEL: global_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:    global_atomic_cmpswap v0, v[0:1], v[2:3], off offset:40 glc48; CHECK-NEXT:    s_waitcnt vmcnt(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 addrspace(1) %ptr, i64 0, i64 1056  %data0 = call i32 asm "; def $0", "=^VA"()57  %data1 = call i32 asm "; def $0", "=^VA"()58  %pair = cmpxchg ptr addrspace(1) %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 @global_atomic_cmpxchg_i32_ret_av_av__a(ptr addrspace(1) %ptr) #0 {65; CHECK-LABEL: global_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:    global_atomic_cmpswap v0, v[0:1], v[2:3], off offset:40 glc76; CHECK-NEXT:    s_waitcnt vmcnt(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 addrspace(1) %ptr, i64 0, i64 1085  %data0 = call i32 asm "; def $0", "=^VA"()86  %data1 = call i32 asm "; def $0", "=^VA"()87  %pair = cmpxchg ptr addrspace(1) %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 @global_atomic_cmpxchg_i32_ret_a_a__a(ptr addrspace(1) %ptr) #0 {94; CHECK-LABEL: global_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:    global_atomic_cmpswap v0, v[0:1], v[2:3], off offset:40 glc107; CHECK-NEXT:    s_waitcnt vmcnt(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 addrspace(1) %ptr, i64 0, i64 10116  %data0 = call i32 asm "; def $0", "=a"()117  %data1 = call i32 asm "; def $0", "=a"()118  %pair = cmpxchg ptr addrspace(1) %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 @global_atomic_cmpxchg_i32_ret_a_a__v(ptr addrspace(1) %ptr) #0 {125; CHECK-LABEL: global_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:    global_atomic_cmpswap v0, v[0:1], v[2:3], off offset:40 glc138; CHECK-NEXT:    s_waitcnt vmcnt(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 addrspace(1) %ptr, i64 0, i64 10146  %data0 = call i32 asm "; def $0", "=a"()147  %data1 = call i32 asm "; def $0", "=a"()148  %pair = cmpxchg ptr addrspace(1) %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 @global_atomic_cmpxchg_i32_ret_v_a__v(ptr addrspace(1) %ptr) #0 {155; CHECK-LABEL: global_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:    global_atomic_cmpswap v0, v[0:1], v[2:3], off offset:40 glc169; CHECK-NEXT:    s_waitcnt vmcnt(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 addrspace(1) %ptr, i64 0, i64 10177  %data0 = call i32 asm "; def $0", "=v"()178  %data1 = call i32 asm "; def $0", "=a"()179  %pair = cmpxchg ptr addrspace(1) %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 @global_atomic_cmpxchg_i32_ret_a_v__v(ptr addrspace(1) %ptr) #0 {186; CHECK-LABEL: global_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:    global_atomic_cmpswap v0, v[0:1], v[2:3], off offset:40 glc198; CHECK-NEXT:    s_waitcnt vmcnt(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 addrspace(1) %ptr, i64 0, i64 10206  %data0 = call i32 asm "; def $0", "=a"()207  %data1 = call i32 asm "; def $0", "=v"()208  %pair = cmpxchg ptr addrspace(1) %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 @global_atomic_cmpxchg_i32_ret_v_v__a(ptr addrspace(1) %ptr) #0 {215; CHECK-LABEL: global_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:    global_atomic_cmpswap v0, v[0:1], v[2:3], off offset:40 glc226; CHECK-NEXT:    s_waitcnt vmcnt(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 addrspace(1) %ptr, i64 0, i64 10235  %data0 = call i32 asm "; def $0", "=v"()236  %data1 = call i32 asm "; def $0", "=v"()237  %pair = cmpxchg ptr addrspace(1) %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 @global_atomic_cmpxchg_i32_ret_av_v__av(ptr addrspace(1) %ptr) #0 {244; CHECK-LABEL: global_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:    global_atomic_cmpswap v0, v[0:1], v[2:3], off offset:40 glc255; CHECK-NEXT:    s_waitcnt vmcnt(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 addrspace(1) %ptr, i64 0, i64 10263  %data0 = call i32 asm "; def $0", "=^VA"()264  %data1 = call i32 asm "; def $0", "=v"()265  %pair = cmpxchg ptr addrspace(1) %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 @global_atomic_cmpxchg_i32_ret_v_av__av(ptr addrspace(1) %ptr) #0 {272; CHECK-LABEL: global_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:    global_atomic_cmpswap v0, v[0:1], v[2:3], off offset:40 glc283; CHECK-NEXT:    s_waitcnt vmcnt(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 addrspace(1) %ptr, i64 0, i64 10291  %data0 = call i32 asm "; def $0", "=v"()292  %data1 = call i32 asm "; def $0", "=^VA"()293  %pair = cmpxchg ptr addrspace(1) %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 @global_atomic_cmpxchg_i32_ret_av_a__av(ptr addrspace(1) %ptr) #0 {300; CHECK-LABEL: global_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:    global_atomic_cmpswap v0, v[0:1], v[2:3], off offset:40 glc313; CHECK-NEXT:    s_waitcnt vmcnt(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 addrspace(1) %ptr, i64 0, i64 10321  %data0 = call i32 asm "; def $0", "=^VA"()322  %data1 = call i32 asm "; def $0", "=a"()323  %pair = cmpxchg ptr addrspace(1) %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 @global_atomic_cmpxchg_i32_ret_a_av__av(ptr addrspace(1) %ptr) #0 {330; CHECK-LABEL: global_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:    global_atomic_cmpswap v0, v[0:1], v[2:3], off offset:40 glc343; CHECK-NEXT:    s_waitcnt vmcnt(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 addrspace(1) %ptr, i64 0, i64 10351  %data0 = call i32 asm "; def $0", "=a"()352  %data1 = call i32 asm "; def $0", "=^VA"()353  %pair = cmpxchg ptr addrspace(1) %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 @global_atomic_cmpxchg_i64_ret_av_av__av(ptr addrspace(1) %ptr) #0 {364; CHECK-LABEL: global_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:    ;;#ASMSTART368; CHECK-NEXT:    ; def v[4:5]369; CHECK-NEXT:    ;;#ASMEND370; CHECK-NEXT:    ;;#ASMSTART371; CHECK-NEXT:    ; def v[2:3]372; CHECK-NEXT:    ;;#ASMEND373; CHECK-NEXT:    buffer_wbl2374; CHECK-NEXT:    global_atomic_cmpswap_x2 v[0:1], v[0:1], v[2:5], off offset:80 glc375; CHECK-NEXT:    s_waitcnt vmcnt(0)376; CHECK-NEXT:    buffer_invl2377; CHECK-NEXT:    buffer_wbinvl1_vol378; CHECK-NEXT:    ;;#ASMSTART379; CHECK-NEXT:    ; use v[0:1]380; CHECK-NEXT:    ;;#ASMEND381; CHECK-NEXT:    s_setpc_b64 s[30:31]382  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10383  %data0 = call i64 asm "; def $0", "=^VA"()384  %data1 = call i64 asm "; def $0", "=^VA"()385  %pair = cmpxchg ptr addrspace(1) %gep.0, i64 %data0, i64 %data1 seq_cst monotonic386  %result = extractvalue { i64, i1 } %pair, 0387  call void asm "; use $0", "^VA"(i64 %result)388  ret void389}390 391define void @global_atomic_cmpxchg_i64_ret_av_av__v(ptr addrspace(1) %ptr) #0 {392; CHECK-LABEL: global_atomic_cmpxchg_i64_ret_av_av__v:393; CHECK:       ; %bb.0:394; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)395; CHECK-NEXT:    ;;#ASMSTART396; CHECK-NEXT:    ; def v[4:5]397; CHECK-NEXT:    ;;#ASMEND398; CHECK-NEXT:    ;;#ASMSTART399; CHECK-NEXT:    ; def v[2:3]400; CHECK-NEXT:    ;;#ASMEND401; CHECK-NEXT:    buffer_wbl2402; CHECK-NEXT:    global_atomic_cmpswap_x2 v[0:1], v[0:1], v[2:5], off offset:80 glc403; CHECK-NEXT:    s_waitcnt vmcnt(0)404; CHECK-NEXT:    buffer_invl2405; CHECK-NEXT:    buffer_wbinvl1_vol406; CHECK-NEXT:    ;;#ASMSTART407; CHECK-NEXT:    ; use v[0:1]408; CHECK-NEXT:    ;;#ASMEND409; CHECK-NEXT:    s_setpc_b64 s[30:31]410  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10411  %data0 = call i64 asm "; def $0", "=^VA"()412  %data1 = call i64 asm "; def $0", "=^VA"()413  %pair = cmpxchg ptr addrspace(1) %gep.0, i64 %data0, i64 %data1 seq_cst monotonic414  %result = extractvalue { i64, i1 } %pair, 0415  call void asm "; use $0", "v"(i64 %result)416  ret void417}418 419define void @global_atomic_cmpxchg_i64_ret_av_av__a(ptr addrspace(1) %ptr) #0 {420; CHECK-LABEL: global_atomic_cmpxchg_i64_ret_av_av__a:421; CHECK:       ; %bb.0:422; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)423; CHECK-NEXT:    ;;#ASMSTART424; CHECK-NEXT:    ; def v[4:5]425; CHECK-NEXT:    ;;#ASMEND426; CHECK-NEXT:    ;;#ASMSTART427; CHECK-NEXT:    ; def v[2:3]428; CHECK-NEXT:    ;;#ASMEND429; CHECK-NEXT:    buffer_wbl2430; CHECK-NEXT:    global_atomic_cmpswap_x2 v[0:1], v[0:1], v[2:5], off offset:80 glc431; CHECK-NEXT:    s_waitcnt vmcnt(0)432; CHECK-NEXT:    buffer_invl2433; CHECK-NEXT:    buffer_wbinvl1_vol434; CHECK-NEXT:    v_accvgpr_write_b32 a0, v0435; CHECK-NEXT:    v_accvgpr_write_b32 a1, v1436; CHECK-NEXT:    ;;#ASMSTART437; CHECK-NEXT:    ; use a[0:1]438; CHECK-NEXT:    ;;#ASMEND439; CHECK-NEXT:    s_setpc_b64 s[30:31]440  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10441  %data0 = call i64 asm "; def $0", "=^VA"()442  %data1 = call i64 asm "; def $0", "=^VA"()443  %pair = cmpxchg ptr addrspace(1) %gep.0, i64 %data0, i64 %data1 seq_cst monotonic444  %result = extractvalue { i64, i1 } %pair, 0445  call void asm "; use $0", "a"(i64 %result)446  ret void447}448 449define void @global_atomic_cmpxchg_i64_ret_a_a__a(ptr addrspace(1) %ptr) #0 {450; CHECK-LABEL: global_atomic_cmpxchg_i64_ret_a_a__a:451; CHECK:       ; %bb.0:452; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)453; CHECK-NEXT:    ;;#ASMSTART454; CHECK-NEXT:    ; def a[0:1]455; CHECK-NEXT:    ;;#ASMEND456; CHECK-NEXT:    ;;#ASMSTART457; CHECK-NEXT:    ; def a[2:3]458; CHECK-NEXT:    ;;#ASMEND459; CHECK-NEXT:    v_accvgpr_read_b32 v2, a2460; CHECK-NEXT:    v_accvgpr_read_b32 v3, a3461; CHECK-NEXT:    v_accvgpr_read_b32 v4, a0462; CHECK-NEXT:    v_accvgpr_read_b32 v5, a1463; CHECK-NEXT:    buffer_wbl2464; CHECK-NEXT:    global_atomic_cmpswap_x2 v[0:1], v[0:1], v[2:5], off offset:80 glc465; CHECK-NEXT:    s_waitcnt vmcnt(0)466; CHECK-NEXT:    buffer_invl2467; CHECK-NEXT:    buffer_wbinvl1_vol468; CHECK-NEXT:    v_accvgpr_write_b32 a0, v0469; CHECK-NEXT:    v_accvgpr_write_b32 a1, v1470; CHECK-NEXT:    ;;#ASMSTART471; CHECK-NEXT:    ; use a[0:1]472; CHECK-NEXT:    ;;#ASMEND473; CHECK-NEXT:    s_setpc_b64 s[30:31]474  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10475  %data0 = call i64 asm "; def $0", "=a"()476  %data1 = call i64 asm "; def $0", "=a"()477  %pair = cmpxchg ptr addrspace(1) %gep.0, i64 %data0, i64 %data1 seq_cst monotonic478  %result = extractvalue { i64, i1 } %pair, 0479  call void asm "; use $0", "a"(i64 %result)480  ret void481}482 483define void @global_atomic_cmpxchg_i64_ret_a_a__v(ptr addrspace(1) %ptr) #0 {484; CHECK-LABEL: global_atomic_cmpxchg_i64_ret_a_a__v:485; CHECK:       ; %bb.0:486; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)487; CHECK-NEXT:    ;;#ASMSTART488; CHECK-NEXT:    ; def a[0:1]489; CHECK-NEXT:    ;;#ASMEND490; CHECK-NEXT:    ;;#ASMSTART491; CHECK-NEXT:    ; def a[2:3]492; CHECK-NEXT:    ;;#ASMEND493; CHECK-NEXT:    v_accvgpr_read_b32 v2, a2494; CHECK-NEXT:    v_accvgpr_read_b32 v3, a3495; CHECK-NEXT:    v_accvgpr_read_b32 v4, a0496; CHECK-NEXT:    v_accvgpr_read_b32 v5, a1497; CHECK-NEXT:    buffer_wbl2498; CHECK-NEXT:    global_atomic_cmpswap_x2 v[0:1], v[0:1], v[2:5], off offset:80 glc499; CHECK-NEXT:    s_waitcnt vmcnt(0)500; CHECK-NEXT:    buffer_invl2501; CHECK-NEXT:    buffer_wbinvl1_vol502; CHECK-NEXT:    ;;#ASMSTART503; CHECK-NEXT:    ; use v[0:1]504; CHECK-NEXT:    ;;#ASMEND505; CHECK-NEXT:    s_setpc_b64 s[30:31]506  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10507  %data0 = call i64 asm "; def $0", "=a"()508  %data1 = call i64 asm "; def $0", "=a"()509  %pair = cmpxchg ptr addrspace(1) %gep.0, i64 %data0, i64 %data1 seq_cst monotonic510  %result = extractvalue { i64, i1 } %pair, 0511  call void asm "; use $0", "v"(i64 %result)512  ret void513}514 515define void @global_atomic_cmpxchg_i64_ret_v_a__v(ptr addrspace(1) %ptr) #0 {516; CHECK-LABEL: global_atomic_cmpxchg_i64_ret_v_a__v:517; CHECK:       ; %bb.0:518; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)519; CHECK-NEXT:    ;;#ASMSTART520; CHECK-NEXT:    ; def a[0:1]521; CHECK-NEXT:    ;;#ASMEND522; CHECK-NEXT:    v_accvgpr_read_b32 v2, a0523; CHECK-NEXT:    v_accvgpr_read_b32 v3, a1524; CHECK-NEXT:    ;;#ASMSTART525; CHECK-NEXT:    ; def v[4:5]526; CHECK-NEXT:    ;;#ASMEND527; CHECK-NEXT:    buffer_wbl2528; CHECK-NEXT:    global_atomic_cmpswap_x2 v[0:1], v[0:1], v[2:5], off offset:80 glc529; CHECK-NEXT:    s_waitcnt vmcnt(0)530; CHECK-NEXT:    buffer_invl2531; CHECK-NEXT:    buffer_wbinvl1_vol532; CHECK-NEXT:    ;;#ASMSTART533; CHECK-NEXT:    ; use v[0:1]534; CHECK-NEXT:    ;;#ASMEND535; CHECK-NEXT:    s_setpc_b64 s[30:31]536  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10537  %data0 = call i64 asm "; def $0", "=v"()538  %data1 = call i64 asm "; def $0", "=a"()539  %pair = cmpxchg ptr addrspace(1) %gep.0, i64 %data0, i64 %data1 seq_cst monotonic540  %result = extractvalue { i64, i1 } %pair, 0541  call void asm "; use $0", "v"(i64 %result)542  ret void543}544 545define void @global_atomic_cmpxchg_i64_ret_a_v__v(ptr addrspace(1) %ptr) #0 {546; CHECK-LABEL: global_atomic_cmpxchg_i64_ret_a_v__v:547; CHECK:       ; %bb.0:548; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)549; CHECK-NEXT:    ;;#ASMSTART550; CHECK-NEXT:    ; def a[0:1]551; CHECK-NEXT:    ;;#ASMEND552; CHECK-NEXT:    v_accvgpr_read_b32 v4, a0553; CHECK-NEXT:    v_accvgpr_read_b32 v5, a1554; CHECK-NEXT:    ;;#ASMSTART555; CHECK-NEXT:    ; def v[2:3]556; CHECK-NEXT:    ;;#ASMEND557; CHECK-NEXT:    buffer_wbl2558; CHECK-NEXT:    global_atomic_cmpswap_x2 v[0:1], v[0:1], v[2:5], off offset:80 glc559; CHECK-NEXT:    s_waitcnt vmcnt(0)560; CHECK-NEXT:    buffer_invl2561; CHECK-NEXT:    buffer_wbinvl1_vol562; CHECK-NEXT:    ;;#ASMSTART563; CHECK-NEXT:    ; use v[0:1]564; CHECK-NEXT:    ;;#ASMEND565; CHECK-NEXT:    s_setpc_b64 s[30:31]566  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10567  %data0 = call i64 asm "; def $0", "=a"()568  %data1 = call i64 asm "; def $0", "=v"()569  %pair = cmpxchg ptr addrspace(1) %gep.0, i64 %data0, i64 %data1 seq_cst monotonic570  %result = extractvalue { i64, i1 } %pair, 0571  call void asm "; use $0", "v"(i64 %result)572  ret void573}574 575define void @global_atomic_cmpxchg_i64_ret_v_v__a(ptr addrspace(1) %ptr) #0 {576; CHECK-LABEL: global_atomic_cmpxchg_i64_ret_v_v__a:577; CHECK:       ; %bb.0:578; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)579; CHECK-NEXT:    ;;#ASMSTART580; CHECK-NEXT:    ; def v[4:5]581; CHECK-NEXT:    ;;#ASMEND582; CHECK-NEXT:    ;;#ASMSTART583; CHECK-NEXT:    ; def v[2:3]584; CHECK-NEXT:    ;;#ASMEND585; CHECK-NEXT:    buffer_wbl2586; CHECK-NEXT:    global_atomic_cmpswap_x2 v[0:1], v[0:1], v[2:5], off offset:80 glc587; CHECK-NEXT:    s_waitcnt vmcnt(0)588; CHECK-NEXT:    buffer_invl2589; CHECK-NEXT:    buffer_wbinvl1_vol590; CHECK-NEXT:    v_accvgpr_write_b32 a0, v0591; CHECK-NEXT:    v_accvgpr_write_b32 a1, v1592; CHECK-NEXT:    ;;#ASMSTART593; CHECK-NEXT:    ; use a[0:1]594; CHECK-NEXT:    ;;#ASMEND595; CHECK-NEXT:    s_setpc_b64 s[30:31]596  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10597  %data0 = call i64 asm "; def $0", "=v"()598  %data1 = call i64 asm "; def $0", "=v"()599  %pair = cmpxchg ptr addrspace(1) %gep.0, i64 %data0, i64 %data1 seq_cst monotonic600  %result = extractvalue { i64, i1 } %pair, 0601  call void asm "; use $0", "a"(i64 %result)602  ret void603}604 605define void @global_atomic_cmpxchg_i64_ret_av_v__av(ptr addrspace(1) %ptr) #0 {606; CHECK-LABEL: global_atomic_cmpxchg_i64_ret_av_v__av:607; CHECK:       ; %bb.0:608; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)609; CHECK-NEXT:    ;;#ASMSTART610; CHECK-NEXT:    ; def v[4:5]611; CHECK-NEXT:    ;;#ASMEND612; CHECK-NEXT:    ;;#ASMSTART613; CHECK-NEXT:    ; def v[2:3]614; CHECK-NEXT:    ;;#ASMEND615; CHECK-NEXT:    buffer_wbl2616; CHECK-NEXT:    global_atomic_cmpswap_x2 v[0:1], v[0:1], v[2:5], off offset:80 glc617; CHECK-NEXT:    s_waitcnt vmcnt(0)618; CHECK-NEXT:    buffer_invl2619; CHECK-NEXT:    buffer_wbinvl1_vol620; CHECK-NEXT:    ;;#ASMSTART621; CHECK-NEXT:    ; use v[0:1]622; CHECK-NEXT:    ;;#ASMEND623; CHECK-NEXT:    s_setpc_b64 s[30:31]624  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10625  %data0 = call i64 asm "; def $0", "=^VA"()626  %data1 = call i64 asm "; def $0", "=v"()627  %pair = cmpxchg ptr addrspace(1) %gep.0, i64 %data0, i64 %data1 seq_cst monotonic628  %result = extractvalue { i64, i1 } %pair, 0629  call void asm "; use $0", "^VA"(i64 %result)630  ret void631}632 633define void @global_atomic_cmpxchg_i64_ret_v_av__av(ptr addrspace(1) %ptr) #0 {634; CHECK-LABEL: global_atomic_cmpxchg_i64_ret_v_av__av:635; CHECK:       ; %bb.0:636; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)637; CHECK-NEXT:    ;;#ASMSTART638; CHECK-NEXT:    ; def v[4:5]639; CHECK-NEXT:    ;;#ASMEND640; CHECK-NEXT:    ;;#ASMSTART641; CHECK-NEXT:    ; def v[2:3]642; CHECK-NEXT:    ;;#ASMEND643; CHECK-NEXT:    buffer_wbl2644; CHECK-NEXT:    global_atomic_cmpswap_x2 v[0:1], v[0:1], v[2:5], off offset:80 glc645; CHECK-NEXT:    s_waitcnt vmcnt(0)646; CHECK-NEXT:    buffer_invl2647; CHECK-NEXT:    buffer_wbinvl1_vol648; CHECK-NEXT:    ;;#ASMSTART649; CHECK-NEXT:    ; use v[0:1]650; CHECK-NEXT:    ;;#ASMEND651; CHECK-NEXT:    s_setpc_b64 s[30:31]652  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10653  %data0 = call i64 asm "; def $0", "=v"()654  %data1 = call i64 asm "; def $0", "=^VA"()655  %pair = cmpxchg ptr addrspace(1) %gep.0, i64 %data0, i64 %data1 seq_cst monotonic656  %result = extractvalue { i64, i1 } %pair, 0657  call void asm "; use $0", "^VA"(i64 %result)658  ret void659}660 661define void @global_atomic_cmpxchg_i64_ret_av_a__av(ptr addrspace(1) %ptr) #0 {662; CHECK-LABEL: global_atomic_cmpxchg_i64_ret_av_a__av:663; CHECK:       ; %bb.0:664; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)665; CHECK-NEXT:    ;;#ASMSTART666; CHECK-NEXT:    ; def a[0:1]667; CHECK-NEXT:    ;;#ASMEND668; CHECK-NEXT:    v_accvgpr_read_b32 v2, a0669; CHECK-NEXT:    v_accvgpr_read_b32 v3, a1670; CHECK-NEXT:    ;;#ASMSTART671; CHECK-NEXT:    ; def v[4:5]672; CHECK-NEXT:    ;;#ASMEND673; CHECK-NEXT:    buffer_wbl2674; CHECK-NEXT:    global_atomic_cmpswap_x2 v[0:1], v[0:1], v[2:5], off offset:80 glc675; CHECK-NEXT:    s_waitcnt vmcnt(0)676; CHECK-NEXT:    buffer_invl2677; CHECK-NEXT:    buffer_wbinvl1_vol678; CHECK-NEXT:    ;;#ASMSTART679; CHECK-NEXT:    ; use v[0:1]680; CHECK-NEXT:    ;;#ASMEND681; CHECK-NEXT:    s_setpc_b64 s[30:31]682  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10683  %data0 = call i64 asm "; def $0", "=^VA"()684  %data1 = call i64 asm "; def $0", "=a"()685  %pair = cmpxchg ptr addrspace(1) %gep.0, i64 %data0, i64 %data1 seq_cst monotonic686  %result = extractvalue { i64, i1 } %pair, 0687  call void asm "; use $0", "^VA"(i64 %result)688  ret void689}690 691define void @global_atomic_cmpxchg_i64_ret_a_av__av(ptr addrspace(1) %ptr) #0 {692; CHECK-LABEL: global_atomic_cmpxchg_i64_ret_a_av__av:693; CHECK:       ; %bb.0:694; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)695; CHECK-NEXT:    ;;#ASMSTART696; CHECK-NEXT:    ; def a[0:1]697; CHECK-NEXT:    ;;#ASMEND698; CHECK-NEXT:    v_accvgpr_read_b32 v4, a0699; CHECK-NEXT:    v_accvgpr_read_b32 v5, a1700; CHECK-NEXT:    ;;#ASMSTART701; CHECK-NEXT:    ; def v[2:3]702; CHECK-NEXT:    ;;#ASMEND703; CHECK-NEXT:    buffer_wbl2704; CHECK-NEXT:    global_atomic_cmpswap_x2 v[0:1], v[0:1], v[2:5], off offset:80 glc705; CHECK-NEXT:    s_waitcnt vmcnt(0)706; CHECK-NEXT:    buffer_invl2707; CHECK-NEXT:    buffer_wbinvl1_vol708; CHECK-NEXT:    ;;#ASMSTART709; CHECK-NEXT:    ; use v[0:1]710; CHECK-NEXT:    ;;#ASMEND711; CHECK-NEXT:    s_setpc_b64 s[30:31]712  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10713  %data0 = call i64 asm "; def $0", "=a"()714  %data1 = call i64 asm "; def $0", "=^VA"()715  %pair = cmpxchg ptr addrspace(1) %gep.0, i64 %data0, i64 %data1 seq_cst monotonic716  %result = extractvalue { i64, i1 } %pair, 0717  call void asm "; use $0", "^VA"(i64 %result)718  ret void719}720 721attributes #0 = { nounwind "amdgpu-waves-per-eu"="10,10" }722