brintos

brintos / llvm-project-archived public Read only

0
0
Text · 45.7 KiB · 8a75dcd Raw
1233 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch64 -mattr=+d,-ld-seq-sa < %s | FileCheck %s --check-prefixes=LA64,NO-LD-SEQ-SA3; RUN: llc --mtriple=loongarch64 -mattr=+d,+ld-seq-sa < %s | FileCheck %s --check-prefixes=LA64,LD-SEQ-SA4; RUN: llc --mtriple=loongarch64 -mattr=+d,+lamcas < %s | FileCheck %s --check-prefix=LA64-LAMCAS5 6define void @cmpxchg_i8_acquire_acquire(ptr %ptr, i8 %cmp, i8 %val) nounwind {7; LA64-LABEL: cmpxchg_i8_acquire_acquire:8; LA64:       # %bb.0:9; LA64-NEXT:    slli.d $a3, $a0, 310; LA64-NEXT:    bstrins.d $a0, $zero, 1, 011; LA64-NEXT:    ori $a4, $zero, 25512; LA64-NEXT:    sll.w $a4, $a4, $a313; LA64-NEXT:    andi $a1, $a1, 25514; LA64-NEXT:    sll.w $a1, $a1, $a315; LA64-NEXT:    andi $a2, $a2, 25516; LA64-NEXT:    sll.w $a2, $a2, $a317; LA64-NEXT:  .LBB0_1: # =>This Inner Loop Header: Depth=118; LA64-NEXT:    ll.w $a3, $a0, 019; LA64-NEXT:    and $a5, $a3, $a420; LA64-NEXT:    bne $a5, $a1, .LBB0_321; LA64-NEXT:  # %bb.2: # in Loop: Header=BB0_1 Depth=122; LA64-NEXT:    andn $a5, $a3, $a423; LA64-NEXT:    or $a5, $a5, $a224; LA64-NEXT:    sc.w $a5, $a0, 025; LA64-NEXT:    beq $a5, $zero, .LBB0_126; LA64-NEXT:    b .LBB0_427; LA64-NEXT:  .LBB0_3:28; LA64-NEXT:    dbar 2029; LA64-NEXT:  .LBB0_4:30; LA64-NEXT:    ret31;32; LA64-LAMCAS-LABEL: cmpxchg_i8_acquire_acquire:33; LA64-LAMCAS:       # %bb.0:34; LA64-LAMCAS-NEXT:    amcas_db.b $a1, $a2, $a035; LA64-LAMCAS-NEXT:    ret36  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val acquire acquire37  ret void38}39 40define void @cmpxchg_i16_acquire_acquire(ptr %ptr, i16 %cmp, i16 %val) nounwind {41; LA64-LABEL: cmpxchg_i16_acquire_acquire:42; LA64:       # %bb.0:43; LA64-NEXT:    slli.d $a3, $a0, 344; LA64-NEXT:    bstrins.d $a0, $zero, 1, 045; LA64-NEXT:    lu12i.w $a4, 1546; LA64-NEXT:    ori $a4, $a4, 409547; LA64-NEXT:    sll.w $a4, $a4, $a348; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 049; LA64-NEXT:    sll.w $a1, $a1, $a350; LA64-NEXT:    bstrpick.d $a2, $a2, 15, 051; LA64-NEXT:    sll.w $a2, $a2, $a352; LA64-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=153; LA64-NEXT:    ll.w $a3, $a0, 054; LA64-NEXT:    and $a5, $a3, $a455; LA64-NEXT:    bne $a5, $a1, .LBB1_356; LA64-NEXT:  # %bb.2: # in Loop: Header=BB1_1 Depth=157; LA64-NEXT:    andn $a5, $a3, $a458; LA64-NEXT:    or $a5, $a5, $a259; LA64-NEXT:    sc.w $a5, $a0, 060; LA64-NEXT:    beq $a5, $zero, .LBB1_161; LA64-NEXT:    b .LBB1_462; LA64-NEXT:  .LBB1_3:63; LA64-NEXT:    dbar 2064; LA64-NEXT:  .LBB1_4:65; LA64-NEXT:    ret66;67; LA64-LAMCAS-LABEL: cmpxchg_i16_acquire_acquire:68; LA64-LAMCAS:       # %bb.0:69; LA64-LAMCAS-NEXT:    amcas_db.h $a1, $a2, $a070; LA64-LAMCAS-NEXT:    ret71  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val acquire acquire72  ret void73}74 75define void @cmpxchg_i32_acquire_acquire(ptr %ptr, i32 %cmp, i32 %val) nounwind {76; LA64-LABEL: cmpxchg_i32_acquire_acquire:77; LA64:       # %bb.0:78; LA64-NEXT:    addi.w $a1, $a1, 079; LA64-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=180; LA64-NEXT:    ll.w $a3, $a0, 081; LA64-NEXT:    bne $a3, $a1, .LBB2_382; LA64-NEXT:  # %bb.2: # in Loop: Header=BB2_1 Depth=183; LA64-NEXT:    move $a4, $a284; LA64-NEXT:    sc.w $a4, $a0, 085; LA64-NEXT:    beq $a4, $zero, .LBB2_186; LA64-NEXT:    b .LBB2_487; LA64-NEXT:  .LBB2_3:88; LA64-NEXT:    dbar 2089; LA64-NEXT:  .LBB2_4:90; LA64-NEXT:    ret91;92; LA64-LAMCAS-LABEL: cmpxchg_i32_acquire_acquire:93; LA64-LAMCAS:       # %bb.0:94; LA64-LAMCAS-NEXT:    amcas_db.w $a1, $a2, $a095; LA64-LAMCAS-NEXT:    ret96  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val acquire acquire97  ret void98}99 100define void @cmpxchg_i64_acquire_acquire(ptr %ptr, i64 %cmp, i64 %val) nounwind {101; LA64-LABEL: cmpxchg_i64_acquire_acquire:102; LA64:       # %bb.0:103; LA64-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1104; LA64-NEXT:    ll.d $a3, $a0, 0105; LA64-NEXT:    bne $a3, $a1, .LBB3_3106; LA64-NEXT:  # %bb.2: # in Loop: Header=BB3_1 Depth=1107; LA64-NEXT:    move $a4, $a2108; LA64-NEXT:    sc.d $a4, $a0, 0109; LA64-NEXT:    beq $a4, $zero, .LBB3_1110; LA64-NEXT:    b .LBB3_4111; LA64-NEXT:  .LBB3_3:112; LA64-NEXT:    dbar 20113; LA64-NEXT:  .LBB3_4:114; LA64-NEXT:    ret115;116; LA64-LAMCAS-LABEL: cmpxchg_i64_acquire_acquire:117; LA64-LAMCAS:       # %bb.0:118; LA64-LAMCAS-NEXT:    amcas_db.d $a1, $a2, $a0119; LA64-LAMCAS-NEXT:    ret120  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val acquire acquire121  ret void122}123 124define void @cmpxchg_i8_acquire_monotonic(ptr %ptr, i8 %cmp, i8 %val) nounwind {125; NO-LD-SEQ-SA-LABEL: cmpxchg_i8_acquire_monotonic:126; NO-LD-SEQ-SA:       # %bb.0:127; NO-LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 3128; NO-LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 0129; NO-LD-SEQ-SA-NEXT:    ori $a4, $zero, 255130; NO-LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a3131; NO-LD-SEQ-SA-NEXT:    andi $a1, $a1, 255132; NO-LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a3133; NO-LD-SEQ-SA-NEXT:    andi $a2, $a2, 255134; NO-LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a3135; NO-LD-SEQ-SA-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1136; NO-LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 0137; NO-LD-SEQ-SA-NEXT:    and $a5, $a3, $a4138; NO-LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB4_3139; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB4_1 Depth=1140; NO-LD-SEQ-SA-NEXT:    andn $a5, $a3, $a4141; NO-LD-SEQ-SA-NEXT:    or $a5, $a5, $a2142; NO-LD-SEQ-SA-NEXT:    sc.w $a5, $a0, 0143; NO-LD-SEQ-SA-NEXT:    beq $a5, $zero, .LBB4_1144; NO-LD-SEQ-SA-NEXT:    b .LBB4_4145; NO-LD-SEQ-SA-NEXT:  .LBB4_3:146; NO-LD-SEQ-SA-NEXT:    dbar 1792147; NO-LD-SEQ-SA-NEXT:  .LBB4_4:148; NO-LD-SEQ-SA-NEXT:    ret149;150; LD-SEQ-SA-LABEL: cmpxchg_i8_acquire_monotonic:151; LD-SEQ-SA:       # %bb.0:152; LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 3153; LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 0154; LD-SEQ-SA-NEXT:    ori $a4, $zero, 255155; LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a3156; LD-SEQ-SA-NEXT:    andi $a1, $a1, 255157; LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a3158; LD-SEQ-SA-NEXT:    andi $a2, $a2, 255159; LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a3160; LD-SEQ-SA-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1161; LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 0162; LD-SEQ-SA-NEXT:    and $a5, $a3, $a4163; LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB4_3164; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB4_1 Depth=1165; LD-SEQ-SA-NEXT:    andn $a5, $a3, $a4166; LD-SEQ-SA-NEXT:    or $a5, $a5, $a2167; LD-SEQ-SA-NEXT:    sc.w $a5, $a0, 0168; LD-SEQ-SA-NEXT:    beq $a5, $zero, .LBB4_1169; LD-SEQ-SA-NEXT:    b .LBB4_4170; LD-SEQ-SA-NEXT:  .LBB4_3:171; LD-SEQ-SA-NEXT:  .LBB4_4:172; LD-SEQ-SA-NEXT:    ret173;174; LA64-LAMCAS-LABEL: cmpxchg_i8_acquire_monotonic:175; LA64-LAMCAS:       # %bb.0:176; LA64-LAMCAS-NEXT:    amcas_db.b $a1, $a2, $a0177; LA64-LAMCAS-NEXT:    ret178  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val acquire monotonic179  ret void180}181 182define void @cmpxchg_i16_acquire_monotonic(ptr %ptr, i16 %cmp, i16 %val) nounwind {183; NO-LD-SEQ-SA-LABEL: cmpxchg_i16_acquire_monotonic:184; NO-LD-SEQ-SA:       # %bb.0:185; NO-LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 3186; NO-LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 0187; NO-LD-SEQ-SA-NEXT:    lu12i.w $a4, 15188; NO-LD-SEQ-SA-NEXT:    ori $a4, $a4, 4095189; NO-LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a3190; NO-LD-SEQ-SA-NEXT:    bstrpick.d $a1, $a1, 15, 0191; NO-LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a3192; NO-LD-SEQ-SA-NEXT:    bstrpick.d $a2, $a2, 15, 0193; NO-LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a3194; NO-LD-SEQ-SA-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=1195; NO-LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 0196; NO-LD-SEQ-SA-NEXT:    and $a5, $a3, $a4197; NO-LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB5_3198; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB5_1 Depth=1199; NO-LD-SEQ-SA-NEXT:    andn $a5, $a3, $a4200; NO-LD-SEQ-SA-NEXT:    or $a5, $a5, $a2201; NO-LD-SEQ-SA-NEXT:    sc.w $a5, $a0, 0202; NO-LD-SEQ-SA-NEXT:    beq $a5, $zero, .LBB5_1203; NO-LD-SEQ-SA-NEXT:    b .LBB5_4204; NO-LD-SEQ-SA-NEXT:  .LBB5_3:205; NO-LD-SEQ-SA-NEXT:    dbar 1792206; NO-LD-SEQ-SA-NEXT:  .LBB5_4:207; NO-LD-SEQ-SA-NEXT:    ret208;209; LD-SEQ-SA-LABEL: cmpxchg_i16_acquire_monotonic:210; LD-SEQ-SA:       # %bb.0:211; LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 3212; LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 0213; LD-SEQ-SA-NEXT:    lu12i.w $a4, 15214; LD-SEQ-SA-NEXT:    ori $a4, $a4, 4095215; LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a3216; LD-SEQ-SA-NEXT:    bstrpick.d $a1, $a1, 15, 0217; LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a3218; LD-SEQ-SA-NEXT:    bstrpick.d $a2, $a2, 15, 0219; LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a3220; LD-SEQ-SA-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=1221; LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 0222; LD-SEQ-SA-NEXT:    and $a5, $a3, $a4223; LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB5_3224; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB5_1 Depth=1225; LD-SEQ-SA-NEXT:    andn $a5, $a3, $a4226; LD-SEQ-SA-NEXT:    or $a5, $a5, $a2227; LD-SEQ-SA-NEXT:    sc.w $a5, $a0, 0228; LD-SEQ-SA-NEXT:    beq $a5, $zero, .LBB5_1229; LD-SEQ-SA-NEXT:    b .LBB5_4230; LD-SEQ-SA-NEXT:  .LBB5_3:231; LD-SEQ-SA-NEXT:  .LBB5_4:232; LD-SEQ-SA-NEXT:    ret233;234; LA64-LAMCAS-LABEL: cmpxchg_i16_acquire_monotonic:235; LA64-LAMCAS:       # %bb.0:236; LA64-LAMCAS-NEXT:    amcas_db.h $a1, $a2, $a0237; LA64-LAMCAS-NEXT:    ret238  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val acquire monotonic239  ret void240}241 242define void @cmpxchg_i32_acquire_monotonic(ptr %ptr, i32 %cmp, i32 %val) nounwind {243; NO-LD-SEQ-SA-LABEL: cmpxchg_i32_acquire_monotonic:244; NO-LD-SEQ-SA:       # %bb.0:245; NO-LD-SEQ-SA-NEXT:    addi.w $a1, $a1, 0246; NO-LD-SEQ-SA-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=1247; NO-LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 0248; NO-LD-SEQ-SA-NEXT:    bne $a3, $a1, .LBB6_3249; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB6_1 Depth=1250; NO-LD-SEQ-SA-NEXT:    move $a4, $a2251; NO-LD-SEQ-SA-NEXT:    sc.w $a4, $a0, 0252; NO-LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB6_1253; NO-LD-SEQ-SA-NEXT:    b .LBB6_4254; NO-LD-SEQ-SA-NEXT:  .LBB6_3:255; NO-LD-SEQ-SA-NEXT:    dbar 1792256; NO-LD-SEQ-SA-NEXT:  .LBB6_4:257; NO-LD-SEQ-SA-NEXT:    ret258;259; LD-SEQ-SA-LABEL: cmpxchg_i32_acquire_monotonic:260; LD-SEQ-SA:       # %bb.0:261; LD-SEQ-SA-NEXT:    addi.w $a1, $a1, 0262; LD-SEQ-SA-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=1263; LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 0264; LD-SEQ-SA-NEXT:    bne $a3, $a1, .LBB6_3265; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB6_1 Depth=1266; LD-SEQ-SA-NEXT:    move $a4, $a2267; LD-SEQ-SA-NEXT:    sc.w $a4, $a0, 0268; LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB6_1269; LD-SEQ-SA-NEXT:    b .LBB6_4270; LD-SEQ-SA-NEXT:  .LBB6_3:271; LD-SEQ-SA-NEXT:  .LBB6_4:272; LD-SEQ-SA-NEXT:    ret273;274; LA64-LAMCAS-LABEL: cmpxchg_i32_acquire_monotonic:275; LA64-LAMCAS:       # %bb.0:276; LA64-LAMCAS-NEXT:    amcas_db.w $a1, $a2, $a0277; LA64-LAMCAS-NEXT:    ret278  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val acquire monotonic279  ret void280}281 282define void @cmpxchg_i64_acquire_monotonic(ptr %ptr, i64 %cmp, i64 %val) nounwind {283; NO-LD-SEQ-SA-LABEL: cmpxchg_i64_acquire_monotonic:284; NO-LD-SEQ-SA:       # %bb.0:285; NO-LD-SEQ-SA-NEXT:  .LBB7_1: # =>This Inner Loop Header: Depth=1286; NO-LD-SEQ-SA-NEXT:    ll.d $a3, $a0, 0287; NO-LD-SEQ-SA-NEXT:    bne $a3, $a1, .LBB7_3288; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB7_1 Depth=1289; NO-LD-SEQ-SA-NEXT:    move $a4, $a2290; NO-LD-SEQ-SA-NEXT:    sc.d $a4, $a0, 0291; NO-LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB7_1292; NO-LD-SEQ-SA-NEXT:    b .LBB7_4293; NO-LD-SEQ-SA-NEXT:  .LBB7_3:294; NO-LD-SEQ-SA-NEXT:    dbar 1792295; NO-LD-SEQ-SA-NEXT:  .LBB7_4:296; NO-LD-SEQ-SA-NEXT:    ret297;298; LD-SEQ-SA-LABEL: cmpxchg_i64_acquire_monotonic:299; LD-SEQ-SA:       # %bb.0:300; LD-SEQ-SA-NEXT:  .LBB7_1: # =>This Inner Loop Header: Depth=1301; LD-SEQ-SA-NEXT:    ll.d $a3, $a0, 0302; LD-SEQ-SA-NEXT:    bne $a3, $a1, .LBB7_3303; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB7_1 Depth=1304; LD-SEQ-SA-NEXT:    move $a4, $a2305; LD-SEQ-SA-NEXT:    sc.d $a4, $a0, 0306; LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB7_1307; LD-SEQ-SA-NEXT:    b .LBB7_4308; LD-SEQ-SA-NEXT:  .LBB7_3:309; LD-SEQ-SA-NEXT:  .LBB7_4:310; LD-SEQ-SA-NEXT:    ret311;312; LA64-LAMCAS-LABEL: cmpxchg_i64_acquire_monotonic:313; LA64-LAMCAS:       # %bb.0:314; LA64-LAMCAS-NEXT:    amcas_db.d $a1, $a2, $a0315; LA64-LAMCAS-NEXT:    ret316  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val acquire monotonic317  ret void318}319 320define i8 @cmpxchg_i8_acquire_acquire_reti8(ptr %ptr, i8 %cmp, i8 %val) nounwind {321; LA64-LABEL: cmpxchg_i8_acquire_acquire_reti8:322; LA64:       # %bb.0:323; LA64-NEXT:    slli.d $a3, $a0, 3324; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0325; LA64-NEXT:    ori $a4, $zero, 255326; LA64-NEXT:    sll.w $a4, $a4, $a3327; LA64-NEXT:    andi $a1, $a1, 255328; LA64-NEXT:    sll.w $a1, $a1, $a3329; LA64-NEXT:    andi $a2, $a2, 255330; LA64-NEXT:    sll.w $a2, $a2, $a3331; LA64-NEXT:  .LBB8_1: # =>This Inner Loop Header: Depth=1332; LA64-NEXT:    ll.w $a5, $a0, 0333; LA64-NEXT:    and $a6, $a5, $a4334; LA64-NEXT:    bne $a6, $a1, .LBB8_3335; LA64-NEXT:  # %bb.2: # in Loop: Header=BB8_1 Depth=1336; LA64-NEXT:    andn $a6, $a5, $a4337; LA64-NEXT:    or $a6, $a6, $a2338; LA64-NEXT:    sc.w $a6, $a0, 0339; LA64-NEXT:    beq $a6, $zero, .LBB8_1340; LA64-NEXT:    b .LBB8_4341; LA64-NEXT:  .LBB8_3:342; LA64-NEXT:    dbar 20343; LA64-NEXT:  .LBB8_4:344; LA64-NEXT:    srl.w $a0, $a5, $a3345; LA64-NEXT:    ret346;347; LA64-LAMCAS-LABEL: cmpxchg_i8_acquire_acquire_reti8:348; LA64-LAMCAS:       # %bb.0:349; LA64-LAMCAS-NEXT:    amcas_db.b $a1, $a2, $a0350; LA64-LAMCAS-NEXT:    move $a0, $a1351; LA64-LAMCAS-NEXT:    ret352  %tmp = cmpxchg ptr %ptr, i8 %cmp, i8 %val acquire acquire353  %res = extractvalue { i8, i1 } %tmp, 0354  ret i8 %res355}356 357define i16 @cmpxchg_i16_acquire_acquire_reti16(ptr %ptr, i16 %cmp, i16 %val) nounwind {358; LA64-LABEL: cmpxchg_i16_acquire_acquire_reti16:359; LA64:       # %bb.0:360; LA64-NEXT:    slli.d $a3, $a0, 3361; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0362; LA64-NEXT:    lu12i.w $a4, 15363; LA64-NEXT:    ori $a4, $a4, 4095364; LA64-NEXT:    sll.w $a4, $a4, $a3365; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 0366; LA64-NEXT:    sll.w $a1, $a1, $a3367; LA64-NEXT:    bstrpick.d $a2, $a2, 15, 0368; LA64-NEXT:    sll.w $a2, $a2, $a3369; LA64-NEXT:  .LBB9_1: # =>This Inner Loop Header: Depth=1370; LA64-NEXT:    ll.w $a5, $a0, 0371; LA64-NEXT:    and $a6, $a5, $a4372; LA64-NEXT:    bne $a6, $a1, .LBB9_3373; LA64-NEXT:  # %bb.2: # in Loop: Header=BB9_1 Depth=1374; LA64-NEXT:    andn $a6, $a5, $a4375; LA64-NEXT:    or $a6, $a6, $a2376; LA64-NEXT:    sc.w $a6, $a0, 0377; LA64-NEXT:    beq $a6, $zero, .LBB9_1378; LA64-NEXT:    b .LBB9_4379; LA64-NEXT:  .LBB9_3:380; LA64-NEXT:    dbar 20381; LA64-NEXT:  .LBB9_4:382; LA64-NEXT:    srl.w $a0, $a5, $a3383; LA64-NEXT:    ret384;385; LA64-LAMCAS-LABEL: cmpxchg_i16_acquire_acquire_reti16:386; LA64-LAMCAS:       # %bb.0:387; LA64-LAMCAS-NEXT:    amcas_db.h $a1, $a2, $a0388; LA64-LAMCAS-NEXT:    move $a0, $a1389; LA64-LAMCAS-NEXT:    ret390  %tmp = cmpxchg ptr %ptr, i16 %cmp, i16 %val acquire acquire391  %res = extractvalue { i16, i1 } %tmp, 0392  ret i16 %res393}394 395define i32 @cmpxchg_i32_acquire_acquire_reti32(ptr %ptr, i32 %cmp, i32 %val) nounwind {396; LA64-LABEL: cmpxchg_i32_acquire_acquire_reti32:397; LA64:       # %bb.0:398; LA64-NEXT:    addi.w $a3, $a1, 0399; LA64-NEXT:  .LBB10_1: # =>This Inner Loop Header: Depth=1400; LA64-NEXT:    ll.w $a1, $a0, 0401; LA64-NEXT:    bne $a1, $a3, .LBB10_3402; LA64-NEXT:  # %bb.2: # in Loop: Header=BB10_1 Depth=1403; LA64-NEXT:    move $a4, $a2404; LA64-NEXT:    sc.w $a4, $a0, 0405; LA64-NEXT:    beq $a4, $zero, .LBB10_1406; LA64-NEXT:    b .LBB10_4407; LA64-NEXT:  .LBB10_3:408; LA64-NEXT:    dbar 20409; LA64-NEXT:  .LBB10_4:410; LA64-NEXT:    move $a0, $a1411; LA64-NEXT:    ret412;413; LA64-LAMCAS-LABEL: cmpxchg_i32_acquire_acquire_reti32:414; LA64-LAMCAS:       # %bb.0:415; LA64-LAMCAS-NEXT:    amcas_db.w $a1, $a2, $a0416; LA64-LAMCAS-NEXT:    move $a0, $a1417; LA64-LAMCAS-NEXT:    ret418  %tmp = cmpxchg ptr %ptr, i32 %cmp, i32 %val acquire acquire419  %res = extractvalue { i32, i1 } %tmp, 0420  ret i32 %res421}422 423define i64 @cmpxchg_i64_acquire_acquire_reti64(ptr %ptr, i64 %cmp, i64 %val) nounwind {424; LA64-LABEL: cmpxchg_i64_acquire_acquire_reti64:425; LA64:       # %bb.0:426; LA64-NEXT:  .LBB11_1: # =>This Inner Loop Header: Depth=1427; LA64-NEXT:    ll.d $a3, $a0, 0428; LA64-NEXT:    bne $a3, $a1, .LBB11_3429; LA64-NEXT:  # %bb.2: # in Loop: Header=BB11_1 Depth=1430; LA64-NEXT:    move $a4, $a2431; LA64-NEXT:    sc.d $a4, $a0, 0432; LA64-NEXT:    beq $a4, $zero, .LBB11_1433; LA64-NEXT:    b .LBB11_4434; LA64-NEXT:  .LBB11_3:435; LA64-NEXT:    dbar 20436; LA64-NEXT:  .LBB11_4:437; LA64-NEXT:    move $a0, $a3438; LA64-NEXT:    ret439;440; LA64-LAMCAS-LABEL: cmpxchg_i64_acquire_acquire_reti64:441; LA64-LAMCAS:       # %bb.0:442; LA64-LAMCAS-NEXT:    amcas_db.d $a1, $a2, $a0443; LA64-LAMCAS-NEXT:    move $a0, $a1444; LA64-LAMCAS-NEXT:    ret445  %tmp = cmpxchg ptr %ptr, i64 %cmp, i64 %val acquire acquire446  %res = extractvalue { i64, i1 } %tmp, 0447  ret i64 %res448}449 450define i1 @cmpxchg_i8_acquire_acquire_reti1(ptr %ptr, i8 %cmp, i8 %val) nounwind {451; LA64-LABEL: cmpxchg_i8_acquire_acquire_reti1:452; LA64:       # %bb.0:453; LA64-NEXT:    slli.d $a3, $a0, 3454; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0455; LA64-NEXT:    ori $a4, $zero, 255456; LA64-NEXT:    sll.w $a4, $a4, $a3457; LA64-NEXT:    andi $a1, $a1, 255458; LA64-NEXT:    sll.w $a1, $a1, $a3459; LA64-NEXT:    andi $a2, $a2, 255460; LA64-NEXT:    sll.w $a2, $a2, $a3461; LA64-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=1462; LA64-NEXT:    ll.w $a3, $a0, 0463; LA64-NEXT:    and $a5, $a3, $a4464; LA64-NEXT:    bne $a5, $a1, .LBB12_3465; LA64-NEXT:  # %bb.2: # in Loop: Header=BB12_1 Depth=1466; LA64-NEXT:    andn $a5, $a3, $a4467; LA64-NEXT:    or $a5, $a5, $a2468; LA64-NEXT:    sc.w $a5, $a0, 0469; LA64-NEXT:    beq $a5, $zero, .LBB12_1470; LA64-NEXT:    b .LBB12_4471; LA64-NEXT:  .LBB12_3:472; LA64-NEXT:    dbar 20473; LA64-NEXT:  .LBB12_4:474; LA64-NEXT:    and $a0, $a3, $a4475; LA64-NEXT:    xor $a0, $a1, $a0476; LA64-NEXT:    sltui $a0, $a0, 1477; LA64-NEXT:    ret478;479; LA64-LAMCAS-LABEL: cmpxchg_i8_acquire_acquire_reti1:480; LA64-LAMCAS:       # %bb.0:481; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a1482; LA64-LAMCAS-NEXT:    amcas_db.b $a1, $a2, $a0483; LA64-LAMCAS-NEXT:    xor $a0, $a1, $a3484; LA64-LAMCAS-NEXT:    sltui $a0, $a0, 1485; LA64-LAMCAS-NEXT:    ret486  %tmp = cmpxchg ptr %ptr, i8 %cmp, i8 %val acquire acquire487  %res = extractvalue { i8, i1 } %tmp, 1488  ret i1 %res489}490 491define i1 @cmpxchg_i16_acquire_acquire_reti1(ptr %ptr, i16 %cmp, i16 %val) nounwind {492; LA64-LABEL: cmpxchg_i16_acquire_acquire_reti1:493; LA64:       # %bb.0:494; LA64-NEXT:    slli.d $a3, $a0, 3495; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0496; LA64-NEXT:    lu12i.w $a4, 15497; LA64-NEXT:    ori $a4, $a4, 4095498; LA64-NEXT:    sll.w $a4, $a4, $a3499; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 0500; LA64-NEXT:    sll.w $a1, $a1, $a3501; LA64-NEXT:    bstrpick.d $a2, $a2, 15, 0502; LA64-NEXT:    sll.w $a2, $a2, $a3503; LA64-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=1504; LA64-NEXT:    ll.w $a3, $a0, 0505; LA64-NEXT:    and $a5, $a3, $a4506; LA64-NEXT:    bne $a5, $a1, .LBB13_3507; LA64-NEXT:  # %bb.2: # in Loop: Header=BB13_1 Depth=1508; LA64-NEXT:    andn $a5, $a3, $a4509; LA64-NEXT:    or $a5, $a5, $a2510; LA64-NEXT:    sc.w $a5, $a0, 0511; LA64-NEXT:    beq $a5, $zero, .LBB13_1512; LA64-NEXT:    b .LBB13_4513; LA64-NEXT:  .LBB13_3:514; LA64-NEXT:    dbar 20515; LA64-NEXT:  .LBB13_4:516; LA64-NEXT:    and $a0, $a3, $a4517; LA64-NEXT:    xor $a0, $a1, $a0518; LA64-NEXT:    sltui $a0, $a0, 1519; LA64-NEXT:    ret520;521; LA64-LAMCAS-LABEL: cmpxchg_i16_acquire_acquire_reti1:522; LA64-LAMCAS:       # %bb.0:523; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a1524; LA64-LAMCAS-NEXT:    amcas_db.h $a1, $a2, $a0525; LA64-LAMCAS-NEXT:    xor $a0, $a1, $a3526; LA64-LAMCAS-NEXT:    sltui $a0, $a0, 1527; LA64-LAMCAS-NEXT:    ret528  %tmp = cmpxchg ptr %ptr, i16 %cmp, i16 %val acquire acquire529  %res = extractvalue { i16, i1 } %tmp, 1530  ret i1 %res531}532 533define i1 @cmpxchg_i32_acquire_acquire_reti1(ptr %ptr, i32 %cmp, i32 %val) nounwind {534; LA64-LABEL: cmpxchg_i32_acquire_acquire_reti1:535; LA64:       # %bb.0:536; LA64-NEXT:    addi.w $a1, $a1, 0537; LA64-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=1538; LA64-NEXT:    ll.w $a3, $a0, 0539; LA64-NEXT:    bne $a3, $a1, .LBB14_3540; LA64-NEXT:  # %bb.2: # in Loop: Header=BB14_1 Depth=1541; LA64-NEXT:    move $a4, $a2542; LA64-NEXT:    sc.w $a4, $a0, 0543; LA64-NEXT:    beq $a4, $zero, .LBB14_1544; LA64-NEXT:    b .LBB14_4545; LA64-NEXT:  .LBB14_3:546; LA64-NEXT:    dbar 20547; LA64-NEXT:  .LBB14_4:548; LA64-NEXT:    xor $a0, $a3, $a1549; LA64-NEXT:    sltui $a0, $a0, 1550; LA64-NEXT:    ret551;552; LA64-LAMCAS-LABEL: cmpxchg_i32_acquire_acquire_reti1:553; LA64-LAMCAS:       # %bb.0:554; LA64-LAMCAS-NEXT:    addi.w $a3, $a1, 0555; LA64-LAMCAS-NEXT:    amcas_db.w $a1, $a2, $a0556; LA64-LAMCAS-NEXT:    xor $a0, $a1, $a3557; LA64-LAMCAS-NEXT:    sltui $a0, $a0, 1558; LA64-LAMCAS-NEXT:    ret559  %tmp = cmpxchg ptr %ptr, i32 %cmp, i32 %val acquire acquire560  %res = extractvalue { i32, i1 } %tmp, 1561  ret i1 %res562}563 564define i1 @cmpxchg_i64_acquire_acquire_reti1(ptr %ptr, i64 %cmp, i64 %val) nounwind {565; LA64-LABEL: cmpxchg_i64_acquire_acquire_reti1:566; LA64:       # %bb.0:567; LA64-NEXT:  .LBB15_1: # =>This Inner Loop Header: Depth=1568; LA64-NEXT:    ll.d $a3, $a0, 0569; LA64-NEXT:    bne $a3, $a1, .LBB15_3570; LA64-NEXT:  # %bb.2: # in Loop: Header=BB15_1 Depth=1571; LA64-NEXT:    move $a4, $a2572; LA64-NEXT:    sc.d $a4, $a0, 0573; LA64-NEXT:    beq $a4, $zero, .LBB15_1574; LA64-NEXT:    b .LBB15_4575; LA64-NEXT:  .LBB15_3:576; LA64-NEXT:    dbar 20577; LA64-NEXT:  .LBB15_4:578; LA64-NEXT:    xor $a0, $a3, $a1579; LA64-NEXT:    sltui $a0, $a0, 1580; LA64-NEXT:    ret581;582; LA64-LAMCAS-LABEL: cmpxchg_i64_acquire_acquire_reti1:583; LA64-LAMCAS:       # %bb.0:584; LA64-LAMCAS-NEXT:    move $a3, $a1585; LA64-LAMCAS-NEXT:    amcas_db.d $a3, $a2, $a0586; LA64-LAMCAS-NEXT:    xor $a0, $a3, $a1587; LA64-LAMCAS-NEXT:    sltui $a0, $a0, 1588; LA64-LAMCAS-NEXT:    ret589  %tmp = cmpxchg ptr %ptr, i64 %cmp, i64 %val acquire acquire590  %res = extractvalue { i64, i1 } %tmp, 1591  ret i1 %res592}593 594define void @cmpxchg_i8_monotonic_monotonic(ptr %ptr, i8 %cmp, i8 %val) nounwind {595; NO-LD-SEQ-SA-LABEL: cmpxchg_i8_monotonic_monotonic:596; NO-LD-SEQ-SA:       # %bb.0:597; NO-LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 3598; NO-LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 0599; NO-LD-SEQ-SA-NEXT:    ori $a4, $zero, 255600; NO-LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a3601; NO-LD-SEQ-SA-NEXT:    andi $a1, $a1, 255602; NO-LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a3603; NO-LD-SEQ-SA-NEXT:    andi $a2, $a2, 255604; NO-LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a3605; NO-LD-SEQ-SA-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=1606; NO-LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 0607; NO-LD-SEQ-SA-NEXT:    and $a5, $a3, $a4608; NO-LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB16_3609; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB16_1 Depth=1610; NO-LD-SEQ-SA-NEXT:    andn $a5, $a3, $a4611; NO-LD-SEQ-SA-NEXT:    or $a5, $a5, $a2612; NO-LD-SEQ-SA-NEXT:    sc.w $a5, $a0, 0613; NO-LD-SEQ-SA-NEXT:    beq $a5, $zero, .LBB16_1614; NO-LD-SEQ-SA-NEXT:    b .LBB16_4615; NO-LD-SEQ-SA-NEXT:  .LBB16_3:616; NO-LD-SEQ-SA-NEXT:    dbar 1792617; NO-LD-SEQ-SA-NEXT:  .LBB16_4:618; NO-LD-SEQ-SA-NEXT:    ret619;620; LD-SEQ-SA-LABEL: cmpxchg_i8_monotonic_monotonic:621; LD-SEQ-SA:       # %bb.0:622; LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 3623; LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 0624; LD-SEQ-SA-NEXT:    ori $a4, $zero, 255625; LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a3626; LD-SEQ-SA-NEXT:    andi $a1, $a1, 255627; LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a3628; LD-SEQ-SA-NEXT:    andi $a2, $a2, 255629; LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a3630; LD-SEQ-SA-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=1631; LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 0632; LD-SEQ-SA-NEXT:    and $a5, $a3, $a4633; LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB16_3634; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB16_1 Depth=1635; LD-SEQ-SA-NEXT:    andn $a5, $a3, $a4636; LD-SEQ-SA-NEXT:    or $a5, $a5, $a2637; LD-SEQ-SA-NEXT:    sc.w $a5, $a0, 0638; LD-SEQ-SA-NEXT:    beq $a5, $zero, .LBB16_1639; LD-SEQ-SA-NEXT:    b .LBB16_4640; LD-SEQ-SA-NEXT:  .LBB16_3:641; LD-SEQ-SA-NEXT:  .LBB16_4:642; LD-SEQ-SA-NEXT:    ret643;644; LA64-LAMCAS-LABEL: cmpxchg_i8_monotonic_monotonic:645; LA64-LAMCAS:       # %bb.0:646; LA64-LAMCAS-NEXT:    amcas.b $a1, $a2, $a0647; LA64-LAMCAS-NEXT:    ret648  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val monotonic monotonic649  ret void650}651 652define void @cmpxchg_i16_monotonic_monotonic(ptr %ptr, i16 %cmp, i16 %val) nounwind {653; NO-LD-SEQ-SA-LABEL: cmpxchg_i16_monotonic_monotonic:654; NO-LD-SEQ-SA:       # %bb.0:655; NO-LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 3656; NO-LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 0657; NO-LD-SEQ-SA-NEXT:    lu12i.w $a4, 15658; NO-LD-SEQ-SA-NEXT:    ori $a4, $a4, 4095659; NO-LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a3660; NO-LD-SEQ-SA-NEXT:    bstrpick.d $a1, $a1, 15, 0661; NO-LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a3662; NO-LD-SEQ-SA-NEXT:    bstrpick.d $a2, $a2, 15, 0663; NO-LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a3664; NO-LD-SEQ-SA-NEXT:  .LBB17_1: # =>This Inner Loop Header: Depth=1665; NO-LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 0666; NO-LD-SEQ-SA-NEXT:    and $a5, $a3, $a4667; NO-LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB17_3668; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB17_1 Depth=1669; NO-LD-SEQ-SA-NEXT:    andn $a5, $a3, $a4670; NO-LD-SEQ-SA-NEXT:    or $a5, $a5, $a2671; NO-LD-SEQ-SA-NEXT:    sc.w $a5, $a0, 0672; NO-LD-SEQ-SA-NEXT:    beq $a5, $zero, .LBB17_1673; NO-LD-SEQ-SA-NEXT:    b .LBB17_4674; NO-LD-SEQ-SA-NEXT:  .LBB17_3:675; NO-LD-SEQ-SA-NEXT:    dbar 1792676; NO-LD-SEQ-SA-NEXT:  .LBB17_4:677; NO-LD-SEQ-SA-NEXT:    ret678;679; LD-SEQ-SA-LABEL: cmpxchg_i16_monotonic_monotonic:680; LD-SEQ-SA:       # %bb.0:681; LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 3682; LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 0683; LD-SEQ-SA-NEXT:    lu12i.w $a4, 15684; LD-SEQ-SA-NEXT:    ori $a4, $a4, 4095685; LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a3686; LD-SEQ-SA-NEXT:    bstrpick.d $a1, $a1, 15, 0687; LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a3688; LD-SEQ-SA-NEXT:    bstrpick.d $a2, $a2, 15, 0689; LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a3690; LD-SEQ-SA-NEXT:  .LBB17_1: # =>This Inner Loop Header: Depth=1691; LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 0692; LD-SEQ-SA-NEXT:    and $a5, $a3, $a4693; LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB17_3694; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB17_1 Depth=1695; LD-SEQ-SA-NEXT:    andn $a5, $a3, $a4696; LD-SEQ-SA-NEXT:    or $a5, $a5, $a2697; LD-SEQ-SA-NEXT:    sc.w $a5, $a0, 0698; LD-SEQ-SA-NEXT:    beq $a5, $zero, .LBB17_1699; LD-SEQ-SA-NEXT:    b .LBB17_4700; LD-SEQ-SA-NEXT:  .LBB17_3:701; LD-SEQ-SA-NEXT:  .LBB17_4:702; LD-SEQ-SA-NEXT:    ret703;704; LA64-LAMCAS-LABEL: cmpxchg_i16_monotonic_monotonic:705; LA64-LAMCAS:       # %bb.0:706; LA64-LAMCAS-NEXT:    amcas.h $a1, $a2, $a0707; LA64-LAMCAS-NEXT:    ret708  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val monotonic monotonic709  ret void710}711 712define void @cmpxchg_i32_monotonic_monotonic(ptr %ptr, i32 %cmp, i32 %val) nounwind {713; NO-LD-SEQ-SA-LABEL: cmpxchg_i32_monotonic_monotonic:714; NO-LD-SEQ-SA:       # %bb.0:715; NO-LD-SEQ-SA-NEXT:    addi.w $a1, $a1, 0716; NO-LD-SEQ-SA-NEXT:  .LBB18_1: # =>This Inner Loop Header: Depth=1717; NO-LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 0718; NO-LD-SEQ-SA-NEXT:    bne $a3, $a1, .LBB18_3719; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB18_1 Depth=1720; NO-LD-SEQ-SA-NEXT:    move $a4, $a2721; NO-LD-SEQ-SA-NEXT:    sc.w $a4, $a0, 0722; NO-LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB18_1723; NO-LD-SEQ-SA-NEXT:    b .LBB18_4724; NO-LD-SEQ-SA-NEXT:  .LBB18_3:725; NO-LD-SEQ-SA-NEXT:    dbar 1792726; NO-LD-SEQ-SA-NEXT:  .LBB18_4:727; NO-LD-SEQ-SA-NEXT:    ret728;729; LD-SEQ-SA-LABEL: cmpxchg_i32_monotonic_monotonic:730; LD-SEQ-SA:       # %bb.0:731; LD-SEQ-SA-NEXT:    addi.w $a1, $a1, 0732; LD-SEQ-SA-NEXT:  .LBB18_1: # =>This Inner Loop Header: Depth=1733; LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 0734; LD-SEQ-SA-NEXT:    bne $a3, $a1, .LBB18_3735; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB18_1 Depth=1736; LD-SEQ-SA-NEXT:    move $a4, $a2737; LD-SEQ-SA-NEXT:    sc.w $a4, $a0, 0738; LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB18_1739; LD-SEQ-SA-NEXT:    b .LBB18_4740; LD-SEQ-SA-NEXT:  .LBB18_3:741; LD-SEQ-SA-NEXT:  .LBB18_4:742; LD-SEQ-SA-NEXT:    ret743;744; LA64-LAMCAS-LABEL: cmpxchg_i32_monotonic_monotonic:745; LA64-LAMCAS:       # %bb.0:746; LA64-LAMCAS-NEXT:    amcas.w $a1, $a2, $a0747; LA64-LAMCAS-NEXT:    ret748  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val monotonic monotonic749  ret void750}751 752define void @cmpxchg_i64_monotonic_monotonic(ptr %ptr, i64 %cmp, i64 %val) nounwind {753; NO-LD-SEQ-SA-LABEL: cmpxchg_i64_monotonic_monotonic:754; NO-LD-SEQ-SA:       # %bb.0:755; NO-LD-SEQ-SA-NEXT:  .LBB19_1: # =>This Inner Loop Header: Depth=1756; NO-LD-SEQ-SA-NEXT:    ll.d $a3, $a0, 0757; NO-LD-SEQ-SA-NEXT:    bne $a3, $a1, .LBB19_3758; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB19_1 Depth=1759; NO-LD-SEQ-SA-NEXT:    move $a4, $a2760; NO-LD-SEQ-SA-NEXT:    sc.d $a4, $a0, 0761; NO-LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB19_1762; NO-LD-SEQ-SA-NEXT:    b .LBB19_4763; NO-LD-SEQ-SA-NEXT:  .LBB19_3:764; NO-LD-SEQ-SA-NEXT:    dbar 1792765; NO-LD-SEQ-SA-NEXT:  .LBB19_4:766; NO-LD-SEQ-SA-NEXT:    ret767;768; LD-SEQ-SA-LABEL: cmpxchg_i64_monotonic_monotonic:769; LD-SEQ-SA:       # %bb.0:770; LD-SEQ-SA-NEXT:  .LBB19_1: # =>This Inner Loop Header: Depth=1771; LD-SEQ-SA-NEXT:    ll.d $a3, $a0, 0772; LD-SEQ-SA-NEXT:    bne $a3, $a1, .LBB19_3773; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB19_1 Depth=1774; LD-SEQ-SA-NEXT:    move $a4, $a2775; LD-SEQ-SA-NEXT:    sc.d $a4, $a0, 0776; LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB19_1777; LD-SEQ-SA-NEXT:    b .LBB19_4778; LD-SEQ-SA-NEXT:  .LBB19_3:779; LD-SEQ-SA-NEXT:  .LBB19_4:780; LD-SEQ-SA-NEXT:    ret781;782; LA64-LAMCAS-LABEL: cmpxchg_i64_monotonic_monotonic:783; LA64-LAMCAS:       # %bb.0:784; LA64-LAMCAS-NEXT:    amcas.d $a1, $a2, $a0785; LA64-LAMCAS-NEXT:    ret786  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val monotonic monotonic787  ret void788}789 790define i8 @cmpxchg_i8_monotonic_monotonic_reti8(ptr %ptr, i8 %cmp, i8 %val) nounwind {791; NO-LD-SEQ-SA-LABEL: cmpxchg_i8_monotonic_monotonic_reti8:792; NO-LD-SEQ-SA:       # %bb.0:793; NO-LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 3794; NO-LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 0795; NO-LD-SEQ-SA-NEXT:    ori $a4, $zero, 255796; NO-LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a3797; NO-LD-SEQ-SA-NEXT:    andi $a1, $a1, 255798; NO-LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a3799; NO-LD-SEQ-SA-NEXT:    andi $a2, $a2, 255800; NO-LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a3801; NO-LD-SEQ-SA-NEXT:  .LBB20_1: # =>This Inner Loop Header: Depth=1802; NO-LD-SEQ-SA-NEXT:    ll.w $a5, $a0, 0803; NO-LD-SEQ-SA-NEXT:    and $a6, $a5, $a4804; NO-LD-SEQ-SA-NEXT:    bne $a6, $a1, .LBB20_3805; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB20_1 Depth=1806; NO-LD-SEQ-SA-NEXT:    andn $a6, $a5, $a4807; NO-LD-SEQ-SA-NEXT:    or $a6, $a6, $a2808; NO-LD-SEQ-SA-NEXT:    sc.w $a6, $a0, 0809; NO-LD-SEQ-SA-NEXT:    beq $a6, $zero, .LBB20_1810; NO-LD-SEQ-SA-NEXT:    b .LBB20_4811; NO-LD-SEQ-SA-NEXT:  .LBB20_3:812; NO-LD-SEQ-SA-NEXT:    dbar 1792813; NO-LD-SEQ-SA-NEXT:  .LBB20_4:814; NO-LD-SEQ-SA-NEXT:    srl.w $a0, $a5, $a3815; NO-LD-SEQ-SA-NEXT:    ret816;817; LD-SEQ-SA-LABEL: cmpxchg_i8_monotonic_monotonic_reti8:818; LD-SEQ-SA:       # %bb.0:819; LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 3820; LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 0821; LD-SEQ-SA-NEXT:    ori $a4, $zero, 255822; LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a3823; LD-SEQ-SA-NEXT:    andi $a1, $a1, 255824; LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a3825; LD-SEQ-SA-NEXT:    andi $a2, $a2, 255826; LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a3827; LD-SEQ-SA-NEXT:  .LBB20_1: # =>This Inner Loop Header: Depth=1828; LD-SEQ-SA-NEXT:    ll.w $a5, $a0, 0829; LD-SEQ-SA-NEXT:    and $a6, $a5, $a4830; LD-SEQ-SA-NEXT:    bne $a6, $a1, .LBB20_3831; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB20_1 Depth=1832; LD-SEQ-SA-NEXT:    andn $a6, $a5, $a4833; LD-SEQ-SA-NEXT:    or $a6, $a6, $a2834; LD-SEQ-SA-NEXT:    sc.w $a6, $a0, 0835; LD-SEQ-SA-NEXT:    beq $a6, $zero, .LBB20_1836; LD-SEQ-SA-NEXT:    b .LBB20_4837; LD-SEQ-SA-NEXT:  .LBB20_3:838; LD-SEQ-SA-NEXT:  .LBB20_4:839; LD-SEQ-SA-NEXT:    srl.w $a0, $a5, $a3840; LD-SEQ-SA-NEXT:    ret841;842; LA64-LAMCAS-LABEL: cmpxchg_i8_monotonic_monotonic_reti8:843; LA64-LAMCAS:       # %bb.0:844; LA64-LAMCAS-NEXT:    amcas.b $a1, $a2, $a0845; LA64-LAMCAS-NEXT:    move $a0, $a1846; LA64-LAMCAS-NEXT:    ret847  %tmp = cmpxchg ptr %ptr, i8 %cmp, i8 %val monotonic monotonic848  %res = extractvalue { i8, i1 } %tmp, 0849  ret i8 %res850}851 852define i16 @cmpxchg_i16_monotonic_monotonic_reti16(ptr %ptr, i16 %cmp, i16 %val) nounwind {853; NO-LD-SEQ-SA-LABEL: cmpxchg_i16_monotonic_monotonic_reti16:854; NO-LD-SEQ-SA:       # %bb.0:855; NO-LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 3856; NO-LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 0857; NO-LD-SEQ-SA-NEXT:    lu12i.w $a4, 15858; NO-LD-SEQ-SA-NEXT:    ori $a4, $a4, 4095859; NO-LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a3860; NO-LD-SEQ-SA-NEXT:    bstrpick.d $a1, $a1, 15, 0861; NO-LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a3862; NO-LD-SEQ-SA-NEXT:    bstrpick.d $a2, $a2, 15, 0863; NO-LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a3864; NO-LD-SEQ-SA-NEXT:  .LBB21_1: # =>This Inner Loop Header: Depth=1865; NO-LD-SEQ-SA-NEXT:    ll.w $a5, $a0, 0866; NO-LD-SEQ-SA-NEXT:    and $a6, $a5, $a4867; NO-LD-SEQ-SA-NEXT:    bne $a6, $a1, .LBB21_3868; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB21_1 Depth=1869; NO-LD-SEQ-SA-NEXT:    andn $a6, $a5, $a4870; NO-LD-SEQ-SA-NEXT:    or $a6, $a6, $a2871; NO-LD-SEQ-SA-NEXT:    sc.w $a6, $a0, 0872; NO-LD-SEQ-SA-NEXT:    beq $a6, $zero, .LBB21_1873; NO-LD-SEQ-SA-NEXT:    b .LBB21_4874; NO-LD-SEQ-SA-NEXT:  .LBB21_3:875; NO-LD-SEQ-SA-NEXT:    dbar 1792876; NO-LD-SEQ-SA-NEXT:  .LBB21_4:877; NO-LD-SEQ-SA-NEXT:    srl.w $a0, $a5, $a3878; NO-LD-SEQ-SA-NEXT:    ret879;880; LD-SEQ-SA-LABEL: cmpxchg_i16_monotonic_monotonic_reti16:881; LD-SEQ-SA:       # %bb.0:882; LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 3883; LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 0884; LD-SEQ-SA-NEXT:    lu12i.w $a4, 15885; LD-SEQ-SA-NEXT:    ori $a4, $a4, 4095886; LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a3887; LD-SEQ-SA-NEXT:    bstrpick.d $a1, $a1, 15, 0888; LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a3889; LD-SEQ-SA-NEXT:    bstrpick.d $a2, $a2, 15, 0890; LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a3891; LD-SEQ-SA-NEXT:  .LBB21_1: # =>This Inner Loop Header: Depth=1892; LD-SEQ-SA-NEXT:    ll.w $a5, $a0, 0893; LD-SEQ-SA-NEXT:    and $a6, $a5, $a4894; LD-SEQ-SA-NEXT:    bne $a6, $a1, .LBB21_3895; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB21_1 Depth=1896; LD-SEQ-SA-NEXT:    andn $a6, $a5, $a4897; LD-SEQ-SA-NEXT:    or $a6, $a6, $a2898; LD-SEQ-SA-NEXT:    sc.w $a6, $a0, 0899; LD-SEQ-SA-NEXT:    beq $a6, $zero, .LBB21_1900; LD-SEQ-SA-NEXT:    b .LBB21_4901; LD-SEQ-SA-NEXT:  .LBB21_3:902; LD-SEQ-SA-NEXT:  .LBB21_4:903; LD-SEQ-SA-NEXT:    srl.w $a0, $a5, $a3904; LD-SEQ-SA-NEXT:    ret905;906; LA64-LAMCAS-LABEL: cmpxchg_i16_monotonic_monotonic_reti16:907; LA64-LAMCAS:       # %bb.0:908; LA64-LAMCAS-NEXT:    amcas.h $a1, $a2, $a0909; LA64-LAMCAS-NEXT:    move $a0, $a1910; LA64-LAMCAS-NEXT:    ret911  %tmp = cmpxchg ptr %ptr, i16 %cmp, i16 %val monotonic monotonic912  %res = extractvalue { i16, i1 } %tmp, 0913  ret i16 %res914}915 916define i32 @cmpxchg_i32_monotonic_monotonic_reti32(ptr %ptr, i32 %cmp, i32 %val) nounwind {917; NO-LD-SEQ-SA-LABEL: cmpxchg_i32_monotonic_monotonic_reti32:918; NO-LD-SEQ-SA:       # %bb.0:919; NO-LD-SEQ-SA-NEXT:    addi.w $a3, $a1, 0920; NO-LD-SEQ-SA-NEXT:  .LBB22_1: # =>This Inner Loop Header: Depth=1921; NO-LD-SEQ-SA-NEXT:    ll.w $a1, $a0, 0922; NO-LD-SEQ-SA-NEXT:    bne $a1, $a3, .LBB22_3923; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB22_1 Depth=1924; NO-LD-SEQ-SA-NEXT:    move $a4, $a2925; NO-LD-SEQ-SA-NEXT:    sc.w $a4, $a0, 0926; NO-LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB22_1927; NO-LD-SEQ-SA-NEXT:    b .LBB22_4928; NO-LD-SEQ-SA-NEXT:  .LBB22_3:929; NO-LD-SEQ-SA-NEXT:    dbar 1792930; NO-LD-SEQ-SA-NEXT:  .LBB22_4:931; NO-LD-SEQ-SA-NEXT:    move $a0, $a1932; NO-LD-SEQ-SA-NEXT:    ret933;934; LD-SEQ-SA-LABEL: cmpxchg_i32_monotonic_monotonic_reti32:935; LD-SEQ-SA:       # %bb.0:936; LD-SEQ-SA-NEXT:    addi.w $a3, $a1, 0937; LD-SEQ-SA-NEXT:  .LBB22_1: # =>This Inner Loop Header: Depth=1938; LD-SEQ-SA-NEXT:    ll.w $a1, $a0, 0939; LD-SEQ-SA-NEXT:    bne $a1, $a3, .LBB22_3940; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB22_1 Depth=1941; LD-SEQ-SA-NEXT:    move $a4, $a2942; LD-SEQ-SA-NEXT:    sc.w $a4, $a0, 0943; LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB22_1944; LD-SEQ-SA-NEXT:    b .LBB22_4945; LD-SEQ-SA-NEXT:  .LBB22_3:946; LD-SEQ-SA-NEXT:  .LBB22_4:947; LD-SEQ-SA-NEXT:    move $a0, $a1948; LD-SEQ-SA-NEXT:    ret949;950; LA64-LAMCAS-LABEL: cmpxchg_i32_monotonic_monotonic_reti32:951; LA64-LAMCAS:       # %bb.0:952; LA64-LAMCAS-NEXT:    amcas.w $a1, $a2, $a0953; LA64-LAMCAS-NEXT:    move $a0, $a1954; LA64-LAMCAS-NEXT:    ret955  %tmp = cmpxchg ptr %ptr, i32 %cmp, i32 %val monotonic monotonic956  %res = extractvalue { i32, i1 } %tmp, 0957  ret i32 %res958}959 960define i64 @cmpxchg_i64_monotonic_monotonic_reti64(ptr %ptr, i64 %cmp, i64 %val) nounwind {961; NO-LD-SEQ-SA-LABEL: cmpxchg_i64_monotonic_monotonic_reti64:962; NO-LD-SEQ-SA:       # %bb.0:963; NO-LD-SEQ-SA-NEXT:  .LBB23_1: # =>This Inner Loop Header: Depth=1964; NO-LD-SEQ-SA-NEXT:    ll.d $a3, $a0, 0965; NO-LD-SEQ-SA-NEXT:    bne $a3, $a1, .LBB23_3966; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB23_1 Depth=1967; NO-LD-SEQ-SA-NEXT:    move $a4, $a2968; NO-LD-SEQ-SA-NEXT:    sc.d $a4, $a0, 0969; NO-LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB23_1970; NO-LD-SEQ-SA-NEXT:    b .LBB23_4971; NO-LD-SEQ-SA-NEXT:  .LBB23_3:972; NO-LD-SEQ-SA-NEXT:    dbar 1792973; NO-LD-SEQ-SA-NEXT:  .LBB23_4:974; NO-LD-SEQ-SA-NEXT:    move $a0, $a3975; NO-LD-SEQ-SA-NEXT:    ret976;977; LD-SEQ-SA-LABEL: cmpxchg_i64_monotonic_monotonic_reti64:978; LD-SEQ-SA:       # %bb.0:979; LD-SEQ-SA-NEXT:  .LBB23_1: # =>This Inner Loop Header: Depth=1980; LD-SEQ-SA-NEXT:    ll.d $a3, $a0, 0981; LD-SEQ-SA-NEXT:    bne $a3, $a1, .LBB23_3982; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB23_1 Depth=1983; LD-SEQ-SA-NEXT:    move $a4, $a2984; LD-SEQ-SA-NEXT:    sc.d $a4, $a0, 0985; LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB23_1986; LD-SEQ-SA-NEXT:    b .LBB23_4987; LD-SEQ-SA-NEXT:  .LBB23_3:988; LD-SEQ-SA-NEXT:  .LBB23_4:989; LD-SEQ-SA-NEXT:    move $a0, $a3990; LD-SEQ-SA-NEXT:    ret991;992; LA64-LAMCAS-LABEL: cmpxchg_i64_monotonic_monotonic_reti64:993; LA64-LAMCAS:       # %bb.0:994; LA64-LAMCAS-NEXT:    amcas.d $a1, $a2, $a0995; LA64-LAMCAS-NEXT:    move $a0, $a1996; LA64-LAMCAS-NEXT:    ret997  %tmp = cmpxchg ptr %ptr, i64 %cmp, i64 %val monotonic monotonic998  %res = extractvalue { i64, i1 } %tmp, 0999  ret i64 %res1000}1001 1002define i1 @cmpxchg_i8_monotonic_monotonic_reti1(ptr %ptr, i8 %cmp, i8 %val) nounwind {1003; NO-LD-SEQ-SA-LABEL: cmpxchg_i8_monotonic_monotonic_reti1:1004; NO-LD-SEQ-SA:       # %bb.0:1005; NO-LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 31006; NO-LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 01007; NO-LD-SEQ-SA-NEXT:    ori $a4, $zero, 2551008; NO-LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a31009; NO-LD-SEQ-SA-NEXT:    andi $a1, $a1, 2551010; NO-LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a31011; NO-LD-SEQ-SA-NEXT:    andi $a2, $a2, 2551012; NO-LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a31013; NO-LD-SEQ-SA-NEXT:  .LBB24_1: # =>This Inner Loop Header: Depth=11014; NO-LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 01015; NO-LD-SEQ-SA-NEXT:    and $a5, $a3, $a41016; NO-LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB24_31017; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB24_1 Depth=11018; NO-LD-SEQ-SA-NEXT:    andn $a5, $a3, $a41019; NO-LD-SEQ-SA-NEXT:    or $a5, $a5, $a21020; NO-LD-SEQ-SA-NEXT:    sc.w $a5, $a0, 01021; NO-LD-SEQ-SA-NEXT:    beq $a5, $zero, .LBB24_11022; NO-LD-SEQ-SA-NEXT:    b .LBB24_41023; NO-LD-SEQ-SA-NEXT:  .LBB24_3:1024; NO-LD-SEQ-SA-NEXT:    dbar 17921025; NO-LD-SEQ-SA-NEXT:  .LBB24_4:1026; NO-LD-SEQ-SA-NEXT:    and $a0, $a3, $a41027; NO-LD-SEQ-SA-NEXT:    xor $a0, $a1, $a01028; NO-LD-SEQ-SA-NEXT:    sltui $a0, $a0, 11029; NO-LD-SEQ-SA-NEXT:    ret1030;1031; LD-SEQ-SA-LABEL: cmpxchg_i8_monotonic_monotonic_reti1:1032; LD-SEQ-SA:       # %bb.0:1033; LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 31034; LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 01035; LD-SEQ-SA-NEXT:    ori $a4, $zero, 2551036; LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a31037; LD-SEQ-SA-NEXT:    andi $a1, $a1, 2551038; LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a31039; LD-SEQ-SA-NEXT:    andi $a2, $a2, 2551040; LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a31041; LD-SEQ-SA-NEXT:  .LBB24_1: # =>This Inner Loop Header: Depth=11042; LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 01043; LD-SEQ-SA-NEXT:    and $a5, $a3, $a41044; LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB24_31045; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB24_1 Depth=11046; LD-SEQ-SA-NEXT:    andn $a5, $a3, $a41047; LD-SEQ-SA-NEXT:    or $a5, $a5, $a21048; LD-SEQ-SA-NEXT:    sc.w $a5, $a0, 01049; LD-SEQ-SA-NEXT:    beq $a5, $zero, .LBB24_11050; LD-SEQ-SA-NEXT:    b .LBB24_41051; LD-SEQ-SA-NEXT:  .LBB24_3:1052; LD-SEQ-SA-NEXT:  .LBB24_4:1053; LD-SEQ-SA-NEXT:    and $a0, $a3, $a41054; LD-SEQ-SA-NEXT:    xor $a0, $a1, $a01055; LD-SEQ-SA-NEXT:    sltui $a0, $a0, 11056; LD-SEQ-SA-NEXT:    ret1057;1058; LA64-LAMCAS-LABEL: cmpxchg_i8_monotonic_monotonic_reti1:1059; LA64-LAMCAS:       # %bb.0:1060; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a11061; LA64-LAMCAS-NEXT:    amcas.b $a1, $a2, $a01062; LA64-LAMCAS-NEXT:    xor $a0, $a1, $a31063; LA64-LAMCAS-NEXT:    sltui $a0, $a0, 11064; LA64-LAMCAS-NEXT:    ret1065  %tmp = cmpxchg ptr %ptr, i8 %cmp, i8 %val monotonic monotonic1066  %res = extractvalue { i8, i1 } %tmp, 11067  ret i1 %res1068}1069 1070define i1 @cmpxchg_i16_monotonic_monotonic_reti1(ptr %ptr, i16 %cmp, i16 %val) nounwind {1071; NO-LD-SEQ-SA-LABEL: cmpxchg_i16_monotonic_monotonic_reti1:1072; NO-LD-SEQ-SA:       # %bb.0:1073; NO-LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 31074; NO-LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 01075; NO-LD-SEQ-SA-NEXT:    lu12i.w $a4, 151076; NO-LD-SEQ-SA-NEXT:    ori $a4, $a4, 40951077; NO-LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a31078; NO-LD-SEQ-SA-NEXT:    bstrpick.d $a1, $a1, 15, 01079; NO-LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a31080; NO-LD-SEQ-SA-NEXT:    bstrpick.d $a2, $a2, 15, 01081; NO-LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a31082; NO-LD-SEQ-SA-NEXT:  .LBB25_1: # =>This Inner Loop Header: Depth=11083; NO-LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 01084; NO-LD-SEQ-SA-NEXT:    and $a5, $a3, $a41085; NO-LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB25_31086; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB25_1 Depth=11087; NO-LD-SEQ-SA-NEXT:    andn $a5, $a3, $a41088; NO-LD-SEQ-SA-NEXT:    or $a5, $a5, $a21089; NO-LD-SEQ-SA-NEXT:    sc.w $a5, $a0, 01090; NO-LD-SEQ-SA-NEXT:    beq $a5, $zero, .LBB25_11091; NO-LD-SEQ-SA-NEXT:    b .LBB25_41092; NO-LD-SEQ-SA-NEXT:  .LBB25_3:1093; NO-LD-SEQ-SA-NEXT:    dbar 17921094; NO-LD-SEQ-SA-NEXT:  .LBB25_4:1095; NO-LD-SEQ-SA-NEXT:    and $a0, $a3, $a41096; NO-LD-SEQ-SA-NEXT:    xor $a0, $a1, $a01097; NO-LD-SEQ-SA-NEXT:    sltui $a0, $a0, 11098; NO-LD-SEQ-SA-NEXT:    ret1099;1100; LD-SEQ-SA-LABEL: cmpxchg_i16_monotonic_monotonic_reti1:1101; LD-SEQ-SA:       # %bb.0:1102; LD-SEQ-SA-NEXT:    slli.d $a3, $a0, 31103; LD-SEQ-SA-NEXT:    bstrins.d $a0, $zero, 1, 01104; LD-SEQ-SA-NEXT:    lu12i.w $a4, 151105; LD-SEQ-SA-NEXT:    ori $a4, $a4, 40951106; LD-SEQ-SA-NEXT:    sll.w $a4, $a4, $a31107; LD-SEQ-SA-NEXT:    bstrpick.d $a1, $a1, 15, 01108; LD-SEQ-SA-NEXT:    sll.w $a1, $a1, $a31109; LD-SEQ-SA-NEXT:    bstrpick.d $a2, $a2, 15, 01110; LD-SEQ-SA-NEXT:    sll.w $a2, $a2, $a31111; LD-SEQ-SA-NEXT:  .LBB25_1: # =>This Inner Loop Header: Depth=11112; LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 01113; LD-SEQ-SA-NEXT:    and $a5, $a3, $a41114; LD-SEQ-SA-NEXT:    bne $a5, $a1, .LBB25_31115; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB25_1 Depth=11116; LD-SEQ-SA-NEXT:    andn $a5, $a3, $a41117; LD-SEQ-SA-NEXT:    or $a5, $a5, $a21118; LD-SEQ-SA-NEXT:    sc.w $a5, $a0, 01119; LD-SEQ-SA-NEXT:    beq $a5, $zero, .LBB25_11120; LD-SEQ-SA-NEXT:    b .LBB25_41121; LD-SEQ-SA-NEXT:  .LBB25_3:1122; LD-SEQ-SA-NEXT:  .LBB25_4:1123; LD-SEQ-SA-NEXT:    and $a0, $a3, $a41124; LD-SEQ-SA-NEXT:    xor $a0, $a1, $a01125; LD-SEQ-SA-NEXT:    sltui $a0, $a0, 11126; LD-SEQ-SA-NEXT:    ret1127;1128; LA64-LAMCAS-LABEL: cmpxchg_i16_monotonic_monotonic_reti1:1129; LA64-LAMCAS:       # %bb.0:1130; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a11131; LA64-LAMCAS-NEXT:    amcas.h $a1, $a2, $a01132; LA64-LAMCAS-NEXT:    xor $a0, $a1, $a31133; LA64-LAMCAS-NEXT:    sltui $a0, $a0, 11134; LA64-LAMCAS-NEXT:    ret1135  %tmp = cmpxchg ptr %ptr, i16 %cmp, i16 %val monotonic monotonic1136  %res = extractvalue { i16, i1 } %tmp, 11137  ret i1 %res1138}1139 1140define i1 @cmpxchg_i32_monotonic_monotonic_reti1(ptr %ptr, i32 %cmp, i32 %val) nounwind {1141; NO-LD-SEQ-SA-LABEL: cmpxchg_i32_monotonic_monotonic_reti1:1142; NO-LD-SEQ-SA:       # %bb.0:1143; NO-LD-SEQ-SA-NEXT:    addi.w $a1, $a1, 01144; NO-LD-SEQ-SA-NEXT:  .LBB26_1: # =>This Inner Loop Header: Depth=11145; NO-LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 01146; NO-LD-SEQ-SA-NEXT:    bne $a3, $a1, .LBB26_31147; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB26_1 Depth=11148; NO-LD-SEQ-SA-NEXT:    move $a4, $a21149; NO-LD-SEQ-SA-NEXT:    sc.w $a4, $a0, 01150; NO-LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB26_11151; NO-LD-SEQ-SA-NEXT:    b .LBB26_41152; NO-LD-SEQ-SA-NEXT:  .LBB26_3:1153; NO-LD-SEQ-SA-NEXT:    dbar 17921154; NO-LD-SEQ-SA-NEXT:  .LBB26_4:1155; NO-LD-SEQ-SA-NEXT:    xor $a0, $a3, $a11156; NO-LD-SEQ-SA-NEXT:    sltui $a0, $a0, 11157; NO-LD-SEQ-SA-NEXT:    ret1158;1159; LD-SEQ-SA-LABEL: cmpxchg_i32_monotonic_monotonic_reti1:1160; LD-SEQ-SA:       # %bb.0:1161; LD-SEQ-SA-NEXT:    addi.w $a1, $a1, 01162; LD-SEQ-SA-NEXT:  .LBB26_1: # =>This Inner Loop Header: Depth=11163; LD-SEQ-SA-NEXT:    ll.w $a3, $a0, 01164; LD-SEQ-SA-NEXT:    bne $a3, $a1, .LBB26_31165; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB26_1 Depth=11166; LD-SEQ-SA-NEXT:    move $a4, $a21167; LD-SEQ-SA-NEXT:    sc.w $a4, $a0, 01168; LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB26_11169; LD-SEQ-SA-NEXT:    b .LBB26_41170; LD-SEQ-SA-NEXT:  .LBB26_3:1171; LD-SEQ-SA-NEXT:  .LBB26_4:1172; LD-SEQ-SA-NEXT:    xor $a0, $a3, $a11173; LD-SEQ-SA-NEXT:    sltui $a0, $a0, 11174; LD-SEQ-SA-NEXT:    ret1175;1176; LA64-LAMCAS-LABEL: cmpxchg_i32_monotonic_monotonic_reti1:1177; LA64-LAMCAS:       # %bb.0:1178; LA64-LAMCAS-NEXT:    addi.w $a3, $a1, 01179; LA64-LAMCAS-NEXT:    amcas.w $a1, $a2, $a01180; LA64-LAMCAS-NEXT:    xor $a0, $a1, $a31181; LA64-LAMCAS-NEXT:    sltui $a0, $a0, 11182; LA64-LAMCAS-NEXT:    ret1183  %tmp = cmpxchg ptr %ptr, i32 %cmp, i32 %val monotonic monotonic1184  %res = extractvalue { i32, i1 } %tmp, 11185  ret i1 %res1186}1187 1188define i1 @cmpxchg_i64_monotonic_monotonic_reti1(ptr %ptr, i64 %cmp, i64 %val) nounwind {1189; NO-LD-SEQ-SA-LABEL: cmpxchg_i64_monotonic_monotonic_reti1:1190; NO-LD-SEQ-SA:       # %bb.0:1191; NO-LD-SEQ-SA-NEXT:  .LBB27_1: # =>This Inner Loop Header: Depth=11192; NO-LD-SEQ-SA-NEXT:    ll.d $a3, $a0, 01193; NO-LD-SEQ-SA-NEXT:    bne $a3, $a1, .LBB27_31194; NO-LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB27_1 Depth=11195; NO-LD-SEQ-SA-NEXT:    move $a4, $a21196; NO-LD-SEQ-SA-NEXT:    sc.d $a4, $a0, 01197; NO-LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB27_11198; NO-LD-SEQ-SA-NEXT:    b .LBB27_41199; NO-LD-SEQ-SA-NEXT:  .LBB27_3:1200; NO-LD-SEQ-SA-NEXT:    dbar 17921201; NO-LD-SEQ-SA-NEXT:  .LBB27_4:1202; NO-LD-SEQ-SA-NEXT:    xor $a0, $a3, $a11203; NO-LD-SEQ-SA-NEXT:    sltui $a0, $a0, 11204; NO-LD-SEQ-SA-NEXT:    ret1205;1206; LD-SEQ-SA-LABEL: cmpxchg_i64_monotonic_monotonic_reti1:1207; LD-SEQ-SA:       # %bb.0:1208; LD-SEQ-SA-NEXT:  .LBB27_1: # =>This Inner Loop Header: Depth=11209; LD-SEQ-SA-NEXT:    ll.d $a3, $a0, 01210; LD-SEQ-SA-NEXT:    bne $a3, $a1, .LBB27_31211; LD-SEQ-SA-NEXT:  # %bb.2: # in Loop: Header=BB27_1 Depth=11212; LD-SEQ-SA-NEXT:    move $a4, $a21213; LD-SEQ-SA-NEXT:    sc.d $a4, $a0, 01214; LD-SEQ-SA-NEXT:    beq $a4, $zero, .LBB27_11215; LD-SEQ-SA-NEXT:    b .LBB27_41216; LD-SEQ-SA-NEXT:  .LBB27_3:1217; LD-SEQ-SA-NEXT:  .LBB27_4:1218; LD-SEQ-SA-NEXT:    xor $a0, $a3, $a11219; LD-SEQ-SA-NEXT:    sltui $a0, $a0, 11220; LD-SEQ-SA-NEXT:    ret1221;1222; LA64-LAMCAS-LABEL: cmpxchg_i64_monotonic_monotonic_reti1:1223; LA64-LAMCAS:       # %bb.0:1224; LA64-LAMCAS-NEXT:    move $a3, $a11225; LA64-LAMCAS-NEXT:    amcas.d $a3, $a2, $a01226; LA64-LAMCAS-NEXT:    xor $a0, $a3, $a11227; LA64-LAMCAS-NEXT:    sltui $a0, $a0, 11228; LA64-LAMCAS-NEXT:    ret1229  %tmp = cmpxchg ptr %ptr, i64 %cmp, i64 %val monotonic monotonic1230  %res = extractvalue { i64, i1 } %tmp, 11231  ret i1 %res1232}1233