brintos

brintos / llvm-project-archived public Read only

0
0
Text · 239.2 KiB · 607c7f8 Raw
7380 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=-32s,+d < %s | FileCheck %s --check-prefix=LA32R3; RUN: llc --mtriple=loongarch32 -mattr=+32s,+d < %s | FileCheck %s --check-prefix=LA32S4; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA645 6define i8 @atomicrmw_xchg_i8_acquire(ptr %a, i8 %b) nounwind {7; LA32R-LABEL: atomicrmw_xchg_i8_acquire:8; LA32R:       # %bb.0:9; LA32R-NEXT:    addi.w $a2, $zero, -410; LA32R-NEXT:    and $a2, $a0, $a211; LA32R-NEXT:    slli.w $a0, $a0, 312; LA32R-NEXT:    ori $a3, $zero, 25513; LA32R-NEXT:    sll.w $a3, $a3, $a014; LA32R-NEXT:    andi $a1, $a1, 25515; LA32R-NEXT:    sll.w $a1, $a1, $a016; LA32R-NEXT:  .LBB0_1: # =>This Inner Loop Header: Depth=117; LA32R-NEXT:    ll.w $a4, $a2, 018; LA32R-NEXT:    addi.w $a5, $a1, 019; LA32R-NEXT:    xor $a5, $a4, $a520; LA32R-NEXT:    and $a5, $a5, $a321; LA32R-NEXT:    xor $a5, $a4, $a522; LA32R-NEXT:    sc.w $a5, $a2, 023; LA32R-NEXT:    beq $a5, $zero, .LBB0_124; LA32R-NEXT:  # %bb.2:25; LA32R-NEXT:    srl.w $a0, $a4, $a026; LA32R-NEXT:    ret27;28; LA32S-LABEL: atomicrmw_xchg_i8_acquire:29; LA32S:       # %bb.0:30; LA32S-NEXT:    slli.w $a2, $a0, 331; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 032; LA32S-NEXT:    ori $a3, $zero, 25533; LA32S-NEXT:    sll.w $a3, $a3, $a234; LA32S-NEXT:    andi $a1, $a1, 25535; LA32S-NEXT:    sll.w $a1, $a1, $a236; LA32S-NEXT:  .LBB0_1: # =>This Inner Loop Header: Depth=137; LA32S-NEXT:    ll.w $a4, $a0, 038; LA32S-NEXT:    addi.w $a5, $a1, 039; LA32S-NEXT:    xor $a5, $a4, $a540; LA32S-NEXT:    and $a5, $a5, $a341; LA32S-NEXT:    xor $a5, $a4, $a542; LA32S-NEXT:    sc.w $a5, $a0, 043; LA32S-NEXT:    beq $a5, $zero, .LBB0_144; LA32S-NEXT:  # %bb.2:45; LA32S-NEXT:    srl.w $a0, $a4, $a246; LA32S-NEXT:    ret47;48; LA64-LABEL: atomicrmw_xchg_i8_acquire:49; LA64:       # %bb.0:50; LA64-NEXT:    slli.d $a2, $a0, 351; LA64-NEXT:    bstrins.d $a0, $zero, 1, 052; LA64-NEXT:    ori $a3, $zero, 25553; LA64-NEXT:    sll.w $a3, $a3, $a254; LA64-NEXT:    andi $a1, $a1, 25555; LA64-NEXT:    sll.w $a1, $a1, $a256; LA64-NEXT:  .LBB0_1: # =>This Inner Loop Header: Depth=157; LA64-NEXT:    ll.w $a4, $a0, 058; LA64-NEXT:    addi.w $a5, $a1, 059; LA64-NEXT:    xor $a5, $a4, $a560; LA64-NEXT:    and $a5, $a5, $a361; LA64-NEXT:    xor $a5, $a4, $a562; LA64-NEXT:    sc.w $a5, $a0, 063; LA64-NEXT:    beq $a5, $zero, .LBB0_164; LA64-NEXT:  # %bb.2:65; LA64-NEXT:    srl.w $a0, $a4, $a266; LA64-NEXT:    ret67  %1 = atomicrmw xchg ptr %a, i8 %b acquire68  ret i8 %169}70 71define i8 @atomicrmw_xchg_0_i8_acquire(ptr %a) nounwind {72; LA32R-LABEL: atomicrmw_xchg_0_i8_acquire:73; LA32R:       # %bb.0:74; LA32R-NEXT:    addi.w $a1, $zero, -475; LA32R-NEXT:    and $a1, $a0, $a176; LA32R-NEXT:    slli.w $a0, $a0, 377; LA32R-NEXT:    ori $a2, $zero, 25578; LA32R-NEXT:    sll.w $a2, $a2, $a079; LA32R-NEXT:    nor $a2, $a2, $zero80; LA32R-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=181; LA32R-NEXT:    ll.w $a3, $a1, 082; LA32R-NEXT:    and $a4, $a3, $a283; LA32R-NEXT:    sc.w $a4, $a1, 084; LA32R-NEXT:    beq $a4, $zero, .LBB1_185; LA32R-NEXT:  # %bb.2:86; LA32R-NEXT:    srl.w $a0, $a3, $a087; LA32R-NEXT:    ret88;89; LA32S-LABEL: atomicrmw_xchg_0_i8_acquire:90; LA32S:       # %bb.0:91; LA32S-NEXT:    slli.w $a1, $a0, 392; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 093; LA32S-NEXT:    ori $a2, $zero, 25594; LA32S-NEXT:    sll.w $a2, $a2, $a195; LA32S-NEXT:    nor $a2, $a2, $zero96; LA32S-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=197; LA32S-NEXT:    ll.w $a3, $a0, 098; LA32S-NEXT:    and $a4, $a3, $a299; LA32S-NEXT:    sc.w $a4, $a0, 0100; LA32S-NEXT:    beq $a4, $zero, .LBB1_1101; LA32S-NEXT:  # %bb.2:102; LA32S-NEXT:    srl.w $a0, $a3, $a1103; LA32S-NEXT:    ret104;105; LA64-LABEL: atomicrmw_xchg_0_i8_acquire:106; LA64:       # %bb.0:107; LA64-NEXT:    slli.d $a1, $a0, 3108; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0109; LA64-NEXT:    ori $a2, $zero, 255110; LA64-NEXT:    sll.w $a2, $a2, $a1111; LA64-NEXT:    nor $a2, $a2, $zero112; LA64-NEXT:    amand_db.w $a3, $a2, $a0113; LA64-NEXT:    srl.w $a0, $a3, $a1114; LA64-NEXT:    ret115  %1 = atomicrmw xchg ptr %a, i8 0 acquire116  ret i8 %1117}118 119define i8 @atomicrmw_xchg_minus_1_i8_acquire(ptr %a) nounwind {120; LA32R-LABEL: atomicrmw_xchg_minus_1_i8_acquire:121; LA32R:       # %bb.0:122; LA32R-NEXT:    addi.w $a1, $zero, -4123; LA32R-NEXT:    and $a1, $a0, $a1124; LA32R-NEXT:    slli.w $a0, $a0, 3125; LA32R-NEXT:    ori $a2, $zero, 255126; LA32R-NEXT:    sll.w $a2, $a2, $a0127; LA32R-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1128; LA32R-NEXT:    ll.w $a3, $a1, 0129; LA32R-NEXT:    or $a4, $a3, $a2130; LA32R-NEXT:    sc.w $a4, $a1, 0131; LA32R-NEXT:    beq $a4, $zero, .LBB2_1132; LA32R-NEXT:  # %bb.2:133; LA32R-NEXT:    srl.w $a0, $a3, $a0134; LA32R-NEXT:    ret135;136; LA32S-LABEL: atomicrmw_xchg_minus_1_i8_acquire:137; LA32S:       # %bb.0:138; LA32S-NEXT:    slli.w $a1, $a0, 3139; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 0140; LA32S-NEXT:    ori $a2, $zero, 255141; LA32S-NEXT:    sll.w $a2, $a2, $a1142; LA32S-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1143; LA32S-NEXT:    ll.w $a3, $a0, 0144; LA32S-NEXT:    or $a4, $a3, $a2145; LA32S-NEXT:    sc.w $a4, $a0, 0146; LA32S-NEXT:    beq $a4, $zero, .LBB2_1147; LA32S-NEXT:  # %bb.2:148; LA32S-NEXT:    srl.w $a0, $a3, $a1149; LA32S-NEXT:    ret150;151; LA64-LABEL: atomicrmw_xchg_minus_1_i8_acquire:152; LA64:       # %bb.0:153; LA64-NEXT:    slli.d $a1, $a0, 3154; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0155; LA64-NEXT:    ori $a2, $zero, 255156; LA64-NEXT:    sll.w $a2, $a2, $a1157; LA64-NEXT:    amor_db.w $a3, $a2, $a0158; LA64-NEXT:    srl.w $a0, $a3, $a1159; LA64-NEXT:    ret160  %1 = atomicrmw xchg ptr %a, i8 -1 acquire161  ret i8 %1162}163 164define i16 @atomicrmw_xchg_i16_acquire(ptr %a, i16 %b) nounwind {165; LA32R-LABEL: atomicrmw_xchg_i16_acquire:166; LA32R:       # %bb.0:167; LA32R-NEXT:    addi.w $a2, $zero, -4168; LA32R-NEXT:    and $a2, $a0, $a2169; LA32R-NEXT:    slli.w $a0, $a0, 3170; LA32R-NEXT:    lu12i.w $a3, 15171; LA32R-NEXT:    ori $a3, $a3, 4095172; LA32R-NEXT:    sll.w $a4, $a3, $a0173; LA32R-NEXT:    and $a1, $a1, $a3174; LA32R-NEXT:    sll.w $a1, $a1, $a0175; LA32R-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1176; LA32R-NEXT:    ll.w $a3, $a2, 0177; LA32R-NEXT:    addi.w $a5, $a1, 0178; LA32R-NEXT:    xor $a5, $a3, $a5179; LA32R-NEXT:    and $a5, $a5, $a4180; LA32R-NEXT:    xor $a5, $a3, $a5181; LA32R-NEXT:    sc.w $a5, $a2, 0182; LA32R-NEXT:    beq $a5, $zero, .LBB3_1183; LA32R-NEXT:  # %bb.2:184; LA32R-NEXT:    srl.w $a0, $a3, $a0185; LA32R-NEXT:    ret186;187; LA32S-LABEL: atomicrmw_xchg_i16_acquire:188; LA32S:       # %bb.0:189; LA32S-NEXT:    slli.w $a2, $a0, 3190; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 0191; LA32S-NEXT:    lu12i.w $a3, 15192; LA32S-NEXT:    ori $a3, $a3, 4095193; LA32S-NEXT:    sll.w $a3, $a3, $a2194; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 0195; LA32S-NEXT:    sll.w $a1, $a1, $a2196; LA32S-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1197; LA32S-NEXT:    ll.w $a4, $a0, 0198; LA32S-NEXT:    addi.w $a5, $a1, 0199; LA32S-NEXT:    xor $a5, $a4, $a5200; LA32S-NEXT:    and $a5, $a5, $a3201; LA32S-NEXT:    xor $a5, $a4, $a5202; LA32S-NEXT:    sc.w $a5, $a0, 0203; LA32S-NEXT:    beq $a5, $zero, .LBB3_1204; LA32S-NEXT:  # %bb.2:205; LA32S-NEXT:    srl.w $a0, $a4, $a2206; LA32S-NEXT:    ret207;208; LA64-LABEL: atomicrmw_xchg_i16_acquire:209; LA64:       # %bb.0:210; LA64-NEXT:    slli.d $a2, $a0, 3211; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0212; LA64-NEXT:    lu12i.w $a3, 15213; LA64-NEXT:    ori $a3, $a3, 4095214; LA64-NEXT:    sll.w $a3, $a3, $a2215; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 0216; LA64-NEXT:    sll.w $a1, $a1, $a2217; LA64-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1218; LA64-NEXT:    ll.w $a4, $a0, 0219; LA64-NEXT:    addi.w $a5, $a1, 0220; LA64-NEXT:    xor $a5, $a4, $a5221; LA64-NEXT:    and $a5, $a5, $a3222; LA64-NEXT:    xor $a5, $a4, $a5223; LA64-NEXT:    sc.w $a5, $a0, 0224; LA64-NEXT:    beq $a5, $zero, .LBB3_1225; LA64-NEXT:  # %bb.2:226; LA64-NEXT:    srl.w $a0, $a4, $a2227; LA64-NEXT:    ret228  %1 = atomicrmw xchg ptr %a, i16 %b acquire229  ret i16 %1230}231 232define i16 @atomicrmw_xchg_0_i16_acquire(ptr %a) nounwind {233; LA32R-LABEL: atomicrmw_xchg_0_i16_acquire:234; LA32R:       # %bb.0:235; LA32R-NEXT:    addi.w $a1, $zero, -4236; LA32R-NEXT:    and $a1, $a0, $a1237; LA32R-NEXT:    slli.w $a0, $a0, 3238; LA32R-NEXT:    lu12i.w $a2, 15239; LA32R-NEXT:    ori $a2, $a2, 4095240; LA32R-NEXT:    sll.w $a2, $a2, $a0241; LA32R-NEXT:    nor $a2, $a2, $zero242; LA32R-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1243; LA32R-NEXT:    ll.w $a3, $a1, 0244; LA32R-NEXT:    and $a4, $a3, $a2245; LA32R-NEXT:    sc.w $a4, $a1, 0246; LA32R-NEXT:    beq $a4, $zero, .LBB4_1247; LA32R-NEXT:  # %bb.2:248; LA32R-NEXT:    srl.w $a0, $a3, $a0249; LA32R-NEXT:    ret250;251; LA32S-LABEL: atomicrmw_xchg_0_i16_acquire:252; LA32S:       # %bb.0:253; LA32S-NEXT:    slli.w $a1, $a0, 3254; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 0255; LA32S-NEXT:    lu12i.w $a2, 15256; LA32S-NEXT:    ori $a2, $a2, 4095257; LA32S-NEXT:    sll.w $a2, $a2, $a1258; LA32S-NEXT:    nor $a2, $a2, $zero259; LA32S-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1260; LA32S-NEXT:    ll.w $a3, $a0, 0261; LA32S-NEXT:    and $a4, $a3, $a2262; LA32S-NEXT:    sc.w $a4, $a0, 0263; LA32S-NEXT:    beq $a4, $zero, .LBB4_1264; LA32S-NEXT:  # %bb.2:265; LA32S-NEXT:    srl.w $a0, $a3, $a1266; LA32S-NEXT:    ret267;268; LA64-LABEL: atomicrmw_xchg_0_i16_acquire:269; LA64:       # %bb.0:270; LA64-NEXT:    slli.d $a1, $a0, 3271; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0272; LA64-NEXT:    lu12i.w $a2, 15273; LA64-NEXT:    ori $a2, $a2, 4095274; LA64-NEXT:    sll.w $a2, $a2, $a1275; LA64-NEXT:    nor $a2, $a2, $zero276; LA64-NEXT:    amand_db.w $a3, $a2, $a0277; LA64-NEXT:    srl.w $a0, $a3, $a1278; LA64-NEXT:    ret279  %1 = atomicrmw xchg ptr %a, i16 0 acquire280  ret i16 %1281}282 283define i16 @atomicrmw_xchg_minus_1_i16_acquire(ptr %a) nounwind {284; LA32R-LABEL: atomicrmw_xchg_minus_1_i16_acquire:285; LA32R:       # %bb.0:286; LA32R-NEXT:    addi.w $a1, $zero, -4287; LA32R-NEXT:    and $a1, $a0, $a1288; LA32R-NEXT:    slli.w $a0, $a0, 3289; LA32R-NEXT:    lu12i.w $a2, 15290; LA32R-NEXT:    ori $a2, $a2, 4095291; LA32R-NEXT:    sll.w $a2, $a2, $a0292; LA32R-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=1293; LA32R-NEXT:    ll.w $a3, $a1, 0294; LA32R-NEXT:    or $a4, $a3, $a2295; LA32R-NEXT:    sc.w $a4, $a1, 0296; LA32R-NEXT:    beq $a4, $zero, .LBB5_1297; LA32R-NEXT:  # %bb.2:298; LA32R-NEXT:    srl.w $a0, $a3, $a0299; LA32R-NEXT:    ret300;301; LA32S-LABEL: atomicrmw_xchg_minus_1_i16_acquire:302; LA32S:       # %bb.0:303; LA32S-NEXT:    slli.w $a1, $a0, 3304; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 0305; LA32S-NEXT:    lu12i.w $a2, 15306; LA32S-NEXT:    ori $a2, $a2, 4095307; LA32S-NEXT:    sll.w $a2, $a2, $a1308; LA32S-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=1309; LA32S-NEXT:    ll.w $a3, $a0, 0310; LA32S-NEXT:    or $a4, $a3, $a2311; LA32S-NEXT:    sc.w $a4, $a0, 0312; LA32S-NEXT:    beq $a4, $zero, .LBB5_1313; LA32S-NEXT:  # %bb.2:314; LA32S-NEXT:    srl.w $a0, $a3, $a1315; LA32S-NEXT:    ret316;317; LA64-LABEL: atomicrmw_xchg_minus_1_i16_acquire:318; LA64:       # %bb.0:319; LA64-NEXT:    slli.d $a1, $a0, 3320; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0321; LA64-NEXT:    lu12i.w $a2, 15322; LA64-NEXT:    ori $a2, $a2, 4095323; LA64-NEXT:    sll.w $a2, $a2, $a1324; LA64-NEXT:    amor_db.w $a3, $a2, $a0325; LA64-NEXT:    srl.w $a0, $a3, $a1326; LA64-NEXT:    ret327  %1 = atomicrmw xchg ptr %a, i16 -1 acquire328  ret i16 %1329}330 331define i32 @atomicrmw_xchg_i32_acquire(ptr %a, i32 %b) nounwind {332; LA32R-LABEL: atomicrmw_xchg_i32_acquire:333; LA32R:       # %bb.0:334; LA32R-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=1335; LA32R-NEXT:    ll.w $a2, $a0, 0336; LA32R-NEXT:    move $a3, $a1337; LA32R-NEXT:    sc.w $a3, $a0, 0338; LA32R-NEXT:    beq $a3, $zero, .LBB6_1339; LA32R-NEXT:  # %bb.2:340; LA32R-NEXT:    move $a0, $a2341; LA32R-NEXT:    ret342;343; LA32S-LABEL: atomicrmw_xchg_i32_acquire:344; LA32S:       # %bb.0:345; LA32S-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=1346; LA32S-NEXT:    ll.w $a2, $a0, 0347; LA32S-NEXT:    move $a3, $a1348; LA32S-NEXT:    sc.w $a3, $a0, 0349; LA32S-NEXT:    beq $a3, $zero, .LBB6_1350; LA32S-NEXT:  # %bb.2:351; LA32S-NEXT:    move $a0, $a2352; LA32S-NEXT:    ret353;354; LA64-LABEL: atomicrmw_xchg_i32_acquire:355; LA64:       # %bb.0:356; LA64-NEXT:    amswap_db.w $a2, $a1, $a0357; LA64-NEXT:    move $a0, $a2358; LA64-NEXT:    ret359  %1 = atomicrmw xchg ptr %a, i32 %b acquire360  ret i32 %1361}362 363define i64 @atomicrmw_xchg_i64_acquire(ptr %a, i64 %b) nounwind {364; LA32R-LABEL: atomicrmw_xchg_i64_acquire:365; LA32R:       # %bb.0:366; LA32R-NEXT:    addi.w $sp, $sp, -16367; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill368; LA32R-NEXT:    ori $a3, $zero, 2369; LA32R-NEXT:    bl __atomic_exchange_8370; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload371; LA32R-NEXT:    addi.w $sp, $sp, 16372; LA32R-NEXT:    ret373;374; LA32S-LABEL: atomicrmw_xchg_i64_acquire:375; LA32S:       # %bb.0:376; LA32S-NEXT:    addi.w $sp, $sp, -16377; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill378; LA32S-NEXT:    ori $a3, $zero, 2379; LA32S-NEXT:    bl __atomic_exchange_8380; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload381; LA32S-NEXT:    addi.w $sp, $sp, 16382; LA32S-NEXT:    ret383;384; LA64-LABEL: atomicrmw_xchg_i64_acquire:385; LA64:       # %bb.0:386; LA64-NEXT:    amswap_db.d $a2, $a1, $a0387; LA64-NEXT:    move $a0, $a2388; LA64-NEXT:    ret389  %1 = atomicrmw xchg ptr %a, i64 %b acquire390  ret i64 %1391}392 393define i8 @atomicrmw_add_i8_acquire(ptr %a, i8 %b) nounwind {394; LA32R-LABEL: atomicrmw_add_i8_acquire:395; LA32R:       # %bb.0:396; LA32R-NEXT:    addi.w $a2, $zero, -4397; LA32R-NEXT:    and $a2, $a0, $a2398; LA32R-NEXT:    slli.w $a0, $a0, 3399; LA32R-NEXT:    ori $a3, $zero, 255400; LA32R-NEXT:    sll.w $a3, $a3, $a0401; LA32R-NEXT:    andi $a1, $a1, 255402; LA32R-NEXT:    sll.w $a1, $a1, $a0403; LA32R-NEXT:  .LBB8_1: # =>This Inner Loop Header: Depth=1404; LA32R-NEXT:    ll.w $a4, $a2, 0405; LA32R-NEXT:    add.w $a5, $a4, $a1406; LA32R-NEXT:    xor $a5, $a4, $a5407; LA32R-NEXT:    and $a5, $a5, $a3408; LA32R-NEXT:    xor $a5, $a4, $a5409; LA32R-NEXT:    sc.w $a5, $a2, 0410; LA32R-NEXT:    beq $a5, $zero, .LBB8_1411; LA32R-NEXT:  # %bb.2:412; LA32R-NEXT:    srl.w $a0, $a4, $a0413; LA32R-NEXT:    ret414;415; LA32S-LABEL: atomicrmw_add_i8_acquire:416; LA32S:       # %bb.0:417; LA32S-NEXT:    slli.w $a2, $a0, 3418; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 0419; LA32S-NEXT:    ori $a3, $zero, 255420; LA32S-NEXT:    sll.w $a3, $a3, $a2421; LA32S-NEXT:    andi $a1, $a1, 255422; LA32S-NEXT:    sll.w $a1, $a1, $a2423; LA32S-NEXT:  .LBB8_1: # =>This Inner Loop Header: Depth=1424; LA32S-NEXT:    ll.w $a4, $a0, 0425; LA32S-NEXT:    add.w $a5, $a4, $a1426; LA32S-NEXT:    xor $a5, $a4, $a5427; LA32S-NEXT:    and $a5, $a5, $a3428; LA32S-NEXT:    xor $a5, $a4, $a5429; LA32S-NEXT:    sc.w $a5, $a0, 0430; LA32S-NEXT:    beq $a5, $zero, .LBB8_1431; LA32S-NEXT:  # %bb.2:432; LA32S-NEXT:    srl.w $a0, $a4, $a2433; LA32S-NEXT:    ret434;435; LA64-LABEL: atomicrmw_add_i8_acquire:436; LA64:       # %bb.0:437; LA64-NEXT:    slli.d $a2, $a0, 3438; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0439; LA64-NEXT:    ori $a3, $zero, 255440; LA64-NEXT:    sll.w $a3, $a3, $a2441; LA64-NEXT:    andi $a1, $a1, 255442; LA64-NEXT:    sll.w $a1, $a1, $a2443; LA64-NEXT:  .LBB8_1: # =>This Inner Loop Header: Depth=1444; LA64-NEXT:    ll.w $a4, $a0, 0445; LA64-NEXT:    add.w $a5, $a4, $a1446; LA64-NEXT:    xor $a5, $a4, $a5447; LA64-NEXT:    and $a5, $a5, $a3448; LA64-NEXT:    xor $a5, $a4, $a5449; LA64-NEXT:    sc.w $a5, $a0, 0450; LA64-NEXT:    beq $a5, $zero, .LBB8_1451; LA64-NEXT:  # %bb.2:452; LA64-NEXT:    srl.w $a0, $a4, $a2453; LA64-NEXT:    ret454  %1 = atomicrmw add ptr %a, i8 %b acquire455  ret i8 %1456}457 458define i16 @atomicrmw_add_i16_acquire(ptr %a, i16 %b) nounwind {459; LA32R-LABEL: atomicrmw_add_i16_acquire:460; LA32R:       # %bb.0:461; LA32R-NEXT:    addi.w $a2, $zero, -4462; LA32R-NEXT:    and $a2, $a0, $a2463; LA32R-NEXT:    slli.w $a0, $a0, 3464; LA32R-NEXT:    lu12i.w $a3, 15465; LA32R-NEXT:    ori $a3, $a3, 4095466; LA32R-NEXT:    sll.w $a4, $a3, $a0467; LA32R-NEXT:    and $a1, $a1, $a3468; LA32R-NEXT:    sll.w $a1, $a1, $a0469; LA32R-NEXT:  .LBB9_1: # =>This Inner Loop Header: Depth=1470; LA32R-NEXT:    ll.w $a3, $a2, 0471; LA32R-NEXT:    add.w $a5, $a3, $a1472; LA32R-NEXT:    xor $a5, $a3, $a5473; LA32R-NEXT:    and $a5, $a5, $a4474; LA32R-NEXT:    xor $a5, $a3, $a5475; LA32R-NEXT:    sc.w $a5, $a2, 0476; LA32R-NEXT:    beq $a5, $zero, .LBB9_1477; LA32R-NEXT:  # %bb.2:478; LA32R-NEXT:    srl.w $a0, $a3, $a0479; LA32R-NEXT:    ret480;481; LA32S-LABEL: atomicrmw_add_i16_acquire:482; LA32S:       # %bb.0:483; LA32S-NEXT:    slli.w $a2, $a0, 3484; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 0485; LA32S-NEXT:    lu12i.w $a3, 15486; LA32S-NEXT:    ori $a3, $a3, 4095487; LA32S-NEXT:    sll.w $a3, $a3, $a2488; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 0489; LA32S-NEXT:    sll.w $a1, $a1, $a2490; LA32S-NEXT:  .LBB9_1: # =>This Inner Loop Header: Depth=1491; LA32S-NEXT:    ll.w $a4, $a0, 0492; LA32S-NEXT:    add.w $a5, $a4, $a1493; LA32S-NEXT:    xor $a5, $a4, $a5494; LA32S-NEXT:    and $a5, $a5, $a3495; LA32S-NEXT:    xor $a5, $a4, $a5496; LA32S-NEXT:    sc.w $a5, $a0, 0497; LA32S-NEXT:    beq $a5, $zero, .LBB9_1498; LA32S-NEXT:  # %bb.2:499; LA32S-NEXT:    srl.w $a0, $a4, $a2500; LA32S-NEXT:    ret501;502; LA64-LABEL: atomicrmw_add_i16_acquire:503; LA64:       # %bb.0:504; LA64-NEXT:    slli.d $a2, $a0, 3505; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0506; LA64-NEXT:    lu12i.w $a3, 15507; LA64-NEXT:    ori $a3, $a3, 4095508; LA64-NEXT:    sll.w $a3, $a3, $a2509; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 0510; LA64-NEXT:    sll.w $a1, $a1, $a2511; LA64-NEXT:  .LBB9_1: # =>This Inner Loop Header: Depth=1512; LA64-NEXT:    ll.w $a4, $a0, 0513; LA64-NEXT:    add.w $a5, $a4, $a1514; LA64-NEXT:    xor $a5, $a4, $a5515; LA64-NEXT:    and $a5, $a5, $a3516; LA64-NEXT:    xor $a5, $a4, $a5517; LA64-NEXT:    sc.w $a5, $a0, 0518; LA64-NEXT:    beq $a5, $zero, .LBB9_1519; LA64-NEXT:  # %bb.2:520; LA64-NEXT:    srl.w $a0, $a4, $a2521; LA64-NEXT:    ret522  %1 = atomicrmw add ptr %a, i16 %b acquire523  ret i16 %1524}525 526define i32 @atomicrmw_add_i32_acquire(ptr %a, i32 %b) nounwind {527; LA32R-LABEL: atomicrmw_add_i32_acquire:528; LA32R:       # %bb.0:529; LA32R-NEXT:  .LBB10_1: # =>This Inner Loop Header: Depth=1530; LA32R-NEXT:    ll.w $a2, $a0, 0531; LA32R-NEXT:    add.w $a3, $a2, $a1532; LA32R-NEXT:    sc.w $a3, $a0, 0533; LA32R-NEXT:    beq $a3, $zero, .LBB10_1534; LA32R-NEXT:  # %bb.2:535; LA32R-NEXT:    move $a0, $a2536; LA32R-NEXT:    ret537;538; LA32S-LABEL: atomicrmw_add_i32_acquire:539; LA32S:       # %bb.0:540; LA32S-NEXT:  .LBB10_1: # =>This Inner Loop Header: Depth=1541; LA32S-NEXT:    ll.w $a2, $a0, 0542; LA32S-NEXT:    add.w $a3, $a2, $a1543; LA32S-NEXT:    sc.w $a3, $a0, 0544; LA32S-NEXT:    beq $a3, $zero, .LBB10_1545; LA32S-NEXT:  # %bb.2:546; LA32S-NEXT:    move $a0, $a2547; LA32S-NEXT:    ret548;549; LA64-LABEL: atomicrmw_add_i32_acquire:550; LA64:       # %bb.0:551; LA64-NEXT:    amadd_db.w $a2, $a1, $a0552; LA64-NEXT:    move $a0, $a2553; LA64-NEXT:    ret554  %1 = atomicrmw add ptr %a, i32 %b acquire555  ret i32 %1556}557 558define i64 @atomicrmw_add_i64_acquire(ptr %a, i64 %b) nounwind {559; LA32R-LABEL: atomicrmw_add_i64_acquire:560; LA32R:       # %bb.0:561; LA32R-NEXT:    addi.w $sp, $sp, -16562; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill563; LA32R-NEXT:    ori $a3, $zero, 2564; LA32R-NEXT:    bl __atomic_fetch_add_8565; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload566; LA32R-NEXT:    addi.w $sp, $sp, 16567; LA32R-NEXT:    ret568;569; LA32S-LABEL: atomicrmw_add_i64_acquire:570; LA32S:       # %bb.0:571; LA32S-NEXT:    addi.w $sp, $sp, -16572; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill573; LA32S-NEXT:    ori $a3, $zero, 2574; LA32S-NEXT:    bl __atomic_fetch_add_8575; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload576; LA32S-NEXT:    addi.w $sp, $sp, 16577; LA32S-NEXT:    ret578;579; LA64-LABEL: atomicrmw_add_i64_acquire:580; LA64:       # %bb.0:581; LA64-NEXT:    amadd_db.d $a2, $a1, $a0582; LA64-NEXT:    move $a0, $a2583; LA64-NEXT:    ret584  %1 = atomicrmw add ptr %a, i64 %b acquire585  ret i64 %1586}587 588define i8 @atomicrmw_sub_i8_acquire(ptr %a, i8 %b) nounwind {589; LA32R-LABEL: atomicrmw_sub_i8_acquire:590; LA32R:       # %bb.0:591; LA32R-NEXT:    addi.w $a2, $zero, -4592; LA32R-NEXT:    and $a2, $a0, $a2593; LA32R-NEXT:    slli.w $a0, $a0, 3594; LA32R-NEXT:    ori $a3, $zero, 255595; LA32R-NEXT:    sll.w $a3, $a3, $a0596; LA32R-NEXT:    andi $a1, $a1, 255597; LA32R-NEXT:    sll.w $a1, $a1, $a0598; LA32R-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=1599; LA32R-NEXT:    ll.w $a4, $a2, 0600; LA32R-NEXT:    sub.w $a5, $a4, $a1601; LA32R-NEXT:    xor $a5, $a4, $a5602; LA32R-NEXT:    and $a5, $a5, $a3603; LA32R-NEXT:    xor $a5, $a4, $a5604; LA32R-NEXT:    sc.w $a5, $a2, 0605; LA32R-NEXT:    beq $a5, $zero, .LBB12_1606; LA32R-NEXT:  # %bb.2:607; LA32R-NEXT:    srl.w $a0, $a4, $a0608; LA32R-NEXT:    ret609;610; LA32S-LABEL: atomicrmw_sub_i8_acquire:611; LA32S:       # %bb.0:612; LA32S-NEXT:    slli.w $a2, $a0, 3613; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 0614; LA32S-NEXT:    ori $a3, $zero, 255615; LA32S-NEXT:    sll.w $a3, $a3, $a2616; LA32S-NEXT:    andi $a1, $a1, 255617; LA32S-NEXT:    sll.w $a1, $a1, $a2618; LA32S-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=1619; LA32S-NEXT:    ll.w $a4, $a0, 0620; LA32S-NEXT:    sub.w $a5, $a4, $a1621; LA32S-NEXT:    xor $a5, $a4, $a5622; LA32S-NEXT:    and $a5, $a5, $a3623; LA32S-NEXT:    xor $a5, $a4, $a5624; LA32S-NEXT:    sc.w $a5, $a0, 0625; LA32S-NEXT:    beq $a5, $zero, .LBB12_1626; LA32S-NEXT:  # %bb.2:627; LA32S-NEXT:    srl.w $a0, $a4, $a2628; LA32S-NEXT:    ret629;630; LA64-LABEL: atomicrmw_sub_i8_acquire:631; LA64:       # %bb.0:632; LA64-NEXT:    slli.d $a2, $a0, 3633; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0634; LA64-NEXT:    ori $a3, $zero, 255635; LA64-NEXT:    sll.w $a3, $a3, $a2636; LA64-NEXT:    andi $a1, $a1, 255637; LA64-NEXT:    sll.w $a1, $a1, $a2638; LA64-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=1639; LA64-NEXT:    ll.w $a4, $a0, 0640; LA64-NEXT:    sub.w $a5, $a4, $a1641; LA64-NEXT:    xor $a5, $a4, $a5642; LA64-NEXT:    and $a5, $a5, $a3643; LA64-NEXT:    xor $a5, $a4, $a5644; LA64-NEXT:    sc.w $a5, $a0, 0645; LA64-NEXT:    beq $a5, $zero, .LBB12_1646; LA64-NEXT:  # %bb.2:647; LA64-NEXT:    srl.w $a0, $a4, $a2648; LA64-NEXT:    ret649  %1 = atomicrmw sub ptr %a, i8 %b acquire650  ret i8 %1651}652 653define i16 @atomicrmw_sub_i16_acquire(ptr %a, i16 %b) nounwind {654; LA32R-LABEL: atomicrmw_sub_i16_acquire:655; LA32R:       # %bb.0:656; LA32R-NEXT:    addi.w $a2, $zero, -4657; LA32R-NEXT:    and $a2, $a0, $a2658; LA32R-NEXT:    slli.w $a0, $a0, 3659; LA32R-NEXT:    lu12i.w $a3, 15660; LA32R-NEXT:    ori $a3, $a3, 4095661; LA32R-NEXT:    sll.w $a4, $a3, $a0662; LA32R-NEXT:    and $a1, $a1, $a3663; LA32R-NEXT:    sll.w $a1, $a1, $a0664; LA32R-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=1665; LA32R-NEXT:    ll.w $a3, $a2, 0666; LA32R-NEXT:    sub.w $a5, $a3, $a1667; LA32R-NEXT:    xor $a5, $a3, $a5668; LA32R-NEXT:    and $a5, $a5, $a4669; LA32R-NEXT:    xor $a5, $a3, $a5670; LA32R-NEXT:    sc.w $a5, $a2, 0671; LA32R-NEXT:    beq $a5, $zero, .LBB13_1672; LA32R-NEXT:  # %bb.2:673; LA32R-NEXT:    srl.w $a0, $a3, $a0674; LA32R-NEXT:    ret675;676; LA32S-LABEL: atomicrmw_sub_i16_acquire:677; LA32S:       # %bb.0:678; LA32S-NEXT:    slli.w $a2, $a0, 3679; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 0680; LA32S-NEXT:    lu12i.w $a3, 15681; LA32S-NEXT:    ori $a3, $a3, 4095682; LA32S-NEXT:    sll.w $a3, $a3, $a2683; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 0684; LA32S-NEXT:    sll.w $a1, $a1, $a2685; LA32S-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=1686; LA32S-NEXT:    ll.w $a4, $a0, 0687; LA32S-NEXT:    sub.w $a5, $a4, $a1688; LA32S-NEXT:    xor $a5, $a4, $a5689; LA32S-NEXT:    and $a5, $a5, $a3690; LA32S-NEXT:    xor $a5, $a4, $a5691; LA32S-NEXT:    sc.w $a5, $a0, 0692; LA32S-NEXT:    beq $a5, $zero, .LBB13_1693; LA32S-NEXT:  # %bb.2:694; LA32S-NEXT:    srl.w $a0, $a4, $a2695; LA32S-NEXT:    ret696;697; LA64-LABEL: atomicrmw_sub_i16_acquire:698; LA64:       # %bb.0:699; LA64-NEXT:    slli.d $a2, $a0, 3700; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0701; LA64-NEXT:    lu12i.w $a3, 15702; LA64-NEXT:    ori $a3, $a3, 4095703; LA64-NEXT:    sll.w $a3, $a3, $a2704; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 0705; LA64-NEXT:    sll.w $a1, $a1, $a2706; LA64-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=1707; LA64-NEXT:    ll.w $a4, $a0, 0708; LA64-NEXT:    sub.w $a5, $a4, $a1709; LA64-NEXT:    xor $a5, $a4, $a5710; LA64-NEXT:    and $a5, $a5, $a3711; LA64-NEXT:    xor $a5, $a4, $a5712; LA64-NEXT:    sc.w $a5, $a0, 0713; LA64-NEXT:    beq $a5, $zero, .LBB13_1714; LA64-NEXT:  # %bb.2:715; LA64-NEXT:    srl.w $a0, $a4, $a2716; LA64-NEXT:    ret717  %1 = atomicrmw sub ptr %a, i16 %b acquire718  ret i16 %1719}720 721define i32 @atomicrmw_sub_i32_acquire(ptr %a, i32 %b) nounwind {722; LA32R-LABEL: atomicrmw_sub_i32_acquire:723; LA32R:       # %bb.0:724; LA32R-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=1725; LA32R-NEXT:    ll.w $a2, $a0, 0726; LA32R-NEXT:    sub.w $a3, $a2, $a1727; LA32R-NEXT:    sc.w $a3, $a0, 0728; LA32R-NEXT:    beq $a3, $zero, .LBB14_1729; LA32R-NEXT:  # %bb.2:730; LA32R-NEXT:    move $a0, $a2731; LA32R-NEXT:    ret732;733; LA32S-LABEL: atomicrmw_sub_i32_acquire:734; LA32S:       # %bb.0:735; LA32S-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=1736; LA32S-NEXT:    ll.w $a2, $a0, 0737; LA32S-NEXT:    sub.w $a3, $a2, $a1738; LA32S-NEXT:    sc.w $a3, $a0, 0739; LA32S-NEXT:    beq $a3, $zero, .LBB14_1740; LA32S-NEXT:  # %bb.2:741; LA32S-NEXT:    move $a0, $a2742; LA32S-NEXT:    ret743;744; LA64-LABEL: atomicrmw_sub_i32_acquire:745; LA64:       # %bb.0:746; LA64-NEXT:    sub.w $a2, $zero, $a1747; LA64-NEXT:    amadd_db.w $a1, $a2, $a0748; LA64-NEXT:    move $a0, $a1749; LA64-NEXT:    ret750  %1 = atomicrmw sub ptr %a, i32 %b acquire751  ret i32 %1752}753 754define i64 @atomicrmw_sub_i64_acquire(ptr %a, i64 %b) nounwind {755; LA32R-LABEL: atomicrmw_sub_i64_acquire:756; LA32R:       # %bb.0:757; LA32R-NEXT:    addi.w $sp, $sp, -16758; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill759; LA32R-NEXT:    ori $a3, $zero, 2760; LA32R-NEXT:    bl __atomic_fetch_sub_8761; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload762; LA32R-NEXT:    addi.w $sp, $sp, 16763; LA32R-NEXT:    ret764;765; LA32S-LABEL: atomicrmw_sub_i64_acquire:766; LA32S:       # %bb.0:767; LA32S-NEXT:    addi.w $sp, $sp, -16768; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill769; LA32S-NEXT:    ori $a3, $zero, 2770; LA32S-NEXT:    bl __atomic_fetch_sub_8771; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload772; LA32S-NEXT:    addi.w $sp, $sp, 16773; LA32S-NEXT:    ret774;775; LA64-LABEL: atomicrmw_sub_i64_acquire:776; LA64:       # %bb.0:777; LA64-NEXT:    sub.d $a2, $zero, $a1778; LA64-NEXT:    amadd_db.d $a1, $a2, $a0779; LA64-NEXT:    move $a0, $a1780; LA64-NEXT:    ret781  %1 = atomicrmw sub ptr %a, i64 %b acquire782  ret i64 %1783}784 785define i8 @atomicrmw_nand_i8_acquire(ptr %a, i8 %b) nounwind {786; LA32R-LABEL: atomicrmw_nand_i8_acquire:787; LA32R:       # %bb.0:788; LA32R-NEXT:    addi.w $a2, $zero, -4789; LA32R-NEXT:    and $a2, $a0, $a2790; LA32R-NEXT:    slli.w $a0, $a0, 3791; LA32R-NEXT:    ori $a3, $zero, 255792; LA32R-NEXT:    sll.w $a3, $a3, $a0793; LA32R-NEXT:    andi $a1, $a1, 255794; LA32R-NEXT:    sll.w $a1, $a1, $a0795; LA32R-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=1796; LA32R-NEXT:    ll.w $a4, $a2, 0797; LA32R-NEXT:    and $a5, $a4, $a1798; LA32R-NEXT:    nor $a5, $a5, $zero799; LA32R-NEXT:    xor $a5, $a4, $a5800; LA32R-NEXT:    and $a5, $a5, $a3801; LA32R-NEXT:    xor $a5, $a4, $a5802; LA32R-NEXT:    sc.w $a5, $a2, 0803; LA32R-NEXT:    beq $a5, $zero, .LBB16_1804; LA32R-NEXT:  # %bb.2:805; LA32R-NEXT:    srl.w $a0, $a4, $a0806; LA32R-NEXT:    ret807;808; LA32S-LABEL: atomicrmw_nand_i8_acquire:809; LA32S:       # %bb.0:810; LA32S-NEXT:    slli.w $a2, $a0, 3811; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 0812; LA32S-NEXT:    ori $a3, $zero, 255813; LA32S-NEXT:    sll.w $a3, $a3, $a2814; LA32S-NEXT:    andi $a1, $a1, 255815; LA32S-NEXT:    sll.w $a1, $a1, $a2816; LA32S-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=1817; LA32S-NEXT:    ll.w $a4, $a0, 0818; LA32S-NEXT:    and $a5, $a4, $a1819; LA32S-NEXT:    nor $a5, $a5, $zero820; LA32S-NEXT:    xor $a5, $a4, $a5821; LA32S-NEXT:    and $a5, $a5, $a3822; LA32S-NEXT:    xor $a5, $a4, $a5823; LA32S-NEXT:    sc.w $a5, $a0, 0824; LA32S-NEXT:    beq $a5, $zero, .LBB16_1825; LA32S-NEXT:  # %bb.2:826; LA32S-NEXT:    srl.w $a0, $a4, $a2827; LA32S-NEXT:    ret828;829; LA64-LABEL: atomicrmw_nand_i8_acquire:830; LA64:       # %bb.0:831; LA64-NEXT:    slli.d $a2, $a0, 3832; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0833; LA64-NEXT:    ori $a3, $zero, 255834; LA64-NEXT:    sll.w $a3, $a3, $a2835; LA64-NEXT:    andi $a1, $a1, 255836; LA64-NEXT:    sll.w $a1, $a1, $a2837; LA64-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=1838; LA64-NEXT:    ll.w $a4, $a0, 0839; LA64-NEXT:    and $a5, $a4, $a1840; LA64-NEXT:    nor $a5, $a5, $zero841; LA64-NEXT:    xor $a5, $a4, $a5842; LA64-NEXT:    and $a5, $a5, $a3843; LA64-NEXT:    xor $a5, $a4, $a5844; LA64-NEXT:    sc.w $a5, $a0, 0845; LA64-NEXT:    beq $a5, $zero, .LBB16_1846; LA64-NEXT:  # %bb.2:847; LA64-NEXT:    srl.w $a0, $a4, $a2848; LA64-NEXT:    ret849  %1 = atomicrmw nand ptr %a, i8 %b acquire850  ret i8 %1851}852 853define i16 @atomicrmw_nand_i16_acquire(ptr %a, i16 %b) nounwind {854; LA32R-LABEL: atomicrmw_nand_i16_acquire:855; LA32R:       # %bb.0:856; LA32R-NEXT:    addi.w $a2, $zero, -4857; LA32R-NEXT:    and $a2, $a0, $a2858; LA32R-NEXT:    slli.w $a0, $a0, 3859; LA32R-NEXT:    lu12i.w $a3, 15860; LA32R-NEXT:    ori $a3, $a3, 4095861; LA32R-NEXT:    sll.w $a4, $a3, $a0862; LA32R-NEXT:    and $a1, $a1, $a3863; LA32R-NEXT:    sll.w $a1, $a1, $a0864; LA32R-NEXT:  .LBB17_1: # =>This Inner Loop Header: Depth=1865; LA32R-NEXT:    ll.w $a3, $a2, 0866; LA32R-NEXT:    and $a5, $a3, $a1867; LA32R-NEXT:    nor $a5, $a5, $zero868; LA32R-NEXT:    xor $a5, $a3, $a5869; LA32R-NEXT:    and $a5, $a5, $a4870; LA32R-NEXT:    xor $a5, $a3, $a5871; LA32R-NEXT:    sc.w $a5, $a2, 0872; LA32R-NEXT:    beq $a5, $zero, .LBB17_1873; LA32R-NEXT:  # %bb.2:874; LA32R-NEXT:    srl.w $a0, $a3, $a0875; LA32R-NEXT:    ret876;877; LA32S-LABEL: atomicrmw_nand_i16_acquire:878; LA32S:       # %bb.0:879; LA32S-NEXT:    slli.w $a2, $a0, 3880; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 0881; LA32S-NEXT:    lu12i.w $a3, 15882; LA32S-NEXT:    ori $a3, $a3, 4095883; LA32S-NEXT:    sll.w $a3, $a3, $a2884; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 0885; LA32S-NEXT:    sll.w $a1, $a1, $a2886; LA32S-NEXT:  .LBB17_1: # =>This Inner Loop Header: Depth=1887; LA32S-NEXT:    ll.w $a4, $a0, 0888; LA32S-NEXT:    and $a5, $a4, $a1889; LA32S-NEXT:    nor $a5, $a5, $zero890; LA32S-NEXT:    xor $a5, $a4, $a5891; LA32S-NEXT:    and $a5, $a5, $a3892; LA32S-NEXT:    xor $a5, $a4, $a5893; LA32S-NEXT:    sc.w $a5, $a0, 0894; LA32S-NEXT:    beq $a5, $zero, .LBB17_1895; LA32S-NEXT:  # %bb.2:896; LA32S-NEXT:    srl.w $a0, $a4, $a2897; LA32S-NEXT:    ret898;899; LA64-LABEL: atomicrmw_nand_i16_acquire:900; LA64:       # %bb.0:901; LA64-NEXT:    slli.d $a2, $a0, 3902; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0903; LA64-NEXT:    lu12i.w $a3, 15904; LA64-NEXT:    ori $a3, $a3, 4095905; LA64-NEXT:    sll.w $a3, $a3, $a2906; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 0907; LA64-NEXT:    sll.w $a1, $a1, $a2908; LA64-NEXT:  .LBB17_1: # =>This Inner Loop Header: Depth=1909; LA64-NEXT:    ll.w $a4, $a0, 0910; LA64-NEXT:    and $a5, $a4, $a1911; LA64-NEXT:    nor $a5, $a5, $zero912; LA64-NEXT:    xor $a5, $a4, $a5913; LA64-NEXT:    and $a5, $a5, $a3914; LA64-NEXT:    xor $a5, $a4, $a5915; LA64-NEXT:    sc.w $a5, $a0, 0916; LA64-NEXT:    beq $a5, $zero, .LBB17_1917; LA64-NEXT:  # %bb.2:918; LA64-NEXT:    srl.w $a0, $a4, $a2919; LA64-NEXT:    ret920  %1 = atomicrmw nand ptr %a, i16 %b acquire921  ret i16 %1922}923 924define i32 @atomicrmw_nand_i32_acquire(ptr %a, i32 %b) nounwind {925; LA32R-LABEL: atomicrmw_nand_i32_acquire:926; LA32R:       # %bb.0:927; LA32R-NEXT:  .LBB18_1: # =>This Inner Loop Header: Depth=1928; LA32R-NEXT:    ll.w $a2, $a0, 0929; LA32R-NEXT:    and $a3, $a2, $a1930; LA32R-NEXT:    nor $a3, $a3, $zero931; LA32R-NEXT:    sc.w $a3, $a0, 0932; LA32R-NEXT:    beq $a3, $zero, .LBB18_1933; LA32R-NEXT:  # %bb.2:934; LA32R-NEXT:    move $a0, $a2935; LA32R-NEXT:    ret936;937; LA32S-LABEL: atomicrmw_nand_i32_acquire:938; LA32S:       # %bb.0:939; LA32S-NEXT:  .LBB18_1: # =>This Inner Loop Header: Depth=1940; LA32S-NEXT:    ll.w $a2, $a0, 0941; LA32S-NEXT:    and $a3, $a2, $a1942; LA32S-NEXT:    nor $a3, $a3, $zero943; LA32S-NEXT:    sc.w $a3, $a0, 0944; LA32S-NEXT:    beq $a3, $zero, .LBB18_1945; LA32S-NEXT:  # %bb.2:946; LA32S-NEXT:    move $a0, $a2947; LA32S-NEXT:    ret948;949; LA64-LABEL: atomicrmw_nand_i32_acquire:950; LA64:       # %bb.0:951; LA64-NEXT:  .LBB18_1: # =>This Inner Loop Header: Depth=1952; LA64-NEXT:    ll.w $a2, $a0, 0953; LA64-NEXT:    and $a3, $a2, $a1954; LA64-NEXT:    nor $a3, $a3, $zero955; LA64-NEXT:    sc.w $a3, $a0, 0956; LA64-NEXT:    beq $a3, $zero, .LBB18_1957; LA64-NEXT:  # %bb.2:958; LA64-NEXT:    move $a0, $a2959; LA64-NEXT:    ret960  %1 = atomicrmw nand ptr %a, i32 %b acquire961  ret i32 %1962}963 964define i64 @atomicrmw_nand_i64_acquire(ptr %a, i64 %b) nounwind {965; LA32R-LABEL: atomicrmw_nand_i64_acquire:966; LA32R:       # %bb.0:967; LA32R-NEXT:    addi.w $sp, $sp, -16968; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill969; LA32R-NEXT:    ori $a3, $zero, 2970; LA32R-NEXT:    bl __atomic_fetch_nand_8971; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload972; LA32R-NEXT:    addi.w $sp, $sp, 16973; LA32R-NEXT:    ret974;975; LA32S-LABEL: atomicrmw_nand_i64_acquire:976; LA32S:       # %bb.0:977; LA32S-NEXT:    addi.w $sp, $sp, -16978; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill979; LA32S-NEXT:    ori $a3, $zero, 2980; LA32S-NEXT:    bl __atomic_fetch_nand_8981; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload982; LA32S-NEXT:    addi.w $sp, $sp, 16983; LA32S-NEXT:    ret984;985; LA64-LABEL: atomicrmw_nand_i64_acquire:986; LA64:       # %bb.0:987; LA64-NEXT:  .LBB19_1: # =>This Inner Loop Header: Depth=1988; LA64-NEXT:    ll.d $a2, $a0, 0989; LA64-NEXT:    and $a3, $a2, $a1990; LA64-NEXT:    nor $a3, $a3, $zero991; LA64-NEXT:    sc.d $a3, $a0, 0992; LA64-NEXT:    beq $a3, $zero, .LBB19_1993; LA64-NEXT:  # %bb.2:994; LA64-NEXT:    move $a0, $a2995; LA64-NEXT:    ret996  %1 = atomicrmw nand ptr %a, i64 %b acquire997  ret i64 %1998}999 1000define i8 @atomicrmw_and_i8_acquire(ptr %a, i8 %b) nounwind {1001; LA32R-LABEL: atomicrmw_and_i8_acquire:1002; LA32R:       # %bb.0:1003; LA32R-NEXT:    addi.w $a2, $zero, -41004; LA32R-NEXT:    and $a2, $a0, $a21005; LA32R-NEXT:    slli.w $a0, $a0, 31006; LA32R-NEXT:    ori $a3, $zero, 2551007; LA32R-NEXT:    sll.w $a3, $a3, $a01008; LA32R-NEXT:    andi $a1, $a1, 2551009; LA32R-NEXT:    sll.w $a1, $a1, $a01010; LA32R-NEXT:    orn $a1, $a1, $a31011; LA32R-NEXT:  .LBB20_1: # =>This Inner Loop Header: Depth=11012; LA32R-NEXT:    ll.w $a3, $a2, 01013; LA32R-NEXT:    and $a4, $a3, $a11014; LA32R-NEXT:    sc.w $a4, $a2, 01015; LA32R-NEXT:    beq $a4, $zero, .LBB20_11016; LA32R-NEXT:  # %bb.2:1017; LA32R-NEXT:    srl.w $a0, $a3, $a01018; LA32R-NEXT:    ret1019;1020; LA32S-LABEL: atomicrmw_and_i8_acquire:1021; LA32S:       # %bb.0:1022; LA32S-NEXT:    slli.w $a2, $a0, 31023; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 01024; LA32S-NEXT:    ori $a3, $zero, 2551025; LA32S-NEXT:    sll.w $a3, $a3, $a21026; LA32S-NEXT:    andi $a1, $a1, 2551027; LA32S-NEXT:    sll.w $a1, $a1, $a21028; LA32S-NEXT:    orn $a1, $a1, $a31029; LA32S-NEXT:  .LBB20_1: # =>This Inner Loop Header: Depth=11030; LA32S-NEXT:    ll.w $a3, $a0, 01031; LA32S-NEXT:    and $a4, $a3, $a11032; LA32S-NEXT:    sc.w $a4, $a0, 01033; LA32S-NEXT:    beq $a4, $zero, .LBB20_11034; LA32S-NEXT:  # %bb.2:1035; LA32S-NEXT:    srl.w $a0, $a3, $a21036; LA32S-NEXT:    ret1037;1038; LA64-LABEL: atomicrmw_and_i8_acquire:1039; LA64:       # %bb.0:1040; LA64-NEXT:    slli.d $a2, $a0, 31041; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01042; LA64-NEXT:    ori $a3, $zero, 2551043; LA64-NEXT:    sll.w $a3, $a3, $a21044; LA64-NEXT:    andi $a1, $a1, 2551045; LA64-NEXT:    sll.w $a1, $a1, $a21046; LA64-NEXT:    orn $a1, $a1, $a31047; LA64-NEXT:    amand_db.w $a3, $a1, $a01048; LA64-NEXT:    srl.w $a0, $a3, $a21049; LA64-NEXT:    ret1050  %1 = atomicrmw and ptr %a, i8 %b acquire1051  ret i8 %11052}1053 1054define i16 @atomicrmw_and_i16_acquire(ptr %a, i16 %b) nounwind {1055; LA32R-LABEL: atomicrmw_and_i16_acquire:1056; LA32R:       # %bb.0:1057; LA32R-NEXT:    addi.w $a2, $zero, -41058; LA32R-NEXT:    and $a2, $a0, $a21059; LA32R-NEXT:    slli.w $a0, $a0, 31060; LA32R-NEXT:    lu12i.w $a3, 151061; LA32R-NEXT:    ori $a3, $a3, 40951062; LA32R-NEXT:    sll.w $a4, $a3, $a01063; LA32R-NEXT:    and $a1, $a1, $a31064; LA32R-NEXT:    sll.w $a1, $a1, $a01065; LA32R-NEXT:    orn $a1, $a1, $a41066; LA32R-NEXT:  .LBB21_1: # =>This Inner Loop Header: Depth=11067; LA32R-NEXT:    ll.w $a3, $a2, 01068; LA32R-NEXT:    and $a4, $a3, $a11069; LA32R-NEXT:    sc.w $a4, $a2, 01070; LA32R-NEXT:    beq $a4, $zero, .LBB21_11071; LA32R-NEXT:  # %bb.2:1072; LA32R-NEXT:    srl.w $a0, $a3, $a01073; LA32R-NEXT:    ret1074;1075; LA32S-LABEL: atomicrmw_and_i16_acquire:1076; LA32S:       # %bb.0:1077; LA32S-NEXT:    slli.w $a2, $a0, 31078; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 01079; LA32S-NEXT:    lu12i.w $a3, 151080; LA32S-NEXT:    ori $a3, $a3, 40951081; LA32S-NEXT:    sll.w $a3, $a3, $a21082; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 01083; LA32S-NEXT:    sll.w $a1, $a1, $a21084; LA32S-NEXT:    orn $a1, $a1, $a31085; LA32S-NEXT:  .LBB21_1: # =>This Inner Loop Header: Depth=11086; LA32S-NEXT:    ll.w $a3, $a0, 01087; LA32S-NEXT:    and $a4, $a3, $a11088; LA32S-NEXT:    sc.w $a4, $a0, 01089; LA32S-NEXT:    beq $a4, $zero, .LBB21_11090; LA32S-NEXT:  # %bb.2:1091; LA32S-NEXT:    srl.w $a0, $a3, $a21092; LA32S-NEXT:    ret1093;1094; LA64-LABEL: atomicrmw_and_i16_acquire:1095; LA64:       # %bb.0:1096; LA64-NEXT:    slli.d $a2, $a0, 31097; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01098; LA64-NEXT:    lu12i.w $a3, 151099; LA64-NEXT:    ori $a3, $a3, 40951100; LA64-NEXT:    sll.w $a3, $a3, $a21101; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 01102; LA64-NEXT:    sll.w $a1, $a1, $a21103; LA64-NEXT:    orn $a1, $a1, $a31104; LA64-NEXT:    amand_db.w $a3, $a1, $a01105; LA64-NEXT:    srl.w $a0, $a3, $a21106; LA64-NEXT:    ret1107  %1 = atomicrmw and ptr %a, i16 %b acquire1108  ret i16 %11109}1110 1111define i32 @atomicrmw_and_i32_acquire(ptr %a, i32 %b) nounwind {1112; LA32R-LABEL: atomicrmw_and_i32_acquire:1113; LA32R:       # %bb.0:1114; LA32R-NEXT:  .LBB22_1: # =>This Inner Loop Header: Depth=11115; LA32R-NEXT:    ll.w $a2, $a0, 01116; LA32R-NEXT:    and $a3, $a2, $a11117; LA32R-NEXT:    sc.w $a3, $a0, 01118; LA32R-NEXT:    beq $a3, $zero, .LBB22_11119; LA32R-NEXT:  # %bb.2:1120; LA32R-NEXT:    move $a0, $a21121; LA32R-NEXT:    ret1122;1123; LA32S-LABEL: atomicrmw_and_i32_acquire:1124; LA32S:       # %bb.0:1125; LA32S-NEXT:  .LBB22_1: # =>This Inner Loop Header: Depth=11126; LA32S-NEXT:    ll.w $a2, $a0, 01127; LA32S-NEXT:    and $a3, $a2, $a11128; LA32S-NEXT:    sc.w $a3, $a0, 01129; LA32S-NEXT:    beq $a3, $zero, .LBB22_11130; LA32S-NEXT:  # %bb.2:1131; LA32S-NEXT:    move $a0, $a21132; LA32S-NEXT:    ret1133;1134; LA64-LABEL: atomicrmw_and_i32_acquire:1135; LA64:       # %bb.0:1136; LA64-NEXT:    amand_db.w $a2, $a1, $a01137; LA64-NEXT:    move $a0, $a21138; LA64-NEXT:    ret1139  %1 = atomicrmw and ptr %a, i32 %b acquire1140  ret i32 %11141}1142 1143define i64 @atomicrmw_and_i64_acquire(ptr %a, i64 %b) nounwind {1144; LA32R-LABEL: atomicrmw_and_i64_acquire:1145; LA32R:       # %bb.0:1146; LA32R-NEXT:    addi.w $sp, $sp, -161147; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill1148; LA32R-NEXT:    ori $a3, $zero, 21149; LA32R-NEXT:    bl __atomic_fetch_and_81150; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload1151; LA32R-NEXT:    addi.w $sp, $sp, 161152; LA32R-NEXT:    ret1153;1154; LA32S-LABEL: atomicrmw_and_i64_acquire:1155; LA32S:       # %bb.0:1156; LA32S-NEXT:    addi.w $sp, $sp, -161157; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill1158; LA32S-NEXT:    ori $a3, $zero, 21159; LA32S-NEXT:    bl __atomic_fetch_and_81160; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload1161; LA32S-NEXT:    addi.w $sp, $sp, 161162; LA32S-NEXT:    ret1163;1164; LA64-LABEL: atomicrmw_and_i64_acquire:1165; LA64:       # %bb.0:1166; LA64-NEXT:    amand_db.d $a2, $a1, $a01167; LA64-NEXT:    move $a0, $a21168; LA64-NEXT:    ret1169  %1 = atomicrmw and ptr %a, i64 %b acquire1170  ret i64 %11171}1172 1173define i8 @atomicrmw_or_i8_acquire(ptr %a, i8 %b) nounwind {1174; LA32R-LABEL: atomicrmw_or_i8_acquire:1175; LA32R:       # %bb.0:1176; LA32R-NEXT:    addi.w $a2, $zero, -41177; LA32R-NEXT:    and $a2, $a0, $a21178; LA32R-NEXT:    slli.w $a0, $a0, 31179; LA32R-NEXT:    andi $a1, $a1, 2551180; LA32R-NEXT:    sll.w $a1, $a1, $a01181; LA32R-NEXT:  .LBB24_1: # =>This Inner Loop Header: Depth=11182; LA32R-NEXT:    ll.w $a3, $a2, 01183; LA32R-NEXT:    or $a4, $a3, $a11184; LA32R-NEXT:    sc.w $a4, $a2, 01185; LA32R-NEXT:    beq $a4, $zero, .LBB24_11186; LA32R-NEXT:  # %bb.2:1187; LA32R-NEXT:    srl.w $a0, $a3, $a01188; LA32R-NEXT:    ret1189;1190; LA32S-LABEL: atomicrmw_or_i8_acquire:1191; LA32S:       # %bb.0:1192; LA32S-NEXT:    slli.w $a2, $a0, 31193; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 01194; LA32S-NEXT:    andi $a1, $a1, 2551195; LA32S-NEXT:    sll.w $a1, $a1, $a21196; LA32S-NEXT:  .LBB24_1: # =>This Inner Loop Header: Depth=11197; LA32S-NEXT:    ll.w $a3, $a0, 01198; LA32S-NEXT:    or $a4, $a3, $a11199; LA32S-NEXT:    sc.w $a4, $a0, 01200; LA32S-NEXT:    beq $a4, $zero, .LBB24_11201; LA32S-NEXT:  # %bb.2:1202; LA32S-NEXT:    srl.w $a0, $a3, $a21203; LA32S-NEXT:    ret1204;1205; LA64-LABEL: atomicrmw_or_i8_acquire:1206; LA64:       # %bb.0:1207; LA64-NEXT:    slli.d $a2, $a0, 31208; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01209; LA64-NEXT:    andi $a1, $a1, 2551210; LA64-NEXT:    sll.w $a1, $a1, $a21211; LA64-NEXT:    amor_db.w $a3, $a1, $a01212; LA64-NEXT:    srl.w $a0, $a3, $a21213; LA64-NEXT:    ret1214  %1 = atomicrmw or ptr %a, i8 %b acquire1215  ret i8 %11216}1217 1218define i16 @atomicrmw_or_i16_acquire(ptr %a, i16 %b) nounwind {1219; LA32R-LABEL: atomicrmw_or_i16_acquire:1220; LA32R:       # %bb.0:1221; LA32R-NEXT:    addi.w $a2, $zero, -41222; LA32R-NEXT:    and $a2, $a0, $a21223; LA32R-NEXT:    slli.w $a0, $a0, 31224; LA32R-NEXT:    lu12i.w $a3, 151225; LA32R-NEXT:    ori $a3, $a3, 40951226; LA32R-NEXT:    and $a1, $a1, $a31227; LA32R-NEXT:    sll.w $a1, $a1, $a01228; LA32R-NEXT:  .LBB25_1: # =>This Inner Loop Header: Depth=11229; LA32R-NEXT:    ll.w $a3, $a2, 01230; LA32R-NEXT:    or $a4, $a3, $a11231; LA32R-NEXT:    sc.w $a4, $a2, 01232; LA32R-NEXT:    beq $a4, $zero, .LBB25_11233; LA32R-NEXT:  # %bb.2:1234; LA32R-NEXT:    srl.w $a0, $a3, $a01235; LA32R-NEXT:    ret1236;1237; LA32S-LABEL: atomicrmw_or_i16_acquire:1238; LA32S:       # %bb.0:1239; LA32S-NEXT:    slli.w $a2, $a0, 31240; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 01241; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 01242; LA32S-NEXT:    sll.w $a1, $a1, $a21243; LA32S-NEXT:  .LBB25_1: # =>This Inner Loop Header: Depth=11244; LA32S-NEXT:    ll.w $a3, $a0, 01245; LA32S-NEXT:    or $a4, $a3, $a11246; LA32S-NEXT:    sc.w $a4, $a0, 01247; LA32S-NEXT:    beq $a4, $zero, .LBB25_11248; LA32S-NEXT:  # %bb.2:1249; LA32S-NEXT:    srl.w $a0, $a3, $a21250; LA32S-NEXT:    ret1251;1252; LA64-LABEL: atomicrmw_or_i16_acquire:1253; LA64:       # %bb.0:1254; LA64-NEXT:    slli.d $a2, $a0, 31255; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01256; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 01257; LA64-NEXT:    sll.w $a1, $a1, $a21258; LA64-NEXT:    amor_db.w $a3, $a1, $a01259; LA64-NEXT:    srl.w $a0, $a3, $a21260; LA64-NEXT:    ret1261  %1 = atomicrmw or ptr %a, i16 %b acquire1262  ret i16 %11263}1264 1265define i32 @atomicrmw_or_i32_acquire(ptr %a, i32 %b) nounwind {1266; LA32R-LABEL: atomicrmw_or_i32_acquire:1267; LA32R:       # %bb.0:1268; LA32R-NEXT:  .LBB26_1: # =>This Inner Loop Header: Depth=11269; LA32R-NEXT:    ll.w $a2, $a0, 01270; LA32R-NEXT:    or $a3, $a2, $a11271; LA32R-NEXT:    sc.w $a3, $a0, 01272; LA32R-NEXT:    beq $a3, $zero, .LBB26_11273; LA32R-NEXT:  # %bb.2:1274; LA32R-NEXT:    move $a0, $a21275; LA32R-NEXT:    ret1276;1277; LA32S-LABEL: atomicrmw_or_i32_acquire:1278; LA32S:       # %bb.0:1279; LA32S-NEXT:  .LBB26_1: # =>This Inner Loop Header: Depth=11280; LA32S-NEXT:    ll.w $a2, $a0, 01281; LA32S-NEXT:    or $a3, $a2, $a11282; LA32S-NEXT:    sc.w $a3, $a0, 01283; LA32S-NEXT:    beq $a3, $zero, .LBB26_11284; LA32S-NEXT:  # %bb.2:1285; LA32S-NEXT:    move $a0, $a21286; LA32S-NEXT:    ret1287;1288; LA64-LABEL: atomicrmw_or_i32_acquire:1289; LA64:       # %bb.0:1290; LA64-NEXT:    amor_db.w $a2, $a1, $a01291; LA64-NEXT:    move $a0, $a21292; LA64-NEXT:    ret1293  %1 = atomicrmw or ptr %a, i32 %b acquire1294  ret i32 %11295}1296 1297define i64 @atomicrmw_or_i64_acquire(ptr %a, i64 %b) nounwind {1298; LA32R-LABEL: atomicrmw_or_i64_acquire:1299; LA32R:       # %bb.0:1300; LA32R-NEXT:    addi.w $sp, $sp, -161301; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill1302; LA32R-NEXT:    ori $a3, $zero, 21303; LA32R-NEXT:    bl __atomic_fetch_or_81304; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload1305; LA32R-NEXT:    addi.w $sp, $sp, 161306; LA32R-NEXT:    ret1307;1308; LA32S-LABEL: atomicrmw_or_i64_acquire:1309; LA32S:       # %bb.0:1310; LA32S-NEXT:    addi.w $sp, $sp, -161311; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill1312; LA32S-NEXT:    ori $a3, $zero, 21313; LA32S-NEXT:    bl __atomic_fetch_or_81314; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload1315; LA32S-NEXT:    addi.w $sp, $sp, 161316; LA32S-NEXT:    ret1317;1318; LA64-LABEL: atomicrmw_or_i64_acquire:1319; LA64:       # %bb.0:1320; LA64-NEXT:    amor_db.d $a2, $a1, $a01321; LA64-NEXT:    move $a0, $a21322; LA64-NEXT:    ret1323  %1 = atomicrmw or ptr %a, i64 %b acquire1324  ret i64 %11325}1326 1327define i8 @atomicrmw_xor_i8_acquire(ptr %a, i8 %b) nounwind {1328; LA32R-LABEL: atomicrmw_xor_i8_acquire:1329; LA32R:       # %bb.0:1330; LA32R-NEXT:    addi.w $a2, $zero, -41331; LA32R-NEXT:    and $a2, $a0, $a21332; LA32R-NEXT:    slli.w $a0, $a0, 31333; LA32R-NEXT:    andi $a1, $a1, 2551334; LA32R-NEXT:    sll.w $a1, $a1, $a01335; LA32R-NEXT:  .LBB28_1: # =>This Inner Loop Header: Depth=11336; LA32R-NEXT:    ll.w $a3, $a2, 01337; LA32R-NEXT:    xor $a4, $a3, $a11338; LA32R-NEXT:    sc.w $a4, $a2, 01339; LA32R-NEXT:    beq $a4, $zero, .LBB28_11340; LA32R-NEXT:  # %bb.2:1341; LA32R-NEXT:    srl.w $a0, $a3, $a01342; LA32R-NEXT:    ret1343;1344; LA32S-LABEL: atomicrmw_xor_i8_acquire:1345; LA32S:       # %bb.0:1346; LA32S-NEXT:    slli.w $a2, $a0, 31347; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 01348; LA32S-NEXT:    andi $a1, $a1, 2551349; LA32S-NEXT:    sll.w $a1, $a1, $a21350; LA32S-NEXT:  .LBB28_1: # =>This Inner Loop Header: Depth=11351; LA32S-NEXT:    ll.w $a3, $a0, 01352; LA32S-NEXT:    xor $a4, $a3, $a11353; LA32S-NEXT:    sc.w $a4, $a0, 01354; LA32S-NEXT:    beq $a4, $zero, .LBB28_11355; LA32S-NEXT:  # %bb.2:1356; LA32S-NEXT:    srl.w $a0, $a3, $a21357; LA32S-NEXT:    ret1358;1359; LA64-LABEL: atomicrmw_xor_i8_acquire:1360; LA64:       # %bb.0:1361; LA64-NEXT:    slli.d $a2, $a0, 31362; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01363; LA64-NEXT:    andi $a1, $a1, 2551364; LA64-NEXT:    sll.w $a1, $a1, $a21365; LA64-NEXT:    amxor_db.w $a3, $a1, $a01366; LA64-NEXT:    srl.w $a0, $a3, $a21367; LA64-NEXT:    ret1368  %1 = atomicrmw xor ptr %a, i8 %b acquire1369  ret i8 %11370}1371 1372define i16 @atomicrmw_xor_i16_acquire(ptr %a, i16 %b) nounwind {1373; LA32R-LABEL: atomicrmw_xor_i16_acquire:1374; LA32R:       # %bb.0:1375; LA32R-NEXT:    addi.w $a2, $zero, -41376; LA32R-NEXT:    and $a2, $a0, $a21377; LA32R-NEXT:    slli.w $a0, $a0, 31378; LA32R-NEXT:    lu12i.w $a3, 151379; LA32R-NEXT:    ori $a3, $a3, 40951380; LA32R-NEXT:    and $a1, $a1, $a31381; LA32R-NEXT:    sll.w $a1, $a1, $a01382; LA32R-NEXT:  .LBB29_1: # =>This Inner Loop Header: Depth=11383; LA32R-NEXT:    ll.w $a3, $a2, 01384; LA32R-NEXT:    xor $a4, $a3, $a11385; LA32R-NEXT:    sc.w $a4, $a2, 01386; LA32R-NEXT:    beq $a4, $zero, .LBB29_11387; LA32R-NEXT:  # %bb.2:1388; LA32R-NEXT:    srl.w $a0, $a3, $a01389; LA32R-NEXT:    ret1390;1391; LA32S-LABEL: atomicrmw_xor_i16_acquire:1392; LA32S:       # %bb.0:1393; LA32S-NEXT:    slli.w $a2, $a0, 31394; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 01395; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 01396; LA32S-NEXT:    sll.w $a1, $a1, $a21397; LA32S-NEXT:  .LBB29_1: # =>This Inner Loop Header: Depth=11398; LA32S-NEXT:    ll.w $a3, $a0, 01399; LA32S-NEXT:    xor $a4, $a3, $a11400; LA32S-NEXT:    sc.w $a4, $a0, 01401; LA32S-NEXT:    beq $a4, $zero, .LBB29_11402; LA32S-NEXT:  # %bb.2:1403; LA32S-NEXT:    srl.w $a0, $a3, $a21404; LA32S-NEXT:    ret1405;1406; LA64-LABEL: atomicrmw_xor_i16_acquire:1407; LA64:       # %bb.0:1408; LA64-NEXT:    slli.d $a2, $a0, 31409; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01410; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 01411; LA64-NEXT:    sll.w $a1, $a1, $a21412; LA64-NEXT:    amxor_db.w $a3, $a1, $a01413; LA64-NEXT:    srl.w $a0, $a3, $a21414; LA64-NEXT:    ret1415  %1 = atomicrmw xor ptr %a, i16 %b acquire1416  ret i16 %11417}1418 1419define i32 @atomicrmw_xor_i32_acquire(ptr %a, i32 %b) nounwind {1420; LA32R-LABEL: atomicrmw_xor_i32_acquire:1421; LA32R:       # %bb.0:1422; LA32R-NEXT:  .LBB30_1: # =>This Inner Loop Header: Depth=11423; LA32R-NEXT:    ll.w $a2, $a0, 01424; LA32R-NEXT:    xor $a3, $a2, $a11425; LA32R-NEXT:    sc.w $a3, $a0, 01426; LA32R-NEXT:    beq $a3, $zero, .LBB30_11427; LA32R-NEXT:  # %bb.2:1428; LA32R-NEXT:    move $a0, $a21429; LA32R-NEXT:    ret1430;1431; LA32S-LABEL: atomicrmw_xor_i32_acquire:1432; LA32S:       # %bb.0:1433; LA32S-NEXT:  .LBB30_1: # =>This Inner Loop Header: Depth=11434; LA32S-NEXT:    ll.w $a2, $a0, 01435; LA32S-NEXT:    xor $a3, $a2, $a11436; LA32S-NEXT:    sc.w $a3, $a0, 01437; LA32S-NEXT:    beq $a3, $zero, .LBB30_11438; LA32S-NEXT:  # %bb.2:1439; LA32S-NEXT:    move $a0, $a21440; LA32S-NEXT:    ret1441;1442; LA64-LABEL: atomicrmw_xor_i32_acquire:1443; LA64:       # %bb.0:1444; LA64-NEXT:    amxor_db.w $a2, $a1, $a01445; LA64-NEXT:    move $a0, $a21446; LA64-NEXT:    ret1447  %1 = atomicrmw xor ptr %a, i32 %b acquire1448  ret i32 %11449}1450 1451define i64 @atomicrmw_xor_i64_acquire(ptr %a, i64 %b) nounwind {1452; LA32R-LABEL: atomicrmw_xor_i64_acquire:1453; LA32R:       # %bb.0:1454; LA32R-NEXT:    addi.w $sp, $sp, -161455; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill1456; LA32R-NEXT:    ori $a3, $zero, 21457; LA32R-NEXT:    bl __atomic_fetch_xor_81458; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload1459; LA32R-NEXT:    addi.w $sp, $sp, 161460; LA32R-NEXT:    ret1461;1462; LA32S-LABEL: atomicrmw_xor_i64_acquire:1463; LA32S:       # %bb.0:1464; LA32S-NEXT:    addi.w $sp, $sp, -161465; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill1466; LA32S-NEXT:    ori $a3, $zero, 21467; LA32S-NEXT:    bl __atomic_fetch_xor_81468; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload1469; LA32S-NEXT:    addi.w $sp, $sp, 161470; LA32S-NEXT:    ret1471;1472; LA64-LABEL: atomicrmw_xor_i64_acquire:1473; LA64:       # %bb.0:1474; LA64-NEXT:    amxor_db.d $a2, $a1, $a01475; LA64-NEXT:    move $a0, $a21476; LA64-NEXT:    ret1477  %1 = atomicrmw xor ptr %a, i64 %b acquire1478  ret i64 %11479}1480 1481define i8 @atomicrmw_xchg_i8_release(ptr %a, i8 %b) nounwind {1482; LA32R-LABEL: atomicrmw_xchg_i8_release:1483; LA32R:       # %bb.0:1484; LA32R-NEXT:    addi.w $a2, $zero, -41485; LA32R-NEXT:    and $a2, $a0, $a21486; LA32R-NEXT:    slli.w $a0, $a0, 31487; LA32R-NEXT:    ori $a3, $zero, 2551488; LA32R-NEXT:    sll.w $a3, $a3, $a01489; LA32R-NEXT:    andi $a1, $a1, 2551490; LA32R-NEXT:    sll.w $a1, $a1, $a01491; LA32R-NEXT:  .LBB32_1: # =>This Inner Loop Header: Depth=11492; LA32R-NEXT:    ll.w $a4, $a2, 01493; LA32R-NEXT:    addi.w $a5, $a1, 01494; LA32R-NEXT:    xor $a5, $a4, $a51495; LA32R-NEXT:    and $a5, $a5, $a31496; LA32R-NEXT:    xor $a5, $a4, $a51497; LA32R-NEXT:    sc.w $a5, $a2, 01498; LA32R-NEXT:    beq $a5, $zero, .LBB32_11499; LA32R-NEXT:  # %bb.2:1500; LA32R-NEXT:    srl.w $a0, $a4, $a01501; LA32R-NEXT:    ret1502;1503; LA32S-LABEL: atomicrmw_xchg_i8_release:1504; LA32S:       # %bb.0:1505; LA32S-NEXT:    slli.w $a2, $a0, 31506; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 01507; LA32S-NEXT:    ori $a3, $zero, 2551508; LA32S-NEXT:    sll.w $a3, $a3, $a21509; LA32S-NEXT:    andi $a1, $a1, 2551510; LA32S-NEXT:    sll.w $a1, $a1, $a21511; LA32S-NEXT:  .LBB32_1: # =>This Inner Loop Header: Depth=11512; LA32S-NEXT:    ll.w $a4, $a0, 01513; LA32S-NEXT:    addi.w $a5, $a1, 01514; LA32S-NEXT:    xor $a5, $a4, $a51515; LA32S-NEXT:    and $a5, $a5, $a31516; LA32S-NEXT:    xor $a5, $a4, $a51517; LA32S-NEXT:    sc.w $a5, $a0, 01518; LA32S-NEXT:    beq $a5, $zero, .LBB32_11519; LA32S-NEXT:  # %bb.2:1520; LA32S-NEXT:    srl.w $a0, $a4, $a21521; LA32S-NEXT:    ret1522;1523; LA64-LABEL: atomicrmw_xchg_i8_release:1524; LA64:       # %bb.0:1525; LA64-NEXT:    slli.d $a2, $a0, 31526; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01527; LA64-NEXT:    ori $a3, $zero, 2551528; LA64-NEXT:    sll.w $a3, $a3, $a21529; LA64-NEXT:    andi $a1, $a1, 2551530; LA64-NEXT:    sll.w $a1, $a1, $a21531; LA64-NEXT:  .LBB32_1: # =>This Inner Loop Header: Depth=11532; LA64-NEXT:    ll.w $a4, $a0, 01533; LA64-NEXT:    addi.w $a5, $a1, 01534; LA64-NEXT:    xor $a5, $a4, $a51535; LA64-NEXT:    and $a5, $a5, $a31536; LA64-NEXT:    xor $a5, $a4, $a51537; LA64-NEXT:    sc.w $a5, $a0, 01538; LA64-NEXT:    beq $a5, $zero, .LBB32_11539; LA64-NEXT:  # %bb.2:1540; LA64-NEXT:    srl.w $a0, $a4, $a21541; LA64-NEXT:    ret1542  %1 = atomicrmw xchg ptr %a, i8 %b release1543  ret i8 %11544}1545 1546define i8 @atomicrmw_xchg_0_i8_release(ptr %a) nounwind {1547; LA32R-LABEL: atomicrmw_xchg_0_i8_release:1548; LA32R:       # %bb.0:1549; LA32R-NEXT:    addi.w $a1, $zero, -41550; LA32R-NEXT:    and $a1, $a0, $a11551; LA32R-NEXT:    slli.w $a0, $a0, 31552; LA32R-NEXT:    ori $a2, $zero, 2551553; LA32R-NEXT:    sll.w $a2, $a2, $a01554; LA32R-NEXT:    nor $a2, $a2, $zero1555; LA32R-NEXT:  .LBB33_1: # =>This Inner Loop Header: Depth=11556; LA32R-NEXT:    ll.w $a3, $a1, 01557; LA32R-NEXT:    and $a4, $a3, $a21558; LA32R-NEXT:    sc.w $a4, $a1, 01559; LA32R-NEXT:    beq $a4, $zero, .LBB33_11560; LA32R-NEXT:  # %bb.2:1561; LA32R-NEXT:    srl.w $a0, $a3, $a01562; LA32R-NEXT:    ret1563;1564; LA32S-LABEL: atomicrmw_xchg_0_i8_release:1565; LA32S:       # %bb.0:1566; LA32S-NEXT:    slli.w $a1, $a0, 31567; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 01568; LA32S-NEXT:    ori $a2, $zero, 2551569; LA32S-NEXT:    sll.w $a2, $a2, $a11570; LA32S-NEXT:    nor $a2, $a2, $zero1571; LA32S-NEXT:  .LBB33_1: # =>This Inner Loop Header: Depth=11572; LA32S-NEXT:    ll.w $a3, $a0, 01573; LA32S-NEXT:    and $a4, $a3, $a21574; LA32S-NEXT:    sc.w $a4, $a0, 01575; LA32S-NEXT:    beq $a4, $zero, .LBB33_11576; LA32S-NEXT:  # %bb.2:1577; LA32S-NEXT:    srl.w $a0, $a3, $a11578; LA32S-NEXT:    ret1579;1580; LA64-LABEL: atomicrmw_xchg_0_i8_release:1581; LA64:       # %bb.0:1582; LA64-NEXT:    slli.d $a1, $a0, 31583; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01584; LA64-NEXT:    ori $a2, $zero, 2551585; LA64-NEXT:    sll.w $a2, $a2, $a11586; LA64-NEXT:    nor $a2, $a2, $zero1587; LA64-NEXT:    amand_db.w $a3, $a2, $a01588; LA64-NEXT:    srl.w $a0, $a3, $a11589; LA64-NEXT:    ret1590  %1 = atomicrmw xchg ptr %a, i8 0 release1591  ret i8 %11592}1593 1594define i8 @atomicrmw_xchg_minus_1_i8_release(ptr %a) nounwind {1595; LA32R-LABEL: atomicrmw_xchg_minus_1_i8_release:1596; LA32R:       # %bb.0:1597; LA32R-NEXT:    addi.w $a1, $zero, -41598; LA32R-NEXT:    and $a1, $a0, $a11599; LA32R-NEXT:    slli.w $a0, $a0, 31600; LA32R-NEXT:    ori $a2, $zero, 2551601; LA32R-NEXT:    sll.w $a2, $a2, $a01602; LA32R-NEXT:  .LBB34_1: # =>This Inner Loop Header: Depth=11603; LA32R-NEXT:    ll.w $a3, $a1, 01604; LA32R-NEXT:    or $a4, $a3, $a21605; LA32R-NEXT:    sc.w $a4, $a1, 01606; LA32R-NEXT:    beq $a4, $zero, .LBB34_11607; LA32R-NEXT:  # %bb.2:1608; LA32R-NEXT:    srl.w $a0, $a3, $a01609; LA32R-NEXT:    ret1610;1611; LA32S-LABEL: atomicrmw_xchg_minus_1_i8_release:1612; LA32S:       # %bb.0:1613; LA32S-NEXT:    slli.w $a1, $a0, 31614; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 01615; LA32S-NEXT:    ori $a2, $zero, 2551616; LA32S-NEXT:    sll.w $a2, $a2, $a11617; LA32S-NEXT:  .LBB34_1: # =>This Inner Loop Header: Depth=11618; LA32S-NEXT:    ll.w $a3, $a0, 01619; LA32S-NEXT:    or $a4, $a3, $a21620; LA32S-NEXT:    sc.w $a4, $a0, 01621; LA32S-NEXT:    beq $a4, $zero, .LBB34_11622; LA32S-NEXT:  # %bb.2:1623; LA32S-NEXT:    srl.w $a0, $a3, $a11624; LA32S-NEXT:    ret1625;1626; LA64-LABEL: atomicrmw_xchg_minus_1_i8_release:1627; LA64:       # %bb.0:1628; LA64-NEXT:    slli.d $a1, $a0, 31629; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01630; LA64-NEXT:    ori $a2, $zero, 2551631; LA64-NEXT:    sll.w $a2, $a2, $a11632; LA64-NEXT:    amor_db.w $a3, $a2, $a01633; LA64-NEXT:    srl.w $a0, $a3, $a11634; LA64-NEXT:    ret1635  %1 = atomicrmw xchg ptr %a, i8 -1 release1636  ret i8 %11637}1638 1639define i16 @atomicrmw_xchg_i16_release(ptr %a, i16 %b) nounwind {1640; LA32R-LABEL: atomicrmw_xchg_i16_release:1641; LA32R:       # %bb.0:1642; LA32R-NEXT:    addi.w $a2, $zero, -41643; LA32R-NEXT:    and $a2, $a0, $a21644; LA32R-NEXT:    slli.w $a0, $a0, 31645; LA32R-NEXT:    lu12i.w $a3, 151646; LA32R-NEXT:    ori $a3, $a3, 40951647; LA32R-NEXT:    sll.w $a4, $a3, $a01648; LA32R-NEXT:    and $a1, $a1, $a31649; LA32R-NEXT:    sll.w $a1, $a1, $a01650; LA32R-NEXT:  .LBB35_1: # =>This Inner Loop Header: Depth=11651; LA32R-NEXT:    ll.w $a3, $a2, 01652; LA32R-NEXT:    addi.w $a5, $a1, 01653; LA32R-NEXT:    xor $a5, $a3, $a51654; LA32R-NEXT:    and $a5, $a5, $a41655; LA32R-NEXT:    xor $a5, $a3, $a51656; LA32R-NEXT:    sc.w $a5, $a2, 01657; LA32R-NEXT:    beq $a5, $zero, .LBB35_11658; LA32R-NEXT:  # %bb.2:1659; LA32R-NEXT:    srl.w $a0, $a3, $a01660; LA32R-NEXT:    ret1661;1662; LA32S-LABEL: atomicrmw_xchg_i16_release:1663; LA32S:       # %bb.0:1664; LA32S-NEXT:    slli.w $a2, $a0, 31665; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 01666; LA32S-NEXT:    lu12i.w $a3, 151667; LA32S-NEXT:    ori $a3, $a3, 40951668; LA32S-NEXT:    sll.w $a3, $a3, $a21669; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 01670; LA32S-NEXT:    sll.w $a1, $a1, $a21671; LA32S-NEXT:  .LBB35_1: # =>This Inner Loop Header: Depth=11672; LA32S-NEXT:    ll.w $a4, $a0, 01673; LA32S-NEXT:    addi.w $a5, $a1, 01674; LA32S-NEXT:    xor $a5, $a4, $a51675; LA32S-NEXT:    and $a5, $a5, $a31676; LA32S-NEXT:    xor $a5, $a4, $a51677; LA32S-NEXT:    sc.w $a5, $a0, 01678; LA32S-NEXT:    beq $a5, $zero, .LBB35_11679; LA32S-NEXT:  # %bb.2:1680; LA32S-NEXT:    srl.w $a0, $a4, $a21681; LA32S-NEXT:    ret1682;1683; LA64-LABEL: atomicrmw_xchg_i16_release:1684; LA64:       # %bb.0:1685; LA64-NEXT:    slli.d $a2, $a0, 31686; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01687; LA64-NEXT:    lu12i.w $a3, 151688; LA64-NEXT:    ori $a3, $a3, 40951689; LA64-NEXT:    sll.w $a3, $a3, $a21690; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 01691; LA64-NEXT:    sll.w $a1, $a1, $a21692; LA64-NEXT:  .LBB35_1: # =>This Inner Loop Header: Depth=11693; LA64-NEXT:    ll.w $a4, $a0, 01694; LA64-NEXT:    addi.w $a5, $a1, 01695; LA64-NEXT:    xor $a5, $a4, $a51696; LA64-NEXT:    and $a5, $a5, $a31697; LA64-NEXT:    xor $a5, $a4, $a51698; LA64-NEXT:    sc.w $a5, $a0, 01699; LA64-NEXT:    beq $a5, $zero, .LBB35_11700; LA64-NEXT:  # %bb.2:1701; LA64-NEXT:    srl.w $a0, $a4, $a21702; LA64-NEXT:    ret1703  %1 = atomicrmw xchg ptr %a, i16 %b release1704  ret i16 %11705}1706 1707define i16 @atomicrmw_xchg_0_i16_release(ptr %a) nounwind {1708; LA32R-LABEL: atomicrmw_xchg_0_i16_release:1709; LA32R:       # %bb.0:1710; LA32R-NEXT:    addi.w $a1, $zero, -41711; LA32R-NEXT:    and $a1, $a0, $a11712; LA32R-NEXT:    slli.w $a0, $a0, 31713; LA32R-NEXT:    lu12i.w $a2, 151714; LA32R-NEXT:    ori $a2, $a2, 40951715; LA32R-NEXT:    sll.w $a2, $a2, $a01716; LA32R-NEXT:    nor $a2, $a2, $zero1717; LA32R-NEXT:  .LBB36_1: # =>This Inner Loop Header: Depth=11718; LA32R-NEXT:    ll.w $a3, $a1, 01719; LA32R-NEXT:    and $a4, $a3, $a21720; LA32R-NEXT:    sc.w $a4, $a1, 01721; LA32R-NEXT:    beq $a4, $zero, .LBB36_11722; LA32R-NEXT:  # %bb.2:1723; LA32R-NEXT:    srl.w $a0, $a3, $a01724; LA32R-NEXT:    ret1725;1726; LA32S-LABEL: atomicrmw_xchg_0_i16_release:1727; LA32S:       # %bb.0:1728; LA32S-NEXT:    slli.w $a1, $a0, 31729; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 01730; LA32S-NEXT:    lu12i.w $a2, 151731; LA32S-NEXT:    ori $a2, $a2, 40951732; LA32S-NEXT:    sll.w $a2, $a2, $a11733; LA32S-NEXT:    nor $a2, $a2, $zero1734; LA32S-NEXT:  .LBB36_1: # =>This Inner Loop Header: Depth=11735; LA32S-NEXT:    ll.w $a3, $a0, 01736; LA32S-NEXT:    and $a4, $a3, $a21737; LA32S-NEXT:    sc.w $a4, $a0, 01738; LA32S-NEXT:    beq $a4, $zero, .LBB36_11739; LA32S-NEXT:  # %bb.2:1740; LA32S-NEXT:    srl.w $a0, $a3, $a11741; LA32S-NEXT:    ret1742;1743; LA64-LABEL: atomicrmw_xchg_0_i16_release:1744; LA64:       # %bb.0:1745; LA64-NEXT:    slli.d $a1, $a0, 31746; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01747; LA64-NEXT:    lu12i.w $a2, 151748; LA64-NEXT:    ori $a2, $a2, 40951749; LA64-NEXT:    sll.w $a2, $a2, $a11750; LA64-NEXT:    nor $a2, $a2, $zero1751; LA64-NEXT:    amand_db.w $a3, $a2, $a01752; LA64-NEXT:    srl.w $a0, $a3, $a11753; LA64-NEXT:    ret1754  %1 = atomicrmw xchg ptr %a, i16 0 release1755  ret i16 %11756}1757 1758define i16 @atomicrmw_xchg_minus_1_i16_release(ptr %a) nounwind {1759; LA32R-LABEL: atomicrmw_xchg_minus_1_i16_release:1760; LA32R:       # %bb.0:1761; LA32R-NEXT:    addi.w $a1, $zero, -41762; LA32R-NEXT:    and $a1, $a0, $a11763; LA32R-NEXT:    slli.w $a0, $a0, 31764; LA32R-NEXT:    lu12i.w $a2, 151765; LA32R-NEXT:    ori $a2, $a2, 40951766; LA32R-NEXT:    sll.w $a2, $a2, $a01767; LA32R-NEXT:  .LBB37_1: # =>This Inner Loop Header: Depth=11768; LA32R-NEXT:    ll.w $a3, $a1, 01769; LA32R-NEXT:    or $a4, $a3, $a21770; LA32R-NEXT:    sc.w $a4, $a1, 01771; LA32R-NEXT:    beq $a4, $zero, .LBB37_11772; LA32R-NEXT:  # %bb.2:1773; LA32R-NEXT:    srl.w $a0, $a3, $a01774; LA32R-NEXT:    ret1775;1776; LA32S-LABEL: atomicrmw_xchg_minus_1_i16_release:1777; LA32S:       # %bb.0:1778; LA32S-NEXT:    slli.w $a1, $a0, 31779; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 01780; LA32S-NEXT:    lu12i.w $a2, 151781; LA32S-NEXT:    ori $a2, $a2, 40951782; LA32S-NEXT:    sll.w $a2, $a2, $a11783; LA32S-NEXT:  .LBB37_1: # =>This Inner Loop Header: Depth=11784; LA32S-NEXT:    ll.w $a3, $a0, 01785; LA32S-NEXT:    or $a4, $a3, $a21786; LA32S-NEXT:    sc.w $a4, $a0, 01787; LA32S-NEXT:    beq $a4, $zero, .LBB37_11788; LA32S-NEXT:  # %bb.2:1789; LA32S-NEXT:    srl.w $a0, $a3, $a11790; LA32S-NEXT:    ret1791;1792; LA64-LABEL: atomicrmw_xchg_minus_1_i16_release:1793; LA64:       # %bb.0:1794; LA64-NEXT:    slli.d $a1, $a0, 31795; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01796; LA64-NEXT:    lu12i.w $a2, 151797; LA64-NEXT:    ori $a2, $a2, 40951798; LA64-NEXT:    sll.w $a2, $a2, $a11799; LA64-NEXT:    amor_db.w $a3, $a2, $a01800; LA64-NEXT:    srl.w $a0, $a3, $a11801; LA64-NEXT:    ret1802  %1 = atomicrmw xchg ptr %a, i16 -1 release1803  ret i16 %11804}1805 1806define i32 @atomicrmw_xchg_i32_release(ptr %a, i32 %b) nounwind {1807; LA32R-LABEL: atomicrmw_xchg_i32_release:1808; LA32R:       # %bb.0:1809; LA32R-NEXT:  .LBB38_1: # =>This Inner Loop Header: Depth=11810; LA32R-NEXT:    ll.w $a2, $a0, 01811; LA32R-NEXT:    move $a3, $a11812; LA32R-NEXT:    sc.w $a3, $a0, 01813; LA32R-NEXT:    beq $a3, $zero, .LBB38_11814; LA32R-NEXT:  # %bb.2:1815; LA32R-NEXT:    move $a0, $a21816; LA32R-NEXT:    ret1817;1818; LA32S-LABEL: atomicrmw_xchg_i32_release:1819; LA32S:       # %bb.0:1820; LA32S-NEXT:  .LBB38_1: # =>This Inner Loop Header: Depth=11821; LA32S-NEXT:    ll.w $a2, $a0, 01822; LA32S-NEXT:    move $a3, $a11823; LA32S-NEXT:    sc.w $a3, $a0, 01824; LA32S-NEXT:    beq $a3, $zero, .LBB38_11825; LA32S-NEXT:  # %bb.2:1826; LA32S-NEXT:    move $a0, $a21827; LA32S-NEXT:    ret1828;1829; LA64-LABEL: atomicrmw_xchg_i32_release:1830; LA64:       # %bb.0:1831; LA64-NEXT:    amswap_db.w $a2, $a1, $a01832; LA64-NEXT:    move $a0, $a21833; LA64-NEXT:    ret1834  %1 = atomicrmw xchg ptr %a, i32 %b release1835  ret i32 %11836}1837 1838define i64 @atomicrmw_xchg_i64_release(ptr %a, i64 %b) nounwind {1839; LA32R-LABEL: atomicrmw_xchg_i64_release:1840; LA32R:       # %bb.0:1841; LA32R-NEXT:    addi.w $sp, $sp, -161842; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill1843; LA32R-NEXT:    ori $a3, $zero, 31844; LA32R-NEXT:    bl __atomic_exchange_81845; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload1846; LA32R-NEXT:    addi.w $sp, $sp, 161847; LA32R-NEXT:    ret1848;1849; LA32S-LABEL: atomicrmw_xchg_i64_release:1850; LA32S:       # %bb.0:1851; LA32S-NEXT:    addi.w $sp, $sp, -161852; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill1853; LA32S-NEXT:    ori $a3, $zero, 31854; LA32S-NEXT:    bl __atomic_exchange_81855; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload1856; LA32S-NEXT:    addi.w $sp, $sp, 161857; LA32S-NEXT:    ret1858;1859; LA64-LABEL: atomicrmw_xchg_i64_release:1860; LA64:       # %bb.0:1861; LA64-NEXT:    amswap_db.d $a2, $a1, $a01862; LA64-NEXT:    move $a0, $a21863; LA64-NEXT:    ret1864  %1 = atomicrmw xchg ptr %a, i64 %b release1865  ret i64 %11866}1867 1868define i8 @atomicrmw_add_i8_release(ptr %a, i8 %b) nounwind {1869; LA32R-LABEL: atomicrmw_add_i8_release:1870; LA32R:       # %bb.0:1871; LA32R-NEXT:    addi.w $a2, $zero, -41872; LA32R-NEXT:    and $a2, $a0, $a21873; LA32R-NEXT:    slli.w $a0, $a0, 31874; LA32R-NEXT:    ori $a3, $zero, 2551875; LA32R-NEXT:    sll.w $a3, $a3, $a01876; LA32R-NEXT:    andi $a1, $a1, 2551877; LA32R-NEXT:    sll.w $a1, $a1, $a01878; LA32R-NEXT:  .LBB40_1: # =>This Inner Loop Header: Depth=11879; LA32R-NEXT:    ll.w $a4, $a2, 01880; LA32R-NEXT:    add.w $a5, $a4, $a11881; LA32R-NEXT:    xor $a5, $a4, $a51882; LA32R-NEXT:    and $a5, $a5, $a31883; LA32R-NEXT:    xor $a5, $a4, $a51884; LA32R-NEXT:    sc.w $a5, $a2, 01885; LA32R-NEXT:    beq $a5, $zero, .LBB40_11886; LA32R-NEXT:  # %bb.2:1887; LA32R-NEXT:    srl.w $a0, $a4, $a01888; LA32R-NEXT:    ret1889;1890; LA32S-LABEL: atomicrmw_add_i8_release:1891; LA32S:       # %bb.0:1892; LA32S-NEXT:    slli.w $a2, $a0, 31893; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 01894; LA32S-NEXT:    ori $a3, $zero, 2551895; LA32S-NEXT:    sll.w $a3, $a3, $a21896; LA32S-NEXT:    andi $a1, $a1, 2551897; LA32S-NEXT:    sll.w $a1, $a1, $a21898; LA32S-NEXT:  .LBB40_1: # =>This Inner Loop Header: Depth=11899; LA32S-NEXT:    ll.w $a4, $a0, 01900; LA32S-NEXT:    add.w $a5, $a4, $a11901; LA32S-NEXT:    xor $a5, $a4, $a51902; LA32S-NEXT:    and $a5, $a5, $a31903; LA32S-NEXT:    xor $a5, $a4, $a51904; LA32S-NEXT:    sc.w $a5, $a0, 01905; LA32S-NEXT:    beq $a5, $zero, .LBB40_11906; LA32S-NEXT:  # %bb.2:1907; LA32S-NEXT:    srl.w $a0, $a4, $a21908; LA32S-NEXT:    ret1909;1910; LA64-LABEL: atomicrmw_add_i8_release:1911; LA64:       # %bb.0:1912; LA64-NEXT:    slli.d $a2, $a0, 31913; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01914; LA64-NEXT:    ori $a3, $zero, 2551915; LA64-NEXT:    sll.w $a3, $a3, $a21916; LA64-NEXT:    andi $a1, $a1, 2551917; LA64-NEXT:    sll.w $a1, $a1, $a21918; LA64-NEXT:  .LBB40_1: # =>This Inner Loop Header: Depth=11919; LA64-NEXT:    ll.w $a4, $a0, 01920; LA64-NEXT:    add.w $a5, $a4, $a11921; LA64-NEXT:    xor $a5, $a4, $a51922; LA64-NEXT:    and $a5, $a5, $a31923; LA64-NEXT:    xor $a5, $a4, $a51924; LA64-NEXT:    sc.w $a5, $a0, 01925; LA64-NEXT:    beq $a5, $zero, .LBB40_11926; LA64-NEXT:  # %bb.2:1927; LA64-NEXT:    srl.w $a0, $a4, $a21928; LA64-NEXT:    ret1929  %1 = atomicrmw add ptr %a, i8 %b release1930  ret i8 %11931}1932 1933define i16 @atomicrmw_add_i16_release(ptr %a, i16 %b) nounwind {1934; LA32R-LABEL: atomicrmw_add_i16_release:1935; LA32R:       # %bb.0:1936; LA32R-NEXT:    addi.w $a2, $zero, -41937; LA32R-NEXT:    and $a2, $a0, $a21938; LA32R-NEXT:    slli.w $a0, $a0, 31939; LA32R-NEXT:    lu12i.w $a3, 151940; LA32R-NEXT:    ori $a3, $a3, 40951941; LA32R-NEXT:    sll.w $a4, $a3, $a01942; LA32R-NEXT:    and $a1, $a1, $a31943; LA32R-NEXT:    sll.w $a1, $a1, $a01944; LA32R-NEXT:  .LBB41_1: # =>This Inner Loop Header: Depth=11945; LA32R-NEXT:    ll.w $a3, $a2, 01946; LA32R-NEXT:    add.w $a5, $a3, $a11947; LA32R-NEXT:    xor $a5, $a3, $a51948; LA32R-NEXT:    and $a5, $a5, $a41949; LA32R-NEXT:    xor $a5, $a3, $a51950; LA32R-NEXT:    sc.w $a5, $a2, 01951; LA32R-NEXT:    beq $a5, $zero, .LBB41_11952; LA32R-NEXT:  # %bb.2:1953; LA32R-NEXT:    srl.w $a0, $a3, $a01954; LA32R-NEXT:    ret1955;1956; LA32S-LABEL: atomicrmw_add_i16_release:1957; LA32S:       # %bb.0:1958; LA32S-NEXT:    slli.w $a2, $a0, 31959; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 01960; LA32S-NEXT:    lu12i.w $a3, 151961; LA32S-NEXT:    ori $a3, $a3, 40951962; LA32S-NEXT:    sll.w $a3, $a3, $a21963; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 01964; LA32S-NEXT:    sll.w $a1, $a1, $a21965; LA32S-NEXT:  .LBB41_1: # =>This Inner Loop Header: Depth=11966; LA32S-NEXT:    ll.w $a4, $a0, 01967; LA32S-NEXT:    add.w $a5, $a4, $a11968; LA32S-NEXT:    xor $a5, $a4, $a51969; LA32S-NEXT:    and $a5, $a5, $a31970; LA32S-NEXT:    xor $a5, $a4, $a51971; LA32S-NEXT:    sc.w $a5, $a0, 01972; LA32S-NEXT:    beq $a5, $zero, .LBB41_11973; LA32S-NEXT:  # %bb.2:1974; LA32S-NEXT:    srl.w $a0, $a4, $a21975; LA32S-NEXT:    ret1976;1977; LA64-LABEL: atomicrmw_add_i16_release:1978; LA64:       # %bb.0:1979; LA64-NEXT:    slli.d $a2, $a0, 31980; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01981; LA64-NEXT:    lu12i.w $a3, 151982; LA64-NEXT:    ori $a3, $a3, 40951983; LA64-NEXT:    sll.w $a3, $a3, $a21984; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 01985; LA64-NEXT:    sll.w $a1, $a1, $a21986; LA64-NEXT:  .LBB41_1: # =>This Inner Loop Header: Depth=11987; LA64-NEXT:    ll.w $a4, $a0, 01988; LA64-NEXT:    add.w $a5, $a4, $a11989; LA64-NEXT:    xor $a5, $a4, $a51990; LA64-NEXT:    and $a5, $a5, $a31991; LA64-NEXT:    xor $a5, $a4, $a51992; LA64-NEXT:    sc.w $a5, $a0, 01993; LA64-NEXT:    beq $a5, $zero, .LBB41_11994; LA64-NEXT:  # %bb.2:1995; LA64-NEXT:    srl.w $a0, $a4, $a21996; LA64-NEXT:    ret1997  %1 = atomicrmw add ptr %a, i16 %b release1998  ret i16 %11999}2000 2001define i32 @atomicrmw_add_i32_release(ptr %a, i32 %b) nounwind {2002; LA32R-LABEL: atomicrmw_add_i32_release:2003; LA32R:       # %bb.0:2004; LA32R-NEXT:  .LBB42_1: # =>This Inner Loop Header: Depth=12005; LA32R-NEXT:    ll.w $a2, $a0, 02006; LA32R-NEXT:    add.w $a3, $a2, $a12007; LA32R-NEXT:    sc.w $a3, $a0, 02008; LA32R-NEXT:    beq $a3, $zero, .LBB42_12009; LA32R-NEXT:  # %bb.2:2010; LA32R-NEXT:    move $a0, $a22011; LA32R-NEXT:    ret2012;2013; LA32S-LABEL: atomicrmw_add_i32_release:2014; LA32S:       # %bb.0:2015; LA32S-NEXT:  .LBB42_1: # =>This Inner Loop Header: Depth=12016; LA32S-NEXT:    ll.w $a2, $a0, 02017; LA32S-NEXT:    add.w $a3, $a2, $a12018; LA32S-NEXT:    sc.w $a3, $a0, 02019; LA32S-NEXT:    beq $a3, $zero, .LBB42_12020; LA32S-NEXT:  # %bb.2:2021; LA32S-NEXT:    move $a0, $a22022; LA32S-NEXT:    ret2023;2024; LA64-LABEL: atomicrmw_add_i32_release:2025; LA64:       # %bb.0:2026; LA64-NEXT:    amadd_db.w $a2, $a1, $a02027; LA64-NEXT:    move $a0, $a22028; LA64-NEXT:    ret2029  %1 = atomicrmw add ptr %a, i32 %b release2030  ret i32 %12031}2032 2033define i64 @atomicrmw_add_i64_release(ptr %a, i64 %b) nounwind {2034; LA32R-LABEL: atomicrmw_add_i64_release:2035; LA32R:       # %bb.0:2036; LA32R-NEXT:    addi.w $sp, $sp, -162037; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill2038; LA32R-NEXT:    ori $a3, $zero, 32039; LA32R-NEXT:    bl __atomic_fetch_add_82040; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload2041; LA32R-NEXT:    addi.w $sp, $sp, 162042; LA32R-NEXT:    ret2043;2044; LA32S-LABEL: atomicrmw_add_i64_release:2045; LA32S:       # %bb.0:2046; LA32S-NEXT:    addi.w $sp, $sp, -162047; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill2048; LA32S-NEXT:    ori $a3, $zero, 32049; LA32S-NEXT:    bl __atomic_fetch_add_82050; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload2051; LA32S-NEXT:    addi.w $sp, $sp, 162052; LA32S-NEXT:    ret2053;2054; LA64-LABEL: atomicrmw_add_i64_release:2055; LA64:       # %bb.0:2056; LA64-NEXT:    amadd_db.d $a2, $a1, $a02057; LA64-NEXT:    move $a0, $a22058; LA64-NEXT:    ret2059  %1 = atomicrmw add ptr %a, i64 %b release2060  ret i64 %12061}2062 2063define i8 @atomicrmw_sub_i8_release(ptr %a, i8 %b) nounwind {2064; LA32R-LABEL: atomicrmw_sub_i8_release:2065; LA32R:       # %bb.0:2066; LA32R-NEXT:    addi.w $a2, $zero, -42067; LA32R-NEXT:    and $a2, $a0, $a22068; LA32R-NEXT:    slli.w $a0, $a0, 32069; LA32R-NEXT:    ori $a3, $zero, 2552070; LA32R-NEXT:    sll.w $a3, $a3, $a02071; LA32R-NEXT:    andi $a1, $a1, 2552072; LA32R-NEXT:    sll.w $a1, $a1, $a02073; LA32R-NEXT:  .LBB44_1: # =>This Inner Loop Header: Depth=12074; LA32R-NEXT:    ll.w $a4, $a2, 02075; LA32R-NEXT:    sub.w $a5, $a4, $a12076; LA32R-NEXT:    xor $a5, $a4, $a52077; LA32R-NEXT:    and $a5, $a5, $a32078; LA32R-NEXT:    xor $a5, $a4, $a52079; LA32R-NEXT:    sc.w $a5, $a2, 02080; LA32R-NEXT:    beq $a5, $zero, .LBB44_12081; LA32R-NEXT:  # %bb.2:2082; LA32R-NEXT:    srl.w $a0, $a4, $a02083; LA32R-NEXT:    ret2084;2085; LA32S-LABEL: atomicrmw_sub_i8_release:2086; LA32S:       # %bb.0:2087; LA32S-NEXT:    slli.w $a2, $a0, 32088; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 02089; LA32S-NEXT:    ori $a3, $zero, 2552090; LA32S-NEXT:    sll.w $a3, $a3, $a22091; LA32S-NEXT:    andi $a1, $a1, 2552092; LA32S-NEXT:    sll.w $a1, $a1, $a22093; LA32S-NEXT:  .LBB44_1: # =>This Inner Loop Header: Depth=12094; LA32S-NEXT:    ll.w $a4, $a0, 02095; LA32S-NEXT:    sub.w $a5, $a4, $a12096; LA32S-NEXT:    xor $a5, $a4, $a52097; LA32S-NEXT:    and $a5, $a5, $a32098; LA32S-NEXT:    xor $a5, $a4, $a52099; LA32S-NEXT:    sc.w $a5, $a0, 02100; LA32S-NEXT:    beq $a5, $zero, .LBB44_12101; LA32S-NEXT:  # %bb.2:2102; LA32S-NEXT:    srl.w $a0, $a4, $a22103; LA32S-NEXT:    ret2104;2105; LA64-LABEL: atomicrmw_sub_i8_release:2106; LA64:       # %bb.0:2107; LA64-NEXT:    slli.d $a2, $a0, 32108; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02109; LA64-NEXT:    ori $a3, $zero, 2552110; LA64-NEXT:    sll.w $a3, $a3, $a22111; LA64-NEXT:    andi $a1, $a1, 2552112; LA64-NEXT:    sll.w $a1, $a1, $a22113; LA64-NEXT:  .LBB44_1: # =>This Inner Loop Header: Depth=12114; LA64-NEXT:    ll.w $a4, $a0, 02115; LA64-NEXT:    sub.w $a5, $a4, $a12116; LA64-NEXT:    xor $a5, $a4, $a52117; LA64-NEXT:    and $a5, $a5, $a32118; LA64-NEXT:    xor $a5, $a4, $a52119; LA64-NEXT:    sc.w $a5, $a0, 02120; LA64-NEXT:    beq $a5, $zero, .LBB44_12121; LA64-NEXT:  # %bb.2:2122; LA64-NEXT:    srl.w $a0, $a4, $a22123; LA64-NEXT:    ret2124  %1 = atomicrmw sub ptr %a, i8 %b release2125  ret i8 %12126}2127 2128define i16 @atomicrmw_sub_i16_release(ptr %a, i16 %b) nounwind {2129; LA32R-LABEL: atomicrmw_sub_i16_release:2130; LA32R:       # %bb.0:2131; LA32R-NEXT:    addi.w $a2, $zero, -42132; LA32R-NEXT:    and $a2, $a0, $a22133; LA32R-NEXT:    slli.w $a0, $a0, 32134; LA32R-NEXT:    lu12i.w $a3, 152135; LA32R-NEXT:    ori $a3, $a3, 40952136; LA32R-NEXT:    sll.w $a4, $a3, $a02137; LA32R-NEXT:    and $a1, $a1, $a32138; LA32R-NEXT:    sll.w $a1, $a1, $a02139; LA32R-NEXT:  .LBB45_1: # =>This Inner Loop Header: Depth=12140; LA32R-NEXT:    ll.w $a3, $a2, 02141; LA32R-NEXT:    sub.w $a5, $a3, $a12142; LA32R-NEXT:    xor $a5, $a3, $a52143; LA32R-NEXT:    and $a5, $a5, $a42144; LA32R-NEXT:    xor $a5, $a3, $a52145; LA32R-NEXT:    sc.w $a5, $a2, 02146; LA32R-NEXT:    beq $a5, $zero, .LBB45_12147; LA32R-NEXT:  # %bb.2:2148; LA32R-NEXT:    srl.w $a0, $a3, $a02149; LA32R-NEXT:    ret2150;2151; LA32S-LABEL: atomicrmw_sub_i16_release:2152; LA32S:       # %bb.0:2153; LA32S-NEXT:    slli.w $a2, $a0, 32154; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 02155; LA32S-NEXT:    lu12i.w $a3, 152156; LA32S-NEXT:    ori $a3, $a3, 40952157; LA32S-NEXT:    sll.w $a3, $a3, $a22158; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 02159; LA32S-NEXT:    sll.w $a1, $a1, $a22160; LA32S-NEXT:  .LBB45_1: # =>This Inner Loop Header: Depth=12161; LA32S-NEXT:    ll.w $a4, $a0, 02162; LA32S-NEXT:    sub.w $a5, $a4, $a12163; LA32S-NEXT:    xor $a5, $a4, $a52164; LA32S-NEXT:    and $a5, $a5, $a32165; LA32S-NEXT:    xor $a5, $a4, $a52166; LA32S-NEXT:    sc.w $a5, $a0, 02167; LA32S-NEXT:    beq $a5, $zero, .LBB45_12168; LA32S-NEXT:  # %bb.2:2169; LA32S-NEXT:    srl.w $a0, $a4, $a22170; LA32S-NEXT:    ret2171;2172; LA64-LABEL: atomicrmw_sub_i16_release:2173; LA64:       # %bb.0:2174; LA64-NEXT:    slli.d $a2, $a0, 32175; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02176; LA64-NEXT:    lu12i.w $a3, 152177; LA64-NEXT:    ori $a3, $a3, 40952178; LA64-NEXT:    sll.w $a3, $a3, $a22179; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 02180; LA64-NEXT:    sll.w $a1, $a1, $a22181; LA64-NEXT:  .LBB45_1: # =>This Inner Loop Header: Depth=12182; LA64-NEXT:    ll.w $a4, $a0, 02183; LA64-NEXT:    sub.w $a5, $a4, $a12184; LA64-NEXT:    xor $a5, $a4, $a52185; LA64-NEXT:    and $a5, $a5, $a32186; LA64-NEXT:    xor $a5, $a4, $a52187; LA64-NEXT:    sc.w $a5, $a0, 02188; LA64-NEXT:    beq $a5, $zero, .LBB45_12189; LA64-NEXT:  # %bb.2:2190; LA64-NEXT:    srl.w $a0, $a4, $a22191; LA64-NEXT:    ret2192  %1 = atomicrmw sub ptr %a, i16 %b release2193  ret i16 %12194}2195 2196define i32 @atomicrmw_sub_i32_release(ptr %a, i32 %b) nounwind {2197; LA32R-LABEL: atomicrmw_sub_i32_release:2198; LA32R:       # %bb.0:2199; LA32R-NEXT:  .LBB46_1: # =>This Inner Loop Header: Depth=12200; LA32R-NEXT:    ll.w $a2, $a0, 02201; LA32R-NEXT:    sub.w $a3, $a2, $a12202; LA32R-NEXT:    sc.w $a3, $a0, 02203; LA32R-NEXT:    beq $a3, $zero, .LBB46_12204; LA32R-NEXT:  # %bb.2:2205; LA32R-NEXT:    move $a0, $a22206; LA32R-NEXT:    ret2207;2208; LA32S-LABEL: atomicrmw_sub_i32_release:2209; LA32S:       # %bb.0:2210; LA32S-NEXT:  .LBB46_1: # =>This Inner Loop Header: Depth=12211; LA32S-NEXT:    ll.w $a2, $a0, 02212; LA32S-NEXT:    sub.w $a3, $a2, $a12213; LA32S-NEXT:    sc.w $a3, $a0, 02214; LA32S-NEXT:    beq $a3, $zero, .LBB46_12215; LA32S-NEXT:  # %bb.2:2216; LA32S-NEXT:    move $a0, $a22217; LA32S-NEXT:    ret2218;2219; LA64-LABEL: atomicrmw_sub_i32_release:2220; LA64:       # %bb.0:2221; LA64-NEXT:    sub.w $a2, $zero, $a12222; LA64-NEXT:    amadd_db.w $a1, $a2, $a02223; LA64-NEXT:    move $a0, $a12224; LA64-NEXT:    ret2225  %1 = atomicrmw sub ptr %a, i32 %b release2226  ret i32 %12227}2228 2229define i64 @atomicrmw_sub_i64_release(ptr %a, i64 %b) nounwind {2230; LA32R-LABEL: atomicrmw_sub_i64_release:2231; LA32R:       # %bb.0:2232; LA32R-NEXT:    addi.w $sp, $sp, -162233; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill2234; LA32R-NEXT:    ori $a3, $zero, 32235; LA32R-NEXT:    bl __atomic_fetch_sub_82236; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload2237; LA32R-NEXT:    addi.w $sp, $sp, 162238; LA32R-NEXT:    ret2239;2240; LA32S-LABEL: atomicrmw_sub_i64_release:2241; LA32S:       # %bb.0:2242; LA32S-NEXT:    addi.w $sp, $sp, -162243; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill2244; LA32S-NEXT:    ori $a3, $zero, 32245; LA32S-NEXT:    bl __atomic_fetch_sub_82246; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload2247; LA32S-NEXT:    addi.w $sp, $sp, 162248; LA32S-NEXT:    ret2249;2250; LA64-LABEL: atomicrmw_sub_i64_release:2251; LA64:       # %bb.0:2252; LA64-NEXT:    sub.d $a2, $zero, $a12253; LA64-NEXT:    amadd_db.d $a1, $a2, $a02254; LA64-NEXT:    move $a0, $a12255; LA64-NEXT:    ret2256  %1 = atomicrmw sub ptr %a, i64 %b release2257  ret i64 %12258}2259 2260define i8 @atomicrmw_nand_i8_release(ptr %a, i8 %b) nounwind {2261; LA32R-LABEL: atomicrmw_nand_i8_release:2262; LA32R:       # %bb.0:2263; LA32R-NEXT:    addi.w $a2, $zero, -42264; LA32R-NEXT:    and $a2, $a0, $a22265; LA32R-NEXT:    slli.w $a0, $a0, 32266; LA32R-NEXT:    ori $a3, $zero, 2552267; LA32R-NEXT:    sll.w $a3, $a3, $a02268; LA32R-NEXT:    andi $a1, $a1, 2552269; LA32R-NEXT:    sll.w $a1, $a1, $a02270; LA32R-NEXT:  .LBB48_1: # =>This Inner Loop Header: Depth=12271; LA32R-NEXT:    ll.w $a4, $a2, 02272; LA32R-NEXT:    and $a5, $a4, $a12273; LA32R-NEXT:    nor $a5, $a5, $zero2274; LA32R-NEXT:    xor $a5, $a4, $a52275; LA32R-NEXT:    and $a5, $a5, $a32276; LA32R-NEXT:    xor $a5, $a4, $a52277; LA32R-NEXT:    sc.w $a5, $a2, 02278; LA32R-NEXT:    beq $a5, $zero, .LBB48_12279; LA32R-NEXT:  # %bb.2:2280; LA32R-NEXT:    srl.w $a0, $a4, $a02281; LA32R-NEXT:    ret2282;2283; LA32S-LABEL: atomicrmw_nand_i8_release:2284; LA32S:       # %bb.0:2285; LA32S-NEXT:    slli.w $a2, $a0, 32286; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 02287; LA32S-NEXT:    ori $a3, $zero, 2552288; LA32S-NEXT:    sll.w $a3, $a3, $a22289; LA32S-NEXT:    andi $a1, $a1, 2552290; LA32S-NEXT:    sll.w $a1, $a1, $a22291; LA32S-NEXT:  .LBB48_1: # =>This Inner Loop Header: Depth=12292; LA32S-NEXT:    ll.w $a4, $a0, 02293; LA32S-NEXT:    and $a5, $a4, $a12294; LA32S-NEXT:    nor $a5, $a5, $zero2295; LA32S-NEXT:    xor $a5, $a4, $a52296; LA32S-NEXT:    and $a5, $a5, $a32297; LA32S-NEXT:    xor $a5, $a4, $a52298; LA32S-NEXT:    sc.w $a5, $a0, 02299; LA32S-NEXT:    beq $a5, $zero, .LBB48_12300; LA32S-NEXT:  # %bb.2:2301; LA32S-NEXT:    srl.w $a0, $a4, $a22302; LA32S-NEXT:    ret2303;2304; LA64-LABEL: atomicrmw_nand_i8_release:2305; LA64:       # %bb.0:2306; LA64-NEXT:    slli.d $a2, $a0, 32307; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02308; LA64-NEXT:    ori $a3, $zero, 2552309; LA64-NEXT:    sll.w $a3, $a3, $a22310; LA64-NEXT:    andi $a1, $a1, 2552311; LA64-NEXT:    sll.w $a1, $a1, $a22312; LA64-NEXT:  .LBB48_1: # =>This Inner Loop Header: Depth=12313; LA64-NEXT:    ll.w $a4, $a0, 02314; LA64-NEXT:    and $a5, $a4, $a12315; LA64-NEXT:    nor $a5, $a5, $zero2316; LA64-NEXT:    xor $a5, $a4, $a52317; LA64-NEXT:    and $a5, $a5, $a32318; LA64-NEXT:    xor $a5, $a4, $a52319; LA64-NEXT:    sc.w $a5, $a0, 02320; LA64-NEXT:    beq $a5, $zero, .LBB48_12321; LA64-NEXT:  # %bb.2:2322; LA64-NEXT:    srl.w $a0, $a4, $a22323; LA64-NEXT:    ret2324  %1 = atomicrmw nand ptr %a, i8 %b release2325  ret i8 %12326}2327 2328define i16 @atomicrmw_nand_i16_release(ptr %a, i16 %b) nounwind {2329; LA32R-LABEL: atomicrmw_nand_i16_release:2330; LA32R:       # %bb.0:2331; LA32R-NEXT:    addi.w $a2, $zero, -42332; LA32R-NEXT:    and $a2, $a0, $a22333; LA32R-NEXT:    slli.w $a0, $a0, 32334; LA32R-NEXT:    lu12i.w $a3, 152335; LA32R-NEXT:    ori $a3, $a3, 40952336; LA32R-NEXT:    sll.w $a4, $a3, $a02337; LA32R-NEXT:    and $a1, $a1, $a32338; LA32R-NEXT:    sll.w $a1, $a1, $a02339; LA32R-NEXT:  .LBB49_1: # =>This Inner Loop Header: Depth=12340; LA32R-NEXT:    ll.w $a3, $a2, 02341; LA32R-NEXT:    and $a5, $a3, $a12342; LA32R-NEXT:    nor $a5, $a5, $zero2343; LA32R-NEXT:    xor $a5, $a3, $a52344; LA32R-NEXT:    and $a5, $a5, $a42345; LA32R-NEXT:    xor $a5, $a3, $a52346; LA32R-NEXT:    sc.w $a5, $a2, 02347; LA32R-NEXT:    beq $a5, $zero, .LBB49_12348; LA32R-NEXT:  # %bb.2:2349; LA32R-NEXT:    srl.w $a0, $a3, $a02350; LA32R-NEXT:    ret2351;2352; LA32S-LABEL: atomicrmw_nand_i16_release:2353; LA32S:       # %bb.0:2354; LA32S-NEXT:    slli.w $a2, $a0, 32355; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 02356; LA32S-NEXT:    lu12i.w $a3, 152357; LA32S-NEXT:    ori $a3, $a3, 40952358; LA32S-NEXT:    sll.w $a3, $a3, $a22359; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 02360; LA32S-NEXT:    sll.w $a1, $a1, $a22361; LA32S-NEXT:  .LBB49_1: # =>This Inner Loop Header: Depth=12362; LA32S-NEXT:    ll.w $a4, $a0, 02363; LA32S-NEXT:    and $a5, $a4, $a12364; LA32S-NEXT:    nor $a5, $a5, $zero2365; LA32S-NEXT:    xor $a5, $a4, $a52366; LA32S-NEXT:    and $a5, $a5, $a32367; LA32S-NEXT:    xor $a5, $a4, $a52368; LA32S-NEXT:    sc.w $a5, $a0, 02369; LA32S-NEXT:    beq $a5, $zero, .LBB49_12370; LA32S-NEXT:  # %bb.2:2371; LA32S-NEXT:    srl.w $a0, $a4, $a22372; LA32S-NEXT:    ret2373;2374; LA64-LABEL: atomicrmw_nand_i16_release:2375; LA64:       # %bb.0:2376; LA64-NEXT:    slli.d $a2, $a0, 32377; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02378; LA64-NEXT:    lu12i.w $a3, 152379; LA64-NEXT:    ori $a3, $a3, 40952380; LA64-NEXT:    sll.w $a3, $a3, $a22381; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 02382; LA64-NEXT:    sll.w $a1, $a1, $a22383; LA64-NEXT:  .LBB49_1: # =>This Inner Loop Header: Depth=12384; LA64-NEXT:    ll.w $a4, $a0, 02385; LA64-NEXT:    and $a5, $a4, $a12386; LA64-NEXT:    nor $a5, $a5, $zero2387; LA64-NEXT:    xor $a5, $a4, $a52388; LA64-NEXT:    and $a5, $a5, $a32389; LA64-NEXT:    xor $a5, $a4, $a52390; LA64-NEXT:    sc.w $a5, $a0, 02391; LA64-NEXT:    beq $a5, $zero, .LBB49_12392; LA64-NEXT:  # %bb.2:2393; LA64-NEXT:    srl.w $a0, $a4, $a22394; LA64-NEXT:    ret2395  %1 = atomicrmw nand ptr %a, i16 %b release2396  ret i16 %12397}2398 2399define i32 @atomicrmw_nand_i32_release(ptr %a, i32 %b) nounwind {2400; LA32R-LABEL: atomicrmw_nand_i32_release:2401; LA32R:       # %bb.0:2402; LA32R-NEXT:  .LBB50_1: # =>This Inner Loop Header: Depth=12403; LA32R-NEXT:    ll.w $a2, $a0, 02404; LA32R-NEXT:    and $a3, $a2, $a12405; LA32R-NEXT:    nor $a3, $a3, $zero2406; LA32R-NEXT:    sc.w $a3, $a0, 02407; LA32R-NEXT:    beq $a3, $zero, .LBB50_12408; LA32R-NEXT:  # %bb.2:2409; LA32R-NEXT:    move $a0, $a22410; LA32R-NEXT:    ret2411;2412; LA32S-LABEL: atomicrmw_nand_i32_release:2413; LA32S:       # %bb.0:2414; LA32S-NEXT:  .LBB50_1: # =>This Inner Loop Header: Depth=12415; LA32S-NEXT:    ll.w $a2, $a0, 02416; LA32S-NEXT:    and $a3, $a2, $a12417; LA32S-NEXT:    nor $a3, $a3, $zero2418; LA32S-NEXT:    sc.w $a3, $a0, 02419; LA32S-NEXT:    beq $a3, $zero, .LBB50_12420; LA32S-NEXT:  # %bb.2:2421; LA32S-NEXT:    move $a0, $a22422; LA32S-NEXT:    ret2423;2424; LA64-LABEL: atomicrmw_nand_i32_release:2425; LA64:       # %bb.0:2426; LA64-NEXT:  .LBB50_1: # =>This Inner Loop Header: Depth=12427; LA64-NEXT:    ll.w $a2, $a0, 02428; LA64-NEXT:    and $a3, $a2, $a12429; LA64-NEXT:    nor $a3, $a3, $zero2430; LA64-NEXT:    sc.w $a3, $a0, 02431; LA64-NEXT:    beq $a3, $zero, .LBB50_12432; LA64-NEXT:  # %bb.2:2433; LA64-NEXT:    move $a0, $a22434; LA64-NEXT:    ret2435  %1 = atomicrmw nand ptr %a, i32 %b release2436  ret i32 %12437}2438 2439define i64 @atomicrmw_nand_i64_release(ptr %a, i64 %b) nounwind {2440; LA32R-LABEL: atomicrmw_nand_i64_release:2441; LA32R:       # %bb.0:2442; LA32R-NEXT:    addi.w $sp, $sp, -162443; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill2444; LA32R-NEXT:    ori $a3, $zero, 32445; LA32R-NEXT:    bl __atomic_fetch_nand_82446; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload2447; LA32R-NEXT:    addi.w $sp, $sp, 162448; LA32R-NEXT:    ret2449;2450; LA32S-LABEL: atomicrmw_nand_i64_release:2451; LA32S:       # %bb.0:2452; LA32S-NEXT:    addi.w $sp, $sp, -162453; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill2454; LA32S-NEXT:    ori $a3, $zero, 32455; LA32S-NEXT:    bl __atomic_fetch_nand_82456; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload2457; LA32S-NEXT:    addi.w $sp, $sp, 162458; LA32S-NEXT:    ret2459;2460; LA64-LABEL: atomicrmw_nand_i64_release:2461; LA64:       # %bb.0:2462; LA64-NEXT:  .LBB51_1: # =>This Inner Loop Header: Depth=12463; LA64-NEXT:    ll.d $a2, $a0, 02464; LA64-NEXT:    and $a3, $a2, $a12465; LA64-NEXT:    nor $a3, $a3, $zero2466; LA64-NEXT:    sc.d $a3, $a0, 02467; LA64-NEXT:    beq $a3, $zero, .LBB51_12468; LA64-NEXT:  # %bb.2:2469; LA64-NEXT:    move $a0, $a22470; LA64-NEXT:    ret2471  %1 = atomicrmw nand ptr %a, i64 %b release2472  ret i64 %12473}2474 2475define i8 @atomicrmw_and_i8_release(ptr %a, i8 %b) nounwind {2476; LA32R-LABEL: atomicrmw_and_i8_release:2477; LA32R:       # %bb.0:2478; LA32R-NEXT:    addi.w $a2, $zero, -42479; LA32R-NEXT:    and $a2, $a0, $a22480; LA32R-NEXT:    slli.w $a0, $a0, 32481; LA32R-NEXT:    ori $a3, $zero, 2552482; LA32R-NEXT:    sll.w $a3, $a3, $a02483; LA32R-NEXT:    andi $a1, $a1, 2552484; LA32R-NEXT:    sll.w $a1, $a1, $a02485; LA32R-NEXT:    orn $a1, $a1, $a32486; LA32R-NEXT:  .LBB52_1: # =>This Inner Loop Header: Depth=12487; LA32R-NEXT:    ll.w $a3, $a2, 02488; LA32R-NEXT:    and $a4, $a3, $a12489; LA32R-NEXT:    sc.w $a4, $a2, 02490; LA32R-NEXT:    beq $a4, $zero, .LBB52_12491; LA32R-NEXT:  # %bb.2:2492; LA32R-NEXT:    srl.w $a0, $a3, $a02493; LA32R-NEXT:    ret2494;2495; LA32S-LABEL: atomicrmw_and_i8_release:2496; LA32S:       # %bb.0:2497; LA32S-NEXT:    slli.w $a2, $a0, 32498; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 02499; LA32S-NEXT:    ori $a3, $zero, 2552500; LA32S-NEXT:    sll.w $a3, $a3, $a22501; LA32S-NEXT:    andi $a1, $a1, 2552502; LA32S-NEXT:    sll.w $a1, $a1, $a22503; LA32S-NEXT:    orn $a1, $a1, $a32504; LA32S-NEXT:  .LBB52_1: # =>This Inner Loop Header: Depth=12505; LA32S-NEXT:    ll.w $a3, $a0, 02506; LA32S-NEXT:    and $a4, $a3, $a12507; LA32S-NEXT:    sc.w $a4, $a0, 02508; LA32S-NEXT:    beq $a4, $zero, .LBB52_12509; LA32S-NEXT:  # %bb.2:2510; LA32S-NEXT:    srl.w $a0, $a3, $a22511; LA32S-NEXT:    ret2512;2513; LA64-LABEL: atomicrmw_and_i8_release:2514; LA64:       # %bb.0:2515; LA64-NEXT:    slli.d $a2, $a0, 32516; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02517; LA64-NEXT:    ori $a3, $zero, 2552518; LA64-NEXT:    sll.w $a3, $a3, $a22519; LA64-NEXT:    andi $a1, $a1, 2552520; LA64-NEXT:    sll.w $a1, $a1, $a22521; LA64-NEXT:    orn $a1, $a1, $a32522; LA64-NEXT:    amand_db.w $a3, $a1, $a02523; LA64-NEXT:    srl.w $a0, $a3, $a22524; LA64-NEXT:    ret2525  %1 = atomicrmw and ptr %a, i8 %b release2526  ret i8 %12527}2528 2529define i16 @atomicrmw_and_i16_release(ptr %a, i16 %b) nounwind {2530; LA32R-LABEL: atomicrmw_and_i16_release:2531; LA32R:       # %bb.0:2532; LA32R-NEXT:    addi.w $a2, $zero, -42533; LA32R-NEXT:    and $a2, $a0, $a22534; LA32R-NEXT:    slli.w $a0, $a0, 32535; LA32R-NEXT:    lu12i.w $a3, 152536; LA32R-NEXT:    ori $a3, $a3, 40952537; LA32R-NEXT:    sll.w $a4, $a3, $a02538; LA32R-NEXT:    and $a1, $a1, $a32539; LA32R-NEXT:    sll.w $a1, $a1, $a02540; LA32R-NEXT:    orn $a1, $a1, $a42541; LA32R-NEXT:  .LBB53_1: # =>This Inner Loop Header: Depth=12542; LA32R-NEXT:    ll.w $a3, $a2, 02543; LA32R-NEXT:    and $a4, $a3, $a12544; LA32R-NEXT:    sc.w $a4, $a2, 02545; LA32R-NEXT:    beq $a4, $zero, .LBB53_12546; LA32R-NEXT:  # %bb.2:2547; LA32R-NEXT:    srl.w $a0, $a3, $a02548; LA32R-NEXT:    ret2549;2550; LA32S-LABEL: atomicrmw_and_i16_release:2551; LA32S:       # %bb.0:2552; LA32S-NEXT:    slli.w $a2, $a0, 32553; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 02554; LA32S-NEXT:    lu12i.w $a3, 152555; LA32S-NEXT:    ori $a3, $a3, 40952556; LA32S-NEXT:    sll.w $a3, $a3, $a22557; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 02558; LA32S-NEXT:    sll.w $a1, $a1, $a22559; LA32S-NEXT:    orn $a1, $a1, $a32560; LA32S-NEXT:  .LBB53_1: # =>This Inner Loop Header: Depth=12561; LA32S-NEXT:    ll.w $a3, $a0, 02562; LA32S-NEXT:    and $a4, $a3, $a12563; LA32S-NEXT:    sc.w $a4, $a0, 02564; LA32S-NEXT:    beq $a4, $zero, .LBB53_12565; LA32S-NEXT:  # %bb.2:2566; LA32S-NEXT:    srl.w $a0, $a3, $a22567; LA32S-NEXT:    ret2568;2569; LA64-LABEL: atomicrmw_and_i16_release:2570; LA64:       # %bb.0:2571; LA64-NEXT:    slli.d $a2, $a0, 32572; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02573; LA64-NEXT:    lu12i.w $a3, 152574; LA64-NEXT:    ori $a3, $a3, 40952575; LA64-NEXT:    sll.w $a3, $a3, $a22576; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 02577; LA64-NEXT:    sll.w $a1, $a1, $a22578; LA64-NEXT:    orn $a1, $a1, $a32579; LA64-NEXT:    amand_db.w $a3, $a1, $a02580; LA64-NEXT:    srl.w $a0, $a3, $a22581; LA64-NEXT:    ret2582  %1 = atomicrmw and ptr %a, i16 %b release2583  ret i16 %12584}2585 2586define i32 @atomicrmw_and_i32_release(ptr %a, i32 %b) nounwind {2587; LA32R-LABEL: atomicrmw_and_i32_release:2588; LA32R:       # %bb.0:2589; LA32R-NEXT:  .LBB54_1: # =>This Inner Loop Header: Depth=12590; LA32R-NEXT:    ll.w $a2, $a0, 02591; LA32R-NEXT:    and $a3, $a2, $a12592; LA32R-NEXT:    sc.w $a3, $a0, 02593; LA32R-NEXT:    beq $a3, $zero, .LBB54_12594; LA32R-NEXT:  # %bb.2:2595; LA32R-NEXT:    move $a0, $a22596; LA32R-NEXT:    ret2597;2598; LA32S-LABEL: atomicrmw_and_i32_release:2599; LA32S:       # %bb.0:2600; LA32S-NEXT:  .LBB54_1: # =>This Inner Loop Header: Depth=12601; LA32S-NEXT:    ll.w $a2, $a0, 02602; LA32S-NEXT:    and $a3, $a2, $a12603; LA32S-NEXT:    sc.w $a3, $a0, 02604; LA32S-NEXT:    beq $a3, $zero, .LBB54_12605; LA32S-NEXT:  # %bb.2:2606; LA32S-NEXT:    move $a0, $a22607; LA32S-NEXT:    ret2608;2609; LA64-LABEL: atomicrmw_and_i32_release:2610; LA64:       # %bb.0:2611; LA64-NEXT:    amand_db.w $a2, $a1, $a02612; LA64-NEXT:    move $a0, $a22613; LA64-NEXT:    ret2614  %1 = atomicrmw and ptr %a, i32 %b release2615  ret i32 %12616}2617 2618define i64 @atomicrmw_and_i64_release(ptr %a, i64 %b) nounwind {2619; LA32R-LABEL: atomicrmw_and_i64_release:2620; LA32R:       # %bb.0:2621; LA32R-NEXT:    addi.w $sp, $sp, -162622; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill2623; LA32R-NEXT:    ori $a3, $zero, 32624; LA32R-NEXT:    bl __atomic_fetch_and_82625; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload2626; LA32R-NEXT:    addi.w $sp, $sp, 162627; LA32R-NEXT:    ret2628;2629; LA32S-LABEL: atomicrmw_and_i64_release:2630; LA32S:       # %bb.0:2631; LA32S-NEXT:    addi.w $sp, $sp, -162632; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill2633; LA32S-NEXT:    ori $a3, $zero, 32634; LA32S-NEXT:    bl __atomic_fetch_and_82635; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload2636; LA32S-NEXT:    addi.w $sp, $sp, 162637; LA32S-NEXT:    ret2638;2639; LA64-LABEL: atomicrmw_and_i64_release:2640; LA64:       # %bb.0:2641; LA64-NEXT:    amand_db.d $a2, $a1, $a02642; LA64-NEXT:    move $a0, $a22643; LA64-NEXT:    ret2644  %1 = atomicrmw and ptr %a, i64 %b release2645  ret i64 %12646}2647 2648define i8 @atomicrmw_or_i8_release(ptr %a, i8 %b) nounwind {2649; LA32R-LABEL: atomicrmw_or_i8_release:2650; LA32R:       # %bb.0:2651; LA32R-NEXT:    addi.w $a2, $zero, -42652; LA32R-NEXT:    and $a2, $a0, $a22653; LA32R-NEXT:    slli.w $a0, $a0, 32654; LA32R-NEXT:    andi $a1, $a1, 2552655; LA32R-NEXT:    sll.w $a1, $a1, $a02656; LA32R-NEXT:  .LBB56_1: # =>This Inner Loop Header: Depth=12657; LA32R-NEXT:    ll.w $a3, $a2, 02658; LA32R-NEXT:    or $a4, $a3, $a12659; LA32R-NEXT:    sc.w $a4, $a2, 02660; LA32R-NEXT:    beq $a4, $zero, .LBB56_12661; LA32R-NEXT:  # %bb.2:2662; LA32R-NEXT:    srl.w $a0, $a3, $a02663; LA32R-NEXT:    ret2664;2665; LA32S-LABEL: atomicrmw_or_i8_release:2666; LA32S:       # %bb.0:2667; LA32S-NEXT:    slli.w $a2, $a0, 32668; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 02669; LA32S-NEXT:    andi $a1, $a1, 2552670; LA32S-NEXT:    sll.w $a1, $a1, $a22671; LA32S-NEXT:  .LBB56_1: # =>This Inner Loop Header: Depth=12672; LA32S-NEXT:    ll.w $a3, $a0, 02673; LA32S-NEXT:    or $a4, $a3, $a12674; LA32S-NEXT:    sc.w $a4, $a0, 02675; LA32S-NEXT:    beq $a4, $zero, .LBB56_12676; LA32S-NEXT:  # %bb.2:2677; LA32S-NEXT:    srl.w $a0, $a3, $a22678; LA32S-NEXT:    ret2679;2680; LA64-LABEL: atomicrmw_or_i8_release:2681; LA64:       # %bb.0:2682; LA64-NEXT:    slli.d $a2, $a0, 32683; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02684; LA64-NEXT:    andi $a1, $a1, 2552685; LA64-NEXT:    sll.w $a1, $a1, $a22686; LA64-NEXT:    amor_db.w $a3, $a1, $a02687; LA64-NEXT:    srl.w $a0, $a3, $a22688; LA64-NEXT:    ret2689  %1 = atomicrmw or ptr %a, i8 %b release2690  ret i8 %12691}2692 2693define i16 @atomicrmw_or_i16_release(ptr %a, i16 %b) nounwind {2694; LA32R-LABEL: atomicrmw_or_i16_release:2695; LA32R:       # %bb.0:2696; LA32R-NEXT:    addi.w $a2, $zero, -42697; LA32R-NEXT:    and $a2, $a0, $a22698; LA32R-NEXT:    slli.w $a0, $a0, 32699; LA32R-NEXT:    lu12i.w $a3, 152700; LA32R-NEXT:    ori $a3, $a3, 40952701; LA32R-NEXT:    and $a1, $a1, $a32702; LA32R-NEXT:    sll.w $a1, $a1, $a02703; LA32R-NEXT:  .LBB57_1: # =>This Inner Loop Header: Depth=12704; LA32R-NEXT:    ll.w $a3, $a2, 02705; LA32R-NEXT:    or $a4, $a3, $a12706; LA32R-NEXT:    sc.w $a4, $a2, 02707; LA32R-NEXT:    beq $a4, $zero, .LBB57_12708; LA32R-NEXT:  # %bb.2:2709; LA32R-NEXT:    srl.w $a0, $a3, $a02710; LA32R-NEXT:    ret2711;2712; LA32S-LABEL: atomicrmw_or_i16_release:2713; LA32S:       # %bb.0:2714; LA32S-NEXT:    slli.w $a2, $a0, 32715; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 02716; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 02717; LA32S-NEXT:    sll.w $a1, $a1, $a22718; LA32S-NEXT:  .LBB57_1: # =>This Inner Loop Header: Depth=12719; LA32S-NEXT:    ll.w $a3, $a0, 02720; LA32S-NEXT:    or $a4, $a3, $a12721; LA32S-NEXT:    sc.w $a4, $a0, 02722; LA32S-NEXT:    beq $a4, $zero, .LBB57_12723; LA32S-NEXT:  # %bb.2:2724; LA32S-NEXT:    srl.w $a0, $a3, $a22725; LA32S-NEXT:    ret2726;2727; LA64-LABEL: atomicrmw_or_i16_release:2728; LA64:       # %bb.0:2729; LA64-NEXT:    slli.d $a2, $a0, 32730; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02731; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 02732; LA64-NEXT:    sll.w $a1, $a1, $a22733; LA64-NEXT:    amor_db.w $a3, $a1, $a02734; LA64-NEXT:    srl.w $a0, $a3, $a22735; LA64-NEXT:    ret2736  %1 = atomicrmw or ptr %a, i16 %b release2737  ret i16 %12738}2739 2740define i32 @atomicrmw_or_i32_release(ptr %a, i32 %b) nounwind {2741; LA32R-LABEL: atomicrmw_or_i32_release:2742; LA32R:       # %bb.0:2743; LA32R-NEXT:  .LBB58_1: # =>This Inner Loop Header: Depth=12744; LA32R-NEXT:    ll.w $a2, $a0, 02745; LA32R-NEXT:    or $a3, $a2, $a12746; LA32R-NEXT:    sc.w $a3, $a0, 02747; LA32R-NEXT:    beq $a3, $zero, .LBB58_12748; LA32R-NEXT:  # %bb.2:2749; LA32R-NEXT:    move $a0, $a22750; LA32R-NEXT:    ret2751;2752; LA32S-LABEL: atomicrmw_or_i32_release:2753; LA32S:       # %bb.0:2754; LA32S-NEXT:  .LBB58_1: # =>This Inner Loop Header: Depth=12755; LA32S-NEXT:    ll.w $a2, $a0, 02756; LA32S-NEXT:    or $a3, $a2, $a12757; LA32S-NEXT:    sc.w $a3, $a0, 02758; LA32S-NEXT:    beq $a3, $zero, .LBB58_12759; LA32S-NEXT:  # %bb.2:2760; LA32S-NEXT:    move $a0, $a22761; LA32S-NEXT:    ret2762;2763; LA64-LABEL: atomicrmw_or_i32_release:2764; LA64:       # %bb.0:2765; LA64-NEXT:    amor_db.w $a2, $a1, $a02766; LA64-NEXT:    move $a0, $a22767; LA64-NEXT:    ret2768  %1 = atomicrmw or ptr %a, i32 %b release2769  ret i32 %12770}2771 2772define i64 @atomicrmw_or_i64_release(ptr %a, i64 %b) nounwind {2773; LA32R-LABEL: atomicrmw_or_i64_release:2774; LA32R:       # %bb.0:2775; LA32R-NEXT:    addi.w $sp, $sp, -162776; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill2777; LA32R-NEXT:    ori $a3, $zero, 32778; LA32R-NEXT:    bl __atomic_fetch_or_82779; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload2780; LA32R-NEXT:    addi.w $sp, $sp, 162781; LA32R-NEXT:    ret2782;2783; LA32S-LABEL: atomicrmw_or_i64_release:2784; LA32S:       # %bb.0:2785; LA32S-NEXT:    addi.w $sp, $sp, -162786; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill2787; LA32S-NEXT:    ori $a3, $zero, 32788; LA32S-NEXT:    bl __atomic_fetch_or_82789; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload2790; LA32S-NEXT:    addi.w $sp, $sp, 162791; LA32S-NEXT:    ret2792;2793; LA64-LABEL: atomicrmw_or_i64_release:2794; LA64:       # %bb.0:2795; LA64-NEXT:    amor_db.d $a2, $a1, $a02796; LA64-NEXT:    move $a0, $a22797; LA64-NEXT:    ret2798  %1 = atomicrmw or ptr %a, i64 %b release2799  ret i64 %12800}2801 2802define i8 @atomicrmw_xor_i8_release(ptr %a, i8 %b) nounwind {2803; LA32R-LABEL: atomicrmw_xor_i8_release:2804; LA32R:       # %bb.0:2805; LA32R-NEXT:    addi.w $a2, $zero, -42806; LA32R-NEXT:    and $a2, $a0, $a22807; LA32R-NEXT:    slli.w $a0, $a0, 32808; LA32R-NEXT:    andi $a1, $a1, 2552809; LA32R-NEXT:    sll.w $a1, $a1, $a02810; LA32R-NEXT:  .LBB60_1: # =>This Inner Loop Header: Depth=12811; LA32R-NEXT:    ll.w $a3, $a2, 02812; LA32R-NEXT:    xor $a4, $a3, $a12813; LA32R-NEXT:    sc.w $a4, $a2, 02814; LA32R-NEXT:    beq $a4, $zero, .LBB60_12815; LA32R-NEXT:  # %bb.2:2816; LA32R-NEXT:    srl.w $a0, $a3, $a02817; LA32R-NEXT:    ret2818;2819; LA32S-LABEL: atomicrmw_xor_i8_release:2820; LA32S:       # %bb.0:2821; LA32S-NEXT:    slli.w $a2, $a0, 32822; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 02823; LA32S-NEXT:    andi $a1, $a1, 2552824; LA32S-NEXT:    sll.w $a1, $a1, $a22825; LA32S-NEXT:  .LBB60_1: # =>This Inner Loop Header: Depth=12826; LA32S-NEXT:    ll.w $a3, $a0, 02827; LA32S-NEXT:    xor $a4, $a3, $a12828; LA32S-NEXT:    sc.w $a4, $a0, 02829; LA32S-NEXT:    beq $a4, $zero, .LBB60_12830; LA32S-NEXT:  # %bb.2:2831; LA32S-NEXT:    srl.w $a0, $a3, $a22832; LA32S-NEXT:    ret2833;2834; LA64-LABEL: atomicrmw_xor_i8_release:2835; LA64:       # %bb.0:2836; LA64-NEXT:    slli.d $a2, $a0, 32837; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02838; LA64-NEXT:    andi $a1, $a1, 2552839; LA64-NEXT:    sll.w $a1, $a1, $a22840; LA64-NEXT:    amxor_db.w $a3, $a1, $a02841; LA64-NEXT:    srl.w $a0, $a3, $a22842; LA64-NEXT:    ret2843  %1 = atomicrmw xor ptr %a, i8 %b release2844  ret i8 %12845}2846 2847define i16 @atomicrmw_xor_i16_release(ptr %a, i16 %b) nounwind {2848; LA32R-LABEL: atomicrmw_xor_i16_release:2849; LA32R:       # %bb.0:2850; LA32R-NEXT:    addi.w $a2, $zero, -42851; LA32R-NEXT:    and $a2, $a0, $a22852; LA32R-NEXT:    slli.w $a0, $a0, 32853; LA32R-NEXT:    lu12i.w $a3, 152854; LA32R-NEXT:    ori $a3, $a3, 40952855; LA32R-NEXT:    and $a1, $a1, $a32856; LA32R-NEXT:    sll.w $a1, $a1, $a02857; LA32R-NEXT:  .LBB61_1: # =>This Inner Loop Header: Depth=12858; LA32R-NEXT:    ll.w $a3, $a2, 02859; LA32R-NEXT:    xor $a4, $a3, $a12860; LA32R-NEXT:    sc.w $a4, $a2, 02861; LA32R-NEXT:    beq $a4, $zero, .LBB61_12862; LA32R-NEXT:  # %bb.2:2863; LA32R-NEXT:    srl.w $a0, $a3, $a02864; LA32R-NEXT:    ret2865;2866; LA32S-LABEL: atomicrmw_xor_i16_release:2867; LA32S:       # %bb.0:2868; LA32S-NEXT:    slli.w $a2, $a0, 32869; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 02870; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 02871; LA32S-NEXT:    sll.w $a1, $a1, $a22872; LA32S-NEXT:  .LBB61_1: # =>This Inner Loop Header: Depth=12873; LA32S-NEXT:    ll.w $a3, $a0, 02874; LA32S-NEXT:    xor $a4, $a3, $a12875; LA32S-NEXT:    sc.w $a4, $a0, 02876; LA32S-NEXT:    beq $a4, $zero, .LBB61_12877; LA32S-NEXT:  # %bb.2:2878; LA32S-NEXT:    srl.w $a0, $a3, $a22879; LA32S-NEXT:    ret2880;2881; LA64-LABEL: atomicrmw_xor_i16_release:2882; LA64:       # %bb.0:2883; LA64-NEXT:    slli.d $a2, $a0, 32884; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02885; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 02886; LA64-NEXT:    sll.w $a1, $a1, $a22887; LA64-NEXT:    amxor_db.w $a3, $a1, $a02888; LA64-NEXT:    srl.w $a0, $a3, $a22889; LA64-NEXT:    ret2890  %1 = atomicrmw xor ptr %a, i16 %b release2891  ret i16 %12892}2893 2894define i32 @atomicrmw_xor_i32_release(ptr %a, i32 %b) nounwind {2895; LA32R-LABEL: atomicrmw_xor_i32_release:2896; LA32R:       # %bb.0:2897; LA32R-NEXT:  .LBB62_1: # =>This Inner Loop Header: Depth=12898; LA32R-NEXT:    ll.w $a2, $a0, 02899; LA32R-NEXT:    xor $a3, $a2, $a12900; LA32R-NEXT:    sc.w $a3, $a0, 02901; LA32R-NEXT:    beq $a3, $zero, .LBB62_12902; LA32R-NEXT:  # %bb.2:2903; LA32R-NEXT:    move $a0, $a22904; LA32R-NEXT:    ret2905;2906; LA32S-LABEL: atomicrmw_xor_i32_release:2907; LA32S:       # %bb.0:2908; LA32S-NEXT:  .LBB62_1: # =>This Inner Loop Header: Depth=12909; LA32S-NEXT:    ll.w $a2, $a0, 02910; LA32S-NEXT:    xor $a3, $a2, $a12911; LA32S-NEXT:    sc.w $a3, $a0, 02912; LA32S-NEXT:    beq $a3, $zero, .LBB62_12913; LA32S-NEXT:  # %bb.2:2914; LA32S-NEXT:    move $a0, $a22915; LA32S-NEXT:    ret2916;2917; LA64-LABEL: atomicrmw_xor_i32_release:2918; LA64:       # %bb.0:2919; LA64-NEXT:    amxor_db.w $a2, $a1, $a02920; LA64-NEXT:    move $a0, $a22921; LA64-NEXT:    ret2922  %1 = atomicrmw xor ptr %a, i32 %b release2923  ret i32 %12924}2925 2926define i64 @atomicrmw_xor_i64_release(ptr %a, i64 %b) nounwind {2927; LA32R-LABEL: atomicrmw_xor_i64_release:2928; LA32R:       # %bb.0:2929; LA32R-NEXT:    addi.w $sp, $sp, -162930; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill2931; LA32R-NEXT:    ori $a3, $zero, 32932; LA32R-NEXT:    bl __atomic_fetch_xor_82933; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload2934; LA32R-NEXT:    addi.w $sp, $sp, 162935; LA32R-NEXT:    ret2936;2937; LA32S-LABEL: atomicrmw_xor_i64_release:2938; LA32S:       # %bb.0:2939; LA32S-NEXT:    addi.w $sp, $sp, -162940; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill2941; LA32S-NEXT:    ori $a3, $zero, 32942; LA32S-NEXT:    bl __atomic_fetch_xor_82943; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload2944; LA32S-NEXT:    addi.w $sp, $sp, 162945; LA32S-NEXT:    ret2946;2947; LA64-LABEL: atomicrmw_xor_i64_release:2948; LA64:       # %bb.0:2949; LA64-NEXT:    amxor_db.d $a2, $a1, $a02950; LA64-NEXT:    move $a0, $a22951; LA64-NEXT:    ret2952  %1 = atomicrmw xor ptr %a, i64 %b release2953  ret i64 %12954}2955 2956define i8 @atomicrmw_xchg_i8_acq_rel(ptr %a, i8 %b) nounwind {2957; LA32R-LABEL: atomicrmw_xchg_i8_acq_rel:2958; LA32R:       # %bb.0:2959; LA32R-NEXT:    addi.w $a2, $zero, -42960; LA32R-NEXT:    and $a2, $a0, $a22961; LA32R-NEXT:    slli.w $a0, $a0, 32962; LA32R-NEXT:    ori $a3, $zero, 2552963; LA32R-NEXT:    sll.w $a3, $a3, $a02964; LA32R-NEXT:    andi $a1, $a1, 2552965; LA32R-NEXT:    sll.w $a1, $a1, $a02966; LA32R-NEXT:  .LBB64_1: # =>This Inner Loop Header: Depth=12967; LA32R-NEXT:    ll.w $a4, $a2, 02968; LA32R-NEXT:    addi.w $a5, $a1, 02969; LA32R-NEXT:    xor $a5, $a4, $a52970; LA32R-NEXT:    and $a5, $a5, $a32971; LA32R-NEXT:    xor $a5, $a4, $a52972; LA32R-NEXT:    sc.w $a5, $a2, 02973; LA32R-NEXT:    beq $a5, $zero, .LBB64_12974; LA32R-NEXT:  # %bb.2:2975; LA32R-NEXT:    srl.w $a0, $a4, $a02976; LA32R-NEXT:    ret2977;2978; LA32S-LABEL: atomicrmw_xchg_i8_acq_rel:2979; LA32S:       # %bb.0:2980; LA32S-NEXT:    slli.w $a2, $a0, 32981; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 02982; LA32S-NEXT:    ori $a3, $zero, 2552983; LA32S-NEXT:    sll.w $a3, $a3, $a22984; LA32S-NEXT:    andi $a1, $a1, 2552985; LA32S-NEXT:    sll.w $a1, $a1, $a22986; LA32S-NEXT:  .LBB64_1: # =>This Inner Loop Header: Depth=12987; LA32S-NEXT:    ll.w $a4, $a0, 02988; LA32S-NEXT:    addi.w $a5, $a1, 02989; LA32S-NEXT:    xor $a5, $a4, $a52990; LA32S-NEXT:    and $a5, $a5, $a32991; LA32S-NEXT:    xor $a5, $a4, $a52992; LA32S-NEXT:    sc.w $a5, $a0, 02993; LA32S-NEXT:    beq $a5, $zero, .LBB64_12994; LA32S-NEXT:  # %bb.2:2995; LA32S-NEXT:    srl.w $a0, $a4, $a22996; LA32S-NEXT:    ret2997;2998; LA64-LABEL: atomicrmw_xchg_i8_acq_rel:2999; LA64:       # %bb.0:3000; LA64-NEXT:    slli.d $a2, $a0, 33001; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03002; LA64-NEXT:    ori $a3, $zero, 2553003; LA64-NEXT:    sll.w $a3, $a3, $a23004; LA64-NEXT:    andi $a1, $a1, 2553005; LA64-NEXT:    sll.w $a1, $a1, $a23006; LA64-NEXT:  .LBB64_1: # =>This Inner Loop Header: Depth=13007; LA64-NEXT:    ll.w $a4, $a0, 03008; LA64-NEXT:    addi.w $a5, $a1, 03009; LA64-NEXT:    xor $a5, $a4, $a53010; LA64-NEXT:    and $a5, $a5, $a33011; LA64-NEXT:    xor $a5, $a4, $a53012; LA64-NEXT:    sc.w $a5, $a0, 03013; LA64-NEXT:    beq $a5, $zero, .LBB64_13014; LA64-NEXT:  # %bb.2:3015; LA64-NEXT:    srl.w $a0, $a4, $a23016; LA64-NEXT:    ret3017  %1 = atomicrmw xchg ptr %a, i8 %b acq_rel3018  ret i8 %13019}3020 3021define i8 @atomicrmw_xchg_0_i8_acq_rel(ptr %a) nounwind {3022; LA32R-LABEL: atomicrmw_xchg_0_i8_acq_rel:3023; LA32R:       # %bb.0:3024; LA32R-NEXT:    addi.w $a1, $zero, -43025; LA32R-NEXT:    and $a1, $a0, $a13026; LA32R-NEXT:    slli.w $a0, $a0, 33027; LA32R-NEXT:    ori $a2, $zero, 2553028; LA32R-NEXT:    sll.w $a2, $a2, $a03029; LA32R-NEXT:    nor $a2, $a2, $zero3030; LA32R-NEXT:  .LBB65_1: # =>This Inner Loop Header: Depth=13031; LA32R-NEXT:    ll.w $a3, $a1, 03032; LA32R-NEXT:    and $a4, $a3, $a23033; LA32R-NEXT:    sc.w $a4, $a1, 03034; LA32R-NEXT:    beq $a4, $zero, .LBB65_13035; LA32R-NEXT:  # %bb.2:3036; LA32R-NEXT:    srl.w $a0, $a3, $a03037; LA32R-NEXT:    ret3038;3039; LA32S-LABEL: atomicrmw_xchg_0_i8_acq_rel:3040; LA32S:       # %bb.0:3041; LA32S-NEXT:    slli.w $a1, $a0, 33042; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 03043; LA32S-NEXT:    ori $a2, $zero, 2553044; LA32S-NEXT:    sll.w $a2, $a2, $a13045; LA32S-NEXT:    nor $a2, $a2, $zero3046; LA32S-NEXT:  .LBB65_1: # =>This Inner Loop Header: Depth=13047; LA32S-NEXT:    ll.w $a3, $a0, 03048; LA32S-NEXT:    and $a4, $a3, $a23049; LA32S-NEXT:    sc.w $a4, $a0, 03050; LA32S-NEXT:    beq $a4, $zero, .LBB65_13051; LA32S-NEXT:  # %bb.2:3052; LA32S-NEXT:    srl.w $a0, $a3, $a13053; LA32S-NEXT:    ret3054;3055; LA64-LABEL: atomicrmw_xchg_0_i8_acq_rel:3056; LA64:       # %bb.0:3057; LA64-NEXT:    slli.d $a1, $a0, 33058; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03059; LA64-NEXT:    ori $a2, $zero, 2553060; LA64-NEXT:    sll.w $a2, $a2, $a13061; LA64-NEXT:    nor $a2, $a2, $zero3062; LA64-NEXT:    amand_db.w $a3, $a2, $a03063; LA64-NEXT:    srl.w $a0, $a3, $a13064; LA64-NEXT:    ret3065  %1 = atomicrmw xchg ptr %a, i8 0 acq_rel3066  ret i8 %13067}3068 3069define i8 @atomicrmw_xchg_minus_1_i8_acq_rel(ptr %a) nounwind {3070; LA32R-LABEL: atomicrmw_xchg_minus_1_i8_acq_rel:3071; LA32R:       # %bb.0:3072; LA32R-NEXT:    addi.w $a1, $zero, -43073; LA32R-NEXT:    and $a1, $a0, $a13074; LA32R-NEXT:    slli.w $a0, $a0, 33075; LA32R-NEXT:    ori $a2, $zero, 2553076; LA32R-NEXT:    sll.w $a2, $a2, $a03077; LA32R-NEXT:  .LBB66_1: # =>This Inner Loop Header: Depth=13078; LA32R-NEXT:    ll.w $a3, $a1, 03079; LA32R-NEXT:    or $a4, $a3, $a23080; LA32R-NEXT:    sc.w $a4, $a1, 03081; LA32R-NEXT:    beq $a4, $zero, .LBB66_13082; LA32R-NEXT:  # %bb.2:3083; LA32R-NEXT:    srl.w $a0, $a3, $a03084; LA32R-NEXT:    ret3085;3086; LA32S-LABEL: atomicrmw_xchg_minus_1_i8_acq_rel:3087; LA32S:       # %bb.0:3088; LA32S-NEXT:    slli.w $a1, $a0, 33089; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 03090; LA32S-NEXT:    ori $a2, $zero, 2553091; LA32S-NEXT:    sll.w $a2, $a2, $a13092; LA32S-NEXT:  .LBB66_1: # =>This Inner Loop Header: Depth=13093; LA32S-NEXT:    ll.w $a3, $a0, 03094; LA32S-NEXT:    or $a4, $a3, $a23095; LA32S-NEXT:    sc.w $a4, $a0, 03096; LA32S-NEXT:    beq $a4, $zero, .LBB66_13097; LA32S-NEXT:  # %bb.2:3098; LA32S-NEXT:    srl.w $a0, $a3, $a13099; LA32S-NEXT:    ret3100;3101; LA64-LABEL: atomicrmw_xchg_minus_1_i8_acq_rel:3102; LA64:       # %bb.0:3103; LA64-NEXT:    slli.d $a1, $a0, 33104; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03105; LA64-NEXT:    ori $a2, $zero, 2553106; LA64-NEXT:    sll.w $a2, $a2, $a13107; LA64-NEXT:    amor_db.w $a3, $a2, $a03108; LA64-NEXT:    srl.w $a0, $a3, $a13109; LA64-NEXT:    ret3110  %1 = atomicrmw xchg ptr %a, i8 -1 acq_rel3111  ret i8 %13112}3113 3114define i16 @atomicrmw_xchg_i16_acq_rel(ptr %a, i16 %b) nounwind {3115; LA32R-LABEL: atomicrmw_xchg_i16_acq_rel:3116; LA32R:       # %bb.0:3117; LA32R-NEXT:    addi.w $a2, $zero, -43118; LA32R-NEXT:    and $a2, $a0, $a23119; LA32R-NEXT:    slli.w $a0, $a0, 33120; LA32R-NEXT:    lu12i.w $a3, 153121; LA32R-NEXT:    ori $a3, $a3, 40953122; LA32R-NEXT:    sll.w $a4, $a3, $a03123; LA32R-NEXT:    and $a1, $a1, $a33124; LA32R-NEXT:    sll.w $a1, $a1, $a03125; LA32R-NEXT:  .LBB67_1: # =>This Inner Loop Header: Depth=13126; LA32R-NEXT:    ll.w $a3, $a2, 03127; LA32R-NEXT:    addi.w $a5, $a1, 03128; LA32R-NEXT:    xor $a5, $a3, $a53129; LA32R-NEXT:    and $a5, $a5, $a43130; LA32R-NEXT:    xor $a5, $a3, $a53131; LA32R-NEXT:    sc.w $a5, $a2, 03132; LA32R-NEXT:    beq $a5, $zero, .LBB67_13133; LA32R-NEXT:  # %bb.2:3134; LA32R-NEXT:    srl.w $a0, $a3, $a03135; LA32R-NEXT:    ret3136;3137; LA32S-LABEL: atomicrmw_xchg_i16_acq_rel:3138; LA32S:       # %bb.0:3139; LA32S-NEXT:    slli.w $a2, $a0, 33140; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 03141; LA32S-NEXT:    lu12i.w $a3, 153142; LA32S-NEXT:    ori $a3, $a3, 40953143; LA32S-NEXT:    sll.w $a3, $a3, $a23144; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 03145; LA32S-NEXT:    sll.w $a1, $a1, $a23146; LA32S-NEXT:  .LBB67_1: # =>This Inner Loop Header: Depth=13147; LA32S-NEXT:    ll.w $a4, $a0, 03148; LA32S-NEXT:    addi.w $a5, $a1, 03149; LA32S-NEXT:    xor $a5, $a4, $a53150; LA32S-NEXT:    and $a5, $a5, $a33151; LA32S-NEXT:    xor $a5, $a4, $a53152; LA32S-NEXT:    sc.w $a5, $a0, 03153; LA32S-NEXT:    beq $a5, $zero, .LBB67_13154; LA32S-NEXT:  # %bb.2:3155; LA32S-NEXT:    srl.w $a0, $a4, $a23156; LA32S-NEXT:    ret3157;3158; LA64-LABEL: atomicrmw_xchg_i16_acq_rel:3159; LA64:       # %bb.0:3160; LA64-NEXT:    slli.d $a2, $a0, 33161; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03162; LA64-NEXT:    lu12i.w $a3, 153163; LA64-NEXT:    ori $a3, $a3, 40953164; LA64-NEXT:    sll.w $a3, $a3, $a23165; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 03166; LA64-NEXT:    sll.w $a1, $a1, $a23167; LA64-NEXT:  .LBB67_1: # =>This Inner Loop Header: Depth=13168; LA64-NEXT:    ll.w $a4, $a0, 03169; LA64-NEXT:    addi.w $a5, $a1, 03170; LA64-NEXT:    xor $a5, $a4, $a53171; LA64-NEXT:    and $a5, $a5, $a33172; LA64-NEXT:    xor $a5, $a4, $a53173; LA64-NEXT:    sc.w $a5, $a0, 03174; LA64-NEXT:    beq $a5, $zero, .LBB67_13175; LA64-NEXT:  # %bb.2:3176; LA64-NEXT:    srl.w $a0, $a4, $a23177; LA64-NEXT:    ret3178  %1 = atomicrmw xchg ptr %a, i16 %b acq_rel3179  ret i16 %13180}3181 3182define i16 @atomicrmw_xchg_0_i16_acq_rel(ptr %a) nounwind {3183; LA32R-LABEL: atomicrmw_xchg_0_i16_acq_rel:3184; LA32R:       # %bb.0:3185; LA32R-NEXT:    addi.w $a1, $zero, -43186; LA32R-NEXT:    and $a1, $a0, $a13187; LA32R-NEXT:    slli.w $a0, $a0, 33188; LA32R-NEXT:    lu12i.w $a2, 153189; LA32R-NEXT:    ori $a2, $a2, 40953190; LA32R-NEXT:    sll.w $a2, $a2, $a03191; LA32R-NEXT:    nor $a2, $a2, $zero3192; LA32R-NEXT:  .LBB68_1: # =>This Inner Loop Header: Depth=13193; LA32R-NEXT:    ll.w $a3, $a1, 03194; LA32R-NEXT:    and $a4, $a3, $a23195; LA32R-NEXT:    sc.w $a4, $a1, 03196; LA32R-NEXT:    beq $a4, $zero, .LBB68_13197; LA32R-NEXT:  # %bb.2:3198; LA32R-NEXT:    srl.w $a0, $a3, $a03199; LA32R-NEXT:    ret3200;3201; LA32S-LABEL: atomicrmw_xchg_0_i16_acq_rel:3202; LA32S:       # %bb.0:3203; LA32S-NEXT:    slli.w $a1, $a0, 33204; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 03205; LA32S-NEXT:    lu12i.w $a2, 153206; LA32S-NEXT:    ori $a2, $a2, 40953207; LA32S-NEXT:    sll.w $a2, $a2, $a13208; LA32S-NEXT:    nor $a2, $a2, $zero3209; LA32S-NEXT:  .LBB68_1: # =>This Inner Loop Header: Depth=13210; LA32S-NEXT:    ll.w $a3, $a0, 03211; LA32S-NEXT:    and $a4, $a3, $a23212; LA32S-NEXT:    sc.w $a4, $a0, 03213; LA32S-NEXT:    beq $a4, $zero, .LBB68_13214; LA32S-NEXT:  # %bb.2:3215; LA32S-NEXT:    srl.w $a0, $a3, $a13216; LA32S-NEXT:    ret3217;3218; LA64-LABEL: atomicrmw_xchg_0_i16_acq_rel:3219; LA64:       # %bb.0:3220; LA64-NEXT:    slli.d $a1, $a0, 33221; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03222; LA64-NEXT:    lu12i.w $a2, 153223; LA64-NEXT:    ori $a2, $a2, 40953224; LA64-NEXT:    sll.w $a2, $a2, $a13225; LA64-NEXT:    nor $a2, $a2, $zero3226; LA64-NEXT:    amand_db.w $a3, $a2, $a03227; LA64-NEXT:    srl.w $a0, $a3, $a13228; LA64-NEXT:    ret3229  %1 = atomicrmw xchg ptr %a, i16 0 acq_rel3230  ret i16 %13231}3232 3233define i16 @atomicrmw_xchg_minus_1_i16_acq_rel(ptr %a) nounwind {3234; LA32R-LABEL: atomicrmw_xchg_minus_1_i16_acq_rel:3235; LA32R:       # %bb.0:3236; LA32R-NEXT:    addi.w $a1, $zero, -43237; LA32R-NEXT:    and $a1, $a0, $a13238; LA32R-NEXT:    slli.w $a0, $a0, 33239; LA32R-NEXT:    lu12i.w $a2, 153240; LA32R-NEXT:    ori $a2, $a2, 40953241; LA32R-NEXT:    sll.w $a2, $a2, $a03242; LA32R-NEXT:  .LBB69_1: # =>This Inner Loop Header: Depth=13243; LA32R-NEXT:    ll.w $a3, $a1, 03244; LA32R-NEXT:    or $a4, $a3, $a23245; LA32R-NEXT:    sc.w $a4, $a1, 03246; LA32R-NEXT:    beq $a4, $zero, .LBB69_13247; LA32R-NEXT:  # %bb.2:3248; LA32R-NEXT:    srl.w $a0, $a3, $a03249; LA32R-NEXT:    ret3250;3251; LA32S-LABEL: atomicrmw_xchg_minus_1_i16_acq_rel:3252; LA32S:       # %bb.0:3253; LA32S-NEXT:    slli.w $a1, $a0, 33254; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 03255; LA32S-NEXT:    lu12i.w $a2, 153256; LA32S-NEXT:    ori $a2, $a2, 40953257; LA32S-NEXT:    sll.w $a2, $a2, $a13258; LA32S-NEXT:  .LBB69_1: # =>This Inner Loop Header: Depth=13259; LA32S-NEXT:    ll.w $a3, $a0, 03260; LA32S-NEXT:    or $a4, $a3, $a23261; LA32S-NEXT:    sc.w $a4, $a0, 03262; LA32S-NEXT:    beq $a4, $zero, .LBB69_13263; LA32S-NEXT:  # %bb.2:3264; LA32S-NEXT:    srl.w $a0, $a3, $a13265; LA32S-NEXT:    ret3266;3267; LA64-LABEL: atomicrmw_xchg_minus_1_i16_acq_rel:3268; LA64:       # %bb.0:3269; LA64-NEXT:    slli.d $a1, $a0, 33270; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03271; LA64-NEXT:    lu12i.w $a2, 153272; LA64-NEXT:    ori $a2, $a2, 40953273; LA64-NEXT:    sll.w $a2, $a2, $a13274; LA64-NEXT:    amor_db.w $a3, $a2, $a03275; LA64-NEXT:    srl.w $a0, $a3, $a13276; LA64-NEXT:    ret3277  %1 = atomicrmw xchg ptr %a, i16 -1 acq_rel3278  ret i16 %13279}3280 3281define i32 @atomicrmw_xchg_i32_acq_rel(ptr %a, i32 %b) nounwind {3282; LA32R-LABEL: atomicrmw_xchg_i32_acq_rel:3283; LA32R:       # %bb.0:3284; LA32R-NEXT:  .LBB70_1: # =>This Inner Loop Header: Depth=13285; LA32R-NEXT:    ll.w $a2, $a0, 03286; LA32R-NEXT:    move $a3, $a13287; LA32R-NEXT:    sc.w $a3, $a0, 03288; LA32R-NEXT:    beq $a3, $zero, .LBB70_13289; LA32R-NEXT:  # %bb.2:3290; LA32R-NEXT:    move $a0, $a23291; LA32R-NEXT:    ret3292;3293; LA32S-LABEL: atomicrmw_xchg_i32_acq_rel:3294; LA32S:       # %bb.0:3295; LA32S-NEXT:  .LBB70_1: # =>This Inner Loop Header: Depth=13296; LA32S-NEXT:    ll.w $a2, $a0, 03297; LA32S-NEXT:    move $a3, $a13298; LA32S-NEXT:    sc.w $a3, $a0, 03299; LA32S-NEXT:    beq $a3, $zero, .LBB70_13300; LA32S-NEXT:  # %bb.2:3301; LA32S-NEXT:    move $a0, $a23302; LA32S-NEXT:    ret3303;3304; LA64-LABEL: atomicrmw_xchg_i32_acq_rel:3305; LA64:       # %bb.0:3306; LA64-NEXT:    amswap_db.w $a2, $a1, $a03307; LA64-NEXT:    move $a0, $a23308; LA64-NEXT:    ret3309  %1 = atomicrmw xchg ptr %a, i32 %b acq_rel3310  ret i32 %13311}3312 3313define i64 @atomicrmw_xchg_i64_acq_rel(ptr %a, i64 %b) nounwind {3314; LA32R-LABEL: atomicrmw_xchg_i64_acq_rel:3315; LA32R:       # %bb.0:3316; LA32R-NEXT:    addi.w $sp, $sp, -163317; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill3318; LA32R-NEXT:    ori $a3, $zero, 43319; LA32R-NEXT:    bl __atomic_exchange_83320; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload3321; LA32R-NEXT:    addi.w $sp, $sp, 163322; LA32R-NEXT:    ret3323;3324; LA32S-LABEL: atomicrmw_xchg_i64_acq_rel:3325; LA32S:       # %bb.0:3326; LA32S-NEXT:    addi.w $sp, $sp, -163327; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill3328; LA32S-NEXT:    ori $a3, $zero, 43329; LA32S-NEXT:    bl __atomic_exchange_83330; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload3331; LA32S-NEXT:    addi.w $sp, $sp, 163332; LA32S-NEXT:    ret3333;3334; LA64-LABEL: atomicrmw_xchg_i64_acq_rel:3335; LA64:       # %bb.0:3336; LA64-NEXT:    amswap_db.d $a2, $a1, $a03337; LA64-NEXT:    move $a0, $a23338; LA64-NEXT:    ret3339  %1 = atomicrmw xchg ptr %a, i64 %b acq_rel3340  ret i64 %13341}3342 3343define i8 @atomicrmw_add_i8_acq_rel(ptr %a, i8 %b) nounwind {3344; LA32R-LABEL: atomicrmw_add_i8_acq_rel:3345; LA32R:       # %bb.0:3346; LA32R-NEXT:    addi.w $a2, $zero, -43347; LA32R-NEXT:    and $a2, $a0, $a23348; LA32R-NEXT:    slli.w $a0, $a0, 33349; LA32R-NEXT:    ori $a3, $zero, 2553350; LA32R-NEXT:    sll.w $a3, $a3, $a03351; LA32R-NEXT:    andi $a1, $a1, 2553352; LA32R-NEXT:    sll.w $a1, $a1, $a03353; LA32R-NEXT:  .LBB72_1: # =>This Inner Loop Header: Depth=13354; LA32R-NEXT:    ll.w $a4, $a2, 03355; LA32R-NEXT:    add.w $a5, $a4, $a13356; LA32R-NEXT:    xor $a5, $a4, $a53357; LA32R-NEXT:    and $a5, $a5, $a33358; LA32R-NEXT:    xor $a5, $a4, $a53359; LA32R-NEXT:    sc.w $a5, $a2, 03360; LA32R-NEXT:    beq $a5, $zero, .LBB72_13361; LA32R-NEXT:  # %bb.2:3362; LA32R-NEXT:    srl.w $a0, $a4, $a03363; LA32R-NEXT:    ret3364;3365; LA32S-LABEL: atomicrmw_add_i8_acq_rel:3366; LA32S:       # %bb.0:3367; LA32S-NEXT:    slli.w $a2, $a0, 33368; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 03369; LA32S-NEXT:    ori $a3, $zero, 2553370; LA32S-NEXT:    sll.w $a3, $a3, $a23371; LA32S-NEXT:    andi $a1, $a1, 2553372; LA32S-NEXT:    sll.w $a1, $a1, $a23373; LA32S-NEXT:  .LBB72_1: # =>This Inner Loop Header: Depth=13374; LA32S-NEXT:    ll.w $a4, $a0, 03375; LA32S-NEXT:    add.w $a5, $a4, $a13376; LA32S-NEXT:    xor $a5, $a4, $a53377; LA32S-NEXT:    and $a5, $a5, $a33378; LA32S-NEXT:    xor $a5, $a4, $a53379; LA32S-NEXT:    sc.w $a5, $a0, 03380; LA32S-NEXT:    beq $a5, $zero, .LBB72_13381; LA32S-NEXT:  # %bb.2:3382; LA32S-NEXT:    srl.w $a0, $a4, $a23383; LA32S-NEXT:    ret3384;3385; LA64-LABEL: atomicrmw_add_i8_acq_rel:3386; LA64:       # %bb.0:3387; LA64-NEXT:    slli.d $a2, $a0, 33388; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03389; LA64-NEXT:    ori $a3, $zero, 2553390; LA64-NEXT:    sll.w $a3, $a3, $a23391; LA64-NEXT:    andi $a1, $a1, 2553392; LA64-NEXT:    sll.w $a1, $a1, $a23393; LA64-NEXT:  .LBB72_1: # =>This Inner Loop Header: Depth=13394; LA64-NEXT:    ll.w $a4, $a0, 03395; LA64-NEXT:    add.w $a5, $a4, $a13396; LA64-NEXT:    xor $a5, $a4, $a53397; LA64-NEXT:    and $a5, $a5, $a33398; LA64-NEXT:    xor $a5, $a4, $a53399; LA64-NEXT:    sc.w $a5, $a0, 03400; LA64-NEXT:    beq $a5, $zero, .LBB72_13401; LA64-NEXT:  # %bb.2:3402; LA64-NEXT:    srl.w $a0, $a4, $a23403; LA64-NEXT:    ret3404  %1 = atomicrmw add ptr %a, i8 %b acq_rel3405  ret i8 %13406}3407 3408define i16 @atomicrmw_add_i16_acq_rel(ptr %a, i16 %b) nounwind {3409; LA32R-LABEL: atomicrmw_add_i16_acq_rel:3410; LA32R:       # %bb.0:3411; LA32R-NEXT:    addi.w $a2, $zero, -43412; LA32R-NEXT:    and $a2, $a0, $a23413; LA32R-NEXT:    slli.w $a0, $a0, 33414; LA32R-NEXT:    lu12i.w $a3, 153415; LA32R-NEXT:    ori $a3, $a3, 40953416; LA32R-NEXT:    sll.w $a4, $a3, $a03417; LA32R-NEXT:    and $a1, $a1, $a33418; LA32R-NEXT:    sll.w $a1, $a1, $a03419; LA32R-NEXT:  .LBB73_1: # =>This Inner Loop Header: Depth=13420; LA32R-NEXT:    ll.w $a3, $a2, 03421; LA32R-NEXT:    add.w $a5, $a3, $a13422; LA32R-NEXT:    xor $a5, $a3, $a53423; LA32R-NEXT:    and $a5, $a5, $a43424; LA32R-NEXT:    xor $a5, $a3, $a53425; LA32R-NEXT:    sc.w $a5, $a2, 03426; LA32R-NEXT:    beq $a5, $zero, .LBB73_13427; LA32R-NEXT:  # %bb.2:3428; LA32R-NEXT:    srl.w $a0, $a3, $a03429; LA32R-NEXT:    ret3430;3431; LA32S-LABEL: atomicrmw_add_i16_acq_rel:3432; LA32S:       # %bb.0:3433; LA32S-NEXT:    slli.w $a2, $a0, 33434; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 03435; LA32S-NEXT:    lu12i.w $a3, 153436; LA32S-NEXT:    ori $a3, $a3, 40953437; LA32S-NEXT:    sll.w $a3, $a3, $a23438; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 03439; LA32S-NEXT:    sll.w $a1, $a1, $a23440; LA32S-NEXT:  .LBB73_1: # =>This Inner Loop Header: Depth=13441; LA32S-NEXT:    ll.w $a4, $a0, 03442; LA32S-NEXT:    add.w $a5, $a4, $a13443; LA32S-NEXT:    xor $a5, $a4, $a53444; LA32S-NEXT:    and $a5, $a5, $a33445; LA32S-NEXT:    xor $a5, $a4, $a53446; LA32S-NEXT:    sc.w $a5, $a0, 03447; LA32S-NEXT:    beq $a5, $zero, .LBB73_13448; LA32S-NEXT:  # %bb.2:3449; LA32S-NEXT:    srl.w $a0, $a4, $a23450; LA32S-NEXT:    ret3451;3452; LA64-LABEL: atomicrmw_add_i16_acq_rel:3453; LA64:       # %bb.0:3454; LA64-NEXT:    slli.d $a2, $a0, 33455; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03456; LA64-NEXT:    lu12i.w $a3, 153457; LA64-NEXT:    ori $a3, $a3, 40953458; LA64-NEXT:    sll.w $a3, $a3, $a23459; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 03460; LA64-NEXT:    sll.w $a1, $a1, $a23461; LA64-NEXT:  .LBB73_1: # =>This Inner Loop Header: Depth=13462; LA64-NEXT:    ll.w $a4, $a0, 03463; LA64-NEXT:    add.w $a5, $a4, $a13464; LA64-NEXT:    xor $a5, $a4, $a53465; LA64-NEXT:    and $a5, $a5, $a33466; LA64-NEXT:    xor $a5, $a4, $a53467; LA64-NEXT:    sc.w $a5, $a0, 03468; LA64-NEXT:    beq $a5, $zero, .LBB73_13469; LA64-NEXT:  # %bb.2:3470; LA64-NEXT:    srl.w $a0, $a4, $a23471; LA64-NEXT:    ret3472  %1 = atomicrmw add ptr %a, i16 %b acq_rel3473  ret i16 %13474}3475 3476define i32 @atomicrmw_add_i32_acq_rel(ptr %a, i32 %b) nounwind {3477; LA32R-LABEL: atomicrmw_add_i32_acq_rel:3478; LA32R:       # %bb.0:3479; LA32R-NEXT:  .LBB74_1: # =>This Inner Loop Header: Depth=13480; LA32R-NEXT:    ll.w $a2, $a0, 03481; LA32R-NEXT:    add.w $a3, $a2, $a13482; LA32R-NEXT:    sc.w $a3, $a0, 03483; LA32R-NEXT:    beq $a3, $zero, .LBB74_13484; LA32R-NEXT:  # %bb.2:3485; LA32R-NEXT:    move $a0, $a23486; LA32R-NEXT:    ret3487;3488; LA32S-LABEL: atomicrmw_add_i32_acq_rel:3489; LA32S:       # %bb.0:3490; LA32S-NEXT:  .LBB74_1: # =>This Inner Loop Header: Depth=13491; LA32S-NEXT:    ll.w $a2, $a0, 03492; LA32S-NEXT:    add.w $a3, $a2, $a13493; LA32S-NEXT:    sc.w $a3, $a0, 03494; LA32S-NEXT:    beq $a3, $zero, .LBB74_13495; LA32S-NEXT:  # %bb.2:3496; LA32S-NEXT:    move $a0, $a23497; LA32S-NEXT:    ret3498;3499; LA64-LABEL: atomicrmw_add_i32_acq_rel:3500; LA64:       # %bb.0:3501; LA64-NEXT:    amadd_db.w $a2, $a1, $a03502; LA64-NEXT:    move $a0, $a23503; LA64-NEXT:    ret3504  %1 = atomicrmw add ptr %a, i32 %b acq_rel3505  ret i32 %13506}3507 3508define i64 @atomicrmw_add_i64_acq_rel(ptr %a, i64 %b) nounwind {3509; LA32R-LABEL: atomicrmw_add_i64_acq_rel:3510; LA32R:       # %bb.0:3511; LA32R-NEXT:    addi.w $sp, $sp, -163512; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill3513; LA32R-NEXT:    ori $a3, $zero, 43514; LA32R-NEXT:    bl __atomic_fetch_add_83515; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload3516; LA32R-NEXT:    addi.w $sp, $sp, 163517; LA32R-NEXT:    ret3518;3519; LA32S-LABEL: atomicrmw_add_i64_acq_rel:3520; LA32S:       # %bb.0:3521; LA32S-NEXT:    addi.w $sp, $sp, -163522; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill3523; LA32S-NEXT:    ori $a3, $zero, 43524; LA32S-NEXT:    bl __atomic_fetch_add_83525; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload3526; LA32S-NEXT:    addi.w $sp, $sp, 163527; LA32S-NEXT:    ret3528;3529; LA64-LABEL: atomicrmw_add_i64_acq_rel:3530; LA64:       # %bb.0:3531; LA64-NEXT:    amadd_db.d $a2, $a1, $a03532; LA64-NEXT:    move $a0, $a23533; LA64-NEXT:    ret3534  %1 = atomicrmw add ptr %a, i64 %b acq_rel3535  ret i64 %13536}3537 3538define i8 @atomicrmw_sub_i8_acq_rel(ptr %a, i8 %b) nounwind {3539; LA32R-LABEL: atomicrmw_sub_i8_acq_rel:3540; LA32R:       # %bb.0:3541; LA32R-NEXT:    addi.w $a2, $zero, -43542; LA32R-NEXT:    and $a2, $a0, $a23543; LA32R-NEXT:    slli.w $a0, $a0, 33544; LA32R-NEXT:    ori $a3, $zero, 2553545; LA32R-NEXT:    sll.w $a3, $a3, $a03546; LA32R-NEXT:    andi $a1, $a1, 2553547; LA32R-NEXT:    sll.w $a1, $a1, $a03548; LA32R-NEXT:  .LBB76_1: # =>This Inner Loop Header: Depth=13549; LA32R-NEXT:    ll.w $a4, $a2, 03550; LA32R-NEXT:    sub.w $a5, $a4, $a13551; LA32R-NEXT:    xor $a5, $a4, $a53552; LA32R-NEXT:    and $a5, $a5, $a33553; LA32R-NEXT:    xor $a5, $a4, $a53554; LA32R-NEXT:    sc.w $a5, $a2, 03555; LA32R-NEXT:    beq $a5, $zero, .LBB76_13556; LA32R-NEXT:  # %bb.2:3557; LA32R-NEXT:    srl.w $a0, $a4, $a03558; LA32R-NEXT:    ret3559;3560; LA32S-LABEL: atomicrmw_sub_i8_acq_rel:3561; LA32S:       # %bb.0:3562; LA32S-NEXT:    slli.w $a2, $a0, 33563; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 03564; LA32S-NEXT:    ori $a3, $zero, 2553565; LA32S-NEXT:    sll.w $a3, $a3, $a23566; LA32S-NEXT:    andi $a1, $a1, 2553567; LA32S-NEXT:    sll.w $a1, $a1, $a23568; LA32S-NEXT:  .LBB76_1: # =>This Inner Loop Header: Depth=13569; LA32S-NEXT:    ll.w $a4, $a0, 03570; LA32S-NEXT:    sub.w $a5, $a4, $a13571; LA32S-NEXT:    xor $a5, $a4, $a53572; LA32S-NEXT:    and $a5, $a5, $a33573; LA32S-NEXT:    xor $a5, $a4, $a53574; LA32S-NEXT:    sc.w $a5, $a0, 03575; LA32S-NEXT:    beq $a5, $zero, .LBB76_13576; LA32S-NEXT:  # %bb.2:3577; LA32S-NEXT:    srl.w $a0, $a4, $a23578; LA32S-NEXT:    ret3579;3580; LA64-LABEL: atomicrmw_sub_i8_acq_rel:3581; LA64:       # %bb.0:3582; LA64-NEXT:    slli.d $a2, $a0, 33583; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03584; LA64-NEXT:    ori $a3, $zero, 2553585; LA64-NEXT:    sll.w $a3, $a3, $a23586; LA64-NEXT:    andi $a1, $a1, 2553587; LA64-NEXT:    sll.w $a1, $a1, $a23588; LA64-NEXT:  .LBB76_1: # =>This Inner Loop Header: Depth=13589; LA64-NEXT:    ll.w $a4, $a0, 03590; LA64-NEXT:    sub.w $a5, $a4, $a13591; LA64-NEXT:    xor $a5, $a4, $a53592; LA64-NEXT:    and $a5, $a5, $a33593; LA64-NEXT:    xor $a5, $a4, $a53594; LA64-NEXT:    sc.w $a5, $a0, 03595; LA64-NEXT:    beq $a5, $zero, .LBB76_13596; LA64-NEXT:  # %bb.2:3597; LA64-NEXT:    srl.w $a0, $a4, $a23598; LA64-NEXT:    ret3599  %1 = atomicrmw sub ptr %a, i8 %b acq_rel3600  ret i8 %13601}3602 3603define i16 @atomicrmw_sub_i16_acq_rel(ptr %a, i16 %b) nounwind {3604; LA32R-LABEL: atomicrmw_sub_i16_acq_rel:3605; LA32R:       # %bb.0:3606; LA32R-NEXT:    addi.w $a2, $zero, -43607; LA32R-NEXT:    and $a2, $a0, $a23608; LA32R-NEXT:    slli.w $a0, $a0, 33609; LA32R-NEXT:    lu12i.w $a3, 153610; LA32R-NEXT:    ori $a3, $a3, 40953611; LA32R-NEXT:    sll.w $a4, $a3, $a03612; LA32R-NEXT:    and $a1, $a1, $a33613; LA32R-NEXT:    sll.w $a1, $a1, $a03614; LA32R-NEXT:  .LBB77_1: # =>This Inner Loop Header: Depth=13615; LA32R-NEXT:    ll.w $a3, $a2, 03616; LA32R-NEXT:    sub.w $a5, $a3, $a13617; LA32R-NEXT:    xor $a5, $a3, $a53618; LA32R-NEXT:    and $a5, $a5, $a43619; LA32R-NEXT:    xor $a5, $a3, $a53620; LA32R-NEXT:    sc.w $a5, $a2, 03621; LA32R-NEXT:    beq $a5, $zero, .LBB77_13622; LA32R-NEXT:  # %bb.2:3623; LA32R-NEXT:    srl.w $a0, $a3, $a03624; LA32R-NEXT:    ret3625;3626; LA32S-LABEL: atomicrmw_sub_i16_acq_rel:3627; LA32S:       # %bb.0:3628; LA32S-NEXT:    slli.w $a2, $a0, 33629; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 03630; LA32S-NEXT:    lu12i.w $a3, 153631; LA32S-NEXT:    ori $a3, $a3, 40953632; LA32S-NEXT:    sll.w $a3, $a3, $a23633; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 03634; LA32S-NEXT:    sll.w $a1, $a1, $a23635; LA32S-NEXT:  .LBB77_1: # =>This Inner Loop Header: Depth=13636; LA32S-NEXT:    ll.w $a4, $a0, 03637; LA32S-NEXT:    sub.w $a5, $a4, $a13638; LA32S-NEXT:    xor $a5, $a4, $a53639; LA32S-NEXT:    and $a5, $a5, $a33640; LA32S-NEXT:    xor $a5, $a4, $a53641; LA32S-NEXT:    sc.w $a5, $a0, 03642; LA32S-NEXT:    beq $a5, $zero, .LBB77_13643; LA32S-NEXT:  # %bb.2:3644; LA32S-NEXT:    srl.w $a0, $a4, $a23645; LA32S-NEXT:    ret3646;3647; LA64-LABEL: atomicrmw_sub_i16_acq_rel:3648; LA64:       # %bb.0:3649; LA64-NEXT:    slli.d $a2, $a0, 33650; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03651; LA64-NEXT:    lu12i.w $a3, 153652; LA64-NEXT:    ori $a3, $a3, 40953653; LA64-NEXT:    sll.w $a3, $a3, $a23654; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 03655; LA64-NEXT:    sll.w $a1, $a1, $a23656; LA64-NEXT:  .LBB77_1: # =>This Inner Loop Header: Depth=13657; LA64-NEXT:    ll.w $a4, $a0, 03658; LA64-NEXT:    sub.w $a5, $a4, $a13659; LA64-NEXT:    xor $a5, $a4, $a53660; LA64-NEXT:    and $a5, $a5, $a33661; LA64-NEXT:    xor $a5, $a4, $a53662; LA64-NEXT:    sc.w $a5, $a0, 03663; LA64-NEXT:    beq $a5, $zero, .LBB77_13664; LA64-NEXT:  # %bb.2:3665; LA64-NEXT:    srl.w $a0, $a4, $a23666; LA64-NEXT:    ret3667  %1 = atomicrmw sub ptr %a, i16 %b acq_rel3668  ret i16 %13669}3670 3671define i32 @atomicrmw_sub_i32_acq_rel(ptr %a, i32 %b) nounwind {3672; LA32R-LABEL: atomicrmw_sub_i32_acq_rel:3673; LA32R:       # %bb.0:3674; LA32R-NEXT:  .LBB78_1: # =>This Inner Loop Header: Depth=13675; LA32R-NEXT:    ll.w $a2, $a0, 03676; LA32R-NEXT:    sub.w $a3, $a2, $a13677; LA32R-NEXT:    sc.w $a3, $a0, 03678; LA32R-NEXT:    beq $a3, $zero, .LBB78_13679; LA32R-NEXT:  # %bb.2:3680; LA32R-NEXT:    move $a0, $a23681; LA32R-NEXT:    ret3682;3683; LA32S-LABEL: atomicrmw_sub_i32_acq_rel:3684; LA32S:       # %bb.0:3685; LA32S-NEXT:  .LBB78_1: # =>This Inner Loop Header: Depth=13686; LA32S-NEXT:    ll.w $a2, $a0, 03687; LA32S-NEXT:    sub.w $a3, $a2, $a13688; LA32S-NEXT:    sc.w $a3, $a0, 03689; LA32S-NEXT:    beq $a3, $zero, .LBB78_13690; LA32S-NEXT:  # %bb.2:3691; LA32S-NEXT:    move $a0, $a23692; LA32S-NEXT:    ret3693;3694; LA64-LABEL: atomicrmw_sub_i32_acq_rel:3695; LA64:       # %bb.0:3696; LA64-NEXT:    sub.w $a2, $zero, $a13697; LA64-NEXT:    amadd_db.w $a1, $a2, $a03698; LA64-NEXT:    move $a0, $a13699; LA64-NEXT:    ret3700  %1 = atomicrmw sub ptr %a, i32 %b acq_rel3701  ret i32 %13702}3703 3704define i64 @atomicrmw_sub_i64_acq_rel(ptr %a, i64 %b) nounwind {3705; LA32R-LABEL: atomicrmw_sub_i64_acq_rel:3706; LA32R:       # %bb.0:3707; LA32R-NEXT:    addi.w $sp, $sp, -163708; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill3709; LA32R-NEXT:    ori $a3, $zero, 43710; LA32R-NEXT:    bl __atomic_fetch_sub_83711; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload3712; LA32R-NEXT:    addi.w $sp, $sp, 163713; LA32R-NEXT:    ret3714;3715; LA32S-LABEL: atomicrmw_sub_i64_acq_rel:3716; LA32S:       # %bb.0:3717; LA32S-NEXT:    addi.w $sp, $sp, -163718; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill3719; LA32S-NEXT:    ori $a3, $zero, 43720; LA32S-NEXT:    bl __atomic_fetch_sub_83721; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload3722; LA32S-NEXT:    addi.w $sp, $sp, 163723; LA32S-NEXT:    ret3724;3725; LA64-LABEL: atomicrmw_sub_i64_acq_rel:3726; LA64:       # %bb.0:3727; LA64-NEXT:    sub.d $a2, $zero, $a13728; LA64-NEXT:    amadd_db.d $a1, $a2, $a03729; LA64-NEXT:    move $a0, $a13730; LA64-NEXT:    ret3731  %1 = atomicrmw sub ptr %a, i64 %b acq_rel3732  ret i64 %13733}3734 3735define i8 @atomicrmw_nand_i8_acq_rel(ptr %a, i8 %b) nounwind {3736; LA32R-LABEL: atomicrmw_nand_i8_acq_rel:3737; LA32R:       # %bb.0:3738; LA32R-NEXT:    addi.w $a2, $zero, -43739; LA32R-NEXT:    and $a2, $a0, $a23740; LA32R-NEXT:    slli.w $a0, $a0, 33741; LA32R-NEXT:    ori $a3, $zero, 2553742; LA32R-NEXT:    sll.w $a3, $a3, $a03743; LA32R-NEXT:    andi $a1, $a1, 2553744; LA32R-NEXT:    sll.w $a1, $a1, $a03745; LA32R-NEXT:  .LBB80_1: # =>This Inner Loop Header: Depth=13746; LA32R-NEXT:    ll.w $a4, $a2, 03747; LA32R-NEXT:    and $a5, $a4, $a13748; LA32R-NEXT:    nor $a5, $a5, $zero3749; LA32R-NEXT:    xor $a5, $a4, $a53750; LA32R-NEXT:    and $a5, $a5, $a33751; LA32R-NEXT:    xor $a5, $a4, $a53752; LA32R-NEXT:    sc.w $a5, $a2, 03753; LA32R-NEXT:    beq $a5, $zero, .LBB80_13754; LA32R-NEXT:  # %bb.2:3755; LA32R-NEXT:    srl.w $a0, $a4, $a03756; LA32R-NEXT:    ret3757;3758; LA32S-LABEL: atomicrmw_nand_i8_acq_rel:3759; LA32S:       # %bb.0:3760; LA32S-NEXT:    slli.w $a2, $a0, 33761; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 03762; LA32S-NEXT:    ori $a3, $zero, 2553763; LA32S-NEXT:    sll.w $a3, $a3, $a23764; LA32S-NEXT:    andi $a1, $a1, 2553765; LA32S-NEXT:    sll.w $a1, $a1, $a23766; LA32S-NEXT:  .LBB80_1: # =>This Inner Loop Header: Depth=13767; LA32S-NEXT:    ll.w $a4, $a0, 03768; LA32S-NEXT:    and $a5, $a4, $a13769; LA32S-NEXT:    nor $a5, $a5, $zero3770; LA32S-NEXT:    xor $a5, $a4, $a53771; LA32S-NEXT:    and $a5, $a5, $a33772; LA32S-NEXT:    xor $a5, $a4, $a53773; LA32S-NEXT:    sc.w $a5, $a0, 03774; LA32S-NEXT:    beq $a5, $zero, .LBB80_13775; LA32S-NEXT:  # %bb.2:3776; LA32S-NEXT:    srl.w $a0, $a4, $a23777; LA32S-NEXT:    ret3778;3779; LA64-LABEL: atomicrmw_nand_i8_acq_rel:3780; LA64:       # %bb.0:3781; LA64-NEXT:    slli.d $a2, $a0, 33782; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03783; LA64-NEXT:    ori $a3, $zero, 2553784; LA64-NEXT:    sll.w $a3, $a3, $a23785; LA64-NEXT:    andi $a1, $a1, 2553786; LA64-NEXT:    sll.w $a1, $a1, $a23787; LA64-NEXT:  .LBB80_1: # =>This Inner Loop Header: Depth=13788; LA64-NEXT:    ll.w $a4, $a0, 03789; LA64-NEXT:    and $a5, $a4, $a13790; LA64-NEXT:    nor $a5, $a5, $zero3791; LA64-NEXT:    xor $a5, $a4, $a53792; LA64-NEXT:    and $a5, $a5, $a33793; LA64-NEXT:    xor $a5, $a4, $a53794; LA64-NEXT:    sc.w $a5, $a0, 03795; LA64-NEXT:    beq $a5, $zero, .LBB80_13796; LA64-NEXT:  # %bb.2:3797; LA64-NEXT:    srl.w $a0, $a4, $a23798; LA64-NEXT:    ret3799  %1 = atomicrmw nand ptr %a, i8 %b acq_rel3800  ret i8 %13801}3802 3803define i16 @atomicrmw_nand_i16_acq_rel(ptr %a, i16 %b) nounwind {3804; LA32R-LABEL: atomicrmw_nand_i16_acq_rel:3805; LA32R:       # %bb.0:3806; LA32R-NEXT:    addi.w $a2, $zero, -43807; LA32R-NEXT:    and $a2, $a0, $a23808; LA32R-NEXT:    slli.w $a0, $a0, 33809; LA32R-NEXT:    lu12i.w $a3, 153810; LA32R-NEXT:    ori $a3, $a3, 40953811; LA32R-NEXT:    sll.w $a4, $a3, $a03812; LA32R-NEXT:    and $a1, $a1, $a33813; LA32R-NEXT:    sll.w $a1, $a1, $a03814; LA32R-NEXT:  .LBB81_1: # =>This Inner Loop Header: Depth=13815; LA32R-NEXT:    ll.w $a3, $a2, 03816; LA32R-NEXT:    and $a5, $a3, $a13817; LA32R-NEXT:    nor $a5, $a5, $zero3818; LA32R-NEXT:    xor $a5, $a3, $a53819; LA32R-NEXT:    and $a5, $a5, $a43820; LA32R-NEXT:    xor $a5, $a3, $a53821; LA32R-NEXT:    sc.w $a5, $a2, 03822; LA32R-NEXT:    beq $a5, $zero, .LBB81_13823; LA32R-NEXT:  # %bb.2:3824; LA32R-NEXT:    srl.w $a0, $a3, $a03825; LA32R-NEXT:    ret3826;3827; LA32S-LABEL: atomicrmw_nand_i16_acq_rel:3828; LA32S:       # %bb.0:3829; LA32S-NEXT:    slli.w $a2, $a0, 33830; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 03831; LA32S-NEXT:    lu12i.w $a3, 153832; LA32S-NEXT:    ori $a3, $a3, 40953833; LA32S-NEXT:    sll.w $a3, $a3, $a23834; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 03835; LA32S-NEXT:    sll.w $a1, $a1, $a23836; LA32S-NEXT:  .LBB81_1: # =>This Inner Loop Header: Depth=13837; LA32S-NEXT:    ll.w $a4, $a0, 03838; LA32S-NEXT:    and $a5, $a4, $a13839; LA32S-NEXT:    nor $a5, $a5, $zero3840; LA32S-NEXT:    xor $a5, $a4, $a53841; LA32S-NEXT:    and $a5, $a5, $a33842; LA32S-NEXT:    xor $a5, $a4, $a53843; LA32S-NEXT:    sc.w $a5, $a0, 03844; LA32S-NEXT:    beq $a5, $zero, .LBB81_13845; LA32S-NEXT:  # %bb.2:3846; LA32S-NEXT:    srl.w $a0, $a4, $a23847; LA32S-NEXT:    ret3848;3849; LA64-LABEL: atomicrmw_nand_i16_acq_rel:3850; LA64:       # %bb.0:3851; LA64-NEXT:    slli.d $a2, $a0, 33852; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03853; LA64-NEXT:    lu12i.w $a3, 153854; LA64-NEXT:    ori $a3, $a3, 40953855; LA64-NEXT:    sll.w $a3, $a3, $a23856; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 03857; LA64-NEXT:    sll.w $a1, $a1, $a23858; LA64-NEXT:  .LBB81_1: # =>This Inner Loop Header: Depth=13859; LA64-NEXT:    ll.w $a4, $a0, 03860; LA64-NEXT:    and $a5, $a4, $a13861; LA64-NEXT:    nor $a5, $a5, $zero3862; LA64-NEXT:    xor $a5, $a4, $a53863; LA64-NEXT:    and $a5, $a5, $a33864; LA64-NEXT:    xor $a5, $a4, $a53865; LA64-NEXT:    sc.w $a5, $a0, 03866; LA64-NEXT:    beq $a5, $zero, .LBB81_13867; LA64-NEXT:  # %bb.2:3868; LA64-NEXT:    srl.w $a0, $a4, $a23869; LA64-NEXT:    ret3870  %1 = atomicrmw nand ptr %a, i16 %b acq_rel3871  ret i16 %13872}3873 3874define i32 @atomicrmw_nand_i32_acq_rel(ptr %a, i32 %b) nounwind {3875; LA32R-LABEL: atomicrmw_nand_i32_acq_rel:3876; LA32R:       # %bb.0:3877; LA32R-NEXT:  .LBB82_1: # =>This Inner Loop Header: Depth=13878; LA32R-NEXT:    ll.w $a2, $a0, 03879; LA32R-NEXT:    and $a3, $a2, $a13880; LA32R-NEXT:    nor $a3, $a3, $zero3881; LA32R-NEXT:    sc.w $a3, $a0, 03882; LA32R-NEXT:    beq $a3, $zero, .LBB82_13883; LA32R-NEXT:  # %bb.2:3884; LA32R-NEXT:    move $a0, $a23885; LA32R-NEXT:    ret3886;3887; LA32S-LABEL: atomicrmw_nand_i32_acq_rel:3888; LA32S:       # %bb.0:3889; LA32S-NEXT:  .LBB82_1: # =>This Inner Loop Header: Depth=13890; LA32S-NEXT:    ll.w $a2, $a0, 03891; LA32S-NEXT:    and $a3, $a2, $a13892; LA32S-NEXT:    nor $a3, $a3, $zero3893; LA32S-NEXT:    sc.w $a3, $a0, 03894; LA32S-NEXT:    beq $a3, $zero, .LBB82_13895; LA32S-NEXT:  # %bb.2:3896; LA32S-NEXT:    move $a0, $a23897; LA32S-NEXT:    ret3898;3899; LA64-LABEL: atomicrmw_nand_i32_acq_rel:3900; LA64:       # %bb.0:3901; LA64-NEXT:  .LBB82_1: # =>This Inner Loop Header: Depth=13902; LA64-NEXT:    ll.w $a2, $a0, 03903; LA64-NEXT:    and $a3, $a2, $a13904; LA64-NEXT:    nor $a3, $a3, $zero3905; LA64-NEXT:    sc.w $a3, $a0, 03906; LA64-NEXT:    beq $a3, $zero, .LBB82_13907; LA64-NEXT:  # %bb.2:3908; LA64-NEXT:    move $a0, $a23909; LA64-NEXT:    ret3910  %1 = atomicrmw nand ptr %a, i32 %b acq_rel3911  ret i32 %13912}3913 3914define i64 @atomicrmw_nand_i64_acq_rel(ptr %a, i64 %b) nounwind {3915; LA32R-LABEL: atomicrmw_nand_i64_acq_rel:3916; LA32R:       # %bb.0:3917; LA32R-NEXT:    addi.w $sp, $sp, -163918; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill3919; LA32R-NEXT:    ori $a3, $zero, 43920; LA32R-NEXT:    bl __atomic_fetch_nand_83921; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload3922; LA32R-NEXT:    addi.w $sp, $sp, 163923; LA32R-NEXT:    ret3924;3925; LA32S-LABEL: atomicrmw_nand_i64_acq_rel:3926; LA32S:       # %bb.0:3927; LA32S-NEXT:    addi.w $sp, $sp, -163928; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill3929; LA32S-NEXT:    ori $a3, $zero, 43930; LA32S-NEXT:    bl __atomic_fetch_nand_83931; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload3932; LA32S-NEXT:    addi.w $sp, $sp, 163933; LA32S-NEXT:    ret3934;3935; LA64-LABEL: atomicrmw_nand_i64_acq_rel:3936; LA64:       # %bb.0:3937; LA64-NEXT:  .LBB83_1: # =>This Inner Loop Header: Depth=13938; LA64-NEXT:    ll.d $a2, $a0, 03939; LA64-NEXT:    and $a3, $a2, $a13940; LA64-NEXT:    nor $a3, $a3, $zero3941; LA64-NEXT:    sc.d $a3, $a0, 03942; LA64-NEXT:    beq $a3, $zero, .LBB83_13943; LA64-NEXT:  # %bb.2:3944; LA64-NEXT:    move $a0, $a23945; LA64-NEXT:    ret3946  %1 = atomicrmw nand ptr %a, i64 %b acq_rel3947  ret i64 %13948}3949 3950define i8 @atomicrmw_and_i8_acq_rel(ptr %a, i8 %b) nounwind {3951; LA32R-LABEL: atomicrmw_and_i8_acq_rel:3952; LA32R:       # %bb.0:3953; LA32R-NEXT:    addi.w $a2, $zero, -43954; LA32R-NEXT:    and $a2, $a0, $a23955; LA32R-NEXT:    slli.w $a0, $a0, 33956; LA32R-NEXT:    ori $a3, $zero, 2553957; LA32R-NEXT:    sll.w $a3, $a3, $a03958; LA32R-NEXT:    andi $a1, $a1, 2553959; LA32R-NEXT:    sll.w $a1, $a1, $a03960; LA32R-NEXT:    orn $a1, $a1, $a33961; LA32R-NEXT:  .LBB84_1: # =>This Inner Loop Header: Depth=13962; LA32R-NEXT:    ll.w $a3, $a2, 03963; LA32R-NEXT:    and $a4, $a3, $a13964; LA32R-NEXT:    sc.w $a4, $a2, 03965; LA32R-NEXT:    beq $a4, $zero, .LBB84_13966; LA32R-NEXT:  # %bb.2:3967; LA32R-NEXT:    srl.w $a0, $a3, $a03968; LA32R-NEXT:    ret3969;3970; LA32S-LABEL: atomicrmw_and_i8_acq_rel:3971; LA32S:       # %bb.0:3972; LA32S-NEXT:    slli.w $a2, $a0, 33973; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 03974; LA32S-NEXT:    ori $a3, $zero, 2553975; LA32S-NEXT:    sll.w $a3, $a3, $a23976; LA32S-NEXT:    andi $a1, $a1, 2553977; LA32S-NEXT:    sll.w $a1, $a1, $a23978; LA32S-NEXT:    orn $a1, $a1, $a33979; LA32S-NEXT:  .LBB84_1: # =>This Inner Loop Header: Depth=13980; LA32S-NEXT:    ll.w $a3, $a0, 03981; LA32S-NEXT:    and $a4, $a3, $a13982; LA32S-NEXT:    sc.w $a4, $a0, 03983; LA32S-NEXT:    beq $a4, $zero, .LBB84_13984; LA32S-NEXT:  # %bb.2:3985; LA32S-NEXT:    srl.w $a0, $a3, $a23986; LA32S-NEXT:    ret3987;3988; LA64-LABEL: atomicrmw_and_i8_acq_rel:3989; LA64:       # %bb.0:3990; LA64-NEXT:    slli.d $a2, $a0, 33991; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03992; LA64-NEXT:    ori $a3, $zero, 2553993; LA64-NEXT:    sll.w $a3, $a3, $a23994; LA64-NEXT:    andi $a1, $a1, 2553995; LA64-NEXT:    sll.w $a1, $a1, $a23996; LA64-NEXT:    orn $a1, $a1, $a33997; LA64-NEXT:    amand_db.w $a3, $a1, $a03998; LA64-NEXT:    srl.w $a0, $a3, $a23999; LA64-NEXT:    ret4000  %1 = atomicrmw and ptr %a, i8 %b acq_rel4001  ret i8 %14002}4003 4004define i16 @atomicrmw_and_i16_acq_rel(ptr %a, i16 %b) nounwind {4005; LA32R-LABEL: atomicrmw_and_i16_acq_rel:4006; LA32R:       # %bb.0:4007; LA32R-NEXT:    addi.w $a2, $zero, -44008; LA32R-NEXT:    and $a2, $a0, $a24009; LA32R-NEXT:    slli.w $a0, $a0, 34010; LA32R-NEXT:    lu12i.w $a3, 154011; LA32R-NEXT:    ori $a3, $a3, 40954012; LA32R-NEXT:    sll.w $a4, $a3, $a04013; LA32R-NEXT:    and $a1, $a1, $a34014; LA32R-NEXT:    sll.w $a1, $a1, $a04015; LA32R-NEXT:    orn $a1, $a1, $a44016; LA32R-NEXT:  .LBB85_1: # =>This Inner Loop Header: Depth=14017; LA32R-NEXT:    ll.w $a3, $a2, 04018; LA32R-NEXT:    and $a4, $a3, $a14019; LA32R-NEXT:    sc.w $a4, $a2, 04020; LA32R-NEXT:    beq $a4, $zero, .LBB85_14021; LA32R-NEXT:  # %bb.2:4022; LA32R-NEXT:    srl.w $a0, $a3, $a04023; LA32R-NEXT:    ret4024;4025; LA32S-LABEL: atomicrmw_and_i16_acq_rel:4026; LA32S:       # %bb.0:4027; LA32S-NEXT:    slli.w $a2, $a0, 34028; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 04029; LA32S-NEXT:    lu12i.w $a3, 154030; LA32S-NEXT:    ori $a3, $a3, 40954031; LA32S-NEXT:    sll.w $a3, $a3, $a24032; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 04033; LA32S-NEXT:    sll.w $a1, $a1, $a24034; LA32S-NEXT:    orn $a1, $a1, $a34035; LA32S-NEXT:  .LBB85_1: # =>This Inner Loop Header: Depth=14036; LA32S-NEXT:    ll.w $a3, $a0, 04037; LA32S-NEXT:    and $a4, $a3, $a14038; LA32S-NEXT:    sc.w $a4, $a0, 04039; LA32S-NEXT:    beq $a4, $zero, .LBB85_14040; LA32S-NEXT:  # %bb.2:4041; LA32S-NEXT:    srl.w $a0, $a3, $a24042; LA32S-NEXT:    ret4043;4044; LA64-LABEL: atomicrmw_and_i16_acq_rel:4045; LA64:       # %bb.0:4046; LA64-NEXT:    slli.d $a2, $a0, 34047; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04048; LA64-NEXT:    lu12i.w $a3, 154049; LA64-NEXT:    ori $a3, $a3, 40954050; LA64-NEXT:    sll.w $a3, $a3, $a24051; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 04052; LA64-NEXT:    sll.w $a1, $a1, $a24053; LA64-NEXT:    orn $a1, $a1, $a34054; LA64-NEXT:    amand_db.w $a3, $a1, $a04055; LA64-NEXT:    srl.w $a0, $a3, $a24056; LA64-NEXT:    ret4057  %1 = atomicrmw and ptr %a, i16 %b acq_rel4058  ret i16 %14059}4060 4061define i32 @atomicrmw_and_i32_acq_rel(ptr %a, i32 %b) nounwind {4062; LA32R-LABEL: atomicrmw_and_i32_acq_rel:4063; LA32R:       # %bb.0:4064; LA32R-NEXT:  .LBB86_1: # =>This Inner Loop Header: Depth=14065; LA32R-NEXT:    ll.w $a2, $a0, 04066; LA32R-NEXT:    and $a3, $a2, $a14067; LA32R-NEXT:    sc.w $a3, $a0, 04068; LA32R-NEXT:    beq $a3, $zero, .LBB86_14069; LA32R-NEXT:  # %bb.2:4070; LA32R-NEXT:    move $a0, $a24071; LA32R-NEXT:    ret4072;4073; LA32S-LABEL: atomicrmw_and_i32_acq_rel:4074; LA32S:       # %bb.0:4075; LA32S-NEXT:  .LBB86_1: # =>This Inner Loop Header: Depth=14076; LA32S-NEXT:    ll.w $a2, $a0, 04077; LA32S-NEXT:    and $a3, $a2, $a14078; LA32S-NEXT:    sc.w $a3, $a0, 04079; LA32S-NEXT:    beq $a3, $zero, .LBB86_14080; LA32S-NEXT:  # %bb.2:4081; LA32S-NEXT:    move $a0, $a24082; LA32S-NEXT:    ret4083;4084; LA64-LABEL: atomicrmw_and_i32_acq_rel:4085; LA64:       # %bb.0:4086; LA64-NEXT:    amand_db.w $a2, $a1, $a04087; LA64-NEXT:    move $a0, $a24088; LA64-NEXT:    ret4089  %1 = atomicrmw and ptr %a, i32 %b acq_rel4090  ret i32 %14091}4092 4093define i64 @atomicrmw_and_i64_acq_rel(ptr %a, i64 %b) nounwind {4094; LA32R-LABEL: atomicrmw_and_i64_acq_rel:4095; LA32R:       # %bb.0:4096; LA32R-NEXT:    addi.w $sp, $sp, -164097; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill4098; LA32R-NEXT:    ori $a3, $zero, 44099; LA32R-NEXT:    bl __atomic_fetch_and_84100; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload4101; LA32R-NEXT:    addi.w $sp, $sp, 164102; LA32R-NEXT:    ret4103;4104; LA32S-LABEL: atomicrmw_and_i64_acq_rel:4105; LA32S:       # %bb.0:4106; LA32S-NEXT:    addi.w $sp, $sp, -164107; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill4108; LA32S-NEXT:    ori $a3, $zero, 44109; LA32S-NEXT:    bl __atomic_fetch_and_84110; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload4111; LA32S-NEXT:    addi.w $sp, $sp, 164112; LA32S-NEXT:    ret4113;4114; LA64-LABEL: atomicrmw_and_i64_acq_rel:4115; LA64:       # %bb.0:4116; LA64-NEXT:    amand_db.d $a2, $a1, $a04117; LA64-NEXT:    move $a0, $a24118; LA64-NEXT:    ret4119  %1 = atomicrmw and ptr %a, i64 %b acq_rel4120  ret i64 %14121}4122 4123define i8 @atomicrmw_or_i8_acq_rel(ptr %a, i8 %b) nounwind {4124; LA32R-LABEL: atomicrmw_or_i8_acq_rel:4125; LA32R:       # %bb.0:4126; LA32R-NEXT:    addi.w $a2, $zero, -44127; LA32R-NEXT:    and $a2, $a0, $a24128; LA32R-NEXT:    slli.w $a0, $a0, 34129; LA32R-NEXT:    andi $a1, $a1, 2554130; LA32R-NEXT:    sll.w $a1, $a1, $a04131; LA32R-NEXT:  .LBB88_1: # =>This Inner Loop Header: Depth=14132; LA32R-NEXT:    ll.w $a3, $a2, 04133; LA32R-NEXT:    or $a4, $a3, $a14134; LA32R-NEXT:    sc.w $a4, $a2, 04135; LA32R-NEXT:    beq $a4, $zero, .LBB88_14136; LA32R-NEXT:  # %bb.2:4137; LA32R-NEXT:    srl.w $a0, $a3, $a04138; LA32R-NEXT:    ret4139;4140; LA32S-LABEL: atomicrmw_or_i8_acq_rel:4141; LA32S:       # %bb.0:4142; LA32S-NEXT:    slli.w $a2, $a0, 34143; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 04144; LA32S-NEXT:    andi $a1, $a1, 2554145; LA32S-NEXT:    sll.w $a1, $a1, $a24146; LA32S-NEXT:  .LBB88_1: # =>This Inner Loop Header: Depth=14147; LA32S-NEXT:    ll.w $a3, $a0, 04148; LA32S-NEXT:    or $a4, $a3, $a14149; LA32S-NEXT:    sc.w $a4, $a0, 04150; LA32S-NEXT:    beq $a4, $zero, .LBB88_14151; LA32S-NEXT:  # %bb.2:4152; LA32S-NEXT:    srl.w $a0, $a3, $a24153; LA32S-NEXT:    ret4154;4155; LA64-LABEL: atomicrmw_or_i8_acq_rel:4156; LA64:       # %bb.0:4157; LA64-NEXT:    slli.d $a2, $a0, 34158; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04159; LA64-NEXT:    andi $a1, $a1, 2554160; LA64-NEXT:    sll.w $a1, $a1, $a24161; LA64-NEXT:    amor_db.w $a3, $a1, $a04162; LA64-NEXT:    srl.w $a0, $a3, $a24163; LA64-NEXT:    ret4164  %1 = atomicrmw or ptr %a, i8 %b acq_rel4165  ret i8 %14166}4167 4168define i16 @atomicrmw_or_i16_acq_rel(ptr %a, i16 %b) nounwind {4169; LA32R-LABEL: atomicrmw_or_i16_acq_rel:4170; LA32R:       # %bb.0:4171; LA32R-NEXT:    addi.w $a2, $zero, -44172; LA32R-NEXT:    and $a2, $a0, $a24173; LA32R-NEXT:    slli.w $a0, $a0, 34174; LA32R-NEXT:    lu12i.w $a3, 154175; LA32R-NEXT:    ori $a3, $a3, 40954176; LA32R-NEXT:    and $a1, $a1, $a34177; LA32R-NEXT:    sll.w $a1, $a1, $a04178; LA32R-NEXT:  .LBB89_1: # =>This Inner Loop Header: Depth=14179; LA32R-NEXT:    ll.w $a3, $a2, 04180; LA32R-NEXT:    or $a4, $a3, $a14181; LA32R-NEXT:    sc.w $a4, $a2, 04182; LA32R-NEXT:    beq $a4, $zero, .LBB89_14183; LA32R-NEXT:  # %bb.2:4184; LA32R-NEXT:    srl.w $a0, $a3, $a04185; LA32R-NEXT:    ret4186;4187; LA32S-LABEL: atomicrmw_or_i16_acq_rel:4188; LA32S:       # %bb.0:4189; LA32S-NEXT:    slli.w $a2, $a0, 34190; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 04191; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 04192; LA32S-NEXT:    sll.w $a1, $a1, $a24193; LA32S-NEXT:  .LBB89_1: # =>This Inner Loop Header: Depth=14194; LA32S-NEXT:    ll.w $a3, $a0, 04195; LA32S-NEXT:    or $a4, $a3, $a14196; LA32S-NEXT:    sc.w $a4, $a0, 04197; LA32S-NEXT:    beq $a4, $zero, .LBB89_14198; LA32S-NEXT:  # %bb.2:4199; LA32S-NEXT:    srl.w $a0, $a3, $a24200; LA32S-NEXT:    ret4201;4202; LA64-LABEL: atomicrmw_or_i16_acq_rel:4203; LA64:       # %bb.0:4204; LA64-NEXT:    slli.d $a2, $a0, 34205; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04206; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 04207; LA64-NEXT:    sll.w $a1, $a1, $a24208; LA64-NEXT:    amor_db.w $a3, $a1, $a04209; LA64-NEXT:    srl.w $a0, $a3, $a24210; LA64-NEXT:    ret4211  %1 = atomicrmw or ptr %a, i16 %b acq_rel4212  ret i16 %14213}4214 4215define i32 @atomicrmw_or_i32_acq_rel(ptr %a, i32 %b) nounwind {4216; LA32R-LABEL: atomicrmw_or_i32_acq_rel:4217; LA32R:       # %bb.0:4218; LA32R-NEXT:  .LBB90_1: # =>This Inner Loop Header: Depth=14219; LA32R-NEXT:    ll.w $a2, $a0, 04220; LA32R-NEXT:    or $a3, $a2, $a14221; LA32R-NEXT:    sc.w $a3, $a0, 04222; LA32R-NEXT:    beq $a3, $zero, .LBB90_14223; LA32R-NEXT:  # %bb.2:4224; LA32R-NEXT:    move $a0, $a24225; LA32R-NEXT:    ret4226;4227; LA32S-LABEL: atomicrmw_or_i32_acq_rel:4228; LA32S:       # %bb.0:4229; LA32S-NEXT:  .LBB90_1: # =>This Inner Loop Header: Depth=14230; LA32S-NEXT:    ll.w $a2, $a0, 04231; LA32S-NEXT:    or $a3, $a2, $a14232; LA32S-NEXT:    sc.w $a3, $a0, 04233; LA32S-NEXT:    beq $a3, $zero, .LBB90_14234; LA32S-NEXT:  # %bb.2:4235; LA32S-NEXT:    move $a0, $a24236; LA32S-NEXT:    ret4237;4238; LA64-LABEL: atomicrmw_or_i32_acq_rel:4239; LA64:       # %bb.0:4240; LA64-NEXT:    amor_db.w $a2, $a1, $a04241; LA64-NEXT:    move $a0, $a24242; LA64-NEXT:    ret4243  %1 = atomicrmw or ptr %a, i32 %b acq_rel4244  ret i32 %14245}4246 4247define i64 @atomicrmw_or_i64_acq_rel(ptr %a, i64 %b) nounwind {4248; LA32R-LABEL: atomicrmw_or_i64_acq_rel:4249; LA32R:       # %bb.0:4250; LA32R-NEXT:    addi.w $sp, $sp, -164251; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill4252; LA32R-NEXT:    ori $a3, $zero, 44253; LA32R-NEXT:    bl __atomic_fetch_or_84254; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload4255; LA32R-NEXT:    addi.w $sp, $sp, 164256; LA32R-NEXT:    ret4257;4258; LA32S-LABEL: atomicrmw_or_i64_acq_rel:4259; LA32S:       # %bb.0:4260; LA32S-NEXT:    addi.w $sp, $sp, -164261; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill4262; LA32S-NEXT:    ori $a3, $zero, 44263; LA32S-NEXT:    bl __atomic_fetch_or_84264; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload4265; LA32S-NEXT:    addi.w $sp, $sp, 164266; LA32S-NEXT:    ret4267;4268; LA64-LABEL: atomicrmw_or_i64_acq_rel:4269; LA64:       # %bb.0:4270; LA64-NEXT:    amor_db.d $a2, $a1, $a04271; LA64-NEXT:    move $a0, $a24272; LA64-NEXT:    ret4273  %1 = atomicrmw or ptr %a, i64 %b acq_rel4274  ret i64 %14275}4276 4277define i8 @atomicrmw_xor_i8_acq_rel(ptr %a, i8 %b) nounwind {4278; LA32R-LABEL: atomicrmw_xor_i8_acq_rel:4279; LA32R:       # %bb.0:4280; LA32R-NEXT:    addi.w $a2, $zero, -44281; LA32R-NEXT:    and $a2, $a0, $a24282; LA32R-NEXT:    slli.w $a0, $a0, 34283; LA32R-NEXT:    andi $a1, $a1, 2554284; LA32R-NEXT:    sll.w $a1, $a1, $a04285; LA32R-NEXT:  .LBB92_1: # =>This Inner Loop Header: Depth=14286; LA32R-NEXT:    ll.w $a3, $a2, 04287; LA32R-NEXT:    xor $a4, $a3, $a14288; LA32R-NEXT:    sc.w $a4, $a2, 04289; LA32R-NEXT:    beq $a4, $zero, .LBB92_14290; LA32R-NEXT:  # %bb.2:4291; LA32R-NEXT:    srl.w $a0, $a3, $a04292; LA32R-NEXT:    ret4293;4294; LA32S-LABEL: atomicrmw_xor_i8_acq_rel:4295; LA32S:       # %bb.0:4296; LA32S-NEXT:    slli.w $a2, $a0, 34297; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 04298; LA32S-NEXT:    andi $a1, $a1, 2554299; LA32S-NEXT:    sll.w $a1, $a1, $a24300; LA32S-NEXT:  .LBB92_1: # =>This Inner Loop Header: Depth=14301; LA32S-NEXT:    ll.w $a3, $a0, 04302; LA32S-NEXT:    xor $a4, $a3, $a14303; LA32S-NEXT:    sc.w $a4, $a0, 04304; LA32S-NEXT:    beq $a4, $zero, .LBB92_14305; LA32S-NEXT:  # %bb.2:4306; LA32S-NEXT:    srl.w $a0, $a3, $a24307; LA32S-NEXT:    ret4308;4309; LA64-LABEL: atomicrmw_xor_i8_acq_rel:4310; LA64:       # %bb.0:4311; LA64-NEXT:    slli.d $a2, $a0, 34312; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04313; LA64-NEXT:    andi $a1, $a1, 2554314; LA64-NEXT:    sll.w $a1, $a1, $a24315; LA64-NEXT:    amxor_db.w $a3, $a1, $a04316; LA64-NEXT:    srl.w $a0, $a3, $a24317; LA64-NEXT:    ret4318  %1 = atomicrmw xor ptr %a, i8 %b acq_rel4319  ret i8 %14320}4321 4322define i16 @atomicrmw_xor_i16_acq_rel(ptr %a, i16 %b) nounwind {4323; LA32R-LABEL: atomicrmw_xor_i16_acq_rel:4324; LA32R:       # %bb.0:4325; LA32R-NEXT:    addi.w $a2, $zero, -44326; LA32R-NEXT:    and $a2, $a0, $a24327; LA32R-NEXT:    slli.w $a0, $a0, 34328; LA32R-NEXT:    lu12i.w $a3, 154329; LA32R-NEXT:    ori $a3, $a3, 40954330; LA32R-NEXT:    and $a1, $a1, $a34331; LA32R-NEXT:    sll.w $a1, $a1, $a04332; LA32R-NEXT:  .LBB93_1: # =>This Inner Loop Header: Depth=14333; LA32R-NEXT:    ll.w $a3, $a2, 04334; LA32R-NEXT:    xor $a4, $a3, $a14335; LA32R-NEXT:    sc.w $a4, $a2, 04336; LA32R-NEXT:    beq $a4, $zero, .LBB93_14337; LA32R-NEXT:  # %bb.2:4338; LA32R-NEXT:    srl.w $a0, $a3, $a04339; LA32R-NEXT:    ret4340;4341; LA32S-LABEL: atomicrmw_xor_i16_acq_rel:4342; LA32S:       # %bb.0:4343; LA32S-NEXT:    slli.w $a2, $a0, 34344; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 04345; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 04346; LA32S-NEXT:    sll.w $a1, $a1, $a24347; LA32S-NEXT:  .LBB93_1: # =>This Inner Loop Header: Depth=14348; LA32S-NEXT:    ll.w $a3, $a0, 04349; LA32S-NEXT:    xor $a4, $a3, $a14350; LA32S-NEXT:    sc.w $a4, $a0, 04351; LA32S-NEXT:    beq $a4, $zero, .LBB93_14352; LA32S-NEXT:  # %bb.2:4353; LA32S-NEXT:    srl.w $a0, $a3, $a24354; LA32S-NEXT:    ret4355;4356; LA64-LABEL: atomicrmw_xor_i16_acq_rel:4357; LA64:       # %bb.0:4358; LA64-NEXT:    slli.d $a2, $a0, 34359; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04360; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 04361; LA64-NEXT:    sll.w $a1, $a1, $a24362; LA64-NEXT:    amxor_db.w $a3, $a1, $a04363; LA64-NEXT:    srl.w $a0, $a3, $a24364; LA64-NEXT:    ret4365  %1 = atomicrmw xor ptr %a, i16 %b acq_rel4366  ret i16 %14367}4368 4369define i32 @atomicrmw_xor_i32_acq_rel(ptr %a, i32 %b) nounwind {4370; LA32R-LABEL: atomicrmw_xor_i32_acq_rel:4371; LA32R:       # %bb.0:4372; LA32R-NEXT:  .LBB94_1: # =>This Inner Loop Header: Depth=14373; LA32R-NEXT:    ll.w $a2, $a0, 04374; LA32R-NEXT:    xor $a3, $a2, $a14375; LA32R-NEXT:    sc.w $a3, $a0, 04376; LA32R-NEXT:    beq $a3, $zero, .LBB94_14377; LA32R-NEXT:  # %bb.2:4378; LA32R-NEXT:    move $a0, $a24379; LA32R-NEXT:    ret4380;4381; LA32S-LABEL: atomicrmw_xor_i32_acq_rel:4382; LA32S:       # %bb.0:4383; LA32S-NEXT:  .LBB94_1: # =>This Inner Loop Header: Depth=14384; LA32S-NEXT:    ll.w $a2, $a0, 04385; LA32S-NEXT:    xor $a3, $a2, $a14386; LA32S-NEXT:    sc.w $a3, $a0, 04387; LA32S-NEXT:    beq $a3, $zero, .LBB94_14388; LA32S-NEXT:  # %bb.2:4389; LA32S-NEXT:    move $a0, $a24390; LA32S-NEXT:    ret4391;4392; LA64-LABEL: atomicrmw_xor_i32_acq_rel:4393; LA64:       # %bb.0:4394; LA64-NEXT:    amxor_db.w $a2, $a1, $a04395; LA64-NEXT:    move $a0, $a24396; LA64-NEXT:    ret4397  %1 = atomicrmw xor ptr %a, i32 %b acq_rel4398  ret i32 %14399}4400 4401define i64 @atomicrmw_xor_i64_acq_rel(ptr %a, i64 %b) nounwind {4402; LA32R-LABEL: atomicrmw_xor_i64_acq_rel:4403; LA32R:       # %bb.0:4404; LA32R-NEXT:    addi.w $sp, $sp, -164405; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill4406; LA32R-NEXT:    ori $a3, $zero, 44407; LA32R-NEXT:    bl __atomic_fetch_xor_84408; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload4409; LA32R-NEXT:    addi.w $sp, $sp, 164410; LA32R-NEXT:    ret4411;4412; LA32S-LABEL: atomicrmw_xor_i64_acq_rel:4413; LA32S:       # %bb.0:4414; LA32S-NEXT:    addi.w $sp, $sp, -164415; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill4416; LA32S-NEXT:    ori $a3, $zero, 44417; LA32S-NEXT:    bl __atomic_fetch_xor_84418; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload4419; LA32S-NEXT:    addi.w $sp, $sp, 164420; LA32S-NEXT:    ret4421;4422; LA64-LABEL: atomicrmw_xor_i64_acq_rel:4423; LA64:       # %bb.0:4424; LA64-NEXT:    amxor_db.d $a2, $a1, $a04425; LA64-NEXT:    move $a0, $a24426; LA64-NEXT:    ret4427  %1 = atomicrmw xor ptr %a, i64 %b acq_rel4428  ret i64 %14429}4430 4431define i8 @atomicrmw_xchg_i8_seq_cst(ptr %a, i8 %b) nounwind {4432; LA32R-LABEL: atomicrmw_xchg_i8_seq_cst:4433; LA32R:       # %bb.0:4434; LA32R-NEXT:    addi.w $a2, $zero, -44435; LA32R-NEXT:    and $a2, $a0, $a24436; LA32R-NEXT:    slli.w $a0, $a0, 34437; LA32R-NEXT:    ori $a3, $zero, 2554438; LA32R-NEXT:    sll.w $a3, $a3, $a04439; LA32R-NEXT:    andi $a1, $a1, 2554440; LA32R-NEXT:    sll.w $a1, $a1, $a04441; LA32R-NEXT:  .LBB96_1: # =>This Inner Loop Header: Depth=14442; LA32R-NEXT:    ll.w $a4, $a2, 04443; LA32R-NEXT:    addi.w $a5, $a1, 04444; LA32R-NEXT:    xor $a5, $a4, $a54445; LA32R-NEXT:    and $a5, $a5, $a34446; LA32R-NEXT:    xor $a5, $a4, $a54447; LA32R-NEXT:    sc.w $a5, $a2, 04448; LA32R-NEXT:    beq $a5, $zero, .LBB96_14449; LA32R-NEXT:  # %bb.2:4450; LA32R-NEXT:    srl.w $a0, $a4, $a04451; LA32R-NEXT:    ret4452;4453; LA32S-LABEL: atomicrmw_xchg_i8_seq_cst:4454; LA32S:       # %bb.0:4455; LA32S-NEXT:    slli.w $a2, $a0, 34456; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 04457; LA32S-NEXT:    ori $a3, $zero, 2554458; LA32S-NEXT:    sll.w $a3, $a3, $a24459; LA32S-NEXT:    andi $a1, $a1, 2554460; LA32S-NEXT:    sll.w $a1, $a1, $a24461; LA32S-NEXT:  .LBB96_1: # =>This Inner Loop Header: Depth=14462; LA32S-NEXT:    ll.w $a4, $a0, 04463; LA32S-NEXT:    addi.w $a5, $a1, 04464; LA32S-NEXT:    xor $a5, $a4, $a54465; LA32S-NEXT:    and $a5, $a5, $a34466; LA32S-NEXT:    xor $a5, $a4, $a54467; LA32S-NEXT:    sc.w $a5, $a0, 04468; LA32S-NEXT:    beq $a5, $zero, .LBB96_14469; LA32S-NEXT:  # %bb.2:4470; LA32S-NEXT:    srl.w $a0, $a4, $a24471; LA32S-NEXT:    ret4472;4473; LA64-LABEL: atomicrmw_xchg_i8_seq_cst:4474; LA64:       # %bb.0:4475; LA64-NEXT:    slli.d $a2, $a0, 34476; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04477; LA64-NEXT:    ori $a3, $zero, 2554478; LA64-NEXT:    sll.w $a3, $a3, $a24479; LA64-NEXT:    andi $a1, $a1, 2554480; LA64-NEXT:    sll.w $a1, $a1, $a24481; LA64-NEXT:  .LBB96_1: # =>This Inner Loop Header: Depth=14482; LA64-NEXT:    ll.w $a4, $a0, 04483; LA64-NEXT:    addi.w $a5, $a1, 04484; LA64-NEXT:    xor $a5, $a4, $a54485; LA64-NEXT:    and $a5, $a5, $a34486; LA64-NEXT:    xor $a5, $a4, $a54487; LA64-NEXT:    sc.w $a5, $a0, 04488; LA64-NEXT:    beq $a5, $zero, .LBB96_14489; LA64-NEXT:  # %bb.2:4490; LA64-NEXT:    srl.w $a0, $a4, $a24491; LA64-NEXT:    ret4492  %1 = atomicrmw xchg ptr %a, i8 %b seq_cst4493  ret i8 %14494}4495 4496define i8 @atomicrmw_xchg_0_i8_seq_cst(ptr %a) nounwind {4497; LA32R-LABEL: atomicrmw_xchg_0_i8_seq_cst:4498; LA32R:       # %bb.0:4499; LA32R-NEXT:    addi.w $a1, $zero, -44500; LA32R-NEXT:    and $a1, $a0, $a14501; LA32R-NEXT:    slli.w $a0, $a0, 34502; LA32R-NEXT:    ori $a2, $zero, 2554503; LA32R-NEXT:    sll.w $a2, $a2, $a04504; LA32R-NEXT:    nor $a2, $a2, $zero4505; LA32R-NEXT:  .LBB97_1: # =>This Inner Loop Header: Depth=14506; LA32R-NEXT:    ll.w $a3, $a1, 04507; LA32R-NEXT:    and $a4, $a3, $a24508; LA32R-NEXT:    sc.w $a4, $a1, 04509; LA32R-NEXT:    beq $a4, $zero, .LBB97_14510; LA32R-NEXT:  # %bb.2:4511; LA32R-NEXT:    srl.w $a0, $a3, $a04512; LA32R-NEXT:    ret4513;4514; LA32S-LABEL: atomicrmw_xchg_0_i8_seq_cst:4515; LA32S:       # %bb.0:4516; LA32S-NEXT:    slli.w $a1, $a0, 34517; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 04518; LA32S-NEXT:    ori $a2, $zero, 2554519; LA32S-NEXT:    sll.w $a2, $a2, $a14520; LA32S-NEXT:    nor $a2, $a2, $zero4521; LA32S-NEXT:  .LBB97_1: # =>This Inner Loop Header: Depth=14522; LA32S-NEXT:    ll.w $a3, $a0, 04523; LA32S-NEXT:    and $a4, $a3, $a24524; LA32S-NEXT:    sc.w $a4, $a0, 04525; LA32S-NEXT:    beq $a4, $zero, .LBB97_14526; LA32S-NEXT:  # %bb.2:4527; LA32S-NEXT:    srl.w $a0, $a3, $a14528; LA32S-NEXT:    ret4529;4530; LA64-LABEL: atomicrmw_xchg_0_i8_seq_cst:4531; LA64:       # %bb.0:4532; LA64-NEXT:    slli.d $a1, $a0, 34533; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04534; LA64-NEXT:    ori $a2, $zero, 2554535; LA64-NEXT:    sll.w $a2, $a2, $a14536; LA64-NEXT:    nor $a2, $a2, $zero4537; LA64-NEXT:    amand_db.w $a3, $a2, $a04538; LA64-NEXT:    srl.w $a0, $a3, $a14539; LA64-NEXT:    ret4540  %1 = atomicrmw xchg ptr %a, i8 0 seq_cst4541  ret i8 %14542}4543 4544define i8 @atomicrmw_xchg_minus_1_i8_seq_cst(ptr %a) nounwind {4545; LA32R-LABEL: atomicrmw_xchg_minus_1_i8_seq_cst:4546; LA32R:       # %bb.0:4547; LA32R-NEXT:    addi.w $a1, $zero, -44548; LA32R-NEXT:    and $a1, $a0, $a14549; LA32R-NEXT:    slli.w $a0, $a0, 34550; LA32R-NEXT:    ori $a2, $zero, 2554551; LA32R-NEXT:    sll.w $a2, $a2, $a04552; LA32R-NEXT:  .LBB98_1: # =>This Inner Loop Header: Depth=14553; LA32R-NEXT:    ll.w $a3, $a1, 04554; LA32R-NEXT:    or $a4, $a3, $a24555; LA32R-NEXT:    sc.w $a4, $a1, 04556; LA32R-NEXT:    beq $a4, $zero, .LBB98_14557; LA32R-NEXT:  # %bb.2:4558; LA32R-NEXT:    srl.w $a0, $a3, $a04559; LA32R-NEXT:    ret4560;4561; LA32S-LABEL: atomicrmw_xchg_minus_1_i8_seq_cst:4562; LA32S:       # %bb.0:4563; LA32S-NEXT:    slli.w $a1, $a0, 34564; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 04565; LA32S-NEXT:    ori $a2, $zero, 2554566; LA32S-NEXT:    sll.w $a2, $a2, $a14567; LA32S-NEXT:  .LBB98_1: # =>This Inner Loop Header: Depth=14568; LA32S-NEXT:    ll.w $a3, $a0, 04569; LA32S-NEXT:    or $a4, $a3, $a24570; LA32S-NEXT:    sc.w $a4, $a0, 04571; LA32S-NEXT:    beq $a4, $zero, .LBB98_14572; LA32S-NEXT:  # %bb.2:4573; LA32S-NEXT:    srl.w $a0, $a3, $a14574; LA32S-NEXT:    ret4575;4576; LA64-LABEL: atomicrmw_xchg_minus_1_i8_seq_cst:4577; LA64:       # %bb.0:4578; LA64-NEXT:    slli.d $a1, $a0, 34579; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04580; LA64-NEXT:    ori $a2, $zero, 2554581; LA64-NEXT:    sll.w $a2, $a2, $a14582; LA64-NEXT:    amor_db.w $a3, $a2, $a04583; LA64-NEXT:    srl.w $a0, $a3, $a14584; LA64-NEXT:    ret4585  %1 = atomicrmw xchg ptr %a, i8 -1 seq_cst4586  ret i8 %14587}4588 4589define i16 @atomicrmw_xchg_i16_seq_cst(ptr %a, i16 %b) nounwind {4590; LA32R-LABEL: atomicrmw_xchg_i16_seq_cst:4591; LA32R:       # %bb.0:4592; LA32R-NEXT:    addi.w $a2, $zero, -44593; LA32R-NEXT:    and $a2, $a0, $a24594; LA32R-NEXT:    slli.w $a0, $a0, 34595; LA32R-NEXT:    lu12i.w $a3, 154596; LA32R-NEXT:    ori $a3, $a3, 40954597; LA32R-NEXT:    sll.w $a4, $a3, $a04598; LA32R-NEXT:    and $a1, $a1, $a34599; LA32R-NEXT:    sll.w $a1, $a1, $a04600; LA32R-NEXT:  .LBB99_1: # =>This Inner Loop Header: Depth=14601; LA32R-NEXT:    ll.w $a3, $a2, 04602; LA32R-NEXT:    addi.w $a5, $a1, 04603; LA32R-NEXT:    xor $a5, $a3, $a54604; LA32R-NEXT:    and $a5, $a5, $a44605; LA32R-NEXT:    xor $a5, $a3, $a54606; LA32R-NEXT:    sc.w $a5, $a2, 04607; LA32R-NEXT:    beq $a5, $zero, .LBB99_14608; LA32R-NEXT:  # %bb.2:4609; LA32R-NEXT:    srl.w $a0, $a3, $a04610; LA32R-NEXT:    ret4611;4612; LA32S-LABEL: atomicrmw_xchg_i16_seq_cst:4613; LA32S:       # %bb.0:4614; LA32S-NEXT:    slli.w $a2, $a0, 34615; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 04616; LA32S-NEXT:    lu12i.w $a3, 154617; LA32S-NEXT:    ori $a3, $a3, 40954618; LA32S-NEXT:    sll.w $a3, $a3, $a24619; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 04620; LA32S-NEXT:    sll.w $a1, $a1, $a24621; LA32S-NEXT:  .LBB99_1: # =>This Inner Loop Header: Depth=14622; LA32S-NEXT:    ll.w $a4, $a0, 04623; LA32S-NEXT:    addi.w $a5, $a1, 04624; LA32S-NEXT:    xor $a5, $a4, $a54625; LA32S-NEXT:    and $a5, $a5, $a34626; LA32S-NEXT:    xor $a5, $a4, $a54627; LA32S-NEXT:    sc.w $a5, $a0, 04628; LA32S-NEXT:    beq $a5, $zero, .LBB99_14629; LA32S-NEXT:  # %bb.2:4630; LA32S-NEXT:    srl.w $a0, $a4, $a24631; LA32S-NEXT:    ret4632;4633; LA64-LABEL: atomicrmw_xchg_i16_seq_cst:4634; LA64:       # %bb.0:4635; LA64-NEXT:    slli.d $a2, $a0, 34636; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04637; LA64-NEXT:    lu12i.w $a3, 154638; LA64-NEXT:    ori $a3, $a3, 40954639; LA64-NEXT:    sll.w $a3, $a3, $a24640; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 04641; LA64-NEXT:    sll.w $a1, $a1, $a24642; LA64-NEXT:  .LBB99_1: # =>This Inner Loop Header: Depth=14643; LA64-NEXT:    ll.w $a4, $a0, 04644; LA64-NEXT:    addi.w $a5, $a1, 04645; LA64-NEXT:    xor $a5, $a4, $a54646; LA64-NEXT:    and $a5, $a5, $a34647; LA64-NEXT:    xor $a5, $a4, $a54648; LA64-NEXT:    sc.w $a5, $a0, 04649; LA64-NEXT:    beq $a5, $zero, .LBB99_14650; LA64-NEXT:  # %bb.2:4651; LA64-NEXT:    srl.w $a0, $a4, $a24652; LA64-NEXT:    ret4653  %1 = atomicrmw xchg ptr %a, i16 %b seq_cst4654  ret i16 %14655}4656 4657define i16 @atomicrmw_xchg_0_i16_seq_cst(ptr %a) nounwind {4658; LA32R-LABEL: atomicrmw_xchg_0_i16_seq_cst:4659; LA32R:       # %bb.0:4660; LA32R-NEXT:    addi.w $a1, $zero, -44661; LA32R-NEXT:    and $a1, $a0, $a14662; LA32R-NEXT:    slli.w $a0, $a0, 34663; LA32R-NEXT:    lu12i.w $a2, 154664; LA32R-NEXT:    ori $a2, $a2, 40954665; LA32R-NEXT:    sll.w $a2, $a2, $a04666; LA32R-NEXT:    nor $a2, $a2, $zero4667; LA32R-NEXT:  .LBB100_1: # =>This Inner Loop Header: Depth=14668; LA32R-NEXT:    ll.w $a3, $a1, 04669; LA32R-NEXT:    and $a4, $a3, $a24670; LA32R-NEXT:    sc.w $a4, $a1, 04671; LA32R-NEXT:    beq $a4, $zero, .LBB100_14672; LA32R-NEXT:  # %bb.2:4673; LA32R-NEXT:    srl.w $a0, $a3, $a04674; LA32R-NEXT:    ret4675;4676; LA32S-LABEL: atomicrmw_xchg_0_i16_seq_cst:4677; LA32S:       # %bb.0:4678; LA32S-NEXT:    slli.w $a1, $a0, 34679; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 04680; LA32S-NEXT:    lu12i.w $a2, 154681; LA32S-NEXT:    ori $a2, $a2, 40954682; LA32S-NEXT:    sll.w $a2, $a2, $a14683; LA32S-NEXT:    nor $a2, $a2, $zero4684; LA32S-NEXT:  .LBB100_1: # =>This Inner Loop Header: Depth=14685; LA32S-NEXT:    ll.w $a3, $a0, 04686; LA32S-NEXT:    and $a4, $a3, $a24687; LA32S-NEXT:    sc.w $a4, $a0, 04688; LA32S-NEXT:    beq $a4, $zero, .LBB100_14689; LA32S-NEXT:  # %bb.2:4690; LA32S-NEXT:    srl.w $a0, $a3, $a14691; LA32S-NEXT:    ret4692;4693; LA64-LABEL: atomicrmw_xchg_0_i16_seq_cst:4694; LA64:       # %bb.0:4695; LA64-NEXT:    slli.d $a1, $a0, 34696; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04697; LA64-NEXT:    lu12i.w $a2, 154698; LA64-NEXT:    ori $a2, $a2, 40954699; LA64-NEXT:    sll.w $a2, $a2, $a14700; LA64-NEXT:    nor $a2, $a2, $zero4701; LA64-NEXT:    amand_db.w $a3, $a2, $a04702; LA64-NEXT:    srl.w $a0, $a3, $a14703; LA64-NEXT:    ret4704  %1 = atomicrmw xchg ptr %a, i16 0 seq_cst4705  ret i16 %14706}4707 4708define i16 @atomicrmw_xchg_minus_1_i16_seq_cst(ptr %a) nounwind {4709; LA32R-LABEL: atomicrmw_xchg_minus_1_i16_seq_cst:4710; LA32R:       # %bb.0:4711; LA32R-NEXT:    addi.w $a1, $zero, -44712; LA32R-NEXT:    and $a1, $a0, $a14713; LA32R-NEXT:    slli.w $a0, $a0, 34714; LA32R-NEXT:    lu12i.w $a2, 154715; LA32R-NEXT:    ori $a2, $a2, 40954716; LA32R-NEXT:    sll.w $a2, $a2, $a04717; LA32R-NEXT:  .LBB101_1: # =>This Inner Loop Header: Depth=14718; LA32R-NEXT:    ll.w $a3, $a1, 04719; LA32R-NEXT:    or $a4, $a3, $a24720; LA32R-NEXT:    sc.w $a4, $a1, 04721; LA32R-NEXT:    beq $a4, $zero, .LBB101_14722; LA32R-NEXT:  # %bb.2:4723; LA32R-NEXT:    srl.w $a0, $a3, $a04724; LA32R-NEXT:    ret4725;4726; LA32S-LABEL: atomicrmw_xchg_minus_1_i16_seq_cst:4727; LA32S:       # %bb.0:4728; LA32S-NEXT:    slli.w $a1, $a0, 34729; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 04730; LA32S-NEXT:    lu12i.w $a2, 154731; LA32S-NEXT:    ori $a2, $a2, 40954732; LA32S-NEXT:    sll.w $a2, $a2, $a14733; LA32S-NEXT:  .LBB101_1: # =>This Inner Loop Header: Depth=14734; LA32S-NEXT:    ll.w $a3, $a0, 04735; LA32S-NEXT:    or $a4, $a3, $a24736; LA32S-NEXT:    sc.w $a4, $a0, 04737; LA32S-NEXT:    beq $a4, $zero, .LBB101_14738; LA32S-NEXT:  # %bb.2:4739; LA32S-NEXT:    srl.w $a0, $a3, $a14740; LA32S-NEXT:    ret4741;4742; LA64-LABEL: atomicrmw_xchg_minus_1_i16_seq_cst:4743; LA64:       # %bb.0:4744; LA64-NEXT:    slli.d $a1, $a0, 34745; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04746; LA64-NEXT:    lu12i.w $a2, 154747; LA64-NEXT:    ori $a2, $a2, 40954748; LA64-NEXT:    sll.w $a2, $a2, $a14749; LA64-NEXT:    amor_db.w $a3, $a2, $a04750; LA64-NEXT:    srl.w $a0, $a3, $a14751; LA64-NEXT:    ret4752  %1 = atomicrmw xchg ptr %a, i16 -1 seq_cst4753  ret i16 %14754}4755 4756define i32 @atomicrmw_xchg_i32_seq_cst(ptr %a, i32 %b) nounwind {4757; LA32R-LABEL: atomicrmw_xchg_i32_seq_cst:4758; LA32R:       # %bb.0:4759; LA32R-NEXT:  .LBB102_1: # =>This Inner Loop Header: Depth=14760; LA32R-NEXT:    ll.w $a2, $a0, 04761; LA32R-NEXT:    move $a3, $a14762; LA32R-NEXT:    sc.w $a3, $a0, 04763; LA32R-NEXT:    beq $a3, $zero, .LBB102_14764; LA32R-NEXT:  # %bb.2:4765; LA32R-NEXT:    move $a0, $a24766; LA32R-NEXT:    ret4767;4768; LA32S-LABEL: atomicrmw_xchg_i32_seq_cst:4769; LA32S:       # %bb.0:4770; LA32S-NEXT:  .LBB102_1: # =>This Inner Loop Header: Depth=14771; LA32S-NEXT:    ll.w $a2, $a0, 04772; LA32S-NEXT:    move $a3, $a14773; LA32S-NEXT:    sc.w $a3, $a0, 04774; LA32S-NEXT:    beq $a3, $zero, .LBB102_14775; LA32S-NEXT:  # %bb.2:4776; LA32S-NEXT:    move $a0, $a24777; LA32S-NEXT:    ret4778;4779; LA64-LABEL: atomicrmw_xchg_i32_seq_cst:4780; LA64:       # %bb.0:4781; LA64-NEXT:    amswap_db.w $a2, $a1, $a04782; LA64-NEXT:    move $a0, $a24783; LA64-NEXT:    ret4784  %1 = atomicrmw xchg ptr %a, i32 %b seq_cst4785  ret i32 %14786}4787 4788define i64 @atomicrmw_xchg_i64_seq_cst(ptr %a, i64 %b) nounwind {4789; LA32R-LABEL: atomicrmw_xchg_i64_seq_cst:4790; LA32R:       # %bb.0:4791; LA32R-NEXT:    addi.w $sp, $sp, -164792; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill4793; LA32R-NEXT:    ori $a3, $zero, 54794; LA32R-NEXT:    bl __atomic_exchange_84795; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload4796; LA32R-NEXT:    addi.w $sp, $sp, 164797; LA32R-NEXT:    ret4798;4799; LA32S-LABEL: atomicrmw_xchg_i64_seq_cst:4800; LA32S:       # %bb.0:4801; LA32S-NEXT:    addi.w $sp, $sp, -164802; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill4803; LA32S-NEXT:    ori $a3, $zero, 54804; LA32S-NEXT:    bl __atomic_exchange_84805; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload4806; LA32S-NEXT:    addi.w $sp, $sp, 164807; LA32S-NEXT:    ret4808;4809; LA64-LABEL: atomicrmw_xchg_i64_seq_cst:4810; LA64:       # %bb.0:4811; LA64-NEXT:    amswap_db.d $a2, $a1, $a04812; LA64-NEXT:    move $a0, $a24813; LA64-NEXT:    ret4814  %1 = atomicrmw xchg ptr %a, i64 %b seq_cst4815  ret i64 %14816}4817 4818define i8 @atomicrmw_add_i8_seq_cst(ptr %a, i8 %b) nounwind {4819; LA32R-LABEL: atomicrmw_add_i8_seq_cst:4820; LA32R:       # %bb.0:4821; LA32R-NEXT:    addi.w $a2, $zero, -44822; LA32R-NEXT:    and $a2, $a0, $a24823; LA32R-NEXT:    slli.w $a0, $a0, 34824; LA32R-NEXT:    ori $a3, $zero, 2554825; LA32R-NEXT:    sll.w $a3, $a3, $a04826; LA32R-NEXT:    andi $a1, $a1, 2554827; LA32R-NEXT:    sll.w $a1, $a1, $a04828; LA32R-NEXT:  .LBB104_1: # =>This Inner Loop Header: Depth=14829; LA32R-NEXT:    ll.w $a4, $a2, 04830; LA32R-NEXT:    add.w $a5, $a4, $a14831; LA32R-NEXT:    xor $a5, $a4, $a54832; LA32R-NEXT:    and $a5, $a5, $a34833; LA32R-NEXT:    xor $a5, $a4, $a54834; LA32R-NEXT:    sc.w $a5, $a2, 04835; LA32R-NEXT:    beq $a5, $zero, .LBB104_14836; LA32R-NEXT:  # %bb.2:4837; LA32R-NEXT:    srl.w $a0, $a4, $a04838; LA32R-NEXT:    ret4839;4840; LA32S-LABEL: atomicrmw_add_i8_seq_cst:4841; LA32S:       # %bb.0:4842; LA32S-NEXT:    slli.w $a2, $a0, 34843; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 04844; LA32S-NEXT:    ori $a3, $zero, 2554845; LA32S-NEXT:    sll.w $a3, $a3, $a24846; LA32S-NEXT:    andi $a1, $a1, 2554847; LA32S-NEXT:    sll.w $a1, $a1, $a24848; LA32S-NEXT:  .LBB104_1: # =>This Inner Loop Header: Depth=14849; LA32S-NEXT:    ll.w $a4, $a0, 04850; LA32S-NEXT:    add.w $a5, $a4, $a14851; LA32S-NEXT:    xor $a5, $a4, $a54852; LA32S-NEXT:    and $a5, $a5, $a34853; LA32S-NEXT:    xor $a5, $a4, $a54854; LA32S-NEXT:    sc.w $a5, $a0, 04855; LA32S-NEXT:    beq $a5, $zero, .LBB104_14856; LA32S-NEXT:  # %bb.2:4857; LA32S-NEXT:    srl.w $a0, $a4, $a24858; LA32S-NEXT:    ret4859;4860; LA64-LABEL: atomicrmw_add_i8_seq_cst:4861; LA64:       # %bb.0:4862; LA64-NEXT:    slli.d $a2, $a0, 34863; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04864; LA64-NEXT:    ori $a3, $zero, 2554865; LA64-NEXT:    sll.w $a3, $a3, $a24866; LA64-NEXT:    andi $a1, $a1, 2554867; LA64-NEXT:    sll.w $a1, $a1, $a24868; LA64-NEXT:  .LBB104_1: # =>This Inner Loop Header: Depth=14869; LA64-NEXT:    ll.w $a4, $a0, 04870; LA64-NEXT:    add.w $a5, $a4, $a14871; LA64-NEXT:    xor $a5, $a4, $a54872; LA64-NEXT:    and $a5, $a5, $a34873; LA64-NEXT:    xor $a5, $a4, $a54874; LA64-NEXT:    sc.w $a5, $a0, 04875; LA64-NEXT:    beq $a5, $zero, .LBB104_14876; LA64-NEXT:  # %bb.2:4877; LA64-NEXT:    srl.w $a0, $a4, $a24878; LA64-NEXT:    ret4879  %1 = atomicrmw add ptr %a, i8 %b seq_cst4880  ret i8 %14881}4882 4883define i16 @atomicrmw_add_i16_seq_cst(ptr %a, i16 %b) nounwind {4884; LA32R-LABEL: atomicrmw_add_i16_seq_cst:4885; LA32R:       # %bb.0:4886; LA32R-NEXT:    addi.w $a2, $zero, -44887; LA32R-NEXT:    and $a2, $a0, $a24888; LA32R-NEXT:    slli.w $a0, $a0, 34889; LA32R-NEXT:    lu12i.w $a3, 154890; LA32R-NEXT:    ori $a3, $a3, 40954891; LA32R-NEXT:    sll.w $a4, $a3, $a04892; LA32R-NEXT:    and $a1, $a1, $a34893; LA32R-NEXT:    sll.w $a1, $a1, $a04894; LA32R-NEXT:  .LBB105_1: # =>This Inner Loop Header: Depth=14895; LA32R-NEXT:    ll.w $a3, $a2, 04896; LA32R-NEXT:    add.w $a5, $a3, $a14897; LA32R-NEXT:    xor $a5, $a3, $a54898; LA32R-NEXT:    and $a5, $a5, $a44899; LA32R-NEXT:    xor $a5, $a3, $a54900; LA32R-NEXT:    sc.w $a5, $a2, 04901; LA32R-NEXT:    beq $a5, $zero, .LBB105_14902; LA32R-NEXT:  # %bb.2:4903; LA32R-NEXT:    srl.w $a0, $a3, $a04904; LA32R-NEXT:    ret4905;4906; LA32S-LABEL: atomicrmw_add_i16_seq_cst:4907; LA32S:       # %bb.0:4908; LA32S-NEXT:    slli.w $a2, $a0, 34909; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 04910; LA32S-NEXT:    lu12i.w $a3, 154911; LA32S-NEXT:    ori $a3, $a3, 40954912; LA32S-NEXT:    sll.w $a3, $a3, $a24913; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 04914; LA32S-NEXT:    sll.w $a1, $a1, $a24915; LA32S-NEXT:  .LBB105_1: # =>This Inner Loop Header: Depth=14916; LA32S-NEXT:    ll.w $a4, $a0, 04917; LA32S-NEXT:    add.w $a5, $a4, $a14918; LA32S-NEXT:    xor $a5, $a4, $a54919; LA32S-NEXT:    and $a5, $a5, $a34920; LA32S-NEXT:    xor $a5, $a4, $a54921; LA32S-NEXT:    sc.w $a5, $a0, 04922; LA32S-NEXT:    beq $a5, $zero, .LBB105_14923; LA32S-NEXT:  # %bb.2:4924; LA32S-NEXT:    srl.w $a0, $a4, $a24925; LA32S-NEXT:    ret4926;4927; LA64-LABEL: atomicrmw_add_i16_seq_cst:4928; LA64:       # %bb.0:4929; LA64-NEXT:    slli.d $a2, $a0, 34930; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04931; LA64-NEXT:    lu12i.w $a3, 154932; LA64-NEXT:    ori $a3, $a3, 40954933; LA64-NEXT:    sll.w $a3, $a3, $a24934; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 04935; LA64-NEXT:    sll.w $a1, $a1, $a24936; LA64-NEXT:  .LBB105_1: # =>This Inner Loop Header: Depth=14937; LA64-NEXT:    ll.w $a4, $a0, 04938; LA64-NEXT:    add.w $a5, $a4, $a14939; LA64-NEXT:    xor $a5, $a4, $a54940; LA64-NEXT:    and $a5, $a5, $a34941; LA64-NEXT:    xor $a5, $a4, $a54942; LA64-NEXT:    sc.w $a5, $a0, 04943; LA64-NEXT:    beq $a5, $zero, .LBB105_14944; LA64-NEXT:  # %bb.2:4945; LA64-NEXT:    srl.w $a0, $a4, $a24946; LA64-NEXT:    ret4947  %1 = atomicrmw add ptr %a, i16 %b seq_cst4948  ret i16 %14949}4950 4951define i32 @atomicrmw_add_i32_seq_cst(ptr %a, i32 %b) nounwind {4952; LA32R-LABEL: atomicrmw_add_i32_seq_cst:4953; LA32R:       # %bb.0:4954; LA32R-NEXT:  .LBB106_1: # =>This Inner Loop Header: Depth=14955; LA32R-NEXT:    ll.w $a2, $a0, 04956; LA32R-NEXT:    add.w $a3, $a2, $a14957; LA32R-NEXT:    sc.w $a3, $a0, 04958; LA32R-NEXT:    beq $a3, $zero, .LBB106_14959; LA32R-NEXT:  # %bb.2:4960; LA32R-NEXT:    move $a0, $a24961; LA32R-NEXT:    ret4962;4963; LA32S-LABEL: atomicrmw_add_i32_seq_cst:4964; LA32S:       # %bb.0:4965; LA32S-NEXT:  .LBB106_1: # =>This Inner Loop Header: Depth=14966; LA32S-NEXT:    ll.w $a2, $a0, 04967; LA32S-NEXT:    add.w $a3, $a2, $a14968; LA32S-NEXT:    sc.w $a3, $a0, 04969; LA32S-NEXT:    beq $a3, $zero, .LBB106_14970; LA32S-NEXT:  # %bb.2:4971; LA32S-NEXT:    move $a0, $a24972; LA32S-NEXT:    ret4973;4974; LA64-LABEL: atomicrmw_add_i32_seq_cst:4975; LA64:       # %bb.0:4976; LA64-NEXT:    amadd_db.w $a2, $a1, $a04977; LA64-NEXT:    move $a0, $a24978; LA64-NEXT:    ret4979  %1 = atomicrmw add ptr %a, i32 %b seq_cst4980  ret i32 %14981}4982 4983define i64 @atomicrmw_add_i64_seq_cst(ptr %a, i64 %b) nounwind {4984; LA32R-LABEL: atomicrmw_add_i64_seq_cst:4985; LA32R:       # %bb.0:4986; LA32R-NEXT:    addi.w $sp, $sp, -164987; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill4988; LA32R-NEXT:    ori $a3, $zero, 54989; LA32R-NEXT:    bl __atomic_fetch_add_84990; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload4991; LA32R-NEXT:    addi.w $sp, $sp, 164992; LA32R-NEXT:    ret4993;4994; LA32S-LABEL: atomicrmw_add_i64_seq_cst:4995; LA32S:       # %bb.0:4996; LA32S-NEXT:    addi.w $sp, $sp, -164997; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill4998; LA32S-NEXT:    ori $a3, $zero, 54999; LA32S-NEXT:    bl __atomic_fetch_add_85000; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload5001; LA32S-NEXT:    addi.w $sp, $sp, 165002; LA32S-NEXT:    ret5003;5004; LA64-LABEL: atomicrmw_add_i64_seq_cst:5005; LA64:       # %bb.0:5006; LA64-NEXT:    amadd_db.d $a2, $a1, $a05007; LA64-NEXT:    move $a0, $a25008; LA64-NEXT:    ret5009  %1 = atomicrmw add ptr %a, i64 %b seq_cst5010  ret i64 %15011}5012 5013define i8 @atomicrmw_sub_i8_seq_cst(ptr %a, i8 %b) nounwind {5014; LA32R-LABEL: atomicrmw_sub_i8_seq_cst:5015; LA32R:       # %bb.0:5016; LA32R-NEXT:    addi.w $a2, $zero, -45017; LA32R-NEXT:    and $a2, $a0, $a25018; LA32R-NEXT:    slli.w $a0, $a0, 35019; LA32R-NEXT:    ori $a3, $zero, 2555020; LA32R-NEXT:    sll.w $a3, $a3, $a05021; LA32R-NEXT:    andi $a1, $a1, 2555022; LA32R-NEXT:    sll.w $a1, $a1, $a05023; LA32R-NEXT:  .LBB108_1: # =>This Inner Loop Header: Depth=15024; LA32R-NEXT:    ll.w $a4, $a2, 05025; LA32R-NEXT:    sub.w $a5, $a4, $a15026; LA32R-NEXT:    xor $a5, $a4, $a55027; LA32R-NEXT:    and $a5, $a5, $a35028; LA32R-NEXT:    xor $a5, $a4, $a55029; LA32R-NEXT:    sc.w $a5, $a2, 05030; LA32R-NEXT:    beq $a5, $zero, .LBB108_15031; LA32R-NEXT:  # %bb.2:5032; LA32R-NEXT:    srl.w $a0, $a4, $a05033; LA32R-NEXT:    ret5034;5035; LA32S-LABEL: atomicrmw_sub_i8_seq_cst:5036; LA32S:       # %bb.0:5037; LA32S-NEXT:    slli.w $a2, $a0, 35038; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 05039; LA32S-NEXT:    ori $a3, $zero, 2555040; LA32S-NEXT:    sll.w $a3, $a3, $a25041; LA32S-NEXT:    andi $a1, $a1, 2555042; LA32S-NEXT:    sll.w $a1, $a1, $a25043; LA32S-NEXT:  .LBB108_1: # =>This Inner Loop Header: Depth=15044; LA32S-NEXT:    ll.w $a4, $a0, 05045; LA32S-NEXT:    sub.w $a5, $a4, $a15046; LA32S-NEXT:    xor $a5, $a4, $a55047; LA32S-NEXT:    and $a5, $a5, $a35048; LA32S-NEXT:    xor $a5, $a4, $a55049; LA32S-NEXT:    sc.w $a5, $a0, 05050; LA32S-NEXT:    beq $a5, $zero, .LBB108_15051; LA32S-NEXT:  # %bb.2:5052; LA32S-NEXT:    srl.w $a0, $a4, $a25053; LA32S-NEXT:    ret5054;5055; LA64-LABEL: atomicrmw_sub_i8_seq_cst:5056; LA64:       # %bb.0:5057; LA64-NEXT:    slli.d $a2, $a0, 35058; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05059; LA64-NEXT:    ori $a3, $zero, 2555060; LA64-NEXT:    sll.w $a3, $a3, $a25061; LA64-NEXT:    andi $a1, $a1, 2555062; LA64-NEXT:    sll.w $a1, $a1, $a25063; LA64-NEXT:  .LBB108_1: # =>This Inner Loop Header: Depth=15064; LA64-NEXT:    ll.w $a4, $a0, 05065; LA64-NEXT:    sub.w $a5, $a4, $a15066; LA64-NEXT:    xor $a5, $a4, $a55067; LA64-NEXT:    and $a5, $a5, $a35068; LA64-NEXT:    xor $a5, $a4, $a55069; LA64-NEXT:    sc.w $a5, $a0, 05070; LA64-NEXT:    beq $a5, $zero, .LBB108_15071; LA64-NEXT:  # %bb.2:5072; LA64-NEXT:    srl.w $a0, $a4, $a25073; LA64-NEXT:    ret5074  %1 = atomicrmw sub ptr %a, i8 %b seq_cst5075  ret i8 %15076}5077 5078define i16 @atomicrmw_sub_i16_seq_cst(ptr %a, i16 %b) nounwind {5079; LA32R-LABEL: atomicrmw_sub_i16_seq_cst:5080; LA32R:       # %bb.0:5081; LA32R-NEXT:    addi.w $a2, $zero, -45082; LA32R-NEXT:    and $a2, $a0, $a25083; LA32R-NEXT:    slli.w $a0, $a0, 35084; LA32R-NEXT:    lu12i.w $a3, 155085; LA32R-NEXT:    ori $a3, $a3, 40955086; LA32R-NEXT:    sll.w $a4, $a3, $a05087; LA32R-NEXT:    and $a1, $a1, $a35088; LA32R-NEXT:    sll.w $a1, $a1, $a05089; LA32R-NEXT:  .LBB109_1: # =>This Inner Loop Header: Depth=15090; LA32R-NEXT:    ll.w $a3, $a2, 05091; LA32R-NEXT:    sub.w $a5, $a3, $a15092; LA32R-NEXT:    xor $a5, $a3, $a55093; LA32R-NEXT:    and $a5, $a5, $a45094; LA32R-NEXT:    xor $a5, $a3, $a55095; LA32R-NEXT:    sc.w $a5, $a2, 05096; LA32R-NEXT:    beq $a5, $zero, .LBB109_15097; LA32R-NEXT:  # %bb.2:5098; LA32R-NEXT:    srl.w $a0, $a3, $a05099; LA32R-NEXT:    ret5100;5101; LA32S-LABEL: atomicrmw_sub_i16_seq_cst:5102; LA32S:       # %bb.0:5103; LA32S-NEXT:    slli.w $a2, $a0, 35104; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 05105; LA32S-NEXT:    lu12i.w $a3, 155106; LA32S-NEXT:    ori $a3, $a3, 40955107; LA32S-NEXT:    sll.w $a3, $a3, $a25108; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 05109; LA32S-NEXT:    sll.w $a1, $a1, $a25110; LA32S-NEXT:  .LBB109_1: # =>This Inner Loop Header: Depth=15111; LA32S-NEXT:    ll.w $a4, $a0, 05112; LA32S-NEXT:    sub.w $a5, $a4, $a15113; LA32S-NEXT:    xor $a5, $a4, $a55114; LA32S-NEXT:    and $a5, $a5, $a35115; LA32S-NEXT:    xor $a5, $a4, $a55116; LA32S-NEXT:    sc.w $a5, $a0, 05117; LA32S-NEXT:    beq $a5, $zero, .LBB109_15118; LA32S-NEXT:  # %bb.2:5119; LA32S-NEXT:    srl.w $a0, $a4, $a25120; LA32S-NEXT:    ret5121;5122; LA64-LABEL: atomicrmw_sub_i16_seq_cst:5123; LA64:       # %bb.0:5124; LA64-NEXT:    slli.d $a2, $a0, 35125; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05126; LA64-NEXT:    lu12i.w $a3, 155127; LA64-NEXT:    ori $a3, $a3, 40955128; LA64-NEXT:    sll.w $a3, $a3, $a25129; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 05130; LA64-NEXT:    sll.w $a1, $a1, $a25131; LA64-NEXT:  .LBB109_1: # =>This Inner Loop Header: Depth=15132; LA64-NEXT:    ll.w $a4, $a0, 05133; LA64-NEXT:    sub.w $a5, $a4, $a15134; LA64-NEXT:    xor $a5, $a4, $a55135; LA64-NEXT:    and $a5, $a5, $a35136; LA64-NEXT:    xor $a5, $a4, $a55137; LA64-NEXT:    sc.w $a5, $a0, 05138; LA64-NEXT:    beq $a5, $zero, .LBB109_15139; LA64-NEXT:  # %bb.2:5140; LA64-NEXT:    srl.w $a0, $a4, $a25141; LA64-NEXT:    ret5142  %1 = atomicrmw sub ptr %a, i16 %b seq_cst5143  ret i16 %15144}5145 5146define i32 @atomicrmw_sub_i32_seq_cst(ptr %a, i32 %b) nounwind {5147; LA32R-LABEL: atomicrmw_sub_i32_seq_cst:5148; LA32R:       # %bb.0:5149; LA32R-NEXT:  .LBB110_1: # =>This Inner Loop Header: Depth=15150; LA32R-NEXT:    ll.w $a2, $a0, 05151; LA32R-NEXT:    sub.w $a3, $a2, $a15152; LA32R-NEXT:    sc.w $a3, $a0, 05153; LA32R-NEXT:    beq $a3, $zero, .LBB110_15154; LA32R-NEXT:  # %bb.2:5155; LA32R-NEXT:    move $a0, $a25156; LA32R-NEXT:    ret5157;5158; LA32S-LABEL: atomicrmw_sub_i32_seq_cst:5159; LA32S:       # %bb.0:5160; LA32S-NEXT:  .LBB110_1: # =>This Inner Loop Header: Depth=15161; LA32S-NEXT:    ll.w $a2, $a0, 05162; LA32S-NEXT:    sub.w $a3, $a2, $a15163; LA32S-NEXT:    sc.w $a3, $a0, 05164; LA32S-NEXT:    beq $a3, $zero, .LBB110_15165; LA32S-NEXT:  # %bb.2:5166; LA32S-NEXT:    move $a0, $a25167; LA32S-NEXT:    ret5168;5169; LA64-LABEL: atomicrmw_sub_i32_seq_cst:5170; LA64:       # %bb.0:5171; LA64-NEXT:    sub.w $a2, $zero, $a15172; LA64-NEXT:    amadd_db.w $a1, $a2, $a05173; LA64-NEXT:    move $a0, $a15174; LA64-NEXT:    ret5175  %1 = atomicrmw sub ptr %a, i32 %b seq_cst5176  ret i32 %15177}5178 5179define i64 @atomicrmw_sub_i64_seq_cst(ptr %a, i64 %b) nounwind {5180; LA32R-LABEL: atomicrmw_sub_i64_seq_cst:5181; LA32R:       # %bb.0:5182; LA32R-NEXT:    addi.w $sp, $sp, -165183; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill5184; LA32R-NEXT:    ori $a3, $zero, 55185; LA32R-NEXT:    bl __atomic_fetch_sub_85186; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload5187; LA32R-NEXT:    addi.w $sp, $sp, 165188; LA32R-NEXT:    ret5189;5190; LA32S-LABEL: atomicrmw_sub_i64_seq_cst:5191; LA32S:       # %bb.0:5192; LA32S-NEXT:    addi.w $sp, $sp, -165193; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill5194; LA32S-NEXT:    ori $a3, $zero, 55195; LA32S-NEXT:    bl __atomic_fetch_sub_85196; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload5197; LA32S-NEXT:    addi.w $sp, $sp, 165198; LA32S-NEXT:    ret5199;5200; LA64-LABEL: atomicrmw_sub_i64_seq_cst:5201; LA64:       # %bb.0:5202; LA64-NEXT:    sub.d $a2, $zero, $a15203; LA64-NEXT:    amadd_db.d $a1, $a2, $a05204; LA64-NEXT:    move $a0, $a15205; LA64-NEXT:    ret5206  %1 = atomicrmw sub ptr %a, i64 %b seq_cst5207  ret i64 %15208}5209 5210define i8 @atomicrmw_nand_i8_seq_cst(ptr %a, i8 %b) nounwind {5211; LA32R-LABEL: atomicrmw_nand_i8_seq_cst:5212; LA32R:       # %bb.0:5213; LA32R-NEXT:    addi.w $a2, $zero, -45214; LA32R-NEXT:    and $a2, $a0, $a25215; LA32R-NEXT:    slli.w $a0, $a0, 35216; LA32R-NEXT:    ori $a3, $zero, 2555217; LA32R-NEXT:    sll.w $a3, $a3, $a05218; LA32R-NEXT:    andi $a1, $a1, 2555219; LA32R-NEXT:    sll.w $a1, $a1, $a05220; LA32R-NEXT:  .LBB112_1: # =>This Inner Loop Header: Depth=15221; LA32R-NEXT:    ll.w $a4, $a2, 05222; LA32R-NEXT:    and $a5, $a4, $a15223; LA32R-NEXT:    nor $a5, $a5, $zero5224; LA32R-NEXT:    xor $a5, $a4, $a55225; LA32R-NEXT:    and $a5, $a5, $a35226; LA32R-NEXT:    xor $a5, $a4, $a55227; LA32R-NEXT:    sc.w $a5, $a2, 05228; LA32R-NEXT:    beq $a5, $zero, .LBB112_15229; LA32R-NEXT:  # %bb.2:5230; LA32R-NEXT:    srl.w $a0, $a4, $a05231; LA32R-NEXT:    ret5232;5233; LA32S-LABEL: atomicrmw_nand_i8_seq_cst:5234; LA32S:       # %bb.0:5235; LA32S-NEXT:    slli.w $a2, $a0, 35236; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 05237; LA32S-NEXT:    ori $a3, $zero, 2555238; LA32S-NEXT:    sll.w $a3, $a3, $a25239; LA32S-NEXT:    andi $a1, $a1, 2555240; LA32S-NEXT:    sll.w $a1, $a1, $a25241; LA32S-NEXT:  .LBB112_1: # =>This Inner Loop Header: Depth=15242; LA32S-NEXT:    ll.w $a4, $a0, 05243; LA32S-NEXT:    and $a5, $a4, $a15244; LA32S-NEXT:    nor $a5, $a5, $zero5245; LA32S-NEXT:    xor $a5, $a4, $a55246; LA32S-NEXT:    and $a5, $a5, $a35247; LA32S-NEXT:    xor $a5, $a4, $a55248; LA32S-NEXT:    sc.w $a5, $a0, 05249; LA32S-NEXT:    beq $a5, $zero, .LBB112_15250; LA32S-NEXT:  # %bb.2:5251; LA32S-NEXT:    srl.w $a0, $a4, $a25252; LA32S-NEXT:    ret5253;5254; LA64-LABEL: atomicrmw_nand_i8_seq_cst:5255; LA64:       # %bb.0:5256; LA64-NEXT:    slli.d $a2, $a0, 35257; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05258; LA64-NEXT:    ori $a3, $zero, 2555259; LA64-NEXT:    sll.w $a3, $a3, $a25260; LA64-NEXT:    andi $a1, $a1, 2555261; LA64-NEXT:    sll.w $a1, $a1, $a25262; LA64-NEXT:  .LBB112_1: # =>This Inner Loop Header: Depth=15263; LA64-NEXT:    ll.w $a4, $a0, 05264; LA64-NEXT:    and $a5, $a4, $a15265; LA64-NEXT:    nor $a5, $a5, $zero5266; LA64-NEXT:    xor $a5, $a4, $a55267; LA64-NEXT:    and $a5, $a5, $a35268; LA64-NEXT:    xor $a5, $a4, $a55269; LA64-NEXT:    sc.w $a5, $a0, 05270; LA64-NEXT:    beq $a5, $zero, .LBB112_15271; LA64-NEXT:  # %bb.2:5272; LA64-NEXT:    srl.w $a0, $a4, $a25273; LA64-NEXT:    ret5274  %1 = atomicrmw nand ptr %a, i8 %b seq_cst5275  ret i8 %15276}5277 5278define i16 @atomicrmw_nand_i16_seq_cst(ptr %a, i16 %b) nounwind {5279; LA32R-LABEL: atomicrmw_nand_i16_seq_cst:5280; LA32R:       # %bb.0:5281; LA32R-NEXT:    addi.w $a2, $zero, -45282; LA32R-NEXT:    and $a2, $a0, $a25283; LA32R-NEXT:    slli.w $a0, $a0, 35284; LA32R-NEXT:    lu12i.w $a3, 155285; LA32R-NEXT:    ori $a3, $a3, 40955286; LA32R-NEXT:    sll.w $a4, $a3, $a05287; LA32R-NEXT:    and $a1, $a1, $a35288; LA32R-NEXT:    sll.w $a1, $a1, $a05289; LA32R-NEXT:  .LBB113_1: # =>This Inner Loop Header: Depth=15290; LA32R-NEXT:    ll.w $a3, $a2, 05291; LA32R-NEXT:    and $a5, $a3, $a15292; LA32R-NEXT:    nor $a5, $a5, $zero5293; LA32R-NEXT:    xor $a5, $a3, $a55294; LA32R-NEXT:    and $a5, $a5, $a45295; LA32R-NEXT:    xor $a5, $a3, $a55296; LA32R-NEXT:    sc.w $a5, $a2, 05297; LA32R-NEXT:    beq $a5, $zero, .LBB113_15298; LA32R-NEXT:  # %bb.2:5299; LA32R-NEXT:    srl.w $a0, $a3, $a05300; LA32R-NEXT:    ret5301;5302; LA32S-LABEL: atomicrmw_nand_i16_seq_cst:5303; LA32S:       # %bb.0:5304; LA32S-NEXT:    slli.w $a2, $a0, 35305; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 05306; LA32S-NEXT:    lu12i.w $a3, 155307; LA32S-NEXT:    ori $a3, $a3, 40955308; LA32S-NEXT:    sll.w $a3, $a3, $a25309; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 05310; LA32S-NEXT:    sll.w $a1, $a1, $a25311; LA32S-NEXT:  .LBB113_1: # =>This Inner Loop Header: Depth=15312; LA32S-NEXT:    ll.w $a4, $a0, 05313; LA32S-NEXT:    and $a5, $a4, $a15314; LA32S-NEXT:    nor $a5, $a5, $zero5315; LA32S-NEXT:    xor $a5, $a4, $a55316; LA32S-NEXT:    and $a5, $a5, $a35317; LA32S-NEXT:    xor $a5, $a4, $a55318; LA32S-NEXT:    sc.w $a5, $a0, 05319; LA32S-NEXT:    beq $a5, $zero, .LBB113_15320; LA32S-NEXT:  # %bb.2:5321; LA32S-NEXT:    srl.w $a0, $a4, $a25322; LA32S-NEXT:    ret5323;5324; LA64-LABEL: atomicrmw_nand_i16_seq_cst:5325; LA64:       # %bb.0:5326; LA64-NEXT:    slli.d $a2, $a0, 35327; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05328; LA64-NEXT:    lu12i.w $a3, 155329; LA64-NEXT:    ori $a3, $a3, 40955330; LA64-NEXT:    sll.w $a3, $a3, $a25331; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 05332; LA64-NEXT:    sll.w $a1, $a1, $a25333; LA64-NEXT:  .LBB113_1: # =>This Inner Loop Header: Depth=15334; LA64-NEXT:    ll.w $a4, $a0, 05335; LA64-NEXT:    and $a5, $a4, $a15336; LA64-NEXT:    nor $a5, $a5, $zero5337; LA64-NEXT:    xor $a5, $a4, $a55338; LA64-NEXT:    and $a5, $a5, $a35339; LA64-NEXT:    xor $a5, $a4, $a55340; LA64-NEXT:    sc.w $a5, $a0, 05341; LA64-NEXT:    beq $a5, $zero, .LBB113_15342; LA64-NEXT:  # %bb.2:5343; LA64-NEXT:    srl.w $a0, $a4, $a25344; LA64-NEXT:    ret5345  %1 = atomicrmw nand ptr %a, i16 %b seq_cst5346  ret i16 %15347}5348 5349define i32 @atomicrmw_nand_i32_seq_cst(ptr %a, i32 %b) nounwind {5350; LA32R-LABEL: atomicrmw_nand_i32_seq_cst:5351; LA32R:       # %bb.0:5352; LA32R-NEXT:  .LBB114_1: # =>This Inner Loop Header: Depth=15353; LA32R-NEXT:    ll.w $a2, $a0, 05354; LA32R-NEXT:    and $a3, $a2, $a15355; LA32R-NEXT:    nor $a3, $a3, $zero5356; LA32R-NEXT:    sc.w $a3, $a0, 05357; LA32R-NEXT:    beq $a3, $zero, .LBB114_15358; LA32R-NEXT:  # %bb.2:5359; LA32R-NEXT:    move $a0, $a25360; LA32R-NEXT:    ret5361;5362; LA32S-LABEL: atomicrmw_nand_i32_seq_cst:5363; LA32S:       # %bb.0:5364; LA32S-NEXT:  .LBB114_1: # =>This Inner Loop Header: Depth=15365; LA32S-NEXT:    ll.w $a2, $a0, 05366; LA32S-NEXT:    and $a3, $a2, $a15367; LA32S-NEXT:    nor $a3, $a3, $zero5368; LA32S-NEXT:    sc.w $a3, $a0, 05369; LA32S-NEXT:    beq $a3, $zero, .LBB114_15370; LA32S-NEXT:  # %bb.2:5371; LA32S-NEXT:    move $a0, $a25372; LA32S-NEXT:    ret5373;5374; LA64-LABEL: atomicrmw_nand_i32_seq_cst:5375; LA64:       # %bb.0:5376; LA64-NEXT:  .LBB114_1: # =>This Inner Loop Header: Depth=15377; LA64-NEXT:    ll.w $a2, $a0, 05378; LA64-NEXT:    and $a3, $a2, $a15379; LA64-NEXT:    nor $a3, $a3, $zero5380; LA64-NEXT:    sc.w $a3, $a0, 05381; LA64-NEXT:    beq $a3, $zero, .LBB114_15382; LA64-NEXT:  # %bb.2:5383; LA64-NEXT:    move $a0, $a25384; LA64-NEXT:    ret5385  %1 = atomicrmw nand ptr %a, i32 %b seq_cst5386  ret i32 %15387}5388 5389define i64 @atomicrmw_nand_i64_seq_cst(ptr %a, i64 %b) nounwind {5390; LA32R-LABEL: atomicrmw_nand_i64_seq_cst:5391; LA32R:       # %bb.0:5392; LA32R-NEXT:    addi.w $sp, $sp, -165393; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill5394; LA32R-NEXT:    ori $a3, $zero, 55395; LA32R-NEXT:    bl __atomic_fetch_nand_85396; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload5397; LA32R-NEXT:    addi.w $sp, $sp, 165398; LA32R-NEXT:    ret5399;5400; LA32S-LABEL: atomicrmw_nand_i64_seq_cst:5401; LA32S:       # %bb.0:5402; LA32S-NEXT:    addi.w $sp, $sp, -165403; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill5404; LA32S-NEXT:    ori $a3, $zero, 55405; LA32S-NEXT:    bl __atomic_fetch_nand_85406; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload5407; LA32S-NEXT:    addi.w $sp, $sp, 165408; LA32S-NEXT:    ret5409;5410; LA64-LABEL: atomicrmw_nand_i64_seq_cst:5411; LA64:       # %bb.0:5412; LA64-NEXT:  .LBB115_1: # =>This Inner Loop Header: Depth=15413; LA64-NEXT:    ll.d $a2, $a0, 05414; LA64-NEXT:    and $a3, $a2, $a15415; LA64-NEXT:    nor $a3, $a3, $zero5416; LA64-NEXT:    sc.d $a3, $a0, 05417; LA64-NEXT:    beq $a3, $zero, .LBB115_15418; LA64-NEXT:  # %bb.2:5419; LA64-NEXT:    move $a0, $a25420; LA64-NEXT:    ret5421  %1 = atomicrmw nand ptr %a, i64 %b seq_cst5422  ret i64 %15423}5424 5425define i8 @atomicrmw_and_i8_seq_cst(ptr %a, i8 %b) nounwind {5426; LA32R-LABEL: atomicrmw_and_i8_seq_cst:5427; LA32R:       # %bb.0:5428; LA32R-NEXT:    addi.w $a2, $zero, -45429; LA32R-NEXT:    and $a2, $a0, $a25430; LA32R-NEXT:    slli.w $a0, $a0, 35431; LA32R-NEXT:    ori $a3, $zero, 2555432; LA32R-NEXT:    sll.w $a3, $a3, $a05433; LA32R-NEXT:    andi $a1, $a1, 2555434; LA32R-NEXT:    sll.w $a1, $a1, $a05435; LA32R-NEXT:    orn $a1, $a1, $a35436; LA32R-NEXT:  .LBB116_1: # =>This Inner Loop Header: Depth=15437; LA32R-NEXT:    ll.w $a3, $a2, 05438; LA32R-NEXT:    and $a4, $a3, $a15439; LA32R-NEXT:    sc.w $a4, $a2, 05440; LA32R-NEXT:    beq $a4, $zero, .LBB116_15441; LA32R-NEXT:  # %bb.2:5442; LA32R-NEXT:    srl.w $a0, $a3, $a05443; LA32R-NEXT:    ret5444;5445; LA32S-LABEL: atomicrmw_and_i8_seq_cst:5446; LA32S:       # %bb.0:5447; LA32S-NEXT:    slli.w $a2, $a0, 35448; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 05449; LA32S-NEXT:    ori $a3, $zero, 2555450; LA32S-NEXT:    sll.w $a3, $a3, $a25451; LA32S-NEXT:    andi $a1, $a1, 2555452; LA32S-NEXT:    sll.w $a1, $a1, $a25453; LA32S-NEXT:    orn $a1, $a1, $a35454; LA32S-NEXT:  .LBB116_1: # =>This Inner Loop Header: Depth=15455; LA32S-NEXT:    ll.w $a3, $a0, 05456; LA32S-NEXT:    and $a4, $a3, $a15457; LA32S-NEXT:    sc.w $a4, $a0, 05458; LA32S-NEXT:    beq $a4, $zero, .LBB116_15459; LA32S-NEXT:  # %bb.2:5460; LA32S-NEXT:    srl.w $a0, $a3, $a25461; LA32S-NEXT:    ret5462;5463; LA64-LABEL: atomicrmw_and_i8_seq_cst:5464; LA64:       # %bb.0:5465; LA64-NEXT:    slli.d $a2, $a0, 35466; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05467; LA64-NEXT:    ori $a3, $zero, 2555468; LA64-NEXT:    sll.w $a3, $a3, $a25469; LA64-NEXT:    andi $a1, $a1, 2555470; LA64-NEXT:    sll.w $a1, $a1, $a25471; LA64-NEXT:    orn $a1, $a1, $a35472; LA64-NEXT:    amand_db.w $a3, $a1, $a05473; LA64-NEXT:    srl.w $a0, $a3, $a25474; LA64-NEXT:    ret5475  %1 = atomicrmw and ptr %a, i8 %b seq_cst5476  ret i8 %15477}5478 5479define i16 @atomicrmw_and_i16_seq_cst(ptr %a, i16 %b) nounwind {5480; LA32R-LABEL: atomicrmw_and_i16_seq_cst:5481; LA32R:       # %bb.0:5482; LA32R-NEXT:    addi.w $a2, $zero, -45483; LA32R-NEXT:    and $a2, $a0, $a25484; LA32R-NEXT:    slli.w $a0, $a0, 35485; LA32R-NEXT:    lu12i.w $a3, 155486; LA32R-NEXT:    ori $a3, $a3, 40955487; LA32R-NEXT:    sll.w $a4, $a3, $a05488; LA32R-NEXT:    and $a1, $a1, $a35489; LA32R-NEXT:    sll.w $a1, $a1, $a05490; LA32R-NEXT:    orn $a1, $a1, $a45491; LA32R-NEXT:  .LBB117_1: # =>This Inner Loop Header: Depth=15492; LA32R-NEXT:    ll.w $a3, $a2, 05493; LA32R-NEXT:    and $a4, $a3, $a15494; LA32R-NEXT:    sc.w $a4, $a2, 05495; LA32R-NEXT:    beq $a4, $zero, .LBB117_15496; LA32R-NEXT:  # %bb.2:5497; LA32R-NEXT:    srl.w $a0, $a3, $a05498; LA32R-NEXT:    ret5499;5500; LA32S-LABEL: atomicrmw_and_i16_seq_cst:5501; LA32S:       # %bb.0:5502; LA32S-NEXT:    slli.w $a2, $a0, 35503; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 05504; LA32S-NEXT:    lu12i.w $a3, 155505; LA32S-NEXT:    ori $a3, $a3, 40955506; LA32S-NEXT:    sll.w $a3, $a3, $a25507; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 05508; LA32S-NEXT:    sll.w $a1, $a1, $a25509; LA32S-NEXT:    orn $a1, $a1, $a35510; LA32S-NEXT:  .LBB117_1: # =>This Inner Loop Header: Depth=15511; LA32S-NEXT:    ll.w $a3, $a0, 05512; LA32S-NEXT:    and $a4, $a3, $a15513; LA32S-NEXT:    sc.w $a4, $a0, 05514; LA32S-NEXT:    beq $a4, $zero, .LBB117_15515; LA32S-NEXT:  # %bb.2:5516; LA32S-NEXT:    srl.w $a0, $a3, $a25517; LA32S-NEXT:    ret5518;5519; LA64-LABEL: atomicrmw_and_i16_seq_cst:5520; LA64:       # %bb.0:5521; LA64-NEXT:    slli.d $a2, $a0, 35522; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05523; LA64-NEXT:    lu12i.w $a3, 155524; LA64-NEXT:    ori $a3, $a3, 40955525; LA64-NEXT:    sll.w $a3, $a3, $a25526; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 05527; LA64-NEXT:    sll.w $a1, $a1, $a25528; LA64-NEXT:    orn $a1, $a1, $a35529; LA64-NEXT:    amand_db.w $a3, $a1, $a05530; LA64-NEXT:    srl.w $a0, $a3, $a25531; LA64-NEXT:    ret5532  %1 = atomicrmw and ptr %a, i16 %b seq_cst5533  ret i16 %15534}5535 5536define i32 @atomicrmw_and_i32_seq_cst(ptr %a, i32 %b) nounwind {5537; LA32R-LABEL: atomicrmw_and_i32_seq_cst:5538; LA32R:       # %bb.0:5539; LA32R-NEXT:  .LBB118_1: # =>This Inner Loop Header: Depth=15540; LA32R-NEXT:    ll.w $a2, $a0, 05541; LA32R-NEXT:    and $a3, $a2, $a15542; LA32R-NEXT:    sc.w $a3, $a0, 05543; LA32R-NEXT:    beq $a3, $zero, .LBB118_15544; LA32R-NEXT:  # %bb.2:5545; LA32R-NEXT:    move $a0, $a25546; LA32R-NEXT:    ret5547;5548; LA32S-LABEL: atomicrmw_and_i32_seq_cst:5549; LA32S:       # %bb.0:5550; LA32S-NEXT:  .LBB118_1: # =>This Inner Loop Header: Depth=15551; LA32S-NEXT:    ll.w $a2, $a0, 05552; LA32S-NEXT:    and $a3, $a2, $a15553; LA32S-NEXT:    sc.w $a3, $a0, 05554; LA32S-NEXT:    beq $a3, $zero, .LBB118_15555; LA32S-NEXT:  # %bb.2:5556; LA32S-NEXT:    move $a0, $a25557; LA32S-NEXT:    ret5558;5559; LA64-LABEL: atomicrmw_and_i32_seq_cst:5560; LA64:       # %bb.0:5561; LA64-NEXT:    amand_db.w $a2, $a1, $a05562; LA64-NEXT:    move $a0, $a25563; LA64-NEXT:    ret5564  %1 = atomicrmw and ptr %a, i32 %b seq_cst5565  ret i32 %15566}5567 5568define i64 @atomicrmw_and_i64_seq_cst(ptr %a, i64 %b) nounwind {5569; LA32R-LABEL: atomicrmw_and_i64_seq_cst:5570; LA32R:       # %bb.0:5571; LA32R-NEXT:    addi.w $sp, $sp, -165572; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill5573; LA32R-NEXT:    ori $a3, $zero, 55574; LA32R-NEXT:    bl __atomic_fetch_and_85575; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload5576; LA32R-NEXT:    addi.w $sp, $sp, 165577; LA32R-NEXT:    ret5578;5579; LA32S-LABEL: atomicrmw_and_i64_seq_cst:5580; LA32S:       # %bb.0:5581; LA32S-NEXT:    addi.w $sp, $sp, -165582; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill5583; LA32S-NEXT:    ori $a3, $zero, 55584; LA32S-NEXT:    bl __atomic_fetch_and_85585; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload5586; LA32S-NEXT:    addi.w $sp, $sp, 165587; LA32S-NEXT:    ret5588;5589; LA64-LABEL: atomicrmw_and_i64_seq_cst:5590; LA64:       # %bb.0:5591; LA64-NEXT:    amand_db.d $a2, $a1, $a05592; LA64-NEXT:    move $a0, $a25593; LA64-NEXT:    ret5594  %1 = atomicrmw and ptr %a, i64 %b seq_cst5595  ret i64 %15596}5597 5598define i8 @atomicrmw_or_i8_seq_cst(ptr %a, i8 %b) nounwind {5599; LA32R-LABEL: atomicrmw_or_i8_seq_cst:5600; LA32R:       # %bb.0:5601; LA32R-NEXT:    addi.w $a2, $zero, -45602; LA32R-NEXT:    and $a2, $a0, $a25603; LA32R-NEXT:    slli.w $a0, $a0, 35604; LA32R-NEXT:    andi $a1, $a1, 2555605; LA32R-NEXT:    sll.w $a1, $a1, $a05606; LA32R-NEXT:  .LBB120_1: # =>This Inner Loop Header: Depth=15607; LA32R-NEXT:    ll.w $a3, $a2, 05608; LA32R-NEXT:    or $a4, $a3, $a15609; LA32R-NEXT:    sc.w $a4, $a2, 05610; LA32R-NEXT:    beq $a4, $zero, .LBB120_15611; LA32R-NEXT:  # %bb.2:5612; LA32R-NEXT:    srl.w $a0, $a3, $a05613; LA32R-NEXT:    ret5614;5615; LA32S-LABEL: atomicrmw_or_i8_seq_cst:5616; LA32S:       # %bb.0:5617; LA32S-NEXT:    slli.w $a2, $a0, 35618; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 05619; LA32S-NEXT:    andi $a1, $a1, 2555620; LA32S-NEXT:    sll.w $a1, $a1, $a25621; LA32S-NEXT:  .LBB120_1: # =>This Inner Loop Header: Depth=15622; LA32S-NEXT:    ll.w $a3, $a0, 05623; LA32S-NEXT:    or $a4, $a3, $a15624; LA32S-NEXT:    sc.w $a4, $a0, 05625; LA32S-NEXT:    beq $a4, $zero, .LBB120_15626; LA32S-NEXT:  # %bb.2:5627; LA32S-NEXT:    srl.w $a0, $a3, $a25628; LA32S-NEXT:    ret5629;5630; LA64-LABEL: atomicrmw_or_i8_seq_cst:5631; LA64:       # %bb.0:5632; LA64-NEXT:    slli.d $a2, $a0, 35633; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05634; LA64-NEXT:    andi $a1, $a1, 2555635; LA64-NEXT:    sll.w $a1, $a1, $a25636; LA64-NEXT:    amor_db.w $a3, $a1, $a05637; LA64-NEXT:    srl.w $a0, $a3, $a25638; LA64-NEXT:    ret5639  %1 = atomicrmw or ptr %a, i8 %b seq_cst5640  ret i8 %15641}5642 5643define i16 @atomicrmw_or_i16_seq_cst(ptr %a, i16 %b) nounwind {5644; LA32R-LABEL: atomicrmw_or_i16_seq_cst:5645; LA32R:       # %bb.0:5646; LA32R-NEXT:    addi.w $a2, $zero, -45647; LA32R-NEXT:    and $a2, $a0, $a25648; LA32R-NEXT:    slli.w $a0, $a0, 35649; LA32R-NEXT:    lu12i.w $a3, 155650; LA32R-NEXT:    ori $a3, $a3, 40955651; LA32R-NEXT:    and $a1, $a1, $a35652; LA32R-NEXT:    sll.w $a1, $a1, $a05653; LA32R-NEXT:  .LBB121_1: # =>This Inner Loop Header: Depth=15654; LA32R-NEXT:    ll.w $a3, $a2, 05655; LA32R-NEXT:    or $a4, $a3, $a15656; LA32R-NEXT:    sc.w $a4, $a2, 05657; LA32R-NEXT:    beq $a4, $zero, .LBB121_15658; LA32R-NEXT:  # %bb.2:5659; LA32R-NEXT:    srl.w $a0, $a3, $a05660; LA32R-NEXT:    ret5661;5662; LA32S-LABEL: atomicrmw_or_i16_seq_cst:5663; LA32S:       # %bb.0:5664; LA32S-NEXT:    slli.w $a2, $a0, 35665; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 05666; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 05667; LA32S-NEXT:    sll.w $a1, $a1, $a25668; LA32S-NEXT:  .LBB121_1: # =>This Inner Loop Header: Depth=15669; LA32S-NEXT:    ll.w $a3, $a0, 05670; LA32S-NEXT:    or $a4, $a3, $a15671; LA32S-NEXT:    sc.w $a4, $a0, 05672; LA32S-NEXT:    beq $a4, $zero, .LBB121_15673; LA32S-NEXT:  # %bb.2:5674; LA32S-NEXT:    srl.w $a0, $a3, $a25675; LA32S-NEXT:    ret5676;5677; LA64-LABEL: atomicrmw_or_i16_seq_cst:5678; LA64:       # %bb.0:5679; LA64-NEXT:    slli.d $a2, $a0, 35680; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05681; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 05682; LA64-NEXT:    sll.w $a1, $a1, $a25683; LA64-NEXT:    amor_db.w $a3, $a1, $a05684; LA64-NEXT:    srl.w $a0, $a3, $a25685; LA64-NEXT:    ret5686  %1 = atomicrmw or ptr %a, i16 %b seq_cst5687  ret i16 %15688}5689 5690define i32 @atomicrmw_or_i32_seq_cst(ptr %a, i32 %b) nounwind {5691; LA32R-LABEL: atomicrmw_or_i32_seq_cst:5692; LA32R:       # %bb.0:5693; LA32R-NEXT:  .LBB122_1: # =>This Inner Loop Header: Depth=15694; LA32R-NEXT:    ll.w $a2, $a0, 05695; LA32R-NEXT:    or $a3, $a2, $a15696; LA32R-NEXT:    sc.w $a3, $a0, 05697; LA32R-NEXT:    beq $a3, $zero, .LBB122_15698; LA32R-NEXT:  # %bb.2:5699; LA32R-NEXT:    move $a0, $a25700; LA32R-NEXT:    ret5701;5702; LA32S-LABEL: atomicrmw_or_i32_seq_cst:5703; LA32S:       # %bb.0:5704; LA32S-NEXT:  .LBB122_1: # =>This Inner Loop Header: Depth=15705; LA32S-NEXT:    ll.w $a2, $a0, 05706; LA32S-NEXT:    or $a3, $a2, $a15707; LA32S-NEXT:    sc.w $a3, $a0, 05708; LA32S-NEXT:    beq $a3, $zero, .LBB122_15709; LA32S-NEXT:  # %bb.2:5710; LA32S-NEXT:    move $a0, $a25711; LA32S-NEXT:    ret5712;5713; LA64-LABEL: atomicrmw_or_i32_seq_cst:5714; LA64:       # %bb.0:5715; LA64-NEXT:    amor_db.w $a2, $a1, $a05716; LA64-NEXT:    move $a0, $a25717; LA64-NEXT:    ret5718  %1 = atomicrmw or ptr %a, i32 %b seq_cst5719  ret i32 %15720}5721 5722define i64 @atomicrmw_or_i64_seq_cst(ptr %a, i64 %b) nounwind {5723; LA32R-LABEL: atomicrmw_or_i64_seq_cst:5724; LA32R:       # %bb.0:5725; LA32R-NEXT:    addi.w $sp, $sp, -165726; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill5727; LA32R-NEXT:    ori $a3, $zero, 55728; LA32R-NEXT:    bl __atomic_fetch_or_85729; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload5730; LA32R-NEXT:    addi.w $sp, $sp, 165731; LA32R-NEXT:    ret5732;5733; LA32S-LABEL: atomicrmw_or_i64_seq_cst:5734; LA32S:       # %bb.0:5735; LA32S-NEXT:    addi.w $sp, $sp, -165736; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill5737; LA32S-NEXT:    ori $a3, $zero, 55738; LA32S-NEXT:    bl __atomic_fetch_or_85739; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload5740; LA32S-NEXT:    addi.w $sp, $sp, 165741; LA32S-NEXT:    ret5742;5743; LA64-LABEL: atomicrmw_or_i64_seq_cst:5744; LA64:       # %bb.0:5745; LA64-NEXT:    amor_db.d $a2, $a1, $a05746; LA64-NEXT:    move $a0, $a25747; LA64-NEXT:    ret5748  %1 = atomicrmw or ptr %a, i64 %b seq_cst5749  ret i64 %15750}5751 5752define i8 @atomicrmw_xor_i8_seq_cst(ptr %a, i8 %b) nounwind {5753; LA32R-LABEL: atomicrmw_xor_i8_seq_cst:5754; LA32R:       # %bb.0:5755; LA32R-NEXT:    addi.w $a2, $zero, -45756; LA32R-NEXT:    and $a2, $a0, $a25757; LA32R-NEXT:    slli.w $a0, $a0, 35758; LA32R-NEXT:    andi $a1, $a1, 2555759; LA32R-NEXT:    sll.w $a1, $a1, $a05760; LA32R-NEXT:  .LBB124_1: # =>This Inner Loop Header: Depth=15761; LA32R-NEXT:    ll.w $a3, $a2, 05762; LA32R-NEXT:    xor $a4, $a3, $a15763; LA32R-NEXT:    sc.w $a4, $a2, 05764; LA32R-NEXT:    beq $a4, $zero, .LBB124_15765; LA32R-NEXT:  # %bb.2:5766; LA32R-NEXT:    srl.w $a0, $a3, $a05767; LA32R-NEXT:    ret5768;5769; LA32S-LABEL: atomicrmw_xor_i8_seq_cst:5770; LA32S:       # %bb.0:5771; LA32S-NEXT:    slli.w $a2, $a0, 35772; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 05773; LA32S-NEXT:    andi $a1, $a1, 2555774; LA32S-NEXT:    sll.w $a1, $a1, $a25775; LA32S-NEXT:  .LBB124_1: # =>This Inner Loop Header: Depth=15776; LA32S-NEXT:    ll.w $a3, $a0, 05777; LA32S-NEXT:    xor $a4, $a3, $a15778; LA32S-NEXT:    sc.w $a4, $a0, 05779; LA32S-NEXT:    beq $a4, $zero, .LBB124_15780; LA32S-NEXT:  # %bb.2:5781; LA32S-NEXT:    srl.w $a0, $a3, $a25782; LA32S-NEXT:    ret5783;5784; LA64-LABEL: atomicrmw_xor_i8_seq_cst:5785; LA64:       # %bb.0:5786; LA64-NEXT:    slli.d $a2, $a0, 35787; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05788; LA64-NEXT:    andi $a1, $a1, 2555789; LA64-NEXT:    sll.w $a1, $a1, $a25790; LA64-NEXT:    amxor_db.w $a3, $a1, $a05791; LA64-NEXT:    srl.w $a0, $a3, $a25792; LA64-NEXT:    ret5793  %1 = atomicrmw xor ptr %a, i8 %b seq_cst5794  ret i8 %15795}5796 5797define i16 @atomicrmw_xor_i16_seq_cst(ptr %a, i16 %b) nounwind {5798; LA32R-LABEL: atomicrmw_xor_i16_seq_cst:5799; LA32R:       # %bb.0:5800; LA32R-NEXT:    addi.w $a2, $zero, -45801; LA32R-NEXT:    and $a2, $a0, $a25802; LA32R-NEXT:    slli.w $a0, $a0, 35803; LA32R-NEXT:    lu12i.w $a3, 155804; LA32R-NEXT:    ori $a3, $a3, 40955805; LA32R-NEXT:    and $a1, $a1, $a35806; LA32R-NEXT:    sll.w $a1, $a1, $a05807; LA32R-NEXT:  .LBB125_1: # =>This Inner Loop Header: Depth=15808; LA32R-NEXT:    ll.w $a3, $a2, 05809; LA32R-NEXT:    xor $a4, $a3, $a15810; LA32R-NEXT:    sc.w $a4, $a2, 05811; LA32R-NEXT:    beq $a4, $zero, .LBB125_15812; LA32R-NEXT:  # %bb.2:5813; LA32R-NEXT:    srl.w $a0, $a3, $a05814; LA32R-NEXT:    ret5815;5816; LA32S-LABEL: atomicrmw_xor_i16_seq_cst:5817; LA32S:       # %bb.0:5818; LA32S-NEXT:    slli.w $a2, $a0, 35819; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 05820; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 05821; LA32S-NEXT:    sll.w $a1, $a1, $a25822; LA32S-NEXT:  .LBB125_1: # =>This Inner Loop Header: Depth=15823; LA32S-NEXT:    ll.w $a3, $a0, 05824; LA32S-NEXT:    xor $a4, $a3, $a15825; LA32S-NEXT:    sc.w $a4, $a0, 05826; LA32S-NEXT:    beq $a4, $zero, .LBB125_15827; LA32S-NEXT:  # %bb.2:5828; LA32S-NEXT:    srl.w $a0, $a3, $a25829; LA32S-NEXT:    ret5830;5831; LA64-LABEL: atomicrmw_xor_i16_seq_cst:5832; LA64:       # %bb.0:5833; LA64-NEXT:    slli.d $a2, $a0, 35834; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05835; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 05836; LA64-NEXT:    sll.w $a1, $a1, $a25837; LA64-NEXT:    amxor_db.w $a3, $a1, $a05838; LA64-NEXT:    srl.w $a0, $a3, $a25839; LA64-NEXT:    ret5840  %1 = atomicrmw xor ptr %a, i16 %b seq_cst5841  ret i16 %15842}5843 5844define i32 @atomicrmw_xor_i32_seq_cst(ptr %a, i32 %b) nounwind {5845; LA32R-LABEL: atomicrmw_xor_i32_seq_cst:5846; LA32R:       # %bb.0:5847; LA32R-NEXT:  .LBB126_1: # =>This Inner Loop Header: Depth=15848; LA32R-NEXT:    ll.w $a2, $a0, 05849; LA32R-NEXT:    xor $a3, $a2, $a15850; LA32R-NEXT:    sc.w $a3, $a0, 05851; LA32R-NEXT:    beq $a3, $zero, .LBB126_15852; LA32R-NEXT:  # %bb.2:5853; LA32R-NEXT:    move $a0, $a25854; LA32R-NEXT:    ret5855;5856; LA32S-LABEL: atomicrmw_xor_i32_seq_cst:5857; LA32S:       # %bb.0:5858; LA32S-NEXT:  .LBB126_1: # =>This Inner Loop Header: Depth=15859; LA32S-NEXT:    ll.w $a2, $a0, 05860; LA32S-NEXT:    xor $a3, $a2, $a15861; LA32S-NEXT:    sc.w $a3, $a0, 05862; LA32S-NEXT:    beq $a3, $zero, .LBB126_15863; LA32S-NEXT:  # %bb.2:5864; LA32S-NEXT:    move $a0, $a25865; LA32S-NEXT:    ret5866;5867; LA64-LABEL: atomicrmw_xor_i32_seq_cst:5868; LA64:       # %bb.0:5869; LA64-NEXT:    amxor_db.w $a2, $a1, $a05870; LA64-NEXT:    move $a0, $a25871; LA64-NEXT:    ret5872  %1 = atomicrmw xor ptr %a, i32 %b seq_cst5873  ret i32 %15874}5875 5876define i64 @atomicrmw_xor_i64_seq_cst(ptr %a, i64 %b) nounwind {5877; LA32R-LABEL: atomicrmw_xor_i64_seq_cst:5878; LA32R:       # %bb.0:5879; LA32R-NEXT:    addi.w $sp, $sp, -165880; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill5881; LA32R-NEXT:    ori $a3, $zero, 55882; LA32R-NEXT:    bl __atomic_fetch_xor_85883; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload5884; LA32R-NEXT:    addi.w $sp, $sp, 165885; LA32R-NEXT:    ret5886;5887; LA32S-LABEL: atomicrmw_xor_i64_seq_cst:5888; LA32S:       # %bb.0:5889; LA32S-NEXT:    addi.w $sp, $sp, -165890; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill5891; LA32S-NEXT:    ori $a3, $zero, 55892; LA32S-NEXT:    bl __atomic_fetch_xor_85893; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload5894; LA32S-NEXT:    addi.w $sp, $sp, 165895; LA32S-NEXT:    ret5896;5897; LA64-LABEL: atomicrmw_xor_i64_seq_cst:5898; LA64:       # %bb.0:5899; LA64-NEXT:    amxor_db.d $a2, $a1, $a05900; LA64-NEXT:    move $a0, $a25901; LA64-NEXT:    ret5902  %1 = atomicrmw xor ptr %a, i64 %b seq_cst5903  ret i64 %15904}5905 5906define i8 @atomicrmw_xchg_i8_monotonic(ptr %a, i8 %b) nounwind {5907; LA32R-LABEL: atomicrmw_xchg_i8_monotonic:5908; LA32R:       # %bb.0:5909; LA32R-NEXT:    addi.w $a2, $zero, -45910; LA32R-NEXT:    and $a2, $a0, $a25911; LA32R-NEXT:    slli.w $a0, $a0, 35912; LA32R-NEXT:    ori $a3, $zero, 2555913; LA32R-NEXT:    sll.w $a3, $a3, $a05914; LA32R-NEXT:    andi $a1, $a1, 2555915; LA32R-NEXT:    sll.w $a1, $a1, $a05916; LA32R-NEXT:  .LBB128_1: # =>This Inner Loop Header: Depth=15917; LA32R-NEXT:    ll.w $a4, $a2, 05918; LA32R-NEXT:    addi.w $a5, $a1, 05919; LA32R-NEXT:    xor $a5, $a4, $a55920; LA32R-NEXT:    and $a5, $a5, $a35921; LA32R-NEXT:    xor $a5, $a4, $a55922; LA32R-NEXT:    sc.w $a5, $a2, 05923; LA32R-NEXT:    beq $a5, $zero, .LBB128_15924; LA32R-NEXT:  # %bb.2:5925; LA32R-NEXT:    srl.w $a0, $a4, $a05926; LA32R-NEXT:    ret5927;5928; LA32S-LABEL: atomicrmw_xchg_i8_monotonic:5929; LA32S:       # %bb.0:5930; LA32S-NEXT:    slli.w $a2, $a0, 35931; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 05932; LA32S-NEXT:    ori $a3, $zero, 2555933; LA32S-NEXT:    sll.w $a3, $a3, $a25934; LA32S-NEXT:    andi $a1, $a1, 2555935; LA32S-NEXT:    sll.w $a1, $a1, $a25936; LA32S-NEXT:  .LBB128_1: # =>This Inner Loop Header: Depth=15937; LA32S-NEXT:    ll.w $a4, $a0, 05938; LA32S-NEXT:    addi.w $a5, $a1, 05939; LA32S-NEXT:    xor $a5, $a4, $a55940; LA32S-NEXT:    and $a5, $a5, $a35941; LA32S-NEXT:    xor $a5, $a4, $a55942; LA32S-NEXT:    sc.w $a5, $a0, 05943; LA32S-NEXT:    beq $a5, $zero, .LBB128_15944; LA32S-NEXT:  # %bb.2:5945; LA32S-NEXT:    srl.w $a0, $a4, $a25946; LA32S-NEXT:    ret5947;5948; LA64-LABEL: atomicrmw_xchg_i8_monotonic:5949; LA64:       # %bb.0:5950; LA64-NEXT:    slli.d $a2, $a0, 35951; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05952; LA64-NEXT:    ori $a3, $zero, 2555953; LA64-NEXT:    sll.w $a3, $a3, $a25954; LA64-NEXT:    andi $a1, $a1, 2555955; LA64-NEXT:    sll.w $a1, $a1, $a25956; LA64-NEXT:  .LBB128_1: # =>This Inner Loop Header: Depth=15957; LA64-NEXT:    ll.w $a4, $a0, 05958; LA64-NEXT:    addi.w $a5, $a1, 05959; LA64-NEXT:    xor $a5, $a4, $a55960; LA64-NEXT:    and $a5, $a5, $a35961; LA64-NEXT:    xor $a5, $a4, $a55962; LA64-NEXT:    sc.w $a5, $a0, 05963; LA64-NEXT:    beq $a5, $zero, .LBB128_15964; LA64-NEXT:  # %bb.2:5965; LA64-NEXT:    srl.w $a0, $a4, $a25966; LA64-NEXT:    ret5967  %1 = atomicrmw xchg ptr %a, i8 %b monotonic5968  ret i8 %15969}5970 5971define i8 @atomicrmw_xchg_0_i8_monotonic(ptr %a) nounwind {5972; LA32R-LABEL: atomicrmw_xchg_0_i8_monotonic:5973; LA32R:       # %bb.0:5974; LA32R-NEXT:    addi.w $a1, $zero, -45975; LA32R-NEXT:    and $a1, $a0, $a15976; LA32R-NEXT:    slli.w $a0, $a0, 35977; LA32R-NEXT:    ori $a2, $zero, 2555978; LA32R-NEXT:    sll.w $a2, $a2, $a05979; LA32R-NEXT:    nor $a2, $a2, $zero5980; LA32R-NEXT:  .LBB129_1: # =>This Inner Loop Header: Depth=15981; LA32R-NEXT:    ll.w $a3, $a1, 05982; LA32R-NEXT:    and $a4, $a3, $a25983; LA32R-NEXT:    sc.w $a4, $a1, 05984; LA32R-NEXT:    beq $a4, $zero, .LBB129_15985; LA32R-NEXT:  # %bb.2:5986; LA32R-NEXT:    srl.w $a0, $a3, $a05987; LA32R-NEXT:    ret5988;5989; LA32S-LABEL: atomicrmw_xchg_0_i8_monotonic:5990; LA32S:       # %bb.0:5991; LA32S-NEXT:    slli.w $a1, $a0, 35992; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 05993; LA32S-NEXT:    ori $a2, $zero, 2555994; LA32S-NEXT:    sll.w $a2, $a2, $a15995; LA32S-NEXT:    nor $a2, $a2, $zero5996; LA32S-NEXT:  .LBB129_1: # =>This Inner Loop Header: Depth=15997; LA32S-NEXT:    ll.w $a3, $a0, 05998; LA32S-NEXT:    and $a4, $a3, $a25999; LA32S-NEXT:    sc.w $a4, $a0, 06000; LA32S-NEXT:    beq $a4, $zero, .LBB129_16001; LA32S-NEXT:  # %bb.2:6002; LA32S-NEXT:    srl.w $a0, $a3, $a16003; LA32S-NEXT:    ret6004;6005; LA64-LABEL: atomicrmw_xchg_0_i8_monotonic:6006; LA64:       # %bb.0:6007; LA64-NEXT:    slli.d $a1, $a0, 36008; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06009; LA64-NEXT:    ori $a2, $zero, 2556010; LA64-NEXT:    sll.w $a2, $a2, $a16011; LA64-NEXT:    nor $a2, $a2, $zero6012; LA64-NEXT:    amand.w $a3, $a2, $a06013; LA64-NEXT:    srl.w $a0, $a3, $a16014; LA64-NEXT:    ret6015  %1 = atomicrmw xchg ptr %a, i8 0 monotonic6016  ret i8 %16017}6018 6019define i8 @atomicrmw_xchg_minus_1_i8_monotonic(ptr %a) nounwind {6020; LA32R-LABEL: atomicrmw_xchg_minus_1_i8_monotonic:6021; LA32R:       # %bb.0:6022; LA32R-NEXT:    addi.w $a1, $zero, -46023; LA32R-NEXT:    and $a1, $a0, $a16024; LA32R-NEXT:    slli.w $a0, $a0, 36025; LA32R-NEXT:    ori $a2, $zero, 2556026; LA32R-NEXT:    sll.w $a2, $a2, $a06027; LA32R-NEXT:  .LBB130_1: # =>This Inner Loop Header: Depth=16028; LA32R-NEXT:    ll.w $a3, $a1, 06029; LA32R-NEXT:    or $a4, $a3, $a26030; LA32R-NEXT:    sc.w $a4, $a1, 06031; LA32R-NEXT:    beq $a4, $zero, .LBB130_16032; LA32R-NEXT:  # %bb.2:6033; LA32R-NEXT:    srl.w $a0, $a3, $a06034; LA32R-NEXT:    ret6035;6036; LA32S-LABEL: atomicrmw_xchg_minus_1_i8_monotonic:6037; LA32S:       # %bb.0:6038; LA32S-NEXT:    slli.w $a1, $a0, 36039; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 06040; LA32S-NEXT:    ori $a2, $zero, 2556041; LA32S-NEXT:    sll.w $a2, $a2, $a16042; LA32S-NEXT:  .LBB130_1: # =>This Inner Loop Header: Depth=16043; LA32S-NEXT:    ll.w $a3, $a0, 06044; LA32S-NEXT:    or $a4, $a3, $a26045; LA32S-NEXT:    sc.w $a4, $a0, 06046; LA32S-NEXT:    beq $a4, $zero, .LBB130_16047; LA32S-NEXT:  # %bb.2:6048; LA32S-NEXT:    srl.w $a0, $a3, $a16049; LA32S-NEXT:    ret6050;6051; LA64-LABEL: atomicrmw_xchg_minus_1_i8_monotonic:6052; LA64:       # %bb.0:6053; LA64-NEXT:    slli.d $a1, $a0, 36054; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06055; LA64-NEXT:    ori $a2, $zero, 2556056; LA64-NEXT:    sll.w $a2, $a2, $a16057; LA64-NEXT:    amor.w $a3, $a2, $a06058; LA64-NEXT:    srl.w $a0, $a3, $a16059; LA64-NEXT:    ret6060  %1 = atomicrmw xchg ptr %a, i8 -1 monotonic6061  ret i8 %16062}6063 6064define i16 @atomicrmw_xchg_i16_monotonic(ptr %a, i16 %b) nounwind {6065; LA32R-LABEL: atomicrmw_xchg_i16_monotonic:6066; LA32R:       # %bb.0:6067; LA32R-NEXT:    addi.w $a2, $zero, -46068; LA32R-NEXT:    and $a2, $a0, $a26069; LA32R-NEXT:    slli.w $a0, $a0, 36070; LA32R-NEXT:    lu12i.w $a3, 156071; LA32R-NEXT:    ori $a3, $a3, 40956072; LA32R-NEXT:    sll.w $a4, $a3, $a06073; LA32R-NEXT:    and $a1, $a1, $a36074; LA32R-NEXT:    sll.w $a1, $a1, $a06075; LA32R-NEXT:  .LBB131_1: # =>This Inner Loop Header: Depth=16076; LA32R-NEXT:    ll.w $a3, $a2, 06077; LA32R-NEXT:    addi.w $a5, $a1, 06078; LA32R-NEXT:    xor $a5, $a3, $a56079; LA32R-NEXT:    and $a5, $a5, $a46080; LA32R-NEXT:    xor $a5, $a3, $a56081; LA32R-NEXT:    sc.w $a5, $a2, 06082; LA32R-NEXT:    beq $a5, $zero, .LBB131_16083; LA32R-NEXT:  # %bb.2:6084; LA32R-NEXT:    srl.w $a0, $a3, $a06085; LA32R-NEXT:    ret6086;6087; LA32S-LABEL: atomicrmw_xchg_i16_monotonic:6088; LA32S:       # %bb.0:6089; LA32S-NEXT:    slli.w $a2, $a0, 36090; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 06091; LA32S-NEXT:    lu12i.w $a3, 156092; LA32S-NEXT:    ori $a3, $a3, 40956093; LA32S-NEXT:    sll.w $a3, $a3, $a26094; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 06095; LA32S-NEXT:    sll.w $a1, $a1, $a26096; LA32S-NEXT:  .LBB131_1: # =>This Inner Loop Header: Depth=16097; LA32S-NEXT:    ll.w $a4, $a0, 06098; LA32S-NEXT:    addi.w $a5, $a1, 06099; LA32S-NEXT:    xor $a5, $a4, $a56100; LA32S-NEXT:    and $a5, $a5, $a36101; LA32S-NEXT:    xor $a5, $a4, $a56102; LA32S-NEXT:    sc.w $a5, $a0, 06103; LA32S-NEXT:    beq $a5, $zero, .LBB131_16104; LA32S-NEXT:  # %bb.2:6105; LA32S-NEXT:    srl.w $a0, $a4, $a26106; LA32S-NEXT:    ret6107;6108; LA64-LABEL: atomicrmw_xchg_i16_monotonic:6109; LA64:       # %bb.0:6110; LA64-NEXT:    slli.d $a2, $a0, 36111; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06112; LA64-NEXT:    lu12i.w $a3, 156113; LA64-NEXT:    ori $a3, $a3, 40956114; LA64-NEXT:    sll.w $a3, $a3, $a26115; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 06116; LA64-NEXT:    sll.w $a1, $a1, $a26117; LA64-NEXT:  .LBB131_1: # =>This Inner Loop Header: Depth=16118; LA64-NEXT:    ll.w $a4, $a0, 06119; LA64-NEXT:    addi.w $a5, $a1, 06120; LA64-NEXT:    xor $a5, $a4, $a56121; LA64-NEXT:    and $a5, $a5, $a36122; LA64-NEXT:    xor $a5, $a4, $a56123; LA64-NEXT:    sc.w $a5, $a0, 06124; LA64-NEXT:    beq $a5, $zero, .LBB131_16125; LA64-NEXT:  # %bb.2:6126; LA64-NEXT:    srl.w $a0, $a4, $a26127; LA64-NEXT:    ret6128  %1 = atomicrmw xchg ptr %a, i16 %b monotonic6129  ret i16 %16130}6131 6132define i16 @atomicrmw_xchg_0_i16_monotonic(ptr %a) nounwind {6133; LA32R-LABEL: atomicrmw_xchg_0_i16_monotonic:6134; LA32R:       # %bb.0:6135; LA32R-NEXT:    addi.w $a1, $zero, -46136; LA32R-NEXT:    and $a1, $a0, $a16137; LA32R-NEXT:    slli.w $a0, $a0, 36138; LA32R-NEXT:    lu12i.w $a2, 156139; LA32R-NEXT:    ori $a2, $a2, 40956140; LA32R-NEXT:    sll.w $a2, $a2, $a06141; LA32R-NEXT:    nor $a2, $a2, $zero6142; LA32R-NEXT:  .LBB132_1: # =>This Inner Loop Header: Depth=16143; LA32R-NEXT:    ll.w $a3, $a1, 06144; LA32R-NEXT:    and $a4, $a3, $a26145; LA32R-NEXT:    sc.w $a4, $a1, 06146; LA32R-NEXT:    beq $a4, $zero, .LBB132_16147; LA32R-NEXT:  # %bb.2:6148; LA32R-NEXT:    srl.w $a0, $a3, $a06149; LA32R-NEXT:    ret6150;6151; LA32S-LABEL: atomicrmw_xchg_0_i16_monotonic:6152; LA32S:       # %bb.0:6153; LA32S-NEXT:    slli.w $a1, $a0, 36154; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 06155; LA32S-NEXT:    lu12i.w $a2, 156156; LA32S-NEXT:    ori $a2, $a2, 40956157; LA32S-NEXT:    sll.w $a2, $a2, $a16158; LA32S-NEXT:    nor $a2, $a2, $zero6159; LA32S-NEXT:  .LBB132_1: # =>This Inner Loop Header: Depth=16160; LA32S-NEXT:    ll.w $a3, $a0, 06161; LA32S-NEXT:    and $a4, $a3, $a26162; LA32S-NEXT:    sc.w $a4, $a0, 06163; LA32S-NEXT:    beq $a4, $zero, .LBB132_16164; LA32S-NEXT:  # %bb.2:6165; LA32S-NEXT:    srl.w $a0, $a3, $a16166; LA32S-NEXT:    ret6167;6168; LA64-LABEL: atomicrmw_xchg_0_i16_monotonic:6169; LA64:       # %bb.0:6170; LA64-NEXT:    slli.d $a1, $a0, 36171; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06172; LA64-NEXT:    lu12i.w $a2, 156173; LA64-NEXT:    ori $a2, $a2, 40956174; LA64-NEXT:    sll.w $a2, $a2, $a16175; LA64-NEXT:    nor $a2, $a2, $zero6176; LA64-NEXT:    amand.w $a3, $a2, $a06177; LA64-NEXT:    srl.w $a0, $a3, $a16178; LA64-NEXT:    ret6179  %1 = atomicrmw xchg ptr %a, i16 0 monotonic6180  ret i16 %16181}6182 6183define i16 @atomicrmw_xchg_minus_1_i16_monotonic(ptr %a) nounwind {6184; LA32R-LABEL: atomicrmw_xchg_minus_1_i16_monotonic:6185; LA32R:       # %bb.0:6186; LA32R-NEXT:    addi.w $a1, $zero, -46187; LA32R-NEXT:    and $a1, $a0, $a16188; LA32R-NEXT:    slli.w $a0, $a0, 36189; LA32R-NEXT:    lu12i.w $a2, 156190; LA32R-NEXT:    ori $a2, $a2, 40956191; LA32R-NEXT:    sll.w $a2, $a2, $a06192; LA32R-NEXT:  .LBB133_1: # =>This Inner Loop Header: Depth=16193; LA32R-NEXT:    ll.w $a3, $a1, 06194; LA32R-NEXT:    or $a4, $a3, $a26195; LA32R-NEXT:    sc.w $a4, $a1, 06196; LA32R-NEXT:    beq $a4, $zero, .LBB133_16197; LA32R-NEXT:  # %bb.2:6198; LA32R-NEXT:    srl.w $a0, $a3, $a06199; LA32R-NEXT:    ret6200;6201; LA32S-LABEL: atomicrmw_xchg_minus_1_i16_monotonic:6202; LA32S:       # %bb.0:6203; LA32S-NEXT:    slli.w $a1, $a0, 36204; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 06205; LA32S-NEXT:    lu12i.w $a2, 156206; LA32S-NEXT:    ori $a2, $a2, 40956207; LA32S-NEXT:    sll.w $a2, $a2, $a16208; LA32S-NEXT:  .LBB133_1: # =>This Inner Loop Header: Depth=16209; LA32S-NEXT:    ll.w $a3, $a0, 06210; LA32S-NEXT:    or $a4, $a3, $a26211; LA32S-NEXT:    sc.w $a4, $a0, 06212; LA32S-NEXT:    beq $a4, $zero, .LBB133_16213; LA32S-NEXT:  # %bb.2:6214; LA32S-NEXT:    srl.w $a0, $a3, $a16215; LA32S-NEXT:    ret6216;6217; LA64-LABEL: atomicrmw_xchg_minus_1_i16_monotonic:6218; LA64:       # %bb.0:6219; LA64-NEXT:    slli.d $a1, $a0, 36220; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06221; LA64-NEXT:    lu12i.w $a2, 156222; LA64-NEXT:    ori $a2, $a2, 40956223; LA64-NEXT:    sll.w $a2, $a2, $a16224; LA64-NEXT:    amor.w $a3, $a2, $a06225; LA64-NEXT:    srl.w $a0, $a3, $a16226; LA64-NEXT:    ret6227  %1 = atomicrmw xchg ptr %a, i16 -1 monotonic6228  ret i16 %16229}6230 6231define i32 @atomicrmw_xchg_i32_monotonic(ptr %a, i32 %b) nounwind {6232; LA32R-LABEL: atomicrmw_xchg_i32_monotonic:6233; LA32R:       # %bb.0:6234; LA32R-NEXT:  .LBB134_1: # =>This Inner Loop Header: Depth=16235; LA32R-NEXT:    ll.w $a2, $a0, 06236; LA32R-NEXT:    move $a3, $a16237; LA32R-NEXT:    sc.w $a3, $a0, 06238; LA32R-NEXT:    beq $a3, $zero, .LBB134_16239; LA32R-NEXT:  # %bb.2:6240; LA32R-NEXT:    move $a0, $a26241; LA32R-NEXT:    ret6242;6243; LA32S-LABEL: atomicrmw_xchg_i32_monotonic:6244; LA32S:       # %bb.0:6245; LA32S-NEXT:  .LBB134_1: # =>This Inner Loop Header: Depth=16246; LA32S-NEXT:    ll.w $a2, $a0, 06247; LA32S-NEXT:    move $a3, $a16248; LA32S-NEXT:    sc.w $a3, $a0, 06249; LA32S-NEXT:    beq $a3, $zero, .LBB134_16250; LA32S-NEXT:  # %bb.2:6251; LA32S-NEXT:    move $a0, $a26252; LA32S-NEXT:    ret6253;6254; LA64-LABEL: atomicrmw_xchg_i32_monotonic:6255; LA64:       # %bb.0:6256; LA64-NEXT:    amswap.w $a2, $a1, $a06257; LA64-NEXT:    move $a0, $a26258; LA64-NEXT:    ret6259  %1 = atomicrmw xchg ptr %a, i32 %b monotonic6260  ret i32 %16261}6262 6263define i64 @atomicrmw_xchg_i64_monotonic(ptr %a, i64 %b) nounwind {6264; LA32R-LABEL: atomicrmw_xchg_i64_monotonic:6265; LA32R:       # %bb.0:6266; LA32R-NEXT:    addi.w $sp, $sp, -166267; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill6268; LA32R-NEXT:    move $a3, $zero6269; LA32R-NEXT:    bl __atomic_exchange_86270; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload6271; LA32R-NEXT:    addi.w $sp, $sp, 166272; LA32R-NEXT:    ret6273;6274; LA32S-LABEL: atomicrmw_xchg_i64_monotonic:6275; LA32S:       # %bb.0:6276; LA32S-NEXT:    addi.w $sp, $sp, -166277; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill6278; LA32S-NEXT:    move $a3, $zero6279; LA32S-NEXT:    bl __atomic_exchange_86280; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload6281; LA32S-NEXT:    addi.w $sp, $sp, 166282; LA32S-NEXT:    ret6283;6284; LA64-LABEL: atomicrmw_xchg_i64_monotonic:6285; LA64:       # %bb.0:6286; LA64-NEXT:    amswap.d $a2, $a1, $a06287; LA64-NEXT:    move $a0, $a26288; LA64-NEXT:    ret6289  %1 = atomicrmw xchg ptr %a, i64 %b monotonic6290  ret i64 %16291}6292 6293define i8 @atomicrmw_add_i8_monotonic(ptr %a, i8 %b) nounwind {6294; LA32R-LABEL: atomicrmw_add_i8_monotonic:6295; LA32R:       # %bb.0:6296; LA32R-NEXT:    addi.w $a2, $zero, -46297; LA32R-NEXT:    and $a2, $a0, $a26298; LA32R-NEXT:    slli.w $a0, $a0, 36299; LA32R-NEXT:    ori $a3, $zero, 2556300; LA32R-NEXT:    sll.w $a3, $a3, $a06301; LA32R-NEXT:    andi $a1, $a1, 2556302; LA32R-NEXT:    sll.w $a1, $a1, $a06303; LA32R-NEXT:  .LBB136_1: # =>This Inner Loop Header: Depth=16304; LA32R-NEXT:    ll.w $a4, $a2, 06305; LA32R-NEXT:    add.w $a5, $a4, $a16306; LA32R-NEXT:    xor $a5, $a4, $a56307; LA32R-NEXT:    and $a5, $a5, $a36308; LA32R-NEXT:    xor $a5, $a4, $a56309; LA32R-NEXT:    sc.w $a5, $a2, 06310; LA32R-NEXT:    beq $a5, $zero, .LBB136_16311; LA32R-NEXT:  # %bb.2:6312; LA32R-NEXT:    srl.w $a0, $a4, $a06313; LA32R-NEXT:    ret6314;6315; LA32S-LABEL: atomicrmw_add_i8_monotonic:6316; LA32S:       # %bb.0:6317; LA32S-NEXT:    slli.w $a2, $a0, 36318; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 06319; LA32S-NEXT:    ori $a3, $zero, 2556320; LA32S-NEXT:    sll.w $a3, $a3, $a26321; LA32S-NEXT:    andi $a1, $a1, 2556322; LA32S-NEXT:    sll.w $a1, $a1, $a26323; LA32S-NEXT:  .LBB136_1: # =>This Inner Loop Header: Depth=16324; LA32S-NEXT:    ll.w $a4, $a0, 06325; LA32S-NEXT:    add.w $a5, $a4, $a16326; LA32S-NEXT:    xor $a5, $a4, $a56327; LA32S-NEXT:    and $a5, $a5, $a36328; LA32S-NEXT:    xor $a5, $a4, $a56329; LA32S-NEXT:    sc.w $a5, $a0, 06330; LA32S-NEXT:    beq $a5, $zero, .LBB136_16331; LA32S-NEXT:  # %bb.2:6332; LA32S-NEXT:    srl.w $a0, $a4, $a26333; LA32S-NEXT:    ret6334;6335; LA64-LABEL: atomicrmw_add_i8_monotonic:6336; LA64:       # %bb.0:6337; LA64-NEXT:    slli.d $a2, $a0, 36338; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06339; LA64-NEXT:    ori $a3, $zero, 2556340; LA64-NEXT:    sll.w $a3, $a3, $a26341; LA64-NEXT:    andi $a1, $a1, 2556342; LA64-NEXT:    sll.w $a1, $a1, $a26343; LA64-NEXT:  .LBB136_1: # =>This Inner Loop Header: Depth=16344; LA64-NEXT:    ll.w $a4, $a0, 06345; LA64-NEXT:    add.w $a5, $a4, $a16346; LA64-NEXT:    xor $a5, $a4, $a56347; LA64-NEXT:    and $a5, $a5, $a36348; LA64-NEXT:    xor $a5, $a4, $a56349; LA64-NEXT:    sc.w $a5, $a0, 06350; LA64-NEXT:    beq $a5, $zero, .LBB136_16351; LA64-NEXT:  # %bb.2:6352; LA64-NEXT:    srl.w $a0, $a4, $a26353; LA64-NEXT:    ret6354  %1 = atomicrmw add ptr %a, i8 %b monotonic6355  ret i8 %16356}6357 6358define i16 @atomicrmw_add_i16_monotonic(ptr %a, i16 %b) nounwind {6359; LA32R-LABEL: atomicrmw_add_i16_monotonic:6360; LA32R:       # %bb.0:6361; LA32R-NEXT:    addi.w $a2, $zero, -46362; LA32R-NEXT:    and $a2, $a0, $a26363; LA32R-NEXT:    slli.w $a0, $a0, 36364; LA32R-NEXT:    lu12i.w $a3, 156365; LA32R-NEXT:    ori $a3, $a3, 40956366; LA32R-NEXT:    sll.w $a4, $a3, $a06367; LA32R-NEXT:    and $a1, $a1, $a36368; LA32R-NEXT:    sll.w $a1, $a1, $a06369; LA32R-NEXT:  .LBB137_1: # =>This Inner Loop Header: Depth=16370; LA32R-NEXT:    ll.w $a3, $a2, 06371; LA32R-NEXT:    add.w $a5, $a3, $a16372; LA32R-NEXT:    xor $a5, $a3, $a56373; LA32R-NEXT:    and $a5, $a5, $a46374; LA32R-NEXT:    xor $a5, $a3, $a56375; LA32R-NEXT:    sc.w $a5, $a2, 06376; LA32R-NEXT:    beq $a5, $zero, .LBB137_16377; LA32R-NEXT:  # %bb.2:6378; LA32R-NEXT:    srl.w $a0, $a3, $a06379; LA32R-NEXT:    ret6380;6381; LA32S-LABEL: atomicrmw_add_i16_monotonic:6382; LA32S:       # %bb.0:6383; LA32S-NEXT:    slli.w $a2, $a0, 36384; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 06385; LA32S-NEXT:    lu12i.w $a3, 156386; LA32S-NEXT:    ori $a3, $a3, 40956387; LA32S-NEXT:    sll.w $a3, $a3, $a26388; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 06389; LA32S-NEXT:    sll.w $a1, $a1, $a26390; LA32S-NEXT:  .LBB137_1: # =>This Inner Loop Header: Depth=16391; LA32S-NEXT:    ll.w $a4, $a0, 06392; LA32S-NEXT:    add.w $a5, $a4, $a16393; LA32S-NEXT:    xor $a5, $a4, $a56394; LA32S-NEXT:    and $a5, $a5, $a36395; LA32S-NEXT:    xor $a5, $a4, $a56396; LA32S-NEXT:    sc.w $a5, $a0, 06397; LA32S-NEXT:    beq $a5, $zero, .LBB137_16398; LA32S-NEXT:  # %bb.2:6399; LA32S-NEXT:    srl.w $a0, $a4, $a26400; LA32S-NEXT:    ret6401;6402; LA64-LABEL: atomicrmw_add_i16_monotonic:6403; LA64:       # %bb.0:6404; LA64-NEXT:    slli.d $a2, $a0, 36405; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06406; LA64-NEXT:    lu12i.w $a3, 156407; LA64-NEXT:    ori $a3, $a3, 40956408; LA64-NEXT:    sll.w $a3, $a3, $a26409; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 06410; LA64-NEXT:    sll.w $a1, $a1, $a26411; LA64-NEXT:  .LBB137_1: # =>This Inner Loop Header: Depth=16412; LA64-NEXT:    ll.w $a4, $a0, 06413; LA64-NEXT:    add.w $a5, $a4, $a16414; LA64-NEXT:    xor $a5, $a4, $a56415; LA64-NEXT:    and $a5, $a5, $a36416; LA64-NEXT:    xor $a5, $a4, $a56417; LA64-NEXT:    sc.w $a5, $a0, 06418; LA64-NEXT:    beq $a5, $zero, .LBB137_16419; LA64-NEXT:  # %bb.2:6420; LA64-NEXT:    srl.w $a0, $a4, $a26421; LA64-NEXT:    ret6422  %1 = atomicrmw add ptr %a, i16 %b monotonic6423  ret i16 %16424}6425 6426define i32 @atomicrmw_add_i32_monotonic(ptr %a, i32 %b) nounwind {6427; LA32R-LABEL: atomicrmw_add_i32_monotonic:6428; LA32R:       # %bb.0:6429; LA32R-NEXT:  .LBB138_1: # =>This Inner Loop Header: Depth=16430; LA32R-NEXT:    ll.w $a2, $a0, 06431; LA32R-NEXT:    add.w $a3, $a2, $a16432; LA32R-NEXT:    sc.w $a3, $a0, 06433; LA32R-NEXT:    beq $a3, $zero, .LBB138_16434; LA32R-NEXT:  # %bb.2:6435; LA32R-NEXT:    move $a0, $a26436; LA32R-NEXT:    ret6437;6438; LA32S-LABEL: atomicrmw_add_i32_monotonic:6439; LA32S:       # %bb.0:6440; LA32S-NEXT:  .LBB138_1: # =>This Inner Loop Header: Depth=16441; LA32S-NEXT:    ll.w $a2, $a0, 06442; LA32S-NEXT:    add.w $a3, $a2, $a16443; LA32S-NEXT:    sc.w $a3, $a0, 06444; LA32S-NEXT:    beq $a3, $zero, .LBB138_16445; LA32S-NEXT:  # %bb.2:6446; LA32S-NEXT:    move $a0, $a26447; LA32S-NEXT:    ret6448;6449; LA64-LABEL: atomicrmw_add_i32_monotonic:6450; LA64:       # %bb.0:6451; LA64-NEXT:    amadd.w $a2, $a1, $a06452; LA64-NEXT:    move $a0, $a26453; LA64-NEXT:    ret6454  %1 = atomicrmw add ptr %a, i32 %b monotonic6455  ret i32 %16456}6457 6458define i64 @atomicrmw_add_i64_monotonic(ptr %a, i64 %b) nounwind {6459; LA32R-LABEL: atomicrmw_add_i64_monotonic:6460; LA32R:       # %bb.0:6461; LA32R-NEXT:    addi.w $sp, $sp, -166462; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill6463; LA32R-NEXT:    move $a3, $zero6464; LA32R-NEXT:    bl __atomic_fetch_add_86465; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload6466; LA32R-NEXT:    addi.w $sp, $sp, 166467; LA32R-NEXT:    ret6468;6469; LA32S-LABEL: atomicrmw_add_i64_monotonic:6470; LA32S:       # %bb.0:6471; LA32S-NEXT:    addi.w $sp, $sp, -166472; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill6473; LA32S-NEXT:    move $a3, $zero6474; LA32S-NEXT:    bl __atomic_fetch_add_86475; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload6476; LA32S-NEXT:    addi.w $sp, $sp, 166477; LA32S-NEXT:    ret6478;6479; LA64-LABEL: atomicrmw_add_i64_monotonic:6480; LA64:       # %bb.0:6481; LA64-NEXT:    amadd.d $a2, $a1, $a06482; LA64-NEXT:    move $a0, $a26483; LA64-NEXT:    ret6484  %1 = atomicrmw add ptr %a, i64 %b monotonic6485  ret i64 %16486}6487 6488define i8 @atomicrmw_sub_i8_monotonic(ptr %a, i8 %b) nounwind {6489; LA32R-LABEL: atomicrmw_sub_i8_monotonic:6490; LA32R:       # %bb.0:6491; LA32R-NEXT:    addi.w $a2, $zero, -46492; LA32R-NEXT:    and $a2, $a0, $a26493; LA32R-NEXT:    slli.w $a0, $a0, 36494; LA32R-NEXT:    ori $a3, $zero, 2556495; LA32R-NEXT:    sll.w $a3, $a3, $a06496; LA32R-NEXT:    andi $a1, $a1, 2556497; LA32R-NEXT:    sll.w $a1, $a1, $a06498; LA32R-NEXT:  .LBB140_1: # =>This Inner Loop Header: Depth=16499; LA32R-NEXT:    ll.w $a4, $a2, 06500; LA32R-NEXT:    sub.w $a5, $a4, $a16501; LA32R-NEXT:    xor $a5, $a4, $a56502; LA32R-NEXT:    and $a5, $a5, $a36503; LA32R-NEXT:    xor $a5, $a4, $a56504; LA32R-NEXT:    sc.w $a5, $a2, 06505; LA32R-NEXT:    beq $a5, $zero, .LBB140_16506; LA32R-NEXT:  # %bb.2:6507; LA32R-NEXT:    srl.w $a0, $a4, $a06508; LA32R-NEXT:    ret6509;6510; LA32S-LABEL: atomicrmw_sub_i8_monotonic:6511; LA32S:       # %bb.0:6512; LA32S-NEXT:    slli.w $a2, $a0, 36513; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 06514; LA32S-NEXT:    ori $a3, $zero, 2556515; LA32S-NEXT:    sll.w $a3, $a3, $a26516; LA32S-NEXT:    andi $a1, $a1, 2556517; LA32S-NEXT:    sll.w $a1, $a1, $a26518; LA32S-NEXT:  .LBB140_1: # =>This Inner Loop Header: Depth=16519; LA32S-NEXT:    ll.w $a4, $a0, 06520; LA32S-NEXT:    sub.w $a5, $a4, $a16521; LA32S-NEXT:    xor $a5, $a4, $a56522; LA32S-NEXT:    and $a5, $a5, $a36523; LA32S-NEXT:    xor $a5, $a4, $a56524; LA32S-NEXT:    sc.w $a5, $a0, 06525; LA32S-NEXT:    beq $a5, $zero, .LBB140_16526; LA32S-NEXT:  # %bb.2:6527; LA32S-NEXT:    srl.w $a0, $a4, $a26528; LA32S-NEXT:    ret6529;6530; LA64-LABEL: atomicrmw_sub_i8_monotonic:6531; LA64:       # %bb.0:6532; LA64-NEXT:    slli.d $a2, $a0, 36533; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06534; LA64-NEXT:    ori $a3, $zero, 2556535; LA64-NEXT:    sll.w $a3, $a3, $a26536; LA64-NEXT:    andi $a1, $a1, 2556537; LA64-NEXT:    sll.w $a1, $a1, $a26538; LA64-NEXT:  .LBB140_1: # =>This Inner Loop Header: Depth=16539; LA64-NEXT:    ll.w $a4, $a0, 06540; LA64-NEXT:    sub.w $a5, $a4, $a16541; LA64-NEXT:    xor $a5, $a4, $a56542; LA64-NEXT:    and $a5, $a5, $a36543; LA64-NEXT:    xor $a5, $a4, $a56544; LA64-NEXT:    sc.w $a5, $a0, 06545; LA64-NEXT:    beq $a5, $zero, .LBB140_16546; LA64-NEXT:  # %bb.2:6547; LA64-NEXT:    srl.w $a0, $a4, $a26548; LA64-NEXT:    ret6549  %1 = atomicrmw sub ptr %a, i8 %b monotonic6550  ret i8 %16551}6552 6553define i16 @atomicrmw_sub_i16_monotonic(ptr %a, i16 %b) nounwind {6554; LA32R-LABEL: atomicrmw_sub_i16_monotonic:6555; LA32R:       # %bb.0:6556; LA32R-NEXT:    addi.w $a2, $zero, -46557; LA32R-NEXT:    and $a2, $a0, $a26558; LA32R-NEXT:    slli.w $a0, $a0, 36559; LA32R-NEXT:    lu12i.w $a3, 156560; LA32R-NEXT:    ori $a3, $a3, 40956561; LA32R-NEXT:    sll.w $a4, $a3, $a06562; LA32R-NEXT:    and $a1, $a1, $a36563; LA32R-NEXT:    sll.w $a1, $a1, $a06564; LA32R-NEXT:  .LBB141_1: # =>This Inner Loop Header: Depth=16565; LA32R-NEXT:    ll.w $a3, $a2, 06566; LA32R-NEXT:    sub.w $a5, $a3, $a16567; LA32R-NEXT:    xor $a5, $a3, $a56568; LA32R-NEXT:    and $a5, $a5, $a46569; LA32R-NEXT:    xor $a5, $a3, $a56570; LA32R-NEXT:    sc.w $a5, $a2, 06571; LA32R-NEXT:    beq $a5, $zero, .LBB141_16572; LA32R-NEXT:  # %bb.2:6573; LA32R-NEXT:    srl.w $a0, $a3, $a06574; LA32R-NEXT:    ret6575;6576; LA32S-LABEL: atomicrmw_sub_i16_monotonic:6577; LA32S:       # %bb.0:6578; LA32S-NEXT:    slli.w $a2, $a0, 36579; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 06580; LA32S-NEXT:    lu12i.w $a3, 156581; LA32S-NEXT:    ori $a3, $a3, 40956582; LA32S-NEXT:    sll.w $a3, $a3, $a26583; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 06584; LA32S-NEXT:    sll.w $a1, $a1, $a26585; LA32S-NEXT:  .LBB141_1: # =>This Inner Loop Header: Depth=16586; LA32S-NEXT:    ll.w $a4, $a0, 06587; LA32S-NEXT:    sub.w $a5, $a4, $a16588; LA32S-NEXT:    xor $a5, $a4, $a56589; LA32S-NEXT:    and $a5, $a5, $a36590; LA32S-NEXT:    xor $a5, $a4, $a56591; LA32S-NEXT:    sc.w $a5, $a0, 06592; LA32S-NEXT:    beq $a5, $zero, .LBB141_16593; LA32S-NEXT:  # %bb.2:6594; LA32S-NEXT:    srl.w $a0, $a4, $a26595; LA32S-NEXT:    ret6596;6597; LA64-LABEL: atomicrmw_sub_i16_monotonic:6598; LA64:       # %bb.0:6599; LA64-NEXT:    slli.d $a2, $a0, 36600; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06601; LA64-NEXT:    lu12i.w $a3, 156602; LA64-NEXT:    ori $a3, $a3, 40956603; LA64-NEXT:    sll.w $a3, $a3, $a26604; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 06605; LA64-NEXT:    sll.w $a1, $a1, $a26606; LA64-NEXT:  .LBB141_1: # =>This Inner Loop Header: Depth=16607; LA64-NEXT:    ll.w $a4, $a0, 06608; LA64-NEXT:    sub.w $a5, $a4, $a16609; LA64-NEXT:    xor $a5, $a4, $a56610; LA64-NEXT:    and $a5, $a5, $a36611; LA64-NEXT:    xor $a5, $a4, $a56612; LA64-NEXT:    sc.w $a5, $a0, 06613; LA64-NEXT:    beq $a5, $zero, .LBB141_16614; LA64-NEXT:  # %bb.2:6615; LA64-NEXT:    srl.w $a0, $a4, $a26616; LA64-NEXT:    ret6617  %1 = atomicrmw sub ptr %a, i16 %b monotonic6618  ret i16 %16619}6620 6621define i32 @atomicrmw_sub_i32_monotonic(ptr %a, i32 %b) nounwind {6622; LA32R-LABEL: atomicrmw_sub_i32_monotonic:6623; LA32R:       # %bb.0:6624; LA32R-NEXT:  .LBB142_1: # =>This Inner Loop Header: Depth=16625; LA32R-NEXT:    ll.w $a2, $a0, 06626; LA32R-NEXT:    sub.w $a3, $a2, $a16627; LA32R-NEXT:    sc.w $a3, $a0, 06628; LA32R-NEXT:    beq $a3, $zero, .LBB142_16629; LA32R-NEXT:  # %bb.2:6630; LA32R-NEXT:    move $a0, $a26631; LA32R-NEXT:    ret6632;6633; LA32S-LABEL: atomicrmw_sub_i32_monotonic:6634; LA32S:       # %bb.0:6635; LA32S-NEXT:  .LBB142_1: # =>This Inner Loop Header: Depth=16636; LA32S-NEXT:    ll.w $a2, $a0, 06637; LA32S-NEXT:    sub.w $a3, $a2, $a16638; LA32S-NEXT:    sc.w $a3, $a0, 06639; LA32S-NEXT:    beq $a3, $zero, .LBB142_16640; LA32S-NEXT:  # %bb.2:6641; LA32S-NEXT:    move $a0, $a26642; LA32S-NEXT:    ret6643;6644; LA64-LABEL: atomicrmw_sub_i32_monotonic:6645; LA64:       # %bb.0:6646; LA64-NEXT:    sub.w $a2, $zero, $a16647; LA64-NEXT:    amadd.w $a1, $a2, $a06648; LA64-NEXT:    move $a0, $a16649; LA64-NEXT:    ret6650  %1 = atomicrmw sub ptr %a, i32 %b monotonic6651  ret i32 %16652}6653 6654define i64 @atomicrmw_sub_i64_monotonic(ptr %a, i64 %b) nounwind {6655; LA32R-LABEL: atomicrmw_sub_i64_monotonic:6656; LA32R:       # %bb.0:6657; LA32R-NEXT:    addi.w $sp, $sp, -166658; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill6659; LA32R-NEXT:    move $a3, $zero6660; LA32R-NEXT:    bl __atomic_fetch_sub_86661; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload6662; LA32R-NEXT:    addi.w $sp, $sp, 166663; LA32R-NEXT:    ret6664;6665; LA32S-LABEL: atomicrmw_sub_i64_monotonic:6666; LA32S:       # %bb.0:6667; LA32S-NEXT:    addi.w $sp, $sp, -166668; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill6669; LA32S-NEXT:    move $a3, $zero6670; LA32S-NEXT:    bl __atomic_fetch_sub_86671; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload6672; LA32S-NEXT:    addi.w $sp, $sp, 166673; LA32S-NEXT:    ret6674;6675; LA64-LABEL: atomicrmw_sub_i64_monotonic:6676; LA64:       # %bb.0:6677; LA64-NEXT:    sub.d $a2, $zero, $a16678; LA64-NEXT:    amadd.d $a1, $a2, $a06679; LA64-NEXT:    move $a0, $a16680; LA64-NEXT:    ret6681  %1 = atomicrmw sub ptr %a, i64 %b monotonic6682  ret i64 %16683}6684 6685define i8 @atomicrmw_nand_i8_monotonic(ptr %a, i8 %b) nounwind {6686; LA32R-LABEL: atomicrmw_nand_i8_monotonic:6687; LA32R:       # %bb.0:6688; LA32R-NEXT:    addi.w $a2, $zero, -46689; LA32R-NEXT:    and $a2, $a0, $a26690; LA32R-NEXT:    slli.w $a0, $a0, 36691; LA32R-NEXT:    ori $a3, $zero, 2556692; LA32R-NEXT:    sll.w $a3, $a3, $a06693; LA32R-NEXT:    andi $a1, $a1, 2556694; LA32R-NEXT:    sll.w $a1, $a1, $a06695; LA32R-NEXT:  .LBB144_1: # =>This Inner Loop Header: Depth=16696; LA32R-NEXT:    ll.w $a4, $a2, 06697; LA32R-NEXT:    and $a5, $a4, $a16698; LA32R-NEXT:    nor $a5, $a5, $zero6699; LA32R-NEXT:    xor $a5, $a4, $a56700; LA32R-NEXT:    and $a5, $a5, $a36701; LA32R-NEXT:    xor $a5, $a4, $a56702; LA32R-NEXT:    sc.w $a5, $a2, 06703; LA32R-NEXT:    beq $a5, $zero, .LBB144_16704; LA32R-NEXT:  # %bb.2:6705; LA32R-NEXT:    srl.w $a0, $a4, $a06706; LA32R-NEXT:    ret6707;6708; LA32S-LABEL: atomicrmw_nand_i8_monotonic:6709; LA32S:       # %bb.0:6710; LA32S-NEXT:    slli.w $a2, $a0, 36711; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 06712; LA32S-NEXT:    ori $a3, $zero, 2556713; LA32S-NEXT:    sll.w $a3, $a3, $a26714; LA32S-NEXT:    andi $a1, $a1, 2556715; LA32S-NEXT:    sll.w $a1, $a1, $a26716; LA32S-NEXT:  .LBB144_1: # =>This Inner Loop Header: Depth=16717; LA32S-NEXT:    ll.w $a4, $a0, 06718; LA32S-NEXT:    and $a5, $a4, $a16719; LA32S-NEXT:    nor $a5, $a5, $zero6720; LA32S-NEXT:    xor $a5, $a4, $a56721; LA32S-NEXT:    and $a5, $a5, $a36722; LA32S-NEXT:    xor $a5, $a4, $a56723; LA32S-NEXT:    sc.w $a5, $a0, 06724; LA32S-NEXT:    beq $a5, $zero, .LBB144_16725; LA32S-NEXT:  # %bb.2:6726; LA32S-NEXT:    srl.w $a0, $a4, $a26727; LA32S-NEXT:    ret6728;6729; LA64-LABEL: atomicrmw_nand_i8_monotonic:6730; LA64:       # %bb.0:6731; LA64-NEXT:    slli.d $a2, $a0, 36732; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06733; LA64-NEXT:    ori $a3, $zero, 2556734; LA64-NEXT:    sll.w $a3, $a3, $a26735; LA64-NEXT:    andi $a1, $a1, 2556736; LA64-NEXT:    sll.w $a1, $a1, $a26737; LA64-NEXT:  .LBB144_1: # =>This Inner Loop Header: Depth=16738; LA64-NEXT:    ll.w $a4, $a0, 06739; LA64-NEXT:    and $a5, $a4, $a16740; LA64-NEXT:    nor $a5, $a5, $zero6741; LA64-NEXT:    xor $a5, $a4, $a56742; LA64-NEXT:    and $a5, $a5, $a36743; LA64-NEXT:    xor $a5, $a4, $a56744; LA64-NEXT:    sc.w $a5, $a0, 06745; LA64-NEXT:    beq $a5, $zero, .LBB144_16746; LA64-NEXT:  # %bb.2:6747; LA64-NEXT:    srl.w $a0, $a4, $a26748; LA64-NEXT:    ret6749  %1 = atomicrmw nand ptr %a, i8 %b monotonic6750  ret i8 %16751}6752 6753define i16 @atomicrmw_nand_i16_monotonic(ptr %a, i16 %b) nounwind {6754; LA32R-LABEL: atomicrmw_nand_i16_monotonic:6755; LA32R:       # %bb.0:6756; LA32R-NEXT:    addi.w $a2, $zero, -46757; LA32R-NEXT:    and $a2, $a0, $a26758; LA32R-NEXT:    slli.w $a0, $a0, 36759; LA32R-NEXT:    lu12i.w $a3, 156760; LA32R-NEXT:    ori $a3, $a3, 40956761; LA32R-NEXT:    sll.w $a4, $a3, $a06762; LA32R-NEXT:    and $a1, $a1, $a36763; LA32R-NEXT:    sll.w $a1, $a1, $a06764; LA32R-NEXT:  .LBB145_1: # =>This Inner Loop Header: Depth=16765; LA32R-NEXT:    ll.w $a3, $a2, 06766; LA32R-NEXT:    and $a5, $a3, $a16767; LA32R-NEXT:    nor $a5, $a5, $zero6768; LA32R-NEXT:    xor $a5, $a3, $a56769; LA32R-NEXT:    and $a5, $a5, $a46770; LA32R-NEXT:    xor $a5, $a3, $a56771; LA32R-NEXT:    sc.w $a5, $a2, 06772; LA32R-NEXT:    beq $a5, $zero, .LBB145_16773; LA32R-NEXT:  # %bb.2:6774; LA32R-NEXT:    srl.w $a0, $a3, $a06775; LA32R-NEXT:    ret6776;6777; LA32S-LABEL: atomicrmw_nand_i16_monotonic:6778; LA32S:       # %bb.0:6779; LA32S-NEXT:    slli.w $a2, $a0, 36780; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 06781; LA32S-NEXT:    lu12i.w $a3, 156782; LA32S-NEXT:    ori $a3, $a3, 40956783; LA32S-NEXT:    sll.w $a3, $a3, $a26784; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 06785; LA32S-NEXT:    sll.w $a1, $a1, $a26786; LA32S-NEXT:  .LBB145_1: # =>This Inner Loop Header: Depth=16787; LA32S-NEXT:    ll.w $a4, $a0, 06788; LA32S-NEXT:    and $a5, $a4, $a16789; LA32S-NEXT:    nor $a5, $a5, $zero6790; LA32S-NEXT:    xor $a5, $a4, $a56791; LA32S-NEXT:    and $a5, $a5, $a36792; LA32S-NEXT:    xor $a5, $a4, $a56793; LA32S-NEXT:    sc.w $a5, $a0, 06794; LA32S-NEXT:    beq $a5, $zero, .LBB145_16795; LA32S-NEXT:  # %bb.2:6796; LA32S-NEXT:    srl.w $a0, $a4, $a26797; LA32S-NEXT:    ret6798;6799; LA64-LABEL: atomicrmw_nand_i16_monotonic:6800; LA64:       # %bb.0:6801; LA64-NEXT:    slli.d $a2, $a0, 36802; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06803; LA64-NEXT:    lu12i.w $a3, 156804; LA64-NEXT:    ori $a3, $a3, 40956805; LA64-NEXT:    sll.w $a3, $a3, $a26806; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 06807; LA64-NEXT:    sll.w $a1, $a1, $a26808; LA64-NEXT:  .LBB145_1: # =>This Inner Loop Header: Depth=16809; LA64-NEXT:    ll.w $a4, $a0, 06810; LA64-NEXT:    and $a5, $a4, $a16811; LA64-NEXT:    nor $a5, $a5, $zero6812; LA64-NEXT:    xor $a5, $a4, $a56813; LA64-NEXT:    and $a5, $a5, $a36814; LA64-NEXT:    xor $a5, $a4, $a56815; LA64-NEXT:    sc.w $a5, $a0, 06816; LA64-NEXT:    beq $a5, $zero, .LBB145_16817; LA64-NEXT:  # %bb.2:6818; LA64-NEXT:    srl.w $a0, $a4, $a26819; LA64-NEXT:    ret6820  %1 = atomicrmw nand ptr %a, i16 %b monotonic6821  ret i16 %16822}6823 6824define i32 @atomicrmw_nand_i32_monotonic(ptr %a, i32 %b) nounwind {6825; LA32R-LABEL: atomicrmw_nand_i32_monotonic:6826; LA32R:       # %bb.0:6827; LA32R-NEXT:  .LBB146_1: # =>This Inner Loop Header: Depth=16828; LA32R-NEXT:    ll.w $a2, $a0, 06829; LA32R-NEXT:    and $a3, $a2, $a16830; LA32R-NEXT:    nor $a3, $a3, $zero6831; LA32R-NEXT:    sc.w $a3, $a0, 06832; LA32R-NEXT:    beq $a3, $zero, .LBB146_16833; LA32R-NEXT:  # %bb.2:6834; LA32R-NEXT:    move $a0, $a26835; LA32R-NEXT:    ret6836;6837; LA32S-LABEL: atomicrmw_nand_i32_monotonic:6838; LA32S:       # %bb.0:6839; LA32S-NEXT:  .LBB146_1: # =>This Inner Loop Header: Depth=16840; LA32S-NEXT:    ll.w $a2, $a0, 06841; LA32S-NEXT:    and $a3, $a2, $a16842; LA32S-NEXT:    nor $a3, $a3, $zero6843; LA32S-NEXT:    sc.w $a3, $a0, 06844; LA32S-NEXT:    beq $a3, $zero, .LBB146_16845; LA32S-NEXT:  # %bb.2:6846; LA32S-NEXT:    move $a0, $a26847; LA32S-NEXT:    ret6848;6849; LA64-LABEL: atomicrmw_nand_i32_monotonic:6850; LA64:       # %bb.0:6851; LA64-NEXT:  .LBB146_1: # =>This Inner Loop Header: Depth=16852; LA64-NEXT:    ll.w $a2, $a0, 06853; LA64-NEXT:    and $a3, $a2, $a16854; LA64-NEXT:    nor $a3, $a3, $zero6855; LA64-NEXT:    sc.w $a3, $a0, 06856; LA64-NEXT:    beq $a3, $zero, .LBB146_16857; LA64-NEXT:  # %bb.2:6858; LA64-NEXT:    move $a0, $a26859; LA64-NEXT:    ret6860  %1 = atomicrmw nand ptr %a, i32 %b monotonic6861  ret i32 %16862}6863 6864define i64 @atomicrmw_nand_i64_monotonic(ptr %a, i64 %b) nounwind {6865; LA32R-LABEL: atomicrmw_nand_i64_monotonic:6866; LA32R:       # %bb.0:6867; LA32R-NEXT:    addi.w $sp, $sp, -166868; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill6869; LA32R-NEXT:    move $a3, $zero6870; LA32R-NEXT:    bl __atomic_fetch_nand_86871; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload6872; LA32R-NEXT:    addi.w $sp, $sp, 166873; LA32R-NEXT:    ret6874;6875; LA32S-LABEL: atomicrmw_nand_i64_monotonic:6876; LA32S:       # %bb.0:6877; LA32S-NEXT:    addi.w $sp, $sp, -166878; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill6879; LA32S-NEXT:    move $a3, $zero6880; LA32S-NEXT:    bl __atomic_fetch_nand_86881; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload6882; LA32S-NEXT:    addi.w $sp, $sp, 166883; LA32S-NEXT:    ret6884;6885; LA64-LABEL: atomicrmw_nand_i64_monotonic:6886; LA64:       # %bb.0:6887; LA64-NEXT:  .LBB147_1: # =>This Inner Loop Header: Depth=16888; LA64-NEXT:    ll.d $a2, $a0, 06889; LA64-NEXT:    and $a3, $a2, $a16890; LA64-NEXT:    nor $a3, $a3, $zero6891; LA64-NEXT:    sc.d $a3, $a0, 06892; LA64-NEXT:    beq $a3, $zero, .LBB147_16893; LA64-NEXT:  # %bb.2:6894; LA64-NEXT:    move $a0, $a26895; LA64-NEXT:    ret6896  %1 = atomicrmw nand ptr %a, i64 %b monotonic6897  ret i64 %16898}6899 6900define i8 @atomicrmw_and_i8_monotonic(ptr %a, i8 %b) nounwind {6901; LA32R-LABEL: atomicrmw_and_i8_monotonic:6902; LA32R:       # %bb.0:6903; LA32R-NEXT:    addi.w $a2, $zero, -46904; LA32R-NEXT:    and $a2, $a0, $a26905; LA32R-NEXT:    slli.w $a0, $a0, 36906; LA32R-NEXT:    ori $a3, $zero, 2556907; LA32R-NEXT:    sll.w $a3, $a3, $a06908; LA32R-NEXT:    andi $a1, $a1, 2556909; LA32R-NEXT:    sll.w $a1, $a1, $a06910; LA32R-NEXT:    orn $a1, $a1, $a36911; LA32R-NEXT:  .LBB148_1: # =>This Inner Loop Header: Depth=16912; LA32R-NEXT:    ll.w $a3, $a2, 06913; LA32R-NEXT:    and $a4, $a3, $a16914; LA32R-NEXT:    sc.w $a4, $a2, 06915; LA32R-NEXT:    beq $a4, $zero, .LBB148_16916; LA32R-NEXT:  # %bb.2:6917; LA32R-NEXT:    srl.w $a0, $a3, $a06918; LA32R-NEXT:    ret6919;6920; LA32S-LABEL: atomicrmw_and_i8_monotonic:6921; LA32S:       # %bb.0:6922; LA32S-NEXT:    slli.w $a2, $a0, 36923; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 06924; LA32S-NEXT:    ori $a3, $zero, 2556925; LA32S-NEXT:    sll.w $a3, $a3, $a26926; LA32S-NEXT:    andi $a1, $a1, 2556927; LA32S-NEXT:    sll.w $a1, $a1, $a26928; LA32S-NEXT:    orn $a1, $a1, $a36929; LA32S-NEXT:  .LBB148_1: # =>This Inner Loop Header: Depth=16930; LA32S-NEXT:    ll.w $a3, $a0, 06931; LA32S-NEXT:    and $a4, $a3, $a16932; LA32S-NEXT:    sc.w $a4, $a0, 06933; LA32S-NEXT:    beq $a4, $zero, .LBB148_16934; LA32S-NEXT:  # %bb.2:6935; LA32S-NEXT:    srl.w $a0, $a3, $a26936; LA32S-NEXT:    ret6937;6938; LA64-LABEL: atomicrmw_and_i8_monotonic:6939; LA64:       # %bb.0:6940; LA64-NEXT:    slli.d $a2, $a0, 36941; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06942; LA64-NEXT:    ori $a3, $zero, 2556943; LA64-NEXT:    sll.w $a3, $a3, $a26944; LA64-NEXT:    andi $a1, $a1, 2556945; LA64-NEXT:    sll.w $a1, $a1, $a26946; LA64-NEXT:    orn $a1, $a1, $a36947; LA64-NEXT:    amand.w $a3, $a1, $a06948; LA64-NEXT:    srl.w $a0, $a3, $a26949; LA64-NEXT:    ret6950  %1 = atomicrmw and ptr %a, i8 %b monotonic6951  ret i8 %16952}6953 6954define i16 @atomicrmw_and_i16_monotonic(ptr %a, i16 %b) nounwind {6955; LA32R-LABEL: atomicrmw_and_i16_monotonic:6956; LA32R:       # %bb.0:6957; LA32R-NEXT:    addi.w $a2, $zero, -46958; LA32R-NEXT:    and $a2, $a0, $a26959; LA32R-NEXT:    slli.w $a0, $a0, 36960; LA32R-NEXT:    lu12i.w $a3, 156961; LA32R-NEXT:    ori $a3, $a3, 40956962; LA32R-NEXT:    sll.w $a4, $a3, $a06963; LA32R-NEXT:    and $a1, $a1, $a36964; LA32R-NEXT:    sll.w $a1, $a1, $a06965; LA32R-NEXT:    orn $a1, $a1, $a46966; LA32R-NEXT:  .LBB149_1: # =>This Inner Loop Header: Depth=16967; LA32R-NEXT:    ll.w $a3, $a2, 06968; LA32R-NEXT:    and $a4, $a3, $a16969; LA32R-NEXT:    sc.w $a4, $a2, 06970; LA32R-NEXT:    beq $a4, $zero, .LBB149_16971; LA32R-NEXT:  # %bb.2:6972; LA32R-NEXT:    srl.w $a0, $a3, $a06973; LA32R-NEXT:    ret6974;6975; LA32S-LABEL: atomicrmw_and_i16_monotonic:6976; LA32S:       # %bb.0:6977; LA32S-NEXT:    slli.w $a2, $a0, 36978; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 06979; LA32S-NEXT:    lu12i.w $a3, 156980; LA32S-NEXT:    ori $a3, $a3, 40956981; LA32S-NEXT:    sll.w $a3, $a3, $a26982; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 06983; LA32S-NEXT:    sll.w $a1, $a1, $a26984; LA32S-NEXT:    orn $a1, $a1, $a36985; LA32S-NEXT:  .LBB149_1: # =>This Inner Loop Header: Depth=16986; LA32S-NEXT:    ll.w $a3, $a0, 06987; LA32S-NEXT:    and $a4, $a3, $a16988; LA32S-NEXT:    sc.w $a4, $a0, 06989; LA32S-NEXT:    beq $a4, $zero, .LBB149_16990; LA32S-NEXT:  # %bb.2:6991; LA32S-NEXT:    srl.w $a0, $a3, $a26992; LA32S-NEXT:    ret6993;6994; LA64-LABEL: atomicrmw_and_i16_monotonic:6995; LA64:       # %bb.0:6996; LA64-NEXT:    slli.d $a2, $a0, 36997; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06998; LA64-NEXT:    lu12i.w $a3, 156999; LA64-NEXT:    ori $a3, $a3, 40957000; LA64-NEXT:    sll.w $a3, $a3, $a27001; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 07002; LA64-NEXT:    sll.w $a1, $a1, $a27003; LA64-NEXT:    orn $a1, $a1, $a37004; LA64-NEXT:    amand.w $a3, $a1, $a07005; LA64-NEXT:    srl.w $a0, $a3, $a27006; LA64-NEXT:    ret7007  %1 = atomicrmw and ptr %a, i16 %b monotonic7008  ret i16 %17009}7010 7011define i32 @atomicrmw_and_i32_monotonic(ptr %a, i32 %b) nounwind {7012; LA32R-LABEL: atomicrmw_and_i32_monotonic:7013; LA32R:       # %bb.0:7014; LA32R-NEXT:  .LBB150_1: # =>This Inner Loop Header: Depth=17015; LA32R-NEXT:    ll.w $a2, $a0, 07016; LA32R-NEXT:    and $a3, $a2, $a17017; LA32R-NEXT:    sc.w $a3, $a0, 07018; LA32R-NEXT:    beq $a3, $zero, .LBB150_17019; LA32R-NEXT:  # %bb.2:7020; LA32R-NEXT:    move $a0, $a27021; LA32R-NEXT:    ret7022;7023; LA32S-LABEL: atomicrmw_and_i32_monotonic:7024; LA32S:       # %bb.0:7025; LA32S-NEXT:  .LBB150_1: # =>This Inner Loop Header: Depth=17026; LA32S-NEXT:    ll.w $a2, $a0, 07027; LA32S-NEXT:    and $a3, $a2, $a17028; LA32S-NEXT:    sc.w $a3, $a0, 07029; LA32S-NEXT:    beq $a3, $zero, .LBB150_17030; LA32S-NEXT:  # %bb.2:7031; LA32S-NEXT:    move $a0, $a27032; LA32S-NEXT:    ret7033;7034; LA64-LABEL: atomicrmw_and_i32_monotonic:7035; LA64:       # %bb.0:7036; LA64-NEXT:    amand.w $a2, $a1, $a07037; LA64-NEXT:    move $a0, $a27038; LA64-NEXT:    ret7039  %1 = atomicrmw and ptr %a, i32 %b monotonic7040  ret i32 %17041}7042 7043define i64 @atomicrmw_and_i64_monotonic(ptr %a, i64 %b) nounwind {7044; LA32R-LABEL: atomicrmw_and_i64_monotonic:7045; LA32R:       # %bb.0:7046; LA32R-NEXT:    addi.w $sp, $sp, -167047; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill7048; LA32R-NEXT:    move $a3, $zero7049; LA32R-NEXT:    bl __atomic_fetch_and_87050; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload7051; LA32R-NEXT:    addi.w $sp, $sp, 167052; LA32R-NEXT:    ret7053;7054; LA32S-LABEL: atomicrmw_and_i64_monotonic:7055; LA32S:       # %bb.0:7056; LA32S-NEXT:    addi.w $sp, $sp, -167057; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill7058; LA32S-NEXT:    move $a3, $zero7059; LA32S-NEXT:    bl __atomic_fetch_and_87060; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload7061; LA32S-NEXT:    addi.w $sp, $sp, 167062; LA32S-NEXT:    ret7063;7064; LA64-LABEL: atomicrmw_and_i64_monotonic:7065; LA64:       # %bb.0:7066; LA64-NEXT:    amand.d $a2, $a1, $a07067; LA64-NEXT:    move $a0, $a27068; LA64-NEXT:    ret7069  %1 = atomicrmw and ptr %a, i64 %b monotonic7070  ret i64 %17071}7072 7073define i8 @atomicrmw_or_i8_monotonic(ptr %a, i8 %b) nounwind {7074; LA32R-LABEL: atomicrmw_or_i8_monotonic:7075; LA32R:       # %bb.0:7076; LA32R-NEXT:    addi.w $a2, $zero, -47077; LA32R-NEXT:    and $a2, $a0, $a27078; LA32R-NEXT:    slli.w $a0, $a0, 37079; LA32R-NEXT:    andi $a1, $a1, 2557080; LA32R-NEXT:    sll.w $a1, $a1, $a07081; LA32R-NEXT:  .LBB152_1: # =>This Inner Loop Header: Depth=17082; LA32R-NEXT:    ll.w $a3, $a2, 07083; LA32R-NEXT:    or $a4, $a3, $a17084; LA32R-NEXT:    sc.w $a4, $a2, 07085; LA32R-NEXT:    beq $a4, $zero, .LBB152_17086; LA32R-NEXT:  # %bb.2:7087; LA32R-NEXT:    srl.w $a0, $a3, $a07088; LA32R-NEXT:    ret7089;7090; LA32S-LABEL: atomicrmw_or_i8_monotonic:7091; LA32S:       # %bb.0:7092; LA32S-NEXT:    slli.w $a2, $a0, 37093; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 07094; LA32S-NEXT:    andi $a1, $a1, 2557095; LA32S-NEXT:    sll.w $a1, $a1, $a27096; LA32S-NEXT:  .LBB152_1: # =>This Inner Loop Header: Depth=17097; LA32S-NEXT:    ll.w $a3, $a0, 07098; LA32S-NEXT:    or $a4, $a3, $a17099; LA32S-NEXT:    sc.w $a4, $a0, 07100; LA32S-NEXT:    beq $a4, $zero, .LBB152_17101; LA32S-NEXT:  # %bb.2:7102; LA32S-NEXT:    srl.w $a0, $a3, $a27103; LA32S-NEXT:    ret7104;7105; LA64-LABEL: atomicrmw_or_i8_monotonic:7106; LA64:       # %bb.0:7107; LA64-NEXT:    slli.d $a2, $a0, 37108; LA64-NEXT:    bstrins.d $a0, $zero, 1, 07109; LA64-NEXT:    andi $a1, $a1, 2557110; LA64-NEXT:    sll.w $a1, $a1, $a27111; LA64-NEXT:    amor.w $a3, $a1, $a07112; LA64-NEXT:    srl.w $a0, $a3, $a27113; LA64-NEXT:    ret7114  %1 = atomicrmw or ptr %a, i8 %b monotonic7115  ret i8 %17116}7117 7118define i16 @atomicrmw_or_i16_monotonic(ptr %a, i16 %b) nounwind {7119; LA32R-LABEL: atomicrmw_or_i16_monotonic:7120; LA32R:       # %bb.0:7121; LA32R-NEXT:    addi.w $a2, $zero, -47122; LA32R-NEXT:    and $a2, $a0, $a27123; LA32R-NEXT:    slli.w $a0, $a0, 37124; LA32R-NEXT:    lu12i.w $a3, 157125; LA32R-NEXT:    ori $a3, $a3, 40957126; LA32R-NEXT:    and $a1, $a1, $a37127; LA32R-NEXT:    sll.w $a1, $a1, $a07128; LA32R-NEXT:  .LBB153_1: # =>This Inner Loop Header: Depth=17129; LA32R-NEXT:    ll.w $a3, $a2, 07130; LA32R-NEXT:    or $a4, $a3, $a17131; LA32R-NEXT:    sc.w $a4, $a2, 07132; LA32R-NEXT:    beq $a4, $zero, .LBB153_17133; LA32R-NEXT:  # %bb.2:7134; LA32R-NEXT:    srl.w $a0, $a3, $a07135; LA32R-NEXT:    ret7136;7137; LA32S-LABEL: atomicrmw_or_i16_monotonic:7138; LA32S:       # %bb.0:7139; LA32S-NEXT:    slli.w $a2, $a0, 37140; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 07141; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 07142; LA32S-NEXT:    sll.w $a1, $a1, $a27143; LA32S-NEXT:  .LBB153_1: # =>This Inner Loop Header: Depth=17144; LA32S-NEXT:    ll.w $a3, $a0, 07145; LA32S-NEXT:    or $a4, $a3, $a17146; LA32S-NEXT:    sc.w $a4, $a0, 07147; LA32S-NEXT:    beq $a4, $zero, .LBB153_17148; LA32S-NEXT:  # %bb.2:7149; LA32S-NEXT:    srl.w $a0, $a3, $a27150; LA32S-NEXT:    ret7151;7152; LA64-LABEL: atomicrmw_or_i16_monotonic:7153; LA64:       # %bb.0:7154; LA64-NEXT:    slli.d $a2, $a0, 37155; LA64-NEXT:    bstrins.d $a0, $zero, 1, 07156; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 07157; LA64-NEXT:    sll.w $a1, $a1, $a27158; LA64-NEXT:    amor.w $a3, $a1, $a07159; LA64-NEXT:    srl.w $a0, $a3, $a27160; LA64-NEXT:    ret7161  %1 = atomicrmw or ptr %a, i16 %b monotonic7162  ret i16 %17163}7164 7165define i32 @atomicrmw_or_i32_monotonic(ptr %a, i32 %b) nounwind {7166; LA32R-LABEL: atomicrmw_or_i32_monotonic:7167; LA32R:       # %bb.0:7168; LA32R-NEXT:  .LBB154_1: # =>This Inner Loop Header: Depth=17169; LA32R-NEXT:    ll.w $a2, $a0, 07170; LA32R-NEXT:    or $a3, $a2, $a17171; LA32R-NEXT:    sc.w $a3, $a0, 07172; LA32R-NEXT:    beq $a3, $zero, .LBB154_17173; LA32R-NEXT:  # %bb.2:7174; LA32R-NEXT:    move $a0, $a27175; LA32R-NEXT:    ret7176;7177; LA32S-LABEL: atomicrmw_or_i32_monotonic:7178; LA32S:       # %bb.0:7179; LA32S-NEXT:  .LBB154_1: # =>This Inner Loop Header: Depth=17180; LA32S-NEXT:    ll.w $a2, $a0, 07181; LA32S-NEXT:    or $a3, $a2, $a17182; LA32S-NEXT:    sc.w $a3, $a0, 07183; LA32S-NEXT:    beq $a3, $zero, .LBB154_17184; LA32S-NEXT:  # %bb.2:7185; LA32S-NEXT:    move $a0, $a27186; LA32S-NEXT:    ret7187;7188; LA64-LABEL: atomicrmw_or_i32_monotonic:7189; LA64:       # %bb.0:7190; LA64-NEXT:    amor.w $a2, $a1, $a07191; LA64-NEXT:    move $a0, $a27192; LA64-NEXT:    ret7193  %1 = atomicrmw or ptr %a, i32 %b monotonic7194  ret i32 %17195}7196 7197define i64 @atomicrmw_or_i64_monotonic(ptr %a, i64 %b) nounwind {7198; LA32R-LABEL: atomicrmw_or_i64_monotonic:7199; LA32R:       # %bb.0:7200; LA32R-NEXT:    addi.w $sp, $sp, -167201; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill7202; LA32R-NEXT:    move $a3, $zero7203; LA32R-NEXT:    bl __atomic_fetch_or_87204; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload7205; LA32R-NEXT:    addi.w $sp, $sp, 167206; LA32R-NEXT:    ret7207;7208; LA32S-LABEL: atomicrmw_or_i64_monotonic:7209; LA32S:       # %bb.0:7210; LA32S-NEXT:    addi.w $sp, $sp, -167211; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill7212; LA32S-NEXT:    move $a3, $zero7213; LA32S-NEXT:    bl __atomic_fetch_or_87214; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload7215; LA32S-NEXT:    addi.w $sp, $sp, 167216; LA32S-NEXT:    ret7217;7218; LA64-LABEL: atomicrmw_or_i64_monotonic:7219; LA64:       # %bb.0:7220; LA64-NEXT:    amor.d $a2, $a1, $a07221; LA64-NEXT:    move $a0, $a27222; LA64-NEXT:    ret7223  %1 = atomicrmw or ptr %a, i64 %b monotonic7224  ret i64 %17225}7226 7227define i8 @atomicrmw_xor_i8_monotonic(ptr %a, i8 %b) nounwind {7228; LA32R-LABEL: atomicrmw_xor_i8_monotonic:7229; LA32R:       # %bb.0:7230; LA32R-NEXT:    addi.w $a2, $zero, -47231; LA32R-NEXT:    and $a2, $a0, $a27232; LA32R-NEXT:    slli.w $a0, $a0, 37233; LA32R-NEXT:    andi $a1, $a1, 2557234; LA32R-NEXT:    sll.w $a1, $a1, $a07235; LA32R-NEXT:  .LBB156_1: # =>This Inner Loop Header: Depth=17236; LA32R-NEXT:    ll.w $a3, $a2, 07237; LA32R-NEXT:    xor $a4, $a3, $a17238; LA32R-NEXT:    sc.w $a4, $a2, 07239; LA32R-NEXT:    beq $a4, $zero, .LBB156_17240; LA32R-NEXT:  # %bb.2:7241; LA32R-NEXT:    srl.w $a0, $a3, $a07242; LA32R-NEXT:    ret7243;7244; LA32S-LABEL: atomicrmw_xor_i8_monotonic:7245; LA32S:       # %bb.0:7246; LA32S-NEXT:    slli.w $a2, $a0, 37247; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 07248; LA32S-NEXT:    andi $a1, $a1, 2557249; LA32S-NEXT:    sll.w $a1, $a1, $a27250; LA32S-NEXT:  .LBB156_1: # =>This Inner Loop Header: Depth=17251; LA32S-NEXT:    ll.w $a3, $a0, 07252; LA32S-NEXT:    xor $a4, $a3, $a17253; LA32S-NEXT:    sc.w $a4, $a0, 07254; LA32S-NEXT:    beq $a4, $zero, .LBB156_17255; LA32S-NEXT:  # %bb.2:7256; LA32S-NEXT:    srl.w $a0, $a3, $a27257; LA32S-NEXT:    ret7258;7259; LA64-LABEL: atomicrmw_xor_i8_monotonic:7260; LA64:       # %bb.0:7261; LA64-NEXT:    slli.d $a2, $a0, 37262; LA64-NEXT:    bstrins.d $a0, $zero, 1, 07263; LA64-NEXT:    andi $a1, $a1, 2557264; LA64-NEXT:    sll.w $a1, $a1, $a27265; LA64-NEXT:    amxor.w $a3, $a1, $a07266; LA64-NEXT:    srl.w $a0, $a3, $a27267; LA64-NEXT:    ret7268  %1 = atomicrmw xor ptr %a, i8 %b monotonic7269  ret i8 %17270}7271 7272define i16 @atomicrmw_xor_i16_monotonic(ptr %a, i16 %b) nounwind {7273; LA32R-LABEL: atomicrmw_xor_i16_monotonic:7274; LA32R:       # %bb.0:7275; LA32R-NEXT:    addi.w $a2, $zero, -47276; LA32R-NEXT:    and $a2, $a0, $a27277; LA32R-NEXT:    slli.w $a0, $a0, 37278; LA32R-NEXT:    lu12i.w $a3, 157279; LA32R-NEXT:    ori $a3, $a3, 40957280; LA32R-NEXT:    and $a1, $a1, $a37281; LA32R-NEXT:    sll.w $a1, $a1, $a07282; LA32R-NEXT:  .LBB157_1: # =>This Inner Loop Header: Depth=17283; LA32R-NEXT:    ll.w $a3, $a2, 07284; LA32R-NEXT:    xor $a4, $a3, $a17285; LA32R-NEXT:    sc.w $a4, $a2, 07286; LA32R-NEXT:    beq $a4, $zero, .LBB157_17287; LA32R-NEXT:  # %bb.2:7288; LA32R-NEXT:    srl.w $a0, $a3, $a07289; LA32R-NEXT:    ret7290;7291; LA32S-LABEL: atomicrmw_xor_i16_monotonic:7292; LA32S:       # %bb.0:7293; LA32S-NEXT:    slli.w $a2, $a0, 37294; LA32S-NEXT:    bstrins.w $a0, $zero, 1, 07295; LA32S-NEXT:    bstrpick.w $a1, $a1, 15, 07296; LA32S-NEXT:    sll.w $a1, $a1, $a27297; LA32S-NEXT:  .LBB157_1: # =>This Inner Loop Header: Depth=17298; LA32S-NEXT:    ll.w $a3, $a0, 07299; LA32S-NEXT:    xor $a4, $a3, $a17300; LA32S-NEXT:    sc.w $a4, $a0, 07301; LA32S-NEXT:    beq $a4, $zero, .LBB157_17302; LA32S-NEXT:  # %bb.2:7303; LA32S-NEXT:    srl.w $a0, $a3, $a27304; LA32S-NEXT:    ret7305;7306; LA64-LABEL: atomicrmw_xor_i16_monotonic:7307; LA64:       # %bb.0:7308; LA64-NEXT:    slli.d $a2, $a0, 37309; LA64-NEXT:    bstrins.d $a0, $zero, 1, 07310; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 07311; LA64-NEXT:    sll.w $a1, $a1, $a27312; LA64-NEXT:    amxor.w $a3, $a1, $a07313; LA64-NEXT:    srl.w $a0, $a3, $a27314; LA64-NEXT:    ret7315  %1 = atomicrmw xor ptr %a, i16 %b monotonic7316  ret i16 %17317}7318 7319define i32 @atomicrmw_xor_i32_monotonic(ptr %a, i32 %b) nounwind {7320; LA32R-LABEL: atomicrmw_xor_i32_monotonic:7321; LA32R:       # %bb.0:7322; LA32R-NEXT:  .LBB158_1: # =>This Inner Loop Header: Depth=17323; LA32R-NEXT:    ll.w $a2, $a0, 07324; LA32R-NEXT:    xor $a3, $a2, $a17325; LA32R-NEXT:    sc.w $a3, $a0, 07326; LA32R-NEXT:    beq $a3, $zero, .LBB158_17327; LA32R-NEXT:  # %bb.2:7328; LA32R-NEXT:    move $a0, $a27329; LA32R-NEXT:    ret7330;7331; LA32S-LABEL: atomicrmw_xor_i32_monotonic:7332; LA32S:       # %bb.0:7333; LA32S-NEXT:  .LBB158_1: # =>This Inner Loop Header: Depth=17334; LA32S-NEXT:    ll.w $a2, $a0, 07335; LA32S-NEXT:    xor $a3, $a2, $a17336; LA32S-NEXT:    sc.w $a3, $a0, 07337; LA32S-NEXT:    beq $a3, $zero, .LBB158_17338; LA32S-NEXT:  # %bb.2:7339; LA32S-NEXT:    move $a0, $a27340; LA32S-NEXT:    ret7341;7342; LA64-LABEL: atomicrmw_xor_i32_monotonic:7343; LA64:       # %bb.0:7344; LA64-NEXT:    amxor.w $a2, $a1, $a07345; LA64-NEXT:    move $a0, $a27346; LA64-NEXT:    ret7347  %1 = atomicrmw xor ptr %a, i32 %b monotonic7348  ret i32 %17349}7350 7351define i64 @atomicrmw_xor_i64_monotonic(ptr %a, i64 %b) nounwind {7352; LA32R-LABEL: atomicrmw_xor_i64_monotonic:7353; LA32R:       # %bb.0:7354; LA32R-NEXT:    addi.w $sp, $sp, -167355; LA32R-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill7356; LA32R-NEXT:    move $a3, $zero7357; LA32R-NEXT:    bl __atomic_fetch_xor_87358; LA32R-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload7359; LA32R-NEXT:    addi.w $sp, $sp, 167360; LA32R-NEXT:    ret7361;7362; LA32S-LABEL: atomicrmw_xor_i64_monotonic:7363; LA32S:       # %bb.0:7364; LA32S-NEXT:    addi.w $sp, $sp, -167365; LA32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill7366; LA32S-NEXT:    move $a3, $zero7367; LA32S-NEXT:    bl __atomic_fetch_xor_87368; LA32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload7369; LA32S-NEXT:    addi.w $sp, $sp, 167370; LA32S-NEXT:    ret7371;7372; LA64-LABEL: atomicrmw_xor_i64_monotonic:7373; LA64:       # %bb.0:7374; LA64-NEXT:    amxor.d $a2, $a1, $a07375; LA64-NEXT:    move $a0, $a27376; LA64-NEXT:    ret7377  %1 = atomicrmw xor ptr %a, i64 %b monotonic7378  ret i64 %17379}7380