brintos

brintos / llvm-project-archived public Read only

0
0
Text · 259.0 KiB · 1903fed Raw
6976 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch64 -mattr=+d,-lamcas < %s | FileCheck %s --check-prefix=LA643; RUN: llc --mtriple=loongarch64 -mattr=+d,+lamcas < %s | FileCheck %s --check-prefix=LA64-LAMCAS4; RUN: llc --mtriple=loongarch64 -mattr=+d,+lamcas,+lam-bh < %s | FileCheck %s --check-prefix=LA64-LAMCAS-LAM-BH5 6; i8/i16 atomicrmw and/or/xor shouldn't use amcas[_db].b/h to expand7; lam-bh precedes lamcas8 9define i8 @atomicrmw_xchg_i8_acquire(ptr %a, i8 %b) nounwind {10; LA64-LABEL: atomicrmw_xchg_i8_acquire:11; LA64:       # %bb.0:12; LA64-NEXT:    slli.d $a2, $a0, 313; LA64-NEXT:    bstrins.d $a0, $zero, 1, 014; LA64-NEXT:    ori $a3, $zero, 25515; LA64-NEXT:    sll.w $a3, $a3, $a216; LA64-NEXT:    andi $a1, $a1, 25517; LA64-NEXT:    sll.w $a1, $a1, $a218; LA64-NEXT:  .LBB0_1: # =>This Inner Loop Header: Depth=119; LA64-NEXT:    ll.w $a4, $a0, 020; LA64-NEXT:    addi.w $a5, $a1, 021; LA64-NEXT:    xor $a5, $a4, $a522; LA64-NEXT:    and $a5, $a5, $a323; LA64-NEXT:    xor $a5, $a4, $a524; LA64-NEXT:    sc.w $a5, $a0, 025; LA64-NEXT:    beq $a5, $zero, .LBB0_126; LA64-NEXT:  # %bb.2:27; LA64-NEXT:    srl.w $a0, $a4, $a228; LA64-NEXT:    ret29;30; LA64-LAMCAS-LABEL: atomicrmw_xchg_i8_acquire:31; LA64-LAMCAS:       # %bb.0:32; LA64-LAMCAS-NEXT:    ld.bu $a2, $a0, 033; LA64-LAMCAS-NEXT:    .p2align 4, , 1634; LA64-LAMCAS-NEXT:  .LBB0_1: # %atomicrmw.start35; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=136; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a237; LA64-LAMCAS-NEXT:    amcas_db.b $a2, $a1, $a038; LA64-LAMCAS-NEXT:    bne $a2, $a3, .LBB0_139; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end40; LA64-LAMCAS-NEXT:    move $a0, $a241; LA64-LAMCAS-NEXT:    ret42;43; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_i8_acquire:44; LA64-LAMCAS-LAM-BH:       # %bb.0:45; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.b $a2, $a1, $a046; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a247; LA64-LAMCAS-LAM-BH-NEXT:    ret48  %1 = atomicrmw xchg ptr %a, i8 %b acquire49  ret i8 %150}51 52define i8 @atomicrmw_xchg_0_i8_acquire(ptr %a) nounwind {53; LA64-LABEL: atomicrmw_xchg_0_i8_acquire:54; LA64:       # %bb.0:55; LA64-NEXT:    slli.d $a1, $a0, 356; LA64-NEXT:    bstrins.d $a0, $zero, 1, 057; LA64-NEXT:    ori $a2, $zero, 25558; LA64-NEXT:    sll.w $a2, $a2, $a159; LA64-NEXT:    nor $a2, $a2, $zero60; LA64-NEXT:    amand_db.w $a3, $a2, $a061; LA64-NEXT:    srl.w $a0, $a3, $a162; LA64-NEXT:    ret63;64; LA64-LAMCAS-LABEL: atomicrmw_xchg_0_i8_acquire:65; LA64-LAMCAS:       # %bb.0:66; LA64-LAMCAS-NEXT:    move $a1, $a067; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 068; LA64-LAMCAS-NEXT:    .p2align 4, , 1669; LA64-LAMCAS-NEXT:  .LBB1_1: # %atomicrmw.start70; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=171; LA64-LAMCAS-NEXT:    ext.w.b $a2, $a072; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $zero, $a173; LA64-LAMCAS-NEXT:    bne $a0, $a2, .LBB1_174; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end75; LA64-LAMCAS-NEXT:    ret76;77; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_0_i8_acquire:78; LA64-LAMCAS-LAM-BH:       # %bb.0:79; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.b $a1, $zero, $a080; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a181; LA64-LAMCAS-LAM-BH-NEXT:    ret82  %1 = atomicrmw xchg ptr %a, i8 0 acquire83  ret i8 %184}85 86define i8 @atomicrmw_xchg_minus_1_i8_acquire(ptr %a) nounwind {87; LA64-LABEL: atomicrmw_xchg_minus_1_i8_acquire:88; LA64:       # %bb.0:89; LA64-NEXT:    slli.d $a1, $a0, 390; LA64-NEXT:    bstrins.d $a0, $zero, 1, 091; LA64-NEXT:    ori $a2, $zero, 25592; LA64-NEXT:    sll.w $a2, $a2, $a193; LA64-NEXT:    amor_db.w $a3, $a2, $a094; LA64-NEXT:    srl.w $a0, $a3, $a195; LA64-NEXT:    ret96;97; LA64-LAMCAS-LABEL: atomicrmw_xchg_minus_1_i8_acquire:98; LA64-LAMCAS:       # %bb.0:99; LA64-LAMCAS-NEXT:    move $a1, $a0100; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 0101; LA64-LAMCAS-NEXT:    addi.w $a2, $zero, -1102; LA64-LAMCAS-NEXT:    .p2align 4, , 16103; LA64-LAMCAS-NEXT:  .LBB2_1: # %atomicrmw.start104; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1105; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a0106; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a2, $a1107; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB2_1108; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end109; LA64-LAMCAS-NEXT:    ret110;111; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_minus_1_i8_acquire:112; LA64-LAMCAS-LAM-BH:       # %bb.0:113; LA64-LAMCAS-LAM-BH-NEXT:    addi.w $a2, $zero, -1114; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.b $a1, $a2, $a0115; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a1116; LA64-LAMCAS-LAM-BH-NEXT:    ret117  %1 = atomicrmw xchg ptr %a, i8 -1 acquire118  ret i8 %1119}120 121define i16 @atomicrmw_xchg_i16_acquire(ptr %a, i16 %b) nounwind {122; LA64-LABEL: atomicrmw_xchg_i16_acquire:123; LA64:       # %bb.0:124; LA64-NEXT:    slli.d $a2, $a0, 3125; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0126; LA64-NEXT:    lu12i.w $a3, 15127; LA64-NEXT:    ori $a3, $a3, 4095128; LA64-NEXT:    sll.w $a3, $a3, $a2129; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 0130; LA64-NEXT:    sll.w $a1, $a1, $a2131; LA64-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1132; LA64-NEXT:    ll.w $a4, $a0, 0133; LA64-NEXT:    addi.w $a5, $a1, 0134; LA64-NEXT:    xor $a5, $a4, $a5135; LA64-NEXT:    and $a5, $a5, $a3136; LA64-NEXT:    xor $a5, $a4, $a5137; LA64-NEXT:    sc.w $a5, $a0, 0138; LA64-NEXT:    beq $a5, $zero, .LBB3_1139; LA64-NEXT:  # %bb.2:140; LA64-NEXT:    srl.w $a0, $a4, $a2141; LA64-NEXT:    ret142;143; LA64-LAMCAS-LABEL: atomicrmw_xchg_i16_acquire:144; LA64-LAMCAS:       # %bb.0:145; LA64-LAMCAS-NEXT:    ld.hu $a2, $a0, 0146; LA64-LAMCAS-NEXT:    .p2align 4, , 16147; LA64-LAMCAS-NEXT:  .LBB3_1: # %atomicrmw.start148; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1149; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a2150; LA64-LAMCAS-NEXT:    amcas_db.h $a2, $a1, $a0151; LA64-LAMCAS-NEXT:    bne $a2, $a3, .LBB3_1152; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end153; LA64-LAMCAS-NEXT:    move $a0, $a2154; LA64-LAMCAS-NEXT:    ret155;156; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_i16_acquire:157; LA64-LAMCAS-LAM-BH:       # %bb.0:158; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.h $a2, $a1, $a0159; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a2160; LA64-LAMCAS-LAM-BH-NEXT:    ret161  %1 = atomicrmw xchg ptr %a, i16 %b acquire162  ret i16 %1163}164 165define i16 @atomicrmw_xchg_0_i16_acquire(ptr %a) nounwind {166; LA64-LABEL: atomicrmw_xchg_0_i16_acquire:167; LA64:       # %bb.0:168; LA64-NEXT:    slli.d $a1, $a0, 3169; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0170; LA64-NEXT:    lu12i.w $a2, 15171; LA64-NEXT:    ori $a2, $a2, 4095172; LA64-NEXT:    sll.w $a2, $a2, $a1173; LA64-NEXT:    nor $a2, $a2, $zero174; LA64-NEXT:    amand_db.w $a3, $a2, $a0175; LA64-NEXT:    srl.w $a0, $a3, $a1176; LA64-NEXT:    ret177;178; LA64-LAMCAS-LABEL: atomicrmw_xchg_0_i16_acquire:179; LA64-LAMCAS:       # %bb.0:180; LA64-LAMCAS-NEXT:    move $a1, $a0181; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 0182; LA64-LAMCAS-NEXT:    .p2align 4, , 16183; LA64-LAMCAS-NEXT:  .LBB4_1: # %atomicrmw.start184; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1185; LA64-LAMCAS-NEXT:    ext.w.h $a2, $a0186; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $zero, $a1187; LA64-LAMCAS-NEXT:    bne $a0, $a2, .LBB4_1188; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end189; LA64-LAMCAS-NEXT:    ret190;191; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_0_i16_acquire:192; LA64-LAMCAS-LAM-BH:       # %bb.0:193; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.h $a1, $zero, $a0194; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a1195; LA64-LAMCAS-LAM-BH-NEXT:    ret196  %1 = atomicrmw xchg ptr %a, i16 0 acquire197  ret i16 %1198}199 200define i16 @atomicrmw_xchg_minus_1_i16_acquire(ptr %a) nounwind {201; LA64-LABEL: atomicrmw_xchg_minus_1_i16_acquire:202; LA64:       # %bb.0:203; LA64-NEXT:    slli.d $a1, $a0, 3204; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0205; LA64-NEXT:    lu12i.w $a2, 15206; LA64-NEXT:    ori $a2, $a2, 4095207; LA64-NEXT:    sll.w $a2, $a2, $a1208; LA64-NEXT:    amor_db.w $a3, $a2, $a0209; LA64-NEXT:    srl.w $a0, $a3, $a1210; LA64-NEXT:    ret211;212; LA64-LAMCAS-LABEL: atomicrmw_xchg_minus_1_i16_acquire:213; LA64-LAMCAS:       # %bb.0:214; LA64-LAMCAS-NEXT:    move $a1, $a0215; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 0216; LA64-LAMCAS-NEXT:    addi.w $a2, $zero, -1217; LA64-LAMCAS-NEXT:    .p2align 4, , 16218; LA64-LAMCAS-NEXT:  .LBB5_1: # %atomicrmw.start219; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1220; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a0221; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a2, $a1222; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB5_1223; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end224; LA64-LAMCAS-NEXT:    ret225;226; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_minus_1_i16_acquire:227; LA64-LAMCAS-LAM-BH:       # %bb.0:228; LA64-LAMCAS-LAM-BH-NEXT:    addi.w $a2, $zero, -1229; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.h $a1, $a2, $a0230; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a1231; LA64-LAMCAS-LAM-BH-NEXT:    ret232  %1 = atomicrmw xchg ptr %a, i16 -1 acquire233  ret i16 %1234 235}236 237define i8 @atomicrmw_add_i8_acquire(ptr %a, i8 %b) nounwind {238; LA64-LABEL: atomicrmw_add_i8_acquire:239; LA64:       # %bb.0:240; LA64-NEXT:    slli.d $a2, $a0, 3241; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0242; LA64-NEXT:    ori $a3, $zero, 255243; LA64-NEXT:    sll.w $a3, $a3, $a2244; LA64-NEXT:    andi $a1, $a1, 255245; LA64-NEXT:    sll.w $a1, $a1, $a2246; LA64-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=1247; LA64-NEXT:    ll.w $a4, $a0, 0248; LA64-NEXT:    add.w $a5, $a4, $a1249; LA64-NEXT:    xor $a5, $a4, $a5250; LA64-NEXT:    and $a5, $a5, $a3251; LA64-NEXT:    xor $a5, $a4, $a5252; LA64-NEXT:    sc.w $a5, $a0, 0253; LA64-NEXT:    beq $a5, $zero, .LBB6_1254; LA64-NEXT:  # %bb.2:255; LA64-NEXT:    srl.w $a0, $a4, $a2256; LA64-NEXT:    ret257;258; LA64-LAMCAS-LABEL: atomicrmw_add_i8_acquire:259; LA64-LAMCAS:       # %bb.0:260; LA64-LAMCAS-NEXT:    move $a2, $a0261; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 0262; LA64-LAMCAS-NEXT:    .p2align 4, , 16263; LA64-LAMCAS-NEXT:  .LBB6_1: # %atomicrmw.start264; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1265; LA64-LAMCAS-NEXT:    add.d $a3, $a0, $a1266; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a0267; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a3, $a2268; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB6_1269; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end270; LA64-LAMCAS-NEXT:    ret271;272; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_add_i8_acquire:273; LA64-LAMCAS-LAM-BH:       # %bb.0:274; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.b $a2, $a1, $a0275; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a2276; LA64-LAMCAS-LAM-BH-NEXT:    ret277  %1 = atomicrmw add ptr %a, i8 %b acquire278  ret i8 %1279}280 281define i16 @atomicrmw_add_i16_acquire(ptr %a, i16 %b) nounwind {282; LA64-LABEL: atomicrmw_add_i16_acquire:283; LA64:       # %bb.0:284; LA64-NEXT:    slli.d $a2, $a0, 3285; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0286; LA64-NEXT:    lu12i.w $a3, 15287; LA64-NEXT:    ori $a3, $a3, 4095288; LA64-NEXT:    sll.w $a3, $a3, $a2289; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 0290; LA64-NEXT:    sll.w $a1, $a1, $a2291; LA64-NEXT:  .LBB7_1: # =>This Inner Loop Header: Depth=1292; LA64-NEXT:    ll.w $a4, $a0, 0293; LA64-NEXT:    add.w $a5, $a4, $a1294; LA64-NEXT:    xor $a5, $a4, $a5295; LA64-NEXT:    and $a5, $a5, $a3296; LA64-NEXT:    xor $a5, $a4, $a5297; LA64-NEXT:    sc.w $a5, $a0, 0298; LA64-NEXT:    beq $a5, $zero, .LBB7_1299; LA64-NEXT:  # %bb.2:300; LA64-NEXT:    srl.w $a0, $a4, $a2301; LA64-NEXT:    ret302;303; LA64-LAMCAS-LABEL: atomicrmw_add_i16_acquire:304; LA64-LAMCAS:       # %bb.0:305; LA64-LAMCAS-NEXT:    move $a2, $a0306; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 0307; LA64-LAMCAS-NEXT:    .p2align 4, , 16308; LA64-LAMCAS-NEXT:  .LBB7_1: # %atomicrmw.start309; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1310; LA64-LAMCAS-NEXT:    add.d $a3, $a0, $a1311; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a0312; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a3, $a2313; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB7_1314; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end315; LA64-LAMCAS-NEXT:    ret316;317; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_add_i16_acquire:318; LA64-LAMCAS-LAM-BH:       # %bb.0:319; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.h $a2, $a1, $a0320; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a2321; LA64-LAMCAS-LAM-BH-NEXT:    ret322  %1 = atomicrmw add ptr %a, i16 %b acquire323  ret i16 %1324 325}326 327define i8 @atomicrmw_sub_i8_acquire(ptr %a, i8 %b) nounwind {328; LA64-LABEL: atomicrmw_sub_i8_acquire:329; LA64:       # %bb.0:330; LA64-NEXT:    slli.d $a2, $a0, 3331; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0332; LA64-NEXT:    ori $a3, $zero, 255333; LA64-NEXT:    sll.w $a3, $a3, $a2334; LA64-NEXT:    andi $a1, $a1, 255335; LA64-NEXT:    sll.w $a1, $a1, $a2336; LA64-NEXT:  .LBB8_1: # =>This Inner Loop Header: Depth=1337; LA64-NEXT:    ll.w $a4, $a0, 0338; LA64-NEXT:    sub.w $a5, $a4, $a1339; LA64-NEXT:    xor $a5, $a4, $a5340; LA64-NEXT:    and $a5, $a5, $a3341; LA64-NEXT:    xor $a5, $a4, $a5342; LA64-NEXT:    sc.w $a5, $a0, 0343; LA64-NEXT:    beq $a5, $zero, .LBB8_1344; LA64-NEXT:  # %bb.2:345; LA64-NEXT:    srl.w $a0, $a4, $a2346; LA64-NEXT:    ret347;348; LA64-LAMCAS-LABEL: atomicrmw_sub_i8_acquire:349; LA64-LAMCAS:       # %bb.0:350; LA64-LAMCAS-NEXT:    move $a2, $a0351; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 0352; LA64-LAMCAS-NEXT:    .p2align 4, , 16353; LA64-LAMCAS-NEXT:  .LBB8_1: # %atomicrmw.start354; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1355; LA64-LAMCAS-NEXT:    sub.d $a3, $a0, $a1356; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a0357; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a3, $a2358; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB8_1359; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end360; LA64-LAMCAS-NEXT:    ret361;362; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_sub_i8_acquire:363; LA64-LAMCAS-LAM-BH:       # %bb.0:364; LA64-LAMCAS-LAM-BH-NEXT:    sub.w $a2, $zero, $a1365; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.b $a1, $a2, $a0366; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a1367; LA64-LAMCAS-LAM-BH-NEXT:    ret368  %1 = atomicrmw sub ptr %a, i8 %b acquire369  ret i8 %1370}371 372define i16 @atomicrmw_sub_i16_acquire(ptr %a, i16 %b) nounwind {373; LA64-LABEL: atomicrmw_sub_i16_acquire:374; LA64:       # %bb.0:375; LA64-NEXT:    slli.d $a2, $a0, 3376; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0377; LA64-NEXT:    lu12i.w $a3, 15378; LA64-NEXT:    ori $a3, $a3, 4095379; LA64-NEXT:    sll.w $a3, $a3, $a2380; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 0381; LA64-NEXT:    sll.w $a1, $a1, $a2382; LA64-NEXT:  .LBB9_1: # =>This Inner Loop Header: Depth=1383; LA64-NEXT:    ll.w $a4, $a0, 0384; LA64-NEXT:    sub.w $a5, $a4, $a1385; LA64-NEXT:    xor $a5, $a4, $a5386; LA64-NEXT:    and $a5, $a5, $a3387; LA64-NEXT:    xor $a5, $a4, $a5388; LA64-NEXT:    sc.w $a5, $a0, 0389; LA64-NEXT:    beq $a5, $zero, .LBB9_1390; LA64-NEXT:  # %bb.2:391; LA64-NEXT:    srl.w $a0, $a4, $a2392; LA64-NEXT:    ret393;394; LA64-LAMCAS-LABEL: atomicrmw_sub_i16_acquire:395; LA64-LAMCAS:       # %bb.0:396; LA64-LAMCAS-NEXT:    move $a2, $a0397; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 0398; LA64-LAMCAS-NEXT:    .p2align 4, , 16399; LA64-LAMCAS-NEXT:  .LBB9_1: # %atomicrmw.start400; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1401; LA64-LAMCAS-NEXT:    sub.d $a3, $a0, $a1402; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a0403; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a3, $a2404; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB9_1405; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end406; LA64-LAMCAS-NEXT:    ret407;408; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_sub_i16_acquire:409; LA64-LAMCAS-LAM-BH:       # %bb.0:410; LA64-LAMCAS-LAM-BH-NEXT:    sub.w $a2, $zero, $a1411; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.h $a1, $a2, $a0412; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a1413; LA64-LAMCAS-LAM-BH-NEXT:    ret414  %1 = atomicrmw sub ptr %a, i16 %b acquire415  ret i16 %1416 417}418 419define i8 @atomicrmw_umax_i8_acquire(ptr %a, i8 %b) nounwind {420; LA64-LABEL: atomicrmw_umax_i8_acquire:421; LA64:       # %bb.0:422; LA64-NEXT:    slli.d $a2, $a0, 3423; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0424; LA64-NEXT:    ori $a3, $zero, 255425; LA64-NEXT:    sll.w $a3, $a3, $a2426; LA64-NEXT:    andi $a1, $a1, 255427; LA64-NEXT:    sll.w $a1, $a1, $a2428; LA64-NEXT:  .LBB10_1: # =>This Inner Loop Header: Depth=1429; LA64-NEXT:    ll.w $a4, $a0, 0430; LA64-NEXT:    and $a6, $a4, $a3431; LA64-NEXT:    move $a5, $a4432; LA64-NEXT:    bgeu $a6, $a1, .LBB10_3433; LA64-NEXT:  # %bb.2: # in Loop: Header=BB10_1 Depth=1434; LA64-NEXT:    xor $a5, $a4, $a1435; LA64-NEXT:    and $a5, $a5, $a3436; LA64-NEXT:    xor $a5, $a4, $a5437; LA64-NEXT:  .LBB10_3: # in Loop: Header=BB10_1 Depth=1438; LA64-NEXT:    sc.w $a5, $a0, 0439; LA64-NEXT:    beq $a5, $zero, .LBB10_1440; LA64-NEXT:  # %bb.4:441; LA64-NEXT:    srl.w $a0, $a4, $a2442; LA64-NEXT:    ret443;444; LA64-LAMCAS-LABEL: atomicrmw_umax_i8_acquire:445; LA64-LAMCAS:       # %bb.0:446; LA64-LAMCAS-NEXT:    move $a2, $a0447; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 0448; LA64-LAMCAS-NEXT:    andi $a3, $a1, 255449; LA64-LAMCAS-NEXT:    .p2align 4, , 16450; LA64-LAMCAS-NEXT:  .LBB10_1: # %atomicrmw.start451; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1452; LA64-LAMCAS-NEXT:    andi $a4, $a0, 255453; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a4454; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a4455; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a4456; LA64-LAMCAS-NEXT:    or $a4, $a4, $a5457; LA64-LAMCAS-NEXT:    ext.w.b $a5, $a0458; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a4, $a2459; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB10_1460; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end461; LA64-LAMCAS-NEXT:    ret462;463; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umax_i8_acquire:464; LA64-LAMCAS-LAM-BH:       # %bb.0:465; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a0466; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 0467; LA64-LAMCAS-LAM-BH-NEXT:    andi $a3, $a1, 255468; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 16469; LA64-LAMCAS-LAM-BH-NEXT:  .LBB10_1: # %atomicrmw.start470; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=1471; LA64-LAMCAS-LAM-BH-NEXT:    andi $a4, $a0, 255472; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a4473; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a4474; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a4475; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a5476; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a5, $a0477; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a4, $a2478; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB10_1479; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end480; LA64-LAMCAS-LAM-BH-NEXT:    ret481  %1 = atomicrmw umax ptr %a, i8 %b acquire482  ret i8 %1483}484 485define i16 @atomicrmw_umax_i16_acquire(ptr %a, i16 %b) nounwind {486; LA64-LABEL: atomicrmw_umax_i16_acquire:487; LA64:       # %bb.0:488; LA64-NEXT:    slli.d $a2, $a0, 3489; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0490; LA64-NEXT:    lu12i.w $a3, 15491; LA64-NEXT:    ori $a3, $a3, 4095492; LA64-NEXT:    sll.w $a3, $a3, $a2493; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 0494; LA64-NEXT:    sll.w $a1, $a1, $a2495; LA64-NEXT:  .LBB11_1: # =>This Inner Loop Header: Depth=1496; LA64-NEXT:    ll.w $a4, $a0, 0497; LA64-NEXT:    and $a6, $a4, $a3498; LA64-NEXT:    move $a5, $a4499; LA64-NEXT:    bgeu $a6, $a1, .LBB11_3500; LA64-NEXT:  # %bb.2: # in Loop: Header=BB11_1 Depth=1501; LA64-NEXT:    xor $a5, $a4, $a1502; LA64-NEXT:    and $a5, $a5, $a3503; LA64-NEXT:    xor $a5, $a4, $a5504; LA64-NEXT:  .LBB11_3: # in Loop: Header=BB11_1 Depth=1505; LA64-NEXT:    sc.w $a5, $a0, 0506; LA64-NEXT:    beq $a5, $zero, .LBB11_1507; LA64-NEXT:  # %bb.4:508; LA64-NEXT:    srl.w $a0, $a4, $a2509; LA64-NEXT:    ret510;511; LA64-LAMCAS-LABEL: atomicrmw_umax_i16_acquire:512; LA64-LAMCAS:       # %bb.0:513; LA64-LAMCAS-NEXT:    move $a2, $a0514; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 0515; LA64-LAMCAS-NEXT:    bstrpick.d $a3, $a1, 15, 0516; LA64-LAMCAS-NEXT:    .p2align 4, , 16517; LA64-LAMCAS-NEXT:  .LBB11_1: # %atomicrmw.start518; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1519; LA64-LAMCAS-NEXT:    bstrpick.d $a4, $a0, 15, 0520; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a4521; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a4522; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a4523; LA64-LAMCAS-NEXT:    or $a4, $a4, $a5524; LA64-LAMCAS-NEXT:    ext.w.h $a5, $a0525; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a4, $a2526; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB11_1527; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end528; LA64-LAMCAS-NEXT:    ret529;530; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umax_i16_acquire:531; LA64-LAMCAS-LAM-BH:       # %bb.0:532; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a0533; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 0534; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a3, $a1, 15, 0535; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 16536; LA64-LAMCAS-LAM-BH-NEXT:  .LBB11_1: # %atomicrmw.start537; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=1538; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a4, $a0, 15, 0539; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a4540; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a4541; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a4542; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a5543; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a5, $a0544; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a4, $a2545; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB11_1546; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end547; LA64-LAMCAS-LAM-BH-NEXT:    ret548  %1 = atomicrmw umax ptr %a, i16 %b acquire549  ret i16 %1550}551 552define i8 @atomicrmw_umin_i8_acquire(ptr %a, i8 %b) nounwind {553; LA64-LABEL: atomicrmw_umin_i8_acquire:554; LA64:       # %bb.0:555; LA64-NEXT:    slli.d $a2, $a0, 3556; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0557; LA64-NEXT:    ori $a3, $zero, 255558; LA64-NEXT:    sll.w $a3, $a3, $a2559; LA64-NEXT:    andi $a1, $a1, 255560; LA64-NEXT:    sll.w $a1, $a1, $a2561; LA64-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=1562; LA64-NEXT:    ll.w $a4, $a0, 0563; LA64-NEXT:    and $a6, $a4, $a3564; LA64-NEXT:    move $a5, $a4565; LA64-NEXT:    bgeu $a1, $a6, .LBB12_3566; LA64-NEXT:  # %bb.2: # in Loop: Header=BB12_1 Depth=1567; LA64-NEXT:    xor $a5, $a4, $a1568; LA64-NEXT:    and $a5, $a5, $a3569; LA64-NEXT:    xor $a5, $a4, $a5570; LA64-NEXT:  .LBB12_3: # in Loop: Header=BB12_1 Depth=1571; LA64-NEXT:    sc.w $a5, $a0, 0572; LA64-NEXT:    beq $a5, $zero, .LBB12_1573; LA64-NEXT:  # %bb.4:574; LA64-NEXT:    srl.w $a0, $a4, $a2575; LA64-NEXT:    ret576;577; LA64-LAMCAS-LABEL: atomicrmw_umin_i8_acquire:578; LA64-LAMCAS:       # %bb.0:579; LA64-LAMCAS-NEXT:    move $a2, $a0580; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 0581; LA64-LAMCAS-NEXT:    andi $a3, $a1, 255582; LA64-LAMCAS-NEXT:    .p2align 4, , 16583; LA64-LAMCAS-NEXT:  .LBB12_1: # %atomicrmw.start584; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1585; LA64-LAMCAS-NEXT:    andi $a4, $a0, 255586; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a4587; LA64-LAMCAS-NEXT:    xori $a4, $a4, 1588; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a4589; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a4590; LA64-LAMCAS-NEXT:    or $a4, $a4, $a5591; LA64-LAMCAS-NEXT:    ext.w.b $a5, $a0592; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a4, $a2593; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB12_1594; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end595; LA64-LAMCAS-NEXT:    ret596;597; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umin_i8_acquire:598; LA64-LAMCAS-LAM-BH:       # %bb.0:599; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a0600; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 0601; LA64-LAMCAS-LAM-BH-NEXT:    andi $a3, $a1, 255602; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 16603; LA64-LAMCAS-LAM-BH-NEXT:  .LBB12_1: # %atomicrmw.start604; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=1605; LA64-LAMCAS-LAM-BH-NEXT:    andi $a4, $a0, 255606; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a4607; LA64-LAMCAS-LAM-BH-NEXT:    xori $a4, $a4, 1608; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a4609; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a4610; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a5611; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a5, $a0612; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a4, $a2613; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB12_1614; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end615; LA64-LAMCAS-LAM-BH-NEXT:    ret616  %1 = atomicrmw umin ptr %a, i8 %b acquire617  ret i8 %1618}619 620define i16 @atomicrmw_umin_i16_acquire(ptr %a, i16 %b) nounwind {621; LA64-LABEL: atomicrmw_umin_i16_acquire:622; LA64:       # %bb.0:623; LA64-NEXT:    slli.d $a2, $a0, 3624; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0625; LA64-NEXT:    lu12i.w $a3, 15626; LA64-NEXT:    ori $a3, $a3, 4095627; LA64-NEXT:    sll.w $a3, $a3, $a2628; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 0629; LA64-NEXT:    sll.w $a1, $a1, $a2630; LA64-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=1631; LA64-NEXT:    ll.w $a4, $a0, 0632; LA64-NEXT:    and $a6, $a4, $a3633; LA64-NEXT:    move $a5, $a4634; LA64-NEXT:    bgeu $a1, $a6, .LBB13_3635; LA64-NEXT:  # %bb.2: # in Loop: Header=BB13_1 Depth=1636; LA64-NEXT:    xor $a5, $a4, $a1637; LA64-NEXT:    and $a5, $a5, $a3638; LA64-NEXT:    xor $a5, $a4, $a5639; LA64-NEXT:  .LBB13_3: # in Loop: Header=BB13_1 Depth=1640; LA64-NEXT:    sc.w $a5, $a0, 0641; LA64-NEXT:    beq $a5, $zero, .LBB13_1642; LA64-NEXT:  # %bb.4:643; LA64-NEXT:    srl.w $a0, $a4, $a2644; LA64-NEXT:    ret645;646; LA64-LAMCAS-LABEL: atomicrmw_umin_i16_acquire:647; LA64-LAMCAS:       # %bb.0:648; LA64-LAMCAS-NEXT:    move $a2, $a0649; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 0650; LA64-LAMCAS-NEXT:    bstrpick.d $a3, $a1, 15, 0651; LA64-LAMCAS-NEXT:    .p2align 4, , 16652; LA64-LAMCAS-NEXT:  .LBB13_1: # %atomicrmw.start653; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1654; LA64-LAMCAS-NEXT:    bstrpick.d $a4, $a0, 15, 0655; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a4656; LA64-LAMCAS-NEXT:    xori $a4, $a4, 1657; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a4658; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a4659; LA64-LAMCAS-NEXT:    or $a4, $a4, $a5660; LA64-LAMCAS-NEXT:    ext.w.h $a5, $a0661; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a4, $a2662; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB13_1663; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end664; LA64-LAMCAS-NEXT:    ret665;666; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umin_i16_acquire:667; LA64-LAMCAS-LAM-BH:       # %bb.0:668; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a0669; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 0670; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a3, $a1, 15, 0671; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 16672; LA64-LAMCAS-LAM-BH-NEXT:  .LBB13_1: # %atomicrmw.start673; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=1674; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a4, $a0, 15, 0675; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a4676; LA64-LAMCAS-LAM-BH-NEXT:    xori $a4, $a4, 1677; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a4678; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a4679; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a5680; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a5, $a0681; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a4, $a2682; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB13_1683; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end684; LA64-LAMCAS-LAM-BH-NEXT:    ret685  %1 = atomicrmw umin ptr %a, i16 %b acquire686  ret i16 %1687}688 689define i8 @atomicrmw_max_i8_acquire(ptr %a, i8 %b) nounwind {690; LA64-LABEL: atomicrmw_max_i8_acquire:691; LA64:       # %bb.0:692; LA64-NEXT:    slli.d $a2, $a0, 3693; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0694; LA64-NEXT:    andi $a3, $a2, 24695; LA64-NEXT:    ori $a4, $zero, 255696; LA64-NEXT:    sll.w $a4, $a4, $a2697; LA64-NEXT:    ext.w.b $a1, $a1698; LA64-NEXT:    sll.w $a1, $a1, $a2699; LA64-NEXT:    xori $a3, $a3, 56700; LA64-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=1701; LA64-NEXT:    ll.w $a5, $a0, 0702; LA64-NEXT:    and $a7, $a5, $a4703; LA64-NEXT:    move $a6, $a5704; LA64-NEXT:    sll.w $a7, $a7, $a3705; LA64-NEXT:    sra.w $a7, $a7, $a3706; LA64-NEXT:    bge $a7, $a1, .LBB14_3707; LA64-NEXT:  # %bb.2: # in Loop: Header=BB14_1 Depth=1708; LA64-NEXT:    xor $a6, $a5, $a1709; LA64-NEXT:    and $a6, $a6, $a4710; LA64-NEXT:    xor $a6, $a5, $a6711; LA64-NEXT:  .LBB14_3: # in Loop: Header=BB14_1 Depth=1712; LA64-NEXT:    sc.w $a6, $a0, 0713; LA64-NEXT:    beq $a6, $zero, .LBB14_1714; LA64-NEXT:  # %bb.4:715; LA64-NEXT:    srl.w $a0, $a5, $a2716; LA64-NEXT:    ret717;718; LA64-LAMCAS-LABEL: atomicrmw_max_i8_acquire:719; LA64-LAMCAS:       # %bb.0:720; LA64-LAMCAS-NEXT:    move $a2, $a0721; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 0722; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a1723; LA64-LAMCAS-NEXT:    .p2align 4, , 16724; LA64-LAMCAS-NEXT:  .LBB14_1: # %atomicrmw.start725; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1726; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a0727; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a4728; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a5729; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a5730; LA64-LAMCAS-NEXT:    or $a5, $a5, $a6731; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a5, $a2732; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB14_1733; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end734; LA64-LAMCAS-NEXT:    ret735;736; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_max_i8_acquire:737; LA64-LAMCAS-LAM-BH:       # %bb.0:738; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a0739; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 0740; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a3, $a1741; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 16742; LA64-LAMCAS-LAM-BH-NEXT:  .LBB14_1: # %atomicrmw.start743; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=1744; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a4, $a0745; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a4746; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a5747; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a5748; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a6749; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a5, $a2750; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB14_1751; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end752; LA64-LAMCAS-LAM-BH-NEXT:    ret753  %1 = atomicrmw max ptr %a, i8 %b acquire754  ret i8 %1755}756 757define i16 @atomicrmw_max_i16_acquire(ptr %a, i16 %b) nounwind {758; LA64-LABEL: atomicrmw_max_i16_acquire:759; LA64:       # %bb.0:760; LA64-NEXT:    slli.d $a2, $a0, 3761; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0762; LA64-NEXT:    andi $a3, $a2, 24763; LA64-NEXT:    lu12i.w $a4, 15764; LA64-NEXT:    ori $a4, $a4, 4095765; LA64-NEXT:    sll.w $a4, $a4, $a2766; LA64-NEXT:    ext.w.h $a1, $a1767; LA64-NEXT:    sll.w $a1, $a1, $a2768; LA64-NEXT:    ori $a5, $zero, 48769; LA64-NEXT:    sub.d $a3, $a5, $a3770; LA64-NEXT:  .LBB15_1: # =>This Inner Loop Header: Depth=1771; LA64-NEXT:    ll.w $a5, $a0, 0772; LA64-NEXT:    and $a7, $a5, $a4773; LA64-NEXT:    move $a6, $a5774; LA64-NEXT:    sll.w $a7, $a7, $a3775; LA64-NEXT:    sra.w $a7, $a7, $a3776; LA64-NEXT:    bge $a7, $a1, .LBB15_3777; LA64-NEXT:  # %bb.2: # in Loop: Header=BB15_1 Depth=1778; LA64-NEXT:    xor $a6, $a5, $a1779; LA64-NEXT:    and $a6, $a6, $a4780; LA64-NEXT:    xor $a6, $a5, $a6781; LA64-NEXT:  .LBB15_3: # in Loop: Header=BB15_1 Depth=1782; LA64-NEXT:    sc.w $a6, $a0, 0783; LA64-NEXT:    beq $a6, $zero, .LBB15_1784; LA64-NEXT:  # %bb.4:785; LA64-NEXT:    srl.w $a0, $a5, $a2786; LA64-NEXT:    ret787;788; LA64-LAMCAS-LABEL: atomicrmw_max_i16_acquire:789; LA64-LAMCAS:       # %bb.0:790; LA64-LAMCAS-NEXT:    move $a2, $a0791; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 0792; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a1793; LA64-LAMCAS-NEXT:    .p2align 4, , 16794; LA64-LAMCAS-NEXT:  .LBB15_1: # %atomicrmw.start795; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1796; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a0797; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a4798; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a5799; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a5800; LA64-LAMCAS-NEXT:    or $a5, $a5, $a6801; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a5, $a2802; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB15_1803; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end804; LA64-LAMCAS-NEXT:    ret805;806; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_max_i16_acquire:807; LA64-LAMCAS-LAM-BH:       # %bb.0:808; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a0809; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 0810; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a3, $a1811; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 16812; LA64-LAMCAS-LAM-BH-NEXT:  .LBB15_1: # %atomicrmw.start813; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=1814; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a4, $a0815; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a4816; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a5817; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a5818; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a6819; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a5, $a2820; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB15_1821; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end822; LA64-LAMCAS-LAM-BH-NEXT:    ret823  %1 = atomicrmw max ptr %a, i16 %b acquire824  ret i16 %1825}826 827define i8 @atomicrmw_min_i8_acquire(ptr %a, i8 %b) nounwind {828; LA64-LABEL: atomicrmw_min_i8_acquire:829; LA64:       # %bb.0:830; LA64-NEXT:    slli.d $a2, $a0, 3831; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0832; LA64-NEXT:    andi $a3, $a2, 24833; LA64-NEXT:    ori $a4, $zero, 255834; LA64-NEXT:    sll.w $a4, $a4, $a2835; LA64-NEXT:    ext.w.b $a1, $a1836; LA64-NEXT:    sll.w $a1, $a1, $a2837; LA64-NEXT:    xori $a3, $a3, 56838; LA64-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=1839; LA64-NEXT:    ll.w $a5, $a0, 0840; LA64-NEXT:    and $a7, $a5, $a4841; LA64-NEXT:    move $a6, $a5842; LA64-NEXT:    sll.w $a7, $a7, $a3843; LA64-NEXT:    sra.w $a7, $a7, $a3844; LA64-NEXT:    bge $a1, $a7, .LBB16_3845; LA64-NEXT:  # %bb.2: # in Loop: Header=BB16_1 Depth=1846; LA64-NEXT:    xor $a6, $a5, $a1847; LA64-NEXT:    and $a6, $a6, $a4848; LA64-NEXT:    xor $a6, $a5, $a6849; LA64-NEXT:  .LBB16_3: # in Loop: Header=BB16_1 Depth=1850; LA64-NEXT:    sc.w $a6, $a0, 0851; LA64-NEXT:    beq $a6, $zero, .LBB16_1852; LA64-NEXT:  # %bb.4:853; LA64-NEXT:    srl.w $a0, $a5, $a2854; LA64-NEXT:    ret855;856; LA64-LAMCAS-LABEL: atomicrmw_min_i8_acquire:857; LA64-LAMCAS:       # %bb.0:858; LA64-LAMCAS-NEXT:    move $a2, $a0859; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 0860; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a1861; LA64-LAMCAS-NEXT:    .p2align 4, , 16862; LA64-LAMCAS-NEXT:  .LBB16_1: # %atomicrmw.start863; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1864; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a0865; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a4866; LA64-LAMCAS-NEXT:    xori $a5, $a5, 1867; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a5868; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a5869; LA64-LAMCAS-NEXT:    or $a5, $a5, $a6870; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a5, $a2871; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB16_1872; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end873; LA64-LAMCAS-NEXT:    ret874;875; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_min_i8_acquire:876; LA64-LAMCAS-LAM-BH:       # %bb.0:877; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a0878; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 0879; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a3, $a1880; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 16881; LA64-LAMCAS-LAM-BH-NEXT:  .LBB16_1: # %atomicrmw.start882; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=1883; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a4, $a0884; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a4885; LA64-LAMCAS-LAM-BH-NEXT:    xori $a5, $a5, 1886; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a5887; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a5888; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a6889; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a5, $a2890; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB16_1891; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end892; LA64-LAMCAS-LAM-BH-NEXT:    ret893  %1 = atomicrmw min ptr %a, i8 %b acquire894  ret i8 %1895}896 897define i16 @atomicrmw_min_i16_acquire(ptr %a, i16 %b) nounwind {898; LA64-LABEL: atomicrmw_min_i16_acquire:899; LA64:       # %bb.0:900; LA64-NEXT:    slli.d $a2, $a0, 3901; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0902; LA64-NEXT:    andi $a3, $a2, 24903; LA64-NEXT:    lu12i.w $a4, 15904; LA64-NEXT:    ori $a4, $a4, 4095905; LA64-NEXT:    sll.w $a4, $a4, $a2906; LA64-NEXT:    ext.w.h $a1, $a1907; LA64-NEXT:    sll.w $a1, $a1, $a2908; LA64-NEXT:    ori $a5, $zero, 48909; LA64-NEXT:    sub.d $a3, $a5, $a3910; LA64-NEXT:  .LBB17_1: # =>This Inner Loop Header: Depth=1911; LA64-NEXT:    ll.w $a5, $a0, 0912; LA64-NEXT:    and $a7, $a5, $a4913; LA64-NEXT:    move $a6, $a5914; LA64-NEXT:    sll.w $a7, $a7, $a3915; LA64-NEXT:    sra.w $a7, $a7, $a3916; LA64-NEXT:    bge $a1, $a7, .LBB17_3917; LA64-NEXT:  # %bb.2: # in Loop: Header=BB17_1 Depth=1918; LA64-NEXT:    xor $a6, $a5, $a1919; LA64-NEXT:    and $a6, $a6, $a4920; LA64-NEXT:    xor $a6, $a5, $a6921; LA64-NEXT:  .LBB17_3: # in Loop: Header=BB17_1 Depth=1922; LA64-NEXT:    sc.w $a6, $a0, 0923; LA64-NEXT:    beq $a6, $zero, .LBB17_1924; LA64-NEXT:  # %bb.4:925; LA64-NEXT:    srl.w $a0, $a5, $a2926; LA64-NEXT:    ret927;928; LA64-LAMCAS-LABEL: atomicrmw_min_i16_acquire:929; LA64-LAMCAS:       # %bb.0:930; LA64-LAMCAS-NEXT:    move $a2, $a0931; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 0932; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a1933; LA64-LAMCAS-NEXT:    .p2align 4, , 16934; LA64-LAMCAS-NEXT:  .LBB17_1: # %atomicrmw.start935; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1936; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a0937; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a4938; LA64-LAMCAS-NEXT:    xori $a5, $a5, 1939; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a5940; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a5941; LA64-LAMCAS-NEXT:    or $a5, $a5, $a6942; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a5, $a2943; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB17_1944; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end945; LA64-LAMCAS-NEXT:    ret946;947; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_min_i16_acquire:948; LA64-LAMCAS-LAM-BH:       # %bb.0:949; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a0950; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 0951; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a3, $a1952; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 16953; LA64-LAMCAS-LAM-BH-NEXT:  .LBB17_1: # %atomicrmw.start954; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=1955; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a4, $a0956; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a4957; LA64-LAMCAS-LAM-BH-NEXT:    xori $a5, $a5, 1958; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a5959; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a5960; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a6961; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a5, $a2962; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB17_1963; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end964; LA64-LAMCAS-LAM-BH-NEXT:    ret965  %1 = atomicrmw min ptr %a, i16 %b acquire966  ret i16 %1967}968 969define i8 @atomicrmw_nand_i8_acquire(ptr %a, i8 %b) nounwind {970; LA64-LABEL: atomicrmw_nand_i8_acquire:971; LA64:       # %bb.0:972; LA64-NEXT:    slli.d $a2, $a0, 3973; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0974; LA64-NEXT:    ori $a3, $zero, 255975; LA64-NEXT:    sll.w $a3, $a3, $a2976; LA64-NEXT:    andi $a1, $a1, 255977; LA64-NEXT:    sll.w $a1, $a1, $a2978; LA64-NEXT:  .LBB18_1: # =>This Inner Loop Header: Depth=1979; LA64-NEXT:    ll.w $a4, $a0, 0980; LA64-NEXT:    and $a5, $a4, $a1981; LA64-NEXT:    nor $a5, $a5, $zero982; LA64-NEXT:    xor $a5, $a4, $a5983; LA64-NEXT:    and $a5, $a5, $a3984; LA64-NEXT:    xor $a5, $a4, $a5985; LA64-NEXT:    sc.w $a5, $a0, 0986; LA64-NEXT:    beq $a5, $zero, .LBB18_1987; LA64-NEXT:  # %bb.2:988; LA64-NEXT:    srl.w $a0, $a4, $a2989; LA64-NEXT:    ret990;991; LA64-LAMCAS-LABEL: atomicrmw_nand_i8_acquire:992; LA64-LAMCAS:       # %bb.0:993; LA64-LAMCAS-NEXT:    move $a2, $a0994; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 0995; LA64-LAMCAS-NEXT:    .p2align 4, , 16996; LA64-LAMCAS-NEXT:  .LBB18_1: # %atomicrmw.start997; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=1998; LA64-LAMCAS-NEXT:    and $a3, $a0, $a1999; LA64-LAMCAS-NEXT:    nor $a3, $a3, $zero1000; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a01001; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a3, $a21002; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB18_11003; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1004; LA64-LAMCAS-NEXT:    ret1005;1006; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i8_acquire:1007; LA64-LAMCAS-LAM-BH:       # %bb.0:1008; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a01009; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 01010; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 161011; LA64-LAMCAS-LAM-BH-NEXT:  .LBB18_1: # %atomicrmw.start1012; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=11013; LA64-LAMCAS-LAM-BH-NEXT:    and $a3, $a0, $a11014; LA64-LAMCAS-LAM-BH-NEXT:    nor $a3, $a3, $zero1015; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a4, $a01016; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a3, $a21017; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB18_11018; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end1019; LA64-LAMCAS-LAM-BH-NEXT:    ret1020  %1 = atomicrmw nand ptr %a, i8 %b acquire1021  ret i8 %11022}1023 1024define i16 @atomicrmw_nand_i16_acquire(ptr %a, i16 %b) nounwind {1025; LA64-LABEL: atomicrmw_nand_i16_acquire:1026; LA64:       # %bb.0:1027; LA64-NEXT:    slli.d $a2, $a0, 31028; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01029; LA64-NEXT:    lu12i.w $a3, 151030; LA64-NEXT:    ori $a3, $a3, 40951031; LA64-NEXT:    sll.w $a3, $a3, $a21032; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 01033; LA64-NEXT:    sll.w $a1, $a1, $a21034; LA64-NEXT:  .LBB19_1: # =>This Inner Loop Header: Depth=11035; LA64-NEXT:    ll.w $a4, $a0, 01036; LA64-NEXT:    and $a5, $a4, $a11037; LA64-NEXT:    nor $a5, $a5, $zero1038; LA64-NEXT:    xor $a5, $a4, $a51039; LA64-NEXT:    and $a5, $a5, $a31040; LA64-NEXT:    xor $a5, $a4, $a51041; LA64-NEXT:    sc.w $a5, $a0, 01042; LA64-NEXT:    beq $a5, $zero, .LBB19_11043; LA64-NEXT:  # %bb.2:1044; LA64-NEXT:    srl.w $a0, $a4, $a21045; LA64-NEXT:    ret1046;1047; LA64-LAMCAS-LABEL: atomicrmw_nand_i16_acquire:1048; LA64-LAMCAS:       # %bb.0:1049; LA64-LAMCAS-NEXT:    move $a2, $a01050; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 01051; LA64-LAMCAS-NEXT:    .p2align 4, , 161052; LA64-LAMCAS-NEXT:  .LBB19_1: # %atomicrmw.start1053; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11054; LA64-LAMCAS-NEXT:    and $a3, $a0, $a11055; LA64-LAMCAS-NEXT:    nor $a3, $a3, $zero1056; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a01057; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a3, $a21058; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB19_11059; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1060; LA64-LAMCAS-NEXT:    ret1061;1062; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i16_acquire:1063; LA64-LAMCAS-LAM-BH:       # %bb.0:1064; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a01065; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 01066; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 161067; LA64-LAMCAS-LAM-BH-NEXT:  .LBB19_1: # %atomicrmw.start1068; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=11069; LA64-LAMCAS-LAM-BH-NEXT:    and $a3, $a0, $a11070; LA64-LAMCAS-LAM-BH-NEXT:    nor $a3, $a3, $zero1071; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a4, $a01072; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a3, $a21073; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB19_11074; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end1075; LA64-LAMCAS-LAM-BH-NEXT:    ret1076  %1 = atomicrmw nand ptr %a, i16 %b acquire1077  ret i16 %11078 1079}1080 1081define i32 @atomicrmw_nand_i32_acquire(ptr %a, i32 %b) nounwind {1082; LA64-LABEL: atomicrmw_nand_i32_acquire:1083; LA64:       # %bb.0:1084; LA64-NEXT:  .LBB20_1: # =>This Inner Loop Header: Depth=11085; LA64-NEXT:    ll.w $a2, $a0, 01086; LA64-NEXT:    and $a3, $a2, $a11087; LA64-NEXT:    nor $a3, $a3, $zero1088; LA64-NEXT:    sc.w $a3, $a0, 01089; LA64-NEXT:    beq $a3, $zero, .LBB20_11090; LA64-NEXT:  # %bb.2:1091; LA64-NEXT:    move $a0, $a21092; LA64-NEXT:    ret1093;1094; LA64-LAMCAS-LABEL: atomicrmw_nand_i32_acquire:1095; LA64-LAMCAS:       # %bb.0:1096; LA64-LAMCAS-NEXT:    move $a2, $a01097; LA64-LAMCAS-NEXT:    ld.w $a0, $a0, 01098; LA64-LAMCAS-NEXT:    .p2align 4, , 161099; LA64-LAMCAS-NEXT:  .LBB20_1: # %atomicrmw.start1100; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11101; LA64-LAMCAS-NEXT:    move $a3, $a01102; LA64-LAMCAS-NEXT:    and $a4, $a0, $a11103; LA64-LAMCAS-NEXT:    nor $a4, $a4, $zero1104; LA64-LAMCAS-NEXT:    amcas_db.w $a0, $a4, $a21105; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB20_11106; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1107; LA64-LAMCAS-NEXT:    ret1108;1109; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i32_acquire:1110; LA64-LAMCAS-LAM-BH:       # %bb.0:1111; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a01112; LA64-LAMCAS-LAM-BH-NEXT:    ld.w $a0, $a0, 01113; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 161114; LA64-LAMCAS-LAM-BH-NEXT:  .LBB20_1: # %atomicrmw.start1115; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=11116; LA64-LAMCAS-LAM-BH-NEXT:    move $a3, $a01117; LA64-LAMCAS-LAM-BH-NEXT:    and $a4, $a0, $a11118; LA64-LAMCAS-LAM-BH-NEXT:    nor $a4, $a4, $zero1119; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.w $a0, $a4, $a21120; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a3, .LBB20_11121; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end1122; LA64-LAMCAS-LAM-BH-NEXT:    ret1123  %1 = atomicrmw nand ptr %a, i32 %b acquire1124  ret i32 %11125}1126 1127define i64 @atomicrmw_nand_i64_acquire(ptr %a, i64 %b) nounwind {1128; LA64-LABEL: atomicrmw_nand_i64_acquire:1129; LA64:       # %bb.0:1130; LA64-NEXT:  .LBB21_1: # =>This Inner Loop Header: Depth=11131; LA64-NEXT:    ll.d $a2, $a0, 01132; LA64-NEXT:    and $a3, $a2, $a11133; LA64-NEXT:    nor $a3, $a3, $zero1134; LA64-NEXT:    sc.d $a3, $a0, 01135; LA64-NEXT:    beq $a3, $zero, .LBB21_11136; LA64-NEXT:  # %bb.2:1137; LA64-NEXT:    move $a0, $a21138; LA64-NEXT:    ret1139;1140; LA64-LAMCAS-LABEL: atomicrmw_nand_i64_acquire:1141; LA64-LAMCAS:       # %bb.0:1142; LA64-LAMCAS-NEXT:    move $a2, $a01143; LA64-LAMCAS-NEXT:    ld.d $a0, $a0, 01144; LA64-LAMCAS-NEXT:    .p2align 4, , 161145; LA64-LAMCAS-NEXT:  .LBB21_1: # %atomicrmw.start1146; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11147; LA64-LAMCAS-NEXT:    move $a3, $a01148; LA64-LAMCAS-NEXT:    and $a4, $a0, $a11149; LA64-LAMCAS-NEXT:    nor $a4, $a4, $zero1150; LA64-LAMCAS-NEXT:    amcas_db.d $a0, $a4, $a21151; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB21_11152; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1153; LA64-LAMCAS-NEXT:    ret1154;1155; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i64_acquire:1156; LA64-LAMCAS-LAM-BH:       # %bb.0:1157; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a01158; LA64-LAMCAS-LAM-BH-NEXT:    ld.d $a0, $a0, 01159; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 161160; LA64-LAMCAS-LAM-BH-NEXT:  .LBB21_1: # %atomicrmw.start1161; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=11162; LA64-LAMCAS-LAM-BH-NEXT:    move $a3, $a01163; LA64-LAMCAS-LAM-BH-NEXT:    and $a4, $a0, $a11164; LA64-LAMCAS-LAM-BH-NEXT:    nor $a4, $a4, $zero1165; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.d $a0, $a4, $a21166; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a3, .LBB21_11167; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end1168; LA64-LAMCAS-LAM-BH-NEXT:    ret1169  %1 = atomicrmw nand ptr %a, i64 %b acquire1170  ret i64 %11171}1172 1173define i8 @atomicrmw_and_i8_acquire(ptr %a, i8 %b) nounwind {1174; LA64-LABEL: atomicrmw_and_i8_acquire:1175; LA64:       # %bb.0:1176; LA64-NEXT:    slli.d $a2, $a0, 31177; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01178; LA64-NEXT:    ori $a3, $zero, 2551179; LA64-NEXT:    sll.w $a3, $a3, $a21180; LA64-NEXT:    andi $a1, $a1, 2551181; LA64-NEXT:    sll.w $a1, $a1, $a21182; LA64-NEXT:    orn $a1, $a1, $a31183; LA64-NEXT:    amand_db.w $a3, $a1, $a01184; LA64-NEXT:    srl.w $a0, $a3, $a21185; LA64-NEXT:    ret1186;1187; LA64-LAMCAS-LABEL: atomicrmw_and_i8_acquire:1188; LA64-LAMCAS:       # %bb.0:1189; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 31190; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 01191; LA64-LAMCAS-NEXT:    ori $a3, $zero, 2551192; LA64-LAMCAS-NEXT:    sll.w $a3, $a3, $a21193; LA64-LAMCAS-NEXT:    andi $a1, $a1, 2551194; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a21195; LA64-LAMCAS-NEXT:    orn $a1, $a1, $a31196; LA64-LAMCAS-NEXT:    amand_db.w $a3, $a1, $a01197; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a21198; LA64-LAMCAS-NEXT:    ret1199;1200; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_and_i8_acquire:1201; LA64-LAMCAS-LAM-BH:       # %bb.0:1202; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 31203; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 01204; LA64-LAMCAS-LAM-BH-NEXT:    ori $a3, $zero, 2551205; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a3, $a3, $a21206; LA64-LAMCAS-LAM-BH-NEXT:    andi $a1, $a1, 2551207; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a21208; LA64-LAMCAS-LAM-BH-NEXT:    orn $a1, $a1, $a31209; LA64-LAMCAS-LAM-BH-NEXT:    amand_db.w $a3, $a1, $a01210; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a21211; LA64-LAMCAS-LAM-BH-NEXT:    ret1212  %1 = atomicrmw and ptr %a, i8 %b acquire1213  ret i8 %11214}1215 1216define i16 @atomicrmw_and_i16_acquire(ptr %a, i16 %b) nounwind {1217; LA64-LABEL: atomicrmw_and_i16_acquire:1218; LA64:       # %bb.0:1219; LA64-NEXT:    slli.d $a2, $a0, 31220; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01221; LA64-NEXT:    lu12i.w $a3, 151222; LA64-NEXT:    ori $a3, $a3, 40951223; LA64-NEXT:    sll.w $a3, $a3, $a21224; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 01225; LA64-NEXT:    sll.w $a1, $a1, $a21226; LA64-NEXT:    orn $a1, $a1, $a31227; LA64-NEXT:    amand_db.w $a3, $a1, $a01228; LA64-NEXT:    srl.w $a0, $a3, $a21229; LA64-NEXT:    ret1230;1231; LA64-LAMCAS-LABEL: atomicrmw_and_i16_acquire:1232; LA64-LAMCAS:       # %bb.0:1233; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 31234; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 01235; LA64-LAMCAS-NEXT:    lu12i.w $a3, 151236; LA64-LAMCAS-NEXT:    ori $a3, $a3, 40951237; LA64-LAMCAS-NEXT:    sll.w $a3, $a3, $a21238; LA64-LAMCAS-NEXT:    bstrpick.d $a1, $a1, 15, 01239; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a21240; LA64-LAMCAS-NEXT:    orn $a1, $a1, $a31241; LA64-LAMCAS-NEXT:    amand_db.w $a3, $a1, $a01242; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a21243; LA64-LAMCAS-NEXT:    ret1244;1245; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_and_i16_acquire:1246; LA64-LAMCAS-LAM-BH:       # %bb.0:1247; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 31248; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 01249; LA64-LAMCAS-LAM-BH-NEXT:    lu12i.w $a3, 151250; LA64-LAMCAS-LAM-BH-NEXT:    ori $a3, $a3, 40951251; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a3, $a3, $a21252; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a1, $a1, 15, 01253; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a21254; LA64-LAMCAS-LAM-BH-NEXT:    orn $a1, $a1, $a31255; LA64-LAMCAS-LAM-BH-NEXT:    amand_db.w $a3, $a1, $a01256; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a21257; LA64-LAMCAS-LAM-BH-NEXT:    ret1258  %1 = atomicrmw and ptr %a, i16 %b acquire1259  ret i16 %11260 1261}1262 1263define i8 @atomicrmw_or_i8_acquire(ptr %a, i8 %b) nounwind {1264; LA64-LABEL: atomicrmw_or_i8_acquire:1265; LA64:       # %bb.0:1266; LA64-NEXT:    slli.d $a2, $a0, 31267; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01268; LA64-NEXT:    andi $a1, $a1, 2551269; LA64-NEXT:    sll.w $a1, $a1, $a21270; LA64-NEXT:    amor_db.w $a3, $a1, $a01271; LA64-NEXT:    srl.w $a0, $a3, $a21272; LA64-NEXT:    ret1273;1274; LA64-LAMCAS-LABEL: atomicrmw_or_i8_acquire:1275; LA64-LAMCAS:       # %bb.0:1276; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 31277; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 01278; LA64-LAMCAS-NEXT:    andi $a1, $a1, 2551279; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a21280; LA64-LAMCAS-NEXT:    amor_db.w $a3, $a1, $a01281; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a21282; LA64-LAMCAS-NEXT:    ret1283;1284; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_or_i8_acquire:1285; LA64-LAMCAS-LAM-BH:       # %bb.0:1286; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 31287; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 01288; LA64-LAMCAS-LAM-BH-NEXT:    andi $a1, $a1, 2551289; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a21290; LA64-LAMCAS-LAM-BH-NEXT:    amor_db.w $a3, $a1, $a01291; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a21292; LA64-LAMCAS-LAM-BH-NEXT:    ret1293  %1 = atomicrmw or ptr %a, i8 %b acquire1294  ret i8 %11295}1296 1297define i16 @atomicrmw_or_i16_acquire(ptr %a, i16 %b) nounwind {1298; LA64-LABEL: atomicrmw_or_i16_acquire:1299; LA64:       # %bb.0:1300; LA64-NEXT:    slli.d $a2, $a0, 31301; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01302; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 01303; LA64-NEXT:    sll.w $a1, $a1, $a21304; LA64-NEXT:    amor_db.w $a3, $a1, $a01305; LA64-NEXT:    srl.w $a0, $a3, $a21306; LA64-NEXT:    ret1307;1308; LA64-LAMCAS-LABEL: atomicrmw_or_i16_acquire:1309; LA64-LAMCAS:       # %bb.0:1310; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 31311; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 01312; LA64-LAMCAS-NEXT:    bstrpick.d $a1, $a1, 15, 01313; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a21314; LA64-LAMCAS-NEXT:    amor_db.w $a3, $a1, $a01315; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a21316; LA64-LAMCAS-NEXT:    ret1317;1318; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_or_i16_acquire:1319; LA64-LAMCAS-LAM-BH:       # %bb.0:1320; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 31321; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 01322; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a1, $a1, 15, 01323; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a21324; LA64-LAMCAS-LAM-BH-NEXT:    amor_db.w $a3, $a1, $a01325; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a21326; LA64-LAMCAS-LAM-BH-NEXT:    ret1327  %1 = atomicrmw or ptr %a, i16 %b acquire1328  ret i16 %11329 1330}1331 1332define i8 @atomicrmw_xor_i8_acquire(ptr %a, i8 %b) nounwind {1333; LA64-LABEL: atomicrmw_xor_i8_acquire:1334; LA64:       # %bb.0:1335; LA64-NEXT:    slli.d $a2, $a0, 31336; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01337; LA64-NEXT:    andi $a1, $a1, 2551338; LA64-NEXT:    sll.w $a1, $a1, $a21339; LA64-NEXT:    amxor_db.w $a3, $a1, $a01340; LA64-NEXT:    srl.w $a0, $a3, $a21341; LA64-NEXT:    ret1342;1343; LA64-LAMCAS-LABEL: atomicrmw_xor_i8_acquire:1344; LA64-LAMCAS:       # %bb.0:1345; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 31346; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 01347; LA64-LAMCAS-NEXT:    andi $a1, $a1, 2551348; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a21349; LA64-LAMCAS-NEXT:    amxor_db.w $a3, $a1, $a01350; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a21351; LA64-LAMCAS-NEXT:    ret1352;1353; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xor_i8_acquire:1354; LA64-LAMCAS-LAM-BH:       # %bb.0:1355; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 31356; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 01357; LA64-LAMCAS-LAM-BH-NEXT:    andi $a1, $a1, 2551358; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a21359; LA64-LAMCAS-LAM-BH-NEXT:    amxor_db.w $a3, $a1, $a01360; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a21361; LA64-LAMCAS-LAM-BH-NEXT:    ret1362  %1 = atomicrmw xor ptr %a, i8 %b acquire1363  ret i8 %11364}1365 1366define i16 @atomicrmw_xor_i16_acquire(ptr %a, i16 %b) nounwind {1367; LA64-LABEL: atomicrmw_xor_i16_acquire:1368; LA64:       # %bb.0:1369; LA64-NEXT:    slli.d $a2, $a0, 31370; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01371; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 01372; LA64-NEXT:    sll.w $a1, $a1, $a21373; LA64-NEXT:    amxor_db.w $a3, $a1, $a01374; LA64-NEXT:    srl.w $a0, $a3, $a21375; LA64-NEXT:    ret1376;1377; LA64-LAMCAS-LABEL: atomicrmw_xor_i16_acquire:1378; LA64-LAMCAS:       # %bb.0:1379; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 31380; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 01381; LA64-LAMCAS-NEXT:    bstrpick.d $a1, $a1, 15, 01382; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a21383; LA64-LAMCAS-NEXT:    amxor_db.w $a3, $a1, $a01384; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a21385; LA64-LAMCAS-NEXT:    ret1386;1387; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xor_i16_acquire:1388; LA64-LAMCAS-LAM-BH:       # %bb.0:1389; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 31390; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 01391; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a1, $a1, 15, 01392; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a21393; LA64-LAMCAS-LAM-BH-NEXT:    amxor_db.w $a3, $a1, $a01394; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a21395; LA64-LAMCAS-LAM-BH-NEXT:    ret1396  %1 = atomicrmw xor ptr %a, i16 %b acquire1397  ret i16 %11398 1399}1400 1401define i8 @atomicrmw_xchg_i8_release(ptr %a, i8 %b) nounwind {1402; LA64-LABEL: atomicrmw_xchg_i8_release:1403; LA64:       # %bb.0:1404; LA64-NEXT:    slli.d $a2, $a0, 31405; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01406; LA64-NEXT:    ori $a3, $zero, 2551407; LA64-NEXT:    sll.w $a3, $a3, $a21408; LA64-NEXT:    andi $a1, $a1, 2551409; LA64-NEXT:    sll.w $a1, $a1, $a21410; LA64-NEXT:  .LBB28_1: # =>This Inner Loop Header: Depth=11411; LA64-NEXT:    ll.w $a4, $a0, 01412; LA64-NEXT:    addi.w $a5, $a1, 01413; LA64-NEXT:    xor $a5, $a4, $a51414; LA64-NEXT:    and $a5, $a5, $a31415; LA64-NEXT:    xor $a5, $a4, $a51416; LA64-NEXT:    sc.w $a5, $a0, 01417; LA64-NEXT:    beq $a5, $zero, .LBB28_11418; LA64-NEXT:  # %bb.2:1419; LA64-NEXT:    srl.w $a0, $a4, $a21420; LA64-NEXT:    ret1421;1422; LA64-LAMCAS-LABEL: atomicrmw_xchg_i8_release:1423; LA64-LAMCAS:       # %bb.0:1424; LA64-LAMCAS-NEXT:    ld.bu $a2, $a0, 01425; LA64-LAMCAS-NEXT:    .p2align 4, , 161426; LA64-LAMCAS-NEXT:  .LBB28_1: # %atomicrmw.start1427; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11428; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a21429; LA64-LAMCAS-NEXT:    amcas_db.b $a2, $a1, $a01430; LA64-LAMCAS-NEXT:    bne $a2, $a3, .LBB28_11431; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1432; LA64-LAMCAS-NEXT:    move $a0, $a21433; LA64-LAMCAS-NEXT:    ret1434;1435; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_i8_release:1436; LA64-LAMCAS-LAM-BH:       # %bb.0:1437; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.b $a2, $a1, $a01438; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a21439; LA64-LAMCAS-LAM-BH-NEXT:    ret1440  %1 = atomicrmw xchg ptr %a, i8 %b release1441  ret i8 %11442}1443 1444define i8 @atomicrmw_xchg_0_i8_release(ptr %a) nounwind {1445; LA64-LABEL: atomicrmw_xchg_0_i8_release:1446; LA64:       # %bb.0:1447; LA64-NEXT:    slli.d $a1, $a0, 31448; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01449; LA64-NEXT:    ori $a2, $zero, 2551450; LA64-NEXT:    sll.w $a2, $a2, $a11451; LA64-NEXT:    nor $a2, $a2, $zero1452; LA64-NEXT:    amand_db.w $a3, $a2, $a01453; LA64-NEXT:    srl.w $a0, $a3, $a11454; LA64-NEXT:    ret1455;1456; LA64-LAMCAS-LABEL: atomicrmw_xchg_0_i8_release:1457; LA64-LAMCAS:       # %bb.0:1458; LA64-LAMCAS-NEXT:    move $a1, $a01459; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 01460; LA64-LAMCAS-NEXT:    .p2align 4, , 161461; LA64-LAMCAS-NEXT:  .LBB29_1: # %atomicrmw.start1462; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11463; LA64-LAMCAS-NEXT:    ext.w.b $a2, $a01464; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $zero, $a11465; LA64-LAMCAS-NEXT:    bne $a0, $a2, .LBB29_11466; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1467; LA64-LAMCAS-NEXT:    ret1468;1469; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_0_i8_release:1470; LA64-LAMCAS-LAM-BH:       # %bb.0:1471; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.b $a1, $zero, $a01472; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a11473; LA64-LAMCAS-LAM-BH-NEXT:    ret1474  %1 = atomicrmw xchg ptr %a, i8 0 release1475  ret i8 %11476}1477 1478define i8 @atomicrmw_xchg_minus_1_i8_release(ptr %a) nounwind {1479; LA64-LABEL: atomicrmw_xchg_minus_1_i8_release:1480; LA64:       # %bb.0:1481; LA64-NEXT:    slli.d $a1, $a0, 31482; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01483; LA64-NEXT:    ori $a2, $zero, 2551484; LA64-NEXT:    sll.w $a2, $a2, $a11485; LA64-NEXT:    amor_db.w $a3, $a2, $a01486; LA64-NEXT:    srl.w $a0, $a3, $a11487; LA64-NEXT:    ret1488;1489; LA64-LAMCAS-LABEL: atomicrmw_xchg_minus_1_i8_release:1490; LA64-LAMCAS:       # %bb.0:1491; LA64-LAMCAS-NEXT:    move $a1, $a01492; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 01493; LA64-LAMCAS-NEXT:    addi.w $a2, $zero, -11494; LA64-LAMCAS-NEXT:    .p2align 4, , 161495; LA64-LAMCAS-NEXT:  .LBB30_1: # %atomicrmw.start1496; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11497; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a01498; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a2, $a11499; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB30_11500; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1501; LA64-LAMCAS-NEXT:    ret1502;1503; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_minus_1_i8_release:1504; LA64-LAMCAS-LAM-BH:       # %bb.0:1505; LA64-LAMCAS-LAM-BH-NEXT:    addi.w $a2, $zero, -11506; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.b $a1, $a2, $a01507; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a11508; LA64-LAMCAS-LAM-BH-NEXT:    ret1509  %1 = atomicrmw xchg ptr %a, i8 -1 release1510  ret i8 %11511}1512 1513define i16 @atomicrmw_xchg_i16_release(ptr %a, i16 %b) nounwind {1514; LA64-LABEL: atomicrmw_xchg_i16_release:1515; LA64:       # %bb.0:1516; LA64-NEXT:    slli.d $a2, $a0, 31517; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01518; LA64-NEXT:    lu12i.w $a3, 151519; LA64-NEXT:    ori $a3, $a3, 40951520; LA64-NEXT:    sll.w $a3, $a3, $a21521; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 01522; LA64-NEXT:    sll.w $a1, $a1, $a21523; LA64-NEXT:  .LBB31_1: # =>This Inner Loop Header: Depth=11524; LA64-NEXT:    ll.w $a4, $a0, 01525; LA64-NEXT:    addi.w $a5, $a1, 01526; LA64-NEXT:    xor $a5, $a4, $a51527; LA64-NEXT:    and $a5, $a5, $a31528; LA64-NEXT:    xor $a5, $a4, $a51529; LA64-NEXT:    sc.w $a5, $a0, 01530; LA64-NEXT:    beq $a5, $zero, .LBB31_11531; LA64-NEXT:  # %bb.2:1532; LA64-NEXT:    srl.w $a0, $a4, $a21533; LA64-NEXT:    ret1534;1535; LA64-LAMCAS-LABEL: atomicrmw_xchg_i16_release:1536; LA64-LAMCAS:       # %bb.0:1537; LA64-LAMCAS-NEXT:    ld.hu $a2, $a0, 01538; LA64-LAMCAS-NEXT:    .p2align 4, , 161539; LA64-LAMCAS-NEXT:  .LBB31_1: # %atomicrmw.start1540; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11541; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a21542; LA64-LAMCAS-NEXT:    amcas_db.h $a2, $a1, $a01543; LA64-LAMCAS-NEXT:    bne $a2, $a3, .LBB31_11544; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1545; LA64-LAMCAS-NEXT:    move $a0, $a21546; LA64-LAMCAS-NEXT:    ret1547;1548; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_i16_release:1549; LA64-LAMCAS-LAM-BH:       # %bb.0:1550; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.h $a2, $a1, $a01551; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a21552; LA64-LAMCAS-LAM-BH-NEXT:    ret1553  %1 = atomicrmw xchg ptr %a, i16 %b release1554  ret i16 %11555}1556 1557define i16 @atomicrmw_xchg_0_i16_release(ptr %a) nounwind {1558; LA64-LABEL: atomicrmw_xchg_0_i16_release:1559; LA64:       # %bb.0:1560; LA64-NEXT:    slli.d $a1, $a0, 31561; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01562; LA64-NEXT:    lu12i.w $a2, 151563; LA64-NEXT:    ori $a2, $a2, 40951564; LA64-NEXT:    sll.w $a2, $a2, $a11565; LA64-NEXT:    nor $a2, $a2, $zero1566; LA64-NEXT:    amand_db.w $a3, $a2, $a01567; LA64-NEXT:    srl.w $a0, $a3, $a11568; LA64-NEXT:    ret1569;1570; LA64-LAMCAS-LABEL: atomicrmw_xchg_0_i16_release:1571; LA64-LAMCAS:       # %bb.0:1572; LA64-LAMCAS-NEXT:    move $a1, $a01573; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 01574; LA64-LAMCAS-NEXT:    .p2align 4, , 161575; LA64-LAMCAS-NEXT:  .LBB32_1: # %atomicrmw.start1576; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11577; LA64-LAMCAS-NEXT:    ext.w.h $a2, $a01578; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $zero, $a11579; LA64-LAMCAS-NEXT:    bne $a0, $a2, .LBB32_11580; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1581; LA64-LAMCAS-NEXT:    ret1582;1583; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_0_i16_release:1584; LA64-LAMCAS-LAM-BH:       # %bb.0:1585; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.h $a1, $zero, $a01586; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a11587; LA64-LAMCAS-LAM-BH-NEXT:    ret1588  %1 = atomicrmw xchg ptr %a, i16 0 release1589  ret i16 %11590}1591 1592define i16 @atomicrmw_xchg_minus_1_i16_release(ptr %a) nounwind {1593; LA64-LABEL: atomicrmw_xchg_minus_1_i16_release:1594; LA64:       # %bb.0:1595; LA64-NEXT:    slli.d $a1, $a0, 31596; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01597; LA64-NEXT:    lu12i.w $a2, 151598; LA64-NEXT:    ori $a2, $a2, 40951599; LA64-NEXT:    sll.w $a2, $a2, $a11600; LA64-NEXT:    amor_db.w $a3, $a2, $a01601; LA64-NEXT:    srl.w $a0, $a3, $a11602; LA64-NEXT:    ret1603;1604; LA64-LAMCAS-LABEL: atomicrmw_xchg_minus_1_i16_release:1605; LA64-LAMCAS:       # %bb.0:1606; LA64-LAMCAS-NEXT:    move $a1, $a01607; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 01608; LA64-LAMCAS-NEXT:    addi.w $a2, $zero, -11609; LA64-LAMCAS-NEXT:    .p2align 4, , 161610; LA64-LAMCAS-NEXT:  .LBB33_1: # %atomicrmw.start1611; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11612; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a01613; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a2, $a11614; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB33_11615; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1616; LA64-LAMCAS-NEXT:    ret1617;1618; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_minus_1_i16_release:1619; LA64-LAMCAS-LAM-BH:       # %bb.0:1620; LA64-LAMCAS-LAM-BH-NEXT:    addi.w $a2, $zero, -11621; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.h $a1, $a2, $a01622; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a11623; LA64-LAMCAS-LAM-BH-NEXT:    ret1624  %1 = atomicrmw xchg ptr %a, i16 -1 release1625  ret i16 %11626 1627}1628 1629define i8 @atomicrmw_add_i8_release(ptr %a, i8 %b) nounwind {1630; LA64-LABEL: atomicrmw_add_i8_release:1631; LA64:       # %bb.0:1632; LA64-NEXT:    slli.d $a2, $a0, 31633; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01634; LA64-NEXT:    ori $a3, $zero, 2551635; LA64-NEXT:    sll.w $a3, $a3, $a21636; LA64-NEXT:    andi $a1, $a1, 2551637; LA64-NEXT:    sll.w $a1, $a1, $a21638; LA64-NEXT:  .LBB34_1: # =>This Inner Loop Header: Depth=11639; LA64-NEXT:    ll.w $a4, $a0, 01640; LA64-NEXT:    add.w $a5, $a4, $a11641; LA64-NEXT:    xor $a5, $a4, $a51642; LA64-NEXT:    and $a5, $a5, $a31643; LA64-NEXT:    xor $a5, $a4, $a51644; LA64-NEXT:    sc.w $a5, $a0, 01645; LA64-NEXT:    beq $a5, $zero, .LBB34_11646; LA64-NEXT:  # %bb.2:1647; LA64-NEXT:    srl.w $a0, $a4, $a21648; LA64-NEXT:    ret1649;1650; LA64-LAMCAS-LABEL: atomicrmw_add_i8_release:1651; LA64-LAMCAS:       # %bb.0:1652; LA64-LAMCAS-NEXT:    move $a2, $a01653; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 01654; LA64-LAMCAS-NEXT:    .p2align 4, , 161655; LA64-LAMCAS-NEXT:  .LBB34_1: # %atomicrmw.start1656; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11657; LA64-LAMCAS-NEXT:    add.d $a3, $a0, $a11658; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a01659; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a3, $a21660; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB34_11661; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1662; LA64-LAMCAS-NEXT:    ret1663;1664; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_add_i8_release:1665; LA64-LAMCAS-LAM-BH:       # %bb.0:1666; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.b $a2, $a1, $a01667; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a21668; LA64-LAMCAS-LAM-BH-NEXT:    ret1669  %1 = atomicrmw add ptr %a, i8 %b release1670  ret i8 %11671}1672 1673define i16 @atomicrmw_add_i16_release(ptr %a, i16 %b) nounwind {1674; LA64-LABEL: atomicrmw_add_i16_release:1675; LA64:       # %bb.0:1676; LA64-NEXT:    slli.d $a2, $a0, 31677; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01678; LA64-NEXT:    lu12i.w $a3, 151679; LA64-NEXT:    ori $a3, $a3, 40951680; LA64-NEXT:    sll.w $a3, $a3, $a21681; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 01682; LA64-NEXT:    sll.w $a1, $a1, $a21683; LA64-NEXT:  .LBB35_1: # =>This Inner Loop Header: Depth=11684; LA64-NEXT:    ll.w $a4, $a0, 01685; LA64-NEXT:    add.w $a5, $a4, $a11686; LA64-NEXT:    xor $a5, $a4, $a51687; LA64-NEXT:    and $a5, $a5, $a31688; LA64-NEXT:    xor $a5, $a4, $a51689; LA64-NEXT:    sc.w $a5, $a0, 01690; LA64-NEXT:    beq $a5, $zero, .LBB35_11691; LA64-NEXT:  # %bb.2:1692; LA64-NEXT:    srl.w $a0, $a4, $a21693; LA64-NEXT:    ret1694;1695; LA64-LAMCAS-LABEL: atomicrmw_add_i16_release:1696; LA64-LAMCAS:       # %bb.0:1697; LA64-LAMCAS-NEXT:    move $a2, $a01698; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 01699; LA64-LAMCAS-NEXT:    .p2align 4, , 161700; LA64-LAMCAS-NEXT:  .LBB35_1: # %atomicrmw.start1701; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11702; LA64-LAMCAS-NEXT:    add.d $a3, $a0, $a11703; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a01704; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a3, $a21705; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB35_11706; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1707; LA64-LAMCAS-NEXT:    ret1708;1709; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_add_i16_release:1710; LA64-LAMCAS-LAM-BH:       # %bb.0:1711; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.h $a2, $a1, $a01712; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a21713; LA64-LAMCAS-LAM-BH-NEXT:    ret1714  %1 = atomicrmw add ptr %a, i16 %b release1715  ret i16 %11716 1717}1718 1719define i8 @atomicrmw_sub_i8_release(ptr %a, i8 %b) nounwind {1720; LA64-LABEL: atomicrmw_sub_i8_release:1721; LA64:       # %bb.0:1722; LA64-NEXT:    slli.d $a2, $a0, 31723; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01724; LA64-NEXT:    ori $a3, $zero, 2551725; LA64-NEXT:    sll.w $a3, $a3, $a21726; LA64-NEXT:    andi $a1, $a1, 2551727; LA64-NEXT:    sll.w $a1, $a1, $a21728; LA64-NEXT:  .LBB36_1: # =>This Inner Loop Header: Depth=11729; LA64-NEXT:    ll.w $a4, $a0, 01730; LA64-NEXT:    sub.w $a5, $a4, $a11731; LA64-NEXT:    xor $a5, $a4, $a51732; LA64-NEXT:    and $a5, $a5, $a31733; LA64-NEXT:    xor $a5, $a4, $a51734; LA64-NEXT:    sc.w $a5, $a0, 01735; LA64-NEXT:    beq $a5, $zero, .LBB36_11736; LA64-NEXT:  # %bb.2:1737; LA64-NEXT:    srl.w $a0, $a4, $a21738; LA64-NEXT:    ret1739;1740; LA64-LAMCAS-LABEL: atomicrmw_sub_i8_release:1741; LA64-LAMCAS:       # %bb.0:1742; LA64-LAMCAS-NEXT:    move $a2, $a01743; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 01744; LA64-LAMCAS-NEXT:    .p2align 4, , 161745; LA64-LAMCAS-NEXT:  .LBB36_1: # %atomicrmw.start1746; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11747; LA64-LAMCAS-NEXT:    sub.d $a3, $a0, $a11748; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a01749; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a3, $a21750; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB36_11751; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1752; LA64-LAMCAS-NEXT:    ret1753;1754; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_sub_i8_release:1755; LA64-LAMCAS-LAM-BH:       # %bb.0:1756; LA64-LAMCAS-LAM-BH-NEXT:    sub.w $a2, $zero, $a11757; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.b $a1, $a2, $a01758; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a11759; LA64-LAMCAS-LAM-BH-NEXT:    ret1760  %1 = atomicrmw sub ptr %a, i8 %b release1761  ret i8 %11762}1763 1764define i16 @atomicrmw_sub_i16_release(ptr %a, i16 %b) nounwind {1765; LA64-LABEL: atomicrmw_sub_i16_release:1766; LA64:       # %bb.0:1767; LA64-NEXT:    slli.d $a2, $a0, 31768; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01769; LA64-NEXT:    lu12i.w $a3, 151770; LA64-NEXT:    ori $a3, $a3, 40951771; LA64-NEXT:    sll.w $a3, $a3, $a21772; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 01773; LA64-NEXT:    sll.w $a1, $a1, $a21774; LA64-NEXT:  .LBB37_1: # =>This Inner Loop Header: Depth=11775; LA64-NEXT:    ll.w $a4, $a0, 01776; LA64-NEXT:    sub.w $a5, $a4, $a11777; LA64-NEXT:    xor $a5, $a4, $a51778; LA64-NEXT:    and $a5, $a5, $a31779; LA64-NEXT:    xor $a5, $a4, $a51780; LA64-NEXT:    sc.w $a5, $a0, 01781; LA64-NEXT:    beq $a5, $zero, .LBB37_11782; LA64-NEXT:  # %bb.2:1783; LA64-NEXT:    srl.w $a0, $a4, $a21784; LA64-NEXT:    ret1785;1786; LA64-LAMCAS-LABEL: atomicrmw_sub_i16_release:1787; LA64-LAMCAS:       # %bb.0:1788; LA64-LAMCAS-NEXT:    move $a2, $a01789; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 01790; LA64-LAMCAS-NEXT:    .p2align 4, , 161791; LA64-LAMCAS-NEXT:  .LBB37_1: # %atomicrmw.start1792; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11793; LA64-LAMCAS-NEXT:    sub.d $a3, $a0, $a11794; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a01795; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a3, $a21796; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB37_11797; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1798; LA64-LAMCAS-NEXT:    ret1799;1800; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_sub_i16_release:1801; LA64-LAMCAS-LAM-BH:       # %bb.0:1802; LA64-LAMCAS-LAM-BH-NEXT:    sub.w $a2, $zero, $a11803; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.h $a1, $a2, $a01804; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a11805; LA64-LAMCAS-LAM-BH-NEXT:    ret1806  %1 = atomicrmw sub ptr %a, i16 %b release1807  ret i16 %11808 1809}1810 1811define i8 @atomicrmw_umax_i8_release(ptr %a, i8 %b) nounwind {1812; LA64-LABEL: atomicrmw_umax_i8_release:1813; LA64:       # %bb.0:1814; LA64-NEXT:    slli.d $a2, $a0, 31815; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01816; LA64-NEXT:    ori $a3, $zero, 2551817; LA64-NEXT:    sll.w $a3, $a3, $a21818; LA64-NEXT:    andi $a1, $a1, 2551819; LA64-NEXT:    sll.w $a1, $a1, $a21820; LA64-NEXT:  .LBB38_1: # =>This Inner Loop Header: Depth=11821; LA64-NEXT:    ll.w $a4, $a0, 01822; LA64-NEXT:    and $a6, $a4, $a31823; LA64-NEXT:    move $a5, $a41824; LA64-NEXT:    bgeu $a6, $a1, .LBB38_31825; LA64-NEXT:  # %bb.2: # in Loop: Header=BB38_1 Depth=11826; LA64-NEXT:    xor $a5, $a4, $a11827; LA64-NEXT:    and $a5, $a5, $a31828; LA64-NEXT:    xor $a5, $a4, $a51829; LA64-NEXT:  .LBB38_3: # in Loop: Header=BB38_1 Depth=11830; LA64-NEXT:    sc.w $a5, $a0, 01831; LA64-NEXT:    beq $a5, $zero, .LBB38_11832; LA64-NEXT:  # %bb.4:1833; LA64-NEXT:    srl.w $a0, $a4, $a21834; LA64-NEXT:    ret1835;1836; LA64-LAMCAS-LABEL: atomicrmw_umax_i8_release:1837; LA64-LAMCAS:       # %bb.0:1838; LA64-LAMCAS-NEXT:    move $a2, $a01839; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 01840; LA64-LAMCAS-NEXT:    andi $a3, $a1, 2551841; LA64-LAMCAS-NEXT:    .p2align 4, , 161842; LA64-LAMCAS-NEXT:  .LBB38_1: # %atomicrmw.start1843; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11844; LA64-LAMCAS-NEXT:    andi $a4, $a0, 2551845; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a41846; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a41847; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a41848; LA64-LAMCAS-NEXT:    or $a4, $a4, $a51849; LA64-LAMCAS-NEXT:    ext.w.b $a5, $a01850; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a4, $a21851; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB38_11852; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1853; LA64-LAMCAS-NEXT:    ret1854;1855; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umax_i8_release:1856; LA64-LAMCAS-LAM-BH:       # %bb.0:1857; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a01858; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 01859; LA64-LAMCAS-LAM-BH-NEXT:    andi $a3, $a1, 2551860; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 161861; LA64-LAMCAS-LAM-BH-NEXT:  .LBB38_1: # %atomicrmw.start1862; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=11863; LA64-LAMCAS-LAM-BH-NEXT:    andi $a4, $a0, 2551864; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a41865; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a41866; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a41867; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a51868; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a5, $a01869; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a4, $a21870; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB38_11871; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end1872; LA64-LAMCAS-LAM-BH-NEXT:    ret1873  %1 = atomicrmw umax ptr %a, i8 %b release1874  ret i8 %11875}1876 1877define i16 @atomicrmw_umax_i16_release(ptr %a, i16 %b) nounwind {1878; LA64-LABEL: atomicrmw_umax_i16_release:1879; LA64:       # %bb.0:1880; LA64-NEXT:    slli.d $a2, $a0, 31881; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01882; LA64-NEXT:    lu12i.w $a3, 151883; LA64-NEXT:    ori $a3, $a3, 40951884; LA64-NEXT:    sll.w $a3, $a3, $a21885; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 01886; LA64-NEXT:    sll.w $a1, $a1, $a21887; LA64-NEXT:  .LBB39_1: # =>This Inner Loop Header: Depth=11888; LA64-NEXT:    ll.w $a4, $a0, 01889; LA64-NEXT:    and $a6, $a4, $a31890; LA64-NEXT:    move $a5, $a41891; LA64-NEXT:    bgeu $a6, $a1, .LBB39_31892; LA64-NEXT:  # %bb.2: # in Loop: Header=BB39_1 Depth=11893; LA64-NEXT:    xor $a5, $a4, $a11894; LA64-NEXT:    and $a5, $a5, $a31895; LA64-NEXT:    xor $a5, $a4, $a51896; LA64-NEXT:  .LBB39_3: # in Loop: Header=BB39_1 Depth=11897; LA64-NEXT:    sc.w $a5, $a0, 01898; LA64-NEXT:    beq $a5, $zero, .LBB39_11899; LA64-NEXT:  # %bb.4:1900; LA64-NEXT:    srl.w $a0, $a4, $a21901; LA64-NEXT:    ret1902;1903; LA64-LAMCAS-LABEL: atomicrmw_umax_i16_release:1904; LA64-LAMCAS:       # %bb.0:1905; LA64-LAMCAS-NEXT:    move $a2, $a01906; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 01907; LA64-LAMCAS-NEXT:    bstrpick.d $a3, $a1, 15, 01908; LA64-LAMCAS-NEXT:    .p2align 4, , 161909; LA64-LAMCAS-NEXT:  .LBB39_1: # %atomicrmw.start1910; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11911; LA64-LAMCAS-NEXT:    bstrpick.d $a4, $a0, 15, 01912; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a41913; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a41914; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a41915; LA64-LAMCAS-NEXT:    or $a4, $a4, $a51916; LA64-LAMCAS-NEXT:    ext.w.h $a5, $a01917; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a4, $a21918; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB39_11919; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1920; LA64-LAMCAS-NEXT:    ret1921;1922; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umax_i16_release:1923; LA64-LAMCAS-LAM-BH:       # %bb.0:1924; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a01925; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 01926; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a3, $a1, 15, 01927; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 161928; LA64-LAMCAS-LAM-BH-NEXT:  .LBB39_1: # %atomicrmw.start1929; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=11930; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a4, $a0, 15, 01931; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a41932; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a41933; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a41934; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a51935; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a5, $a01936; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a4, $a21937; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB39_11938; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end1939; LA64-LAMCAS-LAM-BH-NEXT:    ret1940  %1 = atomicrmw umax ptr %a, i16 %b release1941  ret i16 %11942}1943 1944define i8 @atomicrmw_umin_i8_release(ptr %a, i8 %b) nounwind {1945; LA64-LABEL: atomicrmw_umin_i8_release:1946; LA64:       # %bb.0:1947; LA64-NEXT:    slli.d $a2, $a0, 31948; LA64-NEXT:    bstrins.d $a0, $zero, 1, 01949; LA64-NEXT:    ori $a3, $zero, 2551950; LA64-NEXT:    sll.w $a3, $a3, $a21951; LA64-NEXT:    andi $a1, $a1, 2551952; LA64-NEXT:    sll.w $a1, $a1, $a21953; LA64-NEXT:  .LBB40_1: # =>This Inner Loop Header: Depth=11954; LA64-NEXT:    ll.w $a4, $a0, 01955; LA64-NEXT:    and $a6, $a4, $a31956; LA64-NEXT:    move $a5, $a41957; LA64-NEXT:    bgeu $a1, $a6, .LBB40_31958; LA64-NEXT:  # %bb.2: # in Loop: Header=BB40_1 Depth=11959; LA64-NEXT:    xor $a5, $a4, $a11960; LA64-NEXT:    and $a5, $a5, $a31961; LA64-NEXT:    xor $a5, $a4, $a51962; LA64-NEXT:  .LBB40_3: # in Loop: Header=BB40_1 Depth=11963; LA64-NEXT:    sc.w $a5, $a0, 01964; LA64-NEXT:    beq $a5, $zero, .LBB40_11965; LA64-NEXT:  # %bb.4:1966; LA64-NEXT:    srl.w $a0, $a4, $a21967; LA64-NEXT:    ret1968;1969; LA64-LAMCAS-LABEL: atomicrmw_umin_i8_release:1970; LA64-LAMCAS:       # %bb.0:1971; LA64-LAMCAS-NEXT:    move $a2, $a01972; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 01973; LA64-LAMCAS-NEXT:    andi $a3, $a1, 2551974; LA64-LAMCAS-NEXT:    .p2align 4, , 161975; LA64-LAMCAS-NEXT:  .LBB40_1: # %atomicrmw.start1976; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=11977; LA64-LAMCAS-NEXT:    andi $a4, $a0, 2551978; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a41979; LA64-LAMCAS-NEXT:    xori $a4, $a4, 11980; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a41981; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a41982; LA64-LAMCAS-NEXT:    or $a4, $a4, $a51983; LA64-LAMCAS-NEXT:    ext.w.b $a5, $a01984; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a4, $a21985; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB40_11986; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end1987; LA64-LAMCAS-NEXT:    ret1988;1989; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umin_i8_release:1990; LA64-LAMCAS-LAM-BH:       # %bb.0:1991; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a01992; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 01993; LA64-LAMCAS-LAM-BH-NEXT:    andi $a3, $a1, 2551994; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 161995; LA64-LAMCAS-LAM-BH-NEXT:  .LBB40_1: # %atomicrmw.start1996; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=11997; LA64-LAMCAS-LAM-BH-NEXT:    andi $a4, $a0, 2551998; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a41999; LA64-LAMCAS-LAM-BH-NEXT:    xori $a4, $a4, 12000; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a42001; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a42002; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a52003; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a5, $a02004; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a4, $a22005; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB40_12006; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end2007; LA64-LAMCAS-LAM-BH-NEXT:    ret2008  %1 = atomicrmw umin ptr %a, i8 %b release2009  ret i8 %12010}2011 2012define i16 @atomicrmw_umin_i16_release(ptr %a, i16 %b) nounwind {2013; LA64-LABEL: atomicrmw_umin_i16_release:2014; LA64:       # %bb.0:2015; LA64-NEXT:    slli.d $a2, $a0, 32016; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02017; LA64-NEXT:    lu12i.w $a3, 152018; LA64-NEXT:    ori $a3, $a3, 40952019; LA64-NEXT:    sll.w $a3, $a3, $a22020; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 02021; LA64-NEXT:    sll.w $a1, $a1, $a22022; LA64-NEXT:  .LBB41_1: # =>This Inner Loop Header: Depth=12023; LA64-NEXT:    ll.w $a4, $a0, 02024; LA64-NEXT:    and $a6, $a4, $a32025; LA64-NEXT:    move $a5, $a42026; LA64-NEXT:    bgeu $a1, $a6, .LBB41_32027; LA64-NEXT:  # %bb.2: # in Loop: Header=BB41_1 Depth=12028; LA64-NEXT:    xor $a5, $a4, $a12029; LA64-NEXT:    and $a5, $a5, $a32030; LA64-NEXT:    xor $a5, $a4, $a52031; LA64-NEXT:  .LBB41_3: # in Loop: Header=BB41_1 Depth=12032; LA64-NEXT:    sc.w $a5, $a0, 02033; LA64-NEXT:    beq $a5, $zero, .LBB41_12034; LA64-NEXT:  # %bb.4:2035; LA64-NEXT:    srl.w $a0, $a4, $a22036; LA64-NEXT:    ret2037;2038; LA64-LAMCAS-LABEL: atomicrmw_umin_i16_release:2039; LA64-LAMCAS:       # %bb.0:2040; LA64-LAMCAS-NEXT:    move $a2, $a02041; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 02042; LA64-LAMCAS-NEXT:    bstrpick.d $a3, $a1, 15, 02043; LA64-LAMCAS-NEXT:    .p2align 4, , 162044; LA64-LAMCAS-NEXT:  .LBB41_1: # %atomicrmw.start2045; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=12046; LA64-LAMCAS-NEXT:    bstrpick.d $a4, $a0, 15, 02047; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a42048; LA64-LAMCAS-NEXT:    xori $a4, $a4, 12049; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a42050; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a42051; LA64-LAMCAS-NEXT:    or $a4, $a4, $a52052; LA64-LAMCAS-NEXT:    ext.w.h $a5, $a02053; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a4, $a22054; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB41_12055; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end2056; LA64-LAMCAS-NEXT:    ret2057;2058; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umin_i16_release:2059; LA64-LAMCAS-LAM-BH:       # %bb.0:2060; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a02061; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 02062; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a3, $a1, 15, 02063; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 162064; LA64-LAMCAS-LAM-BH-NEXT:  .LBB41_1: # %atomicrmw.start2065; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=12066; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a4, $a0, 15, 02067; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a42068; LA64-LAMCAS-LAM-BH-NEXT:    xori $a4, $a4, 12069; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a42070; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a42071; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a52072; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a5, $a02073; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a4, $a22074; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB41_12075; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end2076; LA64-LAMCAS-LAM-BH-NEXT:    ret2077  %1 = atomicrmw umin ptr %a, i16 %b release2078  ret i16 %12079}2080 2081define i8 @atomicrmw_max_i8_release(ptr %a, i8 %b) nounwind {2082; LA64-LABEL: atomicrmw_max_i8_release:2083; LA64:       # %bb.0:2084; LA64-NEXT:    slli.d $a2, $a0, 32085; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02086; LA64-NEXT:    andi $a3, $a2, 242087; LA64-NEXT:    ori $a4, $zero, 2552088; LA64-NEXT:    sll.w $a4, $a4, $a22089; LA64-NEXT:    ext.w.b $a1, $a12090; LA64-NEXT:    sll.w $a1, $a1, $a22091; LA64-NEXT:    xori $a3, $a3, 562092; LA64-NEXT:  .LBB42_1: # =>This Inner Loop Header: Depth=12093; LA64-NEXT:    ll.w $a5, $a0, 02094; LA64-NEXT:    and $a7, $a5, $a42095; LA64-NEXT:    move $a6, $a52096; LA64-NEXT:    sll.w $a7, $a7, $a32097; LA64-NEXT:    sra.w $a7, $a7, $a32098; LA64-NEXT:    bge $a7, $a1, .LBB42_32099; LA64-NEXT:  # %bb.2: # in Loop: Header=BB42_1 Depth=12100; LA64-NEXT:    xor $a6, $a5, $a12101; LA64-NEXT:    and $a6, $a6, $a42102; LA64-NEXT:    xor $a6, $a5, $a62103; LA64-NEXT:  .LBB42_3: # in Loop: Header=BB42_1 Depth=12104; LA64-NEXT:    sc.w $a6, $a0, 02105; LA64-NEXT:    beq $a6, $zero, .LBB42_12106; LA64-NEXT:  # %bb.4:2107; LA64-NEXT:    srl.w $a0, $a5, $a22108; LA64-NEXT:    ret2109;2110; LA64-LAMCAS-LABEL: atomicrmw_max_i8_release:2111; LA64-LAMCAS:       # %bb.0:2112; LA64-LAMCAS-NEXT:    move $a2, $a02113; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 02114; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a12115; LA64-LAMCAS-NEXT:    .p2align 4, , 162116; LA64-LAMCAS-NEXT:  .LBB42_1: # %atomicrmw.start2117; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=12118; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a02119; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a42120; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a52121; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a52122; LA64-LAMCAS-NEXT:    or $a5, $a5, $a62123; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a5, $a22124; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB42_12125; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end2126; LA64-LAMCAS-NEXT:    ret2127;2128; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_max_i8_release:2129; LA64-LAMCAS-LAM-BH:       # %bb.0:2130; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a02131; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 02132; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a3, $a12133; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 162134; LA64-LAMCAS-LAM-BH-NEXT:  .LBB42_1: # %atomicrmw.start2135; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=12136; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a4, $a02137; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a42138; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a52139; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a52140; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a62141; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a5, $a22142; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB42_12143; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end2144; LA64-LAMCAS-LAM-BH-NEXT:    ret2145  %1 = atomicrmw max ptr %a, i8 %b release2146  ret i8 %12147}2148 2149define i16 @atomicrmw_max_i16_release(ptr %a, i16 %b) nounwind {2150; LA64-LABEL: atomicrmw_max_i16_release:2151; LA64:       # %bb.0:2152; LA64-NEXT:    slli.d $a2, $a0, 32153; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02154; LA64-NEXT:    andi $a3, $a2, 242155; LA64-NEXT:    lu12i.w $a4, 152156; LA64-NEXT:    ori $a4, $a4, 40952157; LA64-NEXT:    sll.w $a4, $a4, $a22158; LA64-NEXT:    ext.w.h $a1, $a12159; LA64-NEXT:    sll.w $a1, $a1, $a22160; LA64-NEXT:    ori $a5, $zero, 482161; LA64-NEXT:    sub.d $a3, $a5, $a32162; LA64-NEXT:  .LBB43_1: # =>This Inner Loop Header: Depth=12163; LA64-NEXT:    ll.w $a5, $a0, 02164; LA64-NEXT:    and $a7, $a5, $a42165; LA64-NEXT:    move $a6, $a52166; LA64-NEXT:    sll.w $a7, $a7, $a32167; LA64-NEXT:    sra.w $a7, $a7, $a32168; LA64-NEXT:    bge $a7, $a1, .LBB43_32169; LA64-NEXT:  # %bb.2: # in Loop: Header=BB43_1 Depth=12170; LA64-NEXT:    xor $a6, $a5, $a12171; LA64-NEXT:    and $a6, $a6, $a42172; LA64-NEXT:    xor $a6, $a5, $a62173; LA64-NEXT:  .LBB43_3: # in Loop: Header=BB43_1 Depth=12174; LA64-NEXT:    sc.w $a6, $a0, 02175; LA64-NEXT:    beq $a6, $zero, .LBB43_12176; LA64-NEXT:  # %bb.4:2177; LA64-NEXT:    srl.w $a0, $a5, $a22178; LA64-NEXT:    ret2179;2180; LA64-LAMCAS-LABEL: atomicrmw_max_i16_release:2181; LA64-LAMCAS:       # %bb.0:2182; LA64-LAMCAS-NEXT:    move $a2, $a02183; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 02184; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a12185; LA64-LAMCAS-NEXT:    .p2align 4, , 162186; LA64-LAMCAS-NEXT:  .LBB43_1: # %atomicrmw.start2187; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=12188; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a02189; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a42190; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a52191; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a52192; LA64-LAMCAS-NEXT:    or $a5, $a5, $a62193; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a5, $a22194; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB43_12195; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end2196; LA64-LAMCAS-NEXT:    ret2197;2198; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_max_i16_release:2199; LA64-LAMCAS-LAM-BH:       # %bb.0:2200; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a02201; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 02202; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a3, $a12203; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 162204; LA64-LAMCAS-LAM-BH-NEXT:  .LBB43_1: # %atomicrmw.start2205; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=12206; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a4, $a02207; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a42208; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a52209; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a52210; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a62211; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a5, $a22212; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB43_12213; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end2214; LA64-LAMCAS-LAM-BH-NEXT:    ret2215  %1 = atomicrmw max ptr %a, i16 %b release2216  ret i16 %12217}2218 2219define i8 @atomicrmw_min_i8_release(ptr %a, i8 %b) nounwind {2220; LA64-LABEL: atomicrmw_min_i8_release:2221; LA64:       # %bb.0:2222; LA64-NEXT:    slli.d $a2, $a0, 32223; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02224; LA64-NEXT:    andi $a3, $a2, 242225; LA64-NEXT:    ori $a4, $zero, 2552226; LA64-NEXT:    sll.w $a4, $a4, $a22227; LA64-NEXT:    ext.w.b $a1, $a12228; LA64-NEXT:    sll.w $a1, $a1, $a22229; LA64-NEXT:    xori $a3, $a3, 562230; LA64-NEXT:  .LBB44_1: # =>This Inner Loop Header: Depth=12231; LA64-NEXT:    ll.w $a5, $a0, 02232; LA64-NEXT:    and $a7, $a5, $a42233; LA64-NEXT:    move $a6, $a52234; LA64-NEXT:    sll.w $a7, $a7, $a32235; LA64-NEXT:    sra.w $a7, $a7, $a32236; LA64-NEXT:    bge $a1, $a7, .LBB44_32237; LA64-NEXT:  # %bb.2: # in Loop: Header=BB44_1 Depth=12238; LA64-NEXT:    xor $a6, $a5, $a12239; LA64-NEXT:    and $a6, $a6, $a42240; LA64-NEXT:    xor $a6, $a5, $a62241; LA64-NEXT:  .LBB44_3: # in Loop: Header=BB44_1 Depth=12242; LA64-NEXT:    sc.w $a6, $a0, 02243; LA64-NEXT:    beq $a6, $zero, .LBB44_12244; LA64-NEXT:  # %bb.4:2245; LA64-NEXT:    srl.w $a0, $a5, $a22246; LA64-NEXT:    ret2247;2248; LA64-LAMCAS-LABEL: atomicrmw_min_i8_release:2249; LA64-LAMCAS:       # %bb.0:2250; LA64-LAMCAS-NEXT:    move $a2, $a02251; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 02252; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a12253; LA64-LAMCAS-NEXT:    .p2align 4, , 162254; LA64-LAMCAS-NEXT:  .LBB44_1: # %atomicrmw.start2255; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=12256; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a02257; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a42258; LA64-LAMCAS-NEXT:    xori $a5, $a5, 12259; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a52260; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a52261; LA64-LAMCAS-NEXT:    or $a5, $a5, $a62262; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a5, $a22263; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB44_12264; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end2265; LA64-LAMCAS-NEXT:    ret2266;2267; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_min_i8_release:2268; LA64-LAMCAS-LAM-BH:       # %bb.0:2269; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a02270; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 02271; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a3, $a12272; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 162273; LA64-LAMCAS-LAM-BH-NEXT:  .LBB44_1: # %atomicrmw.start2274; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=12275; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a4, $a02276; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a42277; LA64-LAMCAS-LAM-BH-NEXT:    xori $a5, $a5, 12278; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a52279; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a52280; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a62281; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a5, $a22282; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB44_12283; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end2284; LA64-LAMCAS-LAM-BH-NEXT:    ret2285  %1 = atomicrmw min ptr %a, i8 %b release2286  ret i8 %12287}2288 2289define i16 @atomicrmw_min_i16_release(ptr %a, i16 %b) nounwind {2290; LA64-LABEL: atomicrmw_min_i16_release:2291; LA64:       # %bb.0:2292; LA64-NEXT:    slli.d $a2, $a0, 32293; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02294; LA64-NEXT:    andi $a3, $a2, 242295; LA64-NEXT:    lu12i.w $a4, 152296; LA64-NEXT:    ori $a4, $a4, 40952297; LA64-NEXT:    sll.w $a4, $a4, $a22298; LA64-NEXT:    ext.w.h $a1, $a12299; LA64-NEXT:    sll.w $a1, $a1, $a22300; LA64-NEXT:    ori $a5, $zero, 482301; LA64-NEXT:    sub.d $a3, $a5, $a32302; LA64-NEXT:  .LBB45_1: # =>This Inner Loop Header: Depth=12303; LA64-NEXT:    ll.w $a5, $a0, 02304; LA64-NEXT:    and $a7, $a5, $a42305; LA64-NEXT:    move $a6, $a52306; LA64-NEXT:    sll.w $a7, $a7, $a32307; LA64-NEXT:    sra.w $a7, $a7, $a32308; LA64-NEXT:    bge $a1, $a7, .LBB45_32309; LA64-NEXT:  # %bb.2: # in Loop: Header=BB45_1 Depth=12310; LA64-NEXT:    xor $a6, $a5, $a12311; LA64-NEXT:    and $a6, $a6, $a42312; LA64-NEXT:    xor $a6, $a5, $a62313; LA64-NEXT:  .LBB45_3: # in Loop: Header=BB45_1 Depth=12314; LA64-NEXT:    sc.w $a6, $a0, 02315; LA64-NEXT:    beq $a6, $zero, .LBB45_12316; LA64-NEXT:  # %bb.4:2317; LA64-NEXT:    srl.w $a0, $a5, $a22318; LA64-NEXT:    ret2319;2320; LA64-LAMCAS-LABEL: atomicrmw_min_i16_release:2321; LA64-LAMCAS:       # %bb.0:2322; LA64-LAMCAS-NEXT:    move $a2, $a02323; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 02324; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a12325; LA64-LAMCAS-NEXT:    .p2align 4, , 162326; LA64-LAMCAS-NEXT:  .LBB45_1: # %atomicrmw.start2327; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=12328; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a02329; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a42330; LA64-LAMCAS-NEXT:    xori $a5, $a5, 12331; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a52332; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a52333; LA64-LAMCAS-NEXT:    or $a5, $a5, $a62334; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a5, $a22335; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB45_12336; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end2337; LA64-LAMCAS-NEXT:    ret2338;2339; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_min_i16_release:2340; LA64-LAMCAS-LAM-BH:       # %bb.0:2341; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a02342; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 02343; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a3, $a12344; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 162345; LA64-LAMCAS-LAM-BH-NEXT:  .LBB45_1: # %atomicrmw.start2346; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=12347; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a4, $a02348; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a42349; LA64-LAMCAS-LAM-BH-NEXT:    xori $a5, $a5, 12350; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a52351; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a52352; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a62353; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a5, $a22354; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB45_12355; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end2356; LA64-LAMCAS-LAM-BH-NEXT:    ret2357  %1 = atomicrmw min ptr %a, i16 %b release2358  ret i16 %12359}2360 2361define i8 @atomicrmw_nand_i8_release(ptr %a, i8 %b) nounwind {2362; LA64-LABEL: atomicrmw_nand_i8_release:2363; LA64:       # %bb.0:2364; LA64-NEXT:    slli.d $a2, $a0, 32365; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02366; LA64-NEXT:    ori $a3, $zero, 2552367; LA64-NEXT:    sll.w $a3, $a3, $a22368; LA64-NEXT:    andi $a1, $a1, 2552369; LA64-NEXT:    sll.w $a1, $a1, $a22370; LA64-NEXT:  .LBB46_1: # =>This Inner Loop Header: Depth=12371; LA64-NEXT:    ll.w $a4, $a0, 02372; LA64-NEXT:    and $a5, $a4, $a12373; LA64-NEXT:    nor $a5, $a5, $zero2374; LA64-NEXT:    xor $a5, $a4, $a52375; LA64-NEXT:    and $a5, $a5, $a32376; LA64-NEXT:    xor $a5, $a4, $a52377; LA64-NEXT:    sc.w $a5, $a0, 02378; LA64-NEXT:    beq $a5, $zero, .LBB46_12379; LA64-NEXT:  # %bb.2:2380; LA64-NEXT:    srl.w $a0, $a4, $a22381; LA64-NEXT:    ret2382;2383; LA64-LAMCAS-LABEL: atomicrmw_nand_i8_release:2384; LA64-LAMCAS:       # %bb.0:2385; LA64-LAMCAS-NEXT:    move $a2, $a02386; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 02387; LA64-LAMCAS-NEXT:    .p2align 4, , 162388; LA64-LAMCAS-NEXT:  .LBB46_1: # %atomicrmw.start2389; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=12390; LA64-LAMCAS-NEXT:    and $a3, $a0, $a12391; LA64-LAMCAS-NEXT:    nor $a3, $a3, $zero2392; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a02393; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a3, $a22394; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB46_12395; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end2396; LA64-LAMCAS-NEXT:    ret2397;2398; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i8_release:2399; LA64-LAMCAS-LAM-BH:       # %bb.0:2400; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a02401; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 02402; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 162403; LA64-LAMCAS-LAM-BH-NEXT:  .LBB46_1: # %atomicrmw.start2404; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=12405; LA64-LAMCAS-LAM-BH-NEXT:    and $a3, $a0, $a12406; LA64-LAMCAS-LAM-BH-NEXT:    nor $a3, $a3, $zero2407; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a4, $a02408; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a3, $a22409; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB46_12410; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end2411; LA64-LAMCAS-LAM-BH-NEXT:    ret2412  %1 = atomicrmw nand ptr %a, i8 %b release2413  ret i8 %12414}2415 2416define i16 @atomicrmw_nand_i16_release(ptr %a, i16 %b) nounwind {2417; LA64-LABEL: atomicrmw_nand_i16_release:2418; LA64:       # %bb.0:2419; LA64-NEXT:    slli.d $a2, $a0, 32420; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02421; LA64-NEXT:    lu12i.w $a3, 152422; LA64-NEXT:    ori $a3, $a3, 40952423; LA64-NEXT:    sll.w $a3, $a3, $a22424; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 02425; LA64-NEXT:    sll.w $a1, $a1, $a22426; LA64-NEXT:  .LBB47_1: # =>This Inner Loop Header: Depth=12427; LA64-NEXT:    ll.w $a4, $a0, 02428; LA64-NEXT:    and $a5, $a4, $a12429; LA64-NEXT:    nor $a5, $a5, $zero2430; LA64-NEXT:    xor $a5, $a4, $a52431; LA64-NEXT:    and $a5, $a5, $a32432; LA64-NEXT:    xor $a5, $a4, $a52433; LA64-NEXT:    sc.w $a5, $a0, 02434; LA64-NEXT:    beq $a5, $zero, .LBB47_12435; LA64-NEXT:  # %bb.2:2436; LA64-NEXT:    srl.w $a0, $a4, $a22437; LA64-NEXT:    ret2438;2439; LA64-LAMCAS-LABEL: atomicrmw_nand_i16_release:2440; LA64-LAMCAS:       # %bb.0:2441; LA64-LAMCAS-NEXT:    move $a2, $a02442; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 02443; LA64-LAMCAS-NEXT:    .p2align 4, , 162444; LA64-LAMCAS-NEXT:  .LBB47_1: # %atomicrmw.start2445; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=12446; LA64-LAMCAS-NEXT:    and $a3, $a0, $a12447; LA64-LAMCAS-NEXT:    nor $a3, $a3, $zero2448; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a02449; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a3, $a22450; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB47_12451; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end2452; LA64-LAMCAS-NEXT:    ret2453;2454; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i16_release:2455; LA64-LAMCAS-LAM-BH:       # %bb.0:2456; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a02457; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 02458; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 162459; LA64-LAMCAS-LAM-BH-NEXT:  .LBB47_1: # %atomicrmw.start2460; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=12461; LA64-LAMCAS-LAM-BH-NEXT:    and $a3, $a0, $a12462; LA64-LAMCAS-LAM-BH-NEXT:    nor $a3, $a3, $zero2463; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a4, $a02464; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a3, $a22465; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB47_12466; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end2467; LA64-LAMCAS-LAM-BH-NEXT:    ret2468  %1 = atomicrmw nand ptr %a, i16 %b release2469  ret i16 %12470 2471}2472 2473define i32 @atomicrmw_nand_i32_release(ptr %a, i32 %b) nounwind {2474; LA64-LABEL: atomicrmw_nand_i32_release:2475; LA64:       # %bb.0:2476; LA64-NEXT:  .LBB48_1: # =>This Inner Loop Header: Depth=12477; LA64-NEXT:    ll.w $a2, $a0, 02478; LA64-NEXT:    and $a3, $a2, $a12479; LA64-NEXT:    nor $a3, $a3, $zero2480; LA64-NEXT:    sc.w $a3, $a0, 02481; LA64-NEXT:    beq $a3, $zero, .LBB48_12482; LA64-NEXT:  # %bb.2:2483; LA64-NEXT:    move $a0, $a22484; LA64-NEXT:    ret2485;2486; LA64-LAMCAS-LABEL: atomicrmw_nand_i32_release:2487; LA64-LAMCAS:       # %bb.0:2488; LA64-LAMCAS-NEXT:    move $a2, $a02489; LA64-LAMCAS-NEXT:    ld.w $a0, $a0, 02490; LA64-LAMCAS-NEXT:    .p2align 4, , 162491; LA64-LAMCAS-NEXT:  .LBB48_1: # %atomicrmw.start2492; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=12493; LA64-LAMCAS-NEXT:    move $a3, $a02494; LA64-LAMCAS-NEXT:    and $a4, $a0, $a12495; LA64-LAMCAS-NEXT:    nor $a4, $a4, $zero2496; LA64-LAMCAS-NEXT:    amcas_db.w $a0, $a4, $a22497; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB48_12498; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end2499; LA64-LAMCAS-NEXT:    ret2500;2501; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i32_release:2502; LA64-LAMCAS-LAM-BH:       # %bb.0:2503; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a02504; LA64-LAMCAS-LAM-BH-NEXT:    ld.w $a0, $a0, 02505; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 162506; LA64-LAMCAS-LAM-BH-NEXT:  .LBB48_1: # %atomicrmw.start2507; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=12508; LA64-LAMCAS-LAM-BH-NEXT:    move $a3, $a02509; LA64-LAMCAS-LAM-BH-NEXT:    and $a4, $a0, $a12510; LA64-LAMCAS-LAM-BH-NEXT:    nor $a4, $a4, $zero2511; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.w $a0, $a4, $a22512; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a3, .LBB48_12513; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end2514; LA64-LAMCAS-LAM-BH-NEXT:    ret2515    %1 = atomicrmw nand ptr %a, i32 %b release2516  ret i32 %12517}2518 2519define i64 @atomicrmw_nand_i64_release(ptr %a, i64 %b) nounwind {2520; LA64-LABEL: atomicrmw_nand_i64_release:2521; LA64:       # %bb.0:2522; LA64-NEXT:  .LBB49_1: # =>This Inner Loop Header: Depth=12523; LA64-NEXT:    ll.d $a2, $a0, 02524; LA64-NEXT:    and $a3, $a2, $a12525; LA64-NEXT:    nor $a3, $a3, $zero2526; LA64-NEXT:    sc.d $a3, $a0, 02527; LA64-NEXT:    beq $a3, $zero, .LBB49_12528; LA64-NEXT:  # %bb.2:2529; LA64-NEXT:    move $a0, $a22530; LA64-NEXT:    ret2531;2532; LA64-LAMCAS-LABEL: atomicrmw_nand_i64_release:2533; LA64-LAMCAS:       # %bb.0:2534; LA64-LAMCAS-NEXT:    move $a2, $a02535; LA64-LAMCAS-NEXT:    ld.d $a0, $a0, 02536; LA64-LAMCAS-NEXT:    .p2align 4, , 162537; LA64-LAMCAS-NEXT:  .LBB49_1: # %atomicrmw.start2538; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=12539; LA64-LAMCAS-NEXT:    move $a3, $a02540; LA64-LAMCAS-NEXT:    and $a4, $a0, $a12541; LA64-LAMCAS-NEXT:    nor $a4, $a4, $zero2542; LA64-LAMCAS-NEXT:    amcas_db.d $a0, $a4, $a22543; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB49_12544; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end2545; LA64-LAMCAS-NEXT:    ret2546;2547; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i64_release:2548; LA64-LAMCAS-LAM-BH:       # %bb.0:2549; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a02550; LA64-LAMCAS-LAM-BH-NEXT:    ld.d $a0, $a0, 02551; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 162552; LA64-LAMCAS-LAM-BH-NEXT:  .LBB49_1: # %atomicrmw.start2553; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=12554; LA64-LAMCAS-LAM-BH-NEXT:    move $a3, $a02555; LA64-LAMCAS-LAM-BH-NEXT:    and $a4, $a0, $a12556; LA64-LAMCAS-LAM-BH-NEXT:    nor $a4, $a4, $zero2557; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.d $a0, $a4, $a22558; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a3, .LBB49_12559; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end2560; LA64-LAMCAS-LAM-BH-NEXT:    ret2561  %1 = atomicrmw nand ptr %a, i64 %b release2562  ret i64 %12563}2564 2565define i8 @atomicrmw_and_i8_release(ptr %a, i8 %b) nounwind {2566; LA64-LABEL: atomicrmw_and_i8_release:2567; LA64:       # %bb.0:2568; LA64-NEXT:    slli.d $a2, $a0, 32569; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02570; LA64-NEXT:    ori $a3, $zero, 2552571; LA64-NEXT:    sll.w $a3, $a3, $a22572; LA64-NEXT:    andi $a1, $a1, 2552573; LA64-NEXT:    sll.w $a1, $a1, $a22574; LA64-NEXT:    orn $a1, $a1, $a32575; LA64-NEXT:    amand_db.w $a3, $a1, $a02576; LA64-NEXT:    srl.w $a0, $a3, $a22577; LA64-NEXT:    ret2578;2579; LA64-LAMCAS-LABEL: atomicrmw_and_i8_release:2580; LA64-LAMCAS:       # %bb.0:2581; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 32582; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 02583; LA64-LAMCAS-NEXT:    ori $a3, $zero, 2552584; LA64-LAMCAS-NEXT:    sll.w $a3, $a3, $a22585; LA64-LAMCAS-NEXT:    andi $a1, $a1, 2552586; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a22587; LA64-LAMCAS-NEXT:    orn $a1, $a1, $a32588; LA64-LAMCAS-NEXT:    amand_db.w $a3, $a1, $a02589; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a22590; LA64-LAMCAS-NEXT:    ret2591;2592; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_and_i8_release:2593; LA64-LAMCAS-LAM-BH:       # %bb.0:2594; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 32595; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 02596; LA64-LAMCAS-LAM-BH-NEXT:    ori $a3, $zero, 2552597; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a3, $a3, $a22598; LA64-LAMCAS-LAM-BH-NEXT:    andi $a1, $a1, 2552599; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a22600; LA64-LAMCAS-LAM-BH-NEXT:    orn $a1, $a1, $a32601; LA64-LAMCAS-LAM-BH-NEXT:    amand_db.w $a3, $a1, $a02602; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a22603; LA64-LAMCAS-LAM-BH-NEXT:    ret2604  %1 = atomicrmw and ptr %a, i8 %b release2605  ret i8 %12606}2607 2608define i16 @atomicrmw_and_i16_release(ptr %a, i16 %b) nounwind {2609; LA64-LABEL: atomicrmw_and_i16_release:2610; LA64:       # %bb.0:2611; LA64-NEXT:    slli.d $a2, $a0, 32612; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02613; LA64-NEXT:    lu12i.w $a3, 152614; LA64-NEXT:    ori $a3, $a3, 40952615; LA64-NEXT:    sll.w $a3, $a3, $a22616; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 02617; LA64-NEXT:    sll.w $a1, $a1, $a22618; LA64-NEXT:    orn $a1, $a1, $a32619; LA64-NEXT:    amand_db.w $a3, $a1, $a02620; LA64-NEXT:    srl.w $a0, $a3, $a22621; LA64-NEXT:    ret2622;2623; LA64-LAMCAS-LABEL: atomicrmw_and_i16_release:2624; LA64-LAMCAS:       # %bb.0:2625; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 32626; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 02627; LA64-LAMCAS-NEXT:    lu12i.w $a3, 152628; LA64-LAMCAS-NEXT:    ori $a3, $a3, 40952629; LA64-LAMCAS-NEXT:    sll.w $a3, $a3, $a22630; LA64-LAMCAS-NEXT:    bstrpick.d $a1, $a1, 15, 02631; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a22632; LA64-LAMCAS-NEXT:    orn $a1, $a1, $a32633; LA64-LAMCAS-NEXT:    amand_db.w $a3, $a1, $a02634; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a22635; LA64-LAMCAS-NEXT:    ret2636;2637; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_and_i16_release:2638; LA64-LAMCAS-LAM-BH:       # %bb.0:2639; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 32640; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 02641; LA64-LAMCAS-LAM-BH-NEXT:    lu12i.w $a3, 152642; LA64-LAMCAS-LAM-BH-NEXT:    ori $a3, $a3, 40952643; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a3, $a3, $a22644; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a1, $a1, 15, 02645; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a22646; LA64-LAMCAS-LAM-BH-NEXT:    orn $a1, $a1, $a32647; LA64-LAMCAS-LAM-BH-NEXT:    amand_db.w $a3, $a1, $a02648; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a22649; LA64-LAMCAS-LAM-BH-NEXT:    ret2650  %1 = atomicrmw and ptr %a, i16 %b release2651  ret i16 %12652 2653}2654 2655define i8 @atomicrmw_or_i8_release(ptr %a, i8 %b) nounwind {2656; LA64-LABEL: atomicrmw_or_i8_release:2657; LA64:       # %bb.0:2658; LA64-NEXT:    slli.d $a2, $a0, 32659; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02660; LA64-NEXT:    andi $a1, $a1, 2552661; LA64-NEXT:    sll.w $a1, $a1, $a22662; LA64-NEXT:    amor_db.w $a3, $a1, $a02663; LA64-NEXT:    srl.w $a0, $a3, $a22664; LA64-NEXT:    ret2665;2666; LA64-LAMCAS-LABEL: atomicrmw_or_i8_release:2667; LA64-LAMCAS:       # %bb.0:2668; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 32669; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 02670; LA64-LAMCAS-NEXT:    andi $a1, $a1, 2552671; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a22672; LA64-LAMCAS-NEXT:    amor_db.w $a3, $a1, $a02673; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a22674; LA64-LAMCAS-NEXT:    ret2675;2676; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_or_i8_release:2677; LA64-LAMCAS-LAM-BH:       # %bb.0:2678; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 32679; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 02680; LA64-LAMCAS-LAM-BH-NEXT:    andi $a1, $a1, 2552681; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a22682; LA64-LAMCAS-LAM-BH-NEXT:    amor_db.w $a3, $a1, $a02683; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a22684; LA64-LAMCAS-LAM-BH-NEXT:    ret2685  %1 = atomicrmw or ptr %a, i8 %b release2686  ret i8 %12687}2688 2689define i16 @atomicrmw_or_i16_release(ptr %a, i16 %b) nounwind {2690; LA64-LABEL: atomicrmw_or_i16_release:2691; LA64:       # %bb.0:2692; LA64-NEXT:    slli.d $a2, $a0, 32693; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02694; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 02695; LA64-NEXT:    sll.w $a1, $a1, $a22696; LA64-NEXT:    amor_db.w $a3, $a1, $a02697; LA64-NEXT:    srl.w $a0, $a3, $a22698; LA64-NEXT:    ret2699;2700; LA64-LAMCAS-LABEL: atomicrmw_or_i16_release:2701; LA64-LAMCAS:       # %bb.0:2702; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 32703; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 02704; LA64-LAMCAS-NEXT:    bstrpick.d $a1, $a1, 15, 02705; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a22706; LA64-LAMCAS-NEXT:    amor_db.w $a3, $a1, $a02707; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a22708; LA64-LAMCAS-NEXT:    ret2709;2710; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_or_i16_release:2711; LA64-LAMCAS-LAM-BH:       # %bb.0:2712; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 32713; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 02714; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a1, $a1, 15, 02715; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a22716; LA64-LAMCAS-LAM-BH-NEXT:    amor_db.w $a3, $a1, $a02717; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a22718; LA64-LAMCAS-LAM-BH-NEXT:    ret2719  %1 = atomicrmw or ptr %a, i16 %b release2720  ret i16 %12721 2722}2723 2724define i8 @atomicrmw_xor_i8_release(ptr %a, i8 %b) nounwind {2725; LA64-LABEL: atomicrmw_xor_i8_release:2726; LA64:       # %bb.0:2727; LA64-NEXT:    slli.d $a2, $a0, 32728; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02729; LA64-NEXT:    andi $a1, $a1, 2552730; LA64-NEXT:    sll.w $a1, $a1, $a22731; LA64-NEXT:    amxor_db.w $a3, $a1, $a02732; LA64-NEXT:    srl.w $a0, $a3, $a22733; LA64-NEXT:    ret2734;2735; LA64-LAMCAS-LABEL: atomicrmw_xor_i8_release:2736; LA64-LAMCAS:       # %bb.0:2737; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 32738; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 02739; LA64-LAMCAS-NEXT:    andi $a1, $a1, 2552740; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a22741; LA64-LAMCAS-NEXT:    amxor_db.w $a3, $a1, $a02742; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a22743; LA64-LAMCAS-NEXT:    ret2744;2745; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xor_i8_release:2746; LA64-LAMCAS-LAM-BH:       # %bb.0:2747; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 32748; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 02749; LA64-LAMCAS-LAM-BH-NEXT:    andi $a1, $a1, 2552750; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a22751; LA64-LAMCAS-LAM-BH-NEXT:    amxor_db.w $a3, $a1, $a02752; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a22753; LA64-LAMCAS-LAM-BH-NEXT:    ret2754  %1 = atomicrmw xor ptr %a, i8 %b release2755  ret i8 %12756}2757 2758define i16 @atomicrmw_xor_i16_release(ptr %a, i16 %b) nounwind {2759; LA64-LABEL: atomicrmw_xor_i16_release:2760; LA64:       # %bb.0:2761; LA64-NEXT:    slli.d $a2, $a0, 32762; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02763; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 02764; LA64-NEXT:    sll.w $a1, $a1, $a22765; LA64-NEXT:    amxor_db.w $a3, $a1, $a02766; LA64-NEXT:    srl.w $a0, $a3, $a22767; LA64-NEXT:    ret2768;2769; LA64-LAMCAS-LABEL: atomicrmw_xor_i16_release:2770; LA64-LAMCAS:       # %bb.0:2771; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 32772; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 02773; LA64-LAMCAS-NEXT:    bstrpick.d $a1, $a1, 15, 02774; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a22775; LA64-LAMCAS-NEXT:    amxor_db.w $a3, $a1, $a02776; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a22777; LA64-LAMCAS-NEXT:    ret2778;2779; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xor_i16_release:2780; LA64-LAMCAS-LAM-BH:       # %bb.0:2781; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 32782; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 02783; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a1, $a1, 15, 02784; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a22785; LA64-LAMCAS-LAM-BH-NEXT:    amxor_db.w $a3, $a1, $a02786; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a22787; LA64-LAMCAS-LAM-BH-NEXT:    ret2788  %1 = atomicrmw xor ptr %a, i16 %b release2789  ret i16 %12790 2791}2792 2793define i8 @atomicrmw_xchg_i8_acq_rel(ptr %a, i8 %b) nounwind {2794; LA64-LABEL: atomicrmw_xchg_i8_acq_rel:2795; LA64:       # %bb.0:2796; LA64-NEXT:    slli.d $a2, $a0, 32797; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02798; LA64-NEXT:    ori $a3, $zero, 2552799; LA64-NEXT:    sll.w $a3, $a3, $a22800; LA64-NEXT:    andi $a1, $a1, 2552801; LA64-NEXT:    sll.w $a1, $a1, $a22802; LA64-NEXT:  .LBB56_1: # =>This Inner Loop Header: Depth=12803; LA64-NEXT:    ll.w $a4, $a0, 02804; LA64-NEXT:    addi.w $a5, $a1, 02805; LA64-NEXT:    xor $a5, $a4, $a52806; LA64-NEXT:    and $a5, $a5, $a32807; LA64-NEXT:    xor $a5, $a4, $a52808; LA64-NEXT:    sc.w $a5, $a0, 02809; LA64-NEXT:    beq $a5, $zero, .LBB56_12810; LA64-NEXT:  # %bb.2:2811; LA64-NEXT:    srl.w $a0, $a4, $a22812; LA64-NEXT:    ret2813;2814; LA64-LAMCAS-LABEL: atomicrmw_xchg_i8_acq_rel:2815; LA64-LAMCAS:       # %bb.0:2816; LA64-LAMCAS-NEXT:    ld.bu $a2, $a0, 02817; LA64-LAMCAS-NEXT:    .p2align 4, , 162818; LA64-LAMCAS-NEXT:  .LBB56_1: # %atomicrmw.start2819; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=12820; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a22821; LA64-LAMCAS-NEXT:    amcas_db.b $a2, $a1, $a02822; LA64-LAMCAS-NEXT:    bne $a2, $a3, .LBB56_12823; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end2824; LA64-LAMCAS-NEXT:    move $a0, $a22825; LA64-LAMCAS-NEXT:    ret2826;2827; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_i8_acq_rel:2828; LA64-LAMCAS-LAM-BH:       # %bb.0:2829; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.b $a2, $a1, $a02830; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a22831; LA64-LAMCAS-LAM-BH-NEXT:    ret2832  %1 = atomicrmw xchg ptr %a, i8 %b acq_rel2833  ret i8 %12834}2835 2836define i8 @atomicrmw_xchg_0_i8_acq_rel(ptr %a) nounwind {2837; LA64-LABEL: atomicrmw_xchg_0_i8_acq_rel:2838; LA64:       # %bb.0:2839; LA64-NEXT:    slli.d $a1, $a0, 32840; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02841; LA64-NEXT:    ori $a2, $zero, 2552842; LA64-NEXT:    sll.w $a2, $a2, $a12843; LA64-NEXT:    nor $a2, $a2, $zero2844; LA64-NEXT:    amand_db.w $a3, $a2, $a02845; LA64-NEXT:    srl.w $a0, $a3, $a12846; LA64-NEXT:    ret2847;2848; LA64-LAMCAS-LABEL: atomicrmw_xchg_0_i8_acq_rel:2849; LA64-LAMCAS:       # %bb.0:2850; LA64-LAMCAS-NEXT:    move $a1, $a02851; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 02852; LA64-LAMCAS-NEXT:    .p2align 4, , 162853; LA64-LAMCAS-NEXT:  .LBB57_1: # %atomicrmw.start2854; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=12855; LA64-LAMCAS-NEXT:    ext.w.b $a2, $a02856; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $zero, $a12857; LA64-LAMCAS-NEXT:    bne $a0, $a2, .LBB57_12858; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end2859; LA64-LAMCAS-NEXT:    ret2860;2861; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_0_i8_acq_rel:2862; LA64-LAMCAS-LAM-BH:       # %bb.0:2863; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.b $a1, $zero, $a02864; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a12865; LA64-LAMCAS-LAM-BH-NEXT:    ret2866  %1 = atomicrmw xchg ptr %a, i8 0 acq_rel2867  ret i8 %12868}2869 2870define i8 @atomicrmw_xchg_minus_1_i8_acq_rel(ptr %a) nounwind {2871; LA64-LABEL: atomicrmw_xchg_minus_1_i8_acq_rel:2872; LA64:       # %bb.0:2873; LA64-NEXT:    slli.d $a1, $a0, 32874; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02875; LA64-NEXT:    ori $a2, $zero, 2552876; LA64-NEXT:    sll.w $a2, $a2, $a12877; LA64-NEXT:    amor_db.w $a3, $a2, $a02878; LA64-NEXT:    srl.w $a0, $a3, $a12879; LA64-NEXT:    ret2880;2881; LA64-LAMCAS-LABEL: atomicrmw_xchg_minus_1_i8_acq_rel:2882; LA64-LAMCAS:       # %bb.0:2883; LA64-LAMCAS-NEXT:    move $a1, $a02884; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 02885; LA64-LAMCAS-NEXT:    addi.w $a2, $zero, -12886; LA64-LAMCAS-NEXT:    .p2align 4, , 162887; LA64-LAMCAS-NEXT:  .LBB58_1: # %atomicrmw.start2888; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=12889; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a02890; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a2, $a12891; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB58_12892; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end2893; LA64-LAMCAS-NEXT:    ret2894;2895; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_minus_1_i8_acq_rel:2896; LA64-LAMCAS-LAM-BH:       # %bb.0:2897; LA64-LAMCAS-LAM-BH-NEXT:    addi.w $a2, $zero, -12898; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.b $a1, $a2, $a02899; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a12900; LA64-LAMCAS-LAM-BH-NEXT:    ret2901  %1 = atomicrmw xchg ptr %a, i8 -1 acq_rel2902  ret i8 %12903}2904 2905define i16 @atomicrmw_xchg_i16_acq_rel(ptr %a, i16 %b) nounwind {2906; LA64-LABEL: atomicrmw_xchg_i16_acq_rel:2907; LA64:       # %bb.0:2908; LA64-NEXT:    slli.d $a2, $a0, 32909; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02910; LA64-NEXT:    lu12i.w $a3, 152911; LA64-NEXT:    ori $a3, $a3, 40952912; LA64-NEXT:    sll.w $a3, $a3, $a22913; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 02914; LA64-NEXT:    sll.w $a1, $a1, $a22915; LA64-NEXT:  .LBB59_1: # =>This Inner Loop Header: Depth=12916; LA64-NEXT:    ll.w $a4, $a0, 02917; LA64-NEXT:    addi.w $a5, $a1, 02918; LA64-NEXT:    xor $a5, $a4, $a52919; LA64-NEXT:    and $a5, $a5, $a32920; LA64-NEXT:    xor $a5, $a4, $a52921; LA64-NEXT:    sc.w $a5, $a0, 02922; LA64-NEXT:    beq $a5, $zero, .LBB59_12923; LA64-NEXT:  # %bb.2:2924; LA64-NEXT:    srl.w $a0, $a4, $a22925; LA64-NEXT:    ret2926;2927; LA64-LAMCAS-LABEL: atomicrmw_xchg_i16_acq_rel:2928; LA64-LAMCAS:       # %bb.0:2929; LA64-LAMCAS-NEXT:    ld.hu $a2, $a0, 02930; LA64-LAMCAS-NEXT:    .p2align 4, , 162931; LA64-LAMCAS-NEXT:  .LBB59_1: # %atomicrmw.start2932; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=12933; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a22934; LA64-LAMCAS-NEXT:    amcas_db.h $a2, $a1, $a02935; LA64-LAMCAS-NEXT:    bne $a2, $a3, .LBB59_12936; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end2937; LA64-LAMCAS-NEXT:    move $a0, $a22938; LA64-LAMCAS-NEXT:    ret2939;2940; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_i16_acq_rel:2941; LA64-LAMCAS-LAM-BH:       # %bb.0:2942; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.h $a2, $a1, $a02943; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a22944; LA64-LAMCAS-LAM-BH-NEXT:    ret2945  %1 = atomicrmw xchg ptr %a, i16 %b acq_rel2946  ret i16 %12947}2948 2949define i16 @atomicrmw_xchg_0_i16_acq_rel(ptr %a) nounwind {2950; LA64-LABEL: atomicrmw_xchg_0_i16_acq_rel:2951; LA64:       # %bb.0:2952; LA64-NEXT:    slli.d $a1, $a0, 32953; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02954; LA64-NEXT:    lu12i.w $a2, 152955; LA64-NEXT:    ori $a2, $a2, 40952956; LA64-NEXT:    sll.w $a2, $a2, $a12957; LA64-NEXT:    nor $a2, $a2, $zero2958; LA64-NEXT:    amand_db.w $a3, $a2, $a02959; LA64-NEXT:    srl.w $a0, $a3, $a12960; LA64-NEXT:    ret2961;2962; LA64-LAMCAS-LABEL: atomicrmw_xchg_0_i16_acq_rel:2963; LA64-LAMCAS:       # %bb.0:2964; LA64-LAMCAS-NEXT:    move $a1, $a02965; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 02966; LA64-LAMCAS-NEXT:    .p2align 4, , 162967; LA64-LAMCAS-NEXT:  .LBB60_1: # %atomicrmw.start2968; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=12969; LA64-LAMCAS-NEXT:    ext.w.h $a2, $a02970; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $zero, $a12971; LA64-LAMCAS-NEXT:    bne $a0, $a2, .LBB60_12972; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end2973; LA64-LAMCAS-NEXT:    ret2974;2975; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_0_i16_acq_rel:2976; LA64-LAMCAS-LAM-BH:       # %bb.0:2977; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.h $a1, $zero, $a02978; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a12979; LA64-LAMCAS-LAM-BH-NEXT:    ret2980  %1 = atomicrmw xchg ptr %a, i16 0 acq_rel2981  ret i16 %12982}2983 2984define i16 @atomicrmw_xchg_minus_1_i16_acq_rel(ptr %a) nounwind {2985; LA64-LABEL: atomicrmw_xchg_minus_1_i16_acq_rel:2986; LA64:       # %bb.0:2987; LA64-NEXT:    slli.d $a1, $a0, 32988; LA64-NEXT:    bstrins.d $a0, $zero, 1, 02989; LA64-NEXT:    lu12i.w $a2, 152990; LA64-NEXT:    ori $a2, $a2, 40952991; LA64-NEXT:    sll.w $a2, $a2, $a12992; LA64-NEXT:    amor_db.w $a3, $a2, $a02993; LA64-NEXT:    srl.w $a0, $a3, $a12994; LA64-NEXT:    ret2995;2996; LA64-LAMCAS-LABEL: atomicrmw_xchg_minus_1_i16_acq_rel:2997; LA64-LAMCAS:       # %bb.0:2998; LA64-LAMCAS-NEXT:    move $a1, $a02999; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 03000; LA64-LAMCAS-NEXT:    addi.w $a2, $zero, -13001; LA64-LAMCAS-NEXT:    .p2align 4, , 163002; LA64-LAMCAS-NEXT:  .LBB61_1: # %atomicrmw.start3003; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13004; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a03005; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a2, $a13006; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB61_13007; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3008; LA64-LAMCAS-NEXT:    ret3009;3010; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_minus_1_i16_acq_rel:3011; LA64-LAMCAS-LAM-BH:       # %bb.0:3012; LA64-LAMCAS-LAM-BH-NEXT:    addi.w $a2, $zero, -13013; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.h $a1, $a2, $a03014; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a13015; LA64-LAMCAS-LAM-BH-NEXT:    ret3016  %1 = atomicrmw xchg ptr %a, i16 -1 acq_rel3017  ret i16 %13018 3019}3020 3021define i8 @atomicrmw_add_i8_acq_rel(ptr %a, i8 %b) nounwind {3022; LA64-LABEL: atomicrmw_add_i8_acq_rel:3023; LA64:       # %bb.0:3024; LA64-NEXT:    slli.d $a2, $a0, 33025; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03026; LA64-NEXT:    ori $a3, $zero, 2553027; LA64-NEXT:    sll.w $a3, $a3, $a23028; LA64-NEXT:    andi $a1, $a1, 2553029; LA64-NEXT:    sll.w $a1, $a1, $a23030; LA64-NEXT:  .LBB62_1: # =>This Inner Loop Header: Depth=13031; LA64-NEXT:    ll.w $a4, $a0, 03032; LA64-NEXT:    add.w $a5, $a4, $a13033; LA64-NEXT:    xor $a5, $a4, $a53034; LA64-NEXT:    and $a5, $a5, $a33035; LA64-NEXT:    xor $a5, $a4, $a53036; LA64-NEXT:    sc.w $a5, $a0, 03037; LA64-NEXT:    beq $a5, $zero, .LBB62_13038; LA64-NEXT:  # %bb.2:3039; LA64-NEXT:    srl.w $a0, $a4, $a23040; LA64-NEXT:    ret3041;3042; LA64-LAMCAS-LABEL: atomicrmw_add_i8_acq_rel:3043; LA64-LAMCAS:       # %bb.0:3044; LA64-LAMCAS-NEXT:    move $a2, $a03045; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 03046; LA64-LAMCAS-NEXT:    .p2align 4, , 163047; LA64-LAMCAS-NEXT:  .LBB62_1: # %atomicrmw.start3048; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13049; LA64-LAMCAS-NEXT:    add.d $a3, $a0, $a13050; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a03051; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a3, $a23052; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB62_13053; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3054; LA64-LAMCAS-NEXT:    ret3055;3056; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_add_i8_acq_rel:3057; LA64-LAMCAS-LAM-BH:       # %bb.0:3058; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.b $a2, $a1, $a03059; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a23060; LA64-LAMCAS-LAM-BH-NEXT:    ret3061  %1 = atomicrmw add ptr %a, i8 %b acq_rel3062  ret i8 %13063}3064 3065define i16 @atomicrmw_add_i16_acq_rel(ptr %a, i16 %b) nounwind {3066; LA64-LABEL: atomicrmw_add_i16_acq_rel:3067; LA64:       # %bb.0:3068; LA64-NEXT:    slli.d $a2, $a0, 33069; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03070; LA64-NEXT:    lu12i.w $a3, 153071; LA64-NEXT:    ori $a3, $a3, 40953072; LA64-NEXT:    sll.w $a3, $a3, $a23073; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 03074; LA64-NEXT:    sll.w $a1, $a1, $a23075; LA64-NEXT:  .LBB63_1: # =>This Inner Loop Header: Depth=13076; LA64-NEXT:    ll.w $a4, $a0, 03077; LA64-NEXT:    add.w $a5, $a4, $a13078; LA64-NEXT:    xor $a5, $a4, $a53079; LA64-NEXT:    and $a5, $a5, $a33080; LA64-NEXT:    xor $a5, $a4, $a53081; LA64-NEXT:    sc.w $a5, $a0, 03082; LA64-NEXT:    beq $a5, $zero, .LBB63_13083; LA64-NEXT:  # %bb.2:3084; LA64-NEXT:    srl.w $a0, $a4, $a23085; LA64-NEXT:    ret3086;3087; LA64-LAMCAS-LABEL: atomicrmw_add_i16_acq_rel:3088; LA64-LAMCAS:       # %bb.0:3089; LA64-LAMCAS-NEXT:    move $a2, $a03090; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 03091; LA64-LAMCAS-NEXT:    .p2align 4, , 163092; LA64-LAMCAS-NEXT:  .LBB63_1: # %atomicrmw.start3093; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13094; LA64-LAMCAS-NEXT:    add.d $a3, $a0, $a13095; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a03096; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a3, $a23097; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB63_13098; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3099; LA64-LAMCAS-NEXT:    ret3100;3101; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_add_i16_acq_rel:3102; LA64-LAMCAS-LAM-BH:       # %bb.0:3103; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.h $a2, $a1, $a03104; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a23105; LA64-LAMCAS-LAM-BH-NEXT:    ret3106  %1 = atomicrmw add ptr %a, i16 %b acq_rel3107  ret i16 %13108 3109}3110 3111define i8 @atomicrmw_sub_i8_acq_rel(ptr %a, i8 %b) nounwind {3112; LA64-LABEL: atomicrmw_sub_i8_acq_rel:3113; LA64:       # %bb.0:3114; LA64-NEXT:    slli.d $a2, $a0, 33115; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03116; LA64-NEXT:    ori $a3, $zero, 2553117; LA64-NEXT:    sll.w $a3, $a3, $a23118; LA64-NEXT:    andi $a1, $a1, 2553119; LA64-NEXT:    sll.w $a1, $a1, $a23120; LA64-NEXT:  .LBB64_1: # =>This Inner Loop Header: Depth=13121; LA64-NEXT:    ll.w $a4, $a0, 03122; LA64-NEXT:    sub.w $a5, $a4, $a13123; LA64-NEXT:    xor $a5, $a4, $a53124; LA64-NEXT:    and $a5, $a5, $a33125; LA64-NEXT:    xor $a5, $a4, $a53126; LA64-NEXT:    sc.w $a5, $a0, 03127; LA64-NEXT:    beq $a5, $zero, .LBB64_13128; LA64-NEXT:  # %bb.2:3129; LA64-NEXT:    srl.w $a0, $a4, $a23130; LA64-NEXT:    ret3131;3132; LA64-LAMCAS-LABEL: atomicrmw_sub_i8_acq_rel:3133; LA64-LAMCAS:       # %bb.0:3134; LA64-LAMCAS-NEXT:    move $a2, $a03135; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 03136; LA64-LAMCAS-NEXT:    .p2align 4, , 163137; LA64-LAMCAS-NEXT:  .LBB64_1: # %atomicrmw.start3138; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13139; LA64-LAMCAS-NEXT:    sub.d $a3, $a0, $a13140; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a03141; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a3, $a23142; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB64_13143; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3144; LA64-LAMCAS-NEXT:    ret3145;3146; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_sub_i8_acq_rel:3147; LA64-LAMCAS-LAM-BH:       # %bb.0:3148; LA64-LAMCAS-LAM-BH-NEXT:    sub.w $a2, $zero, $a13149; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.b $a1, $a2, $a03150; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a13151; LA64-LAMCAS-LAM-BH-NEXT:    ret3152  %1 = atomicrmw sub ptr %a, i8 %b acq_rel3153  ret i8 %13154}3155 3156define i16 @atomicrmw_sub_i16_acq_rel(ptr %a, i16 %b) nounwind {3157; LA64-LABEL: atomicrmw_sub_i16_acq_rel:3158; LA64:       # %bb.0:3159; LA64-NEXT:    slli.d $a2, $a0, 33160; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03161; LA64-NEXT:    lu12i.w $a3, 153162; LA64-NEXT:    ori $a3, $a3, 40953163; LA64-NEXT:    sll.w $a3, $a3, $a23164; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 03165; LA64-NEXT:    sll.w $a1, $a1, $a23166; LA64-NEXT:  .LBB65_1: # =>This Inner Loop Header: Depth=13167; LA64-NEXT:    ll.w $a4, $a0, 03168; LA64-NEXT:    sub.w $a5, $a4, $a13169; LA64-NEXT:    xor $a5, $a4, $a53170; LA64-NEXT:    and $a5, $a5, $a33171; LA64-NEXT:    xor $a5, $a4, $a53172; LA64-NEXT:    sc.w $a5, $a0, 03173; LA64-NEXT:    beq $a5, $zero, .LBB65_13174; LA64-NEXT:  # %bb.2:3175; LA64-NEXT:    srl.w $a0, $a4, $a23176; LA64-NEXT:    ret3177;3178; LA64-LAMCAS-LABEL: atomicrmw_sub_i16_acq_rel:3179; LA64-LAMCAS:       # %bb.0:3180; LA64-LAMCAS-NEXT:    move $a2, $a03181; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 03182; LA64-LAMCAS-NEXT:    .p2align 4, , 163183; LA64-LAMCAS-NEXT:  .LBB65_1: # %atomicrmw.start3184; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13185; LA64-LAMCAS-NEXT:    sub.d $a3, $a0, $a13186; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a03187; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a3, $a23188; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB65_13189; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3190; LA64-LAMCAS-NEXT:    ret3191;3192; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_sub_i16_acq_rel:3193; LA64-LAMCAS-LAM-BH:       # %bb.0:3194; LA64-LAMCAS-LAM-BH-NEXT:    sub.w $a2, $zero, $a13195; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.h $a1, $a2, $a03196; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a13197; LA64-LAMCAS-LAM-BH-NEXT:    ret3198  %1 = atomicrmw sub ptr %a, i16 %b acq_rel3199  ret i16 %13200 3201}3202 3203define i8 @atomicrmw_umax_i8_acq_rel(ptr %a, i8 %b) nounwind {3204; LA64-LABEL: atomicrmw_umax_i8_acq_rel:3205; LA64:       # %bb.0:3206; LA64-NEXT:    slli.d $a2, $a0, 33207; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03208; LA64-NEXT:    ori $a3, $zero, 2553209; LA64-NEXT:    sll.w $a3, $a3, $a23210; LA64-NEXT:    andi $a1, $a1, 2553211; LA64-NEXT:    sll.w $a1, $a1, $a23212; LA64-NEXT:  .LBB66_1: # =>This Inner Loop Header: Depth=13213; LA64-NEXT:    ll.w $a4, $a0, 03214; LA64-NEXT:    and $a6, $a4, $a33215; LA64-NEXT:    move $a5, $a43216; LA64-NEXT:    bgeu $a6, $a1, .LBB66_33217; LA64-NEXT:  # %bb.2: # in Loop: Header=BB66_1 Depth=13218; LA64-NEXT:    xor $a5, $a4, $a13219; LA64-NEXT:    and $a5, $a5, $a33220; LA64-NEXT:    xor $a5, $a4, $a53221; LA64-NEXT:  .LBB66_3: # in Loop: Header=BB66_1 Depth=13222; LA64-NEXT:    sc.w $a5, $a0, 03223; LA64-NEXT:    beq $a5, $zero, .LBB66_13224; LA64-NEXT:  # %bb.4:3225; LA64-NEXT:    srl.w $a0, $a4, $a23226; LA64-NEXT:    ret3227;3228; LA64-LAMCAS-LABEL: atomicrmw_umax_i8_acq_rel:3229; LA64-LAMCAS:       # %bb.0:3230; LA64-LAMCAS-NEXT:    move $a2, $a03231; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 03232; LA64-LAMCAS-NEXT:    andi $a3, $a1, 2553233; LA64-LAMCAS-NEXT:    .p2align 4, , 163234; LA64-LAMCAS-NEXT:  .LBB66_1: # %atomicrmw.start3235; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13236; LA64-LAMCAS-NEXT:    andi $a4, $a0, 2553237; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a43238; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a43239; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a43240; LA64-LAMCAS-NEXT:    or $a4, $a4, $a53241; LA64-LAMCAS-NEXT:    ext.w.b $a5, $a03242; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a4, $a23243; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB66_13244; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3245; LA64-LAMCAS-NEXT:    ret3246;3247; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umax_i8_acq_rel:3248; LA64-LAMCAS-LAM-BH:       # %bb.0:3249; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a03250; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 03251; LA64-LAMCAS-LAM-BH-NEXT:    andi $a3, $a1, 2553252; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 163253; LA64-LAMCAS-LAM-BH-NEXT:  .LBB66_1: # %atomicrmw.start3254; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=13255; LA64-LAMCAS-LAM-BH-NEXT:    andi $a4, $a0, 2553256; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a43257; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a43258; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a43259; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a53260; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a5, $a03261; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a4, $a23262; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB66_13263; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end3264; LA64-LAMCAS-LAM-BH-NEXT:    ret3265  %1 = atomicrmw umax ptr %a, i8 %b acq_rel3266  ret i8 %13267}3268 3269define i16 @atomicrmw_umax_i16_acq_rel(ptr %a, i16 %b) nounwind {3270; LA64-LABEL: atomicrmw_umax_i16_acq_rel:3271; LA64:       # %bb.0:3272; LA64-NEXT:    slli.d $a2, $a0, 33273; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03274; LA64-NEXT:    lu12i.w $a3, 153275; LA64-NEXT:    ori $a3, $a3, 40953276; LA64-NEXT:    sll.w $a3, $a3, $a23277; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 03278; LA64-NEXT:    sll.w $a1, $a1, $a23279; LA64-NEXT:  .LBB67_1: # =>This Inner Loop Header: Depth=13280; LA64-NEXT:    ll.w $a4, $a0, 03281; LA64-NEXT:    and $a6, $a4, $a33282; LA64-NEXT:    move $a5, $a43283; LA64-NEXT:    bgeu $a6, $a1, .LBB67_33284; LA64-NEXT:  # %bb.2: # in Loop: Header=BB67_1 Depth=13285; LA64-NEXT:    xor $a5, $a4, $a13286; LA64-NEXT:    and $a5, $a5, $a33287; LA64-NEXT:    xor $a5, $a4, $a53288; LA64-NEXT:  .LBB67_3: # in Loop: Header=BB67_1 Depth=13289; LA64-NEXT:    sc.w $a5, $a0, 03290; LA64-NEXT:    beq $a5, $zero, .LBB67_13291; LA64-NEXT:  # %bb.4:3292; LA64-NEXT:    srl.w $a0, $a4, $a23293; LA64-NEXT:    ret3294;3295; LA64-LAMCAS-LABEL: atomicrmw_umax_i16_acq_rel:3296; LA64-LAMCAS:       # %bb.0:3297; LA64-LAMCAS-NEXT:    move $a2, $a03298; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 03299; LA64-LAMCAS-NEXT:    bstrpick.d $a3, $a1, 15, 03300; LA64-LAMCAS-NEXT:    .p2align 4, , 163301; LA64-LAMCAS-NEXT:  .LBB67_1: # %atomicrmw.start3302; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13303; LA64-LAMCAS-NEXT:    bstrpick.d $a4, $a0, 15, 03304; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a43305; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a43306; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a43307; LA64-LAMCAS-NEXT:    or $a4, $a4, $a53308; LA64-LAMCAS-NEXT:    ext.w.h $a5, $a03309; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a4, $a23310; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB67_13311; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3312; LA64-LAMCAS-NEXT:    ret3313;3314; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umax_i16_acq_rel:3315; LA64-LAMCAS-LAM-BH:       # %bb.0:3316; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a03317; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 03318; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a3, $a1, 15, 03319; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 163320; LA64-LAMCAS-LAM-BH-NEXT:  .LBB67_1: # %atomicrmw.start3321; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=13322; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a4, $a0, 15, 03323; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a43324; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a43325; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a43326; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a53327; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a5, $a03328; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a4, $a23329; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB67_13330; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end3331; LA64-LAMCAS-LAM-BH-NEXT:    ret3332  %1 = atomicrmw umax ptr %a, i16 %b acq_rel3333  ret i16 %13334}3335 3336define i8 @atomicrmw_umin_i8_acq_rel(ptr %a, i8 %b) nounwind {3337; LA64-LABEL: atomicrmw_umin_i8_acq_rel:3338; LA64:       # %bb.0:3339; LA64-NEXT:    slli.d $a2, $a0, 33340; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03341; LA64-NEXT:    ori $a3, $zero, 2553342; LA64-NEXT:    sll.w $a3, $a3, $a23343; LA64-NEXT:    andi $a1, $a1, 2553344; LA64-NEXT:    sll.w $a1, $a1, $a23345; LA64-NEXT:  .LBB68_1: # =>This Inner Loop Header: Depth=13346; LA64-NEXT:    ll.w $a4, $a0, 03347; LA64-NEXT:    and $a6, $a4, $a33348; LA64-NEXT:    move $a5, $a43349; LA64-NEXT:    bgeu $a1, $a6, .LBB68_33350; LA64-NEXT:  # %bb.2: # in Loop: Header=BB68_1 Depth=13351; LA64-NEXT:    xor $a5, $a4, $a13352; LA64-NEXT:    and $a5, $a5, $a33353; LA64-NEXT:    xor $a5, $a4, $a53354; LA64-NEXT:  .LBB68_3: # in Loop: Header=BB68_1 Depth=13355; LA64-NEXT:    sc.w $a5, $a0, 03356; LA64-NEXT:    beq $a5, $zero, .LBB68_13357; LA64-NEXT:  # %bb.4:3358; LA64-NEXT:    srl.w $a0, $a4, $a23359; LA64-NEXT:    ret3360;3361; LA64-LAMCAS-LABEL: atomicrmw_umin_i8_acq_rel:3362; LA64-LAMCAS:       # %bb.0:3363; LA64-LAMCAS-NEXT:    move $a2, $a03364; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 03365; LA64-LAMCAS-NEXT:    andi $a3, $a1, 2553366; LA64-LAMCAS-NEXT:    .p2align 4, , 163367; LA64-LAMCAS-NEXT:  .LBB68_1: # %atomicrmw.start3368; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13369; LA64-LAMCAS-NEXT:    andi $a4, $a0, 2553370; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a43371; LA64-LAMCAS-NEXT:    xori $a4, $a4, 13372; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a43373; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a43374; LA64-LAMCAS-NEXT:    or $a4, $a4, $a53375; LA64-LAMCAS-NEXT:    ext.w.b $a5, $a03376; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a4, $a23377; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB68_13378; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3379; LA64-LAMCAS-NEXT:    ret3380;3381; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umin_i8_acq_rel:3382; LA64-LAMCAS-LAM-BH:       # %bb.0:3383; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a03384; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 03385; LA64-LAMCAS-LAM-BH-NEXT:    andi $a3, $a1, 2553386; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 163387; LA64-LAMCAS-LAM-BH-NEXT:  .LBB68_1: # %atomicrmw.start3388; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=13389; LA64-LAMCAS-LAM-BH-NEXT:    andi $a4, $a0, 2553390; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a43391; LA64-LAMCAS-LAM-BH-NEXT:    xori $a4, $a4, 13392; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a43393; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a43394; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a53395; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a5, $a03396; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a4, $a23397; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB68_13398; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end3399; LA64-LAMCAS-LAM-BH-NEXT:    ret3400  %1 = atomicrmw umin ptr %a, i8 %b acq_rel3401  ret i8 %13402}3403 3404define i16 @atomicrmw_umin_i16_acq_rel(ptr %a, i16 %b) nounwind {3405; LA64-LABEL: atomicrmw_umin_i16_acq_rel:3406; LA64:       # %bb.0:3407; LA64-NEXT:    slli.d $a2, $a0, 33408; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03409; LA64-NEXT:    lu12i.w $a3, 153410; LA64-NEXT:    ori $a3, $a3, 40953411; LA64-NEXT:    sll.w $a3, $a3, $a23412; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 03413; LA64-NEXT:    sll.w $a1, $a1, $a23414; LA64-NEXT:  .LBB69_1: # =>This Inner Loop Header: Depth=13415; LA64-NEXT:    ll.w $a4, $a0, 03416; LA64-NEXT:    and $a6, $a4, $a33417; LA64-NEXT:    move $a5, $a43418; LA64-NEXT:    bgeu $a1, $a6, .LBB69_33419; LA64-NEXT:  # %bb.2: # in Loop: Header=BB69_1 Depth=13420; LA64-NEXT:    xor $a5, $a4, $a13421; LA64-NEXT:    and $a5, $a5, $a33422; LA64-NEXT:    xor $a5, $a4, $a53423; LA64-NEXT:  .LBB69_3: # in Loop: Header=BB69_1 Depth=13424; LA64-NEXT:    sc.w $a5, $a0, 03425; LA64-NEXT:    beq $a5, $zero, .LBB69_13426; LA64-NEXT:  # %bb.4:3427; LA64-NEXT:    srl.w $a0, $a4, $a23428; LA64-NEXT:    ret3429;3430; LA64-LAMCAS-LABEL: atomicrmw_umin_i16_acq_rel:3431; LA64-LAMCAS:       # %bb.0:3432; LA64-LAMCAS-NEXT:    move $a2, $a03433; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 03434; LA64-LAMCAS-NEXT:    bstrpick.d $a3, $a1, 15, 03435; LA64-LAMCAS-NEXT:    .p2align 4, , 163436; LA64-LAMCAS-NEXT:  .LBB69_1: # %atomicrmw.start3437; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13438; LA64-LAMCAS-NEXT:    bstrpick.d $a4, $a0, 15, 03439; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a43440; LA64-LAMCAS-NEXT:    xori $a4, $a4, 13441; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a43442; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a43443; LA64-LAMCAS-NEXT:    or $a4, $a4, $a53444; LA64-LAMCAS-NEXT:    ext.w.h $a5, $a03445; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a4, $a23446; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB69_13447; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3448; LA64-LAMCAS-NEXT:    ret3449;3450; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umin_i16_acq_rel:3451; LA64-LAMCAS-LAM-BH:       # %bb.0:3452; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a03453; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 03454; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a3, $a1, 15, 03455; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 163456; LA64-LAMCAS-LAM-BH-NEXT:  .LBB69_1: # %atomicrmw.start3457; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=13458; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a4, $a0, 15, 03459; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a43460; LA64-LAMCAS-LAM-BH-NEXT:    xori $a4, $a4, 13461; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a43462; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a43463; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a53464; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a5, $a03465; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a4, $a23466; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB69_13467; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end3468; LA64-LAMCAS-LAM-BH-NEXT:    ret3469  %1 = atomicrmw umin ptr %a, i16 %b acq_rel3470  ret i16 %13471}3472 3473define i8 @atomicrmw_max_i8_acq_rel(ptr %a, i8 %b) nounwind {3474; LA64-LABEL: atomicrmw_max_i8_acq_rel:3475; LA64:       # %bb.0:3476; LA64-NEXT:    slli.d $a2, $a0, 33477; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03478; LA64-NEXT:    andi $a3, $a2, 243479; LA64-NEXT:    ori $a4, $zero, 2553480; LA64-NEXT:    sll.w $a4, $a4, $a23481; LA64-NEXT:    ext.w.b $a1, $a13482; LA64-NEXT:    sll.w $a1, $a1, $a23483; LA64-NEXT:    xori $a3, $a3, 563484; LA64-NEXT:  .LBB70_1: # =>This Inner Loop Header: Depth=13485; LA64-NEXT:    ll.w $a5, $a0, 03486; LA64-NEXT:    and $a7, $a5, $a43487; LA64-NEXT:    move $a6, $a53488; LA64-NEXT:    sll.w $a7, $a7, $a33489; LA64-NEXT:    sra.w $a7, $a7, $a33490; LA64-NEXT:    bge $a7, $a1, .LBB70_33491; LA64-NEXT:  # %bb.2: # in Loop: Header=BB70_1 Depth=13492; LA64-NEXT:    xor $a6, $a5, $a13493; LA64-NEXT:    and $a6, $a6, $a43494; LA64-NEXT:    xor $a6, $a5, $a63495; LA64-NEXT:  .LBB70_3: # in Loop: Header=BB70_1 Depth=13496; LA64-NEXT:    sc.w $a6, $a0, 03497; LA64-NEXT:    beq $a6, $zero, .LBB70_13498; LA64-NEXT:  # %bb.4:3499; LA64-NEXT:    srl.w $a0, $a5, $a23500; LA64-NEXT:    ret3501;3502; LA64-LAMCAS-LABEL: atomicrmw_max_i8_acq_rel:3503; LA64-LAMCAS:       # %bb.0:3504; LA64-LAMCAS-NEXT:    move $a2, $a03505; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 03506; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a13507; LA64-LAMCAS-NEXT:    .p2align 4, , 163508; LA64-LAMCAS-NEXT:  .LBB70_1: # %atomicrmw.start3509; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13510; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a03511; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a43512; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a53513; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a53514; LA64-LAMCAS-NEXT:    or $a5, $a5, $a63515; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a5, $a23516; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB70_13517; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3518; LA64-LAMCAS-NEXT:    ret3519;3520; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_max_i8_acq_rel:3521; LA64-LAMCAS-LAM-BH:       # %bb.0:3522; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a03523; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 03524; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a3, $a13525; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 163526; LA64-LAMCAS-LAM-BH-NEXT:  .LBB70_1: # %atomicrmw.start3527; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=13528; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a4, $a03529; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a43530; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a53531; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a53532; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a63533; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a5, $a23534; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB70_13535; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end3536; LA64-LAMCAS-LAM-BH-NEXT:    ret3537  %1 = atomicrmw max ptr %a, i8 %b acq_rel3538  ret i8 %13539}3540 3541define i16 @atomicrmw_max_i16_acq_rel(ptr %a, i16 %b) nounwind {3542; LA64-LABEL: atomicrmw_max_i16_acq_rel:3543; LA64:       # %bb.0:3544; LA64-NEXT:    slli.d $a2, $a0, 33545; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03546; LA64-NEXT:    andi $a3, $a2, 243547; LA64-NEXT:    lu12i.w $a4, 153548; LA64-NEXT:    ori $a4, $a4, 40953549; LA64-NEXT:    sll.w $a4, $a4, $a23550; LA64-NEXT:    ext.w.h $a1, $a13551; LA64-NEXT:    sll.w $a1, $a1, $a23552; LA64-NEXT:    ori $a5, $zero, 483553; LA64-NEXT:    sub.d $a3, $a5, $a33554; LA64-NEXT:  .LBB71_1: # =>This Inner Loop Header: Depth=13555; LA64-NEXT:    ll.w $a5, $a0, 03556; LA64-NEXT:    and $a7, $a5, $a43557; LA64-NEXT:    move $a6, $a53558; LA64-NEXT:    sll.w $a7, $a7, $a33559; LA64-NEXT:    sra.w $a7, $a7, $a33560; LA64-NEXT:    bge $a7, $a1, .LBB71_33561; LA64-NEXT:  # %bb.2: # in Loop: Header=BB71_1 Depth=13562; LA64-NEXT:    xor $a6, $a5, $a13563; LA64-NEXT:    and $a6, $a6, $a43564; LA64-NEXT:    xor $a6, $a5, $a63565; LA64-NEXT:  .LBB71_3: # in Loop: Header=BB71_1 Depth=13566; LA64-NEXT:    sc.w $a6, $a0, 03567; LA64-NEXT:    beq $a6, $zero, .LBB71_13568; LA64-NEXT:  # %bb.4:3569; LA64-NEXT:    srl.w $a0, $a5, $a23570; LA64-NEXT:    ret3571;3572; LA64-LAMCAS-LABEL: atomicrmw_max_i16_acq_rel:3573; LA64-LAMCAS:       # %bb.0:3574; LA64-LAMCAS-NEXT:    move $a2, $a03575; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 03576; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a13577; LA64-LAMCAS-NEXT:    .p2align 4, , 163578; LA64-LAMCAS-NEXT:  .LBB71_1: # %atomicrmw.start3579; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13580; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a03581; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a43582; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a53583; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a53584; LA64-LAMCAS-NEXT:    or $a5, $a5, $a63585; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a5, $a23586; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB71_13587; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3588; LA64-LAMCAS-NEXT:    ret3589;3590; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_max_i16_acq_rel:3591; LA64-LAMCAS-LAM-BH:       # %bb.0:3592; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a03593; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 03594; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a3, $a13595; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 163596; LA64-LAMCAS-LAM-BH-NEXT:  .LBB71_1: # %atomicrmw.start3597; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=13598; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a4, $a03599; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a43600; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a53601; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a53602; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a63603; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a5, $a23604; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB71_13605; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end3606; LA64-LAMCAS-LAM-BH-NEXT:    ret3607  %1 = atomicrmw max ptr %a, i16 %b acq_rel3608  ret i16 %13609}3610 3611define i8 @atomicrmw_min_i8_acq_rel(ptr %a, i8 %b) nounwind {3612; LA64-LABEL: atomicrmw_min_i8_acq_rel:3613; LA64:       # %bb.0:3614; LA64-NEXT:    slli.d $a2, $a0, 33615; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03616; LA64-NEXT:    andi $a3, $a2, 243617; LA64-NEXT:    ori $a4, $zero, 2553618; LA64-NEXT:    sll.w $a4, $a4, $a23619; LA64-NEXT:    ext.w.b $a1, $a13620; LA64-NEXT:    sll.w $a1, $a1, $a23621; LA64-NEXT:    xori $a3, $a3, 563622; LA64-NEXT:  .LBB72_1: # =>This Inner Loop Header: Depth=13623; LA64-NEXT:    ll.w $a5, $a0, 03624; LA64-NEXT:    and $a7, $a5, $a43625; LA64-NEXT:    move $a6, $a53626; LA64-NEXT:    sll.w $a7, $a7, $a33627; LA64-NEXT:    sra.w $a7, $a7, $a33628; LA64-NEXT:    bge $a1, $a7, .LBB72_33629; LA64-NEXT:  # %bb.2: # in Loop: Header=BB72_1 Depth=13630; LA64-NEXT:    xor $a6, $a5, $a13631; LA64-NEXT:    and $a6, $a6, $a43632; LA64-NEXT:    xor $a6, $a5, $a63633; LA64-NEXT:  .LBB72_3: # in Loop: Header=BB72_1 Depth=13634; LA64-NEXT:    sc.w $a6, $a0, 03635; LA64-NEXT:    beq $a6, $zero, .LBB72_13636; LA64-NEXT:  # %bb.4:3637; LA64-NEXT:    srl.w $a0, $a5, $a23638; LA64-NEXT:    ret3639;3640; LA64-LAMCAS-LABEL: atomicrmw_min_i8_acq_rel:3641; LA64-LAMCAS:       # %bb.0:3642; LA64-LAMCAS-NEXT:    move $a2, $a03643; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 03644; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a13645; LA64-LAMCAS-NEXT:    .p2align 4, , 163646; LA64-LAMCAS-NEXT:  .LBB72_1: # %atomicrmw.start3647; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13648; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a03649; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a43650; LA64-LAMCAS-NEXT:    xori $a5, $a5, 13651; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a53652; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a53653; LA64-LAMCAS-NEXT:    or $a5, $a5, $a63654; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a5, $a23655; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB72_13656; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3657; LA64-LAMCAS-NEXT:    ret3658;3659; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_min_i8_acq_rel:3660; LA64-LAMCAS-LAM-BH:       # %bb.0:3661; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a03662; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 03663; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a3, $a13664; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 163665; LA64-LAMCAS-LAM-BH-NEXT:  .LBB72_1: # %atomicrmw.start3666; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=13667; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a4, $a03668; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a43669; LA64-LAMCAS-LAM-BH-NEXT:    xori $a5, $a5, 13670; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a53671; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a53672; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a63673; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a5, $a23674; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB72_13675; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end3676; LA64-LAMCAS-LAM-BH-NEXT:    ret3677  %1 = atomicrmw min ptr %a, i8 %b acq_rel3678  ret i8 %13679}3680 3681define i16 @atomicrmw_min_i16_acq_rel(ptr %a, i16 %b) nounwind {3682; LA64-LABEL: atomicrmw_min_i16_acq_rel:3683; LA64:       # %bb.0:3684; LA64-NEXT:    slli.d $a2, $a0, 33685; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03686; LA64-NEXT:    andi $a3, $a2, 243687; LA64-NEXT:    lu12i.w $a4, 153688; LA64-NEXT:    ori $a4, $a4, 40953689; LA64-NEXT:    sll.w $a4, $a4, $a23690; LA64-NEXT:    ext.w.h $a1, $a13691; LA64-NEXT:    sll.w $a1, $a1, $a23692; LA64-NEXT:    ori $a5, $zero, 483693; LA64-NEXT:    sub.d $a3, $a5, $a33694; LA64-NEXT:  .LBB73_1: # =>This Inner Loop Header: Depth=13695; LA64-NEXT:    ll.w $a5, $a0, 03696; LA64-NEXT:    and $a7, $a5, $a43697; LA64-NEXT:    move $a6, $a53698; LA64-NEXT:    sll.w $a7, $a7, $a33699; LA64-NEXT:    sra.w $a7, $a7, $a33700; LA64-NEXT:    bge $a1, $a7, .LBB73_33701; LA64-NEXT:  # %bb.2: # in Loop: Header=BB73_1 Depth=13702; LA64-NEXT:    xor $a6, $a5, $a13703; LA64-NEXT:    and $a6, $a6, $a43704; LA64-NEXT:    xor $a6, $a5, $a63705; LA64-NEXT:  .LBB73_3: # in Loop: Header=BB73_1 Depth=13706; LA64-NEXT:    sc.w $a6, $a0, 03707; LA64-NEXT:    beq $a6, $zero, .LBB73_13708; LA64-NEXT:  # %bb.4:3709; LA64-NEXT:    srl.w $a0, $a5, $a23710; LA64-NEXT:    ret3711;3712; LA64-LAMCAS-LABEL: atomicrmw_min_i16_acq_rel:3713; LA64-LAMCAS:       # %bb.0:3714; LA64-LAMCAS-NEXT:    move $a2, $a03715; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 03716; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a13717; LA64-LAMCAS-NEXT:    .p2align 4, , 163718; LA64-LAMCAS-NEXT:  .LBB73_1: # %atomicrmw.start3719; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13720; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a03721; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a43722; LA64-LAMCAS-NEXT:    xori $a5, $a5, 13723; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a53724; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a53725; LA64-LAMCAS-NEXT:    or $a5, $a5, $a63726; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a5, $a23727; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB73_13728; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3729; LA64-LAMCAS-NEXT:    ret3730;3731; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_min_i16_acq_rel:3732; LA64-LAMCAS-LAM-BH:       # %bb.0:3733; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a03734; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 03735; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a3, $a13736; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 163737; LA64-LAMCAS-LAM-BH-NEXT:  .LBB73_1: # %atomicrmw.start3738; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=13739; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a4, $a03740; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a43741; LA64-LAMCAS-LAM-BH-NEXT:    xori $a5, $a5, 13742; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a53743; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a53744; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a63745; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a5, $a23746; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB73_13747; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end3748; LA64-LAMCAS-LAM-BH-NEXT:    ret3749  %1 = atomicrmw min ptr %a, i16 %b acq_rel3750  ret i16 %13751}3752 3753define i8 @atomicrmw_nand_i8_acq_rel(ptr %a, i8 %b) nounwind {3754; LA64-LABEL: atomicrmw_nand_i8_acq_rel:3755; LA64:       # %bb.0:3756; LA64-NEXT:    slli.d $a2, $a0, 33757; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03758; LA64-NEXT:    ori $a3, $zero, 2553759; LA64-NEXT:    sll.w $a3, $a3, $a23760; LA64-NEXT:    andi $a1, $a1, 2553761; LA64-NEXT:    sll.w $a1, $a1, $a23762; LA64-NEXT:  .LBB74_1: # =>This Inner Loop Header: Depth=13763; LA64-NEXT:    ll.w $a4, $a0, 03764; LA64-NEXT:    and $a5, $a4, $a13765; LA64-NEXT:    nor $a5, $a5, $zero3766; LA64-NEXT:    xor $a5, $a4, $a53767; LA64-NEXT:    and $a5, $a5, $a33768; LA64-NEXT:    xor $a5, $a4, $a53769; LA64-NEXT:    sc.w $a5, $a0, 03770; LA64-NEXT:    beq $a5, $zero, .LBB74_13771; LA64-NEXT:  # %bb.2:3772; LA64-NEXT:    srl.w $a0, $a4, $a23773; LA64-NEXT:    ret3774;3775; LA64-LAMCAS-LABEL: atomicrmw_nand_i8_acq_rel:3776; LA64-LAMCAS:       # %bb.0:3777; LA64-LAMCAS-NEXT:    move $a2, $a03778; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 03779; LA64-LAMCAS-NEXT:    .p2align 4, , 163780; LA64-LAMCAS-NEXT:  .LBB74_1: # %atomicrmw.start3781; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13782; LA64-LAMCAS-NEXT:    and $a3, $a0, $a13783; LA64-LAMCAS-NEXT:    nor $a3, $a3, $zero3784; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a03785; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a3, $a23786; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB74_13787; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3788; LA64-LAMCAS-NEXT:    ret3789;3790; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i8_acq_rel:3791; LA64-LAMCAS-LAM-BH:       # %bb.0:3792; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a03793; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 03794; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 163795; LA64-LAMCAS-LAM-BH-NEXT:  .LBB74_1: # %atomicrmw.start3796; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=13797; LA64-LAMCAS-LAM-BH-NEXT:    and $a3, $a0, $a13798; LA64-LAMCAS-LAM-BH-NEXT:    nor $a3, $a3, $zero3799; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a4, $a03800; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a3, $a23801; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB74_13802; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end3803; LA64-LAMCAS-LAM-BH-NEXT:    ret3804  %1 = atomicrmw nand ptr %a, i8 %b acq_rel3805  ret i8 %13806}3807 3808define i16 @atomicrmw_nand_i16_acq_rel(ptr %a, i16 %b) nounwind {3809; LA64-LABEL: atomicrmw_nand_i16_acq_rel:3810; LA64:       # %bb.0:3811; LA64-NEXT:    slli.d $a2, $a0, 33812; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03813; LA64-NEXT:    lu12i.w $a3, 153814; LA64-NEXT:    ori $a3, $a3, 40953815; LA64-NEXT:    sll.w $a3, $a3, $a23816; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 03817; LA64-NEXT:    sll.w $a1, $a1, $a23818; LA64-NEXT:  .LBB75_1: # =>This Inner Loop Header: Depth=13819; LA64-NEXT:    ll.w $a4, $a0, 03820; LA64-NEXT:    and $a5, $a4, $a13821; LA64-NEXT:    nor $a5, $a5, $zero3822; LA64-NEXT:    xor $a5, $a4, $a53823; LA64-NEXT:    and $a5, $a5, $a33824; LA64-NEXT:    xor $a5, $a4, $a53825; LA64-NEXT:    sc.w $a5, $a0, 03826; LA64-NEXT:    beq $a5, $zero, .LBB75_13827; LA64-NEXT:  # %bb.2:3828; LA64-NEXT:    srl.w $a0, $a4, $a23829; LA64-NEXT:    ret3830;3831; LA64-LAMCAS-LABEL: atomicrmw_nand_i16_acq_rel:3832; LA64-LAMCAS:       # %bb.0:3833; LA64-LAMCAS-NEXT:    move $a2, $a03834; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 03835; LA64-LAMCAS-NEXT:    .p2align 4, , 163836; LA64-LAMCAS-NEXT:  .LBB75_1: # %atomicrmw.start3837; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13838; LA64-LAMCAS-NEXT:    and $a3, $a0, $a13839; LA64-LAMCAS-NEXT:    nor $a3, $a3, $zero3840; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a03841; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a3, $a23842; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB75_13843; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3844; LA64-LAMCAS-NEXT:    ret3845;3846; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i16_acq_rel:3847; LA64-LAMCAS-LAM-BH:       # %bb.0:3848; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a03849; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 03850; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 163851; LA64-LAMCAS-LAM-BH-NEXT:  .LBB75_1: # %atomicrmw.start3852; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=13853; LA64-LAMCAS-LAM-BH-NEXT:    and $a3, $a0, $a13854; LA64-LAMCAS-LAM-BH-NEXT:    nor $a3, $a3, $zero3855; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a4, $a03856; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a3, $a23857; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB75_13858; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end3859; LA64-LAMCAS-LAM-BH-NEXT:    ret3860  %1 = atomicrmw nand ptr %a, i16 %b acq_rel3861  ret i16 %13862 3863}3864 3865define i32 @atomicrmw_nand_i32_acq_rel(ptr %a, i32 %b) nounwind {3866; LA64-LABEL: atomicrmw_nand_i32_acq_rel:3867; LA64:       # %bb.0:3868; LA64-NEXT:  .LBB76_1: # =>This Inner Loop Header: Depth=13869; LA64-NEXT:    ll.w $a2, $a0, 03870; LA64-NEXT:    and $a3, $a2, $a13871; LA64-NEXT:    nor $a3, $a3, $zero3872; LA64-NEXT:    sc.w $a3, $a0, 03873; LA64-NEXT:    beq $a3, $zero, .LBB76_13874; LA64-NEXT:  # %bb.2:3875; LA64-NEXT:    move $a0, $a23876; LA64-NEXT:    ret3877;3878; LA64-LAMCAS-LABEL: atomicrmw_nand_i32_acq_rel:3879; LA64-LAMCAS:       # %bb.0:3880; LA64-LAMCAS-NEXT:    move $a2, $a03881; LA64-LAMCAS-NEXT:    ld.w $a0, $a0, 03882; LA64-LAMCAS-NEXT:    .p2align 4, , 163883; LA64-LAMCAS-NEXT:  .LBB76_1: # %atomicrmw.start3884; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13885; LA64-LAMCAS-NEXT:    move $a3, $a03886; LA64-LAMCAS-NEXT:    and $a4, $a0, $a13887; LA64-LAMCAS-NEXT:    nor $a4, $a4, $zero3888; LA64-LAMCAS-NEXT:    amcas_db.w $a0, $a4, $a23889; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB76_13890; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3891; LA64-LAMCAS-NEXT:    ret3892;3893; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i32_acq_rel:3894; LA64-LAMCAS-LAM-BH:       # %bb.0:3895; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a03896; LA64-LAMCAS-LAM-BH-NEXT:    ld.w $a0, $a0, 03897; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 163898; LA64-LAMCAS-LAM-BH-NEXT:  .LBB76_1: # %atomicrmw.start3899; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=13900; LA64-LAMCAS-LAM-BH-NEXT:    move $a3, $a03901; LA64-LAMCAS-LAM-BH-NEXT:    and $a4, $a0, $a13902; LA64-LAMCAS-LAM-BH-NEXT:    nor $a4, $a4, $zero3903; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.w $a0, $a4, $a23904; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a3, .LBB76_13905; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end3906; LA64-LAMCAS-LAM-BH-NEXT:    ret3907    %1 = atomicrmw nand ptr %a, i32 %b acq_rel3908  ret i32 %13909}3910 3911define i64 @atomicrmw_nand_i64_acq_rel(ptr %a, i64 %b) nounwind {3912; LA64-LABEL: atomicrmw_nand_i64_acq_rel:3913; LA64:       # %bb.0:3914; LA64-NEXT:  .LBB77_1: # =>This Inner Loop Header: Depth=13915; LA64-NEXT:    ll.d $a2, $a0, 03916; LA64-NEXT:    and $a3, $a2, $a13917; LA64-NEXT:    nor $a3, $a3, $zero3918; LA64-NEXT:    sc.d $a3, $a0, 03919; LA64-NEXT:    beq $a3, $zero, .LBB77_13920; LA64-NEXT:  # %bb.2:3921; LA64-NEXT:    move $a0, $a23922; LA64-NEXT:    ret3923;3924; LA64-LAMCAS-LABEL: atomicrmw_nand_i64_acq_rel:3925; LA64-LAMCAS:       # %bb.0:3926; LA64-LAMCAS-NEXT:    move $a2, $a03927; LA64-LAMCAS-NEXT:    ld.d $a0, $a0, 03928; LA64-LAMCAS-NEXT:    .p2align 4, , 163929; LA64-LAMCAS-NEXT:  .LBB77_1: # %atomicrmw.start3930; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=13931; LA64-LAMCAS-NEXT:    move $a3, $a03932; LA64-LAMCAS-NEXT:    and $a4, $a0, $a13933; LA64-LAMCAS-NEXT:    nor $a4, $a4, $zero3934; LA64-LAMCAS-NEXT:    amcas_db.d $a0, $a4, $a23935; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB77_13936; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end3937; LA64-LAMCAS-NEXT:    ret3938;3939; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i64_acq_rel:3940; LA64-LAMCAS-LAM-BH:       # %bb.0:3941; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a03942; LA64-LAMCAS-LAM-BH-NEXT:    ld.d $a0, $a0, 03943; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 163944; LA64-LAMCAS-LAM-BH-NEXT:  .LBB77_1: # %atomicrmw.start3945; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=13946; LA64-LAMCAS-LAM-BH-NEXT:    move $a3, $a03947; LA64-LAMCAS-LAM-BH-NEXT:    and $a4, $a0, $a13948; LA64-LAMCAS-LAM-BH-NEXT:    nor $a4, $a4, $zero3949; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.d $a0, $a4, $a23950; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a3, .LBB77_13951; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end3952; LA64-LAMCAS-LAM-BH-NEXT:    ret3953  %1 = atomicrmw nand ptr %a, i64 %b acq_rel3954  ret i64 %13955}3956 3957 3958 3959define i8 @atomicrmw_and_i8_acq_rel(ptr %a, i8 %b) nounwind {3960; LA64-LABEL: atomicrmw_and_i8_acq_rel:3961; LA64:       # %bb.0:3962; LA64-NEXT:    slli.d $a2, $a0, 33963; LA64-NEXT:    bstrins.d $a0, $zero, 1, 03964; LA64-NEXT:    ori $a3, $zero, 2553965; LA64-NEXT:    sll.w $a3, $a3, $a23966; LA64-NEXT:    andi $a1, $a1, 2553967; LA64-NEXT:    sll.w $a1, $a1, $a23968; LA64-NEXT:    orn $a1, $a1, $a33969; LA64-NEXT:    amand_db.w $a3, $a1, $a03970; LA64-NEXT:    srl.w $a0, $a3, $a23971; LA64-NEXT:    ret3972;3973; LA64-LAMCAS-LABEL: atomicrmw_and_i8_acq_rel:3974; LA64-LAMCAS:       # %bb.0:3975; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 33976; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 03977; LA64-LAMCAS-NEXT:    ori $a3, $zero, 2553978; LA64-LAMCAS-NEXT:    sll.w $a3, $a3, $a23979; LA64-LAMCAS-NEXT:    andi $a1, $a1, 2553980; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a23981; LA64-LAMCAS-NEXT:    orn $a1, $a1, $a33982; LA64-LAMCAS-NEXT:    amand_db.w $a3, $a1, $a03983; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a23984; LA64-LAMCAS-NEXT:    ret3985;3986; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_and_i8_acq_rel:3987; LA64-LAMCAS-LAM-BH:       # %bb.0:3988; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 33989; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 03990; LA64-LAMCAS-LAM-BH-NEXT:    ori $a3, $zero, 2553991; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a3, $a3, $a23992; LA64-LAMCAS-LAM-BH-NEXT:    andi $a1, $a1, 2553993; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a23994; LA64-LAMCAS-LAM-BH-NEXT:    orn $a1, $a1, $a33995; LA64-LAMCAS-LAM-BH-NEXT:    amand_db.w $a3, $a1, $a03996; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a23997; LA64-LAMCAS-LAM-BH-NEXT:    ret3998  %1 = atomicrmw and ptr %a, i8 %b acq_rel3999  ret i8 %14000}4001 4002define i16 @atomicrmw_and_i16_acq_rel(ptr %a, i16 %b) nounwind {4003; LA64-LABEL: atomicrmw_and_i16_acq_rel:4004; LA64:       # %bb.0:4005; LA64-NEXT:    slli.d $a2, $a0, 34006; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04007; LA64-NEXT:    lu12i.w $a3, 154008; LA64-NEXT:    ori $a3, $a3, 40954009; LA64-NEXT:    sll.w $a3, $a3, $a24010; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 04011; LA64-NEXT:    sll.w $a1, $a1, $a24012; LA64-NEXT:    orn $a1, $a1, $a34013; LA64-NEXT:    amand_db.w $a3, $a1, $a04014; LA64-NEXT:    srl.w $a0, $a3, $a24015; LA64-NEXT:    ret4016;4017; LA64-LAMCAS-LABEL: atomicrmw_and_i16_acq_rel:4018; LA64-LAMCAS:       # %bb.0:4019; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 34020; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 04021; LA64-LAMCAS-NEXT:    lu12i.w $a3, 154022; LA64-LAMCAS-NEXT:    ori $a3, $a3, 40954023; LA64-LAMCAS-NEXT:    sll.w $a3, $a3, $a24024; LA64-LAMCAS-NEXT:    bstrpick.d $a1, $a1, 15, 04025; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a24026; LA64-LAMCAS-NEXT:    orn $a1, $a1, $a34027; LA64-LAMCAS-NEXT:    amand_db.w $a3, $a1, $a04028; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a24029; LA64-LAMCAS-NEXT:    ret4030;4031; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_and_i16_acq_rel:4032; LA64-LAMCAS-LAM-BH:       # %bb.0:4033; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 34034; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 04035; LA64-LAMCAS-LAM-BH-NEXT:    lu12i.w $a3, 154036; LA64-LAMCAS-LAM-BH-NEXT:    ori $a3, $a3, 40954037; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a3, $a3, $a24038; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a1, $a1, 15, 04039; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a24040; LA64-LAMCAS-LAM-BH-NEXT:    orn $a1, $a1, $a34041; LA64-LAMCAS-LAM-BH-NEXT:    amand_db.w $a3, $a1, $a04042; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a24043; LA64-LAMCAS-LAM-BH-NEXT:    ret4044  %1 = atomicrmw and ptr %a, i16 %b acq_rel4045  ret i16 %14046 4047}4048 4049define i8 @atomicrmw_or_i8_acq_rel(ptr %a, i8 %b) nounwind {4050; LA64-LABEL: atomicrmw_or_i8_acq_rel:4051; LA64:       # %bb.0:4052; LA64-NEXT:    slli.d $a2, $a0, 34053; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04054; LA64-NEXT:    andi $a1, $a1, 2554055; LA64-NEXT:    sll.w $a1, $a1, $a24056; LA64-NEXT:    amor_db.w $a3, $a1, $a04057; LA64-NEXT:    srl.w $a0, $a3, $a24058; LA64-NEXT:    ret4059;4060; LA64-LAMCAS-LABEL: atomicrmw_or_i8_acq_rel:4061; LA64-LAMCAS:       # %bb.0:4062; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 34063; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 04064; LA64-LAMCAS-NEXT:    andi $a1, $a1, 2554065; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a24066; LA64-LAMCAS-NEXT:    amor_db.w $a3, $a1, $a04067; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a24068; LA64-LAMCAS-NEXT:    ret4069;4070; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_or_i8_acq_rel:4071; LA64-LAMCAS-LAM-BH:       # %bb.0:4072; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 34073; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 04074; LA64-LAMCAS-LAM-BH-NEXT:    andi $a1, $a1, 2554075; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a24076; LA64-LAMCAS-LAM-BH-NEXT:    amor_db.w $a3, $a1, $a04077; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a24078; LA64-LAMCAS-LAM-BH-NEXT:    ret4079  %1 = atomicrmw or ptr %a, i8 %b acq_rel4080  ret i8 %14081}4082 4083define i16 @atomicrmw_or_i16_acq_rel(ptr %a, i16 %b) nounwind {4084; LA64-LABEL: atomicrmw_or_i16_acq_rel:4085; LA64:       # %bb.0:4086; LA64-NEXT:    slli.d $a2, $a0, 34087; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04088; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 04089; LA64-NEXT:    sll.w $a1, $a1, $a24090; LA64-NEXT:    amor_db.w $a3, $a1, $a04091; LA64-NEXT:    srl.w $a0, $a3, $a24092; LA64-NEXT:    ret4093;4094; LA64-LAMCAS-LABEL: atomicrmw_or_i16_acq_rel:4095; LA64-LAMCAS:       # %bb.0:4096; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 34097; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 04098; LA64-LAMCAS-NEXT:    bstrpick.d $a1, $a1, 15, 04099; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a24100; LA64-LAMCAS-NEXT:    amor_db.w $a3, $a1, $a04101; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a24102; LA64-LAMCAS-NEXT:    ret4103;4104; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_or_i16_acq_rel:4105; LA64-LAMCAS-LAM-BH:       # %bb.0:4106; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 34107; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 04108; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a1, $a1, 15, 04109; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a24110; LA64-LAMCAS-LAM-BH-NEXT:    amor_db.w $a3, $a1, $a04111; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a24112; LA64-LAMCAS-LAM-BH-NEXT:    ret4113  %1 = atomicrmw or ptr %a, i16 %b acq_rel4114  ret i16 %14115 4116}4117 4118define i8 @atomicrmw_xor_i8_acq_rel(ptr %a, i8 %b) nounwind {4119; LA64-LABEL: atomicrmw_xor_i8_acq_rel:4120; LA64:       # %bb.0:4121; LA64-NEXT:    slli.d $a2, $a0, 34122; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04123; LA64-NEXT:    andi $a1, $a1, 2554124; LA64-NEXT:    sll.w $a1, $a1, $a24125; LA64-NEXT:    amxor_db.w $a3, $a1, $a04126; LA64-NEXT:    srl.w $a0, $a3, $a24127; LA64-NEXT:    ret4128;4129; LA64-LAMCAS-LABEL: atomicrmw_xor_i8_acq_rel:4130; LA64-LAMCAS:       # %bb.0:4131; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 34132; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 04133; LA64-LAMCAS-NEXT:    andi $a1, $a1, 2554134; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a24135; LA64-LAMCAS-NEXT:    amxor_db.w $a3, $a1, $a04136; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a24137; LA64-LAMCAS-NEXT:    ret4138;4139; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xor_i8_acq_rel:4140; LA64-LAMCAS-LAM-BH:       # %bb.0:4141; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 34142; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 04143; LA64-LAMCAS-LAM-BH-NEXT:    andi $a1, $a1, 2554144; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a24145; LA64-LAMCAS-LAM-BH-NEXT:    amxor_db.w $a3, $a1, $a04146; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a24147; LA64-LAMCAS-LAM-BH-NEXT:    ret4148  %1 = atomicrmw xor ptr %a, i8 %b acq_rel4149  ret i8 %14150}4151 4152define i16 @atomicrmw_xor_i16_acq_rel(ptr %a, i16 %b) nounwind {4153; LA64-LABEL: atomicrmw_xor_i16_acq_rel:4154; LA64:       # %bb.0:4155; LA64-NEXT:    slli.d $a2, $a0, 34156; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04157; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 04158; LA64-NEXT:    sll.w $a1, $a1, $a24159; LA64-NEXT:    amxor_db.w $a3, $a1, $a04160; LA64-NEXT:    srl.w $a0, $a3, $a24161; LA64-NEXT:    ret4162;4163; LA64-LAMCAS-LABEL: atomicrmw_xor_i16_acq_rel:4164; LA64-LAMCAS:       # %bb.0:4165; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 34166; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 04167; LA64-LAMCAS-NEXT:    bstrpick.d $a1, $a1, 15, 04168; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a24169; LA64-LAMCAS-NEXT:    amxor_db.w $a3, $a1, $a04170; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a24171; LA64-LAMCAS-NEXT:    ret4172;4173; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xor_i16_acq_rel:4174; LA64-LAMCAS-LAM-BH:       # %bb.0:4175; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 34176; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 04177; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a1, $a1, 15, 04178; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a24179; LA64-LAMCAS-LAM-BH-NEXT:    amxor_db.w $a3, $a1, $a04180; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a24181; LA64-LAMCAS-LAM-BH-NEXT:    ret4182  %1 = atomicrmw xor ptr %a, i16 %b acq_rel4183  ret i16 %14184 4185}4186 4187define i8 @atomicrmw_xchg_i8_seq_cst(ptr %a, i8 %b) nounwind {4188; LA64-LABEL: atomicrmw_xchg_i8_seq_cst:4189; LA64:       # %bb.0:4190; LA64-NEXT:    slli.d $a2, $a0, 34191; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04192; LA64-NEXT:    ori $a3, $zero, 2554193; LA64-NEXT:    sll.w $a3, $a3, $a24194; LA64-NEXT:    andi $a1, $a1, 2554195; LA64-NEXT:    sll.w $a1, $a1, $a24196; LA64-NEXT:  .LBB84_1: # =>This Inner Loop Header: Depth=14197; LA64-NEXT:    ll.w $a4, $a0, 04198; LA64-NEXT:    addi.w $a5, $a1, 04199; LA64-NEXT:    xor $a5, $a4, $a54200; LA64-NEXT:    and $a5, $a5, $a34201; LA64-NEXT:    xor $a5, $a4, $a54202; LA64-NEXT:    sc.w $a5, $a0, 04203; LA64-NEXT:    beq $a5, $zero, .LBB84_14204; LA64-NEXT:  # %bb.2:4205; LA64-NEXT:    srl.w $a0, $a4, $a24206; LA64-NEXT:    ret4207;4208; LA64-LAMCAS-LABEL: atomicrmw_xchg_i8_seq_cst:4209; LA64-LAMCAS:       # %bb.0:4210; LA64-LAMCAS-NEXT:    ld.bu $a2, $a0, 04211; LA64-LAMCAS-NEXT:    .p2align 4, , 164212; LA64-LAMCAS-NEXT:  .LBB84_1: # %atomicrmw.start4213; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14214; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a24215; LA64-LAMCAS-NEXT:    amcas_db.b $a2, $a1, $a04216; LA64-LAMCAS-NEXT:    bne $a2, $a3, .LBB84_14217; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4218; LA64-LAMCAS-NEXT:    move $a0, $a24219; LA64-LAMCAS-NEXT:    ret4220;4221; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_i8_seq_cst:4222; LA64-LAMCAS-LAM-BH:       # %bb.0:4223; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.b $a2, $a1, $a04224; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a24225; LA64-LAMCAS-LAM-BH-NEXT:    ret4226  %1 = atomicrmw xchg ptr %a, i8 %b seq_cst4227  ret i8 %14228}4229 4230define i8 @atomicrmw_xchg_0_i8_seq_cst(ptr %a) nounwind {4231; LA64-LABEL: atomicrmw_xchg_0_i8_seq_cst:4232; LA64:       # %bb.0:4233; LA64-NEXT:    slli.d $a1, $a0, 34234; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04235; LA64-NEXT:    ori $a2, $zero, 2554236; LA64-NEXT:    sll.w $a2, $a2, $a14237; LA64-NEXT:    nor $a2, $a2, $zero4238; LA64-NEXT:    amand_db.w $a3, $a2, $a04239; LA64-NEXT:    srl.w $a0, $a3, $a14240; LA64-NEXT:    ret4241;4242; LA64-LAMCAS-LABEL: atomicrmw_xchg_0_i8_seq_cst:4243; LA64-LAMCAS:       # %bb.0:4244; LA64-LAMCAS-NEXT:    move $a1, $a04245; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 04246; LA64-LAMCAS-NEXT:    .p2align 4, , 164247; LA64-LAMCAS-NEXT:  .LBB85_1: # %atomicrmw.start4248; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14249; LA64-LAMCAS-NEXT:    ext.w.b $a2, $a04250; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $zero, $a14251; LA64-LAMCAS-NEXT:    bne $a0, $a2, .LBB85_14252; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4253; LA64-LAMCAS-NEXT:    ret4254;4255; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_0_i8_seq_cst:4256; LA64-LAMCAS-LAM-BH:       # %bb.0:4257; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.b $a1, $zero, $a04258; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a14259; LA64-LAMCAS-LAM-BH-NEXT:    ret4260  %1 = atomicrmw xchg ptr %a, i8 0 seq_cst4261  ret i8 %14262}4263 4264define i8 @atomicrmw_xchg_minus_1_i8_seq_cst(ptr %a) nounwind {4265; LA64-LABEL: atomicrmw_xchg_minus_1_i8_seq_cst:4266; LA64:       # %bb.0:4267; LA64-NEXT:    slli.d $a1, $a0, 34268; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04269; LA64-NEXT:    ori $a2, $zero, 2554270; LA64-NEXT:    sll.w $a2, $a2, $a14271; LA64-NEXT:    amor_db.w $a3, $a2, $a04272; LA64-NEXT:    srl.w $a0, $a3, $a14273; LA64-NEXT:    ret4274;4275; LA64-LAMCAS-LABEL: atomicrmw_xchg_minus_1_i8_seq_cst:4276; LA64-LAMCAS:       # %bb.0:4277; LA64-LAMCAS-NEXT:    move $a1, $a04278; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 04279; LA64-LAMCAS-NEXT:    addi.w $a2, $zero, -14280; LA64-LAMCAS-NEXT:    .p2align 4, , 164281; LA64-LAMCAS-NEXT:  .LBB86_1: # %atomicrmw.start4282; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14283; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a04284; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a2, $a14285; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB86_14286; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4287; LA64-LAMCAS-NEXT:    ret4288;4289; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_minus_1_i8_seq_cst:4290; LA64-LAMCAS-LAM-BH:       # %bb.0:4291; LA64-LAMCAS-LAM-BH-NEXT:    addi.w $a2, $zero, -14292; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.b $a1, $a2, $a04293; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a14294; LA64-LAMCAS-LAM-BH-NEXT:    ret4295  %1 = atomicrmw xchg ptr %a, i8 -1 seq_cst4296  ret i8 %14297}4298 4299define i16 @atomicrmw_xchg_i16_seq_cst(ptr %a, i16 %b) nounwind {4300; LA64-LABEL: atomicrmw_xchg_i16_seq_cst:4301; LA64:       # %bb.0:4302; LA64-NEXT:    slli.d $a2, $a0, 34303; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04304; LA64-NEXT:    lu12i.w $a3, 154305; LA64-NEXT:    ori $a3, $a3, 40954306; LA64-NEXT:    sll.w $a3, $a3, $a24307; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 04308; LA64-NEXT:    sll.w $a1, $a1, $a24309; LA64-NEXT:  .LBB87_1: # =>This Inner Loop Header: Depth=14310; LA64-NEXT:    ll.w $a4, $a0, 04311; LA64-NEXT:    addi.w $a5, $a1, 04312; LA64-NEXT:    xor $a5, $a4, $a54313; LA64-NEXT:    and $a5, $a5, $a34314; LA64-NEXT:    xor $a5, $a4, $a54315; LA64-NEXT:    sc.w $a5, $a0, 04316; LA64-NEXT:    beq $a5, $zero, .LBB87_14317; LA64-NEXT:  # %bb.2:4318; LA64-NEXT:    srl.w $a0, $a4, $a24319; LA64-NEXT:    ret4320;4321; LA64-LAMCAS-LABEL: atomicrmw_xchg_i16_seq_cst:4322; LA64-LAMCAS:       # %bb.0:4323; LA64-LAMCAS-NEXT:    ld.hu $a2, $a0, 04324; LA64-LAMCAS-NEXT:    .p2align 4, , 164325; LA64-LAMCAS-NEXT:  .LBB87_1: # %atomicrmw.start4326; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14327; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a24328; LA64-LAMCAS-NEXT:    amcas_db.h $a2, $a1, $a04329; LA64-LAMCAS-NEXT:    bne $a2, $a3, .LBB87_14330; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4331; LA64-LAMCAS-NEXT:    move $a0, $a24332; LA64-LAMCAS-NEXT:    ret4333;4334; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_i16_seq_cst:4335; LA64-LAMCAS-LAM-BH:       # %bb.0:4336; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.h $a2, $a1, $a04337; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a24338; LA64-LAMCAS-LAM-BH-NEXT:    ret4339  %1 = atomicrmw xchg ptr %a, i16 %b seq_cst4340  ret i16 %14341}4342 4343define i16 @atomicrmw_xchg_0_i16_seq_cst(ptr %a) nounwind {4344; LA64-LABEL: atomicrmw_xchg_0_i16_seq_cst:4345; LA64:       # %bb.0:4346; LA64-NEXT:    slli.d $a1, $a0, 34347; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04348; LA64-NEXT:    lu12i.w $a2, 154349; LA64-NEXT:    ori $a2, $a2, 40954350; LA64-NEXT:    sll.w $a2, $a2, $a14351; LA64-NEXT:    nor $a2, $a2, $zero4352; LA64-NEXT:    amand_db.w $a3, $a2, $a04353; LA64-NEXT:    srl.w $a0, $a3, $a14354; LA64-NEXT:    ret4355;4356; LA64-LAMCAS-LABEL: atomicrmw_xchg_0_i16_seq_cst:4357; LA64-LAMCAS:       # %bb.0:4358; LA64-LAMCAS-NEXT:    move $a1, $a04359; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 04360; LA64-LAMCAS-NEXT:    .p2align 4, , 164361; LA64-LAMCAS-NEXT:  .LBB88_1: # %atomicrmw.start4362; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14363; LA64-LAMCAS-NEXT:    ext.w.h $a2, $a04364; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $zero, $a14365; LA64-LAMCAS-NEXT:    bne $a0, $a2, .LBB88_14366; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4367; LA64-LAMCAS-NEXT:    ret4368;4369; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_0_i16_seq_cst:4370; LA64-LAMCAS-LAM-BH:       # %bb.0:4371; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.h $a1, $zero, $a04372; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a14373; LA64-LAMCAS-LAM-BH-NEXT:    ret4374  %1 = atomicrmw xchg ptr %a, i16 0 seq_cst4375  ret i16 %14376}4377 4378define i16 @atomicrmw_xchg_minus_1_i16_seq_cst(ptr %a) nounwind {4379; LA64-LABEL: atomicrmw_xchg_minus_1_i16_seq_cst:4380; LA64:       # %bb.0:4381; LA64-NEXT:    slli.d $a1, $a0, 34382; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04383; LA64-NEXT:    lu12i.w $a2, 154384; LA64-NEXT:    ori $a2, $a2, 40954385; LA64-NEXT:    sll.w $a2, $a2, $a14386; LA64-NEXT:    amor_db.w $a3, $a2, $a04387; LA64-NEXT:    srl.w $a0, $a3, $a14388; LA64-NEXT:    ret4389;4390; LA64-LAMCAS-LABEL: atomicrmw_xchg_minus_1_i16_seq_cst:4391; LA64-LAMCAS:       # %bb.0:4392; LA64-LAMCAS-NEXT:    move $a1, $a04393; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 04394; LA64-LAMCAS-NEXT:    addi.w $a2, $zero, -14395; LA64-LAMCAS-NEXT:    .p2align 4, , 164396; LA64-LAMCAS-NEXT:  .LBB89_1: # %atomicrmw.start4397; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14398; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a04399; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a2, $a14400; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB89_14401; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4402; LA64-LAMCAS-NEXT:    ret4403;4404; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_minus_1_i16_seq_cst:4405; LA64-LAMCAS-LAM-BH:       # %bb.0:4406; LA64-LAMCAS-LAM-BH-NEXT:    addi.w $a2, $zero, -14407; LA64-LAMCAS-LAM-BH-NEXT:    amswap_db.h $a1, $a2, $a04408; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a14409; LA64-LAMCAS-LAM-BH-NEXT:    ret4410  %1 = atomicrmw xchg ptr %a, i16 -1 seq_cst4411  ret i16 %14412 4413}4414 4415define i8 @atomicrmw_add_i8_seq_cst(ptr %a, i8 %b) nounwind {4416; LA64-LABEL: atomicrmw_add_i8_seq_cst:4417; LA64:       # %bb.0:4418; LA64-NEXT:    slli.d $a2, $a0, 34419; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04420; LA64-NEXT:    ori $a3, $zero, 2554421; LA64-NEXT:    sll.w $a3, $a3, $a24422; LA64-NEXT:    andi $a1, $a1, 2554423; LA64-NEXT:    sll.w $a1, $a1, $a24424; LA64-NEXT:  .LBB90_1: # =>This Inner Loop Header: Depth=14425; LA64-NEXT:    ll.w $a4, $a0, 04426; LA64-NEXT:    add.w $a5, $a4, $a14427; LA64-NEXT:    xor $a5, $a4, $a54428; LA64-NEXT:    and $a5, $a5, $a34429; LA64-NEXT:    xor $a5, $a4, $a54430; LA64-NEXT:    sc.w $a5, $a0, 04431; LA64-NEXT:    beq $a5, $zero, .LBB90_14432; LA64-NEXT:  # %bb.2:4433; LA64-NEXT:    srl.w $a0, $a4, $a24434; LA64-NEXT:    ret4435;4436; LA64-LAMCAS-LABEL: atomicrmw_add_i8_seq_cst:4437; LA64-LAMCAS:       # %bb.0:4438; LA64-LAMCAS-NEXT:    move $a2, $a04439; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 04440; LA64-LAMCAS-NEXT:    .p2align 4, , 164441; LA64-LAMCAS-NEXT:  .LBB90_1: # %atomicrmw.start4442; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14443; LA64-LAMCAS-NEXT:    add.d $a3, $a0, $a14444; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a04445; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a3, $a24446; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB90_14447; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4448; LA64-LAMCAS-NEXT:    ret4449;4450; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_add_i8_seq_cst:4451; LA64-LAMCAS-LAM-BH:       # %bb.0:4452; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.b $a2, $a1, $a04453; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a24454; LA64-LAMCAS-LAM-BH-NEXT:    ret4455  %1 = atomicrmw add ptr %a, i8 %b seq_cst4456  ret i8 %14457}4458 4459define i16 @atomicrmw_add_i16_seq_cst(ptr %a, i16 %b) nounwind {4460; LA64-LABEL: atomicrmw_add_i16_seq_cst:4461; LA64:       # %bb.0:4462; LA64-NEXT:    slli.d $a2, $a0, 34463; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04464; LA64-NEXT:    lu12i.w $a3, 154465; LA64-NEXT:    ori $a3, $a3, 40954466; LA64-NEXT:    sll.w $a3, $a3, $a24467; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 04468; LA64-NEXT:    sll.w $a1, $a1, $a24469; LA64-NEXT:  .LBB91_1: # =>This Inner Loop Header: Depth=14470; LA64-NEXT:    ll.w $a4, $a0, 04471; LA64-NEXT:    add.w $a5, $a4, $a14472; LA64-NEXT:    xor $a5, $a4, $a54473; LA64-NEXT:    and $a5, $a5, $a34474; LA64-NEXT:    xor $a5, $a4, $a54475; LA64-NEXT:    sc.w $a5, $a0, 04476; LA64-NEXT:    beq $a5, $zero, .LBB91_14477; LA64-NEXT:  # %bb.2:4478; LA64-NEXT:    srl.w $a0, $a4, $a24479; LA64-NEXT:    ret4480;4481; LA64-LAMCAS-LABEL: atomicrmw_add_i16_seq_cst:4482; LA64-LAMCAS:       # %bb.0:4483; LA64-LAMCAS-NEXT:    move $a2, $a04484; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 04485; LA64-LAMCAS-NEXT:    .p2align 4, , 164486; LA64-LAMCAS-NEXT:  .LBB91_1: # %atomicrmw.start4487; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14488; LA64-LAMCAS-NEXT:    add.d $a3, $a0, $a14489; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a04490; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a3, $a24491; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB91_14492; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4493; LA64-LAMCAS-NEXT:    ret4494;4495; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_add_i16_seq_cst:4496; LA64-LAMCAS-LAM-BH:       # %bb.0:4497; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.h $a2, $a1, $a04498; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a24499; LA64-LAMCAS-LAM-BH-NEXT:    ret4500  %1 = atomicrmw add ptr %a, i16 %b seq_cst4501  ret i16 %14502 4503}4504 4505define i8 @atomicrmw_sub_i8_seq_cst(ptr %a, i8 %b) nounwind {4506; LA64-LABEL: atomicrmw_sub_i8_seq_cst:4507; LA64:       # %bb.0:4508; LA64-NEXT:    slli.d $a2, $a0, 34509; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04510; LA64-NEXT:    ori $a3, $zero, 2554511; LA64-NEXT:    sll.w $a3, $a3, $a24512; LA64-NEXT:    andi $a1, $a1, 2554513; LA64-NEXT:    sll.w $a1, $a1, $a24514; LA64-NEXT:  .LBB92_1: # =>This Inner Loop Header: Depth=14515; LA64-NEXT:    ll.w $a4, $a0, 04516; LA64-NEXT:    sub.w $a5, $a4, $a14517; LA64-NEXT:    xor $a5, $a4, $a54518; LA64-NEXT:    and $a5, $a5, $a34519; LA64-NEXT:    xor $a5, $a4, $a54520; LA64-NEXT:    sc.w $a5, $a0, 04521; LA64-NEXT:    beq $a5, $zero, .LBB92_14522; LA64-NEXT:  # %bb.2:4523; LA64-NEXT:    srl.w $a0, $a4, $a24524; LA64-NEXT:    ret4525;4526; LA64-LAMCAS-LABEL: atomicrmw_sub_i8_seq_cst:4527; LA64-LAMCAS:       # %bb.0:4528; LA64-LAMCAS-NEXT:    move $a2, $a04529; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 04530; LA64-LAMCAS-NEXT:    .p2align 4, , 164531; LA64-LAMCAS-NEXT:  .LBB92_1: # %atomicrmw.start4532; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14533; LA64-LAMCAS-NEXT:    sub.d $a3, $a0, $a14534; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a04535; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a3, $a24536; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB92_14537; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4538; LA64-LAMCAS-NEXT:    ret4539;4540; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_sub_i8_seq_cst:4541; LA64-LAMCAS-LAM-BH:       # %bb.0:4542; LA64-LAMCAS-LAM-BH-NEXT:    sub.w $a2, $zero, $a14543; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.b $a1, $a2, $a04544; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a14545; LA64-LAMCAS-LAM-BH-NEXT:    ret4546  %1 = atomicrmw sub ptr %a, i8 %b seq_cst4547  ret i8 %14548}4549 4550define i16 @atomicrmw_sub_i16_seq_cst(ptr %a, i16 %b) nounwind {4551; LA64-LABEL: atomicrmw_sub_i16_seq_cst:4552; LA64:       # %bb.0:4553; LA64-NEXT:    slli.d $a2, $a0, 34554; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04555; LA64-NEXT:    lu12i.w $a3, 154556; LA64-NEXT:    ori $a3, $a3, 40954557; LA64-NEXT:    sll.w $a3, $a3, $a24558; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 04559; LA64-NEXT:    sll.w $a1, $a1, $a24560; LA64-NEXT:  .LBB93_1: # =>This Inner Loop Header: Depth=14561; LA64-NEXT:    ll.w $a4, $a0, 04562; LA64-NEXT:    sub.w $a5, $a4, $a14563; LA64-NEXT:    xor $a5, $a4, $a54564; LA64-NEXT:    and $a5, $a5, $a34565; LA64-NEXT:    xor $a5, $a4, $a54566; LA64-NEXT:    sc.w $a5, $a0, 04567; LA64-NEXT:    beq $a5, $zero, .LBB93_14568; LA64-NEXT:  # %bb.2:4569; LA64-NEXT:    srl.w $a0, $a4, $a24570; LA64-NEXT:    ret4571;4572; LA64-LAMCAS-LABEL: atomicrmw_sub_i16_seq_cst:4573; LA64-LAMCAS:       # %bb.0:4574; LA64-LAMCAS-NEXT:    move $a2, $a04575; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 04576; LA64-LAMCAS-NEXT:    .p2align 4, , 164577; LA64-LAMCAS-NEXT:  .LBB93_1: # %atomicrmw.start4578; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14579; LA64-LAMCAS-NEXT:    sub.d $a3, $a0, $a14580; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a04581; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a3, $a24582; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB93_14583; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4584; LA64-LAMCAS-NEXT:    ret4585;4586; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_sub_i16_seq_cst:4587; LA64-LAMCAS-LAM-BH:       # %bb.0:4588; LA64-LAMCAS-LAM-BH-NEXT:    sub.w $a2, $zero, $a14589; LA64-LAMCAS-LAM-BH-NEXT:    amadd_db.h $a1, $a2, $a04590; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a14591; LA64-LAMCAS-LAM-BH-NEXT:    ret4592  %1 = atomicrmw sub ptr %a, i16 %b seq_cst4593  ret i16 %14594 4595}4596 4597define i8 @atomicrmw_umax_i8_seq_cst(ptr %a, i8 %b) nounwind {4598; LA64-LABEL: atomicrmw_umax_i8_seq_cst:4599; LA64:       # %bb.0:4600; LA64-NEXT:    slli.d $a2, $a0, 34601; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04602; LA64-NEXT:    ori $a3, $zero, 2554603; LA64-NEXT:    sll.w $a3, $a3, $a24604; LA64-NEXT:    andi $a1, $a1, 2554605; LA64-NEXT:    sll.w $a1, $a1, $a24606; LA64-NEXT:  .LBB94_1: # =>This Inner Loop Header: Depth=14607; LA64-NEXT:    ll.w $a4, $a0, 04608; LA64-NEXT:    and $a6, $a4, $a34609; LA64-NEXT:    move $a5, $a44610; LA64-NEXT:    bgeu $a6, $a1, .LBB94_34611; LA64-NEXT:  # %bb.2: # in Loop: Header=BB94_1 Depth=14612; LA64-NEXT:    xor $a5, $a4, $a14613; LA64-NEXT:    and $a5, $a5, $a34614; LA64-NEXT:    xor $a5, $a4, $a54615; LA64-NEXT:  .LBB94_3: # in Loop: Header=BB94_1 Depth=14616; LA64-NEXT:    sc.w $a5, $a0, 04617; LA64-NEXT:    beq $a5, $zero, .LBB94_14618; LA64-NEXT:  # %bb.4:4619; LA64-NEXT:    srl.w $a0, $a4, $a24620; LA64-NEXT:    ret4621;4622; LA64-LAMCAS-LABEL: atomicrmw_umax_i8_seq_cst:4623; LA64-LAMCAS:       # %bb.0:4624; LA64-LAMCAS-NEXT:    move $a2, $a04625; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 04626; LA64-LAMCAS-NEXT:    andi $a3, $a1, 2554627; LA64-LAMCAS-NEXT:    .p2align 4, , 164628; LA64-LAMCAS-NEXT:  .LBB94_1: # %atomicrmw.start4629; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14630; LA64-LAMCAS-NEXT:    andi $a4, $a0, 2554631; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a44632; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a44633; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a44634; LA64-LAMCAS-NEXT:    or $a4, $a4, $a54635; LA64-LAMCAS-NEXT:    ext.w.b $a5, $a04636; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a4, $a24637; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB94_14638; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4639; LA64-LAMCAS-NEXT:    ret4640;4641; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umax_i8_seq_cst:4642; LA64-LAMCAS-LAM-BH:       # %bb.0:4643; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a04644; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 04645; LA64-LAMCAS-LAM-BH-NEXT:    andi $a3, $a1, 2554646; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 164647; LA64-LAMCAS-LAM-BH-NEXT:  .LBB94_1: # %atomicrmw.start4648; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=14649; LA64-LAMCAS-LAM-BH-NEXT:    andi $a4, $a0, 2554650; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a44651; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a44652; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a44653; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a54654; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a5, $a04655; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a4, $a24656; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB94_14657; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end4658; LA64-LAMCAS-LAM-BH-NEXT:    ret4659  %1 = atomicrmw umax ptr %a, i8 %b seq_cst4660  ret i8 %14661}4662 4663define i16 @atomicrmw_umax_i16_seq_cst(ptr %a, i16 %b) nounwind {4664; LA64-LABEL: atomicrmw_umax_i16_seq_cst:4665; LA64:       # %bb.0:4666; LA64-NEXT:    slli.d $a2, $a0, 34667; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04668; LA64-NEXT:    lu12i.w $a3, 154669; LA64-NEXT:    ori $a3, $a3, 40954670; LA64-NEXT:    sll.w $a3, $a3, $a24671; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 04672; LA64-NEXT:    sll.w $a1, $a1, $a24673; LA64-NEXT:  .LBB95_1: # =>This Inner Loop Header: Depth=14674; LA64-NEXT:    ll.w $a4, $a0, 04675; LA64-NEXT:    and $a6, $a4, $a34676; LA64-NEXT:    move $a5, $a44677; LA64-NEXT:    bgeu $a6, $a1, .LBB95_34678; LA64-NEXT:  # %bb.2: # in Loop: Header=BB95_1 Depth=14679; LA64-NEXT:    xor $a5, $a4, $a14680; LA64-NEXT:    and $a5, $a5, $a34681; LA64-NEXT:    xor $a5, $a4, $a54682; LA64-NEXT:  .LBB95_3: # in Loop: Header=BB95_1 Depth=14683; LA64-NEXT:    sc.w $a5, $a0, 04684; LA64-NEXT:    beq $a5, $zero, .LBB95_14685; LA64-NEXT:  # %bb.4:4686; LA64-NEXT:    srl.w $a0, $a4, $a24687; LA64-NEXT:    ret4688;4689; LA64-LAMCAS-LABEL: atomicrmw_umax_i16_seq_cst:4690; LA64-LAMCAS:       # %bb.0:4691; LA64-LAMCAS-NEXT:    move $a2, $a04692; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 04693; LA64-LAMCAS-NEXT:    bstrpick.d $a3, $a1, 15, 04694; LA64-LAMCAS-NEXT:    .p2align 4, , 164695; LA64-LAMCAS-NEXT:  .LBB95_1: # %atomicrmw.start4696; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14697; LA64-LAMCAS-NEXT:    bstrpick.d $a4, $a0, 15, 04698; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a44699; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a44700; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a44701; LA64-LAMCAS-NEXT:    or $a4, $a4, $a54702; LA64-LAMCAS-NEXT:    ext.w.h $a5, $a04703; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a4, $a24704; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB95_14705; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4706; LA64-LAMCAS-NEXT:    ret4707;4708; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umax_i16_seq_cst:4709; LA64-LAMCAS-LAM-BH:       # %bb.0:4710; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a04711; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 04712; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a3, $a1, 15, 04713; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 164714; LA64-LAMCAS-LAM-BH-NEXT:  .LBB95_1: # %atomicrmw.start4715; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=14716; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a4, $a0, 15, 04717; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a44718; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a44719; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a44720; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a54721; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a5, $a04722; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a4, $a24723; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB95_14724; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end4725; LA64-LAMCAS-LAM-BH-NEXT:    ret4726  %1 = atomicrmw umax ptr %a, i16 %b seq_cst4727  ret i16 %14728}4729 4730define i8 @atomicrmw_umin_i8_seq_cst(ptr %a, i8 %b) nounwind {4731; LA64-LABEL: atomicrmw_umin_i8_seq_cst:4732; LA64:       # %bb.0:4733; LA64-NEXT:    slli.d $a2, $a0, 34734; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04735; LA64-NEXT:    ori $a3, $zero, 2554736; LA64-NEXT:    sll.w $a3, $a3, $a24737; LA64-NEXT:    andi $a1, $a1, 2554738; LA64-NEXT:    sll.w $a1, $a1, $a24739; LA64-NEXT:  .LBB96_1: # =>This Inner Loop Header: Depth=14740; LA64-NEXT:    ll.w $a4, $a0, 04741; LA64-NEXT:    and $a6, $a4, $a34742; LA64-NEXT:    move $a5, $a44743; LA64-NEXT:    bgeu $a1, $a6, .LBB96_34744; LA64-NEXT:  # %bb.2: # in Loop: Header=BB96_1 Depth=14745; LA64-NEXT:    xor $a5, $a4, $a14746; LA64-NEXT:    and $a5, $a5, $a34747; LA64-NEXT:    xor $a5, $a4, $a54748; LA64-NEXT:  .LBB96_3: # in Loop: Header=BB96_1 Depth=14749; LA64-NEXT:    sc.w $a5, $a0, 04750; LA64-NEXT:    beq $a5, $zero, .LBB96_14751; LA64-NEXT:  # %bb.4:4752; LA64-NEXT:    srl.w $a0, $a4, $a24753; LA64-NEXT:    ret4754;4755; LA64-LAMCAS-LABEL: atomicrmw_umin_i8_seq_cst:4756; LA64-LAMCAS:       # %bb.0:4757; LA64-LAMCAS-NEXT:    move $a2, $a04758; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 04759; LA64-LAMCAS-NEXT:    andi $a3, $a1, 2554760; LA64-LAMCAS-NEXT:    .p2align 4, , 164761; LA64-LAMCAS-NEXT:  .LBB96_1: # %atomicrmw.start4762; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14763; LA64-LAMCAS-NEXT:    andi $a4, $a0, 2554764; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a44765; LA64-LAMCAS-NEXT:    xori $a4, $a4, 14766; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a44767; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a44768; LA64-LAMCAS-NEXT:    or $a4, $a4, $a54769; LA64-LAMCAS-NEXT:    ext.w.b $a5, $a04770; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a4, $a24771; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB96_14772; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4773; LA64-LAMCAS-NEXT:    ret4774;4775; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umin_i8_seq_cst:4776; LA64-LAMCAS-LAM-BH:       # %bb.0:4777; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a04778; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 04779; LA64-LAMCAS-LAM-BH-NEXT:    andi $a3, $a1, 2554780; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 164781; LA64-LAMCAS-LAM-BH-NEXT:  .LBB96_1: # %atomicrmw.start4782; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=14783; LA64-LAMCAS-LAM-BH-NEXT:    andi $a4, $a0, 2554784; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a44785; LA64-LAMCAS-LAM-BH-NEXT:    xori $a4, $a4, 14786; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a44787; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a44788; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a54789; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a5, $a04790; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a4, $a24791; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB96_14792; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end4793; LA64-LAMCAS-LAM-BH-NEXT:    ret4794  %1 = atomicrmw umin ptr %a, i8 %b seq_cst4795  ret i8 %14796}4797 4798define i16 @atomicrmw_umin_i16_seq_cst(ptr %a, i16 %b) nounwind {4799; LA64-LABEL: atomicrmw_umin_i16_seq_cst:4800; LA64:       # %bb.0:4801; LA64-NEXT:    slli.d $a2, $a0, 34802; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04803; LA64-NEXT:    lu12i.w $a3, 154804; LA64-NEXT:    ori $a3, $a3, 40954805; LA64-NEXT:    sll.w $a3, $a3, $a24806; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 04807; LA64-NEXT:    sll.w $a1, $a1, $a24808; LA64-NEXT:  .LBB97_1: # =>This Inner Loop Header: Depth=14809; LA64-NEXT:    ll.w $a4, $a0, 04810; LA64-NEXT:    and $a6, $a4, $a34811; LA64-NEXT:    move $a5, $a44812; LA64-NEXT:    bgeu $a1, $a6, .LBB97_34813; LA64-NEXT:  # %bb.2: # in Loop: Header=BB97_1 Depth=14814; LA64-NEXT:    xor $a5, $a4, $a14815; LA64-NEXT:    and $a5, $a5, $a34816; LA64-NEXT:    xor $a5, $a4, $a54817; LA64-NEXT:  .LBB97_3: # in Loop: Header=BB97_1 Depth=14818; LA64-NEXT:    sc.w $a5, $a0, 04819; LA64-NEXT:    beq $a5, $zero, .LBB97_14820; LA64-NEXT:  # %bb.4:4821; LA64-NEXT:    srl.w $a0, $a4, $a24822; LA64-NEXT:    ret4823;4824; LA64-LAMCAS-LABEL: atomicrmw_umin_i16_seq_cst:4825; LA64-LAMCAS:       # %bb.0:4826; LA64-LAMCAS-NEXT:    move $a2, $a04827; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 04828; LA64-LAMCAS-NEXT:    bstrpick.d $a3, $a1, 15, 04829; LA64-LAMCAS-NEXT:    .p2align 4, , 164830; LA64-LAMCAS-NEXT:  .LBB97_1: # %atomicrmw.start4831; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14832; LA64-LAMCAS-NEXT:    bstrpick.d $a4, $a0, 15, 04833; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a44834; LA64-LAMCAS-NEXT:    xori $a4, $a4, 14835; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a44836; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a44837; LA64-LAMCAS-NEXT:    or $a4, $a4, $a54838; LA64-LAMCAS-NEXT:    ext.w.h $a5, $a04839; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a4, $a24840; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB97_14841; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4842; LA64-LAMCAS-NEXT:    ret4843;4844; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umin_i16_seq_cst:4845; LA64-LAMCAS-LAM-BH:       # %bb.0:4846; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a04847; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 04848; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a3, $a1, 15, 04849; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 164850; LA64-LAMCAS-LAM-BH-NEXT:  .LBB97_1: # %atomicrmw.start4851; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=14852; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a4, $a0, 15, 04853; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a44854; LA64-LAMCAS-LAM-BH-NEXT:    xori $a4, $a4, 14855; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a44856; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a44857; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a54858; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a5, $a04859; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a4, $a24860; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB97_14861; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end4862; LA64-LAMCAS-LAM-BH-NEXT:    ret4863  %1 = atomicrmw umin ptr %a, i16 %b seq_cst4864  ret i16 %14865}4866 4867define i8 @atomicrmw_max_i8_seq_cst(ptr %a, i8 %b) nounwind {4868; LA64-LABEL: atomicrmw_max_i8_seq_cst:4869; LA64:       # %bb.0:4870; LA64-NEXT:    slli.d $a2, $a0, 34871; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04872; LA64-NEXT:    andi $a3, $a2, 244873; LA64-NEXT:    ori $a4, $zero, 2554874; LA64-NEXT:    sll.w $a4, $a4, $a24875; LA64-NEXT:    ext.w.b $a1, $a14876; LA64-NEXT:    sll.w $a1, $a1, $a24877; LA64-NEXT:    xori $a3, $a3, 564878; LA64-NEXT:  .LBB98_1: # =>This Inner Loop Header: Depth=14879; LA64-NEXT:    ll.w $a5, $a0, 04880; LA64-NEXT:    and $a7, $a5, $a44881; LA64-NEXT:    move $a6, $a54882; LA64-NEXT:    sll.w $a7, $a7, $a34883; LA64-NEXT:    sra.w $a7, $a7, $a34884; LA64-NEXT:    bge $a7, $a1, .LBB98_34885; LA64-NEXT:  # %bb.2: # in Loop: Header=BB98_1 Depth=14886; LA64-NEXT:    xor $a6, $a5, $a14887; LA64-NEXT:    and $a6, $a6, $a44888; LA64-NEXT:    xor $a6, $a5, $a64889; LA64-NEXT:  .LBB98_3: # in Loop: Header=BB98_1 Depth=14890; LA64-NEXT:    sc.w $a6, $a0, 04891; LA64-NEXT:    beq $a6, $zero, .LBB98_14892; LA64-NEXT:  # %bb.4:4893; LA64-NEXT:    srl.w $a0, $a5, $a24894; LA64-NEXT:    ret4895;4896; LA64-LAMCAS-LABEL: atomicrmw_max_i8_seq_cst:4897; LA64-LAMCAS:       # %bb.0:4898; LA64-LAMCAS-NEXT:    move $a2, $a04899; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 04900; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a14901; LA64-LAMCAS-NEXT:    .p2align 4, , 164902; LA64-LAMCAS-NEXT:  .LBB98_1: # %atomicrmw.start4903; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14904; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a04905; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a44906; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a54907; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a54908; LA64-LAMCAS-NEXT:    or $a5, $a5, $a64909; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a5, $a24910; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB98_14911; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4912; LA64-LAMCAS-NEXT:    ret4913;4914; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_max_i8_seq_cst:4915; LA64-LAMCAS-LAM-BH:       # %bb.0:4916; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a04917; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 04918; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a3, $a14919; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 164920; LA64-LAMCAS-LAM-BH-NEXT:  .LBB98_1: # %atomicrmw.start4921; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=14922; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a4, $a04923; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a44924; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a54925; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a54926; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a64927; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a5, $a24928; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB98_14929; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end4930; LA64-LAMCAS-LAM-BH-NEXT:    ret4931  %1 = atomicrmw max ptr %a, i8 %b seq_cst4932  ret i8 %14933}4934 4935define i16 @atomicrmw_max_i16_seq_cst(ptr %a, i16 %b) nounwind {4936; LA64-LABEL: atomicrmw_max_i16_seq_cst:4937; LA64:       # %bb.0:4938; LA64-NEXT:    slli.d $a2, $a0, 34939; LA64-NEXT:    bstrins.d $a0, $zero, 1, 04940; LA64-NEXT:    andi $a3, $a2, 244941; LA64-NEXT:    lu12i.w $a4, 154942; LA64-NEXT:    ori $a4, $a4, 40954943; LA64-NEXT:    sll.w $a4, $a4, $a24944; LA64-NEXT:    ext.w.h $a1, $a14945; LA64-NEXT:    sll.w $a1, $a1, $a24946; LA64-NEXT:    ori $a5, $zero, 484947; LA64-NEXT:    sub.d $a3, $a5, $a34948; LA64-NEXT:  .LBB99_1: # =>This Inner Loop Header: Depth=14949; LA64-NEXT:    ll.w $a5, $a0, 04950; LA64-NEXT:    and $a7, $a5, $a44951; LA64-NEXT:    move $a6, $a54952; LA64-NEXT:    sll.w $a7, $a7, $a34953; LA64-NEXT:    sra.w $a7, $a7, $a34954; LA64-NEXT:    bge $a7, $a1, .LBB99_34955; LA64-NEXT:  # %bb.2: # in Loop: Header=BB99_1 Depth=14956; LA64-NEXT:    xor $a6, $a5, $a14957; LA64-NEXT:    and $a6, $a6, $a44958; LA64-NEXT:    xor $a6, $a5, $a64959; LA64-NEXT:  .LBB99_3: # in Loop: Header=BB99_1 Depth=14960; LA64-NEXT:    sc.w $a6, $a0, 04961; LA64-NEXT:    beq $a6, $zero, .LBB99_14962; LA64-NEXT:  # %bb.4:4963; LA64-NEXT:    srl.w $a0, $a5, $a24964; LA64-NEXT:    ret4965;4966; LA64-LAMCAS-LABEL: atomicrmw_max_i16_seq_cst:4967; LA64-LAMCAS:       # %bb.0:4968; LA64-LAMCAS-NEXT:    move $a2, $a04969; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 04970; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a14971; LA64-LAMCAS-NEXT:    .p2align 4, , 164972; LA64-LAMCAS-NEXT:  .LBB99_1: # %atomicrmw.start4973; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=14974; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a04975; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a44976; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a54977; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a54978; LA64-LAMCAS-NEXT:    or $a5, $a5, $a64979; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a5, $a24980; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB99_14981; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end4982; LA64-LAMCAS-NEXT:    ret4983;4984; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_max_i16_seq_cst:4985; LA64-LAMCAS-LAM-BH:       # %bb.0:4986; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a04987; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 04988; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a3, $a14989; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 164990; LA64-LAMCAS-LAM-BH-NEXT:  .LBB99_1: # %atomicrmw.start4991; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=14992; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a4, $a04993; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a44994; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a54995; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a54996; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a64997; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a5, $a24998; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB99_14999; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end5000; LA64-LAMCAS-LAM-BH-NEXT:    ret5001  %1 = atomicrmw max ptr %a, i16 %b seq_cst5002  ret i16 %15003}5004 5005define i8 @atomicrmw_min_i8_seq_cst(ptr %a, i8 %b) nounwind {5006; LA64-LABEL: atomicrmw_min_i8_seq_cst:5007; LA64:       # %bb.0:5008; LA64-NEXT:    slli.d $a2, $a0, 35009; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05010; LA64-NEXT:    andi $a3, $a2, 245011; LA64-NEXT:    ori $a4, $zero, 2555012; LA64-NEXT:    sll.w $a4, $a4, $a25013; LA64-NEXT:    ext.w.b $a1, $a15014; LA64-NEXT:    sll.w $a1, $a1, $a25015; LA64-NEXT:    xori $a3, $a3, 565016; LA64-NEXT:  .LBB100_1: # =>This Inner Loop Header: Depth=15017; LA64-NEXT:    ll.w $a5, $a0, 05018; LA64-NEXT:    and $a7, $a5, $a45019; LA64-NEXT:    move $a6, $a55020; LA64-NEXT:    sll.w $a7, $a7, $a35021; LA64-NEXT:    sra.w $a7, $a7, $a35022; LA64-NEXT:    bge $a1, $a7, .LBB100_35023; LA64-NEXT:  # %bb.2: # in Loop: Header=BB100_1 Depth=15024; LA64-NEXT:    xor $a6, $a5, $a15025; LA64-NEXT:    and $a6, $a6, $a45026; LA64-NEXT:    xor $a6, $a5, $a65027; LA64-NEXT:  .LBB100_3: # in Loop: Header=BB100_1 Depth=15028; LA64-NEXT:    sc.w $a6, $a0, 05029; LA64-NEXT:    beq $a6, $zero, .LBB100_15030; LA64-NEXT:  # %bb.4:5031; LA64-NEXT:    srl.w $a0, $a5, $a25032; LA64-NEXT:    ret5033;5034; LA64-LAMCAS-LABEL: atomicrmw_min_i8_seq_cst:5035; LA64-LAMCAS:       # %bb.0:5036; LA64-LAMCAS-NEXT:    move $a2, $a05037; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 05038; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a15039; LA64-LAMCAS-NEXT:    .p2align 4, , 165040; LA64-LAMCAS-NEXT:  .LBB100_1: # %atomicrmw.start5041; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15042; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a05043; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a45044; LA64-LAMCAS-NEXT:    xori $a5, $a5, 15045; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a55046; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a55047; LA64-LAMCAS-NEXT:    or $a5, $a5, $a65048; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a5, $a25049; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB100_15050; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5051; LA64-LAMCAS-NEXT:    ret5052;5053; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_min_i8_seq_cst:5054; LA64-LAMCAS-LAM-BH:       # %bb.0:5055; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a05056; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 05057; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a3, $a15058; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 165059; LA64-LAMCAS-LAM-BH-NEXT:  .LBB100_1: # %atomicrmw.start5060; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=15061; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a4, $a05062; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a45063; LA64-LAMCAS-LAM-BH-NEXT:    xori $a5, $a5, 15064; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a55065; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a55066; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a65067; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a5, $a25068; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB100_15069; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end5070; LA64-LAMCAS-LAM-BH-NEXT:    ret5071  %1 = atomicrmw min ptr %a, i8 %b seq_cst5072  ret i8 %15073}5074 5075define i16 @atomicrmw_min_i16_seq_cst(ptr %a, i16 %b) nounwind {5076; LA64-LABEL: atomicrmw_min_i16_seq_cst:5077; LA64:       # %bb.0:5078; LA64-NEXT:    slli.d $a2, $a0, 35079; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05080; LA64-NEXT:    andi $a3, $a2, 245081; LA64-NEXT:    lu12i.w $a4, 155082; LA64-NEXT:    ori $a4, $a4, 40955083; LA64-NEXT:    sll.w $a4, $a4, $a25084; LA64-NEXT:    ext.w.h $a1, $a15085; LA64-NEXT:    sll.w $a1, $a1, $a25086; LA64-NEXT:    ori $a5, $zero, 485087; LA64-NEXT:    sub.d $a3, $a5, $a35088; LA64-NEXT:  .LBB101_1: # =>This Inner Loop Header: Depth=15089; LA64-NEXT:    ll.w $a5, $a0, 05090; LA64-NEXT:    and $a7, $a5, $a45091; LA64-NEXT:    move $a6, $a55092; LA64-NEXT:    sll.w $a7, $a7, $a35093; LA64-NEXT:    sra.w $a7, $a7, $a35094; LA64-NEXT:    bge $a1, $a7, .LBB101_35095; LA64-NEXT:  # %bb.2: # in Loop: Header=BB101_1 Depth=15096; LA64-NEXT:    xor $a6, $a5, $a15097; LA64-NEXT:    and $a6, $a6, $a45098; LA64-NEXT:    xor $a6, $a5, $a65099; LA64-NEXT:  .LBB101_3: # in Loop: Header=BB101_1 Depth=15100; LA64-NEXT:    sc.w $a6, $a0, 05101; LA64-NEXT:    beq $a6, $zero, .LBB101_15102; LA64-NEXT:  # %bb.4:5103; LA64-NEXT:    srl.w $a0, $a5, $a25104; LA64-NEXT:    ret5105;5106; LA64-LAMCAS-LABEL: atomicrmw_min_i16_seq_cst:5107; LA64-LAMCAS:       # %bb.0:5108; LA64-LAMCAS-NEXT:    move $a2, $a05109; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 05110; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a15111; LA64-LAMCAS-NEXT:    .p2align 4, , 165112; LA64-LAMCAS-NEXT:  .LBB101_1: # %atomicrmw.start5113; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15114; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a05115; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a45116; LA64-LAMCAS-NEXT:    xori $a5, $a5, 15117; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a55118; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a55119; LA64-LAMCAS-NEXT:    or $a5, $a5, $a65120; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a5, $a25121; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB101_15122; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5123; LA64-LAMCAS-NEXT:    ret5124;5125; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_min_i16_seq_cst:5126; LA64-LAMCAS-LAM-BH:       # %bb.0:5127; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a05128; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 05129; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a3, $a15130; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 165131; LA64-LAMCAS-LAM-BH-NEXT:  .LBB101_1: # %atomicrmw.start5132; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=15133; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a4, $a05134; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a45135; LA64-LAMCAS-LAM-BH-NEXT:    xori $a5, $a5, 15136; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a55137; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a55138; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a65139; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a5, $a25140; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB101_15141; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end5142; LA64-LAMCAS-LAM-BH-NEXT:    ret5143  %1 = atomicrmw min ptr %a, i16 %b seq_cst5144  ret i16 %15145}5146 5147define i8 @atomicrmw_nand_i8_seq_cst(ptr %a, i8 %b) nounwind {5148; LA64-LABEL: atomicrmw_nand_i8_seq_cst:5149; LA64:       # %bb.0:5150; LA64-NEXT:    slli.d $a2, $a0, 35151; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05152; LA64-NEXT:    ori $a3, $zero, 2555153; LA64-NEXT:    sll.w $a3, $a3, $a25154; LA64-NEXT:    andi $a1, $a1, 2555155; LA64-NEXT:    sll.w $a1, $a1, $a25156; LA64-NEXT:  .LBB102_1: # =>This Inner Loop Header: Depth=15157; LA64-NEXT:    ll.w $a4, $a0, 05158; LA64-NEXT:    and $a5, $a4, $a15159; LA64-NEXT:    nor $a5, $a5, $zero5160; LA64-NEXT:    xor $a5, $a4, $a55161; LA64-NEXT:    and $a5, $a5, $a35162; LA64-NEXT:    xor $a5, $a4, $a55163; LA64-NEXT:    sc.w $a5, $a0, 05164; LA64-NEXT:    beq $a5, $zero, .LBB102_15165; LA64-NEXT:  # %bb.2:5166; LA64-NEXT:    srl.w $a0, $a4, $a25167; LA64-NEXT:    ret5168;5169; LA64-LAMCAS-LABEL: atomicrmw_nand_i8_seq_cst:5170; LA64-LAMCAS:       # %bb.0:5171; LA64-LAMCAS-NEXT:    move $a2, $a05172; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 05173; LA64-LAMCAS-NEXT:    .p2align 4, , 165174; LA64-LAMCAS-NEXT:  .LBB102_1: # %atomicrmw.start5175; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15176; LA64-LAMCAS-NEXT:    and $a3, $a0, $a15177; LA64-LAMCAS-NEXT:    nor $a3, $a3, $zero5178; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a05179; LA64-LAMCAS-NEXT:    amcas_db.b $a0, $a3, $a25180; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB102_15181; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5182; LA64-LAMCAS-NEXT:    ret5183;5184; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i8_seq_cst:5185; LA64-LAMCAS-LAM-BH:       # %bb.0:5186; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a05187; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 05188; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 165189; LA64-LAMCAS-LAM-BH-NEXT:  .LBB102_1: # %atomicrmw.start5190; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=15191; LA64-LAMCAS-LAM-BH-NEXT:    and $a3, $a0, $a15192; LA64-LAMCAS-LAM-BH-NEXT:    nor $a3, $a3, $zero5193; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a4, $a05194; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.b $a0, $a3, $a25195; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB102_15196; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end5197; LA64-LAMCAS-LAM-BH-NEXT:    ret5198  %1 = atomicrmw nand ptr %a, i8 %b seq_cst5199  ret i8 %15200}5201 5202define i16 @atomicrmw_nand_i16_seq_cst(ptr %a, i16 %b) nounwind {5203; LA64-LABEL: atomicrmw_nand_i16_seq_cst:5204; LA64:       # %bb.0:5205; LA64-NEXT:    slli.d $a2, $a0, 35206; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05207; LA64-NEXT:    lu12i.w $a3, 155208; LA64-NEXT:    ori $a3, $a3, 40955209; LA64-NEXT:    sll.w $a3, $a3, $a25210; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 05211; LA64-NEXT:    sll.w $a1, $a1, $a25212; LA64-NEXT:  .LBB103_1: # =>This Inner Loop Header: Depth=15213; LA64-NEXT:    ll.w $a4, $a0, 05214; LA64-NEXT:    and $a5, $a4, $a15215; LA64-NEXT:    nor $a5, $a5, $zero5216; LA64-NEXT:    xor $a5, $a4, $a55217; LA64-NEXT:    and $a5, $a5, $a35218; LA64-NEXT:    xor $a5, $a4, $a55219; LA64-NEXT:    sc.w $a5, $a0, 05220; LA64-NEXT:    beq $a5, $zero, .LBB103_15221; LA64-NEXT:  # %bb.2:5222; LA64-NEXT:    srl.w $a0, $a4, $a25223; LA64-NEXT:    ret5224;5225; LA64-LAMCAS-LABEL: atomicrmw_nand_i16_seq_cst:5226; LA64-LAMCAS:       # %bb.0:5227; LA64-LAMCAS-NEXT:    move $a2, $a05228; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 05229; LA64-LAMCAS-NEXT:    .p2align 4, , 165230; LA64-LAMCAS-NEXT:  .LBB103_1: # %atomicrmw.start5231; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15232; LA64-LAMCAS-NEXT:    and $a3, $a0, $a15233; LA64-LAMCAS-NEXT:    nor $a3, $a3, $zero5234; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a05235; LA64-LAMCAS-NEXT:    amcas_db.h $a0, $a3, $a25236; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB103_15237; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5238; LA64-LAMCAS-NEXT:    ret5239;5240; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i16_seq_cst:5241; LA64-LAMCAS-LAM-BH:       # %bb.0:5242; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a05243; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 05244; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 165245; LA64-LAMCAS-LAM-BH-NEXT:  .LBB103_1: # %atomicrmw.start5246; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=15247; LA64-LAMCAS-LAM-BH-NEXT:    and $a3, $a0, $a15248; LA64-LAMCAS-LAM-BH-NEXT:    nor $a3, $a3, $zero5249; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a4, $a05250; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.h $a0, $a3, $a25251; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB103_15252; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end5253; LA64-LAMCAS-LAM-BH-NEXT:    ret5254  %1 = atomicrmw nand ptr %a, i16 %b seq_cst5255  ret i16 %15256 5257}5258 5259define i32 @atomicrmw_nand_i32_seq_cst(ptr %a, i32 %b) nounwind {5260; LA64-LABEL: atomicrmw_nand_i32_seq_cst:5261; LA64:       # %bb.0:5262; LA64-NEXT:  .LBB104_1: # =>This Inner Loop Header: Depth=15263; LA64-NEXT:    ll.w $a2, $a0, 05264; LA64-NEXT:    and $a3, $a2, $a15265; LA64-NEXT:    nor $a3, $a3, $zero5266; LA64-NEXT:    sc.w $a3, $a0, 05267; LA64-NEXT:    beq $a3, $zero, .LBB104_15268; LA64-NEXT:  # %bb.2:5269; LA64-NEXT:    move $a0, $a25270; LA64-NEXT:    ret5271;5272; LA64-LAMCAS-LABEL: atomicrmw_nand_i32_seq_cst:5273; LA64-LAMCAS:       # %bb.0:5274; LA64-LAMCAS-NEXT:    move $a2, $a05275; LA64-LAMCAS-NEXT:    ld.w $a0, $a0, 05276; LA64-LAMCAS-NEXT:    .p2align 4, , 165277; LA64-LAMCAS-NEXT:  .LBB104_1: # %atomicrmw.start5278; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15279; LA64-LAMCAS-NEXT:    move $a3, $a05280; LA64-LAMCAS-NEXT:    and $a4, $a0, $a15281; LA64-LAMCAS-NEXT:    nor $a4, $a4, $zero5282; LA64-LAMCAS-NEXT:    amcas_db.w $a0, $a4, $a25283; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB104_15284; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5285; LA64-LAMCAS-NEXT:    ret5286;5287; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i32_seq_cst:5288; LA64-LAMCAS-LAM-BH:       # %bb.0:5289; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a05290; LA64-LAMCAS-LAM-BH-NEXT:    ld.w $a0, $a0, 05291; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 165292; LA64-LAMCAS-LAM-BH-NEXT:  .LBB104_1: # %atomicrmw.start5293; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=15294; LA64-LAMCAS-LAM-BH-NEXT:    move $a3, $a05295; LA64-LAMCAS-LAM-BH-NEXT:    and $a4, $a0, $a15296; LA64-LAMCAS-LAM-BH-NEXT:    nor $a4, $a4, $zero5297; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.w $a0, $a4, $a25298; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a3, .LBB104_15299; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end5300; LA64-LAMCAS-LAM-BH-NEXT:    ret5301    %1 = atomicrmw nand ptr %a, i32 %b seq_cst5302  ret i32 %15303}5304 5305define i64 @atomicrmw_nand_i64_seq_cst(ptr %a, i64 %b) nounwind {5306; LA64-LABEL: atomicrmw_nand_i64_seq_cst:5307; LA64:       # %bb.0:5308; LA64-NEXT:  .LBB105_1: # =>This Inner Loop Header: Depth=15309; LA64-NEXT:    ll.d $a2, $a0, 05310; LA64-NEXT:    and $a3, $a2, $a15311; LA64-NEXT:    nor $a3, $a3, $zero5312; LA64-NEXT:    sc.d $a3, $a0, 05313; LA64-NEXT:    beq $a3, $zero, .LBB105_15314; LA64-NEXT:  # %bb.2:5315; LA64-NEXT:    move $a0, $a25316; LA64-NEXT:    ret5317;5318; LA64-LAMCAS-LABEL: atomicrmw_nand_i64_seq_cst:5319; LA64-LAMCAS:       # %bb.0:5320; LA64-LAMCAS-NEXT:    move $a2, $a05321; LA64-LAMCAS-NEXT:    ld.d $a0, $a0, 05322; LA64-LAMCAS-NEXT:    .p2align 4, , 165323; LA64-LAMCAS-NEXT:  .LBB105_1: # %atomicrmw.start5324; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15325; LA64-LAMCAS-NEXT:    move $a3, $a05326; LA64-LAMCAS-NEXT:    and $a4, $a0, $a15327; LA64-LAMCAS-NEXT:    nor $a4, $a4, $zero5328; LA64-LAMCAS-NEXT:    amcas_db.d $a0, $a4, $a25329; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB105_15330; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5331; LA64-LAMCAS-NEXT:    ret5332;5333; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i64_seq_cst:5334; LA64-LAMCAS-LAM-BH:       # %bb.0:5335; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a05336; LA64-LAMCAS-LAM-BH-NEXT:    ld.d $a0, $a0, 05337; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 165338; LA64-LAMCAS-LAM-BH-NEXT:  .LBB105_1: # %atomicrmw.start5339; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=15340; LA64-LAMCAS-LAM-BH-NEXT:    move $a3, $a05341; LA64-LAMCAS-LAM-BH-NEXT:    and $a4, $a0, $a15342; LA64-LAMCAS-LAM-BH-NEXT:    nor $a4, $a4, $zero5343; LA64-LAMCAS-LAM-BH-NEXT:    amcas_db.d $a0, $a4, $a25344; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a3, .LBB105_15345; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end5346; LA64-LAMCAS-LAM-BH-NEXT:    ret5347  %1 = atomicrmw nand ptr %a, i64 %b seq_cst5348  ret i64 %15349}5350 5351 5352 5353define i8 @atomicrmw_and_i8_seq_cst(ptr %a, i8 %b) nounwind {5354; LA64-LABEL: atomicrmw_and_i8_seq_cst:5355; LA64:       # %bb.0:5356; LA64-NEXT:    slli.d $a2, $a0, 35357; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05358; LA64-NEXT:    ori $a3, $zero, 2555359; LA64-NEXT:    sll.w $a3, $a3, $a25360; LA64-NEXT:    andi $a1, $a1, 2555361; LA64-NEXT:    sll.w $a1, $a1, $a25362; LA64-NEXT:    orn $a1, $a1, $a35363; LA64-NEXT:    amand_db.w $a3, $a1, $a05364; LA64-NEXT:    srl.w $a0, $a3, $a25365; LA64-NEXT:    ret5366;5367; LA64-LAMCAS-LABEL: atomicrmw_and_i8_seq_cst:5368; LA64-LAMCAS:       # %bb.0:5369; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 35370; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 05371; LA64-LAMCAS-NEXT:    ori $a3, $zero, 2555372; LA64-LAMCAS-NEXT:    sll.w $a3, $a3, $a25373; LA64-LAMCAS-NEXT:    andi $a1, $a1, 2555374; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a25375; LA64-LAMCAS-NEXT:    orn $a1, $a1, $a35376; LA64-LAMCAS-NEXT:    amand_db.w $a3, $a1, $a05377; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a25378; LA64-LAMCAS-NEXT:    ret5379;5380; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_and_i8_seq_cst:5381; LA64-LAMCAS-LAM-BH:       # %bb.0:5382; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 35383; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 05384; LA64-LAMCAS-LAM-BH-NEXT:    ori $a3, $zero, 2555385; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a3, $a3, $a25386; LA64-LAMCAS-LAM-BH-NEXT:    andi $a1, $a1, 2555387; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a25388; LA64-LAMCAS-LAM-BH-NEXT:    orn $a1, $a1, $a35389; LA64-LAMCAS-LAM-BH-NEXT:    amand_db.w $a3, $a1, $a05390; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a25391; LA64-LAMCAS-LAM-BH-NEXT:    ret5392  %1 = atomicrmw and ptr %a, i8 %b seq_cst5393  ret i8 %15394}5395 5396define i16 @atomicrmw_and_i16_seq_cst(ptr %a, i16 %b) nounwind {5397; LA64-LABEL: atomicrmw_and_i16_seq_cst:5398; LA64:       # %bb.0:5399; LA64-NEXT:    slli.d $a2, $a0, 35400; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05401; LA64-NEXT:    lu12i.w $a3, 155402; LA64-NEXT:    ori $a3, $a3, 40955403; LA64-NEXT:    sll.w $a3, $a3, $a25404; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 05405; LA64-NEXT:    sll.w $a1, $a1, $a25406; LA64-NEXT:    orn $a1, $a1, $a35407; LA64-NEXT:    amand_db.w $a3, $a1, $a05408; LA64-NEXT:    srl.w $a0, $a3, $a25409; LA64-NEXT:    ret5410;5411; LA64-LAMCAS-LABEL: atomicrmw_and_i16_seq_cst:5412; LA64-LAMCAS:       # %bb.0:5413; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 35414; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 05415; LA64-LAMCAS-NEXT:    lu12i.w $a3, 155416; LA64-LAMCAS-NEXT:    ori $a3, $a3, 40955417; LA64-LAMCAS-NEXT:    sll.w $a3, $a3, $a25418; LA64-LAMCAS-NEXT:    bstrpick.d $a1, $a1, 15, 05419; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a25420; LA64-LAMCAS-NEXT:    orn $a1, $a1, $a35421; LA64-LAMCAS-NEXT:    amand_db.w $a3, $a1, $a05422; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a25423; LA64-LAMCAS-NEXT:    ret5424;5425; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_and_i16_seq_cst:5426; LA64-LAMCAS-LAM-BH:       # %bb.0:5427; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 35428; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 05429; LA64-LAMCAS-LAM-BH-NEXT:    lu12i.w $a3, 155430; LA64-LAMCAS-LAM-BH-NEXT:    ori $a3, $a3, 40955431; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a3, $a3, $a25432; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a1, $a1, 15, 05433; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a25434; LA64-LAMCAS-LAM-BH-NEXT:    orn $a1, $a1, $a35435; LA64-LAMCAS-LAM-BH-NEXT:    amand_db.w $a3, $a1, $a05436; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a25437; LA64-LAMCAS-LAM-BH-NEXT:    ret5438  %1 = atomicrmw and ptr %a, i16 %b seq_cst5439  ret i16 %15440 5441}5442 5443define i8 @atomicrmw_or_i8_seq_cst(ptr %a, i8 %b) nounwind {5444; LA64-LABEL: atomicrmw_or_i8_seq_cst:5445; LA64:       # %bb.0:5446; LA64-NEXT:    slli.d $a2, $a0, 35447; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05448; LA64-NEXT:    andi $a1, $a1, 2555449; LA64-NEXT:    sll.w $a1, $a1, $a25450; LA64-NEXT:    amor_db.w $a3, $a1, $a05451; LA64-NEXT:    srl.w $a0, $a3, $a25452; LA64-NEXT:    ret5453;5454; LA64-LAMCAS-LABEL: atomicrmw_or_i8_seq_cst:5455; LA64-LAMCAS:       # %bb.0:5456; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 35457; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 05458; LA64-LAMCAS-NEXT:    andi $a1, $a1, 2555459; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a25460; LA64-LAMCAS-NEXT:    amor_db.w $a3, $a1, $a05461; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a25462; LA64-LAMCAS-NEXT:    ret5463;5464; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_or_i8_seq_cst:5465; LA64-LAMCAS-LAM-BH:       # %bb.0:5466; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 35467; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 05468; LA64-LAMCAS-LAM-BH-NEXT:    andi $a1, $a1, 2555469; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a25470; LA64-LAMCAS-LAM-BH-NEXT:    amor_db.w $a3, $a1, $a05471; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a25472; LA64-LAMCAS-LAM-BH-NEXT:    ret5473  %1 = atomicrmw or ptr %a, i8 %b seq_cst5474  ret i8 %15475}5476 5477define i16 @atomicrmw_or_i16_seq_cst(ptr %a, i16 %b) nounwind {5478; LA64-LABEL: atomicrmw_or_i16_seq_cst:5479; LA64:       # %bb.0:5480; LA64-NEXT:    slli.d $a2, $a0, 35481; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05482; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 05483; LA64-NEXT:    sll.w $a1, $a1, $a25484; LA64-NEXT:    amor_db.w $a3, $a1, $a05485; LA64-NEXT:    srl.w $a0, $a3, $a25486; LA64-NEXT:    ret5487;5488; LA64-LAMCAS-LABEL: atomicrmw_or_i16_seq_cst:5489; LA64-LAMCAS:       # %bb.0:5490; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 35491; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 05492; LA64-LAMCAS-NEXT:    bstrpick.d $a1, $a1, 15, 05493; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a25494; LA64-LAMCAS-NEXT:    amor_db.w $a3, $a1, $a05495; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a25496; LA64-LAMCAS-NEXT:    ret5497;5498; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_or_i16_seq_cst:5499; LA64-LAMCAS-LAM-BH:       # %bb.0:5500; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 35501; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 05502; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a1, $a1, 15, 05503; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a25504; LA64-LAMCAS-LAM-BH-NEXT:    amor_db.w $a3, $a1, $a05505; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a25506; LA64-LAMCAS-LAM-BH-NEXT:    ret5507  %1 = atomicrmw or ptr %a, i16 %b seq_cst5508  ret i16 %15509 5510}5511 5512define i8 @atomicrmw_xor_i8_seq_cst(ptr %a, i8 %b) nounwind {5513; LA64-LABEL: atomicrmw_xor_i8_seq_cst:5514; LA64:       # %bb.0:5515; LA64-NEXT:    slli.d $a2, $a0, 35516; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05517; LA64-NEXT:    andi $a1, $a1, 2555518; LA64-NEXT:    sll.w $a1, $a1, $a25519; LA64-NEXT:    amxor_db.w $a3, $a1, $a05520; LA64-NEXT:    srl.w $a0, $a3, $a25521; LA64-NEXT:    ret5522;5523; LA64-LAMCAS-LABEL: atomicrmw_xor_i8_seq_cst:5524; LA64-LAMCAS:       # %bb.0:5525; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 35526; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 05527; LA64-LAMCAS-NEXT:    andi $a1, $a1, 2555528; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a25529; LA64-LAMCAS-NEXT:    amxor_db.w $a3, $a1, $a05530; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a25531; LA64-LAMCAS-NEXT:    ret5532;5533; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xor_i8_seq_cst:5534; LA64-LAMCAS-LAM-BH:       # %bb.0:5535; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 35536; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 05537; LA64-LAMCAS-LAM-BH-NEXT:    andi $a1, $a1, 2555538; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a25539; LA64-LAMCAS-LAM-BH-NEXT:    amxor_db.w $a3, $a1, $a05540; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a25541; LA64-LAMCAS-LAM-BH-NEXT:    ret5542  %1 = atomicrmw xor ptr %a, i8 %b seq_cst5543  ret i8 %15544}5545 5546define i16 @atomicrmw_xor_i16_seq_cst(ptr %a, i16 %b) nounwind {5547; LA64-LABEL: atomicrmw_xor_i16_seq_cst:5548; LA64:       # %bb.0:5549; LA64-NEXT:    slli.d $a2, $a0, 35550; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05551; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 05552; LA64-NEXT:    sll.w $a1, $a1, $a25553; LA64-NEXT:    amxor_db.w $a3, $a1, $a05554; LA64-NEXT:    srl.w $a0, $a3, $a25555; LA64-NEXT:    ret5556;5557; LA64-LAMCAS-LABEL: atomicrmw_xor_i16_seq_cst:5558; LA64-LAMCAS:       # %bb.0:5559; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 35560; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 05561; LA64-LAMCAS-NEXT:    bstrpick.d $a1, $a1, 15, 05562; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a25563; LA64-LAMCAS-NEXT:    amxor_db.w $a3, $a1, $a05564; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a25565; LA64-LAMCAS-NEXT:    ret5566;5567; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xor_i16_seq_cst:5568; LA64-LAMCAS-LAM-BH:       # %bb.0:5569; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 35570; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 05571; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a1, $a1, 15, 05572; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a25573; LA64-LAMCAS-LAM-BH-NEXT:    amxor_db.w $a3, $a1, $a05574; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a25575; LA64-LAMCAS-LAM-BH-NEXT:    ret5576  %1 = atomicrmw xor ptr %a, i16 %b seq_cst5577  ret i16 %15578 5579}5580 5581define i8 @atomicrmw_xchg_i8_monotonic(ptr %a, i8 %b) nounwind {5582; LA64-LABEL: atomicrmw_xchg_i8_monotonic:5583; LA64:       # %bb.0:5584; LA64-NEXT:    slli.d $a2, $a0, 35585; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05586; LA64-NEXT:    ori $a3, $zero, 2555587; LA64-NEXT:    sll.w $a3, $a3, $a25588; LA64-NEXT:    andi $a1, $a1, 2555589; LA64-NEXT:    sll.w $a1, $a1, $a25590; LA64-NEXT:  .LBB112_1: # =>This Inner Loop Header: Depth=15591; LA64-NEXT:    ll.w $a4, $a0, 05592; LA64-NEXT:    addi.w $a5, $a1, 05593; LA64-NEXT:    xor $a5, $a4, $a55594; LA64-NEXT:    and $a5, $a5, $a35595; LA64-NEXT:    xor $a5, $a4, $a55596; LA64-NEXT:    sc.w $a5, $a0, 05597; LA64-NEXT:    beq $a5, $zero, .LBB112_15598; LA64-NEXT:  # %bb.2:5599; LA64-NEXT:    srl.w $a0, $a4, $a25600; LA64-NEXT:    ret5601;5602; LA64-LAMCAS-LABEL: atomicrmw_xchg_i8_monotonic:5603; LA64-LAMCAS:       # %bb.0:5604; LA64-LAMCAS-NEXT:    ld.bu $a2, $a0, 05605; LA64-LAMCAS-NEXT:    .p2align 4, , 165606; LA64-LAMCAS-NEXT:  .LBB112_1: # %atomicrmw.start5607; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15608; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a25609; LA64-LAMCAS-NEXT:    amcas.b $a2, $a1, $a05610; LA64-LAMCAS-NEXT:    bne $a2, $a3, .LBB112_15611; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5612; LA64-LAMCAS-NEXT:    move $a0, $a25613; LA64-LAMCAS-NEXT:    ret5614;5615; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_i8_monotonic:5616; LA64-LAMCAS-LAM-BH:       # %bb.0:5617; LA64-LAMCAS-LAM-BH-NEXT:    amswap.b $a2, $a1, $a05618; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a25619; LA64-LAMCAS-LAM-BH-NEXT:    ret5620  %1 = atomicrmw xchg ptr %a, i8 %b monotonic5621  ret i8 %15622}5623 5624define i8 @atomicrmw_xchg_0_i8_monotonic(ptr %a) nounwind {5625; LA64-LABEL: atomicrmw_xchg_0_i8_monotonic:5626; LA64:       # %bb.0:5627; LA64-NEXT:    slli.d $a1, $a0, 35628; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05629; LA64-NEXT:    ori $a2, $zero, 2555630; LA64-NEXT:    sll.w $a2, $a2, $a15631; LA64-NEXT:    nor $a2, $a2, $zero5632; LA64-NEXT:    amand.w $a3, $a2, $a05633; LA64-NEXT:    srl.w $a0, $a3, $a15634; LA64-NEXT:    ret5635;5636; LA64-LAMCAS-LABEL: atomicrmw_xchg_0_i8_monotonic:5637; LA64-LAMCAS:       # %bb.0:5638; LA64-LAMCAS-NEXT:    move $a1, $a05639; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 05640; LA64-LAMCAS-NEXT:    .p2align 4, , 165641; LA64-LAMCAS-NEXT:  .LBB113_1: # %atomicrmw.start5642; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15643; LA64-LAMCAS-NEXT:    ext.w.b $a2, $a05644; LA64-LAMCAS-NEXT:    amcas.b $a0, $zero, $a15645; LA64-LAMCAS-NEXT:    bne $a0, $a2, .LBB113_15646; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5647; LA64-LAMCAS-NEXT:    ret5648;5649; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_0_i8_monotonic:5650; LA64-LAMCAS-LAM-BH:       # %bb.0:5651; LA64-LAMCAS-LAM-BH-NEXT:    amswap.b $a1, $zero, $a05652; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a15653; LA64-LAMCAS-LAM-BH-NEXT:    ret5654  %1 = atomicrmw xchg ptr %a, i8 0 monotonic5655  ret i8 %15656}5657 5658define i8 @atomicrmw_xchg_minus_1_i8_monotonic(ptr %a) nounwind {5659; LA64-LABEL: atomicrmw_xchg_minus_1_i8_monotonic:5660; LA64:       # %bb.0:5661; LA64-NEXT:    slli.d $a1, $a0, 35662; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05663; LA64-NEXT:    ori $a2, $zero, 2555664; LA64-NEXT:    sll.w $a2, $a2, $a15665; LA64-NEXT:    amor.w $a3, $a2, $a05666; LA64-NEXT:    srl.w $a0, $a3, $a15667; LA64-NEXT:    ret5668;5669; LA64-LAMCAS-LABEL: atomicrmw_xchg_minus_1_i8_monotonic:5670; LA64-LAMCAS:       # %bb.0:5671; LA64-LAMCAS-NEXT:    move $a1, $a05672; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 05673; LA64-LAMCAS-NEXT:    addi.w $a2, $zero, -15674; LA64-LAMCAS-NEXT:    .p2align 4, , 165675; LA64-LAMCAS-NEXT:  .LBB114_1: # %atomicrmw.start5676; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15677; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a05678; LA64-LAMCAS-NEXT:    amcas.b $a0, $a2, $a15679; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB114_15680; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5681; LA64-LAMCAS-NEXT:    ret5682;5683; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_minus_1_i8_monotonic:5684; LA64-LAMCAS-LAM-BH:       # %bb.0:5685; LA64-LAMCAS-LAM-BH-NEXT:    addi.w $a2, $zero, -15686; LA64-LAMCAS-LAM-BH-NEXT:    amswap.b $a1, $a2, $a05687; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a15688; LA64-LAMCAS-LAM-BH-NEXT:    ret5689  %1 = atomicrmw xchg ptr %a, i8 -1 monotonic5690  ret i8 %15691}5692 5693define i16 @atomicrmw_xchg_i16_monotonic(ptr %a, i16 %b) nounwind {5694; LA64-LABEL: atomicrmw_xchg_i16_monotonic:5695; LA64:       # %bb.0:5696; LA64-NEXT:    slli.d $a2, $a0, 35697; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05698; LA64-NEXT:    lu12i.w $a3, 155699; LA64-NEXT:    ori $a3, $a3, 40955700; LA64-NEXT:    sll.w $a3, $a3, $a25701; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 05702; LA64-NEXT:    sll.w $a1, $a1, $a25703; LA64-NEXT:  .LBB115_1: # =>This Inner Loop Header: Depth=15704; LA64-NEXT:    ll.w $a4, $a0, 05705; LA64-NEXT:    addi.w $a5, $a1, 05706; LA64-NEXT:    xor $a5, $a4, $a55707; LA64-NEXT:    and $a5, $a5, $a35708; LA64-NEXT:    xor $a5, $a4, $a55709; LA64-NEXT:    sc.w $a5, $a0, 05710; LA64-NEXT:    beq $a5, $zero, .LBB115_15711; LA64-NEXT:  # %bb.2:5712; LA64-NEXT:    srl.w $a0, $a4, $a25713; LA64-NEXT:    ret5714;5715; LA64-LAMCAS-LABEL: atomicrmw_xchg_i16_monotonic:5716; LA64-LAMCAS:       # %bb.0:5717; LA64-LAMCAS-NEXT:    ld.hu $a2, $a0, 05718; LA64-LAMCAS-NEXT:    .p2align 4, , 165719; LA64-LAMCAS-NEXT:  .LBB115_1: # %atomicrmw.start5720; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15721; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a25722; LA64-LAMCAS-NEXT:    amcas.h $a2, $a1, $a05723; LA64-LAMCAS-NEXT:    bne $a2, $a3, .LBB115_15724; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5725; LA64-LAMCAS-NEXT:    move $a0, $a25726; LA64-LAMCAS-NEXT:    ret5727;5728; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_i16_monotonic:5729; LA64-LAMCAS-LAM-BH:       # %bb.0:5730; LA64-LAMCAS-LAM-BH-NEXT:    amswap.h $a2, $a1, $a05731; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a25732; LA64-LAMCAS-LAM-BH-NEXT:    ret5733  %1 = atomicrmw xchg ptr %a, i16 %b monotonic5734  ret i16 %15735}5736 5737define i16 @atomicrmw_xchg_0_i16_monotonic(ptr %a) nounwind {5738; LA64-LABEL: atomicrmw_xchg_0_i16_monotonic:5739; LA64:       # %bb.0:5740; LA64-NEXT:    slli.d $a1, $a0, 35741; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05742; LA64-NEXT:    lu12i.w $a2, 155743; LA64-NEXT:    ori $a2, $a2, 40955744; LA64-NEXT:    sll.w $a2, $a2, $a15745; LA64-NEXT:    nor $a2, $a2, $zero5746; LA64-NEXT:    amand.w $a3, $a2, $a05747; LA64-NEXT:    srl.w $a0, $a3, $a15748; LA64-NEXT:    ret5749;5750; LA64-LAMCAS-LABEL: atomicrmw_xchg_0_i16_monotonic:5751; LA64-LAMCAS:       # %bb.0:5752; LA64-LAMCAS-NEXT:    move $a1, $a05753; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 05754; LA64-LAMCAS-NEXT:    .p2align 4, , 165755; LA64-LAMCAS-NEXT:  .LBB116_1: # %atomicrmw.start5756; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15757; LA64-LAMCAS-NEXT:    ext.w.h $a2, $a05758; LA64-LAMCAS-NEXT:    amcas.h $a0, $zero, $a15759; LA64-LAMCAS-NEXT:    bne $a0, $a2, .LBB116_15760; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5761; LA64-LAMCAS-NEXT:    ret5762;5763; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_0_i16_monotonic:5764; LA64-LAMCAS-LAM-BH:       # %bb.0:5765; LA64-LAMCAS-LAM-BH-NEXT:    amswap.h $a1, $zero, $a05766; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a15767; LA64-LAMCAS-LAM-BH-NEXT:    ret5768  %1 = atomicrmw xchg ptr %a, i16 0 monotonic5769  ret i16 %15770}5771 5772define i16 @atomicrmw_xchg_minus_1_i16_monotonic(ptr %a) nounwind {5773; LA64-LABEL: atomicrmw_xchg_minus_1_i16_monotonic:5774; LA64:       # %bb.0:5775; LA64-NEXT:    slli.d $a1, $a0, 35776; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05777; LA64-NEXT:    lu12i.w $a2, 155778; LA64-NEXT:    ori $a2, $a2, 40955779; LA64-NEXT:    sll.w $a2, $a2, $a15780; LA64-NEXT:    amor.w $a3, $a2, $a05781; LA64-NEXT:    srl.w $a0, $a3, $a15782; LA64-NEXT:    ret5783;5784; LA64-LAMCAS-LABEL: atomicrmw_xchg_minus_1_i16_monotonic:5785; LA64-LAMCAS:       # %bb.0:5786; LA64-LAMCAS-NEXT:    move $a1, $a05787; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 05788; LA64-LAMCAS-NEXT:    addi.w $a2, $zero, -15789; LA64-LAMCAS-NEXT:    .p2align 4, , 165790; LA64-LAMCAS-NEXT:  .LBB117_1: # %atomicrmw.start5791; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15792; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a05793; LA64-LAMCAS-NEXT:    amcas.h $a0, $a2, $a15794; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB117_15795; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5796; LA64-LAMCAS-NEXT:    ret5797;5798; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xchg_minus_1_i16_monotonic:5799; LA64-LAMCAS-LAM-BH:       # %bb.0:5800; LA64-LAMCAS-LAM-BH-NEXT:    addi.w $a2, $zero, -15801; LA64-LAMCAS-LAM-BH-NEXT:    amswap.h $a1, $a2, $a05802; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a15803; LA64-LAMCAS-LAM-BH-NEXT:    ret5804  %1 = atomicrmw xchg ptr %a, i16 -1 monotonic5805  ret i16 %15806 5807}5808 5809define i8 @atomicrmw_add_i8_monotonic(ptr %a, i8 %b) nounwind {5810; LA64-LABEL: atomicrmw_add_i8_monotonic:5811; LA64:       # %bb.0:5812; LA64-NEXT:    slli.d $a2, $a0, 35813; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05814; LA64-NEXT:    ori $a3, $zero, 2555815; LA64-NEXT:    sll.w $a3, $a3, $a25816; LA64-NEXT:    andi $a1, $a1, 2555817; LA64-NEXT:    sll.w $a1, $a1, $a25818; LA64-NEXT:  .LBB118_1: # =>This Inner Loop Header: Depth=15819; LA64-NEXT:    ll.w $a4, $a0, 05820; LA64-NEXT:    add.w $a5, $a4, $a15821; LA64-NEXT:    xor $a5, $a4, $a55822; LA64-NEXT:    and $a5, $a5, $a35823; LA64-NEXT:    xor $a5, $a4, $a55824; LA64-NEXT:    sc.w $a5, $a0, 05825; LA64-NEXT:    beq $a5, $zero, .LBB118_15826; LA64-NEXT:  # %bb.2:5827; LA64-NEXT:    srl.w $a0, $a4, $a25828; LA64-NEXT:    ret5829;5830; LA64-LAMCAS-LABEL: atomicrmw_add_i8_monotonic:5831; LA64-LAMCAS:       # %bb.0:5832; LA64-LAMCAS-NEXT:    move $a2, $a05833; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 05834; LA64-LAMCAS-NEXT:    .p2align 4, , 165835; LA64-LAMCAS-NEXT:  .LBB118_1: # %atomicrmw.start5836; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15837; LA64-LAMCAS-NEXT:    add.d $a3, $a0, $a15838; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a05839; LA64-LAMCAS-NEXT:    amcas.b $a0, $a3, $a25840; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB118_15841; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5842; LA64-LAMCAS-NEXT:    ret5843;5844; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_add_i8_monotonic:5845; LA64-LAMCAS-LAM-BH:       # %bb.0:5846; LA64-LAMCAS-LAM-BH-NEXT:    amadd.b $a2, $a1, $a05847; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a25848; LA64-LAMCAS-LAM-BH-NEXT:    ret5849  %1 = atomicrmw add ptr %a, i8 %b monotonic5850  ret i8 %15851}5852 5853define i16 @atomicrmw_add_i16_monotonic(ptr %a, i16 %b) nounwind {5854; LA64-LABEL: atomicrmw_add_i16_monotonic:5855; LA64:       # %bb.0:5856; LA64-NEXT:    slli.d $a2, $a0, 35857; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05858; LA64-NEXT:    lu12i.w $a3, 155859; LA64-NEXT:    ori $a3, $a3, 40955860; LA64-NEXT:    sll.w $a3, $a3, $a25861; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 05862; LA64-NEXT:    sll.w $a1, $a1, $a25863; LA64-NEXT:  .LBB119_1: # =>This Inner Loop Header: Depth=15864; LA64-NEXT:    ll.w $a4, $a0, 05865; LA64-NEXT:    add.w $a5, $a4, $a15866; LA64-NEXT:    xor $a5, $a4, $a55867; LA64-NEXT:    and $a5, $a5, $a35868; LA64-NEXT:    xor $a5, $a4, $a55869; LA64-NEXT:    sc.w $a5, $a0, 05870; LA64-NEXT:    beq $a5, $zero, .LBB119_15871; LA64-NEXT:  # %bb.2:5872; LA64-NEXT:    srl.w $a0, $a4, $a25873; LA64-NEXT:    ret5874;5875; LA64-LAMCAS-LABEL: atomicrmw_add_i16_monotonic:5876; LA64-LAMCAS:       # %bb.0:5877; LA64-LAMCAS-NEXT:    move $a2, $a05878; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 05879; LA64-LAMCAS-NEXT:    .p2align 4, , 165880; LA64-LAMCAS-NEXT:  .LBB119_1: # %atomicrmw.start5881; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15882; LA64-LAMCAS-NEXT:    add.d $a3, $a0, $a15883; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a05884; LA64-LAMCAS-NEXT:    amcas.h $a0, $a3, $a25885; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB119_15886; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5887; LA64-LAMCAS-NEXT:    ret5888;5889; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_add_i16_monotonic:5890; LA64-LAMCAS-LAM-BH:       # %bb.0:5891; LA64-LAMCAS-LAM-BH-NEXT:    amadd.h $a2, $a1, $a05892; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a25893; LA64-LAMCAS-LAM-BH-NEXT:    ret5894  %1 = atomicrmw add ptr %a, i16 %b monotonic5895  ret i16 %15896 5897}5898 5899define i8 @atomicrmw_sub_i8_monotonic(ptr %a, i8 %b) nounwind {5900; LA64-LABEL: atomicrmw_sub_i8_monotonic:5901; LA64:       # %bb.0:5902; LA64-NEXT:    slli.d $a2, $a0, 35903; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05904; LA64-NEXT:    ori $a3, $zero, 2555905; LA64-NEXT:    sll.w $a3, $a3, $a25906; LA64-NEXT:    andi $a1, $a1, 2555907; LA64-NEXT:    sll.w $a1, $a1, $a25908; LA64-NEXT:  .LBB120_1: # =>This Inner Loop Header: Depth=15909; LA64-NEXT:    ll.w $a4, $a0, 05910; LA64-NEXT:    sub.w $a5, $a4, $a15911; LA64-NEXT:    xor $a5, $a4, $a55912; LA64-NEXT:    and $a5, $a5, $a35913; LA64-NEXT:    xor $a5, $a4, $a55914; LA64-NEXT:    sc.w $a5, $a0, 05915; LA64-NEXT:    beq $a5, $zero, .LBB120_15916; LA64-NEXT:  # %bb.2:5917; LA64-NEXT:    srl.w $a0, $a4, $a25918; LA64-NEXT:    ret5919;5920; LA64-LAMCAS-LABEL: atomicrmw_sub_i8_monotonic:5921; LA64-LAMCAS:       # %bb.0:5922; LA64-LAMCAS-NEXT:    move $a2, $a05923; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 05924; LA64-LAMCAS-NEXT:    .p2align 4, , 165925; LA64-LAMCAS-NEXT:  .LBB120_1: # %atomicrmw.start5926; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15927; LA64-LAMCAS-NEXT:    sub.d $a3, $a0, $a15928; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a05929; LA64-LAMCAS-NEXT:    amcas.b $a0, $a3, $a25930; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB120_15931; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5932; LA64-LAMCAS-NEXT:    ret5933;5934; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_sub_i8_monotonic:5935; LA64-LAMCAS-LAM-BH:       # %bb.0:5936; LA64-LAMCAS-LAM-BH-NEXT:    sub.w $a2, $zero, $a15937; LA64-LAMCAS-LAM-BH-NEXT:    amadd.b $a1, $a2, $a05938; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a15939; LA64-LAMCAS-LAM-BH-NEXT:    ret5940  %1 = atomicrmw sub ptr %a, i8 %b monotonic5941  ret i8 %15942}5943 5944define i16 @atomicrmw_sub_i16_monotonic(ptr %a, i16 %b) nounwind {5945; LA64-LABEL: atomicrmw_sub_i16_monotonic:5946; LA64:       # %bb.0:5947; LA64-NEXT:    slli.d $a2, $a0, 35948; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05949; LA64-NEXT:    lu12i.w $a3, 155950; LA64-NEXT:    ori $a3, $a3, 40955951; LA64-NEXT:    sll.w $a3, $a3, $a25952; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 05953; LA64-NEXT:    sll.w $a1, $a1, $a25954; LA64-NEXT:  .LBB121_1: # =>This Inner Loop Header: Depth=15955; LA64-NEXT:    ll.w $a4, $a0, 05956; LA64-NEXT:    sub.w $a5, $a4, $a15957; LA64-NEXT:    xor $a5, $a4, $a55958; LA64-NEXT:    and $a5, $a5, $a35959; LA64-NEXT:    xor $a5, $a4, $a55960; LA64-NEXT:    sc.w $a5, $a0, 05961; LA64-NEXT:    beq $a5, $zero, .LBB121_15962; LA64-NEXT:  # %bb.2:5963; LA64-NEXT:    srl.w $a0, $a4, $a25964; LA64-NEXT:    ret5965;5966; LA64-LAMCAS-LABEL: atomicrmw_sub_i16_monotonic:5967; LA64-LAMCAS:       # %bb.0:5968; LA64-LAMCAS-NEXT:    move $a2, $a05969; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 05970; LA64-LAMCAS-NEXT:    .p2align 4, , 165971; LA64-LAMCAS-NEXT:  .LBB121_1: # %atomicrmw.start5972; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=15973; LA64-LAMCAS-NEXT:    sub.d $a3, $a0, $a15974; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a05975; LA64-LAMCAS-NEXT:    amcas.h $a0, $a3, $a25976; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB121_15977; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end5978; LA64-LAMCAS-NEXT:    ret5979;5980; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_sub_i16_monotonic:5981; LA64-LAMCAS-LAM-BH:       # %bb.0:5982; LA64-LAMCAS-LAM-BH-NEXT:    sub.w $a2, $zero, $a15983; LA64-LAMCAS-LAM-BH-NEXT:    amadd.h $a1, $a2, $a05984; LA64-LAMCAS-LAM-BH-NEXT:    move $a0, $a15985; LA64-LAMCAS-LAM-BH-NEXT:    ret5986  %1 = atomicrmw sub ptr %a, i16 %b monotonic5987  ret i16 %15988 5989}5990 5991define i8 @atomicrmw_umax_i8_monotonic(ptr %a, i8 %b) nounwind {5992; LA64-LABEL: atomicrmw_umax_i8_monotonic:5993; LA64:       # %bb.0:5994; LA64-NEXT:    slli.d $a2, $a0, 35995; LA64-NEXT:    bstrins.d $a0, $zero, 1, 05996; LA64-NEXT:    ori $a3, $zero, 2555997; LA64-NEXT:    sll.w $a3, $a3, $a25998; LA64-NEXT:    andi $a1, $a1, 2555999; LA64-NEXT:    sll.w $a1, $a1, $a26000; LA64-NEXT:  .LBB122_1: # =>This Inner Loop Header: Depth=16001; LA64-NEXT:    ll.w $a4, $a0, 06002; LA64-NEXT:    and $a6, $a4, $a36003; LA64-NEXT:    move $a5, $a46004; LA64-NEXT:    bgeu $a6, $a1, .LBB122_36005; LA64-NEXT:  # %bb.2: # in Loop: Header=BB122_1 Depth=16006; LA64-NEXT:    xor $a5, $a4, $a16007; LA64-NEXT:    and $a5, $a5, $a36008; LA64-NEXT:    xor $a5, $a4, $a56009; LA64-NEXT:  .LBB122_3: # in Loop: Header=BB122_1 Depth=16010; LA64-NEXT:    sc.w $a5, $a0, 06011; LA64-NEXT:    beq $a5, $zero, .LBB122_16012; LA64-NEXT:  # %bb.4:6013; LA64-NEXT:    srl.w $a0, $a4, $a26014; LA64-NEXT:    ret6015;6016; LA64-LAMCAS-LABEL: atomicrmw_umax_i8_monotonic:6017; LA64-LAMCAS:       # %bb.0:6018; LA64-LAMCAS-NEXT:    move $a2, $a06019; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 06020; LA64-LAMCAS-NEXT:    andi $a3, $a1, 2556021; LA64-LAMCAS-NEXT:    .p2align 4, , 166022; LA64-LAMCAS-NEXT:  .LBB122_1: # %atomicrmw.start6023; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=16024; LA64-LAMCAS-NEXT:    andi $a4, $a0, 2556025; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a46026; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a46027; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a46028; LA64-LAMCAS-NEXT:    or $a4, $a4, $a56029; LA64-LAMCAS-NEXT:    ext.w.b $a5, $a06030; LA64-LAMCAS-NEXT:    amcas.b $a0, $a4, $a26031; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB122_16032; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end6033; LA64-LAMCAS-NEXT:    ret6034;6035; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umax_i8_monotonic:6036; LA64-LAMCAS-LAM-BH:       # %bb.0:6037; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a06038; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 06039; LA64-LAMCAS-LAM-BH-NEXT:    andi $a3, $a1, 2556040; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 166041; LA64-LAMCAS-LAM-BH-NEXT:  .LBB122_1: # %atomicrmw.start6042; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=16043; LA64-LAMCAS-LAM-BH-NEXT:    andi $a4, $a0, 2556044; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a46045; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a46046; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a46047; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a56048; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a5, $a06049; LA64-LAMCAS-LAM-BH-NEXT:    amcas.b $a0, $a4, $a26050; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB122_16051; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end6052; LA64-LAMCAS-LAM-BH-NEXT:    ret6053  %1 = atomicrmw umax ptr %a, i8 %b monotonic6054  ret i8 %16055}6056 6057define i16 @atomicrmw_umax_i16_monotonic(ptr %a, i16 %b) nounwind {6058; LA64-LABEL: atomicrmw_umax_i16_monotonic:6059; LA64:       # %bb.0:6060; LA64-NEXT:    slli.d $a2, $a0, 36061; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06062; LA64-NEXT:    lu12i.w $a3, 156063; LA64-NEXT:    ori $a3, $a3, 40956064; LA64-NEXT:    sll.w $a3, $a3, $a26065; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 06066; LA64-NEXT:    sll.w $a1, $a1, $a26067; LA64-NEXT:  .LBB123_1: # =>This Inner Loop Header: Depth=16068; LA64-NEXT:    ll.w $a4, $a0, 06069; LA64-NEXT:    and $a6, $a4, $a36070; LA64-NEXT:    move $a5, $a46071; LA64-NEXT:    bgeu $a6, $a1, .LBB123_36072; LA64-NEXT:  # %bb.2: # in Loop: Header=BB123_1 Depth=16073; LA64-NEXT:    xor $a5, $a4, $a16074; LA64-NEXT:    and $a5, $a5, $a36075; LA64-NEXT:    xor $a5, $a4, $a56076; LA64-NEXT:  .LBB123_3: # in Loop: Header=BB123_1 Depth=16077; LA64-NEXT:    sc.w $a5, $a0, 06078; LA64-NEXT:    beq $a5, $zero, .LBB123_16079; LA64-NEXT:  # %bb.4:6080; LA64-NEXT:    srl.w $a0, $a4, $a26081; LA64-NEXT:    ret6082;6083; LA64-LAMCAS-LABEL: atomicrmw_umax_i16_monotonic:6084; LA64-LAMCAS:       # %bb.0:6085; LA64-LAMCAS-NEXT:    move $a2, $a06086; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 06087; LA64-LAMCAS-NEXT:    bstrpick.d $a3, $a1, 15, 06088; LA64-LAMCAS-NEXT:    .p2align 4, , 166089; LA64-LAMCAS-NEXT:  .LBB123_1: # %atomicrmw.start6090; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=16091; LA64-LAMCAS-NEXT:    bstrpick.d $a4, $a0, 15, 06092; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a46093; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a46094; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a46095; LA64-LAMCAS-NEXT:    or $a4, $a4, $a56096; LA64-LAMCAS-NEXT:    ext.w.h $a5, $a06097; LA64-LAMCAS-NEXT:    amcas.h $a0, $a4, $a26098; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB123_16099; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end6100; LA64-LAMCAS-NEXT:    ret6101;6102; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umax_i16_monotonic:6103; LA64-LAMCAS-LAM-BH:       # %bb.0:6104; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a06105; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 06106; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a3, $a1, 15, 06107; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 166108; LA64-LAMCAS-LAM-BH-NEXT:  .LBB123_1: # %atomicrmw.start6109; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=16110; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a4, $a0, 15, 06111; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a46112; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a46113; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a46114; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a56115; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a5, $a06116; LA64-LAMCAS-LAM-BH-NEXT:    amcas.h $a0, $a4, $a26117; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB123_16118; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end6119; LA64-LAMCAS-LAM-BH-NEXT:    ret6120  %1 = atomicrmw umax ptr %a, i16 %b monotonic6121  ret i16 %16122}6123 6124define i8 @atomicrmw_umin_i8_monotonic(ptr %a, i8 %b) nounwind {6125; LA64-LABEL: atomicrmw_umin_i8_monotonic:6126; LA64:       # %bb.0:6127; LA64-NEXT:    slli.d $a2, $a0, 36128; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06129; LA64-NEXT:    ori $a3, $zero, 2556130; LA64-NEXT:    sll.w $a3, $a3, $a26131; LA64-NEXT:    andi $a1, $a1, 2556132; LA64-NEXT:    sll.w $a1, $a1, $a26133; LA64-NEXT:  .LBB124_1: # =>This Inner Loop Header: Depth=16134; LA64-NEXT:    ll.w $a4, $a0, 06135; LA64-NEXT:    and $a6, $a4, $a36136; LA64-NEXT:    move $a5, $a46137; LA64-NEXT:    bgeu $a1, $a6, .LBB124_36138; LA64-NEXT:  # %bb.2: # in Loop: Header=BB124_1 Depth=16139; LA64-NEXT:    xor $a5, $a4, $a16140; LA64-NEXT:    and $a5, $a5, $a36141; LA64-NEXT:    xor $a5, $a4, $a56142; LA64-NEXT:  .LBB124_3: # in Loop: Header=BB124_1 Depth=16143; LA64-NEXT:    sc.w $a5, $a0, 06144; LA64-NEXT:    beq $a5, $zero, .LBB124_16145; LA64-NEXT:  # %bb.4:6146; LA64-NEXT:    srl.w $a0, $a4, $a26147; LA64-NEXT:    ret6148;6149; LA64-LAMCAS-LABEL: atomicrmw_umin_i8_monotonic:6150; LA64-LAMCAS:       # %bb.0:6151; LA64-LAMCAS-NEXT:    move $a2, $a06152; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 06153; LA64-LAMCAS-NEXT:    andi $a3, $a1, 2556154; LA64-LAMCAS-NEXT:    .p2align 4, , 166155; LA64-LAMCAS-NEXT:  .LBB124_1: # %atomicrmw.start6156; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=16157; LA64-LAMCAS-NEXT:    andi $a4, $a0, 2556158; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a46159; LA64-LAMCAS-NEXT:    xori $a4, $a4, 16160; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a46161; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a46162; LA64-LAMCAS-NEXT:    or $a4, $a4, $a56163; LA64-LAMCAS-NEXT:    ext.w.b $a5, $a06164; LA64-LAMCAS-NEXT:    amcas.b $a0, $a4, $a26165; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB124_16166; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end6167; LA64-LAMCAS-NEXT:    ret6168;6169; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umin_i8_monotonic:6170; LA64-LAMCAS-LAM-BH:       # %bb.0:6171; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a06172; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 06173; LA64-LAMCAS-LAM-BH-NEXT:    andi $a3, $a1, 2556174; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 166175; LA64-LAMCAS-LAM-BH-NEXT:  .LBB124_1: # %atomicrmw.start6176; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=16177; LA64-LAMCAS-LAM-BH-NEXT:    andi $a4, $a0, 2556178; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a46179; LA64-LAMCAS-LAM-BH-NEXT:    xori $a4, $a4, 16180; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a46181; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a46182; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a56183; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a5, $a06184; LA64-LAMCAS-LAM-BH-NEXT:    amcas.b $a0, $a4, $a26185; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB124_16186; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end6187; LA64-LAMCAS-LAM-BH-NEXT:    ret6188  %1 = atomicrmw umin ptr %a, i8 %b monotonic6189  ret i8 %16190}6191 6192define i16 @atomicrmw_umin_i16_monotonic(ptr %a, i16 %b) nounwind {6193; LA64-LABEL: atomicrmw_umin_i16_monotonic:6194; LA64:       # %bb.0:6195; LA64-NEXT:    slli.d $a2, $a0, 36196; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06197; LA64-NEXT:    lu12i.w $a3, 156198; LA64-NEXT:    ori $a3, $a3, 40956199; LA64-NEXT:    sll.w $a3, $a3, $a26200; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 06201; LA64-NEXT:    sll.w $a1, $a1, $a26202; LA64-NEXT:  .LBB125_1: # =>This Inner Loop Header: Depth=16203; LA64-NEXT:    ll.w $a4, $a0, 06204; LA64-NEXT:    and $a6, $a4, $a36205; LA64-NEXT:    move $a5, $a46206; LA64-NEXT:    bgeu $a1, $a6, .LBB125_36207; LA64-NEXT:  # %bb.2: # in Loop: Header=BB125_1 Depth=16208; LA64-NEXT:    xor $a5, $a4, $a16209; LA64-NEXT:    and $a5, $a5, $a36210; LA64-NEXT:    xor $a5, $a4, $a56211; LA64-NEXT:  .LBB125_3: # in Loop: Header=BB125_1 Depth=16212; LA64-NEXT:    sc.w $a5, $a0, 06213; LA64-NEXT:    beq $a5, $zero, .LBB125_16214; LA64-NEXT:  # %bb.4:6215; LA64-NEXT:    srl.w $a0, $a4, $a26216; LA64-NEXT:    ret6217;6218; LA64-LAMCAS-LABEL: atomicrmw_umin_i16_monotonic:6219; LA64-LAMCAS:       # %bb.0:6220; LA64-LAMCAS-NEXT:    move $a2, $a06221; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 06222; LA64-LAMCAS-NEXT:    bstrpick.d $a3, $a1, 15, 06223; LA64-LAMCAS-NEXT:    .p2align 4, , 166224; LA64-LAMCAS-NEXT:  .LBB125_1: # %atomicrmw.start6225; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=16226; LA64-LAMCAS-NEXT:    bstrpick.d $a4, $a0, 15, 06227; LA64-LAMCAS-NEXT:    sltu $a4, $a3, $a46228; LA64-LAMCAS-NEXT:    xori $a4, $a4, 16229; LA64-LAMCAS-NEXT:    masknez $a5, $a1, $a46230; LA64-LAMCAS-NEXT:    maskeqz $a4, $a0, $a46231; LA64-LAMCAS-NEXT:    or $a4, $a4, $a56232; LA64-LAMCAS-NEXT:    ext.w.h $a5, $a06233; LA64-LAMCAS-NEXT:    amcas.h $a0, $a4, $a26234; LA64-LAMCAS-NEXT:    bne $a0, $a5, .LBB125_16235; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end6236; LA64-LAMCAS-NEXT:    ret6237;6238; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_umin_i16_monotonic:6239; LA64-LAMCAS-LAM-BH:       # %bb.0:6240; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a06241; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 06242; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a3, $a1, 15, 06243; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 166244; LA64-LAMCAS-LAM-BH-NEXT:  .LBB125_1: # %atomicrmw.start6245; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=16246; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a4, $a0, 15, 06247; LA64-LAMCAS-LAM-BH-NEXT:    sltu $a4, $a3, $a46248; LA64-LAMCAS-LAM-BH-NEXT:    xori $a4, $a4, 16249; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a5, $a1, $a46250; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a4, $a0, $a46251; LA64-LAMCAS-LAM-BH-NEXT:    or $a4, $a4, $a56252; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a5, $a06253; LA64-LAMCAS-LAM-BH-NEXT:    amcas.h $a0, $a4, $a26254; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a5, .LBB125_16255; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end6256; LA64-LAMCAS-LAM-BH-NEXT:    ret6257  %1 = atomicrmw umin ptr %a, i16 %b monotonic6258  ret i16 %16259}6260 6261define i8 @atomicrmw_max_i8_monotonic(ptr %a, i8 %b) nounwind {6262; LA64-LABEL: atomicrmw_max_i8_monotonic:6263; LA64:       # %bb.0:6264; LA64-NEXT:    slli.d $a2, $a0, 36265; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06266; LA64-NEXT:    andi $a3, $a2, 246267; LA64-NEXT:    ori $a4, $zero, 2556268; LA64-NEXT:    sll.w $a4, $a4, $a26269; LA64-NEXT:    ext.w.b $a1, $a16270; LA64-NEXT:    sll.w $a1, $a1, $a26271; LA64-NEXT:    xori $a3, $a3, 566272; LA64-NEXT:  .LBB126_1: # =>This Inner Loop Header: Depth=16273; LA64-NEXT:    ll.w $a5, $a0, 06274; LA64-NEXT:    and $a7, $a5, $a46275; LA64-NEXT:    move $a6, $a56276; LA64-NEXT:    sll.w $a7, $a7, $a36277; LA64-NEXT:    sra.w $a7, $a7, $a36278; LA64-NEXT:    bge $a7, $a1, .LBB126_36279; LA64-NEXT:  # %bb.2: # in Loop: Header=BB126_1 Depth=16280; LA64-NEXT:    xor $a6, $a5, $a16281; LA64-NEXT:    and $a6, $a6, $a46282; LA64-NEXT:    xor $a6, $a5, $a66283; LA64-NEXT:  .LBB126_3: # in Loop: Header=BB126_1 Depth=16284; LA64-NEXT:    sc.w $a6, $a0, 06285; LA64-NEXT:    beq $a6, $zero, .LBB126_16286; LA64-NEXT:  # %bb.4:6287; LA64-NEXT:    srl.w $a0, $a5, $a26288; LA64-NEXT:    ret6289;6290; LA64-LAMCAS-LABEL: atomicrmw_max_i8_monotonic:6291; LA64-LAMCAS:       # %bb.0:6292; LA64-LAMCAS-NEXT:    move $a2, $a06293; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 06294; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a16295; LA64-LAMCAS-NEXT:    .p2align 4, , 166296; LA64-LAMCAS-NEXT:  .LBB126_1: # %atomicrmw.start6297; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=16298; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a06299; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a46300; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a56301; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a56302; LA64-LAMCAS-NEXT:    or $a5, $a5, $a66303; LA64-LAMCAS-NEXT:    amcas.b $a0, $a5, $a26304; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB126_16305; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end6306; LA64-LAMCAS-NEXT:    ret6307;6308; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_max_i8_monotonic:6309; LA64-LAMCAS-LAM-BH:       # %bb.0:6310; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a06311; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 06312; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a3, $a16313; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 166314; LA64-LAMCAS-LAM-BH-NEXT:  .LBB126_1: # %atomicrmw.start6315; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=16316; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a4, $a06317; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a46318; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a56319; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a56320; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a66321; LA64-LAMCAS-LAM-BH-NEXT:    amcas.b $a0, $a5, $a26322; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB126_16323; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end6324; LA64-LAMCAS-LAM-BH-NEXT:    ret6325  %1 = atomicrmw max ptr %a, i8 %b monotonic6326  ret i8 %16327}6328 6329define i16 @atomicrmw_max_i16_monotonic(ptr %a, i16 %b) nounwind {6330; LA64-LABEL: atomicrmw_max_i16_monotonic:6331; LA64:       # %bb.0:6332; LA64-NEXT:    slli.d $a2, $a0, 36333; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06334; LA64-NEXT:    andi $a3, $a2, 246335; LA64-NEXT:    lu12i.w $a4, 156336; LA64-NEXT:    ori $a4, $a4, 40956337; LA64-NEXT:    sll.w $a4, $a4, $a26338; LA64-NEXT:    ext.w.h $a1, $a16339; LA64-NEXT:    sll.w $a1, $a1, $a26340; LA64-NEXT:    ori $a5, $zero, 486341; LA64-NEXT:    sub.d $a3, $a5, $a36342; LA64-NEXT:  .LBB127_1: # =>This Inner Loop Header: Depth=16343; LA64-NEXT:    ll.w $a5, $a0, 06344; LA64-NEXT:    and $a7, $a5, $a46345; LA64-NEXT:    move $a6, $a56346; LA64-NEXT:    sll.w $a7, $a7, $a36347; LA64-NEXT:    sra.w $a7, $a7, $a36348; LA64-NEXT:    bge $a7, $a1, .LBB127_36349; LA64-NEXT:  # %bb.2: # in Loop: Header=BB127_1 Depth=16350; LA64-NEXT:    xor $a6, $a5, $a16351; LA64-NEXT:    and $a6, $a6, $a46352; LA64-NEXT:    xor $a6, $a5, $a66353; LA64-NEXT:  .LBB127_3: # in Loop: Header=BB127_1 Depth=16354; LA64-NEXT:    sc.w $a6, $a0, 06355; LA64-NEXT:    beq $a6, $zero, .LBB127_16356; LA64-NEXT:  # %bb.4:6357; LA64-NEXT:    srl.w $a0, $a5, $a26358; LA64-NEXT:    ret6359;6360; LA64-LAMCAS-LABEL: atomicrmw_max_i16_monotonic:6361; LA64-LAMCAS:       # %bb.0:6362; LA64-LAMCAS-NEXT:    move $a2, $a06363; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 06364; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a16365; LA64-LAMCAS-NEXT:    .p2align 4, , 166366; LA64-LAMCAS-NEXT:  .LBB127_1: # %atomicrmw.start6367; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=16368; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a06369; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a46370; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a56371; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a56372; LA64-LAMCAS-NEXT:    or $a5, $a5, $a66373; LA64-LAMCAS-NEXT:    amcas.h $a0, $a5, $a26374; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB127_16375; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end6376; LA64-LAMCAS-NEXT:    ret6377;6378; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_max_i16_monotonic:6379; LA64-LAMCAS-LAM-BH:       # %bb.0:6380; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a06381; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 06382; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a3, $a16383; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 166384; LA64-LAMCAS-LAM-BH-NEXT:  .LBB127_1: # %atomicrmw.start6385; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=16386; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a4, $a06387; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a46388; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a56389; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a56390; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a66391; LA64-LAMCAS-LAM-BH-NEXT:    amcas.h $a0, $a5, $a26392; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB127_16393; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end6394; LA64-LAMCAS-LAM-BH-NEXT:    ret6395  %1 = atomicrmw max ptr %a, i16 %b monotonic6396  ret i16 %16397}6398 6399define i8 @atomicrmw_min_i8_monotonic(ptr %a, i8 %b) nounwind {6400; LA64-LABEL: atomicrmw_min_i8_monotonic:6401; LA64:       # %bb.0:6402; LA64-NEXT:    slli.d $a2, $a0, 36403; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06404; LA64-NEXT:    andi $a3, $a2, 246405; LA64-NEXT:    ori $a4, $zero, 2556406; LA64-NEXT:    sll.w $a4, $a4, $a26407; LA64-NEXT:    ext.w.b $a1, $a16408; LA64-NEXT:    sll.w $a1, $a1, $a26409; LA64-NEXT:    xori $a3, $a3, 566410; LA64-NEXT:  .LBB128_1: # =>This Inner Loop Header: Depth=16411; LA64-NEXT:    ll.w $a5, $a0, 06412; LA64-NEXT:    and $a7, $a5, $a46413; LA64-NEXT:    move $a6, $a56414; LA64-NEXT:    sll.w $a7, $a7, $a36415; LA64-NEXT:    sra.w $a7, $a7, $a36416; LA64-NEXT:    bge $a1, $a7, .LBB128_36417; LA64-NEXT:  # %bb.2: # in Loop: Header=BB128_1 Depth=16418; LA64-NEXT:    xor $a6, $a5, $a16419; LA64-NEXT:    and $a6, $a6, $a46420; LA64-NEXT:    xor $a6, $a5, $a66421; LA64-NEXT:  .LBB128_3: # in Loop: Header=BB128_1 Depth=16422; LA64-NEXT:    sc.w $a6, $a0, 06423; LA64-NEXT:    beq $a6, $zero, .LBB128_16424; LA64-NEXT:  # %bb.4:6425; LA64-NEXT:    srl.w $a0, $a5, $a26426; LA64-NEXT:    ret6427;6428; LA64-LAMCAS-LABEL: atomicrmw_min_i8_monotonic:6429; LA64-LAMCAS:       # %bb.0:6430; LA64-LAMCAS-NEXT:    move $a2, $a06431; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 06432; LA64-LAMCAS-NEXT:    ext.w.b $a3, $a16433; LA64-LAMCAS-NEXT:    .p2align 4, , 166434; LA64-LAMCAS-NEXT:  .LBB128_1: # %atomicrmw.start6435; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=16436; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a06437; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a46438; LA64-LAMCAS-NEXT:    xori $a5, $a5, 16439; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a56440; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a56441; LA64-LAMCAS-NEXT:    or $a5, $a5, $a66442; LA64-LAMCAS-NEXT:    amcas.b $a0, $a5, $a26443; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB128_16444; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end6445; LA64-LAMCAS-NEXT:    ret6446;6447; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_min_i8_monotonic:6448; LA64-LAMCAS-LAM-BH:       # %bb.0:6449; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a06450; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 06451; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a3, $a16452; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 166453; LA64-LAMCAS-LAM-BH-NEXT:  .LBB128_1: # %atomicrmw.start6454; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=16455; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a4, $a06456; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a46457; LA64-LAMCAS-LAM-BH-NEXT:    xori $a5, $a5, 16458; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a56459; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a56460; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a66461; LA64-LAMCAS-LAM-BH-NEXT:    amcas.b $a0, $a5, $a26462; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB128_16463; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end6464; LA64-LAMCAS-LAM-BH-NEXT:    ret6465  %1 = atomicrmw min ptr %a, i8 %b monotonic6466  ret i8 %16467}6468 6469define i16 @atomicrmw_min_i16_monotonic(ptr %a, i16 %b) nounwind {6470; LA64-LABEL: atomicrmw_min_i16_monotonic:6471; LA64:       # %bb.0:6472; LA64-NEXT:    slli.d $a2, $a0, 36473; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06474; LA64-NEXT:    andi $a3, $a2, 246475; LA64-NEXT:    lu12i.w $a4, 156476; LA64-NEXT:    ori $a4, $a4, 40956477; LA64-NEXT:    sll.w $a4, $a4, $a26478; LA64-NEXT:    ext.w.h $a1, $a16479; LA64-NEXT:    sll.w $a1, $a1, $a26480; LA64-NEXT:    ori $a5, $zero, 486481; LA64-NEXT:    sub.d $a3, $a5, $a36482; LA64-NEXT:  .LBB129_1: # =>This Inner Loop Header: Depth=16483; LA64-NEXT:    ll.w $a5, $a0, 06484; LA64-NEXT:    and $a7, $a5, $a46485; LA64-NEXT:    move $a6, $a56486; LA64-NEXT:    sll.w $a7, $a7, $a36487; LA64-NEXT:    sra.w $a7, $a7, $a36488; LA64-NEXT:    bge $a1, $a7, .LBB129_36489; LA64-NEXT:  # %bb.2: # in Loop: Header=BB129_1 Depth=16490; LA64-NEXT:    xor $a6, $a5, $a16491; LA64-NEXT:    and $a6, $a6, $a46492; LA64-NEXT:    xor $a6, $a5, $a66493; LA64-NEXT:  .LBB129_3: # in Loop: Header=BB129_1 Depth=16494; LA64-NEXT:    sc.w $a6, $a0, 06495; LA64-NEXT:    beq $a6, $zero, .LBB129_16496; LA64-NEXT:  # %bb.4:6497; LA64-NEXT:    srl.w $a0, $a5, $a26498; LA64-NEXT:    ret6499;6500; LA64-LAMCAS-LABEL: atomicrmw_min_i16_monotonic:6501; LA64-LAMCAS:       # %bb.0:6502; LA64-LAMCAS-NEXT:    move $a2, $a06503; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 06504; LA64-LAMCAS-NEXT:    ext.w.h $a3, $a16505; LA64-LAMCAS-NEXT:    .p2align 4, , 166506; LA64-LAMCAS-NEXT:  .LBB129_1: # %atomicrmw.start6507; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=16508; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a06509; LA64-LAMCAS-NEXT:    slt $a5, $a3, $a46510; LA64-LAMCAS-NEXT:    xori $a5, $a5, 16511; LA64-LAMCAS-NEXT:    masknez $a6, $a1, $a56512; LA64-LAMCAS-NEXT:    maskeqz $a5, $a0, $a56513; LA64-LAMCAS-NEXT:    or $a5, $a5, $a66514; LA64-LAMCAS-NEXT:    amcas.h $a0, $a5, $a26515; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB129_16516; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end6517; LA64-LAMCAS-NEXT:    ret6518;6519; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_min_i16_monotonic:6520; LA64-LAMCAS-LAM-BH:       # %bb.0:6521; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a06522; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 06523; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a3, $a16524; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 166525; LA64-LAMCAS-LAM-BH-NEXT:  .LBB129_1: # %atomicrmw.start6526; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=16527; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a4, $a06528; LA64-LAMCAS-LAM-BH-NEXT:    slt $a5, $a3, $a46529; LA64-LAMCAS-LAM-BH-NEXT:    xori $a5, $a5, 16530; LA64-LAMCAS-LAM-BH-NEXT:    masknez $a6, $a1, $a56531; LA64-LAMCAS-LAM-BH-NEXT:    maskeqz $a5, $a0, $a56532; LA64-LAMCAS-LAM-BH-NEXT:    or $a5, $a5, $a66533; LA64-LAMCAS-LAM-BH-NEXT:    amcas.h $a0, $a5, $a26534; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB129_16535; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end6536; LA64-LAMCAS-LAM-BH-NEXT:    ret6537  %1 = atomicrmw min ptr %a, i16 %b monotonic6538  ret i16 %16539}6540 6541 6542 6543define i8 @atomicrmw_nand_i8_monotonic(ptr %a, i8 %b) nounwind {6544; LA64-LABEL: atomicrmw_nand_i8_monotonic:6545; LA64:       # %bb.0:6546; LA64-NEXT:    slli.d $a2, $a0, 36547; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06548; LA64-NEXT:    ori $a3, $zero, 2556549; LA64-NEXT:    sll.w $a3, $a3, $a26550; LA64-NEXT:    andi $a1, $a1, 2556551; LA64-NEXT:    sll.w $a1, $a1, $a26552; LA64-NEXT:  .LBB130_1: # =>This Inner Loop Header: Depth=16553; LA64-NEXT:    ll.w $a4, $a0, 06554; LA64-NEXT:    and $a5, $a4, $a16555; LA64-NEXT:    nor $a5, $a5, $zero6556; LA64-NEXT:    xor $a5, $a4, $a56557; LA64-NEXT:    and $a5, $a5, $a36558; LA64-NEXT:    xor $a5, $a4, $a56559; LA64-NEXT:    sc.w $a5, $a0, 06560; LA64-NEXT:    beq $a5, $zero, .LBB130_16561; LA64-NEXT:  # %bb.2:6562; LA64-NEXT:    srl.w $a0, $a4, $a26563; LA64-NEXT:    ret6564;6565; LA64-LAMCAS-LABEL: atomicrmw_nand_i8_monotonic:6566; LA64-LAMCAS:       # %bb.0:6567; LA64-LAMCAS-NEXT:    move $a2, $a06568; LA64-LAMCAS-NEXT:    ld.bu $a0, $a0, 06569; LA64-LAMCAS-NEXT:    .p2align 4, , 166570; LA64-LAMCAS-NEXT:  .LBB130_1: # %atomicrmw.start6571; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=16572; LA64-LAMCAS-NEXT:    and $a3, $a0, $a16573; LA64-LAMCAS-NEXT:    nor $a3, $a3, $zero6574; LA64-LAMCAS-NEXT:    ext.w.b $a4, $a06575; LA64-LAMCAS-NEXT:    amcas.b $a0, $a3, $a26576; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB130_16577; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end6578; LA64-LAMCAS-NEXT:    ret6579;6580; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i8_monotonic:6581; LA64-LAMCAS-LAM-BH:       # %bb.0:6582; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a06583; LA64-LAMCAS-LAM-BH-NEXT:    ld.bu $a0, $a0, 06584; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 166585; LA64-LAMCAS-LAM-BH-NEXT:  .LBB130_1: # %atomicrmw.start6586; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=16587; LA64-LAMCAS-LAM-BH-NEXT:    and $a3, $a0, $a16588; LA64-LAMCAS-LAM-BH-NEXT:    nor $a3, $a3, $zero6589; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.b $a4, $a06590; LA64-LAMCAS-LAM-BH-NEXT:    amcas.b $a0, $a3, $a26591; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB130_16592; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end6593; LA64-LAMCAS-LAM-BH-NEXT:    ret6594  %1 = atomicrmw nand ptr %a, i8 %b monotonic6595  ret i8 %16596}6597 6598define i16 @atomicrmw_nand_i16_monotonic(ptr %a, i16 %b) nounwind {6599; LA64-LABEL: atomicrmw_nand_i16_monotonic:6600; LA64:       # %bb.0:6601; LA64-NEXT:    slli.d $a2, $a0, 36602; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06603; LA64-NEXT:    lu12i.w $a3, 156604; LA64-NEXT:    ori $a3, $a3, 40956605; LA64-NEXT:    sll.w $a3, $a3, $a26606; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 06607; LA64-NEXT:    sll.w $a1, $a1, $a26608; LA64-NEXT:  .LBB131_1: # =>This Inner Loop Header: Depth=16609; LA64-NEXT:    ll.w $a4, $a0, 06610; LA64-NEXT:    and $a5, $a4, $a16611; LA64-NEXT:    nor $a5, $a5, $zero6612; LA64-NEXT:    xor $a5, $a4, $a56613; LA64-NEXT:    and $a5, $a5, $a36614; LA64-NEXT:    xor $a5, $a4, $a56615; LA64-NEXT:    sc.w $a5, $a0, 06616; LA64-NEXT:    beq $a5, $zero, .LBB131_16617; LA64-NEXT:  # %bb.2:6618; LA64-NEXT:    srl.w $a0, $a4, $a26619; LA64-NEXT:    ret6620;6621; LA64-LAMCAS-LABEL: atomicrmw_nand_i16_monotonic:6622; LA64-LAMCAS:       # %bb.0:6623; LA64-LAMCAS-NEXT:    move $a2, $a06624; LA64-LAMCAS-NEXT:    ld.hu $a0, $a0, 06625; LA64-LAMCAS-NEXT:    .p2align 4, , 166626; LA64-LAMCAS-NEXT:  .LBB131_1: # %atomicrmw.start6627; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=16628; LA64-LAMCAS-NEXT:    and $a3, $a0, $a16629; LA64-LAMCAS-NEXT:    nor $a3, $a3, $zero6630; LA64-LAMCAS-NEXT:    ext.w.h $a4, $a06631; LA64-LAMCAS-NEXT:    amcas.h $a0, $a3, $a26632; LA64-LAMCAS-NEXT:    bne $a0, $a4, .LBB131_16633; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end6634; LA64-LAMCAS-NEXT:    ret6635;6636; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i16_monotonic:6637; LA64-LAMCAS-LAM-BH:       # %bb.0:6638; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a06639; LA64-LAMCAS-LAM-BH-NEXT:    ld.hu $a0, $a0, 06640; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 166641; LA64-LAMCAS-LAM-BH-NEXT:  .LBB131_1: # %atomicrmw.start6642; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=16643; LA64-LAMCAS-LAM-BH-NEXT:    and $a3, $a0, $a16644; LA64-LAMCAS-LAM-BH-NEXT:    nor $a3, $a3, $zero6645; LA64-LAMCAS-LAM-BH-NEXT:    ext.w.h $a4, $a06646; LA64-LAMCAS-LAM-BH-NEXT:    amcas.h $a0, $a3, $a26647; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a4, .LBB131_16648; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end6649; LA64-LAMCAS-LAM-BH-NEXT:    ret6650  %1 = atomicrmw nand ptr %a, i16 %b monotonic6651  ret i16 %16652 6653}6654 6655define i32 @atomicrmw_nand_i32_monotonic(ptr %a, i32 %b) nounwind {6656; LA64-LABEL: atomicrmw_nand_i32_monotonic:6657; LA64:       # %bb.0:6658; LA64-NEXT:  .LBB132_1: # =>This Inner Loop Header: Depth=16659; LA64-NEXT:    ll.w $a2, $a0, 06660; LA64-NEXT:    and $a3, $a2, $a16661; LA64-NEXT:    nor $a3, $a3, $zero6662; LA64-NEXT:    sc.w $a3, $a0, 06663; LA64-NEXT:    beq $a3, $zero, .LBB132_16664; LA64-NEXT:  # %bb.2:6665; LA64-NEXT:    move $a0, $a26666; LA64-NEXT:    ret6667;6668; LA64-LAMCAS-LABEL: atomicrmw_nand_i32_monotonic:6669; LA64-LAMCAS:       # %bb.0:6670; LA64-LAMCAS-NEXT:    move $a2, $a06671; LA64-LAMCAS-NEXT:    ld.w $a0, $a0, 06672; LA64-LAMCAS-NEXT:    .p2align 4, , 166673; LA64-LAMCAS-NEXT:  .LBB132_1: # %atomicrmw.start6674; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=16675; LA64-LAMCAS-NEXT:    move $a3, $a06676; LA64-LAMCAS-NEXT:    and $a4, $a0, $a16677; LA64-LAMCAS-NEXT:    nor $a4, $a4, $zero6678; LA64-LAMCAS-NEXT:    amcas.w $a0, $a4, $a26679; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB132_16680; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end6681; LA64-LAMCAS-NEXT:    ret6682;6683; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i32_monotonic:6684; LA64-LAMCAS-LAM-BH:       # %bb.0:6685; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a06686; LA64-LAMCAS-LAM-BH-NEXT:    ld.w $a0, $a0, 06687; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 166688; LA64-LAMCAS-LAM-BH-NEXT:  .LBB132_1: # %atomicrmw.start6689; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=16690; LA64-LAMCAS-LAM-BH-NEXT:    move $a3, $a06691; LA64-LAMCAS-LAM-BH-NEXT:    and $a4, $a0, $a16692; LA64-LAMCAS-LAM-BH-NEXT:    nor $a4, $a4, $zero6693; LA64-LAMCAS-LAM-BH-NEXT:    amcas.w $a0, $a4, $a26694; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a3, .LBB132_16695; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end6696; LA64-LAMCAS-LAM-BH-NEXT:    ret6697    %1 = atomicrmw nand ptr %a, i32 %b monotonic6698  ret i32 %16699}6700 6701define i64 @atomicrmw_nand_i64_monotonic(ptr %a, i64 %b) nounwind {6702; LA64-LABEL: atomicrmw_nand_i64_monotonic:6703; LA64:       # %bb.0:6704; LA64-NEXT:  .LBB133_1: # =>This Inner Loop Header: Depth=16705; LA64-NEXT:    ll.d $a2, $a0, 06706; LA64-NEXT:    and $a3, $a2, $a16707; LA64-NEXT:    nor $a3, $a3, $zero6708; LA64-NEXT:    sc.d $a3, $a0, 06709; LA64-NEXT:    beq $a3, $zero, .LBB133_16710; LA64-NEXT:  # %bb.2:6711; LA64-NEXT:    move $a0, $a26712; LA64-NEXT:    ret6713;6714; LA64-LAMCAS-LABEL: atomicrmw_nand_i64_monotonic:6715; LA64-LAMCAS:       # %bb.0:6716; LA64-LAMCAS-NEXT:    move $a2, $a06717; LA64-LAMCAS-NEXT:    ld.d $a0, $a0, 06718; LA64-LAMCAS-NEXT:    .p2align 4, , 166719; LA64-LAMCAS-NEXT:  .LBB133_1: # %atomicrmw.start6720; LA64-LAMCAS-NEXT:    # =>This Inner Loop Header: Depth=16721; LA64-LAMCAS-NEXT:    move $a3, $a06722; LA64-LAMCAS-NEXT:    and $a4, $a0, $a16723; LA64-LAMCAS-NEXT:    nor $a4, $a4, $zero6724; LA64-LAMCAS-NEXT:    amcas.d $a0, $a4, $a26725; LA64-LAMCAS-NEXT:    bne $a0, $a3, .LBB133_16726; LA64-LAMCAS-NEXT:  # %bb.2: # %atomicrmw.end6727; LA64-LAMCAS-NEXT:    ret6728;6729; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_nand_i64_monotonic:6730; LA64-LAMCAS-LAM-BH:       # %bb.0:6731; LA64-LAMCAS-LAM-BH-NEXT:    move $a2, $a06732; LA64-LAMCAS-LAM-BH-NEXT:    ld.d $a0, $a0, 06733; LA64-LAMCAS-LAM-BH-NEXT:    .p2align 4, , 166734; LA64-LAMCAS-LAM-BH-NEXT:  .LBB133_1: # %atomicrmw.start6735; LA64-LAMCAS-LAM-BH-NEXT:    # =>This Inner Loop Header: Depth=16736; LA64-LAMCAS-LAM-BH-NEXT:    move $a3, $a06737; LA64-LAMCAS-LAM-BH-NEXT:    and $a4, $a0, $a16738; LA64-LAMCAS-LAM-BH-NEXT:    nor $a4, $a4, $zero6739; LA64-LAMCAS-LAM-BH-NEXT:    amcas.d $a0, $a4, $a26740; LA64-LAMCAS-LAM-BH-NEXT:    bne $a0, $a3, .LBB133_16741; LA64-LAMCAS-LAM-BH-NEXT:  # %bb.2: # %atomicrmw.end6742; LA64-LAMCAS-LAM-BH-NEXT:    ret6743  %1 = atomicrmw nand ptr %a, i64 %b monotonic6744  ret i64 %16745}6746 6747 6748 6749define i8 @atomicrmw_and_i8_monotonic(ptr %a, i8 %b) nounwind {6750; LA64-LABEL: atomicrmw_and_i8_monotonic:6751; LA64:       # %bb.0:6752; LA64-NEXT:    slli.d $a2, $a0, 36753; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06754; LA64-NEXT:    ori $a3, $zero, 2556755; LA64-NEXT:    sll.w $a3, $a3, $a26756; LA64-NEXT:    andi $a1, $a1, 2556757; LA64-NEXT:    sll.w $a1, $a1, $a26758; LA64-NEXT:    orn $a1, $a1, $a36759; LA64-NEXT:    amand.w $a3, $a1, $a06760; LA64-NEXT:    srl.w $a0, $a3, $a26761; LA64-NEXT:    ret6762;6763; LA64-LAMCAS-LABEL: atomicrmw_and_i8_monotonic:6764; LA64-LAMCAS:       # %bb.0:6765; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 36766; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 06767; LA64-LAMCAS-NEXT:    ori $a3, $zero, 2556768; LA64-LAMCAS-NEXT:    sll.w $a3, $a3, $a26769; LA64-LAMCAS-NEXT:    andi $a1, $a1, 2556770; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a26771; LA64-LAMCAS-NEXT:    orn $a1, $a1, $a36772; LA64-LAMCAS-NEXT:    amand.w $a3, $a1, $a06773; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a26774; LA64-LAMCAS-NEXT:    ret6775;6776; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_and_i8_monotonic:6777; LA64-LAMCAS-LAM-BH:       # %bb.0:6778; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 36779; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 06780; LA64-LAMCAS-LAM-BH-NEXT:    ori $a3, $zero, 2556781; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a3, $a3, $a26782; LA64-LAMCAS-LAM-BH-NEXT:    andi $a1, $a1, 2556783; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a26784; LA64-LAMCAS-LAM-BH-NEXT:    orn $a1, $a1, $a36785; LA64-LAMCAS-LAM-BH-NEXT:    amand.w $a3, $a1, $a06786; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a26787; LA64-LAMCAS-LAM-BH-NEXT:    ret6788  %1 = atomicrmw and ptr %a, i8 %b monotonic6789  ret i8 %16790}6791 6792define i16 @atomicrmw_and_i16_monotonic(ptr %a, i16 %b) nounwind {6793; LA64-LABEL: atomicrmw_and_i16_monotonic:6794; LA64:       # %bb.0:6795; LA64-NEXT:    slli.d $a2, $a0, 36796; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06797; LA64-NEXT:    lu12i.w $a3, 156798; LA64-NEXT:    ori $a3, $a3, 40956799; LA64-NEXT:    sll.w $a3, $a3, $a26800; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 06801; LA64-NEXT:    sll.w $a1, $a1, $a26802; LA64-NEXT:    orn $a1, $a1, $a36803; LA64-NEXT:    amand.w $a3, $a1, $a06804; LA64-NEXT:    srl.w $a0, $a3, $a26805; LA64-NEXT:    ret6806;6807; LA64-LAMCAS-LABEL: atomicrmw_and_i16_monotonic:6808; LA64-LAMCAS:       # %bb.0:6809; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 36810; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 06811; LA64-LAMCAS-NEXT:    lu12i.w $a3, 156812; LA64-LAMCAS-NEXT:    ori $a3, $a3, 40956813; LA64-LAMCAS-NEXT:    sll.w $a3, $a3, $a26814; LA64-LAMCAS-NEXT:    bstrpick.d $a1, $a1, 15, 06815; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a26816; LA64-LAMCAS-NEXT:    orn $a1, $a1, $a36817; LA64-LAMCAS-NEXT:    amand.w $a3, $a1, $a06818; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a26819; LA64-LAMCAS-NEXT:    ret6820;6821; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_and_i16_monotonic:6822; LA64-LAMCAS-LAM-BH:       # %bb.0:6823; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 36824; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 06825; LA64-LAMCAS-LAM-BH-NEXT:    lu12i.w $a3, 156826; LA64-LAMCAS-LAM-BH-NEXT:    ori $a3, $a3, 40956827; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a3, $a3, $a26828; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a1, $a1, 15, 06829; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a26830; LA64-LAMCAS-LAM-BH-NEXT:    orn $a1, $a1, $a36831; LA64-LAMCAS-LAM-BH-NEXT:    amand.w $a3, $a1, $a06832; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a26833; LA64-LAMCAS-LAM-BH-NEXT:    ret6834  %1 = atomicrmw and ptr %a, i16 %b monotonic6835  ret i16 %16836 6837}6838 6839define i8 @atomicrmw_or_i8_monotonic(ptr %a, i8 %b) nounwind {6840; LA64-LABEL: atomicrmw_or_i8_monotonic:6841; LA64:       # %bb.0:6842; LA64-NEXT:    slli.d $a2, $a0, 36843; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06844; LA64-NEXT:    andi $a1, $a1, 2556845; LA64-NEXT:    sll.w $a1, $a1, $a26846; LA64-NEXT:    amor.w $a3, $a1, $a06847; LA64-NEXT:    srl.w $a0, $a3, $a26848; LA64-NEXT:    ret6849;6850; LA64-LAMCAS-LABEL: atomicrmw_or_i8_monotonic:6851; LA64-LAMCAS:       # %bb.0:6852; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 36853; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 06854; LA64-LAMCAS-NEXT:    andi $a1, $a1, 2556855; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a26856; LA64-LAMCAS-NEXT:    amor.w $a3, $a1, $a06857; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a26858; LA64-LAMCAS-NEXT:    ret6859;6860; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_or_i8_monotonic:6861; LA64-LAMCAS-LAM-BH:       # %bb.0:6862; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 36863; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 06864; LA64-LAMCAS-LAM-BH-NEXT:    andi $a1, $a1, 2556865; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a26866; LA64-LAMCAS-LAM-BH-NEXT:    amor.w $a3, $a1, $a06867; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a26868; LA64-LAMCAS-LAM-BH-NEXT:    ret6869  %1 = atomicrmw or ptr %a, i8 %b monotonic6870  ret i8 %16871}6872 6873define i16 @atomicrmw_or_i16_monotonic(ptr %a, i16 %b) nounwind {6874; LA64-LABEL: atomicrmw_or_i16_monotonic:6875; LA64:       # %bb.0:6876; LA64-NEXT:    slli.d $a2, $a0, 36877; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06878; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 06879; LA64-NEXT:    sll.w $a1, $a1, $a26880; LA64-NEXT:    amor.w $a3, $a1, $a06881; LA64-NEXT:    srl.w $a0, $a3, $a26882; LA64-NEXT:    ret6883;6884; LA64-LAMCAS-LABEL: atomicrmw_or_i16_monotonic:6885; LA64-LAMCAS:       # %bb.0:6886; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 36887; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 06888; LA64-LAMCAS-NEXT:    bstrpick.d $a1, $a1, 15, 06889; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a26890; LA64-LAMCAS-NEXT:    amor.w $a3, $a1, $a06891; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a26892; LA64-LAMCAS-NEXT:    ret6893;6894; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_or_i16_monotonic:6895; LA64-LAMCAS-LAM-BH:       # %bb.0:6896; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 36897; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 06898; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a1, $a1, 15, 06899; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a26900; LA64-LAMCAS-LAM-BH-NEXT:    amor.w $a3, $a1, $a06901; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a26902; LA64-LAMCAS-LAM-BH-NEXT:    ret6903  %1 = atomicrmw or ptr %a, i16 %b monotonic6904  ret i16 %16905 6906}6907 6908define i8 @atomicrmw_xor_i8_monotonic(ptr %a, i8 %b) nounwind {6909; LA64-LABEL: atomicrmw_xor_i8_monotonic:6910; LA64:       # %bb.0:6911; LA64-NEXT:    slli.d $a2, $a0, 36912; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06913; LA64-NEXT:    andi $a1, $a1, 2556914; LA64-NEXT:    sll.w $a1, $a1, $a26915; LA64-NEXT:    amxor.w $a3, $a1, $a06916; LA64-NEXT:    srl.w $a0, $a3, $a26917; LA64-NEXT:    ret6918;6919; LA64-LAMCAS-LABEL: atomicrmw_xor_i8_monotonic:6920; LA64-LAMCAS:       # %bb.0:6921; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 36922; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 06923; LA64-LAMCAS-NEXT:    andi $a1, $a1, 2556924; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a26925; LA64-LAMCAS-NEXT:    amxor.w $a3, $a1, $a06926; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a26927; LA64-LAMCAS-NEXT:    ret6928;6929; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xor_i8_monotonic:6930; LA64-LAMCAS-LAM-BH:       # %bb.0:6931; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 36932; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 06933; LA64-LAMCAS-LAM-BH-NEXT:    andi $a1, $a1, 2556934; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a26935; LA64-LAMCAS-LAM-BH-NEXT:    amxor.w $a3, $a1, $a06936; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a26937; LA64-LAMCAS-LAM-BH-NEXT:    ret6938  %1 = atomicrmw xor ptr %a, i8 %b monotonic6939  ret i8 %16940}6941 6942define i16 @atomicrmw_xor_i16_monotonic(ptr %a, i16 %b) nounwind {6943; LA64-LABEL: atomicrmw_xor_i16_monotonic:6944; LA64:       # %bb.0:6945; LA64-NEXT:    slli.d $a2, $a0, 36946; LA64-NEXT:    bstrins.d $a0, $zero, 1, 06947; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 06948; LA64-NEXT:    sll.w $a1, $a1, $a26949; LA64-NEXT:    amxor.w $a3, $a1, $a06950; LA64-NEXT:    srl.w $a0, $a3, $a26951; LA64-NEXT:    ret6952;6953; LA64-LAMCAS-LABEL: atomicrmw_xor_i16_monotonic:6954; LA64-LAMCAS:       # %bb.0:6955; LA64-LAMCAS-NEXT:    slli.d $a2, $a0, 36956; LA64-LAMCAS-NEXT:    bstrins.d $a0, $zero, 1, 06957; LA64-LAMCAS-NEXT:    bstrpick.d $a1, $a1, 15, 06958; LA64-LAMCAS-NEXT:    sll.w $a1, $a1, $a26959; LA64-LAMCAS-NEXT:    amxor.w $a3, $a1, $a06960; LA64-LAMCAS-NEXT:    srl.w $a0, $a3, $a26961; LA64-LAMCAS-NEXT:    ret6962;6963; LA64-LAMCAS-LAM-BH-LABEL: atomicrmw_xor_i16_monotonic:6964; LA64-LAMCAS-LAM-BH:       # %bb.0:6965; LA64-LAMCAS-LAM-BH-NEXT:    slli.d $a2, $a0, 36966; LA64-LAMCAS-LAM-BH-NEXT:    bstrins.d $a0, $zero, 1, 06967; LA64-LAMCAS-LAM-BH-NEXT:    bstrpick.d $a1, $a1, 15, 06968; LA64-LAMCAS-LAM-BH-NEXT:    sll.w $a1, $a1, $a26969; LA64-LAMCAS-LAM-BH-NEXT:    amxor.w $a3, $a1, $a06970; LA64-LAMCAS-LAM-BH-NEXT:    srl.w $a0, $a3, $a26971; LA64-LAMCAS-LAM-BH-NEXT:    ret6972  %1 = atomicrmw xor ptr %a, i16 %b monotonic6973  ret i16 %16974 6975}6976