brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.3 KiB · 4594cf2 Raw
360 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch64 -mattr=+d,-scq,-ld-seq-sa < %s | FileCheck %s --check-prefix=LA643; RUN: llc --mtriple=loongarch64 -mattr=+d,+scq,-ld-seq-sa --verify-machineinstrs < %s | FileCheck %s --check-prefixes=LA64-SCQ,NO-LD-SEQ-SA4; RUN: llc --mtriple=loongarch64 -mattr=+d,+scq,+ld-seq-sa --verify-machineinstrs < %s | FileCheck %s --check-prefixes=LA64-SCQ,LD-SEQ-SA5 6define void @cmpxchg_i128_acquire_acquire(ptr %ptr, i128 %cmp, i128 %val) nounwind {7; LA64-LABEL: cmpxchg_i128_acquire_acquire:8; LA64:       # %bb.0:9; LA64-NEXT:    addi.d $sp, $sp, -3210; LA64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill11; LA64-NEXT:    move $a6, $a412; LA64-NEXT:    st.d $a2, $sp, 813; LA64-NEXT:    st.d $a1, $sp, 014; LA64-NEXT:    addi.d $a1, $sp, 015; LA64-NEXT:    ori $a4, $zero, 216; LA64-NEXT:    ori $a5, $zero, 217; LA64-NEXT:    move $a2, $a318; LA64-NEXT:    move $a3, $a619; LA64-NEXT:    pcaddu18i $ra, %call36(__atomic_compare_exchange_16)20; LA64-NEXT:    jirl $ra, $ra, 021; LA64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload22; LA64-NEXT:    addi.d $sp, $sp, 3223; LA64-NEXT:    ret24;25; LA64-SCQ-LABEL: cmpxchg_i128_acquire_acquire:26; LA64-SCQ:       # %bb.0:27; LA64-SCQ-NEXT:  .LBB0_1: # =>This Inner Loop Header: Depth=128; LA64-SCQ-NEXT:    ll.d $a5, $a0, 029; LA64-SCQ-NEXT:    dbar 2030; LA64-SCQ-NEXT:    ld.d $a6, $a0, 831; LA64-SCQ-NEXT:    bne $a5, $a1, .LBB0_332; LA64-SCQ-NEXT:    bne $a6, $a2, .LBB0_333; LA64-SCQ-NEXT:  # %bb.2: # in Loop: Header=BB0_1 Depth=134; LA64-SCQ-NEXT:    move $a7, $a335; LA64-SCQ-NEXT:    sc.q $a7, $a4, $a036; LA64-SCQ-NEXT:    beq $a7, $zero, .LBB0_137; LA64-SCQ-NEXT:    b .LBB0_438; LA64-SCQ-NEXT:  .LBB0_3:39; LA64-SCQ-NEXT:    dbar 2040; LA64-SCQ-NEXT:  .LBB0_4:41; LA64-SCQ-NEXT:    ret42  %res = cmpxchg ptr %ptr, i128 %cmp, i128 %val acquire acquire43  ret void44}45 46define void @cmpxchg_i128_acquire_monotonic(ptr %ptr, i128 %cmp, i128 %val) nounwind {47; LA64-LABEL: cmpxchg_i128_acquire_monotonic:48; LA64:       # %bb.0:49; LA64-NEXT:    addi.d $sp, $sp, -3250; LA64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill51; LA64-NEXT:    move $a5, $a452; LA64-NEXT:    st.d $a2, $sp, 853; LA64-NEXT:    st.d $a1, $sp, 054; LA64-NEXT:    addi.d $a1, $sp, 055; LA64-NEXT:    ori $a4, $zero, 256; LA64-NEXT:    move $a2, $a357; LA64-NEXT:    move $a3, $a558; LA64-NEXT:    move $a5, $zero59; LA64-NEXT:    pcaddu18i $ra, %call36(__atomic_compare_exchange_16)60; LA64-NEXT:    jirl $ra, $ra, 061; LA64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload62; LA64-NEXT:    addi.d $sp, $sp, 3263; LA64-NEXT:    ret64;65; LA64-SCQ-LABEL: cmpxchg_i128_acquire_monotonic:66; LA64-SCQ:       # %bb.0:67; LA64-SCQ-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=168; LA64-SCQ-NEXT:    ll.d $a5, $a0, 069; LA64-SCQ-NEXT:    dbar 2070; LA64-SCQ-NEXT:    ld.d $a6, $a0, 871; LA64-SCQ-NEXT:    bne $a5, $a1, .LBB1_372; LA64-SCQ-NEXT:    bne $a6, $a2, .LBB1_373; LA64-SCQ-NEXT:  # %bb.2: # in Loop: Header=BB1_1 Depth=174; LA64-SCQ-NEXT:    move $a7, $a375; LA64-SCQ-NEXT:    sc.q $a7, $a4, $a076; LA64-SCQ-NEXT:    beq $a7, $zero, .LBB1_177; LA64-SCQ-NEXT:    b .LBB1_478; LA64-SCQ-NEXT:  .LBB1_3:79; LA64-SCQ-NEXT:    dbar 2080; LA64-SCQ-NEXT:  .LBB1_4:81; LA64-SCQ-NEXT:    ret82  %res = cmpxchg ptr %ptr, i128 %cmp, i128 %val acquire monotonic83  ret void84}85 86define i128 @cmpxchg_i128_acquire_acquire_reti128(ptr %ptr, i128 %cmp, i128 %val) nounwind {87; LA64-LABEL: cmpxchg_i128_acquire_acquire_reti128:88; LA64:       # %bb.0:89; LA64-NEXT:    addi.d $sp, $sp, -3290; LA64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill91; LA64-NEXT:    move $a6, $a492; LA64-NEXT:    st.d $a2, $sp, 893; LA64-NEXT:    st.d $a1, $sp, 094; LA64-NEXT:    addi.d $a1, $sp, 095; LA64-NEXT:    ori $a4, $zero, 296; LA64-NEXT:    ori $a5, $zero, 297; LA64-NEXT:    move $a2, $a398; LA64-NEXT:    move $a3, $a699; LA64-NEXT:    pcaddu18i $ra, %call36(__atomic_compare_exchange_16)100; LA64-NEXT:    jirl $ra, $ra, 0101; LA64-NEXT:    ld.d $a1, $sp, 8102; LA64-NEXT:    ld.d $a0, $sp, 0103; LA64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload104; LA64-NEXT:    addi.d $sp, $sp, 32105; LA64-NEXT:    ret106;107; LA64-SCQ-LABEL: cmpxchg_i128_acquire_acquire_reti128:108; LA64-SCQ:       # %bb.0:109; LA64-SCQ-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1110; LA64-SCQ-NEXT:    ll.d $a5, $a0, 0111; LA64-SCQ-NEXT:    dbar 20112; LA64-SCQ-NEXT:    ld.d $a6, $a0, 8113; LA64-SCQ-NEXT:    bne $a5, $a1, .LBB2_3114; LA64-SCQ-NEXT:    bne $a6, $a2, .LBB2_3115; LA64-SCQ-NEXT:  # %bb.2: # in Loop: Header=BB2_1 Depth=1116; LA64-SCQ-NEXT:    move $a7, $a3117; LA64-SCQ-NEXT:    sc.q $a7, $a4, $a0118; LA64-SCQ-NEXT:    beq $a7, $zero, .LBB2_1119; LA64-SCQ-NEXT:    b .LBB2_4120; LA64-SCQ-NEXT:  .LBB2_3:121; LA64-SCQ-NEXT:    dbar 20122; LA64-SCQ-NEXT:  .LBB2_4:123; LA64-SCQ-NEXT:    move $a0, $a5124; LA64-SCQ-NEXT:    move $a1, $a6125; LA64-SCQ-NEXT:    ret126  %tmp = cmpxchg ptr %ptr, i128 %cmp, i128 %val acquire acquire127  %res = extractvalue { i128, i1 } %tmp, 0128  ret i128 %res129}130 131define i1 @cmpxchg_i128_acquire_acquire_reti1(ptr %ptr, i128 %cmp, i128 %val) nounwind {132; LA64-LABEL: cmpxchg_i128_acquire_acquire_reti1:133; LA64:       # %bb.0:134; LA64-NEXT:    addi.d $sp, $sp, -32135; LA64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill136; LA64-NEXT:    move $a6, $a4137; LA64-NEXT:    st.d $a2, $sp, 8138; LA64-NEXT:    st.d $a1, $sp, 0139; LA64-NEXT:    addi.d $a1, $sp, 0140; LA64-NEXT:    ori $a4, $zero, 2141; LA64-NEXT:    ori $a5, $zero, 2142; LA64-NEXT:    move $a2, $a3143; LA64-NEXT:    move $a3, $a6144; LA64-NEXT:    pcaddu18i $ra, %call36(__atomic_compare_exchange_16)145; LA64-NEXT:    jirl $ra, $ra, 0146; LA64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload147; LA64-NEXT:    addi.d $sp, $sp, 32148; LA64-NEXT:    ret149;150; LA64-SCQ-LABEL: cmpxchg_i128_acquire_acquire_reti1:151; LA64-SCQ:       # %bb.0:152; LA64-SCQ-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1153; LA64-SCQ-NEXT:    ll.d $a5, $a0, 0154; LA64-SCQ-NEXT:    dbar 20155; LA64-SCQ-NEXT:    ld.d $a6, $a0, 8156; LA64-SCQ-NEXT:    bne $a5, $a1, .LBB3_3157; LA64-SCQ-NEXT:    bne $a6, $a2, .LBB3_3158; LA64-SCQ-NEXT:  # %bb.2: # in Loop: Header=BB3_1 Depth=1159; LA64-SCQ-NEXT:    move $a7, $a3160; LA64-SCQ-NEXT:    sc.q $a7, $a4, $a0161; LA64-SCQ-NEXT:    beq $a7, $zero, .LBB3_1162; LA64-SCQ-NEXT:    b .LBB3_4163; LA64-SCQ-NEXT:  .LBB3_3:164; LA64-SCQ-NEXT:    dbar 20165; LA64-SCQ-NEXT:  .LBB3_4:166; LA64-SCQ-NEXT:    xor $a0, $a6, $a2167; LA64-SCQ-NEXT:    xor $a1, $a5, $a1168; LA64-SCQ-NEXT:    or $a0, $a1, $a0169; LA64-SCQ-NEXT:    sltui $a0, $a0, 1170; LA64-SCQ-NEXT:    ret171  %tmp = cmpxchg ptr %ptr, i128 %cmp, i128 %val acquire acquire172  %res = extractvalue { i128, i1 } %tmp, 1173  ret i1 %res174}175 176 177define void @cmpxchg_i128_monotonic_monotonic(ptr %ptr, i128 %cmp, i128 %val) nounwind {178; LA64-LABEL: cmpxchg_i128_monotonic_monotonic:179; LA64:       # %bb.0:180; LA64-NEXT:    addi.d $sp, $sp, -32181; LA64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill182; LA64-NEXT:    st.d $a2, $sp, 8183; LA64-NEXT:    st.d $a1, $sp, 0184; LA64-NEXT:    addi.d $a1, $sp, 0185; LA64-NEXT:    move $a2, $a3186; LA64-NEXT:    move $a3, $a4187; LA64-NEXT:    move $a4, $zero188; LA64-NEXT:    move $a5, $zero189; LA64-NEXT:    pcaddu18i $ra, %call36(__atomic_compare_exchange_16)190; LA64-NEXT:    jirl $ra, $ra, 0191; LA64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload192; LA64-NEXT:    addi.d $sp, $sp, 32193; LA64-NEXT:    ret194;195; NO-LD-SEQ-SA-LABEL: cmpxchg_i128_monotonic_monotonic:196; NO-LD-SEQ-SA:       # %bb.0:197; NO-LD-SEQ-SA-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1198; NO-LD-SEQ-SA-NEXT:    ll.d $a5, $a0, 0199; NO-LD-SEQ-SA-NEXT:    dbar 20200; NO-LD-SEQ-SA-NEXT:    ld.d $a6, $a0, 8201; NO-LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB4_3202; NO-LD-SEQ-SA-NEXT:    bne $a6, $a2, .LBB4_3203; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB4_1 Depth=1204; NO-LD-SEQ-SA-NEXT:    move $a7, $a3205; NO-LD-SEQ-SA-NEXT:    sc.q $a7, $a4, $a0206; NO-LD-SEQ-SA-NEXT:    beq $a7, $zero, .LBB4_1207; NO-LD-SEQ-SA-NEXT:    b .LBB4_4208; NO-LD-SEQ-SA-NEXT:  .LBB4_3:209; NO-LD-SEQ-SA-NEXT:    dbar 1792210; NO-LD-SEQ-SA-NEXT:  .LBB4_4:211; NO-LD-SEQ-SA-NEXT:    ret212;213; LD-SEQ-SA-LABEL: cmpxchg_i128_monotonic_monotonic:214; LD-SEQ-SA:       # %bb.0:215; LD-SEQ-SA-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1216; LD-SEQ-SA-NEXT:    ll.d $a5, $a0, 0217; LD-SEQ-SA-NEXT:    dbar 20218; LD-SEQ-SA-NEXT:    ld.d $a6, $a0, 8219; LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB4_3220; LD-SEQ-SA-NEXT:    bne $a6, $a2, .LBB4_3221; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB4_1 Depth=1222; LD-SEQ-SA-NEXT:    move $a7, $a3223; LD-SEQ-SA-NEXT:    sc.q $a7, $a4, $a0224; LD-SEQ-SA-NEXT:    beq $a7, $zero, .LBB4_1225; LD-SEQ-SA-NEXT:    b .LBB4_4226; LD-SEQ-SA-NEXT:  .LBB4_3:227; LD-SEQ-SA-NEXT:  .LBB4_4:228; LD-SEQ-SA-NEXT:    ret229  %res = cmpxchg ptr %ptr, i128 %cmp, i128 %val monotonic monotonic230  ret void231}232 233define i128 @cmpxchg_i128_monotonic_monotonic_reti128(ptr %ptr, i128 %cmp, i128 %val) nounwind {234; LA64-LABEL: cmpxchg_i128_monotonic_monotonic_reti128:235; LA64:       # %bb.0:236; LA64-NEXT:    addi.d $sp, $sp, -32237; LA64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill238; LA64-NEXT:    st.d $a2, $sp, 8239; LA64-NEXT:    st.d $a1, $sp, 0240; LA64-NEXT:    addi.d $a1, $sp, 0241; LA64-NEXT:    move $a2, $a3242; LA64-NEXT:    move $a3, $a4243; LA64-NEXT:    move $a4, $zero244; LA64-NEXT:    move $a5, $zero245; LA64-NEXT:    pcaddu18i $ra, %call36(__atomic_compare_exchange_16)246; LA64-NEXT:    jirl $ra, $ra, 0247; LA64-NEXT:    ld.d $a1, $sp, 8248; LA64-NEXT:    ld.d $a0, $sp, 0249; LA64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload250; LA64-NEXT:    addi.d $sp, $sp, 32251; LA64-NEXT:    ret252;253; NO-LD-SEQ-SA-LABEL: cmpxchg_i128_monotonic_monotonic_reti128:254; NO-LD-SEQ-SA:       # %bb.0:255; NO-LD-SEQ-SA-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=1256; NO-LD-SEQ-SA-NEXT:    ll.d $a5, $a0, 0257; NO-LD-SEQ-SA-NEXT:    dbar 20258; NO-LD-SEQ-SA-NEXT:    ld.d $a6, $a0, 8259; NO-LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB5_3260; NO-LD-SEQ-SA-NEXT:    bne $a6, $a2, .LBB5_3261; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB5_1 Depth=1262; NO-LD-SEQ-SA-NEXT:    move $a7, $a3263; NO-LD-SEQ-SA-NEXT:    sc.q $a7, $a4, $a0264; NO-LD-SEQ-SA-NEXT:    beq $a7, $zero, .LBB5_1265; NO-LD-SEQ-SA-NEXT:    b .LBB5_4266; NO-LD-SEQ-SA-NEXT:  .LBB5_3:267; NO-LD-SEQ-SA-NEXT:    dbar 1792268; NO-LD-SEQ-SA-NEXT:  .LBB5_4:269; NO-LD-SEQ-SA-NEXT:    move $a0, $a5270; NO-LD-SEQ-SA-NEXT:    move $a1, $a6271; NO-LD-SEQ-SA-NEXT:    ret272;273; LD-SEQ-SA-LABEL: cmpxchg_i128_monotonic_monotonic_reti128:274; LD-SEQ-SA:       # %bb.0:275; LD-SEQ-SA-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=1276; LD-SEQ-SA-NEXT:    ll.d $a5, $a0, 0277; LD-SEQ-SA-NEXT:    dbar 20278; LD-SEQ-SA-NEXT:    ld.d $a6, $a0, 8279; LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB5_3280; LD-SEQ-SA-NEXT:    bne $a6, $a2, .LBB5_3281; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB5_1 Depth=1282; LD-SEQ-SA-NEXT:    move $a7, $a3283; LD-SEQ-SA-NEXT:    sc.q $a7, $a4, $a0284; LD-SEQ-SA-NEXT:    beq $a7, $zero, .LBB5_1285; LD-SEQ-SA-NEXT:    b .LBB5_4286; LD-SEQ-SA-NEXT:  .LBB5_3:287; LD-SEQ-SA-NEXT:  .LBB5_4:288; LD-SEQ-SA-NEXT:    move $a0, $a5289; LD-SEQ-SA-NEXT:    move $a1, $a6290; LD-SEQ-SA-NEXT:    ret291  %tmp = cmpxchg ptr %ptr, i128 %cmp, i128 %val monotonic monotonic292  %res = extractvalue { i128, i1 } %tmp, 0293  ret i128 %res294}295 296define i1 @cmpxchg_i128_monotonic_monotonic_reti1(ptr %ptr, i128 %cmp, i128 %val) nounwind {297; LA64-LABEL: cmpxchg_i128_monotonic_monotonic_reti1:298; LA64:       # %bb.0:299; LA64-NEXT:    addi.d $sp, $sp, -32300; LA64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill301; LA64-NEXT:    st.d $a2, $sp, 8302; LA64-NEXT:    st.d $a1, $sp, 0303; LA64-NEXT:    addi.d $a1, $sp, 0304; LA64-NEXT:    move $a2, $a3305; LA64-NEXT:    move $a3, $a4306; LA64-NEXT:    move $a4, $zero307; LA64-NEXT:    move $a5, $zero308; LA64-NEXT:    pcaddu18i $ra, %call36(__atomic_compare_exchange_16)309; LA64-NEXT:    jirl $ra, $ra, 0310; LA64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload311; LA64-NEXT:    addi.d $sp, $sp, 32312; LA64-NEXT:    ret313;314; NO-LD-SEQ-SA-LABEL: cmpxchg_i128_monotonic_monotonic_reti1:315; NO-LD-SEQ-SA:       # %bb.0:316; NO-LD-SEQ-SA-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=1317; NO-LD-SEQ-SA-NEXT:    ll.d $a5, $a0, 0318; NO-LD-SEQ-SA-NEXT:    dbar 20319; NO-LD-SEQ-SA-NEXT:    ld.d $a6, $a0, 8320; NO-LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB6_3321; NO-LD-SEQ-SA-NEXT:    bne $a6, $a2, .LBB6_3322; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB6_1 Depth=1323; NO-LD-SEQ-SA-NEXT:    move $a7, $a3324; NO-LD-SEQ-SA-NEXT:    sc.q $a7, $a4, $a0325; NO-LD-SEQ-SA-NEXT:    beq $a7, $zero, .LBB6_1326; NO-LD-SEQ-SA-NEXT:    b .LBB6_4327; NO-LD-SEQ-SA-NEXT:  .LBB6_3:328; NO-LD-SEQ-SA-NEXT:    dbar 1792329; NO-LD-SEQ-SA-NEXT:  .LBB6_4:330; NO-LD-SEQ-SA-NEXT:    xor $a0, $a6, $a2331; NO-LD-SEQ-SA-NEXT:    xor $a1, $a5, $a1332; NO-LD-SEQ-SA-NEXT:    or $a0, $a1, $a0333; NO-LD-SEQ-SA-NEXT:    sltui $a0, $a0, 1334; NO-LD-SEQ-SA-NEXT:    ret335;336; LD-SEQ-SA-LABEL: cmpxchg_i128_monotonic_monotonic_reti1:337; LD-SEQ-SA:       # %bb.0:338; LD-SEQ-SA-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=1339; LD-SEQ-SA-NEXT:    ll.d $a5, $a0, 0340; LD-SEQ-SA-NEXT:    dbar 20341; LD-SEQ-SA-NEXT:    ld.d $a6, $a0, 8342; LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB6_3343; LD-SEQ-SA-NEXT:    bne $a6, $a2, .LBB6_3344; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB6_1 Depth=1345; LD-SEQ-SA-NEXT:    move $a7, $a3346; LD-SEQ-SA-NEXT:    sc.q $a7, $a4, $a0347; LD-SEQ-SA-NEXT:    beq $a7, $zero, .LBB6_1348; LD-SEQ-SA-NEXT:    b .LBB6_4349; LD-SEQ-SA-NEXT:  .LBB6_3:350; LD-SEQ-SA-NEXT:  .LBB6_4:351; LD-SEQ-SA-NEXT:    xor $a0, $a6, $a2352; LD-SEQ-SA-NEXT:    xor $a1, $a5, $a1353; LD-SEQ-SA-NEXT:    or $a0, $a1, $a0354; LD-SEQ-SA-NEXT:    sltui $a0, $a0, 1355; LD-SEQ-SA-NEXT:    ret356  %tmp = cmpxchg ptr %ptr, i128 %cmp, i128 %val monotonic monotonic357  %res = extractvalue { i128, i1 } %tmp, 1358  ret i1 %res359}360