brintos

brintos / llvm-project-archived public Read only

0
0
Text · 288.4 KiB · 74ff20d Raw
8277 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \3; RUN:   | FileCheck -check-prefix=RV32I %s4; RUN: llc -mtriple=riscv32 -mattr=+a -verify-machineinstrs < %s \5; RUN:   | FileCheck -check-prefixes=RV32IA,RV32IA-NOZACAS %s6; RUN: llc -mtriple=riscv32 -mattr=+a,+zacas -verify-machineinstrs < %s \7; RUN:   | FileCheck -check-prefixes=RV32IA,RV32IA-ZACAS %s8; RUN: llc -mtriple=riscv32 -mattr=+zalrsc -verify-machineinstrs < %s \9; RUN:   | FileCheck -check-prefixes=RV32I-ZALRSC %s10; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \11; RUN:   | FileCheck -check-prefix=RV64I %s12; RUN: llc -mtriple=riscv64 -mattr=+a -verify-machineinstrs < %s \13; RUN:   | FileCheck -check-prefixes=RV64IA,RV64IA-NOZACAS %s14; RUN: llc -mtriple=riscv64 -mattr=+a,+zacas -verify-machineinstrs < %s \15; RUN:   | FileCheck -check-prefixes=RV64IA,RV64IA-ZACAS %s16; RUN: llc -mtriple=riscv64 -mattr=+zalrsc -verify-machineinstrs < %s \17; RUN:   | FileCheck -check-prefixes=RV64I-ZALRSC %s18 19define signext i8 @atomic_load_i8_unordered(ptr %a) nounwind {20; RV32I-LABEL: atomic_load_i8_unordered:21; RV32I:       # %bb.0:22; RV32I-NEXT:    addi sp, sp, -1623; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill24; RV32I-NEXT:    li a1, 025; RV32I-NEXT:    call __atomic_load_126; RV32I-NEXT:    slli a0, a0, 2427; RV32I-NEXT:    srai a0, a0, 2428; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload29; RV32I-NEXT:    addi sp, sp, 1630; RV32I-NEXT:    ret31;32; RV32IA-LABEL: atomic_load_i8_unordered:33; RV32IA:       # %bb.0:34; RV32IA-NEXT:    lb a0, 0(a0)35; RV32IA-NEXT:    ret36;37; RV32I-ZALRSC-LABEL: atomic_load_i8_unordered:38; RV32I-ZALRSC:       # %bb.0:39; RV32I-ZALRSC-NEXT:    lb a0, 0(a0)40; RV32I-ZALRSC-NEXT:    ret41;42; RV64I-LABEL: atomic_load_i8_unordered:43; RV64I:       # %bb.0:44; RV64I-NEXT:    addi sp, sp, -1645; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill46; RV64I-NEXT:    li a1, 047; RV64I-NEXT:    call __atomic_load_148; RV64I-NEXT:    slli a0, a0, 5649; RV64I-NEXT:    srai a0, a0, 5650; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload51; RV64I-NEXT:    addi sp, sp, 1652; RV64I-NEXT:    ret53;54; RV64IA-LABEL: atomic_load_i8_unordered:55; RV64IA:       # %bb.0:56; RV64IA-NEXT:    lb a0, 0(a0)57; RV64IA-NEXT:    ret58;59; RV64I-ZALRSC-LABEL: atomic_load_i8_unordered:60; RV64I-ZALRSC:       # %bb.0:61; RV64I-ZALRSC-NEXT:    lb a0, 0(a0)62; RV64I-ZALRSC-NEXT:    ret63  %1 = load atomic i8, ptr %a unordered, align 164  ret i8 %165}66 67define signext i16 @atomic_load_i16_unordered(ptr %a) nounwind {68; RV32I-LABEL: atomic_load_i16_unordered:69; RV32I:       # %bb.0:70; RV32I-NEXT:    addi sp, sp, -1671; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill72; RV32I-NEXT:    li a1, 073; RV32I-NEXT:    call __atomic_load_274; RV32I-NEXT:    slli a0, a0, 1675; RV32I-NEXT:    srai a0, a0, 1676; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload77; RV32I-NEXT:    addi sp, sp, 1678; RV32I-NEXT:    ret79;80; RV32IA-LABEL: atomic_load_i16_unordered:81; RV32IA:       # %bb.0:82; RV32IA-NEXT:    lh a0, 0(a0)83; RV32IA-NEXT:    ret84;85; RV32I-ZALRSC-LABEL: atomic_load_i16_unordered:86; RV32I-ZALRSC:       # %bb.0:87; RV32I-ZALRSC-NEXT:    lh a0, 0(a0)88; RV32I-ZALRSC-NEXT:    ret89;90; RV64I-LABEL: atomic_load_i16_unordered:91; RV64I:       # %bb.0:92; RV64I-NEXT:    addi sp, sp, -1693; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill94; RV64I-NEXT:    li a1, 095; RV64I-NEXT:    call __atomic_load_296; RV64I-NEXT:    slli a0, a0, 4897; RV64I-NEXT:    srai a0, a0, 4898; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload99; RV64I-NEXT:    addi sp, sp, 16100; RV64I-NEXT:    ret101;102; RV64IA-LABEL: atomic_load_i16_unordered:103; RV64IA:       # %bb.0:104; RV64IA-NEXT:    lh a0, 0(a0)105; RV64IA-NEXT:    ret106;107; RV64I-ZALRSC-LABEL: atomic_load_i16_unordered:108; RV64I-ZALRSC:       # %bb.0:109; RV64I-ZALRSC-NEXT:    lh a0, 0(a0)110; RV64I-ZALRSC-NEXT:    ret111  %1 = load atomic i16, ptr %a unordered, align 2112  ret i16 %1113}114 115define signext i32 @atomic_load_i32_unordered(ptr %a) nounwind {116; RV32I-LABEL: atomic_load_i32_unordered:117; RV32I:       # %bb.0:118; RV32I-NEXT:    addi sp, sp, -16119; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill120; RV32I-NEXT:    li a1, 0121; RV32I-NEXT:    call __atomic_load_4122; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload123; RV32I-NEXT:    addi sp, sp, 16124; RV32I-NEXT:    ret125;126; RV32IA-LABEL: atomic_load_i32_unordered:127; RV32IA:       # %bb.0:128; RV32IA-NEXT:    lw a0, 0(a0)129; RV32IA-NEXT:    ret130;131; RV32I-ZALRSC-LABEL: atomic_load_i32_unordered:132; RV32I-ZALRSC:       # %bb.0:133; RV32I-ZALRSC-NEXT:    lw a0, 0(a0)134; RV32I-ZALRSC-NEXT:    ret135;136; RV64I-LABEL: atomic_load_i32_unordered:137; RV64I:       # %bb.0:138; RV64I-NEXT:    addi sp, sp, -16139; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill140; RV64I-NEXT:    li a1, 0141; RV64I-NEXT:    call __atomic_load_4142; RV64I-NEXT:    sext.w a0, a0143; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload144; RV64I-NEXT:    addi sp, sp, 16145; RV64I-NEXT:    ret146;147; RV64IA-LABEL: atomic_load_i32_unordered:148; RV64IA:       # %bb.0:149; RV64IA-NEXT:    lw a0, 0(a0)150; RV64IA-NEXT:    ret151;152; RV64I-ZALRSC-LABEL: atomic_load_i32_unordered:153; RV64I-ZALRSC:       # %bb.0:154; RV64I-ZALRSC-NEXT:    lw a0, 0(a0)155; RV64I-ZALRSC-NEXT:    ret156  %1 = load atomic i32, ptr %a unordered, align 4157  ret i32 %1158}159 160define signext i8 @atomicrmw_xchg_i8_monotonic(ptr %a, i8 %b) nounwind {161; RV32I-LABEL: atomicrmw_xchg_i8_monotonic:162; RV32I:       # %bb.0:163; RV32I-NEXT:    addi sp, sp, -16164; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill165; RV32I-NEXT:    li a2, 0166; RV32I-NEXT:    call __atomic_exchange_1167; RV32I-NEXT:    slli a0, a0, 24168; RV32I-NEXT:    srai a0, a0, 24169; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload170; RV32I-NEXT:    addi sp, sp, 16171; RV32I-NEXT:    ret172;173; RV32IA-LABEL: atomicrmw_xchg_i8_monotonic:174; RV32IA:       # %bb.0:175; RV32IA-NEXT:    andi a2, a0, -4176; RV32IA-NEXT:    slli a0, a0, 3177; RV32IA-NEXT:    li a3, 255178; RV32IA-NEXT:    zext.b a1, a1179; RV32IA-NEXT:    sll a3, a3, a0180; RV32IA-NEXT:    sll a1, a1, a0181; RV32IA-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1182; RV32IA-NEXT:    lr.w a4, (a2)183; RV32IA-NEXT:    mv a5, a1184; RV32IA-NEXT:    xor a5, a4, a5185; RV32IA-NEXT:    and a5, a5, a3186; RV32IA-NEXT:    xor a5, a4, a5187; RV32IA-NEXT:    sc.w a5, a5, (a2)188; RV32IA-NEXT:    bnez a5, .LBB3_1189; RV32IA-NEXT:  # %bb.2:190; RV32IA-NEXT:    srl a0, a4, a0191; RV32IA-NEXT:    slli a0, a0, 24192; RV32IA-NEXT:    srai a0, a0, 24193; RV32IA-NEXT:    ret194;195; RV32I-ZALRSC-LABEL: atomicrmw_xchg_i8_monotonic:196; RV32I-ZALRSC:       # %bb.0:197; RV32I-ZALRSC-NEXT:    andi a2, a0, -4198; RV32I-ZALRSC-NEXT:    slli a0, a0, 3199; RV32I-ZALRSC-NEXT:    li a3, 255200; RV32I-ZALRSC-NEXT:    zext.b a1, a1201; RV32I-ZALRSC-NEXT:    sll a3, a3, a0202; RV32I-ZALRSC-NEXT:    sll a1, a1, a0203; RV32I-ZALRSC-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1204; RV32I-ZALRSC-NEXT:    lr.w a4, (a2)205; RV32I-ZALRSC-NEXT:    mv a5, a1206; RV32I-ZALRSC-NEXT:    xor a5, a4, a5207; RV32I-ZALRSC-NEXT:    and a5, a5, a3208; RV32I-ZALRSC-NEXT:    xor a5, a4, a5209; RV32I-ZALRSC-NEXT:    sc.w a5, a5, (a2)210; RV32I-ZALRSC-NEXT:    bnez a5, .LBB3_1211; RV32I-ZALRSC-NEXT:  # %bb.2:212; RV32I-ZALRSC-NEXT:    srl a0, a4, a0213; RV32I-ZALRSC-NEXT:    slli a0, a0, 24214; RV32I-ZALRSC-NEXT:    srai a0, a0, 24215; RV32I-ZALRSC-NEXT:    ret216;217; RV64I-LABEL: atomicrmw_xchg_i8_monotonic:218; RV64I:       # %bb.0:219; RV64I-NEXT:    addi sp, sp, -16220; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill221; RV64I-NEXT:    li a2, 0222; RV64I-NEXT:    call __atomic_exchange_1223; RV64I-NEXT:    slli a0, a0, 56224; RV64I-NEXT:    srai a0, a0, 56225; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload226; RV64I-NEXT:    addi sp, sp, 16227; RV64I-NEXT:    ret228;229; RV64IA-LABEL: atomicrmw_xchg_i8_monotonic:230; RV64IA:       # %bb.0:231; RV64IA-NEXT:    andi a2, a0, -4232; RV64IA-NEXT:    slli a0, a0, 3233; RV64IA-NEXT:    li a3, 255234; RV64IA-NEXT:    zext.b a1, a1235; RV64IA-NEXT:    sllw a3, a3, a0236; RV64IA-NEXT:    sllw a1, a1, a0237; RV64IA-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1238; RV64IA-NEXT:    lr.w a4, (a2)239; RV64IA-NEXT:    mv a5, a1240; RV64IA-NEXT:    xor a5, a4, a5241; RV64IA-NEXT:    and a5, a5, a3242; RV64IA-NEXT:    xor a5, a4, a5243; RV64IA-NEXT:    sc.w a5, a5, (a2)244; RV64IA-NEXT:    bnez a5, .LBB3_1245; RV64IA-NEXT:  # %bb.2:246; RV64IA-NEXT:    srlw a0, a4, a0247; RV64IA-NEXT:    slli a0, a0, 56248; RV64IA-NEXT:    srai a0, a0, 56249; RV64IA-NEXT:    ret250;251; RV64I-ZALRSC-LABEL: atomicrmw_xchg_i8_monotonic:252; RV64I-ZALRSC:       # %bb.0:253; RV64I-ZALRSC-NEXT:    andi a2, a0, -4254; RV64I-ZALRSC-NEXT:    slli a0, a0, 3255; RV64I-ZALRSC-NEXT:    li a3, 255256; RV64I-ZALRSC-NEXT:    zext.b a1, a1257; RV64I-ZALRSC-NEXT:    sllw a3, a3, a0258; RV64I-ZALRSC-NEXT:    sllw a1, a1, a0259; RV64I-ZALRSC-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1260; RV64I-ZALRSC-NEXT:    lr.w a4, (a2)261; RV64I-ZALRSC-NEXT:    mv a5, a1262; RV64I-ZALRSC-NEXT:    xor a5, a4, a5263; RV64I-ZALRSC-NEXT:    and a5, a5, a3264; RV64I-ZALRSC-NEXT:    xor a5, a4, a5265; RV64I-ZALRSC-NEXT:    sc.w a5, a5, (a2)266; RV64I-ZALRSC-NEXT:    bnez a5, .LBB3_1267; RV64I-ZALRSC-NEXT:  # %bb.2:268; RV64I-ZALRSC-NEXT:    srlw a0, a4, a0269; RV64I-ZALRSC-NEXT:    slli a0, a0, 56270; RV64I-ZALRSC-NEXT:    srai a0, a0, 56271; RV64I-ZALRSC-NEXT:    ret272  %1 = atomicrmw xchg ptr %a, i8 %b monotonic273  ret i8 %1274}275 276define signext i8 @atomicrmw_add_i8_monotonic(ptr %a, i8 %b) nounwind {277; RV32I-LABEL: atomicrmw_add_i8_monotonic:278; RV32I:       # %bb.0:279; RV32I-NEXT:    addi sp, sp, -16280; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill281; RV32I-NEXT:    li a2, 0282; RV32I-NEXT:    call __atomic_fetch_add_1283; RV32I-NEXT:    slli a0, a0, 24284; RV32I-NEXT:    srai a0, a0, 24285; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload286; RV32I-NEXT:    addi sp, sp, 16287; RV32I-NEXT:    ret288;289; RV32IA-LABEL: atomicrmw_add_i8_monotonic:290; RV32IA:       # %bb.0:291; RV32IA-NEXT:    andi a2, a0, -4292; RV32IA-NEXT:    slli a0, a0, 3293; RV32IA-NEXT:    li a3, 255294; RV32IA-NEXT:    zext.b a1, a1295; RV32IA-NEXT:    sll a3, a3, a0296; RV32IA-NEXT:    sll a1, a1, a0297; RV32IA-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1298; RV32IA-NEXT:    lr.w a4, (a2)299; RV32IA-NEXT:    add a5, a4, a1300; RV32IA-NEXT:    xor a5, a4, a5301; RV32IA-NEXT:    and a5, a5, a3302; RV32IA-NEXT:    xor a5, a4, a5303; RV32IA-NEXT:    sc.w a5, a5, (a2)304; RV32IA-NEXT:    bnez a5, .LBB4_1305; RV32IA-NEXT:  # %bb.2:306; RV32IA-NEXT:    srl a0, a4, a0307; RV32IA-NEXT:    slli a0, a0, 24308; RV32IA-NEXT:    srai a0, a0, 24309; RV32IA-NEXT:    ret310;311; RV32I-ZALRSC-LABEL: atomicrmw_add_i8_monotonic:312; RV32I-ZALRSC:       # %bb.0:313; RV32I-ZALRSC-NEXT:    andi a2, a0, -4314; RV32I-ZALRSC-NEXT:    slli a0, a0, 3315; RV32I-ZALRSC-NEXT:    li a3, 255316; RV32I-ZALRSC-NEXT:    zext.b a1, a1317; RV32I-ZALRSC-NEXT:    sll a3, a3, a0318; RV32I-ZALRSC-NEXT:    sll a1, a1, a0319; RV32I-ZALRSC-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1320; RV32I-ZALRSC-NEXT:    lr.w a4, (a2)321; RV32I-ZALRSC-NEXT:    add a5, a4, a1322; RV32I-ZALRSC-NEXT:    xor a5, a4, a5323; RV32I-ZALRSC-NEXT:    and a5, a5, a3324; RV32I-ZALRSC-NEXT:    xor a5, a4, a5325; RV32I-ZALRSC-NEXT:    sc.w a5, a5, (a2)326; RV32I-ZALRSC-NEXT:    bnez a5, .LBB4_1327; RV32I-ZALRSC-NEXT:  # %bb.2:328; RV32I-ZALRSC-NEXT:    srl a0, a4, a0329; RV32I-ZALRSC-NEXT:    slli a0, a0, 24330; RV32I-ZALRSC-NEXT:    srai a0, a0, 24331; RV32I-ZALRSC-NEXT:    ret332;333; RV64I-LABEL: atomicrmw_add_i8_monotonic:334; RV64I:       # %bb.0:335; RV64I-NEXT:    addi sp, sp, -16336; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill337; RV64I-NEXT:    li a2, 0338; RV64I-NEXT:    call __atomic_fetch_add_1339; RV64I-NEXT:    slli a0, a0, 56340; RV64I-NEXT:    srai a0, a0, 56341; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload342; RV64I-NEXT:    addi sp, sp, 16343; RV64I-NEXT:    ret344;345; RV64IA-LABEL: atomicrmw_add_i8_monotonic:346; RV64IA:       # %bb.0:347; RV64IA-NEXT:    andi a2, a0, -4348; RV64IA-NEXT:    slli a0, a0, 3349; RV64IA-NEXT:    li a3, 255350; RV64IA-NEXT:    zext.b a1, a1351; RV64IA-NEXT:    sllw a3, a3, a0352; RV64IA-NEXT:    sllw a1, a1, a0353; RV64IA-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1354; RV64IA-NEXT:    lr.w a4, (a2)355; RV64IA-NEXT:    add a5, a4, a1356; RV64IA-NEXT:    xor a5, a4, a5357; RV64IA-NEXT:    and a5, a5, a3358; RV64IA-NEXT:    xor a5, a4, a5359; RV64IA-NEXT:    sc.w a5, a5, (a2)360; RV64IA-NEXT:    bnez a5, .LBB4_1361; RV64IA-NEXT:  # %bb.2:362; RV64IA-NEXT:    srlw a0, a4, a0363; RV64IA-NEXT:    slli a0, a0, 56364; RV64IA-NEXT:    srai a0, a0, 56365; RV64IA-NEXT:    ret366;367; RV64I-ZALRSC-LABEL: atomicrmw_add_i8_monotonic:368; RV64I-ZALRSC:       # %bb.0:369; RV64I-ZALRSC-NEXT:    andi a2, a0, -4370; RV64I-ZALRSC-NEXT:    slli a0, a0, 3371; RV64I-ZALRSC-NEXT:    li a3, 255372; RV64I-ZALRSC-NEXT:    zext.b a1, a1373; RV64I-ZALRSC-NEXT:    sllw a3, a3, a0374; RV64I-ZALRSC-NEXT:    sllw a1, a1, a0375; RV64I-ZALRSC-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1376; RV64I-ZALRSC-NEXT:    lr.w a4, (a2)377; RV64I-ZALRSC-NEXT:    add a5, a4, a1378; RV64I-ZALRSC-NEXT:    xor a5, a4, a5379; RV64I-ZALRSC-NEXT:    and a5, a5, a3380; RV64I-ZALRSC-NEXT:    xor a5, a4, a5381; RV64I-ZALRSC-NEXT:    sc.w a5, a5, (a2)382; RV64I-ZALRSC-NEXT:    bnez a5, .LBB4_1383; RV64I-ZALRSC-NEXT:  # %bb.2:384; RV64I-ZALRSC-NEXT:    srlw a0, a4, a0385; RV64I-ZALRSC-NEXT:    slli a0, a0, 56386; RV64I-ZALRSC-NEXT:    srai a0, a0, 56387; RV64I-ZALRSC-NEXT:    ret388  %1 = atomicrmw add ptr %a, i8 %b monotonic389  ret i8 %1390}391 392define signext i8 @atomicrmw_sub_i8_monotonic(ptr %a, i8 %b) nounwind {393; RV32I-LABEL: atomicrmw_sub_i8_monotonic:394; RV32I:       # %bb.0:395; RV32I-NEXT:    addi sp, sp, -16396; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill397; RV32I-NEXT:    li a2, 0398; RV32I-NEXT:    call __atomic_fetch_sub_1399; RV32I-NEXT:    slli a0, a0, 24400; RV32I-NEXT:    srai a0, a0, 24401; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload402; RV32I-NEXT:    addi sp, sp, 16403; RV32I-NEXT:    ret404;405; RV32IA-LABEL: atomicrmw_sub_i8_monotonic:406; RV32IA:       # %bb.0:407; RV32IA-NEXT:    andi a2, a0, -4408; RV32IA-NEXT:    slli a0, a0, 3409; RV32IA-NEXT:    li a3, 255410; RV32IA-NEXT:    zext.b a1, a1411; RV32IA-NEXT:    sll a3, a3, a0412; RV32IA-NEXT:    sll a1, a1, a0413; RV32IA-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=1414; RV32IA-NEXT:    lr.w a4, (a2)415; RV32IA-NEXT:    sub a5, a4, a1416; RV32IA-NEXT:    xor a5, a4, a5417; RV32IA-NEXT:    and a5, a5, a3418; RV32IA-NEXT:    xor a5, a4, a5419; RV32IA-NEXT:    sc.w a5, a5, (a2)420; RV32IA-NEXT:    bnez a5, .LBB5_1421; RV32IA-NEXT:  # %bb.2:422; RV32IA-NEXT:    srl a0, a4, a0423; RV32IA-NEXT:    slli a0, a0, 24424; RV32IA-NEXT:    srai a0, a0, 24425; RV32IA-NEXT:    ret426;427; RV32I-ZALRSC-LABEL: atomicrmw_sub_i8_monotonic:428; RV32I-ZALRSC:       # %bb.0:429; RV32I-ZALRSC-NEXT:    andi a2, a0, -4430; RV32I-ZALRSC-NEXT:    slli a0, a0, 3431; RV32I-ZALRSC-NEXT:    li a3, 255432; RV32I-ZALRSC-NEXT:    zext.b a1, a1433; RV32I-ZALRSC-NEXT:    sll a3, a3, a0434; RV32I-ZALRSC-NEXT:    sll a1, a1, a0435; RV32I-ZALRSC-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=1436; RV32I-ZALRSC-NEXT:    lr.w a4, (a2)437; RV32I-ZALRSC-NEXT:    sub a5, a4, a1438; RV32I-ZALRSC-NEXT:    xor a5, a4, a5439; RV32I-ZALRSC-NEXT:    and a5, a5, a3440; RV32I-ZALRSC-NEXT:    xor a5, a4, a5441; RV32I-ZALRSC-NEXT:    sc.w a5, a5, (a2)442; RV32I-ZALRSC-NEXT:    bnez a5, .LBB5_1443; RV32I-ZALRSC-NEXT:  # %bb.2:444; RV32I-ZALRSC-NEXT:    srl a0, a4, a0445; RV32I-ZALRSC-NEXT:    slli a0, a0, 24446; RV32I-ZALRSC-NEXT:    srai a0, a0, 24447; RV32I-ZALRSC-NEXT:    ret448;449; RV64I-LABEL: atomicrmw_sub_i8_monotonic:450; RV64I:       # %bb.0:451; RV64I-NEXT:    addi sp, sp, -16452; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill453; RV64I-NEXT:    li a2, 0454; RV64I-NEXT:    call __atomic_fetch_sub_1455; RV64I-NEXT:    slli a0, a0, 56456; RV64I-NEXT:    srai a0, a0, 56457; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload458; RV64I-NEXT:    addi sp, sp, 16459; RV64I-NEXT:    ret460;461; RV64IA-LABEL: atomicrmw_sub_i8_monotonic:462; RV64IA:       # %bb.0:463; RV64IA-NEXT:    andi a2, a0, -4464; RV64IA-NEXT:    slli a0, a0, 3465; RV64IA-NEXT:    li a3, 255466; RV64IA-NEXT:    zext.b a1, a1467; RV64IA-NEXT:    sllw a3, a3, a0468; RV64IA-NEXT:    sllw a1, a1, a0469; RV64IA-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=1470; RV64IA-NEXT:    lr.w a4, (a2)471; RV64IA-NEXT:    sub a5, a4, a1472; RV64IA-NEXT:    xor a5, a4, a5473; RV64IA-NEXT:    and a5, a5, a3474; RV64IA-NEXT:    xor a5, a4, a5475; RV64IA-NEXT:    sc.w a5, a5, (a2)476; RV64IA-NEXT:    bnez a5, .LBB5_1477; RV64IA-NEXT:  # %bb.2:478; RV64IA-NEXT:    srlw a0, a4, a0479; RV64IA-NEXT:    slli a0, a0, 56480; RV64IA-NEXT:    srai a0, a0, 56481; RV64IA-NEXT:    ret482;483; RV64I-ZALRSC-LABEL: atomicrmw_sub_i8_monotonic:484; RV64I-ZALRSC:       # %bb.0:485; RV64I-ZALRSC-NEXT:    andi a2, a0, -4486; RV64I-ZALRSC-NEXT:    slli a0, a0, 3487; RV64I-ZALRSC-NEXT:    li a3, 255488; RV64I-ZALRSC-NEXT:    zext.b a1, a1489; RV64I-ZALRSC-NEXT:    sllw a3, a3, a0490; RV64I-ZALRSC-NEXT:    sllw a1, a1, a0491; RV64I-ZALRSC-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=1492; RV64I-ZALRSC-NEXT:    lr.w a4, (a2)493; RV64I-ZALRSC-NEXT:    sub a5, a4, a1494; RV64I-ZALRSC-NEXT:    xor a5, a4, a5495; RV64I-ZALRSC-NEXT:    and a5, a5, a3496; RV64I-ZALRSC-NEXT:    xor a5, a4, a5497; RV64I-ZALRSC-NEXT:    sc.w a5, a5, (a2)498; RV64I-ZALRSC-NEXT:    bnez a5, .LBB5_1499; RV64I-ZALRSC-NEXT:  # %bb.2:500; RV64I-ZALRSC-NEXT:    srlw a0, a4, a0501; RV64I-ZALRSC-NEXT:    slli a0, a0, 56502; RV64I-ZALRSC-NEXT:    srai a0, a0, 56503; RV64I-ZALRSC-NEXT:    ret504  %1 = atomicrmw sub ptr %a, i8 %b monotonic505  ret i8 %1506}507 508define signext i8 @atomicrmw_and_i8_monotonic(ptr %a, i8 %b) nounwind {509; RV32I-LABEL: atomicrmw_and_i8_monotonic:510; RV32I:       # %bb.0:511; RV32I-NEXT:    addi sp, sp, -16512; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill513; RV32I-NEXT:    li a2, 0514; RV32I-NEXT:    call __atomic_fetch_and_1515; RV32I-NEXT:    slli a0, a0, 24516; RV32I-NEXT:    srai a0, a0, 24517; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload518; RV32I-NEXT:    addi sp, sp, 16519; RV32I-NEXT:    ret520;521; RV32IA-LABEL: atomicrmw_and_i8_monotonic:522; RV32IA:       # %bb.0:523; RV32IA-NEXT:    andi a2, a0, -4524; RV32IA-NEXT:    slli a0, a0, 3525; RV32IA-NEXT:    li a3, 255526; RV32IA-NEXT:    zext.b a1, a1527; RV32IA-NEXT:    sll a3, a3, a0528; RV32IA-NEXT:    not a3, a3529; RV32IA-NEXT:    sll a1, a1, a0530; RV32IA-NEXT:    or a1, a1, a3531; RV32IA-NEXT:    amoand.w a1, a1, (a2)532; RV32IA-NEXT:    srl a0, a1, a0533; RV32IA-NEXT:    slli a0, a0, 24534; RV32IA-NEXT:    srai a0, a0, 24535; RV32IA-NEXT:    ret536;537; RV32I-ZALRSC-LABEL: atomicrmw_and_i8_monotonic:538; RV32I-ZALRSC:       # %bb.0:539; RV32I-ZALRSC-NEXT:    andi a2, a0, -4540; RV32I-ZALRSC-NEXT:    slli a0, a0, 3541; RV32I-ZALRSC-NEXT:    li a3, 255542; RV32I-ZALRSC-NEXT:    zext.b a1, a1543; RV32I-ZALRSC-NEXT:    sll a3, a3, a0544; RV32I-ZALRSC-NEXT:    not a3, a3545; RV32I-ZALRSC-NEXT:    sll a1, a1, a0546; RV32I-ZALRSC-NEXT:    or a1, a1, a3547; RV32I-ZALRSC-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=1548; RV32I-ZALRSC-NEXT:    lr.w a3, (a2)549; RV32I-ZALRSC-NEXT:    and a4, a3, a1550; RV32I-ZALRSC-NEXT:    sc.w a4, a4, (a2)551; RV32I-ZALRSC-NEXT:    bnez a4, .LBB6_1552; RV32I-ZALRSC-NEXT:  # %bb.2:553; RV32I-ZALRSC-NEXT:    srl a0, a3, a0554; RV32I-ZALRSC-NEXT:    slli a0, a0, 24555; RV32I-ZALRSC-NEXT:    srai a0, a0, 24556; RV32I-ZALRSC-NEXT:    ret557;558; RV64I-LABEL: atomicrmw_and_i8_monotonic:559; RV64I:       # %bb.0:560; RV64I-NEXT:    addi sp, sp, -16561; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill562; RV64I-NEXT:    li a2, 0563; RV64I-NEXT:    call __atomic_fetch_and_1564; RV64I-NEXT:    slli a0, a0, 56565; RV64I-NEXT:    srai a0, a0, 56566; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload567; RV64I-NEXT:    addi sp, sp, 16568; RV64I-NEXT:    ret569;570; RV64IA-LABEL: atomicrmw_and_i8_monotonic:571; RV64IA:       # %bb.0:572; RV64IA-NEXT:    andi a2, a0, -4573; RV64IA-NEXT:    slli a0, a0, 3574; RV64IA-NEXT:    li a3, 255575; RV64IA-NEXT:    zext.b a1, a1576; RV64IA-NEXT:    sllw a3, a3, a0577; RV64IA-NEXT:    not a3, a3578; RV64IA-NEXT:    sllw a1, a1, a0579; RV64IA-NEXT:    or a1, a1, a3580; RV64IA-NEXT:    amoand.w a1, a1, (a2)581; RV64IA-NEXT:    srlw a0, a1, a0582; RV64IA-NEXT:    slli a0, a0, 56583; RV64IA-NEXT:    srai a0, a0, 56584; RV64IA-NEXT:    ret585;586; RV64I-ZALRSC-LABEL: atomicrmw_and_i8_monotonic:587; RV64I-ZALRSC:       # %bb.0:588; RV64I-ZALRSC-NEXT:    andi a2, a0, -4589; RV64I-ZALRSC-NEXT:    slli a0, a0, 3590; RV64I-ZALRSC-NEXT:    li a3, 255591; RV64I-ZALRSC-NEXT:    zext.b a1, a1592; RV64I-ZALRSC-NEXT:    sllw a3, a3, a0593; RV64I-ZALRSC-NEXT:    not a3, a3594; RV64I-ZALRSC-NEXT:    sllw a1, a1, a0595; RV64I-ZALRSC-NEXT:    or a1, a1, a3596; RV64I-ZALRSC-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=1597; RV64I-ZALRSC-NEXT:    lr.w a3, (a2)598; RV64I-ZALRSC-NEXT:    and a4, a3, a1599; RV64I-ZALRSC-NEXT:    sc.w a4, a4, (a2)600; RV64I-ZALRSC-NEXT:    bnez a4, .LBB6_1601; RV64I-ZALRSC-NEXT:  # %bb.2:602; RV64I-ZALRSC-NEXT:    srlw a0, a3, a0603; RV64I-ZALRSC-NEXT:    slli a0, a0, 56604; RV64I-ZALRSC-NEXT:    srai a0, a0, 56605; RV64I-ZALRSC-NEXT:    ret606  %1 = atomicrmw and ptr %a, i8 %b monotonic607  ret i8 %1608}609 610define signext i8 @atomicrmw_nand_i8_monotonic(ptr %a, i8 %b) nounwind {611; RV32I-LABEL: atomicrmw_nand_i8_monotonic:612; RV32I:       # %bb.0:613; RV32I-NEXT:    addi sp, sp, -16614; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill615; RV32I-NEXT:    li a2, 0616; RV32I-NEXT:    call __atomic_fetch_nand_1617; RV32I-NEXT:    slli a0, a0, 24618; RV32I-NEXT:    srai a0, a0, 24619; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload620; RV32I-NEXT:    addi sp, sp, 16621; RV32I-NEXT:    ret622;623; RV32IA-LABEL: atomicrmw_nand_i8_monotonic:624; RV32IA:       # %bb.0:625; RV32IA-NEXT:    andi a2, a0, -4626; RV32IA-NEXT:    slli a0, a0, 3627; RV32IA-NEXT:    li a3, 255628; RV32IA-NEXT:    zext.b a1, a1629; RV32IA-NEXT:    sll a3, a3, a0630; RV32IA-NEXT:    sll a1, a1, a0631; RV32IA-NEXT:  .LBB7_1: # =>This Inner Loop Header: Depth=1632; RV32IA-NEXT:    lr.w a4, (a2)633; RV32IA-NEXT:    and a5, a4, a1634; RV32IA-NEXT:    not a5, a5635; RV32IA-NEXT:    xor a5, a4, a5636; RV32IA-NEXT:    and a5, a5, a3637; RV32IA-NEXT:    xor a5, a4, a5638; RV32IA-NEXT:    sc.w a5, a5, (a2)639; RV32IA-NEXT:    bnez a5, .LBB7_1640; RV32IA-NEXT:  # %bb.2:641; RV32IA-NEXT:    srl a0, a4, a0642; RV32IA-NEXT:    slli a0, a0, 24643; RV32IA-NEXT:    srai a0, a0, 24644; RV32IA-NEXT:    ret645;646; RV32I-ZALRSC-LABEL: atomicrmw_nand_i8_monotonic:647; RV32I-ZALRSC:       # %bb.0:648; RV32I-ZALRSC-NEXT:    andi a2, a0, -4649; RV32I-ZALRSC-NEXT:    slli a0, a0, 3650; RV32I-ZALRSC-NEXT:    li a3, 255651; RV32I-ZALRSC-NEXT:    zext.b a1, a1652; RV32I-ZALRSC-NEXT:    sll a3, a3, a0653; RV32I-ZALRSC-NEXT:    sll a1, a1, a0654; RV32I-ZALRSC-NEXT:  .LBB7_1: # =>This Inner Loop Header: Depth=1655; RV32I-ZALRSC-NEXT:    lr.w a4, (a2)656; RV32I-ZALRSC-NEXT:    and a5, a4, a1657; RV32I-ZALRSC-NEXT:    not a5, a5658; RV32I-ZALRSC-NEXT:    xor a5, a4, a5659; RV32I-ZALRSC-NEXT:    and a5, a5, a3660; RV32I-ZALRSC-NEXT:    xor a5, a4, a5661; RV32I-ZALRSC-NEXT:    sc.w a5, a5, (a2)662; RV32I-ZALRSC-NEXT:    bnez a5, .LBB7_1663; RV32I-ZALRSC-NEXT:  # %bb.2:664; RV32I-ZALRSC-NEXT:    srl a0, a4, a0665; RV32I-ZALRSC-NEXT:    slli a0, a0, 24666; RV32I-ZALRSC-NEXT:    srai a0, a0, 24667; RV32I-ZALRSC-NEXT:    ret668;669; RV64I-LABEL: atomicrmw_nand_i8_monotonic:670; RV64I:       # %bb.0:671; RV64I-NEXT:    addi sp, sp, -16672; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill673; RV64I-NEXT:    li a2, 0674; RV64I-NEXT:    call __atomic_fetch_nand_1675; RV64I-NEXT:    slli a0, a0, 56676; RV64I-NEXT:    srai a0, a0, 56677; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload678; RV64I-NEXT:    addi sp, sp, 16679; RV64I-NEXT:    ret680;681; RV64IA-LABEL: atomicrmw_nand_i8_monotonic:682; RV64IA:       # %bb.0:683; RV64IA-NEXT:    andi a2, a0, -4684; RV64IA-NEXT:    slli a0, a0, 3685; RV64IA-NEXT:    li a3, 255686; RV64IA-NEXT:    zext.b a1, a1687; RV64IA-NEXT:    sllw a3, a3, a0688; RV64IA-NEXT:    sllw a1, a1, a0689; RV64IA-NEXT:  .LBB7_1: # =>This Inner Loop Header: Depth=1690; RV64IA-NEXT:    lr.w a4, (a2)691; RV64IA-NEXT:    and a5, a4, a1692; RV64IA-NEXT:    not a5, a5693; RV64IA-NEXT:    xor a5, a4, a5694; RV64IA-NEXT:    and a5, a5, a3695; RV64IA-NEXT:    xor a5, a4, a5696; RV64IA-NEXT:    sc.w a5, a5, (a2)697; RV64IA-NEXT:    bnez a5, .LBB7_1698; RV64IA-NEXT:  # %bb.2:699; RV64IA-NEXT:    srlw a0, a4, a0700; RV64IA-NEXT:    slli a0, a0, 56701; RV64IA-NEXT:    srai a0, a0, 56702; RV64IA-NEXT:    ret703;704; RV64I-ZALRSC-LABEL: atomicrmw_nand_i8_monotonic:705; RV64I-ZALRSC:       # %bb.0:706; RV64I-ZALRSC-NEXT:    andi a2, a0, -4707; RV64I-ZALRSC-NEXT:    slli a0, a0, 3708; RV64I-ZALRSC-NEXT:    li a3, 255709; RV64I-ZALRSC-NEXT:    zext.b a1, a1710; RV64I-ZALRSC-NEXT:    sllw a3, a3, a0711; RV64I-ZALRSC-NEXT:    sllw a1, a1, a0712; RV64I-ZALRSC-NEXT:  .LBB7_1: # =>This Inner Loop Header: Depth=1713; RV64I-ZALRSC-NEXT:    lr.w a4, (a2)714; RV64I-ZALRSC-NEXT:    and a5, a4, a1715; RV64I-ZALRSC-NEXT:    not a5, a5716; RV64I-ZALRSC-NEXT:    xor a5, a4, a5717; RV64I-ZALRSC-NEXT:    and a5, a5, a3718; RV64I-ZALRSC-NEXT:    xor a5, a4, a5719; RV64I-ZALRSC-NEXT:    sc.w a5, a5, (a2)720; RV64I-ZALRSC-NEXT:    bnez a5, .LBB7_1721; RV64I-ZALRSC-NEXT:  # %bb.2:722; RV64I-ZALRSC-NEXT:    srlw a0, a4, a0723; RV64I-ZALRSC-NEXT:    slli a0, a0, 56724; RV64I-ZALRSC-NEXT:    srai a0, a0, 56725; RV64I-ZALRSC-NEXT:    ret726  %1 = atomicrmw nand ptr %a, i8 %b monotonic727  ret i8 %1728}729 730define signext i8 @atomicrmw_or_i8_monotonic(ptr %a, i8 %b) nounwind {731; RV32I-LABEL: atomicrmw_or_i8_monotonic:732; RV32I:       # %bb.0:733; RV32I-NEXT:    addi sp, sp, -16734; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill735; RV32I-NEXT:    li a2, 0736; RV32I-NEXT:    call __atomic_fetch_or_1737; RV32I-NEXT:    slli a0, a0, 24738; RV32I-NEXT:    srai a0, a0, 24739; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload740; RV32I-NEXT:    addi sp, sp, 16741; RV32I-NEXT:    ret742;743; RV32IA-LABEL: atomicrmw_or_i8_monotonic:744; RV32IA:       # %bb.0:745; RV32IA-NEXT:    andi a2, a0, -4746; RV32IA-NEXT:    slli a0, a0, 3747; RV32IA-NEXT:    zext.b a1, a1748; RV32IA-NEXT:    sll a1, a1, a0749; RV32IA-NEXT:    amoor.w a1, a1, (a2)750; RV32IA-NEXT:    srl a0, a1, a0751; RV32IA-NEXT:    slli a0, a0, 24752; RV32IA-NEXT:    srai a0, a0, 24753; RV32IA-NEXT:    ret754;755; RV32I-ZALRSC-LABEL: atomicrmw_or_i8_monotonic:756; RV32I-ZALRSC:       # %bb.0:757; RV32I-ZALRSC-NEXT:    andi a2, a0, -4758; RV32I-ZALRSC-NEXT:    slli a0, a0, 3759; RV32I-ZALRSC-NEXT:    zext.b a1, a1760; RV32I-ZALRSC-NEXT:    sll a1, a1, a0761; RV32I-ZALRSC-NEXT:  .LBB8_1: # =>This Inner Loop Header: Depth=1762; RV32I-ZALRSC-NEXT:    lr.w a3, (a2)763; RV32I-ZALRSC-NEXT:    or a4, a3, a1764; RV32I-ZALRSC-NEXT:    sc.w a4, a4, (a2)765; RV32I-ZALRSC-NEXT:    bnez a4, .LBB8_1766; RV32I-ZALRSC-NEXT:  # %bb.2:767; RV32I-ZALRSC-NEXT:    srl a0, a3, a0768; RV32I-ZALRSC-NEXT:    slli a0, a0, 24769; RV32I-ZALRSC-NEXT:    srai a0, a0, 24770; RV32I-ZALRSC-NEXT:    ret771;772; RV64I-LABEL: atomicrmw_or_i8_monotonic:773; RV64I:       # %bb.0:774; RV64I-NEXT:    addi sp, sp, -16775; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill776; RV64I-NEXT:    li a2, 0777; RV64I-NEXT:    call __atomic_fetch_or_1778; RV64I-NEXT:    slli a0, a0, 56779; RV64I-NEXT:    srai a0, a0, 56780; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload781; RV64I-NEXT:    addi sp, sp, 16782; RV64I-NEXT:    ret783;784; RV64IA-LABEL: atomicrmw_or_i8_monotonic:785; RV64IA:       # %bb.0:786; RV64IA-NEXT:    andi a2, a0, -4787; RV64IA-NEXT:    slli a0, a0, 3788; RV64IA-NEXT:    zext.b a1, a1789; RV64IA-NEXT:    sllw a1, a1, a0790; RV64IA-NEXT:    amoor.w a1, a1, (a2)791; RV64IA-NEXT:    srlw a0, a1, a0792; RV64IA-NEXT:    slli a0, a0, 56793; RV64IA-NEXT:    srai a0, a0, 56794; RV64IA-NEXT:    ret795;796; RV64I-ZALRSC-LABEL: atomicrmw_or_i8_monotonic:797; RV64I-ZALRSC:       # %bb.0:798; RV64I-ZALRSC-NEXT:    andi a2, a0, -4799; RV64I-ZALRSC-NEXT:    slli a0, a0, 3800; RV64I-ZALRSC-NEXT:    zext.b a1, a1801; RV64I-ZALRSC-NEXT:    sllw a1, a1, a0802; RV64I-ZALRSC-NEXT:  .LBB8_1: # =>This Inner Loop Header: Depth=1803; RV64I-ZALRSC-NEXT:    lr.w a3, (a2)804; RV64I-ZALRSC-NEXT:    or a4, a3, a1805; RV64I-ZALRSC-NEXT:    sc.w a4, a4, (a2)806; RV64I-ZALRSC-NEXT:    bnez a4, .LBB8_1807; RV64I-ZALRSC-NEXT:  # %bb.2:808; RV64I-ZALRSC-NEXT:    srlw a0, a3, a0809; RV64I-ZALRSC-NEXT:    slli a0, a0, 56810; RV64I-ZALRSC-NEXT:    srai a0, a0, 56811; RV64I-ZALRSC-NEXT:    ret812  %1 = atomicrmw or ptr %a, i8 %b monotonic813  ret i8 %1814}815 816define signext i8 @atomicrmw_xor_i8_monotonic(ptr %a, i8 %b) nounwind {817; RV32I-LABEL: atomicrmw_xor_i8_monotonic:818; RV32I:       # %bb.0:819; RV32I-NEXT:    addi sp, sp, -16820; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill821; RV32I-NEXT:    li a2, 0822; RV32I-NEXT:    call __atomic_fetch_xor_1823; RV32I-NEXT:    slli a0, a0, 24824; RV32I-NEXT:    srai a0, a0, 24825; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload826; RV32I-NEXT:    addi sp, sp, 16827; RV32I-NEXT:    ret828;829; RV32IA-LABEL: atomicrmw_xor_i8_monotonic:830; RV32IA:       # %bb.0:831; RV32IA-NEXT:    andi a2, a0, -4832; RV32IA-NEXT:    slli a0, a0, 3833; RV32IA-NEXT:    zext.b a1, a1834; RV32IA-NEXT:    sll a1, a1, a0835; RV32IA-NEXT:    amoxor.w a1, a1, (a2)836; RV32IA-NEXT:    srl a0, a1, a0837; RV32IA-NEXT:    slli a0, a0, 24838; RV32IA-NEXT:    srai a0, a0, 24839; RV32IA-NEXT:    ret840;841; RV32I-ZALRSC-LABEL: atomicrmw_xor_i8_monotonic:842; RV32I-ZALRSC:       # %bb.0:843; RV32I-ZALRSC-NEXT:    andi a2, a0, -4844; RV32I-ZALRSC-NEXT:    slli a0, a0, 3845; RV32I-ZALRSC-NEXT:    zext.b a1, a1846; RV32I-ZALRSC-NEXT:    sll a1, a1, a0847; RV32I-ZALRSC-NEXT:  .LBB9_1: # =>This Inner Loop Header: Depth=1848; RV32I-ZALRSC-NEXT:    lr.w a3, (a2)849; RV32I-ZALRSC-NEXT:    xor a4, a3, a1850; RV32I-ZALRSC-NEXT:    sc.w a4, a4, (a2)851; RV32I-ZALRSC-NEXT:    bnez a4, .LBB9_1852; RV32I-ZALRSC-NEXT:  # %bb.2:853; RV32I-ZALRSC-NEXT:    srl a0, a3, a0854; RV32I-ZALRSC-NEXT:    slli a0, a0, 24855; RV32I-ZALRSC-NEXT:    srai a0, a0, 24856; RV32I-ZALRSC-NEXT:    ret857;858; RV64I-LABEL: atomicrmw_xor_i8_monotonic:859; RV64I:       # %bb.0:860; RV64I-NEXT:    addi sp, sp, -16861; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill862; RV64I-NEXT:    li a2, 0863; RV64I-NEXT:    call __atomic_fetch_xor_1864; RV64I-NEXT:    slli a0, a0, 56865; RV64I-NEXT:    srai a0, a0, 56866; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload867; RV64I-NEXT:    addi sp, sp, 16868; RV64I-NEXT:    ret869;870; RV64IA-LABEL: atomicrmw_xor_i8_monotonic:871; RV64IA:       # %bb.0:872; RV64IA-NEXT:    andi a2, a0, -4873; RV64IA-NEXT:    slli a0, a0, 3874; RV64IA-NEXT:    zext.b a1, a1875; RV64IA-NEXT:    sllw a1, a1, a0876; RV64IA-NEXT:    amoxor.w a1, a1, (a2)877; RV64IA-NEXT:    srlw a0, a1, a0878; RV64IA-NEXT:    slli a0, a0, 56879; RV64IA-NEXT:    srai a0, a0, 56880; RV64IA-NEXT:    ret881;882; RV64I-ZALRSC-LABEL: atomicrmw_xor_i8_monotonic:883; RV64I-ZALRSC:       # %bb.0:884; RV64I-ZALRSC-NEXT:    andi a2, a0, -4885; RV64I-ZALRSC-NEXT:    slli a0, a0, 3886; RV64I-ZALRSC-NEXT:    zext.b a1, a1887; RV64I-ZALRSC-NEXT:    sllw a1, a1, a0888; RV64I-ZALRSC-NEXT:  .LBB9_1: # =>This Inner Loop Header: Depth=1889; RV64I-ZALRSC-NEXT:    lr.w a3, (a2)890; RV64I-ZALRSC-NEXT:    xor a4, a3, a1891; RV64I-ZALRSC-NEXT:    sc.w a4, a4, (a2)892; RV64I-ZALRSC-NEXT:    bnez a4, .LBB9_1893; RV64I-ZALRSC-NEXT:  # %bb.2:894; RV64I-ZALRSC-NEXT:    srlw a0, a3, a0895; RV64I-ZALRSC-NEXT:    slli a0, a0, 56896; RV64I-ZALRSC-NEXT:    srai a0, a0, 56897; RV64I-ZALRSC-NEXT:    ret898  %1 = atomicrmw xor ptr %a, i8 %b monotonic899  ret i8 %1900}901 902define signext i8 @atomicrmw_max_i8_monotonic(ptr %a, i8 %b) nounwind {903; RV32I-LABEL: atomicrmw_max_i8_monotonic:904; RV32I:       # %bb.0:905; RV32I-NEXT:    addi sp, sp, -32906; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill907; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill908; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill909; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill910; RV32I-NEXT:    mv s0, a0911; RV32I-NEXT:    lbu a3, 0(a0)912; RV32I-NEXT:    mv s1, a1913; RV32I-NEXT:    slli a0, a1, 24914; RV32I-NEXT:    srai s2, a0, 24915; RV32I-NEXT:    j .LBB10_2916; RV32I-NEXT:  .LBB10_1: # %atomicrmw.start917; RV32I-NEXT:    # in Loop: Header=BB10_2 Depth=1918; RV32I-NEXT:    sb a3, 15(sp)919; RV32I-NEXT:    addi a1, sp, 15920; RV32I-NEXT:    mv a0, s0921; RV32I-NEXT:    li a3, 0922; RV32I-NEXT:    li a4, 0923; RV32I-NEXT:    call __atomic_compare_exchange_1924; RV32I-NEXT:    lbu a3, 15(sp)925; RV32I-NEXT:    bnez a0, .LBB10_4926; RV32I-NEXT:  .LBB10_2: # %atomicrmw.start927; RV32I-NEXT:    # =>This Inner Loop Header: Depth=1928; RV32I-NEXT:    slli a0, a3, 24929; RV32I-NEXT:    srai a0, a0, 24930; RV32I-NEXT:    mv a2, a3931; RV32I-NEXT:    blt s2, a0, .LBB10_1932; RV32I-NEXT:  # %bb.3: # %atomicrmw.start933; RV32I-NEXT:    # in Loop: Header=BB10_2 Depth=1934; RV32I-NEXT:    mv a2, s1935; RV32I-NEXT:    j .LBB10_1936; RV32I-NEXT:  .LBB10_4: # %atomicrmw.end937; RV32I-NEXT:    slli a0, a3, 24938; RV32I-NEXT:    srai a0, a0, 24939; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload940; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload941; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload942; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload943; RV32I-NEXT:    addi sp, sp, 32944; RV32I-NEXT:    ret945;946; RV32IA-LABEL: atomicrmw_max_i8_monotonic:947; RV32IA:       # %bb.0:948; RV32IA-NEXT:    andi a2, a0, -4949; RV32IA-NEXT:    slli a0, a0, 3950; RV32IA-NEXT:    li a3, 255951; RV32IA-NEXT:    slli a1, a1, 24952; RV32IA-NEXT:    andi a4, a0, 24953; RV32IA-NEXT:    sll a3, a3, a0954; RV32IA-NEXT:    srai a1, a1, 24955; RV32IA-NEXT:    sll a1, a1, a0956; RV32IA-NEXT:    xori a4, a4, 24957; RV32IA-NEXT:  .LBB10_1: # =>This Inner Loop Header: Depth=1958; RV32IA-NEXT:    lr.w a5, (a2)959; RV32IA-NEXT:    and a7, a5, a3960; RV32IA-NEXT:    mv a6, a5961; RV32IA-NEXT:    sll a7, a7, a4962; RV32IA-NEXT:    sra a7, a7, a4963; RV32IA-NEXT:    bge a7, a1, .LBB10_3964; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB10_1 Depth=1965; RV32IA-NEXT:    xor a6, a5, a1966; RV32IA-NEXT:    and a6, a6, a3967; RV32IA-NEXT:    xor a6, a5, a6968; RV32IA-NEXT:  .LBB10_3: # in Loop: Header=BB10_1 Depth=1969; RV32IA-NEXT:    sc.w a6, a6, (a2)970; RV32IA-NEXT:    bnez a6, .LBB10_1971; RV32IA-NEXT:  # %bb.4:972; RV32IA-NEXT:    srl a0, a5, a0973; RV32IA-NEXT:    slli a0, a0, 24974; RV32IA-NEXT:    srai a0, a0, 24975; RV32IA-NEXT:    ret976;977; RV32I-ZALRSC-LABEL: atomicrmw_max_i8_monotonic:978; RV32I-ZALRSC:       # %bb.0:979; RV32I-ZALRSC-NEXT:    andi a2, a0, -4980; RV32I-ZALRSC-NEXT:    slli a0, a0, 3981; RV32I-ZALRSC-NEXT:    li a3, 255982; RV32I-ZALRSC-NEXT:    slli a1, a1, 24983; RV32I-ZALRSC-NEXT:    andi a4, a0, 24984; RV32I-ZALRSC-NEXT:    sll a3, a3, a0985; RV32I-ZALRSC-NEXT:    srai a1, a1, 24986; RV32I-ZALRSC-NEXT:    sll a1, a1, a0987; RV32I-ZALRSC-NEXT:    xori a4, a4, 24988; RV32I-ZALRSC-NEXT:  .LBB10_1: # =>This Inner Loop Header: Depth=1989; RV32I-ZALRSC-NEXT:    lr.w a5, (a2)990; RV32I-ZALRSC-NEXT:    and a7, a5, a3991; RV32I-ZALRSC-NEXT:    mv a6, a5992; RV32I-ZALRSC-NEXT:    sll a7, a7, a4993; RV32I-ZALRSC-NEXT:    sra a7, a7, a4994; RV32I-ZALRSC-NEXT:    bge a7, a1, .LBB10_3995; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB10_1 Depth=1996; RV32I-ZALRSC-NEXT:    xor a6, a5, a1997; RV32I-ZALRSC-NEXT:    and a6, a6, a3998; RV32I-ZALRSC-NEXT:    xor a6, a5, a6999; RV32I-ZALRSC-NEXT:  .LBB10_3: # in Loop: Header=BB10_1 Depth=11000; RV32I-ZALRSC-NEXT:    sc.w a6, a6, (a2)1001; RV32I-ZALRSC-NEXT:    bnez a6, .LBB10_11002; RV32I-ZALRSC-NEXT:  # %bb.4:1003; RV32I-ZALRSC-NEXT:    srl a0, a5, a01004; RV32I-ZALRSC-NEXT:    slli a0, a0, 241005; RV32I-ZALRSC-NEXT:    srai a0, a0, 241006; RV32I-ZALRSC-NEXT:    ret1007;1008; RV64I-LABEL: atomicrmw_max_i8_monotonic:1009; RV64I:       # %bb.0:1010; RV64I-NEXT:    addi sp, sp, -481011; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill1012; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill1013; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill1014; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill1015; RV64I-NEXT:    mv s0, a01016; RV64I-NEXT:    lbu a3, 0(a0)1017; RV64I-NEXT:    mv s1, a11018; RV64I-NEXT:    slli a0, a1, 561019; RV64I-NEXT:    srai s2, a0, 561020; RV64I-NEXT:    j .LBB10_21021; RV64I-NEXT:  .LBB10_1: # %atomicrmw.start1022; RV64I-NEXT:    # in Loop: Header=BB10_2 Depth=11023; RV64I-NEXT:    sb a3, 15(sp)1024; RV64I-NEXT:    addi a1, sp, 151025; RV64I-NEXT:    mv a0, s01026; RV64I-NEXT:    li a3, 01027; RV64I-NEXT:    li a4, 01028; RV64I-NEXT:    call __atomic_compare_exchange_11029; RV64I-NEXT:    lbu a3, 15(sp)1030; RV64I-NEXT:    bnez a0, .LBB10_41031; RV64I-NEXT:  .LBB10_2: # %atomicrmw.start1032; RV64I-NEXT:    # =>This Inner Loop Header: Depth=11033; RV64I-NEXT:    slli a0, a3, 561034; RV64I-NEXT:    srai a0, a0, 561035; RV64I-NEXT:    mv a2, a31036; RV64I-NEXT:    blt s2, a0, .LBB10_11037; RV64I-NEXT:  # %bb.3: # %atomicrmw.start1038; RV64I-NEXT:    # in Loop: Header=BB10_2 Depth=11039; RV64I-NEXT:    mv a2, s11040; RV64I-NEXT:    j .LBB10_11041; RV64I-NEXT:  .LBB10_4: # %atomicrmw.end1042; RV64I-NEXT:    slli a0, a3, 561043; RV64I-NEXT:    srai a0, a0, 561044; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload1045; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload1046; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload1047; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload1048; RV64I-NEXT:    addi sp, sp, 481049; RV64I-NEXT:    ret1050;1051; RV64IA-LABEL: atomicrmw_max_i8_monotonic:1052; RV64IA:       # %bb.0:1053; RV64IA-NEXT:    andi a2, a0, -41054; RV64IA-NEXT:    slli a0, a0, 31055; RV64IA-NEXT:    li a3, 2551056; RV64IA-NEXT:    slli a1, a1, 561057; RV64IA-NEXT:    andi a4, a0, 241058; RV64IA-NEXT:    sllw a3, a3, a01059; RV64IA-NEXT:    srai a1, a1, 561060; RV64IA-NEXT:    sllw a1, a1, a01061; RV64IA-NEXT:    xori a4, a4, 561062; RV64IA-NEXT:  .LBB10_1: # =>This Inner Loop Header: Depth=11063; RV64IA-NEXT:    lr.w a5, (a2)1064; RV64IA-NEXT:    and a7, a5, a31065; RV64IA-NEXT:    mv a6, a51066; RV64IA-NEXT:    sll a7, a7, a41067; RV64IA-NEXT:    sra a7, a7, a41068; RV64IA-NEXT:    bge a7, a1, .LBB10_31069; RV64IA-NEXT:  # %bb.2: # in Loop: Header=BB10_1 Depth=11070; RV64IA-NEXT:    xor a6, a5, a11071; RV64IA-NEXT:    and a6, a6, a31072; RV64IA-NEXT:    xor a6, a5, a61073; RV64IA-NEXT:  .LBB10_3: # in Loop: Header=BB10_1 Depth=11074; RV64IA-NEXT:    sc.w a6, a6, (a2)1075; RV64IA-NEXT:    bnez a6, .LBB10_11076; RV64IA-NEXT:  # %bb.4:1077; RV64IA-NEXT:    srlw a0, a5, a01078; RV64IA-NEXT:    slli a0, a0, 561079; RV64IA-NEXT:    srai a0, a0, 561080; RV64IA-NEXT:    ret1081;1082; RV64I-ZALRSC-LABEL: atomicrmw_max_i8_monotonic:1083; RV64I-ZALRSC:       # %bb.0:1084; RV64I-ZALRSC-NEXT:    andi a2, a0, -41085; RV64I-ZALRSC-NEXT:    slli a0, a0, 31086; RV64I-ZALRSC-NEXT:    li a3, 2551087; RV64I-ZALRSC-NEXT:    slli a1, a1, 561088; RV64I-ZALRSC-NEXT:    andi a4, a0, 241089; RV64I-ZALRSC-NEXT:    sllw a3, a3, a01090; RV64I-ZALRSC-NEXT:    srai a1, a1, 561091; RV64I-ZALRSC-NEXT:    sllw a1, a1, a01092; RV64I-ZALRSC-NEXT:    xori a4, a4, 561093; RV64I-ZALRSC-NEXT:  .LBB10_1: # =>This Inner Loop Header: Depth=11094; RV64I-ZALRSC-NEXT:    lr.w a5, (a2)1095; RV64I-ZALRSC-NEXT:    and a7, a5, a31096; RV64I-ZALRSC-NEXT:    mv a6, a51097; RV64I-ZALRSC-NEXT:    sll a7, a7, a41098; RV64I-ZALRSC-NEXT:    sra a7, a7, a41099; RV64I-ZALRSC-NEXT:    bge a7, a1, .LBB10_31100; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB10_1 Depth=11101; RV64I-ZALRSC-NEXT:    xor a6, a5, a11102; RV64I-ZALRSC-NEXT:    and a6, a6, a31103; RV64I-ZALRSC-NEXT:    xor a6, a5, a61104; RV64I-ZALRSC-NEXT:  .LBB10_3: # in Loop: Header=BB10_1 Depth=11105; RV64I-ZALRSC-NEXT:    sc.w a6, a6, (a2)1106; RV64I-ZALRSC-NEXT:    bnez a6, .LBB10_11107; RV64I-ZALRSC-NEXT:  # %bb.4:1108; RV64I-ZALRSC-NEXT:    srlw a0, a5, a01109; RV64I-ZALRSC-NEXT:    slli a0, a0, 561110; RV64I-ZALRSC-NEXT:    srai a0, a0, 561111; RV64I-ZALRSC-NEXT:    ret1112  %1 = atomicrmw max ptr %a, i8 %b monotonic1113  ret i8 %11114}1115 1116define signext i8 @atomicrmw_min_i8_monotonic(ptr %a, i8 %b) nounwind {1117; RV32I-LABEL: atomicrmw_min_i8_monotonic:1118; RV32I:       # %bb.0:1119; RV32I-NEXT:    addi sp, sp, -321120; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill1121; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill1122; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill1123; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill1124; RV32I-NEXT:    mv s0, a01125; RV32I-NEXT:    lbu a3, 0(a0)1126; RV32I-NEXT:    mv s1, a11127; RV32I-NEXT:    slli a0, a1, 241128; RV32I-NEXT:    srai s2, a0, 241129; RV32I-NEXT:    j .LBB11_21130; RV32I-NEXT:  .LBB11_1: # %atomicrmw.start1131; RV32I-NEXT:    # in Loop: Header=BB11_2 Depth=11132; RV32I-NEXT:    sb a3, 15(sp)1133; RV32I-NEXT:    addi a1, sp, 151134; RV32I-NEXT:    mv a0, s01135; RV32I-NEXT:    li a3, 01136; RV32I-NEXT:    li a4, 01137; RV32I-NEXT:    call __atomic_compare_exchange_11138; RV32I-NEXT:    lbu a3, 15(sp)1139; RV32I-NEXT:    bnez a0, .LBB11_41140; RV32I-NEXT:  .LBB11_2: # %atomicrmw.start1141; RV32I-NEXT:    # =>This Inner Loop Header: Depth=11142; RV32I-NEXT:    slli a0, a3, 241143; RV32I-NEXT:    srai a0, a0, 241144; RV32I-NEXT:    mv a2, a31145; RV32I-NEXT:    bge s2, a0, .LBB11_11146; RV32I-NEXT:  # %bb.3: # %atomicrmw.start1147; RV32I-NEXT:    # in Loop: Header=BB11_2 Depth=11148; RV32I-NEXT:    mv a2, s11149; RV32I-NEXT:    j .LBB11_11150; RV32I-NEXT:  .LBB11_4: # %atomicrmw.end1151; RV32I-NEXT:    slli a0, a3, 241152; RV32I-NEXT:    srai a0, a0, 241153; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload1154; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload1155; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload1156; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload1157; RV32I-NEXT:    addi sp, sp, 321158; RV32I-NEXT:    ret1159;1160; RV32IA-LABEL: atomicrmw_min_i8_monotonic:1161; RV32IA:       # %bb.0:1162; RV32IA-NEXT:    andi a2, a0, -41163; RV32IA-NEXT:    slli a0, a0, 31164; RV32IA-NEXT:    li a3, 2551165; RV32IA-NEXT:    slli a1, a1, 241166; RV32IA-NEXT:    andi a4, a0, 241167; RV32IA-NEXT:    sll a3, a3, a01168; RV32IA-NEXT:    srai a1, a1, 241169; RV32IA-NEXT:    sll a1, a1, a01170; RV32IA-NEXT:    xori a4, a4, 241171; RV32IA-NEXT:  .LBB11_1: # =>This Inner Loop Header: Depth=11172; RV32IA-NEXT:    lr.w a5, (a2)1173; RV32IA-NEXT:    and a7, a5, a31174; RV32IA-NEXT:    mv a6, a51175; RV32IA-NEXT:    sll a7, a7, a41176; RV32IA-NEXT:    sra a7, a7, a41177; RV32IA-NEXT:    bge a1, a7, .LBB11_31178; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB11_1 Depth=11179; RV32IA-NEXT:    xor a6, a5, a11180; RV32IA-NEXT:    and a6, a6, a31181; RV32IA-NEXT:    xor a6, a5, a61182; RV32IA-NEXT:  .LBB11_3: # in Loop: Header=BB11_1 Depth=11183; RV32IA-NEXT:    sc.w a6, a6, (a2)1184; RV32IA-NEXT:    bnez a6, .LBB11_11185; RV32IA-NEXT:  # %bb.4:1186; RV32IA-NEXT:    srl a0, a5, a01187; RV32IA-NEXT:    slli a0, a0, 241188; RV32IA-NEXT:    srai a0, a0, 241189; RV32IA-NEXT:    ret1190;1191; RV32I-ZALRSC-LABEL: atomicrmw_min_i8_monotonic:1192; RV32I-ZALRSC:       # %bb.0:1193; RV32I-ZALRSC-NEXT:    andi a2, a0, -41194; RV32I-ZALRSC-NEXT:    slli a0, a0, 31195; RV32I-ZALRSC-NEXT:    li a3, 2551196; RV32I-ZALRSC-NEXT:    slli a1, a1, 241197; RV32I-ZALRSC-NEXT:    andi a4, a0, 241198; RV32I-ZALRSC-NEXT:    sll a3, a3, a01199; RV32I-ZALRSC-NEXT:    srai a1, a1, 241200; RV32I-ZALRSC-NEXT:    sll a1, a1, a01201; RV32I-ZALRSC-NEXT:    xori a4, a4, 241202; RV32I-ZALRSC-NEXT:  .LBB11_1: # =>This Inner Loop Header: Depth=11203; RV32I-ZALRSC-NEXT:    lr.w a5, (a2)1204; RV32I-ZALRSC-NEXT:    and a7, a5, a31205; RV32I-ZALRSC-NEXT:    mv a6, a51206; RV32I-ZALRSC-NEXT:    sll a7, a7, a41207; RV32I-ZALRSC-NEXT:    sra a7, a7, a41208; RV32I-ZALRSC-NEXT:    bge a1, a7, .LBB11_31209; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB11_1 Depth=11210; RV32I-ZALRSC-NEXT:    xor a6, a5, a11211; RV32I-ZALRSC-NEXT:    and a6, a6, a31212; RV32I-ZALRSC-NEXT:    xor a6, a5, a61213; RV32I-ZALRSC-NEXT:  .LBB11_3: # in Loop: Header=BB11_1 Depth=11214; RV32I-ZALRSC-NEXT:    sc.w a6, a6, (a2)1215; RV32I-ZALRSC-NEXT:    bnez a6, .LBB11_11216; RV32I-ZALRSC-NEXT:  # %bb.4:1217; RV32I-ZALRSC-NEXT:    srl a0, a5, a01218; RV32I-ZALRSC-NEXT:    slli a0, a0, 241219; RV32I-ZALRSC-NEXT:    srai a0, a0, 241220; RV32I-ZALRSC-NEXT:    ret1221;1222; RV64I-LABEL: atomicrmw_min_i8_monotonic:1223; RV64I:       # %bb.0:1224; RV64I-NEXT:    addi sp, sp, -481225; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill1226; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill1227; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill1228; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill1229; RV64I-NEXT:    mv s0, a01230; RV64I-NEXT:    lbu a3, 0(a0)1231; RV64I-NEXT:    mv s1, a11232; RV64I-NEXT:    slli a0, a1, 561233; RV64I-NEXT:    srai s2, a0, 561234; RV64I-NEXT:    j .LBB11_21235; RV64I-NEXT:  .LBB11_1: # %atomicrmw.start1236; RV64I-NEXT:    # in Loop: Header=BB11_2 Depth=11237; RV64I-NEXT:    sb a3, 15(sp)1238; RV64I-NEXT:    addi a1, sp, 151239; RV64I-NEXT:    mv a0, s01240; RV64I-NEXT:    li a3, 01241; RV64I-NEXT:    li a4, 01242; RV64I-NEXT:    call __atomic_compare_exchange_11243; RV64I-NEXT:    lbu a3, 15(sp)1244; RV64I-NEXT:    bnez a0, .LBB11_41245; RV64I-NEXT:  .LBB11_2: # %atomicrmw.start1246; RV64I-NEXT:    # =>This Inner Loop Header: Depth=11247; RV64I-NEXT:    slli a0, a3, 561248; RV64I-NEXT:    srai a0, a0, 561249; RV64I-NEXT:    mv a2, a31250; RV64I-NEXT:    bge s2, a0, .LBB11_11251; RV64I-NEXT:  # %bb.3: # %atomicrmw.start1252; RV64I-NEXT:    # in Loop: Header=BB11_2 Depth=11253; RV64I-NEXT:    mv a2, s11254; RV64I-NEXT:    j .LBB11_11255; RV64I-NEXT:  .LBB11_4: # %atomicrmw.end1256; RV64I-NEXT:    slli a0, a3, 561257; RV64I-NEXT:    srai a0, a0, 561258; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload1259; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload1260; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload1261; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload1262; RV64I-NEXT:    addi sp, sp, 481263; RV64I-NEXT:    ret1264;1265; RV64IA-LABEL: atomicrmw_min_i8_monotonic:1266; RV64IA:       # %bb.0:1267; RV64IA-NEXT:    andi a2, a0, -41268; RV64IA-NEXT:    slli a0, a0, 31269; RV64IA-NEXT:    li a3, 2551270; RV64IA-NEXT:    slli a1, a1, 561271; RV64IA-NEXT:    andi a4, a0, 241272; RV64IA-NEXT:    sllw a3, a3, a01273; RV64IA-NEXT:    srai a1, a1, 561274; RV64IA-NEXT:    sllw a1, a1, a01275; RV64IA-NEXT:    xori a4, a4, 561276; RV64IA-NEXT:  .LBB11_1: # =>This Inner Loop Header: Depth=11277; RV64IA-NEXT:    lr.w a5, (a2)1278; RV64IA-NEXT:    and a7, a5, a31279; RV64IA-NEXT:    mv a6, a51280; RV64IA-NEXT:    sll a7, a7, a41281; RV64IA-NEXT:    sra a7, a7, a41282; RV64IA-NEXT:    bge a1, a7, .LBB11_31283; RV64IA-NEXT:  # %bb.2: # in Loop: Header=BB11_1 Depth=11284; RV64IA-NEXT:    xor a6, a5, a11285; RV64IA-NEXT:    and a6, a6, a31286; RV64IA-NEXT:    xor a6, a5, a61287; RV64IA-NEXT:  .LBB11_3: # in Loop: Header=BB11_1 Depth=11288; RV64IA-NEXT:    sc.w a6, a6, (a2)1289; RV64IA-NEXT:    bnez a6, .LBB11_11290; RV64IA-NEXT:  # %bb.4:1291; RV64IA-NEXT:    srlw a0, a5, a01292; RV64IA-NEXT:    slli a0, a0, 561293; RV64IA-NEXT:    srai a0, a0, 561294; RV64IA-NEXT:    ret1295;1296; RV64I-ZALRSC-LABEL: atomicrmw_min_i8_monotonic:1297; RV64I-ZALRSC:       # %bb.0:1298; RV64I-ZALRSC-NEXT:    andi a2, a0, -41299; RV64I-ZALRSC-NEXT:    slli a0, a0, 31300; RV64I-ZALRSC-NEXT:    li a3, 2551301; RV64I-ZALRSC-NEXT:    slli a1, a1, 561302; RV64I-ZALRSC-NEXT:    andi a4, a0, 241303; RV64I-ZALRSC-NEXT:    sllw a3, a3, a01304; RV64I-ZALRSC-NEXT:    srai a1, a1, 561305; RV64I-ZALRSC-NEXT:    sllw a1, a1, a01306; RV64I-ZALRSC-NEXT:    xori a4, a4, 561307; RV64I-ZALRSC-NEXT:  .LBB11_1: # =>This Inner Loop Header: Depth=11308; RV64I-ZALRSC-NEXT:    lr.w a5, (a2)1309; RV64I-ZALRSC-NEXT:    and a7, a5, a31310; RV64I-ZALRSC-NEXT:    mv a6, a51311; RV64I-ZALRSC-NEXT:    sll a7, a7, a41312; RV64I-ZALRSC-NEXT:    sra a7, a7, a41313; RV64I-ZALRSC-NEXT:    bge a1, a7, .LBB11_31314; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB11_1 Depth=11315; RV64I-ZALRSC-NEXT:    xor a6, a5, a11316; RV64I-ZALRSC-NEXT:    and a6, a6, a31317; RV64I-ZALRSC-NEXT:    xor a6, a5, a61318; RV64I-ZALRSC-NEXT:  .LBB11_3: # in Loop: Header=BB11_1 Depth=11319; RV64I-ZALRSC-NEXT:    sc.w a6, a6, (a2)1320; RV64I-ZALRSC-NEXT:    bnez a6, .LBB11_11321; RV64I-ZALRSC-NEXT:  # %bb.4:1322; RV64I-ZALRSC-NEXT:    srlw a0, a5, a01323; RV64I-ZALRSC-NEXT:    slli a0, a0, 561324; RV64I-ZALRSC-NEXT:    srai a0, a0, 561325; RV64I-ZALRSC-NEXT:    ret1326  %1 = atomicrmw min ptr %a, i8 %b monotonic1327  ret i8 %11328}1329 1330define signext i8 @atomicrmw_umax_i8_monotonic(ptr %a, i8 %b) nounwind {1331; RV32I-LABEL: atomicrmw_umax_i8_monotonic:1332; RV32I:       # %bb.0:1333; RV32I-NEXT:    addi sp, sp, -321334; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill1335; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill1336; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill1337; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill1338; RV32I-NEXT:    mv s0, a01339; RV32I-NEXT:    lbu a3, 0(a0)1340; RV32I-NEXT:    mv s1, a11341; RV32I-NEXT:    zext.b s2, a11342; RV32I-NEXT:    j .LBB12_21343; RV32I-NEXT:  .LBB12_1: # %atomicrmw.start1344; RV32I-NEXT:    # in Loop: Header=BB12_2 Depth=11345; RV32I-NEXT:    sb a3, 15(sp)1346; RV32I-NEXT:    addi a1, sp, 151347; RV32I-NEXT:    mv a0, s01348; RV32I-NEXT:    li a3, 01349; RV32I-NEXT:    li a4, 01350; RV32I-NEXT:    call __atomic_compare_exchange_11351; RV32I-NEXT:    lbu a3, 15(sp)1352; RV32I-NEXT:    bnez a0, .LBB12_41353; RV32I-NEXT:  .LBB12_2: # %atomicrmw.start1354; RV32I-NEXT:    # =>This Inner Loop Header: Depth=11355; RV32I-NEXT:    zext.b a0, a31356; RV32I-NEXT:    mv a2, a31357; RV32I-NEXT:    bltu s2, a0, .LBB12_11358; RV32I-NEXT:  # %bb.3: # %atomicrmw.start1359; RV32I-NEXT:    # in Loop: Header=BB12_2 Depth=11360; RV32I-NEXT:    mv a2, s11361; RV32I-NEXT:    j .LBB12_11362; RV32I-NEXT:  .LBB12_4: # %atomicrmw.end1363; RV32I-NEXT:    slli a0, a3, 241364; RV32I-NEXT:    srai a0, a0, 241365; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload1366; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload1367; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload1368; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload1369; RV32I-NEXT:    addi sp, sp, 321370; RV32I-NEXT:    ret1371;1372; RV32IA-LABEL: atomicrmw_umax_i8_monotonic:1373; RV32IA:       # %bb.0:1374; RV32IA-NEXT:    andi a2, a0, -41375; RV32IA-NEXT:    slli a0, a0, 31376; RV32IA-NEXT:    li a3, 2551377; RV32IA-NEXT:    zext.b a1, a11378; RV32IA-NEXT:    sll a3, a3, a01379; RV32IA-NEXT:    sll a1, a1, a01380; RV32IA-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=11381; RV32IA-NEXT:    lr.w a4, (a2)1382; RV32IA-NEXT:    and a6, a4, a31383; RV32IA-NEXT:    mv a5, a41384; RV32IA-NEXT:    bgeu a6, a1, .LBB12_31385; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB12_1 Depth=11386; RV32IA-NEXT:    xor a5, a4, a11387; RV32IA-NEXT:    and a5, a5, a31388; RV32IA-NEXT:    xor a5, a4, a51389; RV32IA-NEXT:  .LBB12_3: # in Loop: Header=BB12_1 Depth=11390; RV32IA-NEXT:    sc.w a5, a5, (a2)1391; RV32IA-NEXT:    bnez a5, .LBB12_11392; RV32IA-NEXT:  # %bb.4:1393; RV32IA-NEXT:    srl a0, a4, a01394; RV32IA-NEXT:    slli a0, a0, 241395; RV32IA-NEXT:    srai a0, a0, 241396; RV32IA-NEXT:    ret1397;1398; RV32I-ZALRSC-LABEL: atomicrmw_umax_i8_monotonic:1399; RV32I-ZALRSC:       # %bb.0:1400; RV32I-ZALRSC-NEXT:    andi a2, a0, -41401; RV32I-ZALRSC-NEXT:    slli a0, a0, 31402; RV32I-ZALRSC-NEXT:    li a3, 2551403; RV32I-ZALRSC-NEXT:    zext.b a1, a11404; RV32I-ZALRSC-NEXT:    sll a3, a3, a01405; RV32I-ZALRSC-NEXT:    sll a1, a1, a01406; RV32I-ZALRSC-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=11407; RV32I-ZALRSC-NEXT:    lr.w a4, (a2)1408; RV32I-ZALRSC-NEXT:    and a6, a4, a31409; RV32I-ZALRSC-NEXT:    mv a5, a41410; RV32I-ZALRSC-NEXT:    bgeu a6, a1, .LBB12_31411; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB12_1 Depth=11412; RV32I-ZALRSC-NEXT:    xor a5, a4, a11413; RV32I-ZALRSC-NEXT:    and a5, a5, a31414; RV32I-ZALRSC-NEXT:    xor a5, a4, a51415; RV32I-ZALRSC-NEXT:  .LBB12_3: # in Loop: Header=BB12_1 Depth=11416; RV32I-ZALRSC-NEXT:    sc.w a5, a5, (a2)1417; RV32I-ZALRSC-NEXT:    bnez a5, .LBB12_11418; RV32I-ZALRSC-NEXT:  # %bb.4:1419; RV32I-ZALRSC-NEXT:    srl a0, a4, a01420; RV32I-ZALRSC-NEXT:    slli a0, a0, 241421; RV32I-ZALRSC-NEXT:    srai a0, a0, 241422; RV32I-ZALRSC-NEXT:    ret1423;1424; RV64I-LABEL: atomicrmw_umax_i8_monotonic:1425; RV64I:       # %bb.0:1426; RV64I-NEXT:    addi sp, sp, -481427; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill1428; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill1429; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill1430; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill1431; RV64I-NEXT:    mv s0, a01432; RV64I-NEXT:    lbu a3, 0(a0)1433; RV64I-NEXT:    mv s1, a11434; RV64I-NEXT:    zext.b s2, a11435; RV64I-NEXT:    j .LBB12_21436; RV64I-NEXT:  .LBB12_1: # %atomicrmw.start1437; RV64I-NEXT:    # in Loop: Header=BB12_2 Depth=11438; RV64I-NEXT:    sb a3, 15(sp)1439; RV64I-NEXT:    addi a1, sp, 151440; RV64I-NEXT:    mv a0, s01441; RV64I-NEXT:    li a3, 01442; RV64I-NEXT:    li a4, 01443; RV64I-NEXT:    call __atomic_compare_exchange_11444; RV64I-NEXT:    lbu a3, 15(sp)1445; RV64I-NEXT:    bnez a0, .LBB12_41446; RV64I-NEXT:  .LBB12_2: # %atomicrmw.start1447; RV64I-NEXT:    # =>This Inner Loop Header: Depth=11448; RV64I-NEXT:    zext.b a0, a31449; RV64I-NEXT:    mv a2, a31450; RV64I-NEXT:    bltu s2, a0, .LBB12_11451; RV64I-NEXT:  # %bb.3: # %atomicrmw.start1452; RV64I-NEXT:    # in Loop: Header=BB12_2 Depth=11453; RV64I-NEXT:    mv a2, s11454; RV64I-NEXT:    j .LBB12_11455; RV64I-NEXT:  .LBB12_4: # %atomicrmw.end1456; RV64I-NEXT:    slli a0, a3, 561457; RV64I-NEXT:    srai a0, a0, 561458; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload1459; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload1460; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload1461; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload1462; RV64I-NEXT:    addi sp, sp, 481463; RV64I-NEXT:    ret1464;1465; RV64IA-LABEL: atomicrmw_umax_i8_monotonic:1466; RV64IA:       # %bb.0:1467; RV64IA-NEXT:    andi a2, a0, -41468; RV64IA-NEXT:    slli a0, a0, 31469; RV64IA-NEXT:    li a3, 2551470; RV64IA-NEXT:    zext.b a1, a11471; RV64IA-NEXT:    sllw a3, a3, a01472; RV64IA-NEXT:    sllw a1, a1, a01473; RV64IA-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=11474; RV64IA-NEXT:    lr.w a4, (a2)1475; RV64IA-NEXT:    and a6, a4, a31476; RV64IA-NEXT:    mv a5, a41477; RV64IA-NEXT:    bgeu a6, a1, .LBB12_31478; RV64IA-NEXT:  # %bb.2: # in Loop: Header=BB12_1 Depth=11479; RV64IA-NEXT:    xor a5, a4, a11480; RV64IA-NEXT:    and a5, a5, a31481; RV64IA-NEXT:    xor a5, a4, a51482; RV64IA-NEXT:  .LBB12_3: # in Loop: Header=BB12_1 Depth=11483; RV64IA-NEXT:    sc.w a5, a5, (a2)1484; RV64IA-NEXT:    bnez a5, .LBB12_11485; RV64IA-NEXT:  # %bb.4:1486; RV64IA-NEXT:    srlw a0, a4, a01487; RV64IA-NEXT:    slli a0, a0, 561488; RV64IA-NEXT:    srai a0, a0, 561489; RV64IA-NEXT:    ret1490;1491; RV64I-ZALRSC-LABEL: atomicrmw_umax_i8_monotonic:1492; RV64I-ZALRSC:       # %bb.0:1493; RV64I-ZALRSC-NEXT:    andi a2, a0, -41494; RV64I-ZALRSC-NEXT:    slli a0, a0, 31495; RV64I-ZALRSC-NEXT:    li a3, 2551496; RV64I-ZALRSC-NEXT:    zext.b a1, a11497; RV64I-ZALRSC-NEXT:    sllw a3, a3, a01498; RV64I-ZALRSC-NEXT:    sllw a1, a1, a01499; RV64I-ZALRSC-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=11500; RV64I-ZALRSC-NEXT:    lr.w a4, (a2)1501; RV64I-ZALRSC-NEXT:    and a6, a4, a31502; RV64I-ZALRSC-NEXT:    mv a5, a41503; RV64I-ZALRSC-NEXT:    bgeu a6, a1, .LBB12_31504; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB12_1 Depth=11505; RV64I-ZALRSC-NEXT:    xor a5, a4, a11506; RV64I-ZALRSC-NEXT:    and a5, a5, a31507; RV64I-ZALRSC-NEXT:    xor a5, a4, a51508; RV64I-ZALRSC-NEXT:  .LBB12_3: # in Loop: Header=BB12_1 Depth=11509; RV64I-ZALRSC-NEXT:    sc.w a5, a5, (a2)1510; RV64I-ZALRSC-NEXT:    bnez a5, .LBB12_11511; RV64I-ZALRSC-NEXT:  # %bb.4:1512; RV64I-ZALRSC-NEXT:    srlw a0, a4, a01513; RV64I-ZALRSC-NEXT:    slli a0, a0, 561514; RV64I-ZALRSC-NEXT:    srai a0, a0, 561515; RV64I-ZALRSC-NEXT:    ret1516  %1 = atomicrmw umax ptr %a, i8 %b monotonic1517  ret i8 %11518}1519 1520define signext i8 @atomicrmw_umin_i8_monotonic(ptr %a, i8 %b) nounwind {1521; RV32I-LABEL: atomicrmw_umin_i8_monotonic:1522; RV32I:       # %bb.0:1523; RV32I-NEXT:    addi sp, sp, -321524; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill1525; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill1526; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill1527; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill1528; RV32I-NEXT:    mv s0, a01529; RV32I-NEXT:    lbu a3, 0(a0)1530; RV32I-NEXT:    mv s1, a11531; RV32I-NEXT:    zext.b s2, a11532; RV32I-NEXT:    j .LBB13_21533; RV32I-NEXT:  .LBB13_1: # %atomicrmw.start1534; RV32I-NEXT:    # in Loop: Header=BB13_2 Depth=11535; RV32I-NEXT:    sb a3, 15(sp)1536; RV32I-NEXT:    addi a1, sp, 151537; RV32I-NEXT:    mv a0, s01538; RV32I-NEXT:    li a3, 01539; RV32I-NEXT:    li a4, 01540; RV32I-NEXT:    call __atomic_compare_exchange_11541; RV32I-NEXT:    lbu a3, 15(sp)1542; RV32I-NEXT:    bnez a0, .LBB13_41543; RV32I-NEXT:  .LBB13_2: # %atomicrmw.start1544; RV32I-NEXT:    # =>This Inner Loop Header: Depth=11545; RV32I-NEXT:    zext.b a0, a31546; RV32I-NEXT:    mv a2, a31547; RV32I-NEXT:    bgeu s2, a0, .LBB13_11548; RV32I-NEXT:  # %bb.3: # %atomicrmw.start1549; RV32I-NEXT:    # in Loop: Header=BB13_2 Depth=11550; RV32I-NEXT:    mv a2, s11551; RV32I-NEXT:    j .LBB13_11552; RV32I-NEXT:  .LBB13_4: # %atomicrmw.end1553; RV32I-NEXT:    slli a0, a3, 241554; RV32I-NEXT:    srai a0, a0, 241555; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload1556; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload1557; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload1558; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload1559; RV32I-NEXT:    addi sp, sp, 321560; RV32I-NEXT:    ret1561;1562; RV32IA-LABEL: atomicrmw_umin_i8_monotonic:1563; RV32IA:       # %bb.0:1564; RV32IA-NEXT:    andi a2, a0, -41565; RV32IA-NEXT:    slli a0, a0, 31566; RV32IA-NEXT:    li a3, 2551567; RV32IA-NEXT:    zext.b a1, a11568; RV32IA-NEXT:    sll a3, a3, a01569; RV32IA-NEXT:    sll a1, a1, a01570; RV32IA-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=11571; RV32IA-NEXT:    lr.w a4, (a2)1572; RV32IA-NEXT:    and a6, a4, a31573; RV32IA-NEXT:    mv a5, a41574; RV32IA-NEXT:    bgeu a1, a6, .LBB13_31575; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB13_1 Depth=11576; RV32IA-NEXT:    xor a5, a4, a11577; RV32IA-NEXT:    and a5, a5, a31578; RV32IA-NEXT:    xor a5, a4, a51579; RV32IA-NEXT:  .LBB13_3: # in Loop: Header=BB13_1 Depth=11580; RV32IA-NEXT:    sc.w a5, a5, (a2)1581; RV32IA-NEXT:    bnez a5, .LBB13_11582; RV32IA-NEXT:  # %bb.4:1583; RV32IA-NEXT:    srl a0, a4, a01584; RV32IA-NEXT:    slli a0, a0, 241585; RV32IA-NEXT:    srai a0, a0, 241586; RV32IA-NEXT:    ret1587;1588; RV32I-ZALRSC-LABEL: atomicrmw_umin_i8_monotonic:1589; RV32I-ZALRSC:       # %bb.0:1590; RV32I-ZALRSC-NEXT:    andi a2, a0, -41591; RV32I-ZALRSC-NEXT:    slli a0, a0, 31592; RV32I-ZALRSC-NEXT:    li a3, 2551593; RV32I-ZALRSC-NEXT:    zext.b a1, a11594; RV32I-ZALRSC-NEXT:    sll a3, a3, a01595; RV32I-ZALRSC-NEXT:    sll a1, a1, a01596; RV32I-ZALRSC-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=11597; RV32I-ZALRSC-NEXT:    lr.w a4, (a2)1598; RV32I-ZALRSC-NEXT:    and a6, a4, a31599; RV32I-ZALRSC-NEXT:    mv a5, a41600; RV32I-ZALRSC-NEXT:    bgeu a1, a6, .LBB13_31601; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB13_1 Depth=11602; RV32I-ZALRSC-NEXT:    xor a5, a4, a11603; RV32I-ZALRSC-NEXT:    and a5, a5, a31604; RV32I-ZALRSC-NEXT:    xor a5, a4, a51605; RV32I-ZALRSC-NEXT:  .LBB13_3: # in Loop: Header=BB13_1 Depth=11606; RV32I-ZALRSC-NEXT:    sc.w a5, a5, (a2)1607; RV32I-ZALRSC-NEXT:    bnez a5, .LBB13_11608; RV32I-ZALRSC-NEXT:  # %bb.4:1609; RV32I-ZALRSC-NEXT:    srl a0, a4, a01610; RV32I-ZALRSC-NEXT:    slli a0, a0, 241611; RV32I-ZALRSC-NEXT:    srai a0, a0, 241612; RV32I-ZALRSC-NEXT:    ret1613;1614; RV64I-LABEL: atomicrmw_umin_i8_monotonic:1615; RV64I:       # %bb.0:1616; RV64I-NEXT:    addi sp, sp, -481617; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill1618; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill1619; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill1620; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill1621; RV64I-NEXT:    mv s0, a01622; RV64I-NEXT:    lbu a3, 0(a0)1623; RV64I-NEXT:    mv s1, a11624; RV64I-NEXT:    zext.b s2, a11625; RV64I-NEXT:    j .LBB13_21626; RV64I-NEXT:  .LBB13_1: # %atomicrmw.start1627; RV64I-NEXT:    # in Loop: Header=BB13_2 Depth=11628; RV64I-NEXT:    sb a3, 15(sp)1629; RV64I-NEXT:    addi a1, sp, 151630; RV64I-NEXT:    mv a0, s01631; RV64I-NEXT:    li a3, 01632; RV64I-NEXT:    li a4, 01633; RV64I-NEXT:    call __atomic_compare_exchange_11634; RV64I-NEXT:    lbu a3, 15(sp)1635; RV64I-NEXT:    bnez a0, .LBB13_41636; RV64I-NEXT:  .LBB13_2: # %atomicrmw.start1637; RV64I-NEXT:    # =>This Inner Loop Header: Depth=11638; RV64I-NEXT:    zext.b a0, a31639; RV64I-NEXT:    mv a2, a31640; RV64I-NEXT:    bgeu s2, a0, .LBB13_11641; RV64I-NEXT:  # %bb.3: # %atomicrmw.start1642; RV64I-NEXT:    # in Loop: Header=BB13_2 Depth=11643; RV64I-NEXT:    mv a2, s11644; RV64I-NEXT:    j .LBB13_11645; RV64I-NEXT:  .LBB13_4: # %atomicrmw.end1646; RV64I-NEXT:    slli a0, a3, 561647; RV64I-NEXT:    srai a0, a0, 561648; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload1649; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload1650; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload1651; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload1652; RV64I-NEXT:    addi sp, sp, 481653; RV64I-NEXT:    ret1654;1655; RV64IA-LABEL: atomicrmw_umin_i8_monotonic:1656; RV64IA:       # %bb.0:1657; RV64IA-NEXT:    andi a2, a0, -41658; RV64IA-NEXT:    slli a0, a0, 31659; RV64IA-NEXT:    li a3, 2551660; RV64IA-NEXT:    zext.b a1, a11661; RV64IA-NEXT:    sllw a3, a3, a01662; RV64IA-NEXT:    sllw a1, a1, a01663; RV64IA-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=11664; RV64IA-NEXT:    lr.w a4, (a2)1665; RV64IA-NEXT:    and a6, a4, a31666; RV64IA-NEXT:    mv a5, a41667; RV64IA-NEXT:    bgeu a1, a6, .LBB13_31668; RV64IA-NEXT:  # %bb.2: # in Loop: Header=BB13_1 Depth=11669; RV64IA-NEXT:    xor a5, a4, a11670; RV64IA-NEXT:    and a5, a5, a31671; RV64IA-NEXT:    xor a5, a4, a51672; RV64IA-NEXT:  .LBB13_3: # in Loop: Header=BB13_1 Depth=11673; RV64IA-NEXT:    sc.w a5, a5, (a2)1674; RV64IA-NEXT:    bnez a5, .LBB13_11675; RV64IA-NEXT:  # %bb.4:1676; RV64IA-NEXT:    srlw a0, a4, a01677; RV64IA-NEXT:    slli a0, a0, 561678; RV64IA-NEXT:    srai a0, a0, 561679; RV64IA-NEXT:    ret1680;1681; RV64I-ZALRSC-LABEL: atomicrmw_umin_i8_monotonic:1682; RV64I-ZALRSC:       # %bb.0:1683; RV64I-ZALRSC-NEXT:    andi a2, a0, -41684; RV64I-ZALRSC-NEXT:    slli a0, a0, 31685; RV64I-ZALRSC-NEXT:    li a3, 2551686; RV64I-ZALRSC-NEXT:    zext.b a1, a11687; RV64I-ZALRSC-NEXT:    sllw a3, a3, a01688; RV64I-ZALRSC-NEXT:    sllw a1, a1, a01689; RV64I-ZALRSC-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=11690; RV64I-ZALRSC-NEXT:    lr.w a4, (a2)1691; RV64I-ZALRSC-NEXT:    and a6, a4, a31692; RV64I-ZALRSC-NEXT:    mv a5, a41693; RV64I-ZALRSC-NEXT:    bgeu a1, a6, .LBB13_31694; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB13_1 Depth=11695; RV64I-ZALRSC-NEXT:    xor a5, a4, a11696; RV64I-ZALRSC-NEXT:    and a5, a5, a31697; RV64I-ZALRSC-NEXT:    xor a5, a4, a51698; RV64I-ZALRSC-NEXT:  .LBB13_3: # in Loop: Header=BB13_1 Depth=11699; RV64I-ZALRSC-NEXT:    sc.w a5, a5, (a2)1700; RV64I-ZALRSC-NEXT:    bnez a5, .LBB13_11701; RV64I-ZALRSC-NEXT:  # %bb.4:1702; RV64I-ZALRSC-NEXT:    srlw a0, a4, a01703; RV64I-ZALRSC-NEXT:    slli a0, a0, 561704; RV64I-ZALRSC-NEXT:    srai a0, a0, 561705; RV64I-ZALRSC-NEXT:    ret1706  %1 = atomicrmw umin ptr %a, i8 %b monotonic1707  ret i8 %11708}1709 1710define signext i16 @atomicrmw_xchg_i16_monotonic(ptr %a, i16 %b) nounwind {1711; RV32I-LABEL: atomicrmw_xchg_i16_monotonic:1712; RV32I:       # %bb.0:1713; RV32I-NEXT:    addi sp, sp, -161714; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1715; RV32I-NEXT:    li a2, 01716; RV32I-NEXT:    call __atomic_exchange_21717; RV32I-NEXT:    slli a0, a0, 161718; RV32I-NEXT:    srai a0, a0, 161719; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1720; RV32I-NEXT:    addi sp, sp, 161721; RV32I-NEXT:    ret1722;1723; RV32IA-LABEL: atomicrmw_xchg_i16_monotonic:1724; RV32IA:       # %bb.0:1725; RV32IA-NEXT:    andi a2, a0, -41726; RV32IA-NEXT:    slli a0, a0, 31727; RV32IA-NEXT:    lui a3, 161728; RV32IA-NEXT:    addi a3, a3, -11729; RV32IA-NEXT:    sll a4, a3, a01730; RV32IA-NEXT:    and a1, a1, a31731; RV32IA-NEXT:    sll a1, a1, a01732; RV32IA-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=11733; RV32IA-NEXT:    lr.w a3, (a2)1734; RV32IA-NEXT:    mv a5, a11735; RV32IA-NEXT:    xor a5, a3, a51736; RV32IA-NEXT:    and a5, a5, a41737; RV32IA-NEXT:    xor a5, a3, a51738; RV32IA-NEXT:    sc.w a5, a5, (a2)1739; RV32IA-NEXT:    bnez a5, .LBB14_11740; RV32IA-NEXT:  # %bb.2:1741; RV32IA-NEXT:    srl a0, a3, a01742; RV32IA-NEXT:    slli a0, a0, 161743; RV32IA-NEXT:    srai a0, a0, 161744; RV32IA-NEXT:    ret1745;1746; RV32I-ZALRSC-LABEL: atomicrmw_xchg_i16_monotonic:1747; RV32I-ZALRSC:       # %bb.0:1748; RV32I-ZALRSC-NEXT:    andi a2, a0, -41749; RV32I-ZALRSC-NEXT:    slli a0, a0, 31750; RV32I-ZALRSC-NEXT:    lui a3, 161751; RV32I-ZALRSC-NEXT:    addi a3, a3, -11752; RV32I-ZALRSC-NEXT:    sll a4, a3, a01753; RV32I-ZALRSC-NEXT:    and a1, a1, a31754; RV32I-ZALRSC-NEXT:    sll a1, a1, a01755; RV32I-ZALRSC-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=11756; RV32I-ZALRSC-NEXT:    lr.w a3, (a2)1757; RV32I-ZALRSC-NEXT:    mv a5, a11758; RV32I-ZALRSC-NEXT:    xor a5, a3, a51759; RV32I-ZALRSC-NEXT:    and a5, a5, a41760; RV32I-ZALRSC-NEXT:    xor a5, a3, a51761; RV32I-ZALRSC-NEXT:    sc.w a5, a5, (a2)1762; RV32I-ZALRSC-NEXT:    bnez a5, .LBB14_11763; RV32I-ZALRSC-NEXT:  # %bb.2:1764; RV32I-ZALRSC-NEXT:    srl a0, a3, a01765; RV32I-ZALRSC-NEXT:    slli a0, a0, 161766; RV32I-ZALRSC-NEXT:    srai a0, a0, 161767; RV32I-ZALRSC-NEXT:    ret1768;1769; RV64I-LABEL: atomicrmw_xchg_i16_monotonic:1770; RV64I:       # %bb.0:1771; RV64I-NEXT:    addi sp, sp, -161772; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1773; RV64I-NEXT:    li a2, 01774; RV64I-NEXT:    call __atomic_exchange_21775; RV64I-NEXT:    slli a0, a0, 481776; RV64I-NEXT:    srai a0, a0, 481777; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1778; RV64I-NEXT:    addi sp, sp, 161779; RV64I-NEXT:    ret1780;1781; RV64IA-LABEL: atomicrmw_xchg_i16_monotonic:1782; RV64IA:       # %bb.0:1783; RV64IA-NEXT:    andi a2, a0, -41784; RV64IA-NEXT:    slli a0, a0, 31785; RV64IA-NEXT:    lui a3, 161786; RV64IA-NEXT:    addi a3, a3, -11787; RV64IA-NEXT:    sllw a4, a3, a01788; RV64IA-NEXT:    and a1, a1, a31789; RV64IA-NEXT:    sllw a1, a1, a01790; RV64IA-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=11791; RV64IA-NEXT:    lr.w a3, (a2)1792; RV64IA-NEXT:    mv a5, a11793; RV64IA-NEXT:    xor a5, a3, a51794; RV64IA-NEXT:    and a5, a5, a41795; RV64IA-NEXT:    xor a5, a3, a51796; RV64IA-NEXT:    sc.w a5, a5, (a2)1797; RV64IA-NEXT:    bnez a5, .LBB14_11798; RV64IA-NEXT:  # %bb.2:1799; RV64IA-NEXT:    srlw a0, a3, a01800; RV64IA-NEXT:    slli a0, a0, 481801; RV64IA-NEXT:    srai a0, a0, 481802; RV64IA-NEXT:    ret1803;1804; RV64I-ZALRSC-LABEL: atomicrmw_xchg_i16_monotonic:1805; RV64I-ZALRSC:       # %bb.0:1806; RV64I-ZALRSC-NEXT:    andi a2, a0, -41807; RV64I-ZALRSC-NEXT:    slli a0, a0, 31808; RV64I-ZALRSC-NEXT:    lui a3, 161809; RV64I-ZALRSC-NEXT:    addi a3, a3, -11810; RV64I-ZALRSC-NEXT:    sllw a4, a3, a01811; RV64I-ZALRSC-NEXT:    and a1, a1, a31812; RV64I-ZALRSC-NEXT:    sllw a1, a1, a01813; RV64I-ZALRSC-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=11814; RV64I-ZALRSC-NEXT:    lr.w a3, (a2)1815; RV64I-ZALRSC-NEXT:    mv a5, a11816; RV64I-ZALRSC-NEXT:    xor a5, a3, a51817; RV64I-ZALRSC-NEXT:    and a5, a5, a41818; RV64I-ZALRSC-NEXT:    xor a5, a3, a51819; RV64I-ZALRSC-NEXT:    sc.w a5, a5, (a2)1820; RV64I-ZALRSC-NEXT:    bnez a5, .LBB14_11821; RV64I-ZALRSC-NEXT:  # %bb.2:1822; RV64I-ZALRSC-NEXT:    srlw a0, a3, a01823; RV64I-ZALRSC-NEXT:    slli a0, a0, 481824; RV64I-ZALRSC-NEXT:    srai a0, a0, 481825; RV64I-ZALRSC-NEXT:    ret1826  %1 = atomicrmw xchg ptr %a, i16 %b monotonic1827  ret i16 %11828}1829 1830define signext i16 @atomicrmw_add_i16_monotonic(ptr %a, i16 %b) nounwind {1831; RV32I-LABEL: atomicrmw_add_i16_monotonic:1832; RV32I:       # %bb.0:1833; RV32I-NEXT:    addi sp, sp, -161834; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1835; RV32I-NEXT:    li a2, 01836; RV32I-NEXT:    call __atomic_fetch_add_21837; RV32I-NEXT:    slli a0, a0, 161838; RV32I-NEXT:    srai a0, a0, 161839; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1840; RV32I-NEXT:    addi sp, sp, 161841; RV32I-NEXT:    ret1842;1843; RV32IA-LABEL: atomicrmw_add_i16_monotonic:1844; RV32IA:       # %bb.0:1845; RV32IA-NEXT:    andi a2, a0, -41846; RV32IA-NEXT:    slli a0, a0, 31847; RV32IA-NEXT:    lui a3, 161848; RV32IA-NEXT:    addi a3, a3, -11849; RV32IA-NEXT:    sll a4, a3, a01850; RV32IA-NEXT:    and a1, a1, a31851; RV32IA-NEXT:    sll a1, a1, a01852; RV32IA-NEXT:  .LBB15_1: # =>This Inner Loop Header: Depth=11853; RV32IA-NEXT:    lr.w a3, (a2)1854; RV32IA-NEXT:    add a5, a3, a11855; RV32IA-NEXT:    xor a5, a3, a51856; RV32IA-NEXT:    and a5, a5, a41857; RV32IA-NEXT:    xor a5, a3, a51858; RV32IA-NEXT:    sc.w a5, a5, (a2)1859; RV32IA-NEXT:    bnez a5, .LBB15_11860; RV32IA-NEXT:  # %bb.2:1861; RV32IA-NEXT:    srl a0, a3, a01862; RV32IA-NEXT:    slli a0, a0, 161863; RV32IA-NEXT:    srai a0, a0, 161864; RV32IA-NEXT:    ret1865;1866; RV32I-ZALRSC-LABEL: atomicrmw_add_i16_monotonic:1867; RV32I-ZALRSC:       # %bb.0:1868; RV32I-ZALRSC-NEXT:    andi a2, a0, -41869; RV32I-ZALRSC-NEXT:    slli a0, a0, 31870; RV32I-ZALRSC-NEXT:    lui a3, 161871; RV32I-ZALRSC-NEXT:    addi a3, a3, -11872; RV32I-ZALRSC-NEXT:    sll a4, a3, a01873; RV32I-ZALRSC-NEXT:    and a1, a1, a31874; RV32I-ZALRSC-NEXT:    sll a1, a1, a01875; RV32I-ZALRSC-NEXT:  .LBB15_1: # =>This Inner Loop Header: Depth=11876; RV32I-ZALRSC-NEXT:    lr.w a3, (a2)1877; RV32I-ZALRSC-NEXT:    add a5, a3, a11878; RV32I-ZALRSC-NEXT:    xor a5, a3, a51879; RV32I-ZALRSC-NEXT:    and a5, a5, a41880; RV32I-ZALRSC-NEXT:    xor a5, a3, a51881; RV32I-ZALRSC-NEXT:    sc.w a5, a5, (a2)1882; RV32I-ZALRSC-NEXT:    bnez a5, .LBB15_11883; RV32I-ZALRSC-NEXT:  # %bb.2:1884; RV32I-ZALRSC-NEXT:    srl a0, a3, a01885; RV32I-ZALRSC-NEXT:    slli a0, a0, 161886; RV32I-ZALRSC-NEXT:    srai a0, a0, 161887; RV32I-ZALRSC-NEXT:    ret1888;1889; RV64I-LABEL: atomicrmw_add_i16_monotonic:1890; RV64I:       # %bb.0:1891; RV64I-NEXT:    addi sp, sp, -161892; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1893; RV64I-NEXT:    li a2, 01894; RV64I-NEXT:    call __atomic_fetch_add_21895; RV64I-NEXT:    slli a0, a0, 481896; RV64I-NEXT:    srai a0, a0, 481897; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1898; RV64I-NEXT:    addi sp, sp, 161899; RV64I-NEXT:    ret1900;1901; RV64IA-LABEL: atomicrmw_add_i16_monotonic:1902; RV64IA:       # %bb.0:1903; RV64IA-NEXT:    andi a2, a0, -41904; RV64IA-NEXT:    slli a0, a0, 31905; RV64IA-NEXT:    lui a3, 161906; RV64IA-NEXT:    addi a3, a3, -11907; RV64IA-NEXT:    sllw a4, a3, a01908; RV64IA-NEXT:    and a1, a1, a31909; RV64IA-NEXT:    sllw a1, a1, a01910; RV64IA-NEXT:  .LBB15_1: # =>This Inner Loop Header: Depth=11911; RV64IA-NEXT:    lr.w a3, (a2)1912; RV64IA-NEXT:    add a5, a3, a11913; RV64IA-NEXT:    xor a5, a3, a51914; RV64IA-NEXT:    and a5, a5, a41915; RV64IA-NEXT:    xor a5, a3, a51916; RV64IA-NEXT:    sc.w a5, a5, (a2)1917; RV64IA-NEXT:    bnez a5, .LBB15_11918; RV64IA-NEXT:  # %bb.2:1919; RV64IA-NEXT:    srlw a0, a3, a01920; RV64IA-NEXT:    slli a0, a0, 481921; RV64IA-NEXT:    srai a0, a0, 481922; RV64IA-NEXT:    ret1923;1924; RV64I-ZALRSC-LABEL: atomicrmw_add_i16_monotonic:1925; RV64I-ZALRSC:       # %bb.0:1926; RV64I-ZALRSC-NEXT:    andi a2, a0, -41927; RV64I-ZALRSC-NEXT:    slli a0, a0, 31928; RV64I-ZALRSC-NEXT:    lui a3, 161929; RV64I-ZALRSC-NEXT:    addi a3, a3, -11930; RV64I-ZALRSC-NEXT:    sllw a4, a3, a01931; RV64I-ZALRSC-NEXT:    and a1, a1, a31932; RV64I-ZALRSC-NEXT:    sllw a1, a1, a01933; RV64I-ZALRSC-NEXT:  .LBB15_1: # =>This Inner Loop Header: Depth=11934; RV64I-ZALRSC-NEXT:    lr.w a3, (a2)1935; RV64I-ZALRSC-NEXT:    add a5, a3, a11936; RV64I-ZALRSC-NEXT:    xor a5, a3, a51937; RV64I-ZALRSC-NEXT:    and a5, a5, a41938; RV64I-ZALRSC-NEXT:    xor a5, a3, a51939; RV64I-ZALRSC-NEXT:    sc.w a5, a5, (a2)1940; RV64I-ZALRSC-NEXT:    bnez a5, .LBB15_11941; RV64I-ZALRSC-NEXT:  # %bb.2:1942; RV64I-ZALRSC-NEXT:    srlw a0, a3, a01943; RV64I-ZALRSC-NEXT:    slli a0, a0, 481944; RV64I-ZALRSC-NEXT:    srai a0, a0, 481945; RV64I-ZALRSC-NEXT:    ret1946  %1 = atomicrmw add ptr %a, i16 %b monotonic1947  ret i16 %11948}1949 1950define signext i16 @atomicrmw_sub_i16_monotonic(ptr %a, i16 %b) nounwind {1951; RV32I-LABEL: atomicrmw_sub_i16_monotonic:1952; RV32I:       # %bb.0:1953; RV32I-NEXT:    addi sp, sp, -161954; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1955; RV32I-NEXT:    li a2, 01956; RV32I-NEXT:    call __atomic_fetch_sub_21957; RV32I-NEXT:    slli a0, a0, 161958; RV32I-NEXT:    srai a0, a0, 161959; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1960; RV32I-NEXT:    addi sp, sp, 161961; RV32I-NEXT:    ret1962;1963; RV32IA-LABEL: atomicrmw_sub_i16_monotonic:1964; RV32IA:       # %bb.0:1965; RV32IA-NEXT:    andi a2, a0, -41966; RV32IA-NEXT:    slli a0, a0, 31967; RV32IA-NEXT:    lui a3, 161968; RV32IA-NEXT:    addi a3, a3, -11969; RV32IA-NEXT:    sll a4, a3, a01970; RV32IA-NEXT:    and a1, a1, a31971; RV32IA-NEXT:    sll a1, a1, a01972; RV32IA-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=11973; RV32IA-NEXT:    lr.w a3, (a2)1974; RV32IA-NEXT:    sub a5, a3, a11975; RV32IA-NEXT:    xor a5, a3, a51976; RV32IA-NEXT:    and a5, a5, a41977; RV32IA-NEXT:    xor a5, a3, a51978; RV32IA-NEXT:    sc.w a5, a5, (a2)1979; RV32IA-NEXT:    bnez a5, .LBB16_11980; RV32IA-NEXT:  # %bb.2:1981; RV32IA-NEXT:    srl a0, a3, a01982; RV32IA-NEXT:    slli a0, a0, 161983; RV32IA-NEXT:    srai a0, a0, 161984; RV32IA-NEXT:    ret1985;1986; RV32I-ZALRSC-LABEL: atomicrmw_sub_i16_monotonic:1987; RV32I-ZALRSC:       # %bb.0:1988; RV32I-ZALRSC-NEXT:    andi a2, a0, -41989; RV32I-ZALRSC-NEXT:    slli a0, a0, 31990; RV32I-ZALRSC-NEXT:    lui a3, 161991; RV32I-ZALRSC-NEXT:    addi a3, a3, -11992; RV32I-ZALRSC-NEXT:    sll a4, a3, a01993; RV32I-ZALRSC-NEXT:    and a1, a1, a31994; RV32I-ZALRSC-NEXT:    sll a1, a1, a01995; RV32I-ZALRSC-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=11996; RV32I-ZALRSC-NEXT:    lr.w a3, (a2)1997; RV32I-ZALRSC-NEXT:    sub a5, a3, a11998; RV32I-ZALRSC-NEXT:    xor a5, a3, a51999; RV32I-ZALRSC-NEXT:    and a5, a5, a42000; RV32I-ZALRSC-NEXT:    xor a5, a3, a52001; RV32I-ZALRSC-NEXT:    sc.w a5, a5, (a2)2002; RV32I-ZALRSC-NEXT:    bnez a5, .LBB16_12003; RV32I-ZALRSC-NEXT:  # %bb.2:2004; RV32I-ZALRSC-NEXT:    srl a0, a3, a02005; RV32I-ZALRSC-NEXT:    slli a0, a0, 162006; RV32I-ZALRSC-NEXT:    srai a0, a0, 162007; RV32I-ZALRSC-NEXT:    ret2008;2009; RV64I-LABEL: atomicrmw_sub_i16_monotonic:2010; RV64I:       # %bb.0:2011; RV64I-NEXT:    addi sp, sp, -162012; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2013; RV64I-NEXT:    li a2, 02014; RV64I-NEXT:    call __atomic_fetch_sub_22015; RV64I-NEXT:    slli a0, a0, 482016; RV64I-NEXT:    srai a0, a0, 482017; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2018; RV64I-NEXT:    addi sp, sp, 162019; RV64I-NEXT:    ret2020;2021; RV64IA-LABEL: atomicrmw_sub_i16_monotonic:2022; RV64IA:       # %bb.0:2023; RV64IA-NEXT:    andi a2, a0, -42024; RV64IA-NEXT:    slli a0, a0, 32025; RV64IA-NEXT:    lui a3, 162026; RV64IA-NEXT:    addi a3, a3, -12027; RV64IA-NEXT:    sllw a4, a3, a02028; RV64IA-NEXT:    and a1, a1, a32029; RV64IA-NEXT:    sllw a1, a1, a02030; RV64IA-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=12031; RV64IA-NEXT:    lr.w a3, (a2)2032; RV64IA-NEXT:    sub a5, a3, a12033; RV64IA-NEXT:    xor a5, a3, a52034; RV64IA-NEXT:    and a5, a5, a42035; RV64IA-NEXT:    xor a5, a3, a52036; RV64IA-NEXT:    sc.w a5, a5, (a2)2037; RV64IA-NEXT:    bnez a5, .LBB16_12038; RV64IA-NEXT:  # %bb.2:2039; RV64IA-NEXT:    srlw a0, a3, a02040; RV64IA-NEXT:    slli a0, a0, 482041; RV64IA-NEXT:    srai a0, a0, 482042; RV64IA-NEXT:    ret2043;2044; RV64I-ZALRSC-LABEL: atomicrmw_sub_i16_monotonic:2045; RV64I-ZALRSC:       # %bb.0:2046; RV64I-ZALRSC-NEXT:    andi a2, a0, -42047; RV64I-ZALRSC-NEXT:    slli a0, a0, 32048; RV64I-ZALRSC-NEXT:    lui a3, 162049; RV64I-ZALRSC-NEXT:    addi a3, a3, -12050; RV64I-ZALRSC-NEXT:    sllw a4, a3, a02051; RV64I-ZALRSC-NEXT:    and a1, a1, a32052; RV64I-ZALRSC-NEXT:    sllw a1, a1, a02053; RV64I-ZALRSC-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=12054; RV64I-ZALRSC-NEXT:    lr.w a3, (a2)2055; RV64I-ZALRSC-NEXT:    sub a5, a3, a12056; RV64I-ZALRSC-NEXT:    xor a5, a3, a52057; RV64I-ZALRSC-NEXT:    and a5, a5, a42058; RV64I-ZALRSC-NEXT:    xor a5, a3, a52059; RV64I-ZALRSC-NEXT:    sc.w a5, a5, (a2)2060; RV64I-ZALRSC-NEXT:    bnez a5, .LBB16_12061; RV64I-ZALRSC-NEXT:  # %bb.2:2062; RV64I-ZALRSC-NEXT:    srlw a0, a3, a02063; RV64I-ZALRSC-NEXT:    slli a0, a0, 482064; RV64I-ZALRSC-NEXT:    srai a0, a0, 482065; RV64I-ZALRSC-NEXT:    ret2066  %1 = atomicrmw sub ptr %a, i16 %b monotonic2067  ret i16 %12068}2069 2070define signext i16 @atomicrmw_and_i16_monotonic(ptr %a, i16 %b) nounwind {2071; RV32I-LABEL: atomicrmw_and_i16_monotonic:2072; RV32I:       # %bb.0:2073; RV32I-NEXT:    addi sp, sp, -162074; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2075; RV32I-NEXT:    li a2, 02076; RV32I-NEXT:    call __atomic_fetch_and_22077; RV32I-NEXT:    slli a0, a0, 162078; RV32I-NEXT:    srai a0, a0, 162079; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2080; RV32I-NEXT:    addi sp, sp, 162081; RV32I-NEXT:    ret2082;2083; RV32IA-LABEL: atomicrmw_and_i16_monotonic:2084; RV32IA:       # %bb.0:2085; RV32IA-NEXT:    andi a2, a0, -42086; RV32IA-NEXT:    slli a0, a0, 32087; RV32IA-NEXT:    lui a3, 162088; RV32IA-NEXT:    addi a3, a3, -12089; RV32IA-NEXT:    sll a4, a3, a02090; RV32IA-NEXT:    and a1, a1, a32091; RV32IA-NEXT:    not a3, a42092; RV32IA-NEXT:    sll a1, a1, a02093; RV32IA-NEXT:    or a1, a1, a32094; RV32IA-NEXT:    amoand.w a1, a1, (a2)2095; RV32IA-NEXT:    srl a0, a1, a02096; RV32IA-NEXT:    slli a0, a0, 162097; RV32IA-NEXT:    srai a0, a0, 162098; RV32IA-NEXT:    ret2099;2100; RV32I-ZALRSC-LABEL: atomicrmw_and_i16_monotonic:2101; RV32I-ZALRSC:       # %bb.0:2102; RV32I-ZALRSC-NEXT:    andi a2, a0, -42103; RV32I-ZALRSC-NEXT:    slli a0, a0, 32104; RV32I-ZALRSC-NEXT:    lui a3, 162105; RV32I-ZALRSC-NEXT:    addi a3, a3, -12106; RV32I-ZALRSC-NEXT:    sll a4, a3, a02107; RV32I-ZALRSC-NEXT:    and a1, a1, a32108; RV32I-ZALRSC-NEXT:    not a3, a42109; RV32I-ZALRSC-NEXT:    sll a1, a1, a02110; RV32I-ZALRSC-NEXT:    or a1, a1, a32111; RV32I-ZALRSC-NEXT:  .LBB17_1: # =>This Inner Loop Header: Depth=12112; RV32I-ZALRSC-NEXT:    lr.w a3, (a2)2113; RV32I-ZALRSC-NEXT:    and a4, a3, a12114; RV32I-ZALRSC-NEXT:    sc.w a4, a4, (a2)2115; RV32I-ZALRSC-NEXT:    bnez a4, .LBB17_12116; RV32I-ZALRSC-NEXT:  # %bb.2:2117; RV32I-ZALRSC-NEXT:    srl a0, a3, a02118; RV32I-ZALRSC-NEXT:    slli a0, a0, 162119; RV32I-ZALRSC-NEXT:    srai a0, a0, 162120; RV32I-ZALRSC-NEXT:    ret2121;2122; RV64I-LABEL: atomicrmw_and_i16_monotonic:2123; RV64I:       # %bb.0:2124; RV64I-NEXT:    addi sp, sp, -162125; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2126; RV64I-NEXT:    li a2, 02127; RV64I-NEXT:    call __atomic_fetch_and_22128; RV64I-NEXT:    slli a0, a0, 482129; RV64I-NEXT:    srai a0, a0, 482130; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2131; RV64I-NEXT:    addi sp, sp, 162132; RV64I-NEXT:    ret2133;2134; RV64IA-LABEL: atomicrmw_and_i16_monotonic:2135; RV64IA:       # %bb.0:2136; RV64IA-NEXT:    andi a2, a0, -42137; RV64IA-NEXT:    slli a0, a0, 32138; RV64IA-NEXT:    lui a3, 162139; RV64IA-NEXT:    addi a3, a3, -12140; RV64IA-NEXT:    sllw a4, a3, a02141; RV64IA-NEXT:    and a1, a1, a32142; RV64IA-NEXT:    not a3, a42143; RV64IA-NEXT:    sllw a1, a1, a02144; RV64IA-NEXT:    or a1, a1, a32145; RV64IA-NEXT:    amoand.w a1, a1, (a2)2146; RV64IA-NEXT:    srlw a0, a1, a02147; RV64IA-NEXT:    slli a0, a0, 482148; RV64IA-NEXT:    srai a0, a0, 482149; RV64IA-NEXT:    ret2150;2151; RV64I-ZALRSC-LABEL: atomicrmw_and_i16_monotonic:2152; RV64I-ZALRSC:       # %bb.0:2153; RV64I-ZALRSC-NEXT:    andi a2, a0, -42154; RV64I-ZALRSC-NEXT:    slli a0, a0, 32155; RV64I-ZALRSC-NEXT:    lui a3, 162156; RV64I-ZALRSC-NEXT:    addi a3, a3, -12157; RV64I-ZALRSC-NEXT:    sllw a4, a3, a02158; RV64I-ZALRSC-NEXT:    and a1, a1, a32159; RV64I-ZALRSC-NEXT:    not a3, a42160; RV64I-ZALRSC-NEXT:    sllw a1, a1, a02161; RV64I-ZALRSC-NEXT:    or a1, a1, a32162; RV64I-ZALRSC-NEXT:  .LBB17_1: # =>This Inner Loop Header: Depth=12163; RV64I-ZALRSC-NEXT:    lr.w a3, (a2)2164; RV64I-ZALRSC-NEXT:    and a4, a3, a12165; RV64I-ZALRSC-NEXT:    sc.w a4, a4, (a2)2166; RV64I-ZALRSC-NEXT:    bnez a4, .LBB17_12167; RV64I-ZALRSC-NEXT:  # %bb.2:2168; RV64I-ZALRSC-NEXT:    srlw a0, a3, a02169; RV64I-ZALRSC-NEXT:    slli a0, a0, 482170; RV64I-ZALRSC-NEXT:    srai a0, a0, 482171; RV64I-ZALRSC-NEXT:    ret2172  %1 = atomicrmw and ptr %a, i16 %b monotonic2173  ret i16 %12174}2175 2176define signext i16 @atomicrmw_nand_i16_monotonic(ptr %a, i16 %b) nounwind {2177; RV32I-LABEL: atomicrmw_nand_i16_monotonic:2178; RV32I:       # %bb.0:2179; RV32I-NEXT:    addi sp, sp, -162180; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2181; RV32I-NEXT:    li a2, 02182; RV32I-NEXT:    call __atomic_fetch_nand_22183; RV32I-NEXT:    slli a0, a0, 162184; RV32I-NEXT:    srai a0, a0, 162185; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2186; RV32I-NEXT:    addi sp, sp, 162187; RV32I-NEXT:    ret2188;2189; RV32IA-LABEL: atomicrmw_nand_i16_monotonic:2190; RV32IA:       # %bb.0:2191; RV32IA-NEXT:    andi a2, a0, -42192; RV32IA-NEXT:    slli a0, a0, 32193; RV32IA-NEXT:    lui a3, 162194; RV32IA-NEXT:    addi a3, a3, -12195; RV32IA-NEXT:    sll a4, a3, a02196; RV32IA-NEXT:    and a1, a1, a32197; RV32IA-NEXT:    sll a1, a1, a02198; RV32IA-NEXT:  .LBB18_1: # =>This Inner Loop Header: Depth=12199; RV32IA-NEXT:    lr.w a3, (a2)2200; RV32IA-NEXT:    and a5, a3, a12201; RV32IA-NEXT:    not a5, a52202; RV32IA-NEXT:    xor a5, a3, a52203; RV32IA-NEXT:    and a5, a5, a42204; RV32IA-NEXT:    xor a5, a3, a52205; RV32IA-NEXT:    sc.w a5, a5, (a2)2206; RV32IA-NEXT:    bnez a5, .LBB18_12207; RV32IA-NEXT:  # %bb.2:2208; RV32IA-NEXT:    srl a0, a3, a02209; RV32IA-NEXT:    slli a0, a0, 162210; RV32IA-NEXT:    srai a0, a0, 162211; RV32IA-NEXT:    ret2212;2213; RV32I-ZALRSC-LABEL: atomicrmw_nand_i16_monotonic:2214; RV32I-ZALRSC:       # %bb.0:2215; RV32I-ZALRSC-NEXT:    andi a2, a0, -42216; RV32I-ZALRSC-NEXT:    slli a0, a0, 32217; RV32I-ZALRSC-NEXT:    lui a3, 162218; RV32I-ZALRSC-NEXT:    addi a3, a3, -12219; RV32I-ZALRSC-NEXT:    sll a4, a3, a02220; RV32I-ZALRSC-NEXT:    and a1, a1, a32221; RV32I-ZALRSC-NEXT:    sll a1, a1, a02222; RV32I-ZALRSC-NEXT:  .LBB18_1: # =>This Inner Loop Header: Depth=12223; RV32I-ZALRSC-NEXT:    lr.w a3, (a2)2224; RV32I-ZALRSC-NEXT:    and a5, a3, a12225; RV32I-ZALRSC-NEXT:    not a5, a52226; RV32I-ZALRSC-NEXT:    xor a5, a3, a52227; RV32I-ZALRSC-NEXT:    and a5, a5, a42228; RV32I-ZALRSC-NEXT:    xor a5, a3, a52229; RV32I-ZALRSC-NEXT:    sc.w a5, a5, (a2)2230; RV32I-ZALRSC-NEXT:    bnez a5, .LBB18_12231; RV32I-ZALRSC-NEXT:  # %bb.2:2232; RV32I-ZALRSC-NEXT:    srl a0, a3, a02233; RV32I-ZALRSC-NEXT:    slli a0, a0, 162234; RV32I-ZALRSC-NEXT:    srai a0, a0, 162235; RV32I-ZALRSC-NEXT:    ret2236;2237; RV64I-LABEL: atomicrmw_nand_i16_monotonic:2238; RV64I:       # %bb.0:2239; RV64I-NEXT:    addi sp, sp, -162240; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2241; RV64I-NEXT:    li a2, 02242; RV64I-NEXT:    call __atomic_fetch_nand_22243; RV64I-NEXT:    slli a0, a0, 482244; RV64I-NEXT:    srai a0, a0, 482245; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2246; RV64I-NEXT:    addi sp, sp, 162247; RV64I-NEXT:    ret2248;2249; RV64IA-LABEL: atomicrmw_nand_i16_monotonic:2250; RV64IA:       # %bb.0:2251; RV64IA-NEXT:    andi a2, a0, -42252; RV64IA-NEXT:    slli a0, a0, 32253; RV64IA-NEXT:    lui a3, 162254; RV64IA-NEXT:    addi a3, a3, -12255; RV64IA-NEXT:    sllw a4, a3, a02256; RV64IA-NEXT:    and a1, a1, a32257; RV64IA-NEXT:    sllw a1, a1, a02258; RV64IA-NEXT:  .LBB18_1: # =>This Inner Loop Header: Depth=12259; RV64IA-NEXT:    lr.w a3, (a2)2260; RV64IA-NEXT:    and a5, a3, a12261; RV64IA-NEXT:    not a5, a52262; RV64IA-NEXT:    xor a5, a3, a52263; RV64IA-NEXT:    and a5, a5, a42264; RV64IA-NEXT:    xor a5, a3, a52265; RV64IA-NEXT:    sc.w a5, a5, (a2)2266; RV64IA-NEXT:    bnez a5, .LBB18_12267; RV64IA-NEXT:  # %bb.2:2268; RV64IA-NEXT:    srlw a0, a3, a02269; RV64IA-NEXT:    slli a0, a0, 482270; RV64IA-NEXT:    srai a0, a0, 482271; RV64IA-NEXT:    ret2272;2273; RV64I-ZALRSC-LABEL: atomicrmw_nand_i16_monotonic:2274; RV64I-ZALRSC:       # %bb.0:2275; RV64I-ZALRSC-NEXT:    andi a2, a0, -42276; RV64I-ZALRSC-NEXT:    slli a0, a0, 32277; RV64I-ZALRSC-NEXT:    lui a3, 162278; RV64I-ZALRSC-NEXT:    addi a3, a3, -12279; RV64I-ZALRSC-NEXT:    sllw a4, a3, a02280; RV64I-ZALRSC-NEXT:    and a1, a1, a32281; RV64I-ZALRSC-NEXT:    sllw a1, a1, a02282; RV64I-ZALRSC-NEXT:  .LBB18_1: # =>This Inner Loop Header: Depth=12283; RV64I-ZALRSC-NEXT:    lr.w a3, (a2)2284; RV64I-ZALRSC-NEXT:    and a5, a3, a12285; RV64I-ZALRSC-NEXT:    not a5, a52286; RV64I-ZALRSC-NEXT:    xor a5, a3, a52287; RV64I-ZALRSC-NEXT:    and a5, a5, a42288; RV64I-ZALRSC-NEXT:    xor a5, a3, a52289; RV64I-ZALRSC-NEXT:    sc.w a5, a5, (a2)2290; RV64I-ZALRSC-NEXT:    bnez a5, .LBB18_12291; RV64I-ZALRSC-NEXT:  # %bb.2:2292; RV64I-ZALRSC-NEXT:    srlw a0, a3, a02293; RV64I-ZALRSC-NEXT:    slli a0, a0, 482294; RV64I-ZALRSC-NEXT:    srai a0, a0, 482295; RV64I-ZALRSC-NEXT:    ret2296  %1 = atomicrmw nand ptr %a, i16 %b monotonic2297  ret i16 %12298}2299 2300define signext i16 @atomicrmw_or_i16_monotonic(ptr %a, i16 %b) nounwind {2301; RV32I-LABEL: atomicrmw_or_i16_monotonic:2302; RV32I:       # %bb.0:2303; RV32I-NEXT:    addi sp, sp, -162304; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2305; RV32I-NEXT:    li a2, 02306; RV32I-NEXT:    call __atomic_fetch_or_22307; RV32I-NEXT:    slli a0, a0, 162308; RV32I-NEXT:    srai a0, a0, 162309; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2310; RV32I-NEXT:    addi sp, sp, 162311; RV32I-NEXT:    ret2312;2313; RV32IA-LABEL: atomicrmw_or_i16_monotonic:2314; RV32IA:       # %bb.0:2315; RV32IA-NEXT:    andi a2, a0, -42316; RV32IA-NEXT:    slli a0, a0, 32317; RV32IA-NEXT:    slli a1, a1, 162318; RV32IA-NEXT:    srli a1, a1, 162319; RV32IA-NEXT:    sll a1, a1, a02320; RV32IA-NEXT:    amoor.w a1, a1, (a2)2321; RV32IA-NEXT:    srl a0, a1, a02322; RV32IA-NEXT:    slli a0, a0, 162323; RV32IA-NEXT:    srai a0, a0, 162324; RV32IA-NEXT:    ret2325;2326; RV32I-ZALRSC-LABEL: atomicrmw_or_i16_monotonic:2327; RV32I-ZALRSC:       # %bb.0:2328; RV32I-ZALRSC-NEXT:    andi a2, a0, -42329; RV32I-ZALRSC-NEXT:    slli a0, a0, 32330; RV32I-ZALRSC-NEXT:    slli a1, a1, 162331; RV32I-ZALRSC-NEXT:    srli a1, a1, 162332; RV32I-ZALRSC-NEXT:    sll a1, a1, a02333; RV32I-ZALRSC-NEXT:  .LBB19_1: # =>This Inner Loop Header: Depth=12334; RV32I-ZALRSC-NEXT:    lr.w a3, (a2)2335; RV32I-ZALRSC-NEXT:    or a4, a3, a12336; RV32I-ZALRSC-NEXT:    sc.w a4, a4, (a2)2337; RV32I-ZALRSC-NEXT:    bnez a4, .LBB19_12338; RV32I-ZALRSC-NEXT:  # %bb.2:2339; RV32I-ZALRSC-NEXT:    srl a0, a3, a02340; RV32I-ZALRSC-NEXT:    slli a0, a0, 162341; RV32I-ZALRSC-NEXT:    srai a0, a0, 162342; RV32I-ZALRSC-NEXT:    ret2343;2344; RV64I-LABEL: atomicrmw_or_i16_monotonic:2345; RV64I:       # %bb.0:2346; RV64I-NEXT:    addi sp, sp, -162347; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2348; RV64I-NEXT:    li a2, 02349; RV64I-NEXT:    call __atomic_fetch_or_22350; RV64I-NEXT:    slli a0, a0, 482351; RV64I-NEXT:    srai a0, a0, 482352; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2353; RV64I-NEXT:    addi sp, sp, 162354; RV64I-NEXT:    ret2355;2356; RV64IA-LABEL: atomicrmw_or_i16_monotonic:2357; RV64IA:       # %bb.0:2358; RV64IA-NEXT:    andi a2, a0, -42359; RV64IA-NEXT:    slli a0, a0, 32360; RV64IA-NEXT:    slli a1, a1, 482361; RV64IA-NEXT:    srli a1, a1, 482362; RV64IA-NEXT:    sllw a1, a1, a02363; RV64IA-NEXT:    amoor.w a1, a1, (a2)2364; RV64IA-NEXT:    srlw a0, a1, a02365; RV64IA-NEXT:    slli a0, a0, 482366; RV64IA-NEXT:    srai a0, a0, 482367; RV64IA-NEXT:    ret2368;2369; RV64I-ZALRSC-LABEL: atomicrmw_or_i16_monotonic:2370; RV64I-ZALRSC:       # %bb.0:2371; RV64I-ZALRSC-NEXT:    andi a2, a0, -42372; RV64I-ZALRSC-NEXT:    slli a0, a0, 32373; RV64I-ZALRSC-NEXT:    slli a1, a1, 482374; RV64I-ZALRSC-NEXT:    srli a1, a1, 482375; RV64I-ZALRSC-NEXT:    sllw a1, a1, a02376; RV64I-ZALRSC-NEXT:  .LBB19_1: # =>This Inner Loop Header: Depth=12377; RV64I-ZALRSC-NEXT:    lr.w a3, (a2)2378; RV64I-ZALRSC-NEXT:    or a4, a3, a12379; RV64I-ZALRSC-NEXT:    sc.w a4, a4, (a2)2380; RV64I-ZALRSC-NEXT:    bnez a4, .LBB19_12381; RV64I-ZALRSC-NEXT:  # %bb.2:2382; RV64I-ZALRSC-NEXT:    srlw a0, a3, a02383; RV64I-ZALRSC-NEXT:    slli a0, a0, 482384; RV64I-ZALRSC-NEXT:    srai a0, a0, 482385; RV64I-ZALRSC-NEXT:    ret2386  %1 = atomicrmw or ptr %a, i16 %b monotonic2387  ret i16 %12388}2389 2390define signext i16 @atomicrmw_xor_i16_monotonic(ptr %a, i16 %b) nounwind {2391; RV32I-LABEL: atomicrmw_xor_i16_monotonic:2392; RV32I:       # %bb.0:2393; RV32I-NEXT:    addi sp, sp, -162394; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2395; RV32I-NEXT:    li a2, 02396; RV32I-NEXT:    call __atomic_fetch_xor_22397; RV32I-NEXT:    slli a0, a0, 162398; RV32I-NEXT:    srai a0, a0, 162399; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2400; RV32I-NEXT:    addi sp, sp, 162401; RV32I-NEXT:    ret2402;2403; RV32IA-LABEL: atomicrmw_xor_i16_monotonic:2404; RV32IA:       # %bb.0:2405; RV32IA-NEXT:    andi a2, a0, -42406; RV32IA-NEXT:    slli a0, a0, 32407; RV32IA-NEXT:    slli a1, a1, 162408; RV32IA-NEXT:    srli a1, a1, 162409; RV32IA-NEXT:    sll a1, a1, a02410; RV32IA-NEXT:    amoxor.w a1, a1, (a2)2411; RV32IA-NEXT:    srl a0, a1, a02412; RV32IA-NEXT:    slli a0, a0, 162413; RV32IA-NEXT:    srai a0, a0, 162414; RV32IA-NEXT:    ret2415;2416; RV32I-ZALRSC-LABEL: atomicrmw_xor_i16_monotonic:2417; RV32I-ZALRSC:       # %bb.0:2418; RV32I-ZALRSC-NEXT:    andi a2, a0, -42419; RV32I-ZALRSC-NEXT:    slli a0, a0, 32420; RV32I-ZALRSC-NEXT:    slli a1, a1, 162421; RV32I-ZALRSC-NEXT:    srli a1, a1, 162422; RV32I-ZALRSC-NEXT:    sll a1, a1, a02423; RV32I-ZALRSC-NEXT:  .LBB20_1: # =>This Inner Loop Header: Depth=12424; RV32I-ZALRSC-NEXT:    lr.w a3, (a2)2425; RV32I-ZALRSC-NEXT:    xor a4, a3, a12426; RV32I-ZALRSC-NEXT:    sc.w a4, a4, (a2)2427; RV32I-ZALRSC-NEXT:    bnez a4, .LBB20_12428; RV32I-ZALRSC-NEXT:  # %bb.2:2429; RV32I-ZALRSC-NEXT:    srl a0, a3, a02430; RV32I-ZALRSC-NEXT:    slli a0, a0, 162431; RV32I-ZALRSC-NEXT:    srai a0, a0, 162432; RV32I-ZALRSC-NEXT:    ret2433;2434; RV64I-LABEL: atomicrmw_xor_i16_monotonic:2435; RV64I:       # %bb.0:2436; RV64I-NEXT:    addi sp, sp, -162437; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2438; RV64I-NEXT:    li a2, 02439; RV64I-NEXT:    call __atomic_fetch_xor_22440; RV64I-NEXT:    slli a0, a0, 482441; RV64I-NEXT:    srai a0, a0, 482442; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2443; RV64I-NEXT:    addi sp, sp, 162444; RV64I-NEXT:    ret2445;2446; RV64IA-LABEL: atomicrmw_xor_i16_monotonic:2447; RV64IA:       # %bb.0:2448; RV64IA-NEXT:    andi a2, a0, -42449; RV64IA-NEXT:    slli a0, a0, 32450; RV64IA-NEXT:    slli a1, a1, 482451; RV64IA-NEXT:    srli a1, a1, 482452; RV64IA-NEXT:    sllw a1, a1, a02453; RV64IA-NEXT:    amoxor.w a1, a1, (a2)2454; RV64IA-NEXT:    srlw a0, a1, a02455; RV64IA-NEXT:    slli a0, a0, 482456; RV64IA-NEXT:    srai a0, a0, 482457; RV64IA-NEXT:    ret2458;2459; RV64I-ZALRSC-LABEL: atomicrmw_xor_i16_monotonic:2460; RV64I-ZALRSC:       # %bb.0:2461; RV64I-ZALRSC-NEXT:    andi a2, a0, -42462; RV64I-ZALRSC-NEXT:    slli a0, a0, 32463; RV64I-ZALRSC-NEXT:    slli a1, a1, 482464; RV64I-ZALRSC-NEXT:    srli a1, a1, 482465; RV64I-ZALRSC-NEXT:    sllw a1, a1, a02466; RV64I-ZALRSC-NEXT:  .LBB20_1: # =>This Inner Loop Header: Depth=12467; RV64I-ZALRSC-NEXT:    lr.w a3, (a2)2468; RV64I-ZALRSC-NEXT:    xor a4, a3, a12469; RV64I-ZALRSC-NEXT:    sc.w a4, a4, (a2)2470; RV64I-ZALRSC-NEXT:    bnez a4, .LBB20_12471; RV64I-ZALRSC-NEXT:  # %bb.2:2472; RV64I-ZALRSC-NEXT:    srlw a0, a3, a02473; RV64I-ZALRSC-NEXT:    slli a0, a0, 482474; RV64I-ZALRSC-NEXT:    srai a0, a0, 482475; RV64I-ZALRSC-NEXT:    ret2476  %1 = atomicrmw xor ptr %a, i16 %b monotonic2477  ret i16 %12478}2479 2480define signext i16 @atomicrmw_max_i16_monotonic(ptr %a, i16 %b) nounwind {2481; RV32I-LABEL: atomicrmw_max_i16_monotonic:2482; RV32I:       # %bb.0:2483; RV32I-NEXT:    addi sp, sp, -322484; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill2485; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill2486; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill2487; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill2488; RV32I-NEXT:    mv s0, a02489; RV32I-NEXT:    lhu a3, 0(a0)2490; RV32I-NEXT:    mv s1, a12491; RV32I-NEXT:    slli a0, a1, 162492; RV32I-NEXT:    srai s2, a0, 162493; RV32I-NEXT:    j .LBB21_22494; RV32I-NEXT:  .LBB21_1: # %atomicrmw.start2495; RV32I-NEXT:    # in Loop: Header=BB21_2 Depth=12496; RV32I-NEXT:    sh a3, 14(sp)2497; RV32I-NEXT:    addi a1, sp, 142498; RV32I-NEXT:    mv a0, s02499; RV32I-NEXT:    li a3, 02500; RV32I-NEXT:    li a4, 02501; RV32I-NEXT:    call __atomic_compare_exchange_22502; RV32I-NEXT:    lh a3, 14(sp)2503; RV32I-NEXT:    bnez a0, .LBB21_42504; RV32I-NEXT:  .LBB21_2: # %atomicrmw.start2505; RV32I-NEXT:    # =>This Inner Loop Header: Depth=12506; RV32I-NEXT:    slli a0, a3, 162507; RV32I-NEXT:    srai a0, a0, 162508; RV32I-NEXT:    mv a2, a32509; RV32I-NEXT:    blt s2, a0, .LBB21_12510; RV32I-NEXT:  # %bb.3: # %atomicrmw.start2511; RV32I-NEXT:    # in Loop: Header=BB21_2 Depth=12512; RV32I-NEXT:    mv a2, s12513; RV32I-NEXT:    j .LBB21_12514; RV32I-NEXT:  .LBB21_4: # %atomicrmw.end2515; RV32I-NEXT:    slli a0, a3, 162516; RV32I-NEXT:    srai a0, a0, 162517; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload2518; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload2519; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload2520; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload2521; RV32I-NEXT:    addi sp, sp, 322522; RV32I-NEXT:    ret2523;2524; RV32IA-LABEL: atomicrmw_max_i16_monotonic:2525; RV32IA:       # %bb.0:2526; RV32IA-NEXT:    andi a2, a0, -42527; RV32IA-NEXT:    slli a0, a0, 32528; RV32IA-NEXT:    lui a3, 162529; RV32IA-NEXT:    slli a1, a1, 162530; RV32IA-NEXT:    li a4, 162531; RV32IA-NEXT:    andi a5, a0, 242532; RV32IA-NEXT:    addi a3, a3, -12533; RV32IA-NEXT:    srai a1, a1, 162534; RV32IA-NEXT:    sll a3, a3, a02535; RV32IA-NEXT:    sll a1, a1, a02536; RV32IA-NEXT:    sub a4, a4, a52537; RV32IA-NEXT:  .LBB21_1: # =>This Inner Loop Header: Depth=12538; RV32IA-NEXT:    lr.w a5, (a2)2539; RV32IA-NEXT:    and a7, a5, a32540; RV32IA-NEXT:    mv a6, a52541; RV32IA-NEXT:    sll a7, a7, a42542; RV32IA-NEXT:    sra a7, a7, a42543; RV32IA-NEXT:    bge a7, a1, .LBB21_32544; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB21_1 Depth=12545; RV32IA-NEXT:    xor a6, a5, a12546; RV32IA-NEXT:    and a6, a6, a32547; RV32IA-NEXT:    xor a6, a5, a62548; RV32IA-NEXT:  .LBB21_3: # in Loop: Header=BB21_1 Depth=12549; RV32IA-NEXT:    sc.w a6, a6, (a2)2550; RV32IA-NEXT:    bnez a6, .LBB21_12551; RV32IA-NEXT:  # %bb.4:2552; RV32IA-NEXT:    srl a0, a5, a02553; RV32IA-NEXT:    slli a0, a0, 162554; RV32IA-NEXT:    srai a0, a0, 162555; RV32IA-NEXT:    ret2556;2557; RV32I-ZALRSC-LABEL: atomicrmw_max_i16_monotonic:2558; RV32I-ZALRSC:       # %bb.0:2559; RV32I-ZALRSC-NEXT:    andi a2, a0, -42560; RV32I-ZALRSC-NEXT:    slli a0, a0, 32561; RV32I-ZALRSC-NEXT:    lui a3, 162562; RV32I-ZALRSC-NEXT:    slli a1, a1, 162563; RV32I-ZALRSC-NEXT:    li a4, 162564; RV32I-ZALRSC-NEXT:    andi a5, a0, 242565; RV32I-ZALRSC-NEXT:    addi a3, a3, -12566; RV32I-ZALRSC-NEXT:    srai a1, a1, 162567; RV32I-ZALRSC-NEXT:    sll a3, a3, a02568; RV32I-ZALRSC-NEXT:    sll a1, a1, a02569; RV32I-ZALRSC-NEXT:    sub a4, a4, a52570; RV32I-ZALRSC-NEXT:  .LBB21_1: # =>This Inner Loop Header: Depth=12571; RV32I-ZALRSC-NEXT:    lr.w a5, (a2)2572; RV32I-ZALRSC-NEXT:    and a7, a5, a32573; RV32I-ZALRSC-NEXT:    mv a6, a52574; RV32I-ZALRSC-NEXT:    sll a7, a7, a42575; RV32I-ZALRSC-NEXT:    sra a7, a7, a42576; RV32I-ZALRSC-NEXT:    bge a7, a1, .LBB21_32577; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB21_1 Depth=12578; RV32I-ZALRSC-NEXT:    xor a6, a5, a12579; RV32I-ZALRSC-NEXT:    and a6, a6, a32580; RV32I-ZALRSC-NEXT:    xor a6, a5, a62581; RV32I-ZALRSC-NEXT:  .LBB21_3: # in Loop: Header=BB21_1 Depth=12582; RV32I-ZALRSC-NEXT:    sc.w a6, a6, (a2)2583; RV32I-ZALRSC-NEXT:    bnez a6, .LBB21_12584; RV32I-ZALRSC-NEXT:  # %bb.4:2585; RV32I-ZALRSC-NEXT:    srl a0, a5, a02586; RV32I-ZALRSC-NEXT:    slli a0, a0, 162587; RV32I-ZALRSC-NEXT:    srai a0, a0, 162588; RV32I-ZALRSC-NEXT:    ret2589;2590; RV64I-LABEL: atomicrmw_max_i16_monotonic:2591; RV64I:       # %bb.0:2592; RV64I-NEXT:    addi sp, sp, -482593; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill2594; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill2595; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill2596; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill2597; RV64I-NEXT:    mv s0, a02598; RV64I-NEXT:    lhu a3, 0(a0)2599; RV64I-NEXT:    mv s1, a12600; RV64I-NEXT:    slli a0, a1, 482601; RV64I-NEXT:    srai s2, a0, 482602; RV64I-NEXT:    j .LBB21_22603; RV64I-NEXT:  .LBB21_1: # %atomicrmw.start2604; RV64I-NEXT:    # in Loop: Header=BB21_2 Depth=12605; RV64I-NEXT:    sh a3, 14(sp)2606; RV64I-NEXT:    addi a1, sp, 142607; RV64I-NEXT:    mv a0, s02608; RV64I-NEXT:    li a3, 02609; RV64I-NEXT:    li a4, 02610; RV64I-NEXT:    call __atomic_compare_exchange_22611; RV64I-NEXT:    lh a3, 14(sp)2612; RV64I-NEXT:    bnez a0, .LBB21_42613; RV64I-NEXT:  .LBB21_2: # %atomicrmw.start2614; RV64I-NEXT:    # =>This Inner Loop Header: Depth=12615; RV64I-NEXT:    slli a0, a3, 482616; RV64I-NEXT:    srai a0, a0, 482617; RV64I-NEXT:    mv a2, a32618; RV64I-NEXT:    blt s2, a0, .LBB21_12619; RV64I-NEXT:  # %bb.3: # %atomicrmw.start2620; RV64I-NEXT:    # in Loop: Header=BB21_2 Depth=12621; RV64I-NEXT:    mv a2, s12622; RV64I-NEXT:    j .LBB21_12623; RV64I-NEXT:  .LBB21_4: # %atomicrmw.end2624; RV64I-NEXT:    slli a0, a3, 482625; RV64I-NEXT:    srai a0, a0, 482626; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload2627; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload2628; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload2629; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload2630; RV64I-NEXT:    addi sp, sp, 482631; RV64I-NEXT:    ret2632;2633; RV64IA-LABEL: atomicrmw_max_i16_monotonic:2634; RV64IA:       # %bb.0:2635; RV64IA-NEXT:    andi a2, a0, -42636; RV64IA-NEXT:    slli a0, a0, 32637; RV64IA-NEXT:    lui a3, 162638; RV64IA-NEXT:    slli a1, a1, 482639; RV64IA-NEXT:    li a4, 482640; RV64IA-NEXT:    andi a5, a0, 242641; RV64IA-NEXT:    addi a3, a3, -12642; RV64IA-NEXT:    srai a1, a1, 482643; RV64IA-NEXT:    sllw a3, a3, a02644; RV64IA-NEXT:    sllw a1, a1, a02645; RV64IA-NEXT:    sub a4, a4, a52646; RV64IA-NEXT:  .LBB21_1: # =>This Inner Loop Header: Depth=12647; RV64IA-NEXT:    lr.w a5, (a2)2648; RV64IA-NEXT:    and a7, a5, a32649; RV64IA-NEXT:    mv a6, a52650; RV64IA-NEXT:    sll a7, a7, a42651; RV64IA-NEXT:    sra a7, a7, a42652; RV64IA-NEXT:    bge a7, a1, .LBB21_32653; RV64IA-NEXT:  # %bb.2: # in Loop: Header=BB21_1 Depth=12654; RV64IA-NEXT:    xor a6, a5, a12655; RV64IA-NEXT:    and a6, a6, a32656; RV64IA-NEXT:    xor a6, a5, a62657; RV64IA-NEXT:  .LBB21_3: # in Loop: Header=BB21_1 Depth=12658; RV64IA-NEXT:    sc.w a6, a6, (a2)2659; RV64IA-NEXT:    bnez a6, .LBB21_12660; RV64IA-NEXT:  # %bb.4:2661; RV64IA-NEXT:    srlw a0, a5, a02662; RV64IA-NEXT:    slli a0, a0, 482663; RV64IA-NEXT:    srai a0, a0, 482664; RV64IA-NEXT:    ret2665;2666; RV64I-ZALRSC-LABEL: atomicrmw_max_i16_monotonic:2667; RV64I-ZALRSC:       # %bb.0:2668; RV64I-ZALRSC-NEXT:    andi a2, a0, -42669; RV64I-ZALRSC-NEXT:    slli a0, a0, 32670; RV64I-ZALRSC-NEXT:    lui a3, 162671; RV64I-ZALRSC-NEXT:    slli a1, a1, 482672; RV64I-ZALRSC-NEXT:    li a4, 482673; RV64I-ZALRSC-NEXT:    andi a5, a0, 242674; RV64I-ZALRSC-NEXT:    addi a3, a3, -12675; RV64I-ZALRSC-NEXT:    srai a1, a1, 482676; RV64I-ZALRSC-NEXT:    sllw a3, a3, a02677; RV64I-ZALRSC-NEXT:    sllw a1, a1, a02678; RV64I-ZALRSC-NEXT:    sub a4, a4, a52679; RV64I-ZALRSC-NEXT:  .LBB21_1: # =>This Inner Loop Header: Depth=12680; RV64I-ZALRSC-NEXT:    lr.w a5, (a2)2681; RV64I-ZALRSC-NEXT:    and a7, a5, a32682; RV64I-ZALRSC-NEXT:    mv a6, a52683; RV64I-ZALRSC-NEXT:    sll a7, a7, a42684; RV64I-ZALRSC-NEXT:    sra a7, a7, a42685; RV64I-ZALRSC-NEXT:    bge a7, a1, .LBB21_32686; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB21_1 Depth=12687; RV64I-ZALRSC-NEXT:    xor a6, a5, a12688; RV64I-ZALRSC-NEXT:    and a6, a6, a32689; RV64I-ZALRSC-NEXT:    xor a6, a5, a62690; RV64I-ZALRSC-NEXT:  .LBB21_3: # in Loop: Header=BB21_1 Depth=12691; RV64I-ZALRSC-NEXT:    sc.w a6, a6, (a2)2692; RV64I-ZALRSC-NEXT:    bnez a6, .LBB21_12693; RV64I-ZALRSC-NEXT:  # %bb.4:2694; RV64I-ZALRSC-NEXT:    srlw a0, a5, a02695; RV64I-ZALRSC-NEXT:    slli a0, a0, 482696; RV64I-ZALRSC-NEXT:    srai a0, a0, 482697; RV64I-ZALRSC-NEXT:    ret2698  %1 = atomicrmw max ptr %a, i16 %b monotonic2699  ret i16 %12700}2701 2702define signext i16 @atomicrmw_min_i16_monotonic(ptr %a, i16 %b) nounwind {2703; RV32I-LABEL: atomicrmw_min_i16_monotonic:2704; RV32I:       # %bb.0:2705; RV32I-NEXT:    addi sp, sp, -322706; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill2707; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill2708; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill2709; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill2710; RV32I-NEXT:    mv s0, a02711; RV32I-NEXT:    lhu a3, 0(a0)2712; RV32I-NEXT:    mv s1, a12713; RV32I-NEXT:    slli a0, a1, 162714; RV32I-NEXT:    srai s2, a0, 162715; RV32I-NEXT:    j .LBB22_22716; RV32I-NEXT:  .LBB22_1: # %atomicrmw.start2717; RV32I-NEXT:    # in Loop: Header=BB22_2 Depth=12718; RV32I-NEXT:    sh a3, 14(sp)2719; RV32I-NEXT:    addi a1, sp, 142720; RV32I-NEXT:    mv a0, s02721; RV32I-NEXT:    li a3, 02722; RV32I-NEXT:    li a4, 02723; RV32I-NEXT:    call __atomic_compare_exchange_22724; RV32I-NEXT:    lh a3, 14(sp)2725; RV32I-NEXT:    bnez a0, .LBB22_42726; RV32I-NEXT:  .LBB22_2: # %atomicrmw.start2727; RV32I-NEXT:    # =>This Inner Loop Header: Depth=12728; RV32I-NEXT:    slli a0, a3, 162729; RV32I-NEXT:    srai a0, a0, 162730; RV32I-NEXT:    mv a2, a32731; RV32I-NEXT:    bge s2, a0, .LBB22_12732; RV32I-NEXT:  # %bb.3: # %atomicrmw.start2733; RV32I-NEXT:    # in Loop: Header=BB22_2 Depth=12734; RV32I-NEXT:    mv a2, s12735; RV32I-NEXT:    j .LBB22_12736; RV32I-NEXT:  .LBB22_4: # %atomicrmw.end2737; RV32I-NEXT:    slli a0, a3, 162738; RV32I-NEXT:    srai a0, a0, 162739; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload2740; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload2741; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload2742; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload2743; RV32I-NEXT:    addi sp, sp, 322744; RV32I-NEXT:    ret2745;2746; RV32IA-LABEL: atomicrmw_min_i16_monotonic:2747; RV32IA:       # %bb.0:2748; RV32IA-NEXT:    andi a2, a0, -42749; RV32IA-NEXT:    slli a0, a0, 32750; RV32IA-NEXT:    lui a3, 162751; RV32IA-NEXT:    slli a1, a1, 162752; RV32IA-NEXT:    li a4, 162753; RV32IA-NEXT:    andi a5, a0, 242754; RV32IA-NEXT:    addi a3, a3, -12755; RV32IA-NEXT:    srai a1, a1, 162756; RV32IA-NEXT:    sll a3, a3, a02757; RV32IA-NEXT:    sll a1, a1, a02758; RV32IA-NEXT:    sub a4, a4, a52759; RV32IA-NEXT:  .LBB22_1: # =>This Inner Loop Header: Depth=12760; RV32IA-NEXT:    lr.w a5, (a2)2761; RV32IA-NEXT:    and a7, a5, a32762; RV32IA-NEXT:    mv a6, a52763; RV32IA-NEXT:    sll a7, a7, a42764; RV32IA-NEXT:    sra a7, a7, a42765; RV32IA-NEXT:    bge a1, a7, .LBB22_32766; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB22_1 Depth=12767; RV32IA-NEXT:    xor a6, a5, a12768; RV32IA-NEXT:    and a6, a6, a32769; RV32IA-NEXT:    xor a6, a5, a62770; RV32IA-NEXT:  .LBB22_3: # in Loop: Header=BB22_1 Depth=12771; RV32IA-NEXT:    sc.w a6, a6, (a2)2772; RV32IA-NEXT:    bnez a6, .LBB22_12773; RV32IA-NEXT:  # %bb.4:2774; RV32IA-NEXT:    srl a0, a5, a02775; RV32IA-NEXT:    slli a0, a0, 162776; RV32IA-NEXT:    srai a0, a0, 162777; RV32IA-NEXT:    ret2778;2779; RV32I-ZALRSC-LABEL: atomicrmw_min_i16_monotonic:2780; RV32I-ZALRSC:       # %bb.0:2781; RV32I-ZALRSC-NEXT:    andi a2, a0, -42782; RV32I-ZALRSC-NEXT:    slli a0, a0, 32783; RV32I-ZALRSC-NEXT:    lui a3, 162784; RV32I-ZALRSC-NEXT:    slli a1, a1, 162785; RV32I-ZALRSC-NEXT:    li a4, 162786; RV32I-ZALRSC-NEXT:    andi a5, a0, 242787; RV32I-ZALRSC-NEXT:    addi a3, a3, -12788; RV32I-ZALRSC-NEXT:    srai a1, a1, 162789; RV32I-ZALRSC-NEXT:    sll a3, a3, a02790; RV32I-ZALRSC-NEXT:    sll a1, a1, a02791; RV32I-ZALRSC-NEXT:    sub a4, a4, a52792; RV32I-ZALRSC-NEXT:  .LBB22_1: # =>This Inner Loop Header: Depth=12793; RV32I-ZALRSC-NEXT:    lr.w a5, (a2)2794; RV32I-ZALRSC-NEXT:    and a7, a5, a32795; RV32I-ZALRSC-NEXT:    mv a6, a52796; RV32I-ZALRSC-NEXT:    sll a7, a7, a42797; RV32I-ZALRSC-NEXT:    sra a7, a7, a42798; RV32I-ZALRSC-NEXT:    bge a1, a7, .LBB22_32799; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB22_1 Depth=12800; RV32I-ZALRSC-NEXT:    xor a6, a5, a12801; RV32I-ZALRSC-NEXT:    and a6, a6, a32802; RV32I-ZALRSC-NEXT:    xor a6, a5, a62803; RV32I-ZALRSC-NEXT:  .LBB22_3: # in Loop: Header=BB22_1 Depth=12804; RV32I-ZALRSC-NEXT:    sc.w a6, a6, (a2)2805; RV32I-ZALRSC-NEXT:    bnez a6, .LBB22_12806; RV32I-ZALRSC-NEXT:  # %bb.4:2807; RV32I-ZALRSC-NEXT:    srl a0, a5, a02808; RV32I-ZALRSC-NEXT:    slli a0, a0, 162809; RV32I-ZALRSC-NEXT:    srai a0, a0, 162810; RV32I-ZALRSC-NEXT:    ret2811;2812; RV64I-LABEL: atomicrmw_min_i16_monotonic:2813; RV64I:       # %bb.0:2814; RV64I-NEXT:    addi sp, sp, -482815; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill2816; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill2817; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill2818; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill2819; RV64I-NEXT:    mv s0, a02820; RV64I-NEXT:    lhu a3, 0(a0)2821; RV64I-NEXT:    mv s1, a12822; RV64I-NEXT:    slli a0, a1, 482823; RV64I-NEXT:    srai s2, a0, 482824; RV64I-NEXT:    j .LBB22_22825; RV64I-NEXT:  .LBB22_1: # %atomicrmw.start2826; RV64I-NEXT:    # in Loop: Header=BB22_2 Depth=12827; RV64I-NEXT:    sh a3, 14(sp)2828; RV64I-NEXT:    addi a1, sp, 142829; RV64I-NEXT:    mv a0, s02830; RV64I-NEXT:    li a3, 02831; RV64I-NEXT:    li a4, 02832; RV64I-NEXT:    call __atomic_compare_exchange_22833; RV64I-NEXT:    lh a3, 14(sp)2834; RV64I-NEXT:    bnez a0, .LBB22_42835; RV64I-NEXT:  .LBB22_2: # %atomicrmw.start2836; RV64I-NEXT:    # =>This Inner Loop Header: Depth=12837; RV64I-NEXT:    slli a0, a3, 482838; RV64I-NEXT:    srai a0, a0, 482839; RV64I-NEXT:    mv a2, a32840; RV64I-NEXT:    bge s2, a0, .LBB22_12841; RV64I-NEXT:  # %bb.3: # %atomicrmw.start2842; RV64I-NEXT:    # in Loop: Header=BB22_2 Depth=12843; RV64I-NEXT:    mv a2, s12844; RV64I-NEXT:    j .LBB22_12845; RV64I-NEXT:  .LBB22_4: # %atomicrmw.end2846; RV64I-NEXT:    slli a0, a3, 482847; RV64I-NEXT:    srai a0, a0, 482848; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload2849; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload2850; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload2851; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload2852; RV64I-NEXT:    addi sp, sp, 482853; RV64I-NEXT:    ret2854;2855; RV64IA-LABEL: atomicrmw_min_i16_monotonic:2856; RV64IA:       # %bb.0:2857; RV64IA-NEXT:    andi a2, a0, -42858; RV64IA-NEXT:    slli a0, a0, 32859; RV64IA-NEXT:    lui a3, 162860; RV64IA-NEXT:    slli a1, a1, 482861; RV64IA-NEXT:    li a4, 482862; RV64IA-NEXT:    andi a5, a0, 242863; RV64IA-NEXT:    addi a3, a3, -12864; RV64IA-NEXT:    srai a1, a1, 482865; RV64IA-NEXT:    sllw a3, a3, a02866; RV64IA-NEXT:    sllw a1, a1, a02867; RV64IA-NEXT:    sub a4, a4, a52868; RV64IA-NEXT:  .LBB22_1: # =>This Inner Loop Header: Depth=12869; RV64IA-NEXT:    lr.w a5, (a2)2870; RV64IA-NEXT:    and a7, a5, a32871; RV64IA-NEXT:    mv a6, a52872; RV64IA-NEXT:    sll a7, a7, a42873; RV64IA-NEXT:    sra a7, a7, a42874; RV64IA-NEXT:    bge a1, a7, .LBB22_32875; RV64IA-NEXT:  # %bb.2: # in Loop: Header=BB22_1 Depth=12876; RV64IA-NEXT:    xor a6, a5, a12877; RV64IA-NEXT:    and a6, a6, a32878; RV64IA-NEXT:    xor a6, a5, a62879; RV64IA-NEXT:  .LBB22_3: # in Loop: Header=BB22_1 Depth=12880; RV64IA-NEXT:    sc.w a6, a6, (a2)2881; RV64IA-NEXT:    bnez a6, .LBB22_12882; RV64IA-NEXT:  # %bb.4:2883; RV64IA-NEXT:    srlw a0, a5, a02884; RV64IA-NEXT:    slli a0, a0, 482885; RV64IA-NEXT:    srai a0, a0, 482886; RV64IA-NEXT:    ret2887;2888; RV64I-ZALRSC-LABEL: atomicrmw_min_i16_monotonic:2889; RV64I-ZALRSC:       # %bb.0:2890; RV64I-ZALRSC-NEXT:    andi a2, a0, -42891; RV64I-ZALRSC-NEXT:    slli a0, a0, 32892; RV64I-ZALRSC-NEXT:    lui a3, 162893; RV64I-ZALRSC-NEXT:    slli a1, a1, 482894; RV64I-ZALRSC-NEXT:    li a4, 482895; RV64I-ZALRSC-NEXT:    andi a5, a0, 242896; RV64I-ZALRSC-NEXT:    addi a3, a3, -12897; RV64I-ZALRSC-NEXT:    srai a1, a1, 482898; RV64I-ZALRSC-NEXT:    sllw a3, a3, a02899; RV64I-ZALRSC-NEXT:    sllw a1, a1, a02900; RV64I-ZALRSC-NEXT:    sub a4, a4, a52901; RV64I-ZALRSC-NEXT:  .LBB22_1: # =>This Inner Loop Header: Depth=12902; RV64I-ZALRSC-NEXT:    lr.w a5, (a2)2903; RV64I-ZALRSC-NEXT:    and a7, a5, a32904; RV64I-ZALRSC-NEXT:    mv a6, a52905; RV64I-ZALRSC-NEXT:    sll a7, a7, a42906; RV64I-ZALRSC-NEXT:    sra a7, a7, a42907; RV64I-ZALRSC-NEXT:    bge a1, a7, .LBB22_32908; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB22_1 Depth=12909; RV64I-ZALRSC-NEXT:    xor a6, a5, a12910; RV64I-ZALRSC-NEXT:    and a6, a6, a32911; RV64I-ZALRSC-NEXT:    xor a6, a5, a62912; RV64I-ZALRSC-NEXT:  .LBB22_3: # in Loop: Header=BB22_1 Depth=12913; RV64I-ZALRSC-NEXT:    sc.w a6, a6, (a2)2914; RV64I-ZALRSC-NEXT:    bnez a6, .LBB22_12915; RV64I-ZALRSC-NEXT:  # %bb.4:2916; RV64I-ZALRSC-NEXT:    srlw a0, a5, a02917; RV64I-ZALRSC-NEXT:    slli a0, a0, 482918; RV64I-ZALRSC-NEXT:    srai a0, a0, 482919; RV64I-ZALRSC-NEXT:    ret2920  %1 = atomicrmw min ptr %a, i16 %b monotonic2921  ret i16 %12922}2923 2924define signext i16 @atomicrmw_umax_i16_monotonic(ptr %a, i16 %b) nounwind {2925; RV32I-LABEL: atomicrmw_umax_i16_monotonic:2926; RV32I:       # %bb.0:2927; RV32I-NEXT:    addi sp, sp, -322928; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill2929; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill2930; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill2931; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill2932; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill2933; RV32I-NEXT:    mv s0, a12934; RV32I-NEXT:    mv s1, a02935; RV32I-NEXT:    lhu a1, 0(a0)2936; RV32I-NEXT:    lui s2, 162937; RV32I-NEXT:    addi s2, s2, -12938; RV32I-NEXT:    and s3, s0, s22939; RV32I-NEXT:    j .LBB23_22940; RV32I-NEXT:  .LBB23_1: # %atomicrmw.start2941; RV32I-NEXT:    # in Loop: Header=BB23_2 Depth=12942; RV32I-NEXT:    sh a1, 10(sp)2943; RV32I-NEXT:    addi a1, sp, 102944; RV32I-NEXT:    mv a0, s12945; RV32I-NEXT:    li a3, 02946; RV32I-NEXT:    li a4, 02947; RV32I-NEXT:    call __atomic_compare_exchange_22948; RV32I-NEXT:    lh a1, 10(sp)2949; RV32I-NEXT:    bnez a0, .LBB23_42950; RV32I-NEXT:  .LBB23_2: # %atomicrmw.start2951; RV32I-NEXT:    # =>This Inner Loop Header: Depth=12952; RV32I-NEXT:    and a0, a1, s22953; RV32I-NEXT:    mv a2, a12954; RV32I-NEXT:    bltu s3, a0, .LBB23_12955; RV32I-NEXT:  # %bb.3: # %atomicrmw.start2956; RV32I-NEXT:    # in Loop: Header=BB23_2 Depth=12957; RV32I-NEXT:    mv a2, s02958; RV32I-NEXT:    j .LBB23_12959; RV32I-NEXT:  .LBB23_4: # %atomicrmw.end2960; RV32I-NEXT:    slli a0, a1, 162961; RV32I-NEXT:    srai a0, a0, 162962; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload2963; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload2964; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload2965; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload2966; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload2967; RV32I-NEXT:    addi sp, sp, 322968; RV32I-NEXT:    ret2969;2970; RV32IA-LABEL: atomicrmw_umax_i16_monotonic:2971; RV32IA:       # %bb.0:2972; RV32IA-NEXT:    andi a2, a0, -42973; RV32IA-NEXT:    slli a0, a0, 32974; RV32IA-NEXT:    lui a3, 162975; RV32IA-NEXT:    addi a3, a3, -12976; RV32IA-NEXT:    sll a4, a3, a02977; RV32IA-NEXT:    and a1, a1, a32978; RV32IA-NEXT:    sll a1, a1, a02979; RV32IA-NEXT:  .LBB23_1: # =>This Inner Loop Header: Depth=12980; RV32IA-NEXT:    lr.w a3, (a2)2981; RV32IA-NEXT:    and a6, a3, a42982; RV32IA-NEXT:    mv a5, a32983; RV32IA-NEXT:    bgeu a6, a1, .LBB23_32984; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB23_1 Depth=12985; RV32IA-NEXT:    xor a5, a3, a12986; RV32IA-NEXT:    and a5, a5, a42987; RV32IA-NEXT:    xor a5, a3, a52988; RV32IA-NEXT:  .LBB23_3: # in Loop: Header=BB23_1 Depth=12989; RV32IA-NEXT:    sc.w a5, a5, (a2)2990; RV32IA-NEXT:    bnez a5, .LBB23_12991; RV32IA-NEXT:  # %bb.4:2992; RV32IA-NEXT:    srl a0, a3, a02993; RV32IA-NEXT:    slli a0, a0, 162994; RV32IA-NEXT:    srai a0, a0, 162995; RV32IA-NEXT:    ret2996;2997; RV32I-ZALRSC-LABEL: atomicrmw_umax_i16_monotonic:2998; RV32I-ZALRSC:       # %bb.0:2999; RV32I-ZALRSC-NEXT:    andi a2, a0, -43000; RV32I-ZALRSC-NEXT:    slli a0, a0, 33001; RV32I-ZALRSC-NEXT:    lui a3, 163002; RV32I-ZALRSC-NEXT:    addi a3, a3, -13003; RV32I-ZALRSC-NEXT:    sll a4, a3, a03004; RV32I-ZALRSC-NEXT:    and a1, a1, a33005; RV32I-ZALRSC-NEXT:    sll a1, a1, a03006; RV32I-ZALRSC-NEXT:  .LBB23_1: # =>This Inner Loop Header: Depth=13007; RV32I-ZALRSC-NEXT:    lr.w a3, (a2)3008; RV32I-ZALRSC-NEXT:    and a6, a3, a43009; RV32I-ZALRSC-NEXT:    mv a5, a33010; RV32I-ZALRSC-NEXT:    bgeu a6, a1, .LBB23_33011; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB23_1 Depth=13012; RV32I-ZALRSC-NEXT:    xor a5, a3, a13013; RV32I-ZALRSC-NEXT:    and a5, a5, a43014; RV32I-ZALRSC-NEXT:    xor a5, a3, a53015; RV32I-ZALRSC-NEXT:  .LBB23_3: # in Loop: Header=BB23_1 Depth=13016; RV32I-ZALRSC-NEXT:    sc.w a5, a5, (a2)3017; RV32I-ZALRSC-NEXT:    bnez a5, .LBB23_13018; RV32I-ZALRSC-NEXT:  # %bb.4:3019; RV32I-ZALRSC-NEXT:    srl a0, a3, a03020; RV32I-ZALRSC-NEXT:    slli a0, a0, 163021; RV32I-ZALRSC-NEXT:    srai a0, a0, 163022; RV32I-ZALRSC-NEXT:    ret3023;3024; RV64I-LABEL: atomicrmw_umax_i16_monotonic:3025; RV64I:       # %bb.0:3026; RV64I-NEXT:    addi sp, sp, -483027; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill3028; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill3029; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill3030; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill3031; RV64I-NEXT:    sd s3, 8(sp) # 8-byte Folded Spill3032; RV64I-NEXT:    mv s0, a13033; RV64I-NEXT:    mv s1, a03034; RV64I-NEXT:    lhu a1, 0(a0)3035; RV64I-NEXT:    lui s2, 163036; RV64I-NEXT:    addi s2, s2, -13037; RV64I-NEXT:    and s3, s0, s23038; RV64I-NEXT:    j .LBB23_23039; RV64I-NEXT:  .LBB23_1: # %atomicrmw.start3040; RV64I-NEXT:    # in Loop: Header=BB23_2 Depth=13041; RV64I-NEXT:    sh a1, 6(sp)3042; RV64I-NEXT:    addi a1, sp, 63043; RV64I-NEXT:    mv a0, s13044; RV64I-NEXT:    li a3, 03045; RV64I-NEXT:    li a4, 03046; RV64I-NEXT:    call __atomic_compare_exchange_23047; RV64I-NEXT:    lh a1, 6(sp)3048; RV64I-NEXT:    bnez a0, .LBB23_43049; RV64I-NEXT:  .LBB23_2: # %atomicrmw.start3050; RV64I-NEXT:    # =>This Inner Loop Header: Depth=13051; RV64I-NEXT:    and a0, a1, s23052; RV64I-NEXT:    mv a2, a13053; RV64I-NEXT:    bltu s3, a0, .LBB23_13054; RV64I-NEXT:  # %bb.3: # %atomicrmw.start3055; RV64I-NEXT:    # in Loop: Header=BB23_2 Depth=13056; RV64I-NEXT:    mv a2, s03057; RV64I-NEXT:    j .LBB23_13058; RV64I-NEXT:  .LBB23_4: # %atomicrmw.end3059; RV64I-NEXT:    slli a0, a1, 483060; RV64I-NEXT:    srai a0, a0, 483061; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload3062; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload3063; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload3064; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload3065; RV64I-NEXT:    ld s3, 8(sp) # 8-byte Folded Reload3066; RV64I-NEXT:    addi sp, sp, 483067; RV64I-NEXT:    ret3068;3069; RV64IA-LABEL: atomicrmw_umax_i16_monotonic:3070; RV64IA:       # %bb.0:3071; RV64IA-NEXT:    andi a2, a0, -43072; RV64IA-NEXT:    slli a0, a0, 33073; RV64IA-NEXT:    lui a3, 163074; RV64IA-NEXT:    addi a3, a3, -13075; RV64IA-NEXT:    sllw a4, a3, a03076; RV64IA-NEXT:    and a1, a1, a33077; RV64IA-NEXT:    sllw a1, a1, a03078; RV64IA-NEXT:  .LBB23_1: # =>This Inner Loop Header: Depth=13079; RV64IA-NEXT:    lr.w a3, (a2)3080; RV64IA-NEXT:    and a6, a3, a43081; RV64IA-NEXT:    mv a5, a33082; RV64IA-NEXT:    bgeu a6, a1, .LBB23_33083; RV64IA-NEXT:  # %bb.2: # in Loop: Header=BB23_1 Depth=13084; RV64IA-NEXT:    xor a5, a3, a13085; RV64IA-NEXT:    and a5, a5, a43086; RV64IA-NEXT:    xor a5, a3, a53087; RV64IA-NEXT:  .LBB23_3: # in Loop: Header=BB23_1 Depth=13088; RV64IA-NEXT:    sc.w a5, a5, (a2)3089; RV64IA-NEXT:    bnez a5, .LBB23_13090; RV64IA-NEXT:  # %bb.4:3091; RV64IA-NEXT:    srlw a0, a3, a03092; RV64IA-NEXT:    slli a0, a0, 483093; RV64IA-NEXT:    srai a0, a0, 483094; RV64IA-NEXT:    ret3095;3096; RV64I-ZALRSC-LABEL: atomicrmw_umax_i16_monotonic:3097; RV64I-ZALRSC:       # %bb.0:3098; RV64I-ZALRSC-NEXT:    andi a2, a0, -43099; RV64I-ZALRSC-NEXT:    slli a0, a0, 33100; RV64I-ZALRSC-NEXT:    lui a3, 163101; RV64I-ZALRSC-NEXT:    addi a3, a3, -13102; RV64I-ZALRSC-NEXT:    sllw a4, a3, a03103; RV64I-ZALRSC-NEXT:    and a1, a1, a33104; RV64I-ZALRSC-NEXT:    sllw a1, a1, a03105; RV64I-ZALRSC-NEXT:  .LBB23_1: # =>This Inner Loop Header: Depth=13106; RV64I-ZALRSC-NEXT:    lr.w a3, (a2)3107; RV64I-ZALRSC-NEXT:    and a6, a3, a43108; RV64I-ZALRSC-NEXT:    mv a5, a33109; RV64I-ZALRSC-NEXT:    bgeu a6, a1, .LBB23_33110; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB23_1 Depth=13111; RV64I-ZALRSC-NEXT:    xor a5, a3, a13112; RV64I-ZALRSC-NEXT:    and a5, a5, a43113; RV64I-ZALRSC-NEXT:    xor a5, a3, a53114; RV64I-ZALRSC-NEXT:  .LBB23_3: # in Loop: Header=BB23_1 Depth=13115; RV64I-ZALRSC-NEXT:    sc.w a5, a5, (a2)3116; RV64I-ZALRSC-NEXT:    bnez a5, .LBB23_13117; RV64I-ZALRSC-NEXT:  # %bb.4:3118; RV64I-ZALRSC-NEXT:    srlw a0, a3, a03119; RV64I-ZALRSC-NEXT:    slli a0, a0, 483120; RV64I-ZALRSC-NEXT:    srai a0, a0, 483121; RV64I-ZALRSC-NEXT:    ret3122  %1 = atomicrmw umax ptr %a, i16 %b monotonic3123  ret i16 %13124}3125 3126define signext i16 @atomicrmw_umin_i16_monotonic(ptr %a, i16 %b) nounwind {3127; RV32I-LABEL: atomicrmw_umin_i16_monotonic:3128; RV32I:       # %bb.0:3129; RV32I-NEXT:    addi sp, sp, -323130; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill3131; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill3132; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill3133; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill3134; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill3135; RV32I-NEXT:    mv s0, a13136; RV32I-NEXT:    mv s1, a03137; RV32I-NEXT:    lhu a1, 0(a0)3138; RV32I-NEXT:    lui s2, 163139; RV32I-NEXT:    addi s2, s2, -13140; RV32I-NEXT:    and s3, s0, s23141; RV32I-NEXT:    j .LBB24_23142; RV32I-NEXT:  .LBB24_1: # %atomicrmw.start3143; RV32I-NEXT:    # in Loop: Header=BB24_2 Depth=13144; RV32I-NEXT:    sh a1, 10(sp)3145; RV32I-NEXT:    addi a1, sp, 103146; RV32I-NEXT:    mv a0, s13147; RV32I-NEXT:    li a3, 03148; RV32I-NEXT:    li a4, 03149; RV32I-NEXT:    call __atomic_compare_exchange_23150; RV32I-NEXT:    lh a1, 10(sp)3151; RV32I-NEXT:    bnez a0, .LBB24_43152; RV32I-NEXT:  .LBB24_2: # %atomicrmw.start3153; RV32I-NEXT:    # =>This Inner Loop Header: Depth=13154; RV32I-NEXT:    and a0, a1, s23155; RV32I-NEXT:    mv a2, a13156; RV32I-NEXT:    bgeu s3, a0, .LBB24_13157; RV32I-NEXT:  # %bb.3: # %atomicrmw.start3158; RV32I-NEXT:    # in Loop: Header=BB24_2 Depth=13159; RV32I-NEXT:    mv a2, s03160; RV32I-NEXT:    j .LBB24_13161; RV32I-NEXT:  .LBB24_4: # %atomicrmw.end3162; RV32I-NEXT:    slli a0, a1, 163163; RV32I-NEXT:    srai a0, a0, 163164; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload3165; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload3166; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload3167; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload3168; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload3169; RV32I-NEXT:    addi sp, sp, 323170; RV32I-NEXT:    ret3171;3172; RV32IA-LABEL: atomicrmw_umin_i16_monotonic:3173; RV32IA:       # %bb.0:3174; RV32IA-NEXT:    andi a2, a0, -43175; RV32IA-NEXT:    slli a0, a0, 33176; RV32IA-NEXT:    lui a3, 163177; RV32IA-NEXT:    addi a3, a3, -13178; RV32IA-NEXT:    sll a4, a3, a03179; RV32IA-NEXT:    and a1, a1, a33180; RV32IA-NEXT:    sll a1, a1, a03181; RV32IA-NEXT:  .LBB24_1: # =>This Inner Loop Header: Depth=13182; RV32IA-NEXT:    lr.w a3, (a2)3183; RV32IA-NEXT:    and a6, a3, a43184; RV32IA-NEXT:    mv a5, a33185; RV32IA-NEXT:    bgeu a1, a6, .LBB24_33186; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB24_1 Depth=13187; RV32IA-NEXT:    xor a5, a3, a13188; RV32IA-NEXT:    and a5, a5, a43189; RV32IA-NEXT:    xor a5, a3, a53190; RV32IA-NEXT:  .LBB24_3: # in Loop: Header=BB24_1 Depth=13191; RV32IA-NEXT:    sc.w a5, a5, (a2)3192; RV32IA-NEXT:    bnez a5, .LBB24_13193; RV32IA-NEXT:  # %bb.4:3194; RV32IA-NEXT:    srl a0, a3, a03195; RV32IA-NEXT:    slli a0, a0, 163196; RV32IA-NEXT:    srai a0, a0, 163197; RV32IA-NEXT:    ret3198;3199; RV32I-ZALRSC-LABEL: atomicrmw_umin_i16_monotonic:3200; RV32I-ZALRSC:       # %bb.0:3201; RV32I-ZALRSC-NEXT:    andi a2, a0, -43202; RV32I-ZALRSC-NEXT:    slli a0, a0, 33203; RV32I-ZALRSC-NEXT:    lui a3, 163204; RV32I-ZALRSC-NEXT:    addi a3, a3, -13205; RV32I-ZALRSC-NEXT:    sll a4, a3, a03206; RV32I-ZALRSC-NEXT:    and a1, a1, a33207; RV32I-ZALRSC-NEXT:    sll a1, a1, a03208; RV32I-ZALRSC-NEXT:  .LBB24_1: # =>This Inner Loop Header: Depth=13209; RV32I-ZALRSC-NEXT:    lr.w a3, (a2)3210; RV32I-ZALRSC-NEXT:    and a6, a3, a43211; RV32I-ZALRSC-NEXT:    mv a5, a33212; RV32I-ZALRSC-NEXT:    bgeu a1, a6, .LBB24_33213; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB24_1 Depth=13214; RV32I-ZALRSC-NEXT:    xor a5, a3, a13215; RV32I-ZALRSC-NEXT:    and a5, a5, a43216; RV32I-ZALRSC-NEXT:    xor a5, a3, a53217; RV32I-ZALRSC-NEXT:  .LBB24_3: # in Loop: Header=BB24_1 Depth=13218; RV32I-ZALRSC-NEXT:    sc.w a5, a5, (a2)3219; RV32I-ZALRSC-NEXT:    bnez a5, .LBB24_13220; RV32I-ZALRSC-NEXT:  # %bb.4:3221; RV32I-ZALRSC-NEXT:    srl a0, a3, a03222; RV32I-ZALRSC-NEXT:    slli a0, a0, 163223; RV32I-ZALRSC-NEXT:    srai a0, a0, 163224; RV32I-ZALRSC-NEXT:    ret3225;3226; RV64I-LABEL: atomicrmw_umin_i16_monotonic:3227; RV64I:       # %bb.0:3228; RV64I-NEXT:    addi sp, sp, -483229; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill3230; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill3231; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill3232; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill3233; RV64I-NEXT:    sd s3, 8(sp) # 8-byte Folded Spill3234; RV64I-NEXT:    mv s0, a13235; RV64I-NEXT:    mv s1, a03236; RV64I-NEXT:    lhu a1, 0(a0)3237; RV64I-NEXT:    lui s2, 163238; RV64I-NEXT:    addi s2, s2, -13239; RV64I-NEXT:    and s3, s0, s23240; RV64I-NEXT:    j .LBB24_23241; RV64I-NEXT:  .LBB24_1: # %atomicrmw.start3242; RV64I-NEXT:    # in Loop: Header=BB24_2 Depth=13243; RV64I-NEXT:    sh a1, 6(sp)3244; RV64I-NEXT:    addi a1, sp, 63245; RV64I-NEXT:    mv a0, s13246; RV64I-NEXT:    li a3, 03247; RV64I-NEXT:    li a4, 03248; RV64I-NEXT:    call __atomic_compare_exchange_23249; RV64I-NEXT:    lh a1, 6(sp)3250; RV64I-NEXT:    bnez a0, .LBB24_43251; RV64I-NEXT:  .LBB24_2: # %atomicrmw.start3252; RV64I-NEXT:    # =>This Inner Loop Header: Depth=13253; RV64I-NEXT:    and a0, a1, s23254; RV64I-NEXT:    mv a2, a13255; RV64I-NEXT:    bgeu s3, a0, .LBB24_13256; RV64I-NEXT:  # %bb.3: # %atomicrmw.start3257; RV64I-NEXT:    # in Loop: Header=BB24_2 Depth=13258; RV64I-NEXT:    mv a2, s03259; RV64I-NEXT:    j .LBB24_13260; RV64I-NEXT:  .LBB24_4: # %atomicrmw.end3261; RV64I-NEXT:    slli a0, a1, 483262; RV64I-NEXT:    srai a0, a0, 483263; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload3264; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload3265; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload3266; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload3267; RV64I-NEXT:    ld s3, 8(sp) # 8-byte Folded Reload3268; RV64I-NEXT:    addi sp, sp, 483269; RV64I-NEXT:    ret3270;3271; RV64IA-LABEL: atomicrmw_umin_i16_monotonic:3272; RV64IA:       # %bb.0:3273; RV64IA-NEXT:    andi a2, a0, -43274; RV64IA-NEXT:    slli a0, a0, 33275; RV64IA-NEXT:    lui a3, 163276; RV64IA-NEXT:    addi a3, a3, -13277; RV64IA-NEXT:    sllw a4, a3, a03278; RV64IA-NEXT:    and a1, a1, a33279; RV64IA-NEXT:    sllw a1, a1, a03280; RV64IA-NEXT:  .LBB24_1: # =>This Inner Loop Header: Depth=13281; RV64IA-NEXT:    lr.w a3, (a2)3282; RV64IA-NEXT:    and a6, a3, a43283; RV64IA-NEXT:    mv a5, a33284; RV64IA-NEXT:    bgeu a1, a6, .LBB24_33285; RV64IA-NEXT:  # %bb.2: # in Loop: Header=BB24_1 Depth=13286; RV64IA-NEXT:    xor a5, a3, a13287; RV64IA-NEXT:    and a5, a5, a43288; RV64IA-NEXT:    xor a5, a3, a53289; RV64IA-NEXT:  .LBB24_3: # in Loop: Header=BB24_1 Depth=13290; RV64IA-NEXT:    sc.w a5, a5, (a2)3291; RV64IA-NEXT:    bnez a5, .LBB24_13292; RV64IA-NEXT:  # %bb.4:3293; RV64IA-NEXT:    srlw a0, a3, a03294; RV64IA-NEXT:    slli a0, a0, 483295; RV64IA-NEXT:    srai a0, a0, 483296; RV64IA-NEXT:    ret3297;3298; RV64I-ZALRSC-LABEL: atomicrmw_umin_i16_monotonic:3299; RV64I-ZALRSC:       # %bb.0:3300; RV64I-ZALRSC-NEXT:    andi a2, a0, -43301; RV64I-ZALRSC-NEXT:    slli a0, a0, 33302; RV64I-ZALRSC-NEXT:    lui a3, 163303; RV64I-ZALRSC-NEXT:    addi a3, a3, -13304; RV64I-ZALRSC-NEXT:    sllw a4, a3, a03305; RV64I-ZALRSC-NEXT:    and a1, a1, a33306; RV64I-ZALRSC-NEXT:    sllw a1, a1, a03307; RV64I-ZALRSC-NEXT:  .LBB24_1: # =>This Inner Loop Header: Depth=13308; RV64I-ZALRSC-NEXT:    lr.w a3, (a2)3309; RV64I-ZALRSC-NEXT:    and a6, a3, a43310; RV64I-ZALRSC-NEXT:    mv a5, a33311; RV64I-ZALRSC-NEXT:    bgeu a1, a6, .LBB24_33312; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB24_1 Depth=13313; RV64I-ZALRSC-NEXT:    xor a5, a3, a13314; RV64I-ZALRSC-NEXT:    and a5, a5, a43315; RV64I-ZALRSC-NEXT:    xor a5, a3, a53316; RV64I-ZALRSC-NEXT:  .LBB24_3: # in Loop: Header=BB24_1 Depth=13317; RV64I-ZALRSC-NEXT:    sc.w a5, a5, (a2)3318; RV64I-ZALRSC-NEXT:    bnez a5, .LBB24_13319; RV64I-ZALRSC-NEXT:  # %bb.4:3320; RV64I-ZALRSC-NEXT:    srlw a0, a3, a03321; RV64I-ZALRSC-NEXT:    slli a0, a0, 483322; RV64I-ZALRSC-NEXT:    srai a0, a0, 483323; RV64I-ZALRSC-NEXT:    ret3324  %1 = atomicrmw umin ptr %a, i16 %b monotonic3325  ret i16 %13326}3327 3328define signext i32 @atomicrmw_xchg_i32_monotonic(ptr %a, i32 %b) nounwind {3329; RV32I-LABEL: atomicrmw_xchg_i32_monotonic:3330; RV32I:       # %bb.0:3331; RV32I-NEXT:    addi sp, sp, -163332; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3333; RV32I-NEXT:    li a2, 03334; RV32I-NEXT:    call __atomic_exchange_43335; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3336; RV32I-NEXT:    addi sp, sp, 163337; RV32I-NEXT:    ret3338;3339; RV32IA-LABEL: atomicrmw_xchg_i32_monotonic:3340; RV32IA:       # %bb.0:3341; RV32IA-NEXT:    amoswap.w a0, a1, (a0)3342; RV32IA-NEXT:    ret3343;3344; RV32I-ZALRSC-LABEL: atomicrmw_xchg_i32_monotonic:3345; RV32I-ZALRSC:       # %bb.0:3346; RV32I-ZALRSC-NEXT:  .LBB25_1: # =>This Inner Loop Header: Depth=13347; RV32I-ZALRSC-NEXT:    lr.w a2, (a0)3348; RV32I-ZALRSC-NEXT:    mv a3, a13349; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3350; RV32I-ZALRSC-NEXT:    bnez a3, .LBB25_13351; RV32I-ZALRSC-NEXT:  # %bb.2:3352; RV32I-ZALRSC-NEXT:    mv a0, a23353; RV32I-ZALRSC-NEXT:    ret3354;3355; RV64I-LABEL: atomicrmw_xchg_i32_monotonic:3356; RV64I:       # %bb.0:3357; RV64I-NEXT:    addi sp, sp, -163358; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3359; RV64I-NEXT:    li a2, 03360; RV64I-NEXT:    call __atomic_exchange_43361; RV64I-NEXT:    sext.w a0, a03362; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3363; RV64I-NEXT:    addi sp, sp, 163364; RV64I-NEXT:    ret3365;3366; RV64IA-LABEL: atomicrmw_xchg_i32_monotonic:3367; RV64IA:       # %bb.0:3368; RV64IA-NEXT:    amoswap.w a0, a1, (a0)3369; RV64IA-NEXT:    ret3370;3371; RV64I-ZALRSC-LABEL: atomicrmw_xchg_i32_monotonic:3372; RV64I-ZALRSC:       # %bb.0:3373; RV64I-ZALRSC-NEXT:  .LBB25_1: # =>This Inner Loop Header: Depth=13374; RV64I-ZALRSC-NEXT:    lr.w a2, (a0)3375; RV64I-ZALRSC-NEXT:    mv a3, a13376; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3377; RV64I-ZALRSC-NEXT:    bnez a3, .LBB25_13378; RV64I-ZALRSC-NEXT:  # %bb.2:3379; RV64I-ZALRSC-NEXT:    mv a0, a23380; RV64I-ZALRSC-NEXT:    ret3381  %1 = atomicrmw xchg ptr %a, i32 %b monotonic3382  ret i32 %13383}3384 3385define signext i32 @atomicrmw_add_i32_monotonic(ptr %a, i32 %b) nounwind {3386; RV32I-LABEL: atomicrmw_add_i32_monotonic:3387; RV32I:       # %bb.0:3388; RV32I-NEXT:    addi sp, sp, -163389; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3390; RV32I-NEXT:    li a2, 03391; RV32I-NEXT:    call __atomic_fetch_add_43392; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3393; RV32I-NEXT:    addi sp, sp, 163394; RV32I-NEXT:    ret3395;3396; RV32IA-LABEL: atomicrmw_add_i32_monotonic:3397; RV32IA:       # %bb.0:3398; RV32IA-NEXT:    amoadd.w a0, a1, (a0)3399; RV32IA-NEXT:    ret3400;3401; RV32I-ZALRSC-LABEL: atomicrmw_add_i32_monotonic:3402; RV32I-ZALRSC:       # %bb.0:3403; RV32I-ZALRSC-NEXT:  .LBB26_1: # =>This Inner Loop Header: Depth=13404; RV32I-ZALRSC-NEXT:    lr.w a2, (a0)3405; RV32I-ZALRSC-NEXT:    add a3, a2, a13406; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3407; RV32I-ZALRSC-NEXT:    bnez a3, .LBB26_13408; RV32I-ZALRSC-NEXT:  # %bb.2:3409; RV32I-ZALRSC-NEXT:    mv a0, a23410; RV32I-ZALRSC-NEXT:    ret3411;3412; RV64I-LABEL: atomicrmw_add_i32_monotonic:3413; RV64I:       # %bb.0:3414; RV64I-NEXT:    addi sp, sp, -163415; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3416; RV64I-NEXT:    li a2, 03417; RV64I-NEXT:    call __atomic_fetch_add_43418; RV64I-NEXT:    sext.w a0, a03419; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3420; RV64I-NEXT:    addi sp, sp, 163421; RV64I-NEXT:    ret3422;3423; RV64IA-LABEL: atomicrmw_add_i32_monotonic:3424; RV64IA:       # %bb.0:3425; RV64IA-NEXT:    amoadd.w a0, a1, (a0)3426; RV64IA-NEXT:    ret3427;3428; RV64I-ZALRSC-LABEL: atomicrmw_add_i32_monotonic:3429; RV64I-ZALRSC:       # %bb.0:3430; RV64I-ZALRSC-NEXT:  .LBB26_1: # =>This Inner Loop Header: Depth=13431; RV64I-ZALRSC-NEXT:    lr.w a2, (a0)3432; RV64I-ZALRSC-NEXT:    add a3, a2, a13433; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3434; RV64I-ZALRSC-NEXT:    bnez a3, .LBB26_13435; RV64I-ZALRSC-NEXT:  # %bb.2:3436; RV64I-ZALRSC-NEXT:    mv a0, a23437; RV64I-ZALRSC-NEXT:    ret3438  %1 = atomicrmw add ptr %a, i32 %b monotonic3439  ret i32 %13440}3441 3442define signext i32 @atomicrmw_sub_i32_monotonic(ptr %a, i32 %b) nounwind {3443; RV32I-LABEL: atomicrmw_sub_i32_monotonic:3444; RV32I:       # %bb.0:3445; RV32I-NEXT:    addi sp, sp, -163446; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3447; RV32I-NEXT:    li a2, 03448; RV32I-NEXT:    call __atomic_fetch_sub_43449; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3450; RV32I-NEXT:    addi sp, sp, 163451; RV32I-NEXT:    ret3452;3453; RV32IA-LABEL: atomicrmw_sub_i32_monotonic:3454; RV32IA:       # %bb.0:3455; RV32IA-NEXT:    neg a1, a13456; RV32IA-NEXT:    amoadd.w a0, a1, (a0)3457; RV32IA-NEXT:    ret3458;3459; RV32I-ZALRSC-LABEL: atomicrmw_sub_i32_monotonic:3460; RV32I-ZALRSC:       # %bb.0:3461; RV32I-ZALRSC-NEXT:  .LBB27_1: # =>This Inner Loop Header: Depth=13462; RV32I-ZALRSC-NEXT:    lr.w a2, (a0)3463; RV32I-ZALRSC-NEXT:    sub a3, a2, a13464; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3465; RV32I-ZALRSC-NEXT:    bnez a3, .LBB27_13466; RV32I-ZALRSC-NEXT:  # %bb.2:3467; RV32I-ZALRSC-NEXT:    mv a0, a23468; RV32I-ZALRSC-NEXT:    ret3469;3470; RV64I-LABEL: atomicrmw_sub_i32_monotonic:3471; RV64I:       # %bb.0:3472; RV64I-NEXT:    addi sp, sp, -163473; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3474; RV64I-NEXT:    li a2, 03475; RV64I-NEXT:    call __atomic_fetch_sub_43476; RV64I-NEXT:    sext.w a0, a03477; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3478; RV64I-NEXT:    addi sp, sp, 163479; RV64I-NEXT:    ret3480;3481; RV64IA-LABEL: atomicrmw_sub_i32_monotonic:3482; RV64IA:       # %bb.0:3483; RV64IA-NEXT:    neg a1, a13484; RV64IA-NEXT:    amoadd.w a0, a1, (a0)3485; RV64IA-NEXT:    ret3486;3487; RV64I-ZALRSC-LABEL: atomicrmw_sub_i32_monotonic:3488; RV64I-ZALRSC:       # %bb.0:3489; RV64I-ZALRSC-NEXT:  .LBB27_1: # =>This Inner Loop Header: Depth=13490; RV64I-ZALRSC-NEXT:    lr.w a2, (a0)3491; RV64I-ZALRSC-NEXT:    sub a3, a2, a13492; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3493; RV64I-ZALRSC-NEXT:    bnez a3, .LBB27_13494; RV64I-ZALRSC-NEXT:  # %bb.2:3495; RV64I-ZALRSC-NEXT:    mv a0, a23496; RV64I-ZALRSC-NEXT:    ret3497  %1 = atomicrmw sub ptr %a, i32 %b monotonic3498  ret i32 %13499}3500 3501define signext i32 @atomicrmw_and_i32_monotonic(ptr %a, i32 %b) nounwind {3502; RV32I-LABEL: atomicrmw_and_i32_monotonic:3503; RV32I:       # %bb.0:3504; RV32I-NEXT:    addi sp, sp, -163505; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3506; RV32I-NEXT:    li a2, 03507; RV32I-NEXT:    call __atomic_fetch_and_43508; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3509; RV32I-NEXT:    addi sp, sp, 163510; RV32I-NEXT:    ret3511;3512; RV32IA-LABEL: atomicrmw_and_i32_monotonic:3513; RV32IA:       # %bb.0:3514; RV32IA-NEXT:    amoand.w a0, a1, (a0)3515; RV32IA-NEXT:    ret3516;3517; RV32I-ZALRSC-LABEL: atomicrmw_and_i32_monotonic:3518; RV32I-ZALRSC:       # %bb.0:3519; RV32I-ZALRSC-NEXT:  .LBB28_1: # =>This Inner Loop Header: Depth=13520; RV32I-ZALRSC-NEXT:    lr.w a2, (a0)3521; RV32I-ZALRSC-NEXT:    and a3, a2, a13522; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3523; RV32I-ZALRSC-NEXT:    bnez a3, .LBB28_13524; RV32I-ZALRSC-NEXT:  # %bb.2:3525; RV32I-ZALRSC-NEXT:    mv a0, a23526; RV32I-ZALRSC-NEXT:    ret3527;3528; RV64I-LABEL: atomicrmw_and_i32_monotonic:3529; RV64I:       # %bb.0:3530; RV64I-NEXT:    addi sp, sp, -163531; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3532; RV64I-NEXT:    li a2, 03533; RV64I-NEXT:    call __atomic_fetch_and_43534; RV64I-NEXT:    sext.w a0, a03535; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3536; RV64I-NEXT:    addi sp, sp, 163537; RV64I-NEXT:    ret3538;3539; RV64IA-LABEL: atomicrmw_and_i32_monotonic:3540; RV64IA:       # %bb.0:3541; RV64IA-NEXT:    amoand.w a0, a1, (a0)3542; RV64IA-NEXT:    ret3543;3544; RV64I-ZALRSC-LABEL: atomicrmw_and_i32_monotonic:3545; RV64I-ZALRSC:       # %bb.0:3546; RV64I-ZALRSC-NEXT:  .LBB28_1: # =>This Inner Loop Header: Depth=13547; RV64I-ZALRSC-NEXT:    lr.w a2, (a0)3548; RV64I-ZALRSC-NEXT:    and a3, a2, a13549; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3550; RV64I-ZALRSC-NEXT:    bnez a3, .LBB28_13551; RV64I-ZALRSC-NEXT:  # %bb.2:3552; RV64I-ZALRSC-NEXT:    mv a0, a23553; RV64I-ZALRSC-NEXT:    ret3554  %1 = atomicrmw and ptr %a, i32 %b monotonic3555  ret i32 %13556}3557 3558define signext i32 @atomicrmw_nand_i32_monotonic(ptr %a, i32 %b) nounwind {3559; RV32I-LABEL: atomicrmw_nand_i32_monotonic:3560; RV32I:       # %bb.0:3561; RV32I-NEXT:    addi sp, sp, -163562; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3563; RV32I-NEXT:    li a2, 03564; RV32I-NEXT:    call __atomic_fetch_nand_43565; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3566; RV32I-NEXT:    addi sp, sp, 163567; RV32I-NEXT:    ret3568;3569; RV32IA-NOZACAS-LABEL: atomicrmw_nand_i32_monotonic:3570; RV32IA-NOZACAS:       # %bb.0:3571; RV32IA-NOZACAS-NEXT:  .LBB29_1: # =>This Inner Loop Header: Depth=13572; RV32IA-NOZACAS-NEXT:    lr.w a2, (a0)3573; RV32IA-NOZACAS-NEXT:    and a3, a2, a13574; RV32IA-NOZACAS-NEXT:    not a3, a33575; RV32IA-NOZACAS-NEXT:    sc.w a3, a3, (a0)3576; RV32IA-NOZACAS-NEXT:    bnez a3, .LBB29_13577; RV32IA-NOZACAS-NEXT:  # %bb.2:3578; RV32IA-NOZACAS-NEXT:    mv a0, a23579; RV32IA-NOZACAS-NEXT:    ret3580;3581; RV32IA-ZACAS-LABEL: atomicrmw_nand_i32_monotonic:3582; RV32IA-ZACAS:       # %bb.0:3583; RV32IA-ZACAS-NEXT:    mv a2, a03584; RV32IA-ZACAS-NEXT:    lw a0, 0(a0)3585; RV32IA-ZACAS-NEXT:  .LBB29_1: # %atomicrmw.start3586; RV32IA-ZACAS-NEXT:    # =>This Inner Loop Header: Depth=13587; RV32IA-ZACAS-NEXT:    mv a3, a03588; RV32IA-ZACAS-NEXT:    and a4, a0, a13589; RV32IA-ZACAS-NEXT:    not a4, a43590; RV32IA-ZACAS-NEXT:    amocas.w a0, a4, (a2)3591; RV32IA-ZACAS-NEXT:    bne a0, a3, .LBB29_13592; RV32IA-ZACAS-NEXT:  # %bb.2: # %atomicrmw.end3593; RV32IA-ZACAS-NEXT:    ret3594;3595; RV32I-ZALRSC-LABEL: atomicrmw_nand_i32_monotonic:3596; RV32I-ZALRSC:       # %bb.0:3597; RV32I-ZALRSC-NEXT:  .LBB29_1: # =>This Inner Loop Header: Depth=13598; RV32I-ZALRSC-NEXT:    lr.w a2, (a0)3599; RV32I-ZALRSC-NEXT:    and a3, a2, a13600; RV32I-ZALRSC-NEXT:    not a3, a33601; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3602; RV32I-ZALRSC-NEXT:    bnez a3, .LBB29_13603; RV32I-ZALRSC-NEXT:  # %bb.2:3604; RV32I-ZALRSC-NEXT:    mv a0, a23605; RV32I-ZALRSC-NEXT:    ret3606;3607; RV64I-LABEL: atomicrmw_nand_i32_monotonic:3608; RV64I:       # %bb.0:3609; RV64I-NEXT:    addi sp, sp, -163610; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3611; RV64I-NEXT:    li a2, 03612; RV64I-NEXT:    call __atomic_fetch_nand_43613; RV64I-NEXT:    sext.w a0, a03614; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3615; RV64I-NEXT:    addi sp, sp, 163616; RV64I-NEXT:    ret3617;3618; RV64IA-NOZACAS-LABEL: atomicrmw_nand_i32_monotonic:3619; RV64IA-NOZACAS:       # %bb.0:3620; RV64IA-NOZACAS-NEXT:  .LBB29_1: # =>This Inner Loop Header: Depth=13621; RV64IA-NOZACAS-NEXT:    lr.w a2, (a0)3622; RV64IA-NOZACAS-NEXT:    and a3, a2, a13623; RV64IA-NOZACAS-NEXT:    not a3, a33624; RV64IA-NOZACAS-NEXT:    sc.w a3, a3, (a0)3625; RV64IA-NOZACAS-NEXT:    bnez a3, .LBB29_13626; RV64IA-NOZACAS-NEXT:  # %bb.2:3627; RV64IA-NOZACAS-NEXT:    mv a0, a23628; RV64IA-NOZACAS-NEXT:    ret3629;3630; RV64IA-ZACAS-LABEL: atomicrmw_nand_i32_monotonic:3631; RV64IA-ZACAS:       # %bb.0:3632; RV64IA-ZACAS-NEXT:    mv a2, a03633; RV64IA-ZACAS-NEXT:    lw a0, 0(a0)3634; RV64IA-ZACAS-NEXT:  .LBB29_1: # %atomicrmw.start3635; RV64IA-ZACAS-NEXT:    # =>This Inner Loop Header: Depth=13636; RV64IA-ZACAS-NEXT:    mv a3, a03637; RV64IA-ZACAS-NEXT:    and a4, a0, a13638; RV64IA-ZACAS-NEXT:    not a4, a43639; RV64IA-ZACAS-NEXT:    amocas.w a0, a4, (a2)3640; RV64IA-ZACAS-NEXT:    bne a0, a3, .LBB29_13641; RV64IA-ZACAS-NEXT:  # %bb.2: # %atomicrmw.end3642; RV64IA-ZACAS-NEXT:    ret3643;3644; RV64I-ZALRSC-LABEL: atomicrmw_nand_i32_monotonic:3645; RV64I-ZALRSC:       # %bb.0:3646; RV64I-ZALRSC-NEXT:  .LBB29_1: # =>This Inner Loop Header: Depth=13647; RV64I-ZALRSC-NEXT:    lr.w a2, (a0)3648; RV64I-ZALRSC-NEXT:    and a3, a2, a13649; RV64I-ZALRSC-NEXT:    not a3, a33650; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3651; RV64I-ZALRSC-NEXT:    bnez a3, .LBB29_13652; RV64I-ZALRSC-NEXT:  # %bb.2:3653; RV64I-ZALRSC-NEXT:    mv a0, a23654; RV64I-ZALRSC-NEXT:    ret3655  %1 = atomicrmw nand ptr %a, i32 %b monotonic3656  ret i32 %13657}3658 3659define signext i32 @atomicrmw_or_i32_monotonic(ptr %a, i32 %b) nounwind {3660; RV32I-LABEL: atomicrmw_or_i32_monotonic:3661; RV32I:       # %bb.0:3662; RV32I-NEXT:    addi sp, sp, -163663; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3664; RV32I-NEXT:    li a2, 03665; RV32I-NEXT:    call __atomic_fetch_or_43666; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3667; RV32I-NEXT:    addi sp, sp, 163668; RV32I-NEXT:    ret3669;3670; RV32IA-LABEL: atomicrmw_or_i32_monotonic:3671; RV32IA:       # %bb.0:3672; RV32IA-NEXT:    amoor.w a0, a1, (a0)3673; RV32IA-NEXT:    ret3674;3675; RV32I-ZALRSC-LABEL: atomicrmw_or_i32_monotonic:3676; RV32I-ZALRSC:       # %bb.0:3677; RV32I-ZALRSC-NEXT:  .LBB30_1: # =>This Inner Loop Header: Depth=13678; RV32I-ZALRSC-NEXT:    lr.w a2, (a0)3679; RV32I-ZALRSC-NEXT:    or a3, a2, a13680; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3681; RV32I-ZALRSC-NEXT:    bnez a3, .LBB30_13682; RV32I-ZALRSC-NEXT:  # %bb.2:3683; RV32I-ZALRSC-NEXT:    mv a0, a23684; RV32I-ZALRSC-NEXT:    ret3685;3686; RV64I-LABEL: atomicrmw_or_i32_monotonic:3687; RV64I:       # %bb.0:3688; RV64I-NEXT:    addi sp, sp, -163689; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3690; RV64I-NEXT:    li a2, 03691; RV64I-NEXT:    call __atomic_fetch_or_43692; RV64I-NEXT:    sext.w a0, a03693; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3694; RV64I-NEXT:    addi sp, sp, 163695; RV64I-NEXT:    ret3696;3697; RV64IA-LABEL: atomicrmw_or_i32_monotonic:3698; RV64IA:       # %bb.0:3699; RV64IA-NEXT:    amoor.w a0, a1, (a0)3700; RV64IA-NEXT:    ret3701;3702; RV64I-ZALRSC-LABEL: atomicrmw_or_i32_monotonic:3703; RV64I-ZALRSC:       # %bb.0:3704; RV64I-ZALRSC-NEXT:  .LBB30_1: # =>This Inner Loop Header: Depth=13705; RV64I-ZALRSC-NEXT:    lr.w a2, (a0)3706; RV64I-ZALRSC-NEXT:    or a3, a2, a13707; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3708; RV64I-ZALRSC-NEXT:    bnez a3, .LBB30_13709; RV64I-ZALRSC-NEXT:  # %bb.2:3710; RV64I-ZALRSC-NEXT:    mv a0, a23711; RV64I-ZALRSC-NEXT:    ret3712  %1 = atomicrmw or ptr %a, i32 %b monotonic3713  ret i32 %13714}3715 3716define signext i32 @atomicrmw_xor_i32_monotonic(ptr %a, i32 %b) nounwind {3717; RV32I-LABEL: atomicrmw_xor_i32_monotonic:3718; RV32I:       # %bb.0:3719; RV32I-NEXT:    addi sp, sp, -163720; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3721; RV32I-NEXT:    li a2, 03722; RV32I-NEXT:    call __atomic_fetch_xor_43723; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3724; RV32I-NEXT:    addi sp, sp, 163725; RV32I-NEXT:    ret3726;3727; RV32IA-LABEL: atomicrmw_xor_i32_monotonic:3728; RV32IA:       # %bb.0:3729; RV32IA-NEXT:    amoxor.w a0, a1, (a0)3730; RV32IA-NEXT:    ret3731;3732; RV32I-ZALRSC-LABEL: atomicrmw_xor_i32_monotonic:3733; RV32I-ZALRSC:       # %bb.0:3734; RV32I-ZALRSC-NEXT:  .LBB31_1: # =>This Inner Loop Header: Depth=13735; RV32I-ZALRSC-NEXT:    lr.w a2, (a0)3736; RV32I-ZALRSC-NEXT:    xor a3, a2, a13737; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3738; RV32I-ZALRSC-NEXT:    bnez a3, .LBB31_13739; RV32I-ZALRSC-NEXT:  # %bb.2:3740; RV32I-ZALRSC-NEXT:    mv a0, a23741; RV32I-ZALRSC-NEXT:    ret3742;3743; RV64I-LABEL: atomicrmw_xor_i32_monotonic:3744; RV64I:       # %bb.0:3745; RV64I-NEXT:    addi sp, sp, -163746; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3747; RV64I-NEXT:    li a2, 03748; RV64I-NEXT:    call __atomic_fetch_xor_43749; RV64I-NEXT:    sext.w a0, a03750; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3751; RV64I-NEXT:    addi sp, sp, 163752; RV64I-NEXT:    ret3753;3754; RV64IA-LABEL: atomicrmw_xor_i32_monotonic:3755; RV64IA:       # %bb.0:3756; RV64IA-NEXT:    amoxor.w a0, a1, (a0)3757; RV64IA-NEXT:    ret3758;3759; RV64I-ZALRSC-LABEL: atomicrmw_xor_i32_monotonic:3760; RV64I-ZALRSC:       # %bb.0:3761; RV64I-ZALRSC-NEXT:  .LBB31_1: # =>This Inner Loop Header: Depth=13762; RV64I-ZALRSC-NEXT:    lr.w a2, (a0)3763; RV64I-ZALRSC-NEXT:    xor a3, a2, a13764; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3765; RV64I-ZALRSC-NEXT:    bnez a3, .LBB31_13766; RV64I-ZALRSC-NEXT:  # %bb.2:3767; RV64I-ZALRSC-NEXT:    mv a0, a23768; RV64I-ZALRSC-NEXT:    ret3769  %1 = atomicrmw xor ptr %a, i32 %b monotonic3770  ret i32 %13771}3772 3773define signext i32 @atomicrmw_max_i32_monotonic(ptr %a, i32 %b) nounwind {3774; RV32I-LABEL: atomicrmw_max_i32_monotonic:3775; RV32I:       # %bb.0:3776; RV32I-NEXT:    addi sp, sp, -163777; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3778; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3779; RV32I-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill3780; RV32I-NEXT:    mv s0, a03781; RV32I-NEXT:    lw a3, 0(a0)3782; RV32I-NEXT:    mv s1, a13783; RV32I-NEXT:    j .LBB32_23784; RV32I-NEXT:  .LBB32_1: # %atomicrmw.start3785; RV32I-NEXT:    # in Loop: Header=BB32_2 Depth=13786; RV32I-NEXT:    sw a3, 0(sp)3787; RV32I-NEXT:    mv a1, sp3788; RV32I-NEXT:    mv a0, s03789; RV32I-NEXT:    li a3, 03790; RV32I-NEXT:    li a4, 03791; RV32I-NEXT:    call __atomic_compare_exchange_43792; RV32I-NEXT:    lw a3, 0(sp)3793; RV32I-NEXT:    bnez a0, .LBB32_43794; RV32I-NEXT:  .LBB32_2: # %atomicrmw.start3795; RV32I-NEXT:    # =>This Inner Loop Header: Depth=13796; RV32I-NEXT:    mv a2, a33797; RV32I-NEXT:    blt s1, a3, .LBB32_13798; RV32I-NEXT:  # %bb.3: # %atomicrmw.start3799; RV32I-NEXT:    # in Loop: Header=BB32_2 Depth=13800; RV32I-NEXT:    mv a2, s13801; RV32I-NEXT:    j .LBB32_13802; RV32I-NEXT:  .LBB32_4: # %atomicrmw.end3803; RV32I-NEXT:    mv a0, a33804; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3805; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3806; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload3807; RV32I-NEXT:    addi sp, sp, 163808; RV32I-NEXT:    ret3809;3810; RV32IA-LABEL: atomicrmw_max_i32_monotonic:3811; RV32IA:       # %bb.0:3812; RV32IA-NEXT:    amomax.w a0, a1, (a0)3813; RV32IA-NEXT:    ret3814;3815; RV32I-ZALRSC-LABEL: atomicrmw_max_i32_monotonic:3816; RV32I-ZALRSC:       # %bb.0:3817; RV32I-ZALRSC-NEXT:  .LBB32_1: # =>This Inner Loop Header: Depth=13818; RV32I-ZALRSC-NEXT:    lr.w a2, (a0)3819; RV32I-ZALRSC-NEXT:    mv a3, a23820; RV32I-ZALRSC-NEXT:    bge a3, a1, .LBB32_33821; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB32_1 Depth=13822; RV32I-ZALRSC-NEXT:    mv a3, a13823; RV32I-ZALRSC-NEXT:  .LBB32_3: # in Loop: Header=BB32_1 Depth=13824; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3825; RV32I-ZALRSC-NEXT:    bnez a3, .LBB32_13826; RV32I-ZALRSC-NEXT:  # %bb.4:3827; RV32I-ZALRSC-NEXT:    mv a0, a23828; RV32I-ZALRSC-NEXT:    ret3829;3830; RV64I-LABEL: atomicrmw_max_i32_monotonic:3831; RV64I:       # %bb.0:3832; RV64I-NEXT:    addi sp, sp, -483833; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill3834; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill3835; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill3836; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill3837; RV64I-NEXT:    mv s0, a03838; RV64I-NEXT:    lw a3, 0(a0)3839; RV64I-NEXT:    mv s1, a13840; RV64I-NEXT:    sext.w s2, a13841; RV64I-NEXT:    j .LBB32_23842; RV64I-NEXT:  .LBB32_1: # %atomicrmw.start3843; RV64I-NEXT:    # in Loop: Header=BB32_2 Depth=13844; RV64I-NEXT:    sw a3, 12(sp)3845; RV64I-NEXT:    addi a1, sp, 123846; RV64I-NEXT:    mv a0, s03847; RV64I-NEXT:    li a3, 03848; RV64I-NEXT:    li a4, 03849; RV64I-NEXT:    call __atomic_compare_exchange_43850; RV64I-NEXT:    lw a3, 12(sp)3851; RV64I-NEXT:    bnez a0, .LBB32_43852; RV64I-NEXT:  .LBB32_2: # %atomicrmw.start3853; RV64I-NEXT:    # =>This Inner Loop Header: Depth=13854; RV64I-NEXT:    mv a2, a33855; RV64I-NEXT:    blt s2, a3, .LBB32_13856; RV64I-NEXT:  # %bb.3: # %atomicrmw.start3857; RV64I-NEXT:    # in Loop: Header=BB32_2 Depth=13858; RV64I-NEXT:    mv a2, s13859; RV64I-NEXT:    j .LBB32_13860; RV64I-NEXT:  .LBB32_4: # %atomicrmw.end3861; RV64I-NEXT:    mv a0, a33862; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload3863; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload3864; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload3865; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload3866; RV64I-NEXT:    addi sp, sp, 483867; RV64I-NEXT:    ret3868;3869; RV64IA-LABEL: atomicrmw_max_i32_monotonic:3870; RV64IA:       # %bb.0:3871; RV64IA-NEXT:    amomax.w a0, a1, (a0)3872; RV64IA-NEXT:    ret3873;3874; RV64I-ZALRSC-LABEL: atomicrmw_max_i32_monotonic:3875; RV64I-ZALRSC:       # %bb.0:3876; RV64I-ZALRSC-NEXT:    sext.w a2, a13877; RV64I-ZALRSC-NEXT:  .LBB32_1: # =>This Inner Loop Header: Depth=13878; RV64I-ZALRSC-NEXT:    lr.w a1, (a0)3879; RV64I-ZALRSC-NEXT:    mv a3, a13880; RV64I-ZALRSC-NEXT:    bge a3, a2, .LBB32_33881; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB32_1 Depth=13882; RV64I-ZALRSC-NEXT:    mv a3, a23883; RV64I-ZALRSC-NEXT:  .LBB32_3: # in Loop: Header=BB32_1 Depth=13884; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3885; RV64I-ZALRSC-NEXT:    bnez a3, .LBB32_13886; RV64I-ZALRSC-NEXT:  # %bb.4:3887; RV64I-ZALRSC-NEXT:    mv a0, a13888; RV64I-ZALRSC-NEXT:    ret3889  %1 = atomicrmw max ptr %a, i32 %b monotonic3890  ret i32 %13891}3892 3893define signext i32 @atomicrmw_min_i32_monotonic(ptr %a, i32 %b) nounwind {3894; RV32I-LABEL: atomicrmw_min_i32_monotonic:3895; RV32I:       # %bb.0:3896; RV32I-NEXT:    addi sp, sp, -163897; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3898; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3899; RV32I-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill3900; RV32I-NEXT:    mv s0, a03901; RV32I-NEXT:    lw a3, 0(a0)3902; RV32I-NEXT:    mv s1, a13903; RV32I-NEXT:    j .LBB33_23904; RV32I-NEXT:  .LBB33_1: # %atomicrmw.start3905; RV32I-NEXT:    # in Loop: Header=BB33_2 Depth=13906; RV32I-NEXT:    sw a3, 0(sp)3907; RV32I-NEXT:    mv a1, sp3908; RV32I-NEXT:    mv a0, s03909; RV32I-NEXT:    li a3, 03910; RV32I-NEXT:    li a4, 03911; RV32I-NEXT:    call __atomic_compare_exchange_43912; RV32I-NEXT:    lw a3, 0(sp)3913; RV32I-NEXT:    bnez a0, .LBB33_43914; RV32I-NEXT:  .LBB33_2: # %atomicrmw.start3915; RV32I-NEXT:    # =>This Inner Loop Header: Depth=13916; RV32I-NEXT:    mv a2, a33917; RV32I-NEXT:    bge s1, a3, .LBB33_13918; RV32I-NEXT:  # %bb.3: # %atomicrmw.start3919; RV32I-NEXT:    # in Loop: Header=BB33_2 Depth=13920; RV32I-NEXT:    mv a2, s13921; RV32I-NEXT:    j .LBB33_13922; RV32I-NEXT:  .LBB33_4: # %atomicrmw.end3923; RV32I-NEXT:    mv a0, a33924; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3925; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3926; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload3927; RV32I-NEXT:    addi sp, sp, 163928; RV32I-NEXT:    ret3929;3930; RV32IA-LABEL: atomicrmw_min_i32_monotonic:3931; RV32IA:       # %bb.0:3932; RV32IA-NEXT:    amomin.w a0, a1, (a0)3933; RV32IA-NEXT:    ret3934;3935; RV32I-ZALRSC-LABEL: atomicrmw_min_i32_monotonic:3936; RV32I-ZALRSC:       # %bb.0:3937; RV32I-ZALRSC-NEXT:  .LBB33_1: # =>This Inner Loop Header: Depth=13938; RV32I-ZALRSC-NEXT:    lr.w a2, (a0)3939; RV32I-ZALRSC-NEXT:    mv a3, a23940; RV32I-ZALRSC-NEXT:    bge a1, a3, .LBB33_33941; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB33_1 Depth=13942; RV32I-ZALRSC-NEXT:    mv a3, a13943; RV32I-ZALRSC-NEXT:  .LBB33_3: # in Loop: Header=BB33_1 Depth=13944; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a0)3945; RV32I-ZALRSC-NEXT:    bnez a3, .LBB33_13946; RV32I-ZALRSC-NEXT:  # %bb.4:3947; RV32I-ZALRSC-NEXT:    mv a0, a23948; RV32I-ZALRSC-NEXT:    ret3949;3950; RV64I-LABEL: atomicrmw_min_i32_monotonic:3951; RV64I:       # %bb.0:3952; RV64I-NEXT:    addi sp, sp, -483953; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill3954; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill3955; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill3956; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill3957; RV64I-NEXT:    mv s0, a03958; RV64I-NEXT:    lw a3, 0(a0)3959; RV64I-NEXT:    mv s1, a13960; RV64I-NEXT:    sext.w s2, a13961; RV64I-NEXT:    j .LBB33_23962; RV64I-NEXT:  .LBB33_1: # %atomicrmw.start3963; RV64I-NEXT:    # in Loop: Header=BB33_2 Depth=13964; RV64I-NEXT:    sw a3, 12(sp)3965; RV64I-NEXT:    addi a1, sp, 123966; RV64I-NEXT:    mv a0, s03967; RV64I-NEXT:    li a3, 03968; RV64I-NEXT:    li a4, 03969; RV64I-NEXT:    call __atomic_compare_exchange_43970; RV64I-NEXT:    lw a3, 12(sp)3971; RV64I-NEXT:    bnez a0, .LBB33_43972; RV64I-NEXT:  .LBB33_2: # %atomicrmw.start3973; RV64I-NEXT:    # =>This Inner Loop Header: Depth=13974; RV64I-NEXT:    mv a2, a33975; RV64I-NEXT:    bge s2, a3, .LBB33_13976; RV64I-NEXT:  # %bb.3: # %atomicrmw.start3977; RV64I-NEXT:    # in Loop: Header=BB33_2 Depth=13978; RV64I-NEXT:    mv a2, s13979; RV64I-NEXT:    j .LBB33_13980; RV64I-NEXT:  .LBB33_4: # %atomicrmw.end3981; RV64I-NEXT:    mv a0, a33982; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload3983; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload3984; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload3985; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload3986; RV64I-NEXT:    addi sp, sp, 483987; RV64I-NEXT:    ret3988;3989; RV64IA-LABEL: atomicrmw_min_i32_monotonic:3990; RV64IA:       # %bb.0:3991; RV64IA-NEXT:    amomin.w a0, a1, (a0)3992; RV64IA-NEXT:    ret3993;3994; RV64I-ZALRSC-LABEL: atomicrmw_min_i32_monotonic:3995; RV64I-ZALRSC:       # %bb.0:3996; RV64I-ZALRSC-NEXT:    sext.w a2, a13997; RV64I-ZALRSC-NEXT:  .LBB33_1: # =>This Inner Loop Header: Depth=13998; RV64I-ZALRSC-NEXT:    lr.w a1, (a0)3999; RV64I-ZALRSC-NEXT:    mv a3, a14000; RV64I-ZALRSC-NEXT:    bge a2, a3, .LBB33_34001; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB33_1 Depth=14002; RV64I-ZALRSC-NEXT:    mv a3, a24003; RV64I-ZALRSC-NEXT:  .LBB33_3: # in Loop: Header=BB33_1 Depth=14004; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)4005; RV64I-ZALRSC-NEXT:    bnez a3, .LBB33_14006; RV64I-ZALRSC-NEXT:  # %bb.4:4007; RV64I-ZALRSC-NEXT:    mv a0, a14008; RV64I-ZALRSC-NEXT:    ret4009  %1 = atomicrmw min ptr %a, i32 %b monotonic4010  ret i32 %14011}4012 4013define signext i32 @atomicrmw_umax_i32_monotonic(ptr %a, i32 %b) nounwind {4014; RV32I-LABEL: atomicrmw_umax_i32_monotonic:4015; RV32I:       # %bb.0:4016; RV32I-NEXT:    addi sp, sp, -164017; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4018; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill4019; RV32I-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill4020; RV32I-NEXT:    mv s0, a04021; RV32I-NEXT:    lw a3, 0(a0)4022; RV32I-NEXT:    mv s1, a14023; RV32I-NEXT:    j .LBB34_24024; RV32I-NEXT:  .LBB34_1: # %atomicrmw.start4025; RV32I-NEXT:    # in Loop: Header=BB34_2 Depth=14026; RV32I-NEXT:    sw a3, 0(sp)4027; RV32I-NEXT:    mv a1, sp4028; RV32I-NEXT:    mv a0, s04029; RV32I-NEXT:    li a3, 04030; RV32I-NEXT:    li a4, 04031; RV32I-NEXT:    call __atomic_compare_exchange_44032; RV32I-NEXT:    lw a3, 0(sp)4033; RV32I-NEXT:    bnez a0, .LBB34_44034; RV32I-NEXT:  .LBB34_2: # %atomicrmw.start4035; RV32I-NEXT:    # =>This Inner Loop Header: Depth=14036; RV32I-NEXT:    mv a2, a34037; RV32I-NEXT:    bltu s1, a3, .LBB34_14038; RV32I-NEXT:  # %bb.3: # %atomicrmw.start4039; RV32I-NEXT:    # in Loop: Header=BB34_2 Depth=14040; RV32I-NEXT:    mv a2, s14041; RV32I-NEXT:    j .LBB34_14042; RV32I-NEXT:  .LBB34_4: # %atomicrmw.end4043; RV32I-NEXT:    mv a0, a34044; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4045; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload4046; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload4047; RV32I-NEXT:    addi sp, sp, 164048; RV32I-NEXT:    ret4049;4050; RV32IA-LABEL: atomicrmw_umax_i32_monotonic:4051; RV32IA:       # %bb.0:4052; RV32IA-NEXT:    amomaxu.w a0, a1, (a0)4053; RV32IA-NEXT:    ret4054;4055; RV32I-ZALRSC-LABEL: atomicrmw_umax_i32_monotonic:4056; RV32I-ZALRSC:       # %bb.0:4057; RV32I-ZALRSC-NEXT:  .LBB34_1: # =>This Inner Loop Header: Depth=14058; RV32I-ZALRSC-NEXT:    lr.w a2, (a0)4059; RV32I-ZALRSC-NEXT:    mv a3, a24060; RV32I-ZALRSC-NEXT:    bgeu a3, a1, .LBB34_34061; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB34_1 Depth=14062; RV32I-ZALRSC-NEXT:    mv a3, a14063; RV32I-ZALRSC-NEXT:  .LBB34_3: # in Loop: Header=BB34_1 Depth=14064; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a0)4065; RV32I-ZALRSC-NEXT:    bnez a3, .LBB34_14066; RV32I-ZALRSC-NEXT:  # %bb.4:4067; RV32I-ZALRSC-NEXT:    mv a0, a24068; RV32I-ZALRSC-NEXT:    ret4069;4070; RV64I-LABEL: atomicrmw_umax_i32_monotonic:4071; RV64I:       # %bb.0:4072; RV64I-NEXT:    addi sp, sp, -484073; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill4074; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill4075; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill4076; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill4077; RV64I-NEXT:    mv s0, a04078; RV64I-NEXT:    lw a3, 0(a0)4079; RV64I-NEXT:    mv s1, a14080; RV64I-NEXT:    sext.w s2, a14081; RV64I-NEXT:    j .LBB34_24082; RV64I-NEXT:  .LBB34_1: # %atomicrmw.start4083; RV64I-NEXT:    # in Loop: Header=BB34_2 Depth=14084; RV64I-NEXT:    sw a3, 12(sp)4085; RV64I-NEXT:    addi a1, sp, 124086; RV64I-NEXT:    mv a0, s04087; RV64I-NEXT:    li a3, 04088; RV64I-NEXT:    li a4, 04089; RV64I-NEXT:    call __atomic_compare_exchange_44090; RV64I-NEXT:    lw a3, 12(sp)4091; RV64I-NEXT:    bnez a0, .LBB34_44092; RV64I-NEXT:  .LBB34_2: # %atomicrmw.start4093; RV64I-NEXT:    # =>This Inner Loop Header: Depth=14094; RV64I-NEXT:    mv a2, a34095; RV64I-NEXT:    bltu s2, a3, .LBB34_14096; RV64I-NEXT:  # %bb.3: # %atomicrmw.start4097; RV64I-NEXT:    # in Loop: Header=BB34_2 Depth=14098; RV64I-NEXT:    mv a2, s14099; RV64I-NEXT:    j .LBB34_14100; RV64I-NEXT:  .LBB34_4: # %atomicrmw.end4101; RV64I-NEXT:    mv a0, a34102; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload4103; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload4104; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload4105; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload4106; RV64I-NEXT:    addi sp, sp, 484107; RV64I-NEXT:    ret4108;4109; RV64IA-LABEL: atomicrmw_umax_i32_monotonic:4110; RV64IA:       # %bb.0:4111; RV64IA-NEXT:    amomaxu.w a0, a1, (a0)4112; RV64IA-NEXT:    ret4113;4114; RV64I-ZALRSC-LABEL: atomicrmw_umax_i32_monotonic:4115; RV64I-ZALRSC:       # %bb.0:4116; RV64I-ZALRSC-NEXT:    sext.w a2, a14117; RV64I-ZALRSC-NEXT:  .LBB34_1: # =>This Inner Loop Header: Depth=14118; RV64I-ZALRSC-NEXT:    lr.w a1, (a0)4119; RV64I-ZALRSC-NEXT:    mv a3, a14120; RV64I-ZALRSC-NEXT:    bgeu a3, a2, .LBB34_34121; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB34_1 Depth=14122; RV64I-ZALRSC-NEXT:    mv a3, a24123; RV64I-ZALRSC-NEXT:  .LBB34_3: # in Loop: Header=BB34_1 Depth=14124; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)4125; RV64I-ZALRSC-NEXT:    bnez a3, .LBB34_14126; RV64I-ZALRSC-NEXT:  # %bb.4:4127; RV64I-ZALRSC-NEXT:    mv a0, a14128; RV64I-ZALRSC-NEXT:    ret4129  %1 = atomicrmw umax ptr %a, i32 %b monotonic4130  ret i32 %14131}4132 4133define signext i32 @atomicrmw_umin_i32_monotonic(ptr %a, i32 %b) nounwind {4134; RV32I-LABEL: atomicrmw_umin_i32_monotonic:4135; RV32I:       # %bb.0:4136; RV32I-NEXT:    addi sp, sp, -164137; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4138; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill4139; RV32I-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill4140; RV32I-NEXT:    mv s0, a04141; RV32I-NEXT:    lw a3, 0(a0)4142; RV32I-NEXT:    mv s1, a14143; RV32I-NEXT:    j .LBB35_24144; RV32I-NEXT:  .LBB35_1: # %atomicrmw.start4145; RV32I-NEXT:    # in Loop: Header=BB35_2 Depth=14146; RV32I-NEXT:    sw a3, 0(sp)4147; RV32I-NEXT:    mv a1, sp4148; RV32I-NEXT:    mv a0, s04149; RV32I-NEXT:    li a3, 04150; RV32I-NEXT:    li a4, 04151; RV32I-NEXT:    call __atomic_compare_exchange_44152; RV32I-NEXT:    lw a3, 0(sp)4153; RV32I-NEXT:    bnez a0, .LBB35_44154; RV32I-NEXT:  .LBB35_2: # %atomicrmw.start4155; RV32I-NEXT:    # =>This Inner Loop Header: Depth=14156; RV32I-NEXT:    mv a2, a34157; RV32I-NEXT:    bgeu s1, a3, .LBB35_14158; RV32I-NEXT:  # %bb.3: # %atomicrmw.start4159; RV32I-NEXT:    # in Loop: Header=BB35_2 Depth=14160; RV32I-NEXT:    mv a2, s14161; RV32I-NEXT:    j .LBB35_14162; RV32I-NEXT:  .LBB35_4: # %atomicrmw.end4163; RV32I-NEXT:    mv a0, a34164; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4165; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload4166; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload4167; RV32I-NEXT:    addi sp, sp, 164168; RV32I-NEXT:    ret4169;4170; RV32IA-LABEL: atomicrmw_umin_i32_monotonic:4171; RV32IA:       # %bb.0:4172; RV32IA-NEXT:    amominu.w a0, a1, (a0)4173; RV32IA-NEXT:    ret4174;4175; RV32I-ZALRSC-LABEL: atomicrmw_umin_i32_monotonic:4176; RV32I-ZALRSC:       # %bb.0:4177; RV32I-ZALRSC-NEXT:  .LBB35_1: # =>This Inner Loop Header: Depth=14178; RV32I-ZALRSC-NEXT:    lr.w a2, (a0)4179; RV32I-ZALRSC-NEXT:    mv a3, a24180; RV32I-ZALRSC-NEXT:    bgeu a1, a3, .LBB35_34181; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB35_1 Depth=14182; RV32I-ZALRSC-NEXT:    mv a3, a14183; RV32I-ZALRSC-NEXT:  .LBB35_3: # in Loop: Header=BB35_1 Depth=14184; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a0)4185; RV32I-ZALRSC-NEXT:    bnez a3, .LBB35_14186; RV32I-ZALRSC-NEXT:  # %bb.4:4187; RV32I-ZALRSC-NEXT:    mv a0, a24188; RV32I-ZALRSC-NEXT:    ret4189;4190; RV64I-LABEL: atomicrmw_umin_i32_monotonic:4191; RV64I:       # %bb.0:4192; RV64I-NEXT:    addi sp, sp, -484193; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill4194; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill4195; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill4196; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill4197; RV64I-NEXT:    mv s0, a04198; RV64I-NEXT:    lw a3, 0(a0)4199; RV64I-NEXT:    mv s1, a14200; RV64I-NEXT:    sext.w s2, a14201; RV64I-NEXT:    j .LBB35_24202; RV64I-NEXT:  .LBB35_1: # %atomicrmw.start4203; RV64I-NEXT:    # in Loop: Header=BB35_2 Depth=14204; RV64I-NEXT:    sw a3, 12(sp)4205; RV64I-NEXT:    addi a1, sp, 124206; RV64I-NEXT:    mv a0, s04207; RV64I-NEXT:    li a3, 04208; RV64I-NEXT:    li a4, 04209; RV64I-NEXT:    call __atomic_compare_exchange_44210; RV64I-NEXT:    lw a3, 12(sp)4211; RV64I-NEXT:    bnez a0, .LBB35_44212; RV64I-NEXT:  .LBB35_2: # %atomicrmw.start4213; RV64I-NEXT:    # =>This Inner Loop Header: Depth=14214; RV64I-NEXT:    mv a2, a34215; RV64I-NEXT:    bgeu s2, a3, .LBB35_14216; RV64I-NEXT:  # %bb.3: # %atomicrmw.start4217; RV64I-NEXT:    # in Loop: Header=BB35_2 Depth=14218; RV64I-NEXT:    mv a2, s14219; RV64I-NEXT:    j .LBB35_14220; RV64I-NEXT:  .LBB35_4: # %atomicrmw.end4221; RV64I-NEXT:    mv a0, a34222; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload4223; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload4224; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload4225; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload4226; RV64I-NEXT:    addi sp, sp, 484227; RV64I-NEXT:    ret4228;4229; RV64IA-LABEL: atomicrmw_umin_i32_monotonic:4230; RV64IA:       # %bb.0:4231; RV64IA-NEXT:    amominu.w a0, a1, (a0)4232; RV64IA-NEXT:    ret4233;4234; RV64I-ZALRSC-LABEL: atomicrmw_umin_i32_monotonic:4235; RV64I-ZALRSC:       # %bb.0:4236; RV64I-ZALRSC-NEXT:    sext.w a2, a14237; RV64I-ZALRSC-NEXT:  .LBB35_1: # =>This Inner Loop Header: Depth=14238; RV64I-ZALRSC-NEXT:    lr.w a1, (a0)4239; RV64I-ZALRSC-NEXT:    mv a3, a14240; RV64I-ZALRSC-NEXT:    bgeu a2, a3, .LBB35_34241; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB35_1 Depth=14242; RV64I-ZALRSC-NEXT:    mv a3, a24243; RV64I-ZALRSC-NEXT:  .LBB35_3: # in Loop: Header=BB35_1 Depth=14244; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)4245; RV64I-ZALRSC-NEXT:    bnez a3, .LBB35_14246; RV64I-ZALRSC-NEXT:  # %bb.4:4247; RV64I-ZALRSC-NEXT:    mv a0, a14248; RV64I-ZALRSC-NEXT:    ret4249  %1 = atomicrmw umin ptr %a, i32 %b monotonic4250  ret i32 %14251}4252 4253define signext i64 @atomicrmw_xchg_i64_monotonic(ptr %a, i64 %b) nounwind {4254; RV32I-LABEL: atomicrmw_xchg_i64_monotonic:4255; RV32I:       # %bb.0:4256; RV32I-NEXT:    addi sp, sp, -164257; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4258; RV32I-NEXT:    li a3, 04259; RV32I-NEXT:    call __atomic_exchange_84260; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4261; RV32I-NEXT:    addi sp, sp, 164262; RV32I-NEXT:    ret4263;4264; RV32IA-LABEL: atomicrmw_xchg_i64_monotonic:4265; RV32IA:       # %bb.0:4266; RV32IA-NEXT:    addi sp, sp, -164267; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4268; RV32IA-NEXT:    li a3, 04269; RV32IA-NEXT:    call __atomic_exchange_84270; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4271; RV32IA-NEXT:    addi sp, sp, 164272; RV32IA-NEXT:    ret4273;4274; RV32I-ZALRSC-LABEL: atomicrmw_xchg_i64_monotonic:4275; RV32I-ZALRSC:       # %bb.0:4276; RV32I-ZALRSC-NEXT:    addi sp, sp, -164277; RV32I-ZALRSC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4278; RV32I-ZALRSC-NEXT:    li a3, 04279; RV32I-ZALRSC-NEXT:    call __atomic_exchange_84280; RV32I-ZALRSC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4281; RV32I-ZALRSC-NEXT:    addi sp, sp, 164282; RV32I-ZALRSC-NEXT:    ret4283;4284; RV64I-LABEL: atomicrmw_xchg_i64_monotonic:4285; RV64I:       # %bb.0:4286; RV64I-NEXT:    addi sp, sp, -164287; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4288; RV64I-NEXT:    li a2, 04289; RV64I-NEXT:    call __atomic_exchange_84290; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4291; RV64I-NEXT:    addi sp, sp, 164292; RV64I-NEXT:    ret4293;4294; RV64IA-LABEL: atomicrmw_xchg_i64_monotonic:4295; RV64IA:       # %bb.0:4296; RV64IA-NEXT:    amoswap.d a0, a1, (a0)4297; RV64IA-NEXT:    ret4298;4299; RV64I-ZALRSC-LABEL: atomicrmw_xchg_i64_monotonic:4300; RV64I-ZALRSC:       # %bb.0:4301; RV64I-ZALRSC-NEXT:  .LBB36_1: # =>This Inner Loop Header: Depth=14302; RV64I-ZALRSC-NEXT:    lr.d a2, (a0)4303; RV64I-ZALRSC-NEXT:    mv a3, a14304; RV64I-ZALRSC-NEXT:    sc.d a3, a3, (a0)4305; RV64I-ZALRSC-NEXT:    bnez a3, .LBB36_14306; RV64I-ZALRSC-NEXT:  # %bb.2:4307; RV64I-ZALRSC-NEXT:    mv a0, a24308; RV64I-ZALRSC-NEXT:    ret4309  %1 = atomicrmw xchg ptr %a, i64 %b monotonic4310  ret i64 %14311}4312 4313define signext i64 @atomicrmw_add_i64_monotonic(ptr %a, i64 %b) nounwind {4314; RV32I-LABEL: atomicrmw_add_i64_monotonic:4315; RV32I:       # %bb.0:4316; RV32I-NEXT:    addi sp, sp, -164317; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4318; RV32I-NEXT:    li a3, 04319; RV32I-NEXT:    call __atomic_fetch_add_84320; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4321; RV32I-NEXT:    addi sp, sp, 164322; RV32I-NEXT:    ret4323;4324; RV32IA-LABEL: atomicrmw_add_i64_monotonic:4325; RV32IA:       # %bb.0:4326; RV32IA-NEXT:    addi sp, sp, -164327; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4328; RV32IA-NEXT:    li a3, 04329; RV32IA-NEXT:    call __atomic_fetch_add_84330; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4331; RV32IA-NEXT:    addi sp, sp, 164332; RV32IA-NEXT:    ret4333;4334; RV32I-ZALRSC-LABEL: atomicrmw_add_i64_monotonic:4335; RV32I-ZALRSC:       # %bb.0:4336; RV32I-ZALRSC-NEXT:    addi sp, sp, -164337; RV32I-ZALRSC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4338; RV32I-ZALRSC-NEXT:    li a3, 04339; RV32I-ZALRSC-NEXT:    call __atomic_fetch_add_84340; RV32I-ZALRSC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4341; RV32I-ZALRSC-NEXT:    addi sp, sp, 164342; RV32I-ZALRSC-NEXT:    ret4343;4344; RV64I-LABEL: atomicrmw_add_i64_monotonic:4345; RV64I:       # %bb.0:4346; RV64I-NEXT:    addi sp, sp, -164347; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4348; RV64I-NEXT:    li a2, 04349; RV64I-NEXT:    call __atomic_fetch_add_84350; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4351; RV64I-NEXT:    addi sp, sp, 164352; RV64I-NEXT:    ret4353;4354; RV64IA-LABEL: atomicrmw_add_i64_monotonic:4355; RV64IA:       # %bb.0:4356; RV64IA-NEXT:    amoadd.d a0, a1, (a0)4357; RV64IA-NEXT:    ret4358;4359; RV64I-ZALRSC-LABEL: atomicrmw_add_i64_monotonic:4360; RV64I-ZALRSC:       # %bb.0:4361; RV64I-ZALRSC-NEXT:  .LBB37_1: # =>This Inner Loop Header: Depth=14362; RV64I-ZALRSC-NEXT:    lr.d a2, (a0)4363; RV64I-ZALRSC-NEXT:    add a3, a2, a14364; RV64I-ZALRSC-NEXT:    sc.d a3, a3, (a0)4365; RV64I-ZALRSC-NEXT:    bnez a3, .LBB37_14366; RV64I-ZALRSC-NEXT:  # %bb.2:4367; RV64I-ZALRSC-NEXT:    mv a0, a24368; RV64I-ZALRSC-NEXT:    ret4369  %1 = atomicrmw add ptr %a, i64 %b monotonic4370  ret i64 %14371}4372 4373define signext i64 @atomicrmw_sub_i64_monotonic(ptr %a, i64 %b) nounwind {4374; RV32I-LABEL: atomicrmw_sub_i64_monotonic:4375; RV32I:       # %bb.0:4376; RV32I-NEXT:    addi sp, sp, -164377; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4378; RV32I-NEXT:    li a3, 04379; RV32I-NEXT:    call __atomic_fetch_sub_84380; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4381; RV32I-NEXT:    addi sp, sp, 164382; RV32I-NEXT:    ret4383;4384; RV32IA-LABEL: atomicrmw_sub_i64_monotonic:4385; RV32IA:       # %bb.0:4386; RV32IA-NEXT:    addi sp, sp, -164387; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4388; RV32IA-NEXT:    li a3, 04389; RV32IA-NEXT:    call __atomic_fetch_sub_84390; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4391; RV32IA-NEXT:    addi sp, sp, 164392; RV32IA-NEXT:    ret4393;4394; RV32I-ZALRSC-LABEL: atomicrmw_sub_i64_monotonic:4395; RV32I-ZALRSC:       # %bb.0:4396; RV32I-ZALRSC-NEXT:    addi sp, sp, -164397; RV32I-ZALRSC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4398; RV32I-ZALRSC-NEXT:    li a3, 04399; RV32I-ZALRSC-NEXT:    call __atomic_fetch_sub_84400; RV32I-ZALRSC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4401; RV32I-ZALRSC-NEXT:    addi sp, sp, 164402; RV32I-ZALRSC-NEXT:    ret4403;4404; RV64I-LABEL: atomicrmw_sub_i64_monotonic:4405; RV64I:       # %bb.0:4406; RV64I-NEXT:    addi sp, sp, -164407; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4408; RV64I-NEXT:    li a2, 04409; RV64I-NEXT:    call __atomic_fetch_sub_84410; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4411; RV64I-NEXT:    addi sp, sp, 164412; RV64I-NEXT:    ret4413;4414; RV64IA-LABEL: atomicrmw_sub_i64_monotonic:4415; RV64IA:       # %bb.0:4416; RV64IA-NEXT:    neg a1, a14417; RV64IA-NEXT:    amoadd.d a0, a1, (a0)4418; RV64IA-NEXT:    ret4419;4420; RV64I-ZALRSC-LABEL: atomicrmw_sub_i64_monotonic:4421; RV64I-ZALRSC:       # %bb.0:4422; RV64I-ZALRSC-NEXT:  .LBB38_1: # =>This Inner Loop Header: Depth=14423; RV64I-ZALRSC-NEXT:    lr.d a2, (a0)4424; RV64I-ZALRSC-NEXT:    sub a3, a2, a14425; RV64I-ZALRSC-NEXT:    sc.d a3, a3, (a0)4426; RV64I-ZALRSC-NEXT:    bnez a3, .LBB38_14427; RV64I-ZALRSC-NEXT:  # %bb.2:4428; RV64I-ZALRSC-NEXT:    mv a0, a24429; RV64I-ZALRSC-NEXT:    ret4430  %1 = atomicrmw sub ptr %a, i64 %b monotonic4431  ret i64 %14432}4433 4434define signext i64 @atomicrmw_and_i64_monotonic(ptr %a, i64 %b) nounwind {4435; RV32I-LABEL: atomicrmw_and_i64_monotonic:4436; RV32I:       # %bb.0:4437; RV32I-NEXT:    addi sp, sp, -164438; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4439; RV32I-NEXT:    li a3, 04440; RV32I-NEXT:    call __atomic_fetch_and_84441; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4442; RV32I-NEXT:    addi sp, sp, 164443; RV32I-NEXT:    ret4444;4445; RV32IA-LABEL: atomicrmw_and_i64_monotonic:4446; RV32IA:       # %bb.0:4447; RV32IA-NEXT:    addi sp, sp, -164448; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4449; RV32IA-NEXT:    li a3, 04450; RV32IA-NEXT:    call __atomic_fetch_and_84451; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4452; RV32IA-NEXT:    addi sp, sp, 164453; RV32IA-NEXT:    ret4454;4455; RV32I-ZALRSC-LABEL: atomicrmw_and_i64_monotonic:4456; RV32I-ZALRSC:       # %bb.0:4457; RV32I-ZALRSC-NEXT:    addi sp, sp, -164458; RV32I-ZALRSC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4459; RV32I-ZALRSC-NEXT:    li a3, 04460; RV32I-ZALRSC-NEXT:    call __atomic_fetch_and_84461; RV32I-ZALRSC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4462; RV32I-ZALRSC-NEXT:    addi sp, sp, 164463; RV32I-ZALRSC-NEXT:    ret4464;4465; RV64I-LABEL: atomicrmw_and_i64_monotonic:4466; RV64I:       # %bb.0:4467; RV64I-NEXT:    addi sp, sp, -164468; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4469; RV64I-NEXT:    li a2, 04470; RV64I-NEXT:    call __atomic_fetch_and_84471; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4472; RV64I-NEXT:    addi sp, sp, 164473; RV64I-NEXT:    ret4474;4475; RV64IA-LABEL: atomicrmw_and_i64_monotonic:4476; RV64IA:       # %bb.0:4477; RV64IA-NEXT:    amoand.d a0, a1, (a0)4478; RV64IA-NEXT:    ret4479;4480; RV64I-ZALRSC-LABEL: atomicrmw_and_i64_monotonic:4481; RV64I-ZALRSC:       # %bb.0:4482; RV64I-ZALRSC-NEXT:  .LBB39_1: # =>This Inner Loop Header: Depth=14483; RV64I-ZALRSC-NEXT:    lr.d a2, (a0)4484; RV64I-ZALRSC-NEXT:    and a3, a2, a14485; RV64I-ZALRSC-NEXT:    sc.d a3, a3, (a0)4486; RV64I-ZALRSC-NEXT:    bnez a3, .LBB39_14487; RV64I-ZALRSC-NEXT:  # %bb.2:4488; RV64I-ZALRSC-NEXT:    mv a0, a24489; RV64I-ZALRSC-NEXT:    ret4490  %1 = atomicrmw and ptr %a, i64 %b monotonic4491  ret i64 %14492}4493 4494define signext i64 @atomicrmw_nand_i64_monotonic(ptr %a, i64 %b) nounwind {4495; RV32I-LABEL: atomicrmw_nand_i64_monotonic:4496; RV32I:       # %bb.0:4497; RV32I-NEXT:    addi sp, sp, -164498; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4499; RV32I-NEXT:    li a3, 04500; RV32I-NEXT:    call __atomic_fetch_nand_84501; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4502; RV32I-NEXT:    addi sp, sp, 164503; RV32I-NEXT:    ret4504;4505; RV32IA-LABEL: atomicrmw_nand_i64_monotonic:4506; RV32IA:       # %bb.0:4507; RV32IA-NEXT:    addi sp, sp, -164508; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4509; RV32IA-NEXT:    li a3, 04510; RV32IA-NEXT:    call __atomic_fetch_nand_84511; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4512; RV32IA-NEXT:    addi sp, sp, 164513; RV32IA-NEXT:    ret4514;4515; RV32I-ZALRSC-LABEL: atomicrmw_nand_i64_monotonic:4516; RV32I-ZALRSC:       # %bb.0:4517; RV32I-ZALRSC-NEXT:    addi sp, sp, -164518; RV32I-ZALRSC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4519; RV32I-ZALRSC-NEXT:    li a3, 04520; RV32I-ZALRSC-NEXT:    call __atomic_fetch_nand_84521; RV32I-ZALRSC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4522; RV32I-ZALRSC-NEXT:    addi sp, sp, 164523; RV32I-ZALRSC-NEXT:    ret4524;4525; RV64I-LABEL: atomicrmw_nand_i64_monotonic:4526; RV64I:       # %bb.0:4527; RV64I-NEXT:    addi sp, sp, -164528; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4529; RV64I-NEXT:    li a2, 04530; RV64I-NEXT:    call __atomic_fetch_nand_84531; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4532; RV64I-NEXT:    addi sp, sp, 164533; RV64I-NEXT:    ret4534;4535; RV64IA-NOZACAS-LABEL: atomicrmw_nand_i64_monotonic:4536; RV64IA-NOZACAS:       # %bb.0:4537; RV64IA-NOZACAS-NEXT:  .LBB40_1: # =>This Inner Loop Header: Depth=14538; RV64IA-NOZACAS-NEXT:    lr.d a2, (a0)4539; RV64IA-NOZACAS-NEXT:    and a3, a2, a14540; RV64IA-NOZACAS-NEXT:    not a3, a34541; RV64IA-NOZACAS-NEXT:    sc.d a3, a3, (a0)4542; RV64IA-NOZACAS-NEXT:    bnez a3, .LBB40_14543; RV64IA-NOZACAS-NEXT:  # %bb.2:4544; RV64IA-NOZACAS-NEXT:    mv a0, a24545; RV64IA-NOZACAS-NEXT:    ret4546;4547; RV64IA-ZACAS-LABEL: atomicrmw_nand_i64_monotonic:4548; RV64IA-ZACAS:       # %bb.0:4549; RV64IA-ZACAS-NEXT:    mv a2, a04550; RV64IA-ZACAS-NEXT:    ld a0, 0(a0)4551; RV64IA-ZACAS-NEXT:  .LBB40_1: # %atomicrmw.start4552; RV64IA-ZACAS-NEXT:    # =>This Inner Loop Header: Depth=14553; RV64IA-ZACAS-NEXT:    mv a3, a04554; RV64IA-ZACAS-NEXT:    and a4, a0, a14555; RV64IA-ZACAS-NEXT:    not a4, a44556; RV64IA-ZACAS-NEXT:    amocas.d a0, a4, (a2)4557; RV64IA-ZACAS-NEXT:    bne a0, a3, .LBB40_14558; RV64IA-ZACAS-NEXT:  # %bb.2: # %atomicrmw.end4559; RV64IA-ZACAS-NEXT:    ret4560;4561; RV64I-ZALRSC-LABEL: atomicrmw_nand_i64_monotonic:4562; RV64I-ZALRSC:       # %bb.0:4563; RV64I-ZALRSC-NEXT:  .LBB40_1: # =>This Inner Loop Header: Depth=14564; RV64I-ZALRSC-NEXT:    lr.d a2, (a0)4565; RV64I-ZALRSC-NEXT:    and a3, a2, a14566; RV64I-ZALRSC-NEXT:    not a3, a34567; RV64I-ZALRSC-NEXT:    sc.d a3, a3, (a0)4568; RV64I-ZALRSC-NEXT:    bnez a3, .LBB40_14569; RV64I-ZALRSC-NEXT:  # %bb.2:4570; RV64I-ZALRSC-NEXT:    mv a0, a24571; RV64I-ZALRSC-NEXT:    ret4572  %1 = atomicrmw nand ptr %a, i64 %b monotonic4573  ret i64 %14574}4575 4576define signext i64 @atomicrmw_or_i64_monotonic(ptr %a, i64 %b) nounwind {4577; RV32I-LABEL: atomicrmw_or_i64_monotonic:4578; RV32I:       # %bb.0:4579; RV32I-NEXT:    addi sp, sp, -164580; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4581; RV32I-NEXT:    li a3, 04582; RV32I-NEXT:    call __atomic_fetch_or_84583; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4584; RV32I-NEXT:    addi sp, sp, 164585; RV32I-NEXT:    ret4586;4587; RV32IA-LABEL: atomicrmw_or_i64_monotonic:4588; RV32IA:       # %bb.0:4589; RV32IA-NEXT:    addi sp, sp, -164590; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4591; RV32IA-NEXT:    li a3, 04592; RV32IA-NEXT:    call __atomic_fetch_or_84593; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4594; RV32IA-NEXT:    addi sp, sp, 164595; RV32IA-NEXT:    ret4596;4597; RV32I-ZALRSC-LABEL: atomicrmw_or_i64_monotonic:4598; RV32I-ZALRSC:       # %bb.0:4599; RV32I-ZALRSC-NEXT:    addi sp, sp, -164600; RV32I-ZALRSC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4601; RV32I-ZALRSC-NEXT:    li a3, 04602; RV32I-ZALRSC-NEXT:    call __atomic_fetch_or_84603; RV32I-ZALRSC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4604; RV32I-ZALRSC-NEXT:    addi sp, sp, 164605; RV32I-ZALRSC-NEXT:    ret4606;4607; RV64I-LABEL: atomicrmw_or_i64_monotonic:4608; RV64I:       # %bb.0:4609; RV64I-NEXT:    addi sp, sp, -164610; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4611; RV64I-NEXT:    li a2, 04612; RV64I-NEXT:    call __atomic_fetch_or_84613; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4614; RV64I-NEXT:    addi sp, sp, 164615; RV64I-NEXT:    ret4616;4617; RV64IA-LABEL: atomicrmw_or_i64_monotonic:4618; RV64IA:       # %bb.0:4619; RV64IA-NEXT:    amoor.d a0, a1, (a0)4620; RV64IA-NEXT:    ret4621;4622; RV64I-ZALRSC-LABEL: atomicrmw_or_i64_monotonic:4623; RV64I-ZALRSC:       # %bb.0:4624; RV64I-ZALRSC-NEXT:  .LBB41_1: # =>This Inner Loop Header: Depth=14625; RV64I-ZALRSC-NEXT:    lr.d a2, (a0)4626; RV64I-ZALRSC-NEXT:    or a3, a2, a14627; RV64I-ZALRSC-NEXT:    sc.d a3, a3, (a0)4628; RV64I-ZALRSC-NEXT:    bnez a3, .LBB41_14629; RV64I-ZALRSC-NEXT:  # %bb.2:4630; RV64I-ZALRSC-NEXT:    mv a0, a24631; RV64I-ZALRSC-NEXT:    ret4632  %1 = atomicrmw or ptr %a, i64 %b monotonic4633  ret i64 %14634}4635 4636define signext i64 @atomicrmw_xor_i64_monotonic(ptr %a, i64 %b) nounwind {4637; RV32I-LABEL: atomicrmw_xor_i64_monotonic:4638; RV32I:       # %bb.0:4639; RV32I-NEXT:    addi sp, sp, -164640; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4641; RV32I-NEXT:    li a3, 04642; RV32I-NEXT:    call __atomic_fetch_xor_84643; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4644; RV32I-NEXT:    addi sp, sp, 164645; RV32I-NEXT:    ret4646;4647; RV32IA-LABEL: atomicrmw_xor_i64_monotonic:4648; RV32IA:       # %bb.0:4649; RV32IA-NEXT:    addi sp, sp, -164650; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4651; RV32IA-NEXT:    li a3, 04652; RV32IA-NEXT:    call __atomic_fetch_xor_84653; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4654; RV32IA-NEXT:    addi sp, sp, 164655; RV32IA-NEXT:    ret4656;4657; RV32I-ZALRSC-LABEL: atomicrmw_xor_i64_monotonic:4658; RV32I-ZALRSC:       # %bb.0:4659; RV32I-ZALRSC-NEXT:    addi sp, sp, -164660; RV32I-ZALRSC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4661; RV32I-ZALRSC-NEXT:    li a3, 04662; RV32I-ZALRSC-NEXT:    call __atomic_fetch_xor_84663; RV32I-ZALRSC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4664; RV32I-ZALRSC-NEXT:    addi sp, sp, 164665; RV32I-ZALRSC-NEXT:    ret4666;4667; RV64I-LABEL: atomicrmw_xor_i64_monotonic:4668; RV64I:       # %bb.0:4669; RV64I-NEXT:    addi sp, sp, -164670; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4671; RV64I-NEXT:    li a2, 04672; RV64I-NEXT:    call __atomic_fetch_xor_84673; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4674; RV64I-NEXT:    addi sp, sp, 164675; RV64I-NEXT:    ret4676;4677; RV64IA-LABEL: atomicrmw_xor_i64_monotonic:4678; RV64IA:       # %bb.0:4679; RV64IA-NEXT:    amoxor.d a0, a1, (a0)4680; RV64IA-NEXT:    ret4681;4682; RV64I-ZALRSC-LABEL: atomicrmw_xor_i64_monotonic:4683; RV64I-ZALRSC:       # %bb.0:4684; RV64I-ZALRSC-NEXT:  .LBB42_1: # =>This Inner Loop Header: Depth=14685; RV64I-ZALRSC-NEXT:    lr.d a2, (a0)4686; RV64I-ZALRSC-NEXT:    xor a3, a2, a14687; RV64I-ZALRSC-NEXT:    sc.d a3, a3, (a0)4688; RV64I-ZALRSC-NEXT:    bnez a3, .LBB42_14689; RV64I-ZALRSC-NEXT:  # %bb.2:4690; RV64I-ZALRSC-NEXT:    mv a0, a24691; RV64I-ZALRSC-NEXT:    ret4692  %1 = atomicrmw xor ptr %a, i64 %b monotonic4693  ret i64 %14694}4695 4696define signext i64 @atomicrmw_max_i64_monotonic(ptr %a, i64 %b) nounwind {4697; RV32I-LABEL: atomicrmw_max_i64_monotonic:4698; RV32I:       # %bb.0:4699; RV32I-NEXT:    addi sp, sp, -324700; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill4701; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill4702; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill4703; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill4704; RV32I-NEXT:    mv s0, a24705; RV32I-NEXT:    mv s1, a04706; RV32I-NEXT:    lw a4, 0(a0)4707; RV32I-NEXT:    lw a5, 4(a0)4708; RV32I-NEXT:    mv s2, a14709; RV32I-NEXT:    j .LBB43_24710; RV32I-NEXT:  .LBB43_1: # %atomicrmw.start4711; RV32I-NEXT:    # in Loop: Header=BB43_2 Depth=14712; RV32I-NEXT:    sw a4, 8(sp)4713; RV32I-NEXT:    sw a5, 12(sp)4714; RV32I-NEXT:    addi a1, sp, 84715; RV32I-NEXT:    mv a0, s14716; RV32I-NEXT:    li a4, 04717; RV32I-NEXT:    li a5, 04718; RV32I-NEXT:    call __atomic_compare_exchange_84719; RV32I-NEXT:    lw a4, 8(sp)4720; RV32I-NEXT:    lw a5, 12(sp)4721; RV32I-NEXT:    bnez a0, .LBB43_74722; RV32I-NEXT:  .LBB43_2: # %atomicrmw.start4723; RV32I-NEXT:    # =>This Inner Loop Header: Depth=14724; RV32I-NEXT:    beq a5, s0, .LBB43_44725; RV32I-NEXT:  # %bb.3: # %atomicrmw.start4726; RV32I-NEXT:    # in Loop: Header=BB43_2 Depth=14727; RV32I-NEXT:    slt a0, s0, a54728; RV32I-NEXT:    j .LBB43_54729; RV32I-NEXT:  .LBB43_4: # in Loop: Header=BB43_2 Depth=14730; RV32I-NEXT:    sltu a0, s2, a44731; RV32I-NEXT:  .LBB43_5: # %atomicrmw.start4732; RV32I-NEXT:    # in Loop: Header=BB43_2 Depth=14733; RV32I-NEXT:    mv a2, a44734; RV32I-NEXT:    mv a3, a54735; RV32I-NEXT:    bnez a0, .LBB43_14736; RV32I-NEXT:  # %bb.6: # %atomicrmw.start4737; RV32I-NEXT:    # in Loop: Header=BB43_2 Depth=14738; RV32I-NEXT:    mv a2, s24739; RV32I-NEXT:    mv a3, s04740; RV32I-NEXT:    j .LBB43_14741; RV32I-NEXT:  .LBB43_7: # %atomicrmw.end4742; RV32I-NEXT:    mv a0, a44743; RV32I-NEXT:    mv a1, a54744; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload4745; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload4746; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload4747; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload4748; RV32I-NEXT:    addi sp, sp, 324749; RV32I-NEXT:    ret4750;4751; RV32IA-LABEL: atomicrmw_max_i64_monotonic:4752; RV32IA:       # %bb.0:4753; RV32IA-NEXT:    addi sp, sp, -324754; RV32IA-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill4755; RV32IA-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill4756; RV32IA-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill4757; RV32IA-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill4758; RV32IA-NEXT:    mv s0, a24759; RV32IA-NEXT:    mv s1, a04760; RV32IA-NEXT:    lw a4, 0(a0)4761; RV32IA-NEXT:    lw a5, 4(a0)4762; RV32IA-NEXT:    mv s2, a14763; RV32IA-NEXT:    j .LBB43_24764; RV32IA-NEXT:  .LBB43_1: # %atomicrmw.start4765; RV32IA-NEXT:    # in Loop: Header=BB43_2 Depth=14766; RV32IA-NEXT:    sw a4, 8(sp)4767; RV32IA-NEXT:    sw a5, 12(sp)4768; RV32IA-NEXT:    addi a1, sp, 84769; RV32IA-NEXT:    mv a0, s14770; RV32IA-NEXT:    li a4, 04771; RV32IA-NEXT:    li a5, 04772; RV32IA-NEXT:    call __atomic_compare_exchange_84773; RV32IA-NEXT:    lw a4, 8(sp)4774; RV32IA-NEXT:    lw a5, 12(sp)4775; RV32IA-NEXT:    bnez a0, .LBB43_74776; RV32IA-NEXT:  .LBB43_2: # %atomicrmw.start4777; RV32IA-NEXT:    # =>This Inner Loop Header: Depth=14778; RV32IA-NEXT:    beq a5, s0, .LBB43_44779; RV32IA-NEXT:  # %bb.3: # %atomicrmw.start4780; RV32IA-NEXT:    # in Loop: Header=BB43_2 Depth=14781; RV32IA-NEXT:    slt a0, s0, a54782; RV32IA-NEXT:    j .LBB43_54783; RV32IA-NEXT:  .LBB43_4: # in Loop: Header=BB43_2 Depth=14784; RV32IA-NEXT:    sltu a0, s2, a44785; RV32IA-NEXT:  .LBB43_5: # %atomicrmw.start4786; RV32IA-NEXT:    # in Loop: Header=BB43_2 Depth=14787; RV32IA-NEXT:    mv a2, a44788; RV32IA-NEXT:    mv a3, a54789; RV32IA-NEXT:    bnez a0, .LBB43_14790; RV32IA-NEXT:  # %bb.6: # %atomicrmw.start4791; RV32IA-NEXT:    # in Loop: Header=BB43_2 Depth=14792; RV32IA-NEXT:    mv a2, s24793; RV32IA-NEXT:    mv a3, s04794; RV32IA-NEXT:    j .LBB43_14795; RV32IA-NEXT:  .LBB43_7: # %atomicrmw.end4796; RV32IA-NEXT:    mv a0, a44797; RV32IA-NEXT:    mv a1, a54798; RV32IA-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload4799; RV32IA-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload4800; RV32IA-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload4801; RV32IA-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload4802; RV32IA-NEXT:    addi sp, sp, 324803; RV32IA-NEXT:    ret4804;4805; RV32I-ZALRSC-LABEL: atomicrmw_max_i64_monotonic:4806; RV32I-ZALRSC:       # %bb.0:4807; RV32I-ZALRSC-NEXT:    addi sp, sp, -324808; RV32I-ZALRSC-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill4809; RV32I-ZALRSC-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill4810; RV32I-ZALRSC-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill4811; RV32I-ZALRSC-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill4812; RV32I-ZALRSC-NEXT:    mv s0, a24813; RV32I-ZALRSC-NEXT:    mv s1, a04814; RV32I-ZALRSC-NEXT:    lw a4, 0(a0)4815; RV32I-ZALRSC-NEXT:    lw a5, 4(a0)4816; RV32I-ZALRSC-NEXT:    mv s2, a14817; RV32I-ZALRSC-NEXT:    j .LBB43_24818; RV32I-ZALRSC-NEXT:  .LBB43_1: # %atomicrmw.start4819; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB43_2 Depth=14820; RV32I-ZALRSC-NEXT:    sw a4, 8(sp)4821; RV32I-ZALRSC-NEXT:    sw a5, 12(sp)4822; RV32I-ZALRSC-NEXT:    addi a1, sp, 84823; RV32I-ZALRSC-NEXT:    mv a0, s14824; RV32I-ZALRSC-NEXT:    li a4, 04825; RV32I-ZALRSC-NEXT:    li a5, 04826; RV32I-ZALRSC-NEXT:    call __atomic_compare_exchange_84827; RV32I-ZALRSC-NEXT:    lw a4, 8(sp)4828; RV32I-ZALRSC-NEXT:    lw a5, 12(sp)4829; RV32I-ZALRSC-NEXT:    bnez a0, .LBB43_74830; RV32I-ZALRSC-NEXT:  .LBB43_2: # %atomicrmw.start4831; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=14832; RV32I-ZALRSC-NEXT:    beq a5, s0, .LBB43_44833; RV32I-ZALRSC-NEXT:  # %bb.3: # %atomicrmw.start4834; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB43_2 Depth=14835; RV32I-ZALRSC-NEXT:    slt a0, s0, a54836; RV32I-ZALRSC-NEXT:    j .LBB43_54837; RV32I-ZALRSC-NEXT:  .LBB43_4: # in Loop: Header=BB43_2 Depth=14838; RV32I-ZALRSC-NEXT:    sltu a0, s2, a44839; RV32I-ZALRSC-NEXT:  .LBB43_5: # %atomicrmw.start4840; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB43_2 Depth=14841; RV32I-ZALRSC-NEXT:    mv a2, a44842; RV32I-ZALRSC-NEXT:    mv a3, a54843; RV32I-ZALRSC-NEXT:    bnez a0, .LBB43_14844; RV32I-ZALRSC-NEXT:  # %bb.6: # %atomicrmw.start4845; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB43_2 Depth=14846; RV32I-ZALRSC-NEXT:    mv a2, s24847; RV32I-ZALRSC-NEXT:    mv a3, s04848; RV32I-ZALRSC-NEXT:    j .LBB43_14849; RV32I-ZALRSC-NEXT:  .LBB43_7: # %atomicrmw.end4850; RV32I-ZALRSC-NEXT:    mv a0, a44851; RV32I-ZALRSC-NEXT:    mv a1, a54852; RV32I-ZALRSC-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload4853; RV32I-ZALRSC-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload4854; RV32I-ZALRSC-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload4855; RV32I-ZALRSC-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload4856; RV32I-ZALRSC-NEXT:    addi sp, sp, 324857; RV32I-ZALRSC-NEXT:    ret4858;4859; RV64I-LABEL: atomicrmw_max_i64_monotonic:4860; RV64I:       # %bb.0:4861; RV64I-NEXT:    addi sp, sp, -324862; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill4863; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill4864; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill4865; RV64I-NEXT:    mv s0, a04866; RV64I-NEXT:    ld a3, 0(a0)4867; RV64I-NEXT:    mv s1, a14868; RV64I-NEXT:    j .LBB43_24869; RV64I-NEXT:  .LBB43_1: # %atomicrmw.start4870; RV64I-NEXT:    # in Loop: Header=BB43_2 Depth=14871; RV64I-NEXT:    sd a3, 0(sp)4872; RV64I-NEXT:    mv a1, sp4873; RV64I-NEXT:    mv a0, s04874; RV64I-NEXT:    li a3, 04875; RV64I-NEXT:    li a4, 04876; RV64I-NEXT:    call __atomic_compare_exchange_84877; RV64I-NEXT:    ld a3, 0(sp)4878; RV64I-NEXT:    bnez a0, .LBB43_44879; RV64I-NEXT:  .LBB43_2: # %atomicrmw.start4880; RV64I-NEXT:    # =>This Inner Loop Header: Depth=14881; RV64I-NEXT:    mv a2, a34882; RV64I-NEXT:    blt s1, a3, .LBB43_14883; RV64I-NEXT:  # %bb.3: # %atomicrmw.start4884; RV64I-NEXT:    # in Loop: Header=BB43_2 Depth=14885; RV64I-NEXT:    mv a2, s14886; RV64I-NEXT:    j .LBB43_14887; RV64I-NEXT:  .LBB43_4: # %atomicrmw.end4888; RV64I-NEXT:    mv a0, a34889; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload4890; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload4891; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload4892; RV64I-NEXT:    addi sp, sp, 324893; RV64I-NEXT:    ret4894;4895; RV64IA-LABEL: atomicrmw_max_i64_monotonic:4896; RV64IA:       # %bb.0:4897; RV64IA-NEXT:    amomax.d a0, a1, (a0)4898; RV64IA-NEXT:    ret4899;4900; RV64I-ZALRSC-LABEL: atomicrmw_max_i64_monotonic:4901; RV64I-ZALRSC:       # %bb.0:4902; RV64I-ZALRSC-NEXT:  .LBB43_1: # =>This Inner Loop Header: Depth=14903; RV64I-ZALRSC-NEXT:    lr.d a2, (a0)4904; RV64I-ZALRSC-NEXT:    mv a3, a24905; RV64I-ZALRSC-NEXT:    bge a3, a1, .LBB43_34906; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB43_1 Depth=14907; RV64I-ZALRSC-NEXT:    mv a3, a14908; RV64I-ZALRSC-NEXT:  .LBB43_3: # in Loop: Header=BB43_1 Depth=14909; RV64I-ZALRSC-NEXT:    sc.d a3, a3, (a0)4910; RV64I-ZALRSC-NEXT:    bnez a3, .LBB43_14911; RV64I-ZALRSC-NEXT:  # %bb.4:4912; RV64I-ZALRSC-NEXT:    mv a0, a24913; RV64I-ZALRSC-NEXT:    ret4914  %1 = atomicrmw max ptr %a, i64 %b monotonic4915  ret i64 %14916}4917 4918define signext i64 @atomicrmw_min_i64_monotonic(ptr %a, i64 %b) nounwind {4919; RV32I-LABEL: atomicrmw_min_i64_monotonic:4920; RV32I:       # %bb.0:4921; RV32I-NEXT:    addi sp, sp, -324922; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill4923; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill4924; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill4925; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill4926; RV32I-NEXT:    mv s0, a24927; RV32I-NEXT:    mv s1, a04928; RV32I-NEXT:    lw a4, 0(a0)4929; RV32I-NEXT:    lw a5, 4(a0)4930; RV32I-NEXT:    mv s2, a14931; RV32I-NEXT:    j .LBB44_24932; RV32I-NEXT:  .LBB44_1: # %atomicrmw.start4933; RV32I-NEXT:    # in Loop: Header=BB44_2 Depth=14934; RV32I-NEXT:    sw a4, 8(sp)4935; RV32I-NEXT:    sw a5, 12(sp)4936; RV32I-NEXT:    addi a1, sp, 84937; RV32I-NEXT:    mv a0, s14938; RV32I-NEXT:    li a4, 04939; RV32I-NEXT:    li a5, 04940; RV32I-NEXT:    call __atomic_compare_exchange_84941; RV32I-NEXT:    lw a4, 8(sp)4942; RV32I-NEXT:    lw a5, 12(sp)4943; RV32I-NEXT:    bnez a0, .LBB44_74944; RV32I-NEXT:  .LBB44_2: # %atomicrmw.start4945; RV32I-NEXT:    # =>This Inner Loop Header: Depth=14946; RV32I-NEXT:    beq a5, s0, .LBB44_44947; RV32I-NEXT:  # %bb.3: # %atomicrmw.start4948; RV32I-NEXT:    # in Loop: Header=BB44_2 Depth=14949; RV32I-NEXT:    slt a0, s0, a54950; RV32I-NEXT:    j .LBB44_54951; RV32I-NEXT:  .LBB44_4: # in Loop: Header=BB44_2 Depth=14952; RV32I-NEXT:    sltu a0, s2, a44953; RV32I-NEXT:  .LBB44_5: # %atomicrmw.start4954; RV32I-NEXT:    # in Loop: Header=BB44_2 Depth=14955; RV32I-NEXT:    mv a2, a44956; RV32I-NEXT:    mv a3, a54957; RV32I-NEXT:    beqz a0, .LBB44_14958; RV32I-NEXT:  # %bb.6: # %atomicrmw.start4959; RV32I-NEXT:    # in Loop: Header=BB44_2 Depth=14960; RV32I-NEXT:    mv a2, s24961; RV32I-NEXT:    mv a3, s04962; RV32I-NEXT:    j .LBB44_14963; RV32I-NEXT:  .LBB44_7: # %atomicrmw.end4964; RV32I-NEXT:    mv a0, a44965; RV32I-NEXT:    mv a1, a54966; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload4967; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload4968; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload4969; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload4970; RV32I-NEXT:    addi sp, sp, 324971; RV32I-NEXT:    ret4972;4973; RV32IA-LABEL: atomicrmw_min_i64_monotonic:4974; RV32IA:       # %bb.0:4975; RV32IA-NEXT:    addi sp, sp, -324976; RV32IA-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill4977; RV32IA-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill4978; RV32IA-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill4979; RV32IA-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill4980; RV32IA-NEXT:    mv s0, a24981; RV32IA-NEXT:    mv s1, a04982; RV32IA-NEXT:    lw a4, 0(a0)4983; RV32IA-NEXT:    lw a5, 4(a0)4984; RV32IA-NEXT:    mv s2, a14985; RV32IA-NEXT:    j .LBB44_24986; RV32IA-NEXT:  .LBB44_1: # %atomicrmw.start4987; RV32IA-NEXT:    # in Loop: Header=BB44_2 Depth=14988; RV32IA-NEXT:    sw a4, 8(sp)4989; RV32IA-NEXT:    sw a5, 12(sp)4990; RV32IA-NEXT:    addi a1, sp, 84991; RV32IA-NEXT:    mv a0, s14992; RV32IA-NEXT:    li a4, 04993; RV32IA-NEXT:    li a5, 04994; RV32IA-NEXT:    call __atomic_compare_exchange_84995; RV32IA-NEXT:    lw a4, 8(sp)4996; RV32IA-NEXT:    lw a5, 12(sp)4997; RV32IA-NEXT:    bnez a0, .LBB44_74998; RV32IA-NEXT:  .LBB44_2: # %atomicrmw.start4999; RV32IA-NEXT:    # =>This Inner Loop Header: Depth=15000; RV32IA-NEXT:    beq a5, s0, .LBB44_45001; RV32IA-NEXT:  # %bb.3: # %atomicrmw.start5002; RV32IA-NEXT:    # in Loop: Header=BB44_2 Depth=15003; RV32IA-NEXT:    slt a0, s0, a55004; RV32IA-NEXT:    j .LBB44_55005; RV32IA-NEXT:  .LBB44_4: # in Loop: Header=BB44_2 Depth=15006; RV32IA-NEXT:    sltu a0, s2, a45007; RV32IA-NEXT:  .LBB44_5: # %atomicrmw.start5008; RV32IA-NEXT:    # in Loop: Header=BB44_2 Depth=15009; RV32IA-NEXT:    mv a2, a45010; RV32IA-NEXT:    mv a3, a55011; RV32IA-NEXT:    beqz a0, .LBB44_15012; RV32IA-NEXT:  # %bb.6: # %atomicrmw.start5013; RV32IA-NEXT:    # in Loop: Header=BB44_2 Depth=15014; RV32IA-NEXT:    mv a2, s25015; RV32IA-NEXT:    mv a3, s05016; RV32IA-NEXT:    j .LBB44_15017; RV32IA-NEXT:  .LBB44_7: # %atomicrmw.end5018; RV32IA-NEXT:    mv a0, a45019; RV32IA-NEXT:    mv a1, a55020; RV32IA-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload5021; RV32IA-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload5022; RV32IA-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload5023; RV32IA-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload5024; RV32IA-NEXT:    addi sp, sp, 325025; RV32IA-NEXT:    ret5026;5027; RV32I-ZALRSC-LABEL: atomicrmw_min_i64_monotonic:5028; RV32I-ZALRSC:       # %bb.0:5029; RV32I-ZALRSC-NEXT:    addi sp, sp, -325030; RV32I-ZALRSC-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill5031; RV32I-ZALRSC-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill5032; RV32I-ZALRSC-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill5033; RV32I-ZALRSC-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill5034; RV32I-ZALRSC-NEXT:    mv s0, a25035; RV32I-ZALRSC-NEXT:    mv s1, a05036; RV32I-ZALRSC-NEXT:    lw a4, 0(a0)5037; RV32I-ZALRSC-NEXT:    lw a5, 4(a0)5038; RV32I-ZALRSC-NEXT:    mv s2, a15039; RV32I-ZALRSC-NEXT:    j .LBB44_25040; RV32I-ZALRSC-NEXT:  .LBB44_1: # %atomicrmw.start5041; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB44_2 Depth=15042; RV32I-ZALRSC-NEXT:    sw a4, 8(sp)5043; RV32I-ZALRSC-NEXT:    sw a5, 12(sp)5044; RV32I-ZALRSC-NEXT:    addi a1, sp, 85045; RV32I-ZALRSC-NEXT:    mv a0, s15046; RV32I-ZALRSC-NEXT:    li a4, 05047; RV32I-ZALRSC-NEXT:    li a5, 05048; RV32I-ZALRSC-NEXT:    call __atomic_compare_exchange_85049; RV32I-ZALRSC-NEXT:    lw a4, 8(sp)5050; RV32I-ZALRSC-NEXT:    lw a5, 12(sp)5051; RV32I-ZALRSC-NEXT:    bnez a0, .LBB44_75052; RV32I-ZALRSC-NEXT:  .LBB44_2: # %atomicrmw.start5053; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=15054; RV32I-ZALRSC-NEXT:    beq a5, s0, .LBB44_45055; RV32I-ZALRSC-NEXT:  # %bb.3: # %atomicrmw.start5056; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB44_2 Depth=15057; RV32I-ZALRSC-NEXT:    slt a0, s0, a55058; RV32I-ZALRSC-NEXT:    j .LBB44_55059; RV32I-ZALRSC-NEXT:  .LBB44_4: # in Loop: Header=BB44_2 Depth=15060; RV32I-ZALRSC-NEXT:    sltu a0, s2, a45061; RV32I-ZALRSC-NEXT:  .LBB44_5: # %atomicrmw.start5062; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB44_2 Depth=15063; RV32I-ZALRSC-NEXT:    mv a2, a45064; RV32I-ZALRSC-NEXT:    mv a3, a55065; RV32I-ZALRSC-NEXT:    beqz a0, .LBB44_15066; RV32I-ZALRSC-NEXT:  # %bb.6: # %atomicrmw.start5067; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB44_2 Depth=15068; RV32I-ZALRSC-NEXT:    mv a2, s25069; RV32I-ZALRSC-NEXT:    mv a3, s05070; RV32I-ZALRSC-NEXT:    j .LBB44_15071; RV32I-ZALRSC-NEXT:  .LBB44_7: # %atomicrmw.end5072; RV32I-ZALRSC-NEXT:    mv a0, a45073; RV32I-ZALRSC-NEXT:    mv a1, a55074; RV32I-ZALRSC-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload5075; RV32I-ZALRSC-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload5076; RV32I-ZALRSC-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload5077; RV32I-ZALRSC-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload5078; RV32I-ZALRSC-NEXT:    addi sp, sp, 325079; RV32I-ZALRSC-NEXT:    ret5080;5081; RV64I-LABEL: atomicrmw_min_i64_monotonic:5082; RV64I:       # %bb.0:5083; RV64I-NEXT:    addi sp, sp, -325084; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill5085; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill5086; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill5087; RV64I-NEXT:    mv s0, a05088; RV64I-NEXT:    ld a3, 0(a0)5089; RV64I-NEXT:    mv s1, a15090; RV64I-NEXT:    j .LBB44_25091; RV64I-NEXT:  .LBB44_1: # %atomicrmw.start5092; RV64I-NEXT:    # in Loop: Header=BB44_2 Depth=15093; RV64I-NEXT:    sd a3, 0(sp)5094; RV64I-NEXT:    mv a1, sp5095; RV64I-NEXT:    mv a0, s05096; RV64I-NEXT:    li a3, 05097; RV64I-NEXT:    li a4, 05098; RV64I-NEXT:    call __atomic_compare_exchange_85099; RV64I-NEXT:    ld a3, 0(sp)5100; RV64I-NEXT:    bnez a0, .LBB44_45101; RV64I-NEXT:  .LBB44_2: # %atomicrmw.start5102; RV64I-NEXT:    # =>This Inner Loop Header: Depth=15103; RV64I-NEXT:    mv a2, a35104; RV64I-NEXT:    bge s1, a3, .LBB44_15105; RV64I-NEXT:  # %bb.3: # %atomicrmw.start5106; RV64I-NEXT:    # in Loop: Header=BB44_2 Depth=15107; RV64I-NEXT:    mv a2, s15108; RV64I-NEXT:    j .LBB44_15109; RV64I-NEXT:  .LBB44_4: # %atomicrmw.end5110; RV64I-NEXT:    mv a0, a35111; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload5112; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload5113; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload5114; RV64I-NEXT:    addi sp, sp, 325115; RV64I-NEXT:    ret5116;5117; RV64IA-LABEL: atomicrmw_min_i64_monotonic:5118; RV64IA:       # %bb.0:5119; RV64IA-NEXT:    amomin.d a0, a1, (a0)5120; RV64IA-NEXT:    ret5121;5122; RV64I-ZALRSC-LABEL: atomicrmw_min_i64_monotonic:5123; RV64I-ZALRSC:       # %bb.0:5124; RV64I-ZALRSC-NEXT:  .LBB44_1: # =>This Inner Loop Header: Depth=15125; RV64I-ZALRSC-NEXT:    lr.d a2, (a0)5126; RV64I-ZALRSC-NEXT:    mv a3, a25127; RV64I-ZALRSC-NEXT:    bge a1, a3, .LBB44_35128; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB44_1 Depth=15129; RV64I-ZALRSC-NEXT:    mv a3, a15130; RV64I-ZALRSC-NEXT:  .LBB44_3: # in Loop: Header=BB44_1 Depth=15131; RV64I-ZALRSC-NEXT:    sc.d a3, a3, (a0)5132; RV64I-ZALRSC-NEXT:    bnez a3, .LBB44_15133; RV64I-ZALRSC-NEXT:  # %bb.4:5134; RV64I-ZALRSC-NEXT:    mv a0, a25135; RV64I-ZALRSC-NEXT:    ret5136  %1 = atomicrmw min ptr %a, i64 %b monotonic5137  ret i64 %15138}5139 5140define signext i64 @atomicrmw_umax_i64_monotonic(ptr %a, i64 %b) nounwind {5141; RV32I-LABEL: atomicrmw_umax_i64_monotonic:5142; RV32I:       # %bb.0:5143; RV32I-NEXT:    addi sp, sp, -325144; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill5145; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill5146; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill5147; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill5148; RV32I-NEXT:    mv s0, a25149; RV32I-NEXT:    mv s1, a05150; RV32I-NEXT:    lw a4, 0(a0)5151; RV32I-NEXT:    lw a5, 4(a0)5152; RV32I-NEXT:    mv s2, a15153; RV32I-NEXT:    j .LBB45_25154; RV32I-NEXT:  .LBB45_1: # %atomicrmw.start5155; RV32I-NEXT:    # in Loop: Header=BB45_2 Depth=15156; RV32I-NEXT:    sw a4, 8(sp)5157; RV32I-NEXT:    sw a5, 12(sp)5158; RV32I-NEXT:    addi a1, sp, 85159; RV32I-NEXT:    mv a0, s15160; RV32I-NEXT:    li a4, 05161; RV32I-NEXT:    li a5, 05162; RV32I-NEXT:    call __atomic_compare_exchange_85163; RV32I-NEXT:    lw a4, 8(sp)5164; RV32I-NEXT:    lw a5, 12(sp)5165; RV32I-NEXT:    bnez a0, .LBB45_75166; RV32I-NEXT:  .LBB45_2: # %atomicrmw.start5167; RV32I-NEXT:    # =>This Inner Loop Header: Depth=15168; RV32I-NEXT:    beq a5, s0, .LBB45_45169; RV32I-NEXT:  # %bb.3: # %atomicrmw.start5170; RV32I-NEXT:    # in Loop: Header=BB45_2 Depth=15171; RV32I-NEXT:    sltu a0, s0, a55172; RV32I-NEXT:    j .LBB45_55173; RV32I-NEXT:  .LBB45_4: # in Loop: Header=BB45_2 Depth=15174; RV32I-NEXT:    sltu a0, s2, a45175; RV32I-NEXT:  .LBB45_5: # %atomicrmw.start5176; RV32I-NEXT:    # in Loop: Header=BB45_2 Depth=15177; RV32I-NEXT:    mv a2, a45178; RV32I-NEXT:    mv a3, a55179; RV32I-NEXT:    bnez a0, .LBB45_15180; RV32I-NEXT:  # %bb.6: # %atomicrmw.start5181; RV32I-NEXT:    # in Loop: Header=BB45_2 Depth=15182; RV32I-NEXT:    mv a2, s25183; RV32I-NEXT:    mv a3, s05184; RV32I-NEXT:    j .LBB45_15185; RV32I-NEXT:  .LBB45_7: # %atomicrmw.end5186; RV32I-NEXT:    mv a0, a45187; RV32I-NEXT:    mv a1, a55188; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload5189; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload5190; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload5191; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload5192; RV32I-NEXT:    addi sp, sp, 325193; RV32I-NEXT:    ret5194;5195; RV32IA-LABEL: atomicrmw_umax_i64_monotonic:5196; RV32IA:       # %bb.0:5197; RV32IA-NEXT:    addi sp, sp, -325198; RV32IA-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill5199; RV32IA-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill5200; RV32IA-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill5201; RV32IA-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill5202; RV32IA-NEXT:    mv s0, a25203; RV32IA-NEXT:    mv s1, a05204; RV32IA-NEXT:    lw a4, 0(a0)5205; RV32IA-NEXT:    lw a5, 4(a0)5206; RV32IA-NEXT:    mv s2, a15207; RV32IA-NEXT:    j .LBB45_25208; RV32IA-NEXT:  .LBB45_1: # %atomicrmw.start5209; RV32IA-NEXT:    # in Loop: Header=BB45_2 Depth=15210; RV32IA-NEXT:    sw a4, 8(sp)5211; RV32IA-NEXT:    sw a5, 12(sp)5212; RV32IA-NEXT:    addi a1, sp, 85213; RV32IA-NEXT:    mv a0, s15214; RV32IA-NEXT:    li a4, 05215; RV32IA-NEXT:    li a5, 05216; RV32IA-NEXT:    call __atomic_compare_exchange_85217; RV32IA-NEXT:    lw a4, 8(sp)5218; RV32IA-NEXT:    lw a5, 12(sp)5219; RV32IA-NEXT:    bnez a0, .LBB45_75220; RV32IA-NEXT:  .LBB45_2: # %atomicrmw.start5221; RV32IA-NEXT:    # =>This Inner Loop Header: Depth=15222; RV32IA-NEXT:    beq a5, s0, .LBB45_45223; RV32IA-NEXT:  # %bb.3: # %atomicrmw.start5224; RV32IA-NEXT:    # in Loop: Header=BB45_2 Depth=15225; RV32IA-NEXT:    sltu a0, s0, a55226; RV32IA-NEXT:    j .LBB45_55227; RV32IA-NEXT:  .LBB45_4: # in Loop: Header=BB45_2 Depth=15228; RV32IA-NEXT:    sltu a0, s2, a45229; RV32IA-NEXT:  .LBB45_5: # %atomicrmw.start5230; RV32IA-NEXT:    # in Loop: Header=BB45_2 Depth=15231; RV32IA-NEXT:    mv a2, a45232; RV32IA-NEXT:    mv a3, a55233; RV32IA-NEXT:    bnez a0, .LBB45_15234; RV32IA-NEXT:  # %bb.6: # %atomicrmw.start5235; RV32IA-NEXT:    # in Loop: Header=BB45_2 Depth=15236; RV32IA-NEXT:    mv a2, s25237; RV32IA-NEXT:    mv a3, s05238; RV32IA-NEXT:    j .LBB45_15239; RV32IA-NEXT:  .LBB45_7: # %atomicrmw.end5240; RV32IA-NEXT:    mv a0, a45241; RV32IA-NEXT:    mv a1, a55242; RV32IA-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload5243; RV32IA-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload5244; RV32IA-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload5245; RV32IA-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload5246; RV32IA-NEXT:    addi sp, sp, 325247; RV32IA-NEXT:    ret5248;5249; RV32I-ZALRSC-LABEL: atomicrmw_umax_i64_monotonic:5250; RV32I-ZALRSC:       # %bb.0:5251; RV32I-ZALRSC-NEXT:    addi sp, sp, -325252; RV32I-ZALRSC-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill5253; RV32I-ZALRSC-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill5254; RV32I-ZALRSC-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill5255; RV32I-ZALRSC-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill5256; RV32I-ZALRSC-NEXT:    mv s0, a25257; RV32I-ZALRSC-NEXT:    mv s1, a05258; RV32I-ZALRSC-NEXT:    lw a4, 0(a0)5259; RV32I-ZALRSC-NEXT:    lw a5, 4(a0)5260; RV32I-ZALRSC-NEXT:    mv s2, a15261; RV32I-ZALRSC-NEXT:    j .LBB45_25262; RV32I-ZALRSC-NEXT:  .LBB45_1: # %atomicrmw.start5263; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB45_2 Depth=15264; RV32I-ZALRSC-NEXT:    sw a4, 8(sp)5265; RV32I-ZALRSC-NEXT:    sw a5, 12(sp)5266; RV32I-ZALRSC-NEXT:    addi a1, sp, 85267; RV32I-ZALRSC-NEXT:    mv a0, s15268; RV32I-ZALRSC-NEXT:    li a4, 05269; RV32I-ZALRSC-NEXT:    li a5, 05270; RV32I-ZALRSC-NEXT:    call __atomic_compare_exchange_85271; RV32I-ZALRSC-NEXT:    lw a4, 8(sp)5272; RV32I-ZALRSC-NEXT:    lw a5, 12(sp)5273; RV32I-ZALRSC-NEXT:    bnez a0, .LBB45_75274; RV32I-ZALRSC-NEXT:  .LBB45_2: # %atomicrmw.start5275; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=15276; RV32I-ZALRSC-NEXT:    beq a5, s0, .LBB45_45277; RV32I-ZALRSC-NEXT:  # %bb.3: # %atomicrmw.start5278; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB45_2 Depth=15279; RV32I-ZALRSC-NEXT:    sltu a0, s0, a55280; RV32I-ZALRSC-NEXT:    j .LBB45_55281; RV32I-ZALRSC-NEXT:  .LBB45_4: # in Loop: Header=BB45_2 Depth=15282; RV32I-ZALRSC-NEXT:    sltu a0, s2, a45283; RV32I-ZALRSC-NEXT:  .LBB45_5: # %atomicrmw.start5284; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB45_2 Depth=15285; RV32I-ZALRSC-NEXT:    mv a2, a45286; RV32I-ZALRSC-NEXT:    mv a3, a55287; RV32I-ZALRSC-NEXT:    bnez a0, .LBB45_15288; RV32I-ZALRSC-NEXT:  # %bb.6: # %atomicrmw.start5289; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB45_2 Depth=15290; RV32I-ZALRSC-NEXT:    mv a2, s25291; RV32I-ZALRSC-NEXT:    mv a3, s05292; RV32I-ZALRSC-NEXT:    j .LBB45_15293; RV32I-ZALRSC-NEXT:  .LBB45_7: # %atomicrmw.end5294; RV32I-ZALRSC-NEXT:    mv a0, a45295; RV32I-ZALRSC-NEXT:    mv a1, a55296; RV32I-ZALRSC-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload5297; RV32I-ZALRSC-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload5298; RV32I-ZALRSC-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload5299; RV32I-ZALRSC-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload5300; RV32I-ZALRSC-NEXT:    addi sp, sp, 325301; RV32I-ZALRSC-NEXT:    ret5302;5303; RV64I-LABEL: atomicrmw_umax_i64_monotonic:5304; RV64I:       # %bb.0:5305; RV64I-NEXT:    addi sp, sp, -325306; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill5307; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill5308; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill5309; RV64I-NEXT:    mv s0, a05310; RV64I-NEXT:    ld a3, 0(a0)5311; RV64I-NEXT:    mv s1, a15312; RV64I-NEXT:    j .LBB45_25313; RV64I-NEXT:  .LBB45_1: # %atomicrmw.start5314; RV64I-NEXT:    # in Loop: Header=BB45_2 Depth=15315; RV64I-NEXT:    sd a3, 0(sp)5316; RV64I-NEXT:    mv a1, sp5317; RV64I-NEXT:    mv a0, s05318; RV64I-NEXT:    li a3, 05319; RV64I-NEXT:    li a4, 05320; RV64I-NEXT:    call __atomic_compare_exchange_85321; RV64I-NEXT:    ld a3, 0(sp)5322; RV64I-NEXT:    bnez a0, .LBB45_45323; RV64I-NEXT:  .LBB45_2: # %atomicrmw.start5324; RV64I-NEXT:    # =>This Inner Loop Header: Depth=15325; RV64I-NEXT:    mv a2, a35326; RV64I-NEXT:    bltu s1, a3, .LBB45_15327; RV64I-NEXT:  # %bb.3: # %atomicrmw.start5328; RV64I-NEXT:    # in Loop: Header=BB45_2 Depth=15329; RV64I-NEXT:    mv a2, s15330; RV64I-NEXT:    j .LBB45_15331; RV64I-NEXT:  .LBB45_4: # %atomicrmw.end5332; RV64I-NEXT:    mv a0, a35333; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload5334; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload5335; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload5336; RV64I-NEXT:    addi sp, sp, 325337; RV64I-NEXT:    ret5338;5339; RV64IA-LABEL: atomicrmw_umax_i64_monotonic:5340; RV64IA:       # %bb.0:5341; RV64IA-NEXT:    amomaxu.d a0, a1, (a0)5342; RV64IA-NEXT:    ret5343;5344; RV64I-ZALRSC-LABEL: atomicrmw_umax_i64_monotonic:5345; RV64I-ZALRSC:       # %bb.0:5346; RV64I-ZALRSC-NEXT:  .LBB45_1: # =>This Inner Loop Header: Depth=15347; RV64I-ZALRSC-NEXT:    lr.d a2, (a0)5348; RV64I-ZALRSC-NEXT:    mv a3, a25349; RV64I-ZALRSC-NEXT:    bgeu a3, a1, .LBB45_35350; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB45_1 Depth=15351; RV64I-ZALRSC-NEXT:    mv a3, a15352; RV64I-ZALRSC-NEXT:  .LBB45_3: # in Loop: Header=BB45_1 Depth=15353; RV64I-ZALRSC-NEXT:    sc.d a3, a3, (a0)5354; RV64I-ZALRSC-NEXT:    bnez a3, .LBB45_15355; RV64I-ZALRSC-NEXT:  # %bb.4:5356; RV64I-ZALRSC-NEXT:    mv a0, a25357; RV64I-ZALRSC-NEXT:    ret5358  %1 = atomicrmw umax ptr %a, i64 %b monotonic5359  ret i64 %15360}5361 5362define signext i64 @atomicrmw_umin_i64_monotonic(ptr %a, i64 %b) nounwind {5363; RV32I-LABEL: atomicrmw_umin_i64_monotonic:5364; RV32I:       # %bb.0:5365; RV32I-NEXT:    addi sp, sp, -325366; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill5367; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill5368; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill5369; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill5370; RV32I-NEXT:    mv s0, a25371; RV32I-NEXT:    mv s1, a05372; RV32I-NEXT:    lw a4, 0(a0)5373; RV32I-NEXT:    lw a5, 4(a0)5374; RV32I-NEXT:    mv s2, a15375; RV32I-NEXT:    j .LBB46_25376; RV32I-NEXT:  .LBB46_1: # %atomicrmw.start5377; RV32I-NEXT:    # in Loop: Header=BB46_2 Depth=15378; RV32I-NEXT:    sw a4, 8(sp)5379; RV32I-NEXT:    sw a5, 12(sp)5380; RV32I-NEXT:    addi a1, sp, 85381; RV32I-NEXT:    mv a0, s15382; RV32I-NEXT:    li a4, 05383; RV32I-NEXT:    li a5, 05384; RV32I-NEXT:    call __atomic_compare_exchange_85385; RV32I-NEXT:    lw a4, 8(sp)5386; RV32I-NEXT:    lw a5, 12(sp)5387; RV32I-NEXT:    bnez a0, .LBB46_75388; RV32I-NEXT:  .LBB46_2: # %atomicrmw.start5389; RV32I-NEXT:    # =>This Inner Loop Header: Depth=15390; RV32I-NEXT:    beq a5, s0, .LBB46_45391; RV32I-NEXT:  # %bb.3: # %atomicrmw.start5392; RV32I-NEXT:    # in Loop: Header=BB46_2 Depth=15393; RV32I-NEXT:    sltu a0, s0, a55394; RV32I-NEXT:    j .LBB46_55395; RV32I-NEXT:  .LBB46_4: # in Loop: Header=BB46_2 Depth=15396; RV32I-NEXT:    sltu a0, s2, a45397; RV32I-NEXT:  .LBB46_5: # %atomicrmw.start5398; RV32I-NEXT:    # in Loop: Header=BB46_2 Depth=15399; RV32I-NEXT:    mv a2, a45400; RV32I-NEXT:    mv a3, a55401; RV32I-NEXT:    beqz a0, .LBB46_15402; RV32I-NEXT:  # %bb.6: # %atomicrmw.start5403; RV32I-NEXT:    # in Loop: Header=BB46_2 Depth=15404; RV32I-NEXT:    mv a2, s25405; RV32I-NEXT:    mv a3, s05406; RV32I-NEXT:    j .LBB46_15407; RV32I-NEXT:  .LBB46_7: # %atomicrmw.end5408; RV32I-NEXT:    mv a0, a45409; RV32I-NEXT:    mv a1, a55410; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload5411; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload5412; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload5413; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload5414; RV32I-NEXT:    addi sp, sp, 325415; RV32I-NEXT:    ret5416;5417; RV32IA-LABEL: atomicrmw_umin_i64_monotonic:5418; RV32IA:       # %bb.0:5419; RV32IA-NEXT:    addi sp, sp, -325420; RV32IA-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill5421; RV32IA-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill5422; RV32IA-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill5423; RV32IA-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill5424; RV32IA-NEXT:    mv s0, a25425; RV32IA-NEXT:    mv s1, a05426; RV32IA-NEXT:    lw a4, 0(a0)5427; RV32IA-NEXT:    lw a5, 4(a0)5428; RV32IA-NEXT:    mv s2, a15429; RV32IA-NEXT:    j .LBB46_25430; RV32IA-NEXT:  .LBB46_1: # %atomicrmw.start5431; RV32IA-NEXT:    # in Loop: Header=BB46_2 Depth=15432; RV32IA-NEXT:    sw a4, 8(sp)5433; RV32IA-NEXT:    sw a5, 12(sp)5434; RV32IA-NEXT:    addi a1, sp, 85435; RV32IA-NEXT:    mv a0, s15436; RV32IA-NEXT:    li a4, 05437; RV32IA-NEXT:    li a5, 05438; RV32IA-NEXT:    call __atomic_compare_exchange_85439; RV32IA-NEXT:    lw a4, 8(sp)5440; RV32IA-NEXT:    lw a5, 12(sp)5441; RV32IA-NEXT:    bnez a0, .LBB46_75442; RV32IA-NEXT:  .LBB46_2: # %atomicrmw.start5443; RV32IA-NEXT:    # =>This Inner Loop Header: Depth=15444; RV32IA-NEXT:    beq a5, s0, .LBB46_45445; RV32IA-NEXT:  # %bb.3: # %atomicrmw.start5446; RV32IA-NEXT:    # in Loop: Header=BB46_2 Depth=15447; RV32IA-NEXT:    sltu a0, s0, a55448; RV32IA-NEXT:    j .LBB46_55449; RV32IA-NEXT:  .LBB46_4: # in Loop: Header=BB46_2 Depth=15450; RV32IA-NEXT:    sltu a0, s2, a45451; RV32IA-NEXT:  .LBB46_5: # %atomicrmw.start5452; RV32IA-NEXT:    # in Loop: Header=BB46_2 Depth=15453; RV32IA-NEXT:    mv a2, a45454; RV32IA-NEXT:    mv a3, a55455; RV32IA-NEXT:    beqz a0, .LBB46_15456; RV32IA-NEXT:  # %bb.6: # %atomicrmw.start5457; RV32IA-NEXT:    # in Loop: Header=BB46_2 Depth=15458; RV32IA-NEXT:    mv a2, s25459; RV32IA-NEXT:    mv a3, s05460; RV32IA-NEXT:    j .LBB46_15461; RV32IA-NEXT:  .LBB46_7: # %atomicrmw.end5462; RV32IA-NEXT:    mv a0, a45463; RV32IA-NEXT:    mv a1, a55464; RV32IA-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload5465; RV32IA-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload5466; RV32IA-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload5467; RV32IA-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload5468; RV32IA-NEXT:    addi sp, sp, 325469; RV32IA-NEXT:    ret5470;5471; RV32I-ZALRSC-LABEL: atomicrmw_umin_i64_monotonic:5472; RV32I-ZALRSC:       # %bb.0:5473; RV32I-ZALRSC-NEXT:    addi sp, sp, -325474; RV32I-ZALRSC-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill5475; RV32I-ZALRSC-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill5476; RV32I-ZALRSC-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill5477; RV32I-ZALRSC-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill5478; RV32I-ZALRSC-NEXT:    mv s0, a25479; RV32I-ZALRSC-NEXT:    mv s1, a05480; RV32I-ZALRSC-NEXT:    lw a4, 0(a0)5481; RV32I-ZALRSC-NEXT:    lw a5, 4(a0)5482; RV32I-ZALRSC-NEXT:    mv s2, a15483; RV32I-ZALRSC-NEXT:    j .LBB46_25484; RV32I-ZALRSC-NEXT:  .LBB46_1: # %atomicrmw.start5485; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB46_2 Depth=15486; RV32I-ZALRSC-NEXT:    sw a4, 8(sp)5487; RV32I-ZALRSC-NEXT:    sw a5, 12(sp)5488; RV32I-ZALRSC-NEXT:    addi a1, sp, 85489; RV32I-ZALRSC-NEXT:    mv a0, s15490; RV32I-ZALRSC-NEXT:    li a4, 05491; RV32I-ZALRSC-NEXT:    li a5, 05492; RV32I-ZALRSC-NEXT:    call __atomic_compare_exchange_85493; RV32I-ZALRSC-NEXT:    lw a4, 8(sp)5494; RV32I-ZALRSC-NEXT:    lw a5, 12(sp)5495; RV32I-ZALRSC-NEXT:    bnez a0, .LBB46_75496; RV32I-ZALRSC-NEXT:  .LBB46_2: # %atomicrmw.start5497; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=15498; RV32I-ZALRSC-NEXT:    beq a5, s0, .LBB46_45499; RV32I-ZALRSC-NEXT:  # %bb.3: # %atomicrmw.start5500; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB46_2 Depth=15501; RV32I-ZALRSC-NEXT:    sltu a0, s0, a55502; RV32I-ZALRSC-NEXT:    j .LBB46_55503; RV32I-ZALRSC-NEXT:  .LBB46_4: # in Loop: Header=BB46_2 Depth=15504; RV32I-ZALRSC-NEXT:    sltu a0, s2, a45505; RV32I-ZALRSC-NEXT:  .LBB46_5: # %atomicrmw.start5506; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB46_2 Depth=15507; RV32I-ZALRSC-NEXT:    mv a2, a45508; RV32I-ZALRSC-NEXT:    mv a3, a55509; RV32I-ZALRSC-NEXT:    beqz a0, .LBB46_15510; RV32I-ZALRSC-NEXT:  # %bb.6: # %atomicrmw.start5511; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB46_2 Depth=15512; RV32I-ZALRSC-NEXT:    mv a2, s25513; RV32I-ZALRSC-NEXT:    mv a3, s05514; RV32I-ZALRSC-NEXT:    j .LBB46_15515; RV32I-ZALRSC-NEXT:  .LBB46_7: # %atomicrmw.end5516; RV32I-ZALRSC-NEXT:    mv a0, a45517; RV32I-ZALRSC-NEXT:    mv a1, a55518; RV32I-ZALRSC-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload5519; RV32I-ZALRSC-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload5520; RV32I-ZALRSC-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload5521; RV32I-ZALRSC-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload5522; RV32I-ZALRSC-NEXT:    addi sp, sp, 325523; RV32I-ZALRSC-NEXT:    ret5524;5525; RV64I-LABEL: atomicrmw_umin_i64_monotonic:5526; RV64I:       # %bb.0:5527; RV64I-NEXT:    addi sp, sp, -325528; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill5529; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill5530; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill5531; RV64I-NEXT:    mv s0, a05532; RV64I-NEXT:    ld a3, 0(a0)5533; RV64I-NEXT:    mv s1, a15534; RV64I-NEXT:    j .LBB46_25535; RV64I-NEXT:  .LBB46_1: # %atomicrmw.start5536; RV64I-NEXT:    # in Loop: Header=BB46_2 Depth=15537; RV64I-NEXT:    sd a3, 0(sp)5538; RV64I-NEXT:    mv a1, sp5539; RV64I-NEXT:    mv a0, s05540; RV64I-NEXT:    li a3, 05541; RV64I-NEXT:    li a4, 05542; RV64I-NEXT:    call __atomic_compare_exchange_85543; RV64I-NEXT:    ld a3, 0(sp)5544; RV64I-NEXT:    bnez a0, .LBB46_45545; RV64I-NEXT:  .LBB46_2: # %atomicrmw.start5546; RV64I-NEXT:    # =>This Inner Loop Header: Depth=15547; RV64I-NEXT:    mv a2, a35548; RV64I-NEXT:    bgeu s1, a3, .LBB46_15549; RV64I-NEXT:  # %bb.3: # %atomicrmw.start5550; RV64I-NEXT:    # in Loop: Header=BB46_2 Depth=15551; RV64I-NEXT:    mv a2, s15552; RV64I-NEXT:    j .LBB46_15553; RV64I-NEXT:  .LBB46_4: # %atomicrmw.end5554; RV64I-NEXT:    mv a0, a35555; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload5556; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload5557; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload5558; RV64I-NEXT:    addi sp, sp, 325559; RV64I-NEXT:    ret5560;5561; RV64IA-LABEL: atomicrmw_umin_i64_monotonic:5562; RV64IA:       # %bb.0:5563; RV64IA-NEXT:    amominu.d a0, a1, (a0)5564; RV64IA-NEXT:    ret5565;5566; RV64I-ZALRSC-LABEL: atomicrmw_umin_i64_monotonic:5567; RV64I-ZALRSC:       # %bb.0:5568; RV64I-ZALRSC-NEXT:  .LBB46_1: # =>This Inner Loop Header: Depth=15569; RV64I-ZALRSC-NEXT:    lr.d a2, (a0)5570; RV64I-ZALRSC-NEXT:    mv a3, a25571; RV64I-ZALRSC-NEXT:    bgeu a1, a3, .LBB46_35572; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB46_1 Depth=15573; RV64I-ZALRSC-NEXT:    mv a3, a15574; RV64I-ZALRSC-NEXT:  .LBB46_3: # in Loop: Header=BB46_1 Depth=15575; RV64I-ZALRSC-NEXT:    sc.d a3, a3, (a0)5576; RV64I-ZALRSC-NEXT:    bnez a3, .LBB46_15577; RV64I-ZALRSC-NEXT:  # %bb.4:5578; RV64I-ZALRSC-NEXT:    mv a0, a25579; RV64I-ZALRSC-NEXT:    ret5580  %1 = atomicrmw umin ptr %a, i64 %b monotonic5581  ret i64 %15582}5583 5584define signext i8 @cmpxchg_i8_monotonic_monotonic_val0(ptr %ptr, i8 signext %cmp, i8 signext %val) nounwind {5585; RV32I-LABEL: cmpxchg_i8_monotonic_monotonic_val0:5586; RV32I:       # %bb.0:5587; RV32I-NEXT:    addi sp, sp, -165588; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5589; RV32I-NEXT:    sb a1, 11(sp)5590; RV32I-NEXT:    addi a1, sp, 115591; RV32I-NEXT:    li a3, 05592; RV32I-NEXT:    li a4, 05593; RV32I-NEXT:    call __atomic_compare_exchange_15594; RV32I-NEXT:    lb a0, 11(sp)5595; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5596; RV32I-NEXT:    addi sp, sp, 165597; RV32I-NEXT:    ret5598;5599; RV32IA-LABEL: cmpxchg_i8_monotonic_monotonic_val0:5600; RV32IA:       # %bb.0:5601; RV32IA-NEXT:    andi a3, a0, -45602; RV32IA-NEXT:    slli a0, a0, 35603; RV32IA-NEXT:    li a4, 2555604; RV32IA-NEXT:    zext.b a1, a15605; RV32IA-NEXT:    zext.b a2, a25606; RV32IA-NEXT:    sll a4, a4, a05607; RV32IA-NEXT:    sll a1, a1, a05608; RV32IA-NEXT:    sll a2, a2, a05609; RV32IA-NEXT:  .LBB47_1: # =>This Inner Loop Header: Depth=15610; RV32IA-NEXT:    lr.w a5, (a3)5611; RV32IA-NEXT:    and a6, a5, a45612; RV32IA-NEXT:    bne a6, a1, .LBB47_35613; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB47_1 Depth=15614; RV32IA-NEXT:    xor a6, a5, a25615; RV32IA-NEXT:    and a6, a6, a45616; RV32IA-NEXT:    xor a6, a5, a65617; RV32IA-NEXT:    sc.w a6, a6, (a3)5618; RV32IA-NEXT:    bnez a6, .LBB47_15619; RV32IA-NEXT:  .LBB47_3:5620; RV32IA-NEXT:    srl a0, a5, a05621; RV32IA-NEXT:    slli a0, a0, 245622; RV32IA-NEXT:    srai a0, a0, 245623; RV32IA-NEXT:    ret5624;5625; RV32I-ZALRSC-LABEL: cmpxchg_i8_monotonic_monotonic_val0:5626; RV32I-ZALRSC:       # %bb.0:5627; RV32I-ZALRSC-NEXT:    andi a3, a0, -45628; RV32I-ZALRSC-NEXT:    slli a0, a0, 35629; RV32I-ZALRSC-NEXT:    li a4, 2555630; RV32I-ZALRSC-NEXT:    zext.b a1, a15631; RV32I-ZALRSC-NEXT:    zext.b a2, a25632; RV32I-ZALRSC-NEXT:    sll a4, a4, a05633; RV32I-ZALRSC-NEXT:    sll a1, a1, a05634; RV32I-ZALRSC-NEXT:    sll a2, a2, a05635; RV32I-ZALRSC-NEXT:  .LBB47_1: # =>This Inner Loop Header: Depth=15636; RV32I-ZALRSC-NEXT:    lr.w a5, (a3)5637; RV32I-ZALRSC-NEXT:    and a6, a5, a45638; RV32I-ZALRSC-NEXT:    bne a6, a1, .LBB47_35639; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB47_1 Depth=15640; RV32I-ZALRSC-NEXT:    xor a6, a5, a25641; RV32I-ZALRSC-NEXT:    and a6, a6, a45642; RV32I-ZALRSC-NEXT:    xor a6, a5, a65643; RV32I-ZALRSC-NEXT:    sc.w a6, a6, (a3)5644; RV32I-ZALRSC-NEXT:    bnez a6, .LBB47_15645; RV32I-ZALRSC-NEXT:  .LBB47_3:5646; RV32I-ZALRSC-NEXT:    srl a0, a5, a05647; RV32I-ZALRSC-NEXT:    slli a0, a0, 245648; RV32I-ZALRSC-NEXT:    srai a0, a0, 245649; RV32I-ZALRSC-NEXT:    ret5650;5651; RV64I-LABEL: cmpxchg_i8_monotonic_monotonic_val0:5652; RV64I:       # %bb.0:5653; RV64I-NEXT:    addi sp, sp, -165654; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill5655; RV64I-NEXT:    sb a1, 7(sp)5656; RV64I-NEXT:    addi a1, sp, 75657; RV64I-NEXT:    li a3, 05658; RV64I-NEXT:    li a4, 05659; RV64I-NEXT:    call __atomic_compare_exchange_15660; RV64I-NEXT:    lb a0, 7(sp)5661; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload5662; RV64I-NEXT:    addi sp, sp, 165663; RV64I-NEXT:    ret5664;5665; RV64IA-LABEL: cmpxchg_i8_monotonic_monotonic_val0:5666; RV64IA:       # %bb.0:5667; RV64IA-NEXT:    andi a3, a0, -45668; RV64IA-NEXT:    slli a0, a0, 35669; RV64IA-NEXT:    li a4, 2555670; RV64IA-NEXT:    zext.b a1, a15671; RV64IA-NEXT:    zext.b a2, a25672; RV64IA-NEXT:    sllw a4, a4, a05673; RV64IA-NEXT:    sllw a1, a1, a05674; RV64IA-NEXT:    sllw a2, a2, a05675; RV64IA-NEXT:  .LBB47_1: # =>This Inner Loop Header: Depth=15676; RV64IA-NEXT:    lr.w a5, (a3)5677; RV64IA-NEXT:    and a6, a5, a45678; RV64IA-NEXT:    bne a6, a1, .LBB47_35679; RV64IA-NEXT:  # %bb.2: # in Loop: Header=BB47_1 Depth=15680; RV64IA-NEXT:    xor a6, a5, a25681; RV64IA-NEXT:    and a6, a6, a45682; RV64IA-NEXT:    xor a6, a5, a65683; RV64IA-NEXT:    sc.w a6, a6, (a3)5684; RV64IA-NEXT:    bnez a6, .LBB47_15685; RV64IA-NEXT:  .LBB47_3:5686; RV64IA-NEXT:    srlw a0, a5, a05687; RV64IA-NEXT:    slli a0, a0, 565688; RV64IA-NEXT:    srai a0, a0, 565689; RV64IA-NEXT:    ret5690;5691; RV64I-ZALRSC-LABEL: cmpxchg_i8_monotonic_monotonic_val0:5692; RV64I-ZALRSC:       # %bb.0:5693; RV64I-ZALRSC-NEXT:    andi a3, a0, -45694; RV64I-ZALRSC-NEXT:    slli a0, a0, 35695; RV64I-ZALRSC-NEXT:    li a4, 2555696; RV64I-ZALRSC-NEXT:    zext.b a1, a15697; RV64I-ZALRSC-NEXT:    zext.b a2, a25698; RV64I-ZALRSC-NEXT:    sllw a4, a4, a05699; RV64I-ZALRSC-NEXT:    sllw a1, a1, a05700; RV64I-ZALRSC-NEXT:    sllw a2, a2, a05701; RV64I-ZALRSC-NEXT:  .LBB47_1: # =>This Inner Loop Header: Depth=15702; RV64I-ZALRSC-NEXT:    lr.w a5, (a3)5703; RV64I-ZALRSC-NEXT:    and a6, a5, a45704; RV64I-ZALRSC-NEXT:    bne a6, a1, .LBB47_35705; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB47_1 Depth=15706; RV64I-ZALRSC-NEXT:    xor a6, a5, a25707; RV64I-ZALRSC-NEXT:    and a6, a6, a45708; RV64I-ZALRSC-NEXT:    xor a6, a5, a65709; RV64I-ZALRSC-NEXT:    sc.w a6, a6, (a3)5710; RV64I-ZALRSC-NEXT:    bnez a6, .LBB47_15711; RV64I-ZALRSC-NEXT:  .LBB47_3:5712; RV64I-ZALRSC-NEXT:    srlw a0, a5, a05713; RV64I-ZALRSC-NEXT:    slli a0, a0, 565714; RV64I-ZALRSC-NEXT:    srai a0, a0, 565715; RV64I-ZALRSC-NEXT:    ret5716  %1 = cmpxchg ptr %ptr, i8 %cmp, i8 %val monotonic monotonic5717  %2 = extractvalue { i8, i1 } %1, 05718  ret i8 %25719}5720 5721define i1 @cmpxchg_i8_monotonic_monotonic_val1(ptr %ptr, i8 signext %cmp, i8 signext %val) nounwind {5722; RV32I-LABEL: cmpxchg_i8_monotonic_monotonic_val1:5723; RV32I:       # %bb.0:5724; RV32I-NEXT:    addi sp, sp, -165725; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5726; RV32I-NEXT:    sb a1, 11(sp)5727; RV32I-NEXT:    addi a1, sp, 115728; RV32I-NEXT:    li a3, 05729; RV32I-NEXT:    li a4, 05730; RV32I-NEXT:    call __atomic_compare_exchange_15731; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5732; RV32I-NEXT:    addi sp, sp, 165733; RV32I-NEXT:    ret5734;5735; RV32IA-LABEL: cmpxchg_i8_monotonic_monotonic_val1:5736; RV32IA:       # %bb.0:5737; RV32IA-NEXT:    andi a3, a0, -45738; RV32IA-NEXT:    slli a0, a0, 35739; RV32IA-NEXT:    li a4, 2555740; RV32IA-NEXT:    zext.b a1, a15741; RV32IA-NEXT:    zext.b a2, a25742; RV32IA-NEXT:    sll a4, a4, a05743; RV32IA-NEXT:    sll a1, a1, a05744; RV32IA-NEXT:    sll a0, a2, a05745; RV32IA-NEXT:  .LBB48_1: # =>This Inner Loop Header: Depth=15746; RV32IA-NEXT:    lr.w a2, (a3)5747; RV32IA-NEXT:    and a5, a2, a45748; RV32IA-NEXT:    bne a5, a1, .LBB48_35749; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB48_1 Depth=15750; RV32IA-NEXT:    xor a5, a2, a05751; RV32IA-NEXT:    and a5, a5, a45752; RV32IA-NEXT:    xor a5, a2, a55753; RV32IA-NEXT:    sc.w a5, a5, (a3)5754; RV32IA-NEXT:    bnez a5, .LBB48_15755; RV32IA-NEXT:  .LBB48_3:5756; RV32IA-NEXT:    and a2, a2, a45757; RV32IA-NEXT:    xor a1, a1, a25758; RV32IA-NEXT:    seqz a0, a15759; RV32IA-NEXT:    ret5760;5761; RV32I-ZALRSC-LABEL: cmpxchg_i8_monotonic_monotonic_val1:5762; RV32I-ZALRSC:       # %bb.0:5763; RV32I-ZALRSC-NEXT:    andi a3, a0, -45764; RV32I-ZALRSC-NEXT:    slli a0, a0, 35765; RV32I-ZALRSC-NEXT:    li a4, 2555766; RV32I-ZALRSC-NEXT:    zext.b a1, a15767; RV32I-ZALRSC-NEXT:    zext.b a2, a25768; RV32I-ZALRSC-NEXT:    sll a4, a4, a05769; RV32I-ZALRSC-NEXT:    sll a1, a1, a05770; RV32I-ZALRSC-NEXT:    sll a0, a2, a05771; RV32I-ZALRSC-NEXT:  .LBB48_1: # =>This Inner Loop Header: Depth=15772; RV32I-ZALRSC-NEXT:    lr.w a2, (a3)5773; RV32I-ZALRSC-NEXT:    and a5, a2, a45774; RV32I-ZALRSC-NEXT:    bne a5, a1, .LBB48_35775; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB48_1 Depth=15776; RV32I-ZALRSC-NEXT:    xor a5, a2, a05777; RV32I-ZALRSC-NEXT:    and a5, a5, a45778; RV32I-ZALRSC-NEXT:    xor a5, a2, a55779; RV32I-ZALRSC-NEXT:    sc.w a5, a5, (a3)5780; RV32I-ZALRSC-NEXT:    bnez a5, .LBB48_15781; RV32I-ZALRSC-NEXT:  .LBB48_3:5782; RV32I-ZALRSC-NEXT:    and a2, a2, a45783; RV32I-ZALRSC-NEXT:    xor a1, a1, a25784; RV32I-ZALRSC-NEXT:    seqz a0, a15785; RV32I-ZALRSC-NEXT:    ret5786;5787; RV64I-LABEL: cmpxchg_i8_monotonic_monotonic_val1:5788; RV64I:       # %bb.0:5789; RV64I-NEXT:    addi sp, sp, -165790; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill5791; RV64I-NEXT:    sb a1, 7(sp)5792; RV64I-NEXT:    addi a1, sp, 75793; RV64I-NEXT:    li a3, 05794; RV64I-NEXT:    li a4, 05795; RV64I-NEXT:    call __atomic_compare_exchange_15796; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload5797; RV64I-NEXT:    addi sp, sp, 165798; RV64I-NEXT:    ret5799;5800; RV64IA-LABEL: cmpxchg_i8_monotonic_monotonic_val1:5801; RV64IA:       # %bb.0:5802; RV64IA-NEXT:    andi a3, a0, -45803; RV64IA-NEXT:    slli a0, a0, 35804; RV64IA-NEXT:    li a4, 2555805; RV64IA-NEXT:    zext.b a1, a15806; RV64IA-NEXT:    zext.b a2, a25807; RV64IA-NEXT:    sllw a4, a4, a05808; RV64IA-NEXT:    sllw a1, a1, a05809; RV64IA-NEXT:    sllw a0, a2, a05810; RV64IA-NEXT:  .LBB48_1: # =>This Inner Loop Header: Depth=15811; RV64IA-NEXT:    lr.w a2, (a3)5812; RV64IA-NEXT:    and a5, a2, a45813; RV64IA-NEXT:    bne a5, a1, .LBB48_35814; RV64IA-NEXT:  # %bb.2: # in Loop: Header=BB48_1 Depth=15815; RV64IA-NEXT:    xor a5, a2, a05816; RV64IA-NEXT:    and a5, a5, a45817; RV64IA-NEXT:    xor a5, a2, a55818; RV64IA-NEXT:    sc.w a5, a5, (a3)5819; RV64IA-NEXT:    bnez a5, .LBB48_15820; RV64IA-NEXT:  .LBB48_3:5821; RV64IA-NEXT:    and a2, a2, a45822; RV64IA-NEXT:    xor a1, a1, a25823; RV64IA-NEXT:    seqz a0, a15824; RV64IA-NEXT:    ret5825;5826; RV64I-ZALRSC-LABEL: cmpxchg_i8_monotonic_monotonic_val1:5827; RV64I-ZALRSC:       # %bb.0:5828; RV64I-ZALRSC-NEXT:    andi a3, a0, -45829; RV64I-ZALRSC-NEXT:    slli a0, a0, 35830; RV64I-ZALRSC-NEXT:    li a4, 2555831; RV64I-ZALRSC-NEXT:    zext.b a1, a15832; RV64I-ZALRSC-NEXT:    zext.b a2, a25833; RV64I-ZALRSC-NEXT:    sllw a4, a4, a05834; RV64I-ZALRSC-NEXT:    sllw a1, a1, a05835; RV64I-ZALRSC-NEXT:    sllw a0, a2, a05836; RV64I-ZALRSC-NEXT:  .LBB48_1: # =>This Inner Loop Header: Depth=15837; RV64I-ZALRSC-NEXT:    lr.w a2, (a3)5838; RV64I-ZALRSC-NEXT:    and a5, a2, a45839; RV64I-ZALRSC-NEXT:    bne a5, a1, .LBB48_35840; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB48_1 Depth=15841; RV64I-ZALRSC-NEXT:    xor a5, a2, a05842; RV64I-ZALRSC-NEXT:    and a5, a5, a45843; RV64I-ZALRSC-NEXT:    xor a5, a2, a55844; RV64I-ZALRSC-NEXT:    sc.w a5, a5, (a3)5845; RV64I-ZALRSC-NEXT:    bnez a5, .LBB48_15846; RV64I-ZALRSC-NEXT:  .LBB48_3:5847; RV64I-ZALRSC-NEXT:    and a2, a2, a45848; RV64I-ZALRSC-NEXT:    xor a1, a1, a25849; RV64I-ZALRSC-NEXT:    seqz a0, a15850; RV64I-ZALRSC-NEXT:    ret5851  %1 = cmpxchg ptr %ptr, i8 %cmp, i8 %val monotonic monotonic5852  %2 = extractvalue { i8, i1 } %1, 15853  ret i1 %25854}5855 5856define signext i16 @cmpxchg_i16_monotonic_monotonic_val0(ptr %ptr, i16 signext %cmp, i16 signext %val) nounwind {5857; RV32I-LABEL: cmpxchg_i16_monotonic_monotonic_val0:5858; RV32I:       # %bb.0:5859; RV32I-NEXT:    addi sp, sp, -165860; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5861; RV32I-NEXT:    sh a1, 10(sp)5862; RV32I-NEXT:    addi a1, sp, 105863; RV32I-NEXT:    li a3, 05864; RV32I-NEXT:    li a4, 05865; RV32I-NEXT:    call __atomic_compare_exchange_25866; RV32I-NEXT:    lh a0, 10(sp)5867; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5868; RV32I-NEXT:    addi sp, sp, 165869; RV32I-NEXT:    ret5870;5871; RV32IA-LABEL: cmpxchg_i16_monotonic_monotonic_val0:5872; RV32IA:       # %bb.0:5873; RV32IA-NEXT:    andi a3, a0, -45874; RV32IA-NEXT:    slli a0, a0, 35875; RV32IA-NEXT:    lui a4, 165876; RV32IA-NEXT:    addi a4, a4, -15877; RV32IA-NEXT:    sll a5, a4, a05878; RV32IA-NEXT:    and a1, a1, a45879; RV32IA-NEXT:    and a2, a2, a45880; RV32IA-NEXT:    sll a1, a1, a05881; RV32IA-NEXT:    sll a2, a2, a05882; RV32IA-NEXT:  .LBB49_1: # =>This Inner Loop Header: Depth=15883; RV32IA-NEXT:    lr.w a4, (a3)5884; RV32IA-NEXT:    and a6, a4, a55885; RV32IA-NEXT:    bne a6, a1, .LBB49_35886; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB49_1 Depth=15887; RV32IA-NEXT:    xor a6, a4, a25888; RV32IA-NEXT:    and a6, a6, a55889; RV32IA-NEXT:    xor a6, a4, a65890; RV32IA-NEXT:    sc.w a6, a6, (a3)5891; RV32IA-NEXT:    bnez a6, .LBB49_15892; RV32IA-NEXT:  .LBB49_3:5893; RV32IA-NEXT:    srl a0, a4, a05894; RV32IA-NEXT:    slli a0, a0, 165895; RV32IA-NEXT:    srai a0, a0, 165896; RV32IA-NEXT:    ret5897;5898; RV32I-ZALRSC-LABEL: cmpxchg_i16_monotonic_monotonic_val0:5899; RV32I-ZALRSC:       # %bb.0:5900; RV32I-ZALRSC-NEXT:    andi a3, a0, -45901; RV32I-ZALRSC-NEXT:    slli a0, a0, 35902; RV32I-ZALRSC-NEXT:    lui a4, 165903; RV32I-ZALRSC-NEXT:    addi a4, a4, -15904; RV32I-ZALRSC-NEXT:    sll a5, a4, a05905; RV32I-ZALRSC-NEXT:    and a1, a1, a45906; RV32I-ZALRSC-NEXT:    and a2, a2, a45907; RV32I-ZALRSC-NEXT:    sll a1, a1, a05908; RV32I-ZALRSC-NEXT:    sll a2, a2, a05909; RV32I-ZALRSC-NEXT:  .LBB49_1: # =>This Inner Loop Header: Depth=15910; RV32I-ZALRSC-NEXT:    lr.w a4, (a3)5911; RV32I-ZALRSC-NEXT:    and a6, a4, a55912; RV32I-ZALRSC-NEXT:    bne a6, a1, .LBB49_35913; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB49_1 Depth=15914; RV32I-ZALRSC-NEXT:    xor a6, a4, a25915; RV32I-ZALRSC-NEXT:    and a6, a6, a55916; RV32I-ZALRSC-NEXT:    xor a6, a4, a65917; RV32I-ZALRSC-NEXT:    sc.w a6, a6, (a3)5918; RV32I-ZALRSC-NEXT:    bnez a6, .LBB49_15919; RV32I-ZALRSC-NEXT:  .LBB49_3:5920; RV32I-ZALRSC-NEXT:    srl a0, a4, a05921; RV32I-ZALRSC-NEXT:    slli a0, a0, 165922; RV32I-ZALRSC-NEXT:    srai a0, a0, 165923; RV32I-ZALRSC-NEXT:    ret5924;5925; RV64I-LABEL: cmpxchg_i16_monotonic_monotonic_val0:5926; RV64I:       # %bb.0:5927; RV64I-NEXT:    addi sp, sp, -165928; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill5929; RV64I-NEXT:    sh a1, 6(sp)5930; RV64I-NEXT:    addi a1, sp, 65931; RV64I-NEXT:    li a3, 05932; RV64I-NEXT:    li a4, 05933; RV64I-NEXT:    call __atomic_compare_exchange_25934; RV64I-NEXT:    lh a0, 6(sp)5935; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload5936; RV64I-NEXT:    addi sp, sp, 165937; RV64I-NEXT:    ret5938;5939; RV64IA-LABEL: cmpxchg_i16_monotonic_monotonic_val0:5940; RV64IA:       # %bb.0:5941; RV64IA-NEXT:    andi a3, a0, -45942; RV64IA-NEXT:    slli a0, a0, 35943; RV64IA-NEXT:    lui a4, 165944; RV64IA-NEXT:    addi a4, a4, -15945; RV64IA-NEXT:    sllw a5, a4, a05946; RV64IA-NEXT:    and a1, a1, a45947; RV64IA-NEXT:    and a2, a2, a45948; RV64IA-NEXT:    sllw a1, a1, a05949; RV64IA-NEXT:    sllw a2, a2, a05950; RV64IA-NEXT:  .LBB49_1: # =>This Inner Loop Header: Depth=15951; RV64IA-NEXT:    lr.w a4, (a3)5952; RV64IA-NEXT:    and a6, a4, a55953; RV64IA-NEXT:    bne a6, a1, .LBB49_35954; RV64IA-NEXT:  # %bb.2: # in Loop: Header=BB49_1 Depth=15955; RV64IA-NEXT:    xor a6, a4, a25956; RV64IA-NEXT:    and a6, a6, a55957; RV64IA-NEXT:    xor a6, a4, a65958; RV64IA-NEXT:    sc.w a6, a6, (a3)5959; RV64IA-NEXT:    bnez a6, .LBB49_15960; RV64IA-NEXT:  .LBB49_3:5961; RV64IA-NEXT:    srlw a0, a4, a05962; RV64IA-NEXT:    slli a0, a0, 485963; RV64IA-NEXT:    srai a0, a0, 485964; RV64IA-NEXT:    ret5965;5966; RV64I-ZALRSC-LABEL: cmpxchg_i16_monotonic_monotonic_val0:5967; RV64I-ZALRSC:       # %bb.0:5968; RV64I-ZALRSC-NEXT:    andi a3, a0, -45969; RV64I-ZALRSC-NEXT:    slli a0, a0, 35970; RV64I-ZALRSC-NEXT:    lui a4, 165971; RV64I-ZALRSC-NEXT:    addi a4, a4, -15972; RV64I-ZALRSC-NEXT:    sllw a5, a4, a05973; RV64I-ZALRSC-NEXT:    and a1, a1, a45974; RV64I-ZALRSC-NEXT:    and a2, a2, a45975; RV64I-ZALRSC-NEXT:    sllw a1, a1, a05976; RV64I-ZALRSC-NEXT:    sllw a2, a2, a05977; RV64I-ZALRSC-NEXT:  .LBB49_1: # =>This Inner Loop Header: Depth=15978; RV64I-ZALRSC-NEXT:    lr.w a4, (a3)5979; RV64I-ZALRSC-NEXT:    and a6, a4, a55980; RV64I-ZALRSC-NEXT:    bne a6, a1, .LBB49_35981; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB49_1 Depth=15982; RV64I-ZALRSC-NEXT:    xor a6, a4, a25983; RV64I-ZALRSC-NEXT:    and a6, a6, a55984; RV64I-ZALRSC-NEXT:    xor a6, a4, a65985; RV64I-ZALRSC-NEXT:    sc.w a6, a6, (a3)5986; RV64I-ZALRSC-NEXT:    bnez a6, .LBB49_15987; RV64I-ZALRSC-NEXT:  .LBB49_3:5988; RV64I-ZALRSC-NEXT:    srlw a0, a4, a05989; RV64I-ZALRSC-NEXT:    slli a0, a0, 485990; RV64I-ZALRSC-NEXT:    srai a0, a0, 485991; RV64I-ZALRSC-NEXT:    ret5992  %1 = cmpxchg ptr %ptr, i16 %cmp, i16 %val monotonic monotonic5993  %2 = extractvalue { i16, i1 } %1, 05994  ret i16 %25995}5996 5997define i1 @cmpxchg_i16_monotonic_monotonic_val1(ptr %ptr, i16 signext %cmp, i16 signext %val) nounwind {5998; RV32I-LABEL: cmpxchg_i16_monotonic_monotonic_val1:5999; RV32I:       # %bb.0:6000; RV32I-NEXT:    addi sp, sp, -166001; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill6002; RV32I-NEXT:    sh a1, 10(sp)6003; RV32I-NEXT:    addi a1, sp, 106004; RV32I-NEXT:    li a3, 06005; RV32I-NEXT:    li a4, 06006; RV32I-NEXT:    call __atomic_compare_exchange_26007; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload6008; RV32I-NEXT:    addi sp, sp, 166009; RV32I-NEXT:    ret6010;6011; RV32IA-LABEL: cmpxchg_i16_monotonic_monotonic_val1:6012; RV32IA:       # %bb.0:6013; RV32IA-NEXT:    andi a3, a0, -46014; RV32IA-NEXT:    slli a0, a0, 36015; RV32IA-NEXT:    lui a4, 166016; RV32IA-NEXT:    addi a4, a4, -16017; RV32IA-NEXT:    sll a5, a4, a06018; RV32IA-NEXT:    and a1, a1, a46019; RV32IA-NEXT:    and a2, a2, a46020; RV32IA-NEXT:    sll a1, a1, a06021; RV32IA-NEXT:    sll a0, a2, a06022; RV32IA-NEXT:  .LBB50_1: # =>This Inner Loop Header: Depth=16023; RV32IA-NEXT:    lr.w a2, (a3)6024; RV32IA-NEXT:    and a4, a2, a56025; RV32IA-NEXT:    bne a4, a1, .LBB50_36026; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB50_1 Depth=16027; RV32IA-NEXT:    xor a4, a2, a06028; RV32IA-NEXT:    and a4, a4, a56029; RV32IA-NEXT:    xor a4, a2, a46030; RV32IA-NEXT:    sc.w a4, a4, (a3)6031; RV32IA-NEXT:    bnez a4, .LBB50_16032; RV32IA-NEXT:  .LBB50_3:6033; RV32IA-NEXT:    and a2, a2, a56034; RV32IA-NEXT:    xor a1, a1, a26035; RV32IA-NEXT:    seqz a0, a16036; RV32IA-NEXT:    ret6037;6038; RV32I-ZALRSC-LABEL: cmpxchg_i16_monotonic_monotonic_val1:6039; RV32I-ZALRSC:       # %bb.0:6040; RV32I-ZALRSC-NEXT:    andi a3, a0, -46041; RV32I-ZALRSC-NEXT:    slli a0, a0, 36042; RV32I-ZALRSC-NEXT:    lui a4, 166043; RV32I-ZALRSC-NEXT:    addi a4, a4, -16044; RV32I-ZALRSC-NEXT:    sll a5, a4, a06045; RV32I-ZALRSC-NEXT:    and a1, a1, a46046; RV32I-ZALRSC-NEXT:    and a2, a2, a46047; RV32I-ZALRSC-NEXT:    sll a1, a1, a06048; RV32I-ZALRSC-NEXT:    sll a0, a2, a06049; RV32I-ZALRSC-NEXT:  .LBB50_1: # =>This Inner Loop Header: Depth=16050; RV32I-ZALRSC-NEXT:    lr.w a2, (a3)6051; RV32I-ZALRSC-NEXT:    and a4, a2, a56052; RV32I-ZALRSC-NEXT:    bne a4, a1, .LBB50_36053; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB50_1 Depth=16054; RV32I-ZALRSC-NEXT:    xor a4, a2, a06055; RV32I-ZALRSC-NEXT:    and a4, a4, a56056; RV32I-ZALRSC-NEXT:    xor a4, a2, a46057; RV32I-ZALRSC-NEXT:    sc.w a4, a4, (a3)6058; RV32I-ZALRSC-NEXT:    bnez a4, .LBB50_16059; RV32I-ZALRSC-NEXT:  .LBB50_3:6060; RV32I-ZALRSC-NEXT:    and a2, a2, a56061; RV32I-ZALRSC-NEXT:    xor a1, a1, a26062; RV32I-ZALRSC-NEXT:    seqz a0, a16063; RV32I-ZALRSC-NEXT:    ret6064;6065; RV64I-LABEL: cmpxchg_i16_monotonic_monotonic_val1:6066; RV64I:       # %bb.0:6067; RV64I-NEXT:    addi sp, sp, -166068; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill6069; RV64I-NEXT:    sh a1, 6(sp)6070; RV64I-NEXT:    addi a1, sp, 66071; RV64I-NEXT:    li a3, 06072; RV64I-NEXT:    li a4, 06073; RV64I-NEXT:    call __atomic_compare_exchange_26074; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload6075; RV64I-NEXT:    addi sp, sp, 166076; RV64I-NEXT:    ret6077;6078; RV64IA-LABEL: cmpxchg_i16_monotonic_monotonic_val1:6079; RV64IA:       # %bb.0:6080; RV64IA-NEXT:    andi a3, a0, -46081; RV64IA-NEXT:    slli a0, a0, 36082; RV64IA-NEXT:    lui a4, 166083; RV64IA-NEXT:    addi a4, a4, -16084; RV64IA-NEXT:    sllw a5, a4, a06085; RV64IA-NEXT:    and a1, a1, a46086; RV64IA-NEXT:    and a2, a2, a46087; RV64IA-NEXT:    sllw a1, a1, a06088; RV64IA-NEXT:    sllw a0, a2, a06089; RV64IA-NEXT:  .LBB50_1: # =>This Inner Loop Header: Depth=16090; RV64IA-NEXT:    lr.w a2, (a3)6091; RV64IA-NEXT:    and a4, a2, a56092; RV64IA-NEXT:    bne a4, a1, .LBB50_36093; RV64IA-NEXT:  # %bb.2: # in Loop: Header=BB50_1 Depth=16094; RV64IA-NEXT:    xor a4, a2, a06095; RV64IA-NEXT:    and a4, a4, a56096; RV64IA-NEXT:    xor a4, a2, a46097; RV64IA-NEXT:    sc.w a4, a4, (a3)6098; RV64IA-NEXT:    bnez a4, .LBB50_16099; RV64IA-NEXT:  .LBB50_3:6100; RV64IA-NEXT:    and a2, a2, a56101; RV64IA-NEXT:    xor a1, a1, a26102; RV64IA-NEXT:    seqz a0, a16103; RV64IA-NEXT:    ret6104;6105; RV64I-ZALRSC-LABEL: cmpxchg_i16_monotonic_monotonic_val1:6106; RV64I-ZALRSC:       # %bb.0:6107; RV64I-ZALRSC-NEXT:    andi a3, a0, -46108; RV64I-ZALRSC-NEXT:    slli a0, a0, 36109; RV64I-ZALRSC-NEXT:    lui a4, 166110; RV64I-ZALRSC-NEXT:    addi a4, a4, -16111; RV64I-ZALRSC-NEXT:    sllw a5, a4, a06112; RV64I-ZALRSC-NEXT:    and a1, a1, a46113; RV64I-ZALRSC-NEXT:    and a2, a2, a46114; RV64I-ZALRSC-NEXT:    sllw a1, a1, a06115; RV64I-ZALRSC-NEXT:    sllw a0, a2, a06116; RV64I-ZALRSC-NEXT:  .LBB50_1: # =>This Inner Loop Header: Depth=16117; RV64I-ZALRSC-NEXT:    lr.w a2, (a3)6118; RV64I-ZALRSC-NEXT:    and a4, a2, a56119; RV64I-ZALRSC-NEXT:    bne a4, a1, .LBB50_36120; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB50_1 Depth=16121; RV64I-ZALRSC-NEXT:    xor a4, a2, a06122; RV64I-ZALRSC-NEXT:    and a4, a4, a56123; RV64I-ZALRSC-NEXT:    xor a4, a2, a46124; RV64I-ZALRSC-NEXT:    sc.w a4, a4, (a3)6125; RV64I-ZALRSC-NEXT:    bnez a4, .LBB50_16126; RV64I-ZALRSC-NEXT:  .LBB50_3:6127; RV64I-ZALRSC-NEXT:    and a2, a2, a56128; RV64I-ZALRSC-NEXT:    xor a1, a1, a26129; RV64I-ZALRSC-NEXT:    seqz a0, a16130; RV64I-ZALRSC-NEXT:    ret6131  %1 = cmpxchg ptr %ptr, i16 %cmp, i16 %val monotonic monotonic6132  %2 = extractvalue { i16, i1 } %1, 16133  ret i1 %26134}6135 6136define signext i32 @cmpxchg_i32_monotonic_monotonic_val0(ptr %ptr, i32 signext %cmp, i32 signext %val) nounwind {6137; RV32I-LABEL: cmpxchg_i32_monotonic_monotonic_val0:6138; RV32I:       # %bb.0:6139; RV32I-NEXT:    addi sp, sp, -166140; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill6141; RV32I-NEXT:    sw a1, 8(sp)6142; RV32I-NEXT:    addi a1, sp, 86143; RV32I-NEXT:    li a3, 06144; RV32I-NEXT:    li a4, 06145; RV32I-NEXT:    call __atomic_compare_exchange_46146; RV32I-NEXT:    lw a0, 8(sp)6147; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload6148; RV32I-NEXT:    addi sp, sp, 166149; RV32I-NEXT:    ret6150;6151; RV32IA-NOZACAS-LABEL: cmpxchg_i32_monotonic_monotonic_val0:6152; RV32IA-NOZACAS:       # %bb.0:6153; RV32IA-NOZACAS-NEXT:  .LBB51_1: # =>This Inner Loop Header: Depth=16154; RV32IA-NOZACAS-NEXT:    lr.w a3, (a0)6155; RV32IA-NOZACAS-NEXT:    bne a3, a1, .LBB51_36156; RV32IA-NOZACAS-NEXT:  # %bb.2: # in Loop: Header=BB51_1 Depth=16157; RV32IA-NOZACAS-NEXT:    sc.w a4, a2, (a0)6158; RV32IA-NOZACAS-NEXT:    bnez a4, .LBB51_16159; RV32IA-NOZACAS-NEXT:  .LBB51_3:6160; RV32IA-NOZACAS-NEXT:    mv a0, a36161; RV32IA-NOZACAS-NEXT:    ret6162;6163; RV32IA-ZACAS-LABEL: cmpxchg_i32_monotonic_monotonic_val0:6164; RV32IA-ZACAS:       # %bb.0:6165; RV32IA-ZACAS-NEXT:    amocas.w a1, a2, (a0)6166; RV32IA-ZACAS-NEXT:    mv a0, a16167; RV32IA-ZACAS-NEXT:    ret6168;6169; RV32I-ZALRSC-LABEL: cmpxchg_i32_monotonic_monotonic_val0:6170; RV32I-ZALRSC:       # %bb.0:6171; RV32I-ZALRSC-NEXT:  .LBB51_1: # =>This Inner Loop Header: Depth=16172; RV32I-ZALRSC-NEXT:    lr.w a3, (a0)6173; RV32I-ZALRSC-NEXT:    bne a3, a1, .LBB51_36174; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB51_1 Depth=16175; RV32I-ZALRSC-NEXT:    sc.w a4, a2, (a0)6176; RV32I-ZALRSC-NEXT:    bnez a4, .LBB51_16177; RV32I-ZALRSC-NEXT:  .LBB51_3:6178; RV32I-ZALRSC-NEXT:    mv a0, a36179; RV32I-ZALRSC-NEXT:    ret6180;6181; RV64I-LABEL: cmpxchg_i32_monotonic_monotonic_val0:6182; RV64I:       # %bb.0:6183; RV64I-NEXT:    addi sp, sp, -166184; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill6185; RV64I-NEXT:    sw a1, 4(sp)6186; RV64I-NEXT:    addi a1, sp, 46187; RV64I-NEXT:    li a3, 06188; RV64I-NEXT:    li a4, 06189; RV64I-NEXT:    call __atomic_compare_exchange_46190; RV64I-NEXT:    lw a0, 4(sp)6191; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload6192; RV64I-NEXT:    addi sp, sp, 166193; RV64I-NEXT:    ret6194;6195; RV64IA-NOZACAS-LABEL: cmpxchg_i32_monotonic_monotonic_val0:6196; RV64IA-NOZACAS:       # %bb.0:6197; RV64IA-NOZACAS-NEXT:  .LBB51_1: # =>This Inner Loop Header: Depth=16198; RV64IA-NOZACAS-NEXT:    lr.w a3, (a0)6199; RV64IA-NOZACAS-NEXT:    bne a3, a1, .LBB51_36200; RV64IA-NOZACAS-NEXT:  # %bb.2: # in Loop: Header=BB51_1 Depth=16201; RV64IA-NOZACAS-NEXT:    sc.w a4, a2, (a0)6202; RV64IA-NOZACAS-NEXT:    bnez a4, .LBB51_16203; RV64IA-NOZACAS-NEXT:  .LBB51_3:6204; RV64IA-NOZACAS-NEXT:    mv a0, a36205; RV64IA-NOZACAS-NEXT:    ret6206;6207; RV64IA-ZACAS-LABEL: cmpxchg_i32_monotonic_monotonic_val0:6208; RV64IA-ZACAS:       # %bb.0:6209; RV64IA-ZACAS-NEXT:    amocas.w a1, a2, (a0)6210; RV64IA-ZACAS-NEXT:    mv a0, a16211; RV64IA-ZACAS-NEXT:    ret6212;6213; RV64I-ZALRSC-LABEL: cmpxchg_i32_monotonic_monotonic_val0:6214; RV64I-ZALRSC:       # %bb.0:6215; RV64I-ZALRSC-NEXT:  .LBB51_1: # =>This Inner Loop Header: Depth=16216; RV64I-ZALRSC-NEXT:    lr.w a3, (a0)6217; RV64I-ZALRSC-NEXT:    bne a3, a1, .LBB51_36218; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB51_1 Depth=16219; RV64I-ZALRSC-NEXT:    sc.w a4, a2, (a0)6220; RV64I-ZALRSC-NEXT:    bnez a4, .LBB51_16221; RV64I-ZALRSC-NEXT:  .LBB51_3:6222; RV64I-ZALRSC-NEXT:    mv a0, a36223; RV64I-ZALRSC-NEXT:    ret6224  %1 = cmpxchg ptr %ptr, i32 %cmp, i32 %val monotonic monotonic6225  %2 = extractvalue { i32, i1 } %1, 06226  ret i32 %26227}6228 6229define i1 @cmpxchg_i32_monotonic_monotonic_val1(ptr %ptr, i32 signext %cmp, i32 signext %val) nounwind {6230; RV32I-LABEL: cmpxchg_i32_monotonic_monotonic_val1:6231; RV32I:       # %bb.0:6232; RV32I-NEXT:    addi sp, sp, -166233; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill6234; RV32I-NEXT:    sw a1, 8(sp)6235; RV32I-NEXT:    addi a1, sp, 86236; RV32I-NEXT:    li a3, 06237; RV32I-NEXT:    li a4, 06238; RV32I-NEXT:    call __atomic_compare_exchange_46239; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload6240; RV32I-NEXT:    addi sp, sp, 166241; RV32I-NEXT:    ret6242;6243; RV32IA-NOZACAS-LABEL: cmpxchg_i32_monotonic_monotonic_val1:6244; RV32IA-NOZACAS:       # %bb.0:6245; RV32IA-NOZACAS-NEXT:  .LBB52_1: # =>This Inner Loop Header: Depth=16246; RV32IA-NOZACAS-NEXT:    lr.w a3, (a0)6247; RV32IA-NOZACAS-NEXT:    bne a3, a1, .LBB52_36248; RV32IA-NOZACAS-NEXT:  # %bb.2: # in Loop: Header=BB52_1 Depth=16249; RV32IA-NOZACAS-NEXT:    sc.w a4, a2, (a0)6250; RV32IA-NOZACAS-NEXT:    bnez a4, .LBB52_16251; RV32IA-NOZACAS-NEXT:  .LBB52_3:6252; RV32IA-NOZACAS-NEXT:    xor a1, a3, a16253; RV32IA-NOZACAS-NEXT:    seqz a0, a16254; RV32IA-NOZACAS-NEXT:    ret6255;6256; RV32IA-ZACAS-LABEL: cmpxchg_i32_monotonic_monotonic_val1:6257; RV32IA-ZACAS:       # %bb.0:6258; RV32IA-ZACAS-NEXT:    mv a3, a16259; RV32IA-ZACAS-NEXT:    amocas.w a3, a2, (a0)6260; RV32IA-ZACAS-NEXT:    xor a1, a3, a16261; RV32IA-ZACAS-NEXT:    seqz a0, a16262; RV32IA-ZACAS-NEXT:    ret6263;6264; RV32I-ZALRSC-LABEL: cmpxchg_i32_monotonic_monotonic_val1:6265; RV32I-ZALRSC:       # %bb.0:6266; RV32I-ZALRSC-NEXT:  .LBB52_1: # =>This Inner Loop Header: Depth=16267; RV32I-ZALRSC-NEXT:    lr.w a3, (a0)6268; RV32I-ZALRSC-NEXT:    bne a3, a1, .LBB52_36269; RV32I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB52_1 Depth=16270; RV32I-ZALRSC-NEXT:    sc.w a4, a2, (a0)6271; RV32I-ZALRSC-NEXT:    bnez a4, .LBB52_16272; RV32I-ZALRSC-NEXT:  .LBB52_3:6273; RV32I-ZALRSC-NEXT:    xor a1, a3, a16274; RV32I-ZALRSC-NEXT:    seqz a0, a16275; RV32I-ZALRSC-NEXT:    ret6276;6277; RV64I-LABEL: cmpxchg_i32_monotonic_monotonic_val1:6278; RV64I:       # %bb.0:6279; RV64I-NEXT:    addi sp, sp, -166280; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill6281; RV64I-NEXT:    sw a1, 4(sp)6282; RV64I-NEXT:    addi a1, sp, 46283; RV64I-NEXT:    li a3, 06284; RV64I-NEXT:    li a4, 06285; RV64I-NEXT:    call __atomic_compare_exchange_46286; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload6287; RV64I-NEXT:    addi sp, sp, 166288; RV64I-NEXT:    ret6289;6290; RV64IA-NOZACAS-LABEL: cmpxchg_i32_monotonic_monotonic_val1:6291; RV64IA-NOZACAS:       # %bb.0:6292; RV64IA-NOZACAS-NEXT:  .LBB52_1: # =>This Inner Loop Header: Depth=16293; RV64IA-NOZACAS-NEXT:    lr.w a3, (a0)6294; RV64IA-NOZACAS-NEXT:    bne a3, a1, .LBB52_36295; RV64IA-NOZACAS-NEXT:  # %bb.2: # in Loop: Header=BB52_1 Depth=16296; RV64IA-NOZACAS-NEXT:    sc.w a4, a2, (a0)6297; RV64IA-NOZACAS-NEXT:    bnez a4, .LBB52_16298; RV64IA-NOZACAS-NEXT:  .LBB52_3:6299; RV64IA-NOZACAS-NEXT:    xor a1, a3, a16300; RV64IA-NOZACAS-NEXT:    seqz a0, a16301; RV64IA-NOZACAS-NEXT:    ret6302;6303; RV64IA-ZACAS-LABEL: cmpxchg_i32_monotonic_monotonic_val1:6304; RV64IA-ZACAS:       # %bb.0:6305; RV64IA-ZACAS-NEXT:    mv a3, a16306; RV64IA-ZACAS-NEXT:    amocas.w a3, a2, (a0)6307; RV64IA-ZACAS-NEXT:    xor a1, a3, a16308; RV64IA-ZACAS-NEXT:    seqz a0, a16309; RV64IA-ZACAS-NEXT:    ret6310;6311; RV64I-ZALRSC-LABEL: cmpxchg_i32_monotonic_monotonic_val1:6312; RV64I-ZALRSC:       # %bb.0:6313; RV64I-ZALRSC-NEXT:  .LBB52_1: # =>This Inner Loop Header: Depth=16314; RV64I-ZALRSC-NEXT:    lr.w a3, (a0)6315; RV64I-ZALRSC-NEXT:    bne a3, a1, .LBB52_36316; RV64I-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB52_1 Depth=16317; RV64I-ZALRSC-NEXT:    sc.w a4, a2, (a0)6318; RV64I-ZALRSC-NEXT:    bnez a4, .LBB52_16319; RV64I-ZALRSC-NEXT:  .LBB52_3:6320; RV64I-ZALRSC-NEXT:    xor a1, a3, a16321; RV64I-ZALRSC-NEXT:    seqz a0, a16322; RV64I-ZALRSC-NEXT:    ret6323  %1 = cmpxchg ptr %ptr, i32 %cmp, i32 %val monotonic monotonic6324  %2 = extractvalue { i32, i1 } %1, 16325  ret i1 %26326}6327 6328define signext i32 @atomicrmw_xchg_i32_monotonic_crossbb(ptr %a, i1 %c) nounwind {6329; RV32I-LABEL: atomicrmw_xchg_i32_monotonic_crossbb:6330; RV32I:       # %bb.0:6331; RV32I-NEXT:    andi a1, a1, 16332; RV32I-NEXT:    beqz a1, .LBB53_26333; RV32I-NEXT:  # %bb.1: # %then6334; RV32I-NEXT:    addi sp, sp, -166335; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill6336; RV32I-NEXT:    li a1, 16337; RV32I-NEXT:    li a2, 06338; RV32I-NEXT:    call __atomic_exchange_46339; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload6340; RV32I-NEXT:    addi sp, sp, 166341; RV32I-NEXT:    ret6342; RV32I-NEXT:  .LBB53_2: # %else6343; RV32I-NEXT:    lw a1, 0(a0)6344; RV32I-NEXT:    li a2, 16345; RV32I-NEXT:    sw a2, 0(a0)6346; RV32I-NEXT:    mv a0, a16347; RV32I-NEXT:    ret6348;6349; RV32IA-LABEL: atomicrmw_xchg_i32_monotonic_crossbb:6350; RV32IA:       # %bb.0:6351; RV32IA-NEXT:    andi a1, a1, 16352; RV32IA-NEXT:    beqz a1, .LBB53_26353; RV32IA-NEXT:  # %bb.1: # %then6354; RV32IA-NEXT:    li a1, 16355; RV32IA-NEXT:    amoswap.w a0, a1, (a0)6356; RV32IA-NEXT:    ret6357; RV32IA-NEXT:  .LBB53_2: # %else6358; RV32IA-NEXT:    mv a1, a06359; RV32IA-NEXT:    lw a0, 0(a0)6360; RV32IA-NEXT:    li a2, 16361; RV32IA-NEXT:    sw a2, 0(a1)6362; RV32IA-NEXT:    ret6363;6364; RV32I-ZALRSC-LABEL: atomicrmw_xchg_i32_monotonic_crossbb:6365; RV32I-ZALRSC:       # %bb.0:6366; RV32I-ZALRSC-NEXT:    andi a2, a1, 16367; RV32I-ZALRSC-NEXT:    mv a1, a06368; RV32I-ZALRSC-NEXT:    beqz a2, .LBB53_26369; RV32I-ZALRSC-NEXT:  # %bb.1: # %then6370; RV32I-ZALRSC-NEXT:    li a2, 16371; RV32I-ZALRSC-NEXT:  .LBB53_3: # %then6372; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=16373; RV32I-ZALRSC-NEXT:    lr.w a0, (a1)6374; RV32I-ZALRSC-NEXT:    mv a3, a26375; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a1)6376; RV32I-ZALRSC-NEXT:    bnez a3, .LBB53_36377; RV32I-ZALRSC-NEXT:  # %bb.4: # %then6378; RV32I-ZALRSC-NEXT:    ret6379; RV32I-ZALRSC-NEXT:  .LBB53_2: # %else6380; RV32I-ZALRSC-NEXT:    lw a0, 0(a1)6381; RV32I-ZALRSC-NEXT:    li a2, 16382; RV32I-ZALRSC-NEXT:    sw a2, 0(a1)6383; RV32I-ZALRSC-NEXT:    ret6384;6385; RV64I-LABEL: atomicrmw_xchg_i32_monotonic_crossbb:6386; RV64I:       # %bb.0:6387; RV64I-NEXT:    andi a1, a1, 16388; RV64I-NEXT:    beqz a1, .LBB53_26389; RV64I-NEXT:  # %bb.1: # %then6390; RV64I-NEXT:    addi sp, sp, -166391; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill6392; RV64I-NEXT:    li a1, 16393; RV64I-NEXT:    li a2, 06394; RV64I-NEXT:    call __atomic_exchange_46395; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload6396; RV64I-NEXT:    addi sp, sp, 166397; RV64I-NEXT:    sext.w a0, a06398; RV64I-NEXT:    ret6399; RV64I-NEXT:  .LBB53_2: # %else6400; RV64I-NEXT:    lw a1, 0(a0)6401; RV64I-NEXT:    li a2, 16402; RV64I-NEXT:    sw a2, 0(a0)6403; RV64I-NEXT:    sext.w a0, a16404; RV64I-NEXT:    ret6405;6406; RV64IA-LABEL: atomicrmw_xchg_i32_monotonic_crossbb:6407; RV64IA:       # %bb.0:6408; RV64IA-NEXT:    andi a1, a1, 16409; RV64IA-NEXT:    beqz a1, .LBB53_26410; RV64IA-NEXT:  # %bb.1: # %then6411; RV64IA-NEXT:    li a1, 16412; RV64IA-NEXT:    amoswap.w a0, a1, (a0)6413; RV64IA-NEXT:    ret6414; RV64IA-NEXT:  .LBB53_2: # %else6415; RV64IA-NEXT:    mv a1, a06416; RV64IA-NEXT:    lw a0, 0(a0)6417; RV64IA-NEXT:    li a2, 16418; RV64IA-NEXT:    sw a2, 0(a1)6419; RV64IA-NEXT:    ret6420;6421; RV64I-ZALRSC-LABEL: atomicrmw_xchg_i32_monotonic_crossbb:6422; RV64I-ZALRSC:       # %bb.0:6423; RV64I-ZALRSC-NEXT:    andi a1, a1, 16424; RV64I-ZALRSC-NEXT:    beqz a1, .LBB53_26425; RV64I-ZALRSC-NEXT:  # %bb.1: # %then6426; RV64I-ZALRSC-NEXT:    li a2, 16427; RV64I-ZALRSC-NEXT:  .LBB53_3: # %then6428; RV64I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=16429; RV64I-ZALRSC-NEXT:    lr.w a1, (a0)6430; RV64I-ZALRSC-NEXT:    mv a3, a26431; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)6432; RV64I-ZALRSC-NEXT:    bnez a3, .LBB53_36433; RV64I-ZALRSC-NEXT:  # %bb.4: # %then6434; RV64I-ZALRSC-NEXT:    sext.w a0, a16435; RV64I-ZALRSC-NEXT:    ret6436; RV64I-ZALRSC-NEXT:  .LBB53_2: # %else6437; RV64I-ZALRSC-NEXT:    lw a1, 0(a0)6438; RV64I-ZALRSC-NEXT:    li a2, 16439; RV64I-ZALRSC-NEXT:    sw a2, 0(a0)6440; RV64I-ZALRSC-NEXT:    sext.w a0, a16441; RV64I-ZALRSC-NEXT:    ret6442  br i1 %c, label %then, label %else6443 6444then:6445  %1 = atomicrmw xchg ptr %a, i32 1 monotonic6446  br label %merge6447 6448else:6449  %2 = load i32, ptr %a, align 46450  store i32 1, ptr %a6451  br label %merge6452 6453merge:6454  %3 = phi i32 [ %1, %then ], [ %2, %else ]6455  ret i32 %36456}6457 6458define signext i32 @atomicrmw_add_i32_monotonic_crossbb(ptr %a, i1 %c) nounwind {6459; RV32I-LABEL: atomicrmw_add_i32_monotonic_crossbb:6460; RV32I:       # %bb.0:6461; RV32I-NEXT:    andi a1, a1, 16462; RV32I-NEXT:    beqz a1, .LBB54_26463; RV32I-NEXT:  # %bb.1: # %then6464; RV32I-NEXT:    addi sp, sp, -166465; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill6466; RV32I-NEXT:    li a1, 16467; RV32I-NEXT:    li a2, 06468; RV32I-NEXT:    call __atomic_fetch_add_46469; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload6470; RV32I-NEXT:    addi sp, sp, 166471; RV32I-NEXT:    ret6472; RV32I-NEXT:  .LBB54_2: # %else6473; RV32I-NEXT:    lw a1, 0(a0)6474; RV32I-NEXT:    addi a2, a1, 16475; RV32I-NEXT:    sw a2, 0(a0)6476; RV32I-NEXT:    mv a0, a16477; RV32I-NEXT:    ret6478;6479; RV32IA-LABEL: atomicrmw_add_i32_monotonic_crossbb:6480; RV32IA:       # %bb.0:6481; RV32IA-NEXT:    andi a1, a1, 16482; RV32IA-NEXT:    beqz a1, .LBB54_26483; RV32IA-NEXT:  # %bb.1: # %then6484; RV32IA-NEXT:    li a1, 16485; RV32IA-NEXT:    amoadd.w a0, a1, (a0)6486; RV32IA-NEXT:    ret6487; RV32IA-NEXT:  .LBB54_2: # %else6488; RV32IA-NEXT:    mv a1, a06489; RV32IA-NEXT:    lw a0, 0(a0)6490; RV32IA-NEXT:    addi a2, a0, 16491; RV32IA-NEXT:    sw a2, 0(a1)6492; RV32IA-NEXT:    ret6493;6494; RV32I-ZALRSC-LABEL: atomicrmw_add_i32_monotonic_crossbb:6495; RV32I-ZALRSC:       # %bb.0:6496; RV32I-ZALRSC-NEXT:    andi a2, a1, 16497; RV32I-ZALRSC-NEXT:    mv a1, a06498; RV32I-ZALRSC-NEXT:    beqz a2, .LBB54_26499; RV32I-ZALRSC-NEXT:  # %bb.1: # %then6500; RV32I-ZALRSC-NEXT:    li a2, 16501; RV32I-ZALRSC-NEXT:  .LBB54_3: # %then6502; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=16503; RV32I-ZALRSC-NEXT:    lr.w a0, (a1)6504; RV32I-ZALRSC-NEXT:    add a3, a0, a26505; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a1)6506; RV32I-ZALRSC-NEXT:    bnez a3, .LBB54_36507; RV32I-ZALRSC-NEXT:  # %bb.4: # %then6508; RV32I-ZALRSC-NEXT:    ret6509; RV32I-ZALRSC-NEXT:  .LBB54_2: # %else6510; RV32I-ZALRSC-NEXT:    lw a0, 0(a1)6511; RV32I-ZALRSC-NEXT:    addi a2, a0, 16512; RV32I-ZALRSC-NEXT:    sw a2, 0(a1)6513; RV32I-ZALRSC-NEXT:    ret6514;6515; RV64I-LABEL: atomicrmw_add_i32_monotonic_crossbb:6516; RV64I:       # %bb.0:6517; RV64I-NEXT:    andi a1, a1, 16518; RV64I-NEXT:    beqz a1, .LBB54_26519; RV64I-NEXT:  # %bb.1: # %then6520; RV64I-NEXT:    addi sp, sp, -166521; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill6522; RV64I-NEXT:    li a1, 16523; RV64I-NEXT:    li a2, 06524; RV64I-NEXT:    call __atomic_fetch_add_46525; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload6526; RV64I-NEXT:    addi sp, sp, 166527; RV64I-NEXT:    sext.w a0, a06528; RV64I-NEXT:    ret6529; RV64I-NEXT:  .LBB54_2: # %else6530; RV64I-NEXT:    lw a1, 0(a0)6531; RV64I-NEXT:    addi a2, a1, 16532; RV64I-NEXT:    sw a2, 0(a0)6533; RV64I-NEXT:    sext.w a0, a16534; RV64I-NEXT:    ret6535;6536; RV64IA-LABEL: atomicrmw_add_i32_monotonic_crossbb:6537; RV64IA:       # %bb.0:6538; RV64IA-NEXT:    andi a1, a1, 16539; RV64IA-NEXT:    beqz a1, .LBB54_26540; RV64IA-NEXT:  # %bb.1: # %then6541; RV64IA-NEXT:    li a1, 16542; RV64IA-NEXT:    amoadd.w a0, a1, (a0)6543; RV64IA-NEXT:    ret6544; RV64IA-NEXT:  .LBB54_2: # %else6545; RV64IA-NEXT:    mv a1, a06546; RV64IA-NEXT:    lw a0, 0(a0)6547; RV64IA-NEXT:    addi a2, a0, 16548; RV64IA-NEXT:    sw a2, 0(a1)6549; RV64IA-NEXT:    ret6550;6551; RV64I-ZALRSC-LABEL: atomicrmw_add_i32_monotonic_crossbb:6552; RV64I-ZALRSC:       # %bb.0:6553; RV64I-ZALRSC-NEXT:    andi a1, a1, 16554; RV64I-ZALRSC-NEXT:    beqz a1, .LBB54_26555; RV64I-ZALRSC-NEXT:  # %bb.1: # %then6556; RV64I-ZALRSC-NEXT:    li a2, 16557; RV64I-ZALRSC-NEXT:  .LBB54_3: # %then6558; RV64I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=16559; RV64I-ZALRSC-NEXT:    lr.w a1, (a0)6560; RV64I-ZALRSC-NEXT:    add a3, a1, a26561; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)6562; RV64I-ZALRSC-NEXT:    bnez a3, .LBB54_36563; RV64I-ZALRSC-NEXT:  # %bb.4: # %then6564; RV64I-ZALRSC-NEXT:    sext.w a0, a16565; RV64I-ZALRSC-NEXT:    ret6566; RV64I-ZALRSC-NEXT:  .LBB54_2: # %else6567; RV64I-ZALRSC-NEXT:    lw a1, 0(a0)6568; RV64I-ZALRSC-NEXT:    addi a2, a1, 16569; RV64I-ZALRSC-NEXT:    sw a2, 0(a0)6570; RV64I-ZALRSC-NEXT:    sext.w a0, a16571; RV64I-ZALRSC-NEXT:    ret6572  br i1 %c, label %then, label %else6573 6574then:6575  %1 = atomicrmw add ptr %a, i32 1 monotonic6576  br label %merge6577 6578else:6579  %2 = load i32, ptr %a, align 46580  %3 = add i32 %2, 16581  store i32 %3, ptr %a6582  br label %merge6583 6584merge:6585  %4 = phi i32 [ %1, %then ], [ %2, %else ]6586  ret i32 %46587}6588 6589define signext i32 @atomicrmw_sub_i32_monotonic_crossbb(ptr %a, i1 %c) nounwind {6590; RV32I-LABEL: atomicrmw_sub_i32_monotonic_crossbb:6591; RV32I:       # %bb.0:6592; RV32I-NEXT:    andi a1, a1, 16593; RV32I-NEXT:    beqz a1, .LBB55_26594; RV32I-NEXT:  # %bb.1: # %then6595; RV32I-NEXT:    addi sp, sp, -166596; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill6597; RV32I-NEXT:    li a1, 16598; RV32I-NEXT:    li a2, 06599; RV32I-NEXT:    call __atomic_fetch_sub_46600; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload6601; RV32I-NEXT:    addi sp, sp, 166602; RV32I-NEXT:    ret6603; RV32I-NEXT:  .LBB55_2: # %else6604; RV32I-NEXT:    lw a1, 0(a0)6605; RV32I-NEXT:    addi a2, a1, -16606; RV32I-NEXT:    sw a2, 0(a0)6607; RV32I-NEXT:    mv a0, a16608; RV32I-NEXT:    ret6609;6610; RV32IA-LABEL: atomicrmw_sub_i32_monotonic_crossbb:6611; RV32IA:       # %bb.0:6612; RV32IA-NEXT:    andi a1, a1, 16613; RV32IA-NEXT:    beqz a1, .LBB55_26614; RV32IA-NEXT:  # %bb.1: # %then6615; RV32IA-NEXT:    li a1, -16616; RV32IA-NEXT:    amoadd.w a0, a1, (a0)6617; RV32IA-NEXT:    ret6618; RV32IA-NEXT:  .LBB55_2: # %else6619; RV32IA-NEXT:    mv a1, a06620; RV32IA-NEXT:    lw a0, 0(a0)6621; RV32IA-NEXT:    addi a2, a0, -16622; RV32IA-NEXT:    sw a2, 0(a1)6623; RV32IA-NEXT:    ret6624;6625; RV32I-ZALRSC-LABEL: atomicrmw_sub_i32_monotonic_crossbb:6626; RV32I-ZALRSC:       # %bb.0:6627; RV32I-ZALRSC-NEXT:    andi a2, a1, 16628; RV32I-ZALRSC-NEXT:    mv a1, a06629; RV32I-ZALRSC-NEXT:    beqz a2, .LBB55_26630; RV32I-ZALRSC-NEXT:  # %bb.1: # %then6631; RV32I-ZALRSC-NEXT:    li a2, 16632; RV32I-ZALRSC-NEXT:  .LBB55_3: # %then6633; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=16634; RV32I-ZALRSC-NEXT:    lr.w a0, (a1)6635; RV32I-ZALRSC-NEXT:    sub a3, a0, a26636; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a1)6637; RV32I-ZALRSC-NEXT:    bnez a3, .LBB55_36638; RV32I-ZALRSC-NEXT:  # %bb.4: # %then6639; RV32I-ZALRSC-NEXT:    ret6640; RV32I-ZALRSC-NEXT:  .LBB55_2: # %else6641; RV32I-ZALRSC-NEXT:    lw a0, 0(a1)6642; RV32I-ZALRSC-NEXT:    addi a2, a0, -16643; RV32I-ZALRSC-NEXT:    sw a2, 0(a1)6644; RV32I-ZALRSC-NEXT:    ret6645;6646; RV64I-LABEL: atomicrmw_sub_i32_monotonic_crossbb:6647; RV64I:       # %bb.0:6648; RV64I-NEXT:    andi a1, a1, 16649; RV64I-NEXT:    beqz a1, .LBB55_26650; RV64I-NEXT:  # %bb.1: # %then6651; RV64I-NEXT:    addi sp, sp, -166652; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill6653; RV64I-NEXT:    li a1, 16654; RV64I-NEXT:    li a2, 06655; RV64I-NEXT:    call __atomic_fetch_sub_46656; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload6657; RV64I-NEXT:    addi sp, sp, 166658; RV64I-NEXT:    sext.w a0, a06659; RV64I-NEXT:    ret6660; RV64I-NEXT:  .LBB55_2: # %else6661; RV64I-NEXT:    lw a1, 0(a0)6662; RV64I-NEXT:    addi a2, a1, -16663; RV64I-NEXT:    sw a2, 0(a0)6664; RV64I-NEXT:    sext.w a0, a16665; RV64I-NEXT:    ret6666;6667; RV64IA-LABEL: atomicrmw_sub_i32_monotonic_crossbb:6668; RV64IA:       # %bb.0:6669; RV64IA-NEXT:    andi a1, a1, 16670; RV64IA-NEXT:    beqz a1, .LBB55_26671; RV64IA-NEXT:  # %bb.1: # %then6672; RV64IA-NEXT:    li a1, -16673; RV64IA-NEXT:    amoadd.w a0, a1, (a0)6674; RV64IA-NEXT:    ret6675; RV64IA-NEXT:  .LBB55_2: # %else6676; RV64IA-NEXT:    mv a1, a06677; RV64IA-NEXT:    lw a0, 0(a0)6678; RV64IA-NEXT:    addi a2, a0, -16679; RV64IA-NEXT:    sw a2, 0(a1)6680; RV64IA-NEXT:    ret6681;6682; RV64I-ZALRSC-LABEL: atomicrmw_sub_i32_monotonic_crossbb:6683; RV64I-ZALRSC:       # %bb.0:6684; RV64I-ZALRSC-NEXT:    andi a1, a1, 16685; RV64I-ZALRSC-NEXT:    beqz a1, .LBB55_26686; RV64I-ZALRSC-NEXT:  # %bb.1: # %then6687; RV64I-ZALRSC-NEXT:    li a2, 16688; RV64I-ZALRSC-NEXT:  .LBB55_3: # %then6689; RV64I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=16690; RV64I-ZALRSC-NEXT:    lr.w a1, (a0)6691; RV64I-ZALRSC-NEXT:    sub a3, a1, a26692; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)6693; RV64I-ZALRSC-NEXT:    bnez a3, .LBB55_36694; RV64I-ZALRSC-NEXT:  # %bb.4: # %then6695; RV64I-ZALRSC-NEXT:    sext.w a0, a16696; RV64I-ZALRSC-NEXT:    ret6697; RV64I-ZALRSC-NEXT:  .LBB55_2: # %else6698; RV64I-ZALRSC-NEXT:    lw a1, 0(a0)6699; RV64I-ZALRSC-NEXT:    addi a2, a1, -16700; RV64I-ZALRSC-NEXT:    sw a2, 0(a0)6701; RV64I-ZALRSC-NEXT:    sext.w a0, a16702; RV64I-ZALRSC-NEXT:    ret6703  br i1 %c, label %then, label %else6704 6705then:6706  %1 = atomicrmw sub ptr %a, i32 1 monotonic6707  br label %merge6708 6709else:6710  %2 = load i32, ptr %a, align 46711  %3 = sub i32 %2, 16712  store i32 %3, ptr %a6713  br label %merge6714 6715merge:6716  %4 = phi i32 [ %1, %then ], [ %2, %else ]6717  ret i32 %46718}6719 6720define signext i32 @atomicrmw_and_i32_monotonic_crossbb(ptr %a, i1 %c) nounwind {6721; RV32I-LABEL: atomicrmw_and_i32_monotonic_crossbb:6722; RV32I:       # %bb.0:6723; RV32I-NEXT:    andi a1, a1, 16724; RV32I-NEXT:    beqz a1, .LBB56_26725; RV32I-NEXT:  # %bb.1: # %then6726; RV32I-NEXT:    addi sp, sp, -166727; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill6728; RV32I-NEXT:    li a1, 16729; RV32I-NEXT:    li a2, 06730; RV32I-NEXT:    call __atomic_fetch_and_46731; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload6732; RV32I-NEXT:    addi sp, sp, 166733; RV32I-NEXT:    ret6734; RV32I-NEXT:  .LBB56_2: # %else6735; RV32I-NEXT:    lw a1, 0(a0)6736; RV32I-NEXT:    andi a2, a1, 16737; RV32I-NEXT:    sw a2, 0(a0)6738; RV32I-NEXT:    mv a0, a16739; RV32I-NEXT:    ret6740;6741; RV32IA-LABEL: atomicrmw_and_i32_monotonic_crossbb:6742; RV32IA:       # %bb.0:6743; RV32IA-NEXT:    andi a1, a1, 16744; RV32IA-NEXT:    beqz a1, .LBB56_26745; RV32IA-NEXT:  # %bb.1: # %then6746; RV32IA-NEXT:    li a1, 16747; RV32IA-NEXT:    amoand.w a0, a1, (a0)6748; RV32IA-NEXT:    ret6749; RV32IA-NEXT:  .LBB56_2: # %else6750; RV32IA-NEXT:    mv a1, a06751; RV32IA-NEXT:    lw a0, 0(a0)6752; RV32IA-NEXT:    andi a2, a0, 16753; RV32IA-NEXT:    sw a2, 0(a1)6754; RV32IA-NEXT:    ret6755;6756; RV32I-ZALRSC-LABEL: atomicrmw_and_i32_monotonic_crossbb:6757; RV32I-ZALRSC:       # %bb.0:6758; RV32I-ZALRSC-NEXT:    andi a2, a1, 16759; RV32I-ZALRSC-NEXT:    mv a1, a06760; RV32I-ZALRSC-NEXT:    beqz a2, .LBB56_26761; RV32I-ZALRSC-NEXT:  # %bb.1: # %then6762; RV32I-ZALRSC-NEXT:    li a2, 16763; RV32I-ZALRSC-NEXT:  .LBB56_3: # %then6764; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=16765; RV32I-ZALRSC-NEXT:    lr.w a0, (a1)6766; RV32I-ZALRSC-NEXT:    and a3, a0, a26767; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a1)6768; RV32I-ZALRSC-NEXT:    bnez a3, .LBB56_36769; RV32I-ZALRSC-NEXT:  # %bb.4: # %then6770; RV32I-ZALRSC-NEXT:    ret6771; RV32I-ZALRSC-NEXT:  .LBB56_2: # %else6772; RV32I-ZALRSC-NEXT:    lw a0, 0(a1)6773; RV32I-ZALRSC-NEXT:    andi a2, a0, 16774; RV32I-ZALRSC-NEXT:    sw a2, 0(a1)6775; RV32I-ZALRSC-NEXT:    ret6776;6777; RV64I-LABEL: atomicrmw_and_i32_monotonic_crossbb:6778; RV64I:       # %bb.0:6779; RV64I-NEXT:    andi a1, a1, 16780; RV64I-NEXT:    beqz a1, .LBB56_26781; RV64I-NEXT:  # %bb.1: # %then6782; RV64I-NEXT:    addi sp, sp, -166783; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill6784; RV64I-NEXT:    li a1, 16785; RV64I-NEXT:    li a2, 06786; RV64I-NEXT:    call __atomic_fetch_and_46787; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload6788; RV64I-NEXT:    addi sp, sp, 166789; RV64I-NEXT:    sext.w a0, a06790; RV64I-NEXT:    ret6791; RV64I-NEXT:  .LBB56_2: # %else6792; RV64I-NEXT:    lw a1, 0(a0)6793; RV64I-NEXT:    andi a2, a1, 16794; RV64I-NEXT:    sw a2, 0(a0)6795; RV64I-NEXT:    sext.w a0, a16796; RV64I-NEXT:    ret6797;6798; RV64IA-LABEL: atomicrmw_and_i32_monotonic_crossbb:6799; RV64IA:       # %bb.0:6800; RV64IA-NEXT:    andi a1, a1, 16801; RV64IA-NEXT:    beqz a1, .LBB56_26802; RV64IA-NEXT:  # %bb.1: # %then6803; RV64IA-NEXT:    li a1, 16804; RV64IA-NEXT:    amoand.w a0, a1, (a0)6805; RV64IA-NEXT:    ret6806; RV64IA-NEXT:  .LBB56_2: # %else6807; RV64IA-NEXT:    mv a1, a06808; RV64IA-NEXT:    lw a0, 0(a0)6809; RV64IA-NEXT:    andi a2, a0, 16810; RV64IA-NEXT:    sw a2, 0(a1)6811; RV64IA-NEXT:    ret6812;6813; RV64I-ZALRSC-LABEL: atomicrmw_and_i32_monotonic_crossbb:6814; RV64I-ZALRSC:       # %bb.0:6815; RV64I-ZALRSC-NEXT:    andi a1, a1, 16816; RV64I-ZALRSC-NEXT:    beqz a1, .LBB56_26817; RV64I-ZALRSC-NEXT:  # %bb.1: # %then6818; RV64I-ZALRSC-NEXT:    li a2, 16819; RV64I-ZALRSC-NEXT:  .LBB56_3: # %then6820; RV64I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=16821; RV64I-ZALRSC-NEXT:    lr.w a1, (a0)6822; RV64I-ZALRSC-NEXT:    and a3, a1, a26823; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)6824; RV64I-ZALRSC-NEXT:    bnez a3, .LBB56_36825; RV64I-ZALRSC-NEXT:  # %bb.4: # %then6826; RV64I-ZALRSC-NEXT:    sext.w a0, a16827; RV64I-ZALRSC-NEXT:    ret6828; RV64I-ZALRSC-NEXT:  .LBB56_2: # %else6829; RV64I-ZALRSC-NEXT:    lw a1, 0(a0)6830; RV64I-ZALRSC-NEXT:    andi a2, a1, 16831; RV64I-ZALRSC-NEXT:    sw a2, 0(a0)6832; RV64I-ZALRSC-NEXT:    sext.w a0, a16833; RV64I-ZALRSC-NEXT:    ret6834  br i1 %c, label %then, label %else6835 6836then:6837  %1 = atomicrmw and ptr %a, i32 1 monotonic6838  br label %merge6839 6840else:6841  %2 = load i32, ptr %a, align 46842  %3 = and i32 %2, 16843  store i32 %3, ptr %a6844  br label %merge6845 6846merge:6847  %4 = phi i32 [ %1, %then ], [ %2, %else ]6848  ret i32 %46849}6850 6851define signext i32 @atomicrmw_nand_i32_monotonic_crossbb(ptr %a, i1 %c) nounwind {6852; RV32I-LABEL: atomicrmw_nand_i32_monotonic_crossbb:6853; RV32I:       # %bb.0:6854; RV32I-NEXT:    andi a1, a1, 16855; RV32I-NEXT:    beqz a1, .LBB57_26856; RV32I-NEXT:  # %bb.1: # %then6857; RV32I-NEXT:    addi sp, sp, -166858; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill6859; RV32I-NEXT:    li a1, 16860; RV32I-NEXT:    li a2, 06861; RV32I-NEXT:    call __atomic_fetch_nand_46862; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload6863; RV32I-NEXT:    addi sp, sp, 166864; RV32I-NEXT:    ret6865; RV32I-NEXT:  .LBB57_2: # %else6866; RV32I-NEXT:    lw a1, 0(a0)6867; RV32I-NEXT:    andi a2, a1, 16868; RV32I-NEXT:    sw a2, 0(a0)6869; RV32I-NEXT:    mv a0, a16870; RV32I-NEXT:    ret6871;6872; RV32IA-NOZACAS-LABEL: atomicrmw_nand_i32_monotonic_crossbb:6873; RV32IA-NOZACAS:       # %bb.0:6874; RV32IA-NOZACAS-NEXT:    andi a2, a1, 16875; RV32IA-NOZACAS-NEXT:    mv a1, a06876; RV32IA-NOZACAS-NEXT:    beqz a2, .LBB57_26877; RV32IA-NOZACAS-NEXT:  # %bb.1: # %then6878; RV32IA-NOZACAS-NEXT:    li a2, 16879; RV32IA-NOZACAS-NEXT:  .LBB57_3: # %then6880; RV32IA-NOZACAS-NEXT:    # =>This Inner Loop Header: Depth=16881; RV32IA-NOZACAS-NEXT:    lr.w a0, (a1)6882; RV32IA-NOZACAS-NEXT:    and a3, a0, a26883; RV32IA-NOZACAS-NEXT:    not a3, a36884; RV32IA-NOZACAS-NEXT:    sc.w a3, a3, (a1)6885; RV32IA-NOZACAS-NEXT:    bnez a3, .LBB57_36886; RV32IA-NOZACAS-NEXT:  # %bb.4: # %then6887; RV32IA-NOZACAS-NEXT:    ret6888; RV32IA-NOZACAS-NEXT:  .LBB57_2: # %else6889; RV32IA-NOZACAS-NEXT:    lw a0, 0(a1)6890; RV32IA-NOZACAS-NEXT:    andi a2, a0, 16891; RV32IA-NOZACAS-NEXT:    sw a2, 0(a1)6892; RV32IA-NOZACAS-NEXT:    ret6893;6894; RV32IA-ZACAS-LABEL: atomicrmw_nand_i32_monotonic_crossbb:6895; RV32IA-ZACAS:       # %bb.0:6896; RV32IA-ZACAS-NEXT:    andi a1, a1, 16897; RV32IA-ZACAS-NEXT:    beqz a1, .LBB57_46898; RV32IA-ZACAS-NEXT:  # %bb.1: # %then6899; RV32IA-ZACAS-NEXT:    lw a1, 0(a0)6900; RV32IA-ZACAS-NEXT:  .LBB57_2: # %atomicrmw.start6901; RV32IA-ZACAS-NEXT:    # =>This Inner Loop Header: Depth=16902; RV32IA-ZACAS-NEXT:    mv a2, a16903; RV32IA-ZACAS-NEXT:    not a3, a16904; RV32IA-ZACAS-NEXT:    ori a3, a3, -26905; RV32IA-ZACAS-NEXT:    amocas.w a1, a3, (a0)6906; RV32IA-ZACAS-NEXT:    bne a1, a2, .LBB57_26907; RV32IA-ZACAS-NEXT:  # %bb.3: # %merge6908; RV32IA-ZACAS-NEXT:    mv a0, a16909; RV32IA-ZACAS-NEXT:    ret6910; RV32IA-ZACAS-NEXT:  .LBB57_4: # %else6911; RV32IA-ZACAS-NEXT:    lw a1, 0(a0)6912; RV32IA-ZACAS-NEXT:    andi a2, a1, 16913; RV32IA-ZACAS-NEXT:    sw a2, 0(a0)6914; RV32IA-ZACAS-NEXT:    mv a0, a16915; RV32IA-ZACAS-NEXT:    ret6916;6917; RV32I-ZALRSC-LABEL: atomicrmw_nand_i32_monotonic_crossbb:6918; RV32I-ZALRSC:       # %bb.0:6919; RV32I-ZALRSC-NEXT:    andi a2, a1, 16920; RV32I-ZALRSC-NEXT:    mv a1, a06921; RV32I-ZALRSC-NEXT:    beqz a2, .LBB57_26922; RV32I-ZALRSC-NEXT:  # %bb.1: # %then6923; RV32I-ZALRSC-NEXT:    li a2, 16924; RV32I-ZALRSC-NEXT:  .LBB57_3: # %then6925; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=16926; RV32I-ZALRSC-NEXT:    lr.w a0, (a1)6927; RV32I-ZALRSC-NEXT:    and a3, a0, a26928; RV32I-ZALRSC-NEXT:    not a3, a36929; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a1)6930; RV32I-ZALRSC-NEXT:    bnez a3, .LBB57_36931; RV32I-ZALRSC-NEXT:  # %bb.4: # %then6932; RV32I-ZALRSC-NEXT:    ret6933; RV32I-ZALRSC-NEXT:  .LBB57_2: # %else6934; RV32I-ZALRSC-NEXT:    lw a0, 0(a1)6935; RV32I-ZALRSC-NEXT:    andi a2, a0, 16936; RV32I-ZALRSC-NEXT:    sw a2, 0(a1)6937; RV32I-ZALRSC-NEXT:    ret6938;6939; RV64I-LABEL: atomicrmw_nand_i32_monotonic_crossbb:6940; RV64I:       # %bb.0:6941; RV64I-NEXT:    andi a1, a1, 16942; RV64I-NEXT:    beqz a1, .LBB57_26943; RV64I-NEXT:  # %bb.1: # %then6944; RV64I-NEXT:    addi sp, sp, -166945; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill6946; RV64I-NEXT:    li a1, 16947; RV64I-NEXT:    li a2, 06948; RV64I-NEXT:    call __atomic_fetch_nand_46949; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload6950; RV64I-NEXT:    addi sp, sp, 166951; RV64I-NEXT:    sext.w a0, a06952; RV64I-NEXT:    ret6953; RV64I-NEXT:  .LBB57_2: # %else6954; RV64I-NEXT:    lw a1, 0(a0)6955; RV64I-NEXT:    andi a2, a1, 16956; RV64I-NEXT:    sw a2, 0(a0)6957; RV64I-NEXT:    sext.w a0, a16958; RV64I-NEXT:    ret6959;6960; RV64IA-NOZACAS-LABEL: atomicrmw_nand_i32_monotonic_crossbb:6961; RV64IA-NOZACAS:       # %bb.0:6962; RV64IA-NOZACAS-NEXT:    andi a2, a1, 16963; RV64IA-NOZACAS-NEXT:    mv a1, a06964; RV64IA-NOZACAS-NEXT:    beqz a2, .LBB57_26965; RV64IA-NOZACAS-NEXT:  # %bb.1: # %then6966; RV64IA-NOZACAS-NEXT:    li a2, 16967; RV64IA-NOZACAS-NEXT:  .LBB57_3: # %then6968; RV64IA-NOZACAS-NEXT:    # =>This Inner Loop Header: Depth=16969; RV64IA-NOZACAS-NEXT:    lr.w a0, (a1)6970; RV64IA-NOZACAS-NEXT:    and a3, a0, a26971; RV64IA-NOZACAS-NEXT:    not a3, a36972; RV64IA-NOZACAS-NEXT:    sc.w a3, a3, (a1)6973; RV64IA-NOZACAS-NEXT:    bnez a3, .LBB57_36974; RV64IA-NOZACAS-NEXT:  # %bb.4: # %then6975; RV64IA-NOZACAS-NEXT:    ret6976; RV64IA-NOZACAS-NEXT:  .LBB57_2: # %else6977; RV64IA-NOZACAS-NEXT:    lw a0, 0(a1)6978; RV64IA-NOZACAS-NEXT:    andi a2, a0, 16979; RV64IA-NOZACAS-NEXT:    sw a2, 0(a1)6980; RV64IA-NOZACAS-NEXT:    ret6981;6982; RV64IA-ZACAS-LABEL: atomicrmw_nand_i32_monotonic_crossbb:6983; RV64IA-ZACAS:       # %bb.0:6984; RV64IA-ZACAS-NEXT:    andi a1, a1, 16985; RV64IA-ZACAS-NEXT:    beqz a1, .LBB57_46986; RV64IA-ZACAS-NEXT:  # %bb.1: # %then6987; RV64IA-ZACAS-NEXT:    lw a1, 0(a0)6988; RV64IA-ZACAS-NEXT:  .LBB57_2: # %atomicrmw.start6989; RV64IA-ZACAS-NEXT:    # =>This Inner Loop Header: Depth=16990; RV64IA-ZACAS-NEXT:    mv a2, a16991; RV64IA-ZACAS-NEXT:    not a3, a16992; RV64IA-ZACAS-NEXT:    ori a3, a3, -26993; RV64IA-ZACAS-NEXT:    amocas.w a1, a3, (a0)6994; RV64IA-ZACAS-NEXT:    bne a1, a2, .LBB57_26995; RV64IA-ZACAS-NEXT:  # %bb.3: # %merge6996; RV64IA-ZACAS-NEXT:    mv a0, a16997; RV64IA-ZACAS-NEXT:    ret6998; RV64IA-ZACAS-NEXT:  .LBB57_4: # %else6999; RV64IA-ZACAS-NEXT:    lw a1, 0(a0)7000; RV64IA-ZACAS-NEXT:    andi a2, a1, 17001; RV64IA-ZACAS-NEXT:    sw a2, 0(a0)7002; RV64IA-ZACAS-NEXT:    mv a0, a17003; RV64IA-ZACAS-NEXT:    ret7004;7005; RV64I-ZALRSC-LABEL: atomicrmw_nand_i32_monotonic_crossbb:7006; RV64I-ZALRSC:       # %bb.0:7007; RV64I-ZALRSC-NEXT:    andi a2, a1, 17008; RV64I-ZALRSC-NEXT:    mv a1, a07009; RV64I-ZALRSC-NEXT:    beqz a2, .LBB57_27010; RV64I-ZALRSC-NEXT:  # %bb.1: # %then7011; RV64I-ZALRSC-NEXT:    li a2, 17012; RV64I-ZALRSC-NEXT:  .LBB57_3: # %then7013; RV64I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=17014; RV64I-ZALRSC-NEXT:    lr.w a0, (a1)7015; RV64I-ZALRSC-NEXT:    and a3, a0, a27016; RV64I-ZALRSC-NEXT:    not a3, a37017; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a1)7018; RV64I-ZALRSC-NEXT:    bnez a3, .LBB57_37019; RV64I-ZALRSC-NEXT:  # %bb.4: # %then7020; RV64I-ZALRSC-NEXT:    ret7021; RV64I-ZALRSC-NEXT:  .LBB57_2: # %else7022; RV64I-ZALRSC-NEXT:    lw a0, 0(a1)7023; RV64I-ZALRSC-NEXT:    andi a2, a0, 17024; RV64I-ZALRSC-NEXT:    sw a2, 0(a1)7025; RV64I-ZALRSC-NEXT:    ret7026  br i1 %c, label %then, label %else7027 7028then:7029  %1 = atomicrmw nand ptr %a, i32 1 monotonic7030  br label %merge7031 7032else:7033  %2 = load i32, ptr %a, align 47034  %3 = and i32 %2, 17035  store i32 %3, ptr %a7036  br label %merge7037 7038merge:7039  %4 = phi i32 [ %1, %then ], [ %2, %else ]7040  ret i32 %47041}7042 7043define signext i32 @atomicrmw_or_i32_monotonic_crossbb(ptr %a, i1 %c) nounwind {7044; RV32I-LABEL: atomicrmw_or_i32_monotonic_crossbb:7045; RV32I:       # %bb.0:7046; RV32I-NEXT:    andi a1, a1, 17047; RV32I-NEXT:    beqz a1, .LBB58_27048; RV32I-NEXT:  # %bb.1: # %then7049; RV32I-NEXT:    addi sp, sp, -167050; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill7051; RV32I-NEXT:    li a1, 17052; RV32I-NEXT:    li a2, 07053; RV32I-NEXT:    call __atomic_fetch_or_47054; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload7055; RV32I-NEXT:    addi sp, sp, 167056; RV32I-NEXT:    ret7057; RV32I-NEXT:  .LBB58_2: # %else7058; RV32I-NEXT:    lw a1, 0(a0)7059; RV32I-NEXT:    ori a2, a1, 17060; RV32I-NEXT:    sw a2, 0(a0)7061; RV32I-NEXT:    mv a0, a17062; RV32I-NEXT:    ret7063;7064; RV32IA-LABEL: atomicrmw_or_i32_monotonic_crossbb:7065; RV32IA:       # %bb.0:7066; RV32IA-NEXT:    andi a1, a1, 17067; RV32IA-NEXT:    beqz a1, .LBB58_27068; RV32IA-NEXT:  # %bb.1: # %then7069; RV32IA-NEXT:    li a1, 17070; RV32IA-NEXT:    amoor.w a0, a1, (a0)7071; RV32IA-NEXT:    ret7072; RV32IA-NEXT:  .LBB58_2: # %else7073; RV32IA-NEXT:    mv a1, a07074; RV32IA-NEXT:    lw a0, 0(a0)7075; RV32IA-NEXT:    ori a2, a0, 17076; RV32IA-NEXT:    sw a2, 0(a1)7077; RV32IA-NEXT:    ret7078;7079; RV32I-ZALRSC-LABEL: atomicrmw_or_i32_monotonic_crossbb:7080; RV32I-ZALRSC:       # %bb.0:7081; RV32I-ZALRSC-NEXT:    andi a2, a1, 17082; RV32I-ZALRSC-NEXT:    mv a1, a07083; RV32I-ZALRSC-NEXT:    beqz a2, .LBB58_27084; RV32I-ZALRSC-NEXT:  # %bb.1: # %then7085; RV32I-ZALRSC-NEXT:    li a2, 17086; RV32I-ZALRSC-NEXT:  .LBB58_3: # %then7087; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=17088; RV32I-ZALRSC-NEXT:    lr.w a0, (a1)7089; RV32I-ZALRSC-NEXT:    or a3, a0, a27090; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a1)7091; RV32I-ZALRSC-NEXT:    bnez a3, .LBB58_37092; RV32I-ZALRSC-NEXT:  # %bb.4: # %then7093; RV32I-ZALRSC-NEXT:    ret7094; RV32I-ZALRSC-NEXT:  .LBB58_2: # %else7095; RV32I-ZALRSC-NEXT:    lw a0, 0(a1)7096; RV32I-ZALRSC-NEXT:    ori a2, a0, 17097; RV32I-ZALRSC-NEXT:    sw a2, 0(a1)7098; RV32I-ZALRSC-NEXT:    ret7099;7100; RV64I-LABEL: atomicrmw_or_i32_monotonic_crossbb:7101; RV64I:       # %bb.0:7102; RV64I-NEXT:    andi a1, a1, 17103; RV64I-NEXT:    beqz a1, .LBB58_27104; RV64I-NEXT:  # %bb.1: # %then7105; RV64I-NEXT:    addi sp, sp, -167106; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill7107; RV64I-NEXT:    li a1, 17108; RV64I-NEXT:    li a2, 07109; RV64I-NEXT:    call __atomic_fetch_or_47110; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload7111; RV64I-NEXT:    addi sp, sp, 167112; RV64I-NEXT:    sext.w a0, a07113; RV64I-NEXT:    ret7114; RV64I-NEXT:  .LBB58_2: # %else7115; RV64I-NEXT:    lw a1, 0(a0)7116; RV64I-NEXT:    ori a2, a1, 17117; RV64I-NEXT:    sw a2, 0(a0)7118; RV64I-NEXT:    sext.w a0, a17119; RV64I-NEXT:    ret7120;7121; RV64IA-LABEL: atomicrmw_or_i32_monotonic_crossbb:7122; RV64IA:       # %bb.0:7123; RV64IA-NEXT:    andi a1, a1, 17124; RV64IA-NEXT:    beqz a1, .LBB58_27125; RV64IA-NEXT:  # %bb.1: # %then7126; RV64IA-NEXT:    li a1, 17127; RV64IA-NEXT:    amoor.w a0, a1, (a0)7128; RV64IA-NEXT:    ret7129; RV64IA-NEXT:  .LBB58_2: # %else7130; RV64IA-NEXT:    mv a1, a07131; RV64IA-NEXT:    lw a0, 0(a0)7132; RV64IA-NEXT:    ori a2, a0, 17133; RV64IA-NEXT:    sw a2, 0(a1)7134; RV64IA-NEXT:    ret7135;7136; RV64I-ZALRSC-LABEL: atomicrmw_or_i32_monotonic_crossbb:7137; RV64I-ZALRSC:       # %bb.0:7138; RV64I-ZALRSC-NEXT:    andi a1, a1, 17139; RV64I-ZALRSC-NEXT:    beqz a1, .LBB58_27140; RV64I-ZALRSC-NEXT:  # %bb.1: # %then7141; RV64I-ZALRSC-NEXT:    li a2, 17142; RV64I-ZALRSC-NEXT:  .LBB58_3: # %then7143; RV64I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=17144; RV64I-ZALRSC-NEXT:    lr.w a1, (a0)7145; RV64I-ZALRSC-NEXT:    or a3, a1, a27146; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)7147; RV64I-ZALRSC-NEXT:    bnez a3, .LBB58_37148; RV64I-ZALRSC-NEXT:  # %bb.4: # %then7149; RV64I-ZALRSC-NEXT:    sext.w a0, a17150; RV64I-ZALRSC-NEXT:    ret7151; RV64I-ZALRSC-NEXT:  .LBB58_2: # %else7152; RV64I-ZALRSC-NEXT:    lw a1, 0(a0)7153; RV64I-ZALRSC-NEXT:    ori a2, a1, 17154; RV64I-ZALRSC-NEXT:    sw a2, 0(a0)7155; RV64I-ZALRSC-NEXT:    sext.w a0, a17156; RV64I-ZALRSC-NEXT:    ret7157  br i1 %c, label %then, label %else7158 7159then:7160  %1 = atomicrmw or ptr %a, i32 1 monotonic7161  br label %merge7162 7163else:7164  %2 = load i32, ptr %a, align 47165  %3 = or i32 %2, 17166  store i32 %3, ptr %a7167  br label %merge7168 7169merge:7170  %4 = phi i32 [ %1, %then ], [ %2, %else ]7171  ret i32 %47172}7173 7174define signext i32 @atomicrmw_xor_i32_monotonic_crossbb(ptr %a, i1 %c) nounwind {7175; RV32I-LABEL: atomicrmw_xor_i32_monotonic_crossbb:7176; RV32I:       # %bb.0:7177; RV32I-NEXT:    andi a1, a1, 17178; RV32I-NEXT:    beqz a1, .LBB59_27179; RV32I-NEXT:  # %bb.1: # %then7180; RV32I-NEXT:    addi sp, sp, -167181; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill7182; RV32I-NEXT:    li a1, 17183; RV32I-NEXT:    li a2, 07184; RV32I-NEXT:    call __atomic_fetch_xor_47185; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload7186; RV32I-NEXT:    addi sp, sp, 167187; RV32I-NEXT:    ret7188; RV32I-NEXT:  .LBB59_2: # %else7189; RV32I-NEXT:    lw a1, 0(a0)7190; RV32I-NEXT:    xori a2, a1, 17191; RV32I-NEXT:    sw a2, 0(a0)7192; RV32I-NEXT:    mv a0, a17193; RV32I-NEXT:    ret7194;7195; RV32IA-LABEL: atomicrmw_xor_i32_monotonic_crossbb:7196; RV32IA:       # %bb.0:7197; RV32IA-NEXT:    andi a1, a1, 17198; RV32IA-NEXT:    beqz a1, .LBB59_27199; RV32IA-NEXT:  # %bb.1: # %then7200; RV32IA-NEXT:    li a1, 17201; RV32IA-NEXT:    amoxor.w a0, a1, (a0)7202; RV32IA-NEXT:    ret7203; RV32IA-NEXT:  .LBB59_2: # %else7204; RV32IA-NEXT:    mv a1, a07205; RV32IA-NEXT:    lw a0, 0(a0)7206; RV32IA-NEXT:    xori a2, a0, 17207; RV32IA-NEXT:    sw a2, 0(a1)7208; RV32IA-NEXT:    ret7209;7210; RV32I-ZALRSC-LABEL: atomicrmw_xor_i32_monotonic_crossbb:7211; RV32I-ZALRSC:       # %bb.0:7212; RV32I-ZALRSC-NEXT:    andi a2, a1, 17213; RV32I-ZALRSC-NEXT:    mv a1, a07214; RV32I-ZALRSC-NEXT:    beqz a2, .LBB59_27215; RV32I-ZALRSC-NEXT:  # %bb.1: # %then7216; RV32I-ZALRSC-NEXT:    li a2, 17217; RV32I-ZALRSC-NEXT:  .LBB59_3: # %then7218; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=17219; RV32I-ZALRSC-NEXT:    lr.w a0, (a1)7220; RV32I-ZALRSC-NEXT:    xor a3, a0, a27221; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a1)7222; RV32I-ZALRSC-NEXT:    bnez a3, .LBB59_37223; RV32I-ZALRSC-NEXT:  # %bb.4: # %then7224; RV32I-ZALRSC-NEXT:    ret7225; RV32I-ZALRSC-NEXT:  .LBB59_2: # %else7226; RV32I-ZALRSC-NEXT:    lw a0, 0(a1)7227; RV32I-ZALRSC-NEXT:    xori a2, a0, 17228; RV32I-ZALRSC-NEXT:    sw a2, 0(a1)7229; RV32I-ZALRSC-NEXT:    ret7230;7231; RV64I-LABEL: atomicrmw_xor_i32_monotonic_crossbb:7232; RV64I:       # %bb.0:7233; RV64I-NEXT:    andi a1, a1, 17234; RV64I-NEXT:    beqz a1, .LBB59_27235; RV64I-NEXT:  # %bb.1: # %then7236; RV64I-NEXT:    addi sp, sp, -167237; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill7238; RV64I-NEXT:    li a1, 17239; RV64I-NEXT:    li a2, 07240; RV64I-NEXT:    call __atomic_fetch_xor_47241; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload7242; RV64I-NEXT:    addi sp, sp, 167243; RV64I-NEXT:    sext.w a0, a07244; RV64I-NEXT:    ret7245; RV64I-NEXT:  .LBB59_2: # %else7246; RV64I-NEXT:    lw a1, 0(a0)7247; RV64I-NEXT:    xori a2, a1, 17248; RV64I-NEXT:    sw a2, 0(a0)7249; RV64I-NEXT:    sext.w a0, a17250; RV64I-NEXT:    ret7251;7252; RV64IA-LABEL: atomicrmw_xor_i32_monotonic_crossbb:7253; RV64IA:       # %bb.0:7254; RV64IA-NEXT:    andi a1, a1, 17255; RV64IA-NEXT:    beqz a1, .LBB59_27256; RV64IA-NEXT:  # %bb.1: # %then7257; RV64IA-NEXT:    li a1, 17258; RV64IA-NEXT:    amoxor.w a0, a1, (a0)7259; RV64IA-NEXT:    ret7260; RV64IA-NEXT:  .LBB59_2: # %else7261; RV64IA-NEXT:    mv a1, a07262; RV64IA-NEXT:    lw a0, 0(a0)7263; RV64IA-NEXT:    xori a2, a0, 17264; RV64IA-NEXT:    sw a2, 0(a1)7265; RV64IA-NEXT:    ret7266;7267; RV64I-ZALRSC-LABEL: atomicrmw_xor_i32_monotonic_crossbb:7268; RV64I-ZALRSC:       # %bb.0:7269; RV64I-ZALRSC-NEXT:    andi a1, a1, 17270; RV64I-ZALRSC-NEXT:    beqz a1, .LBB59_27271; RV64I-ZALRSC-NEXT:  # %bb.1: # %then7272; RV64I-ZALRSC-NEXT:    li a2, 17273; RV64I-ZALRSC-NEXT:  .LBB59_3: # %then7274; RV64I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=17275; RV64I-ZALRSC-NEXT:    lr.w a1, (a0)7276; RV64I-ZALRSC-NEXT:    xor a3, a1, a27277; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)7278; RV64I-ZALRSC-NEXT:    bnez a3, .LBB59_37279; RV64I-ZALRSC-NEXT:  # %bb.4: # %then7280; RV64I-ZALRSC-NEXT:    sext.w a0, a17281; RV64I-ZALRSC-NEXT:    ret7282; RV64I-ZALRSC-NEXT:  .LBB59_2: # %else7283; RV64I-ZALRSC-NEXT:    lw a1, 0(a0)7284; RV64I-ZALRSC-NEXT:    xori a2, a1, 17285; RV64I-ZALRSC-NEXT:    sw a2, 0(a0)7286; RV64I-ZALRSC-NEXT:    sext.w a0, a17287; RV64I-ZALRSC-NEXT:    ret7288  br i1 %c, label %then, label %else7289 7290then:7291  %1 = atomicrmw xor ptr %a, i32 1 monotonic7292  br label %merge7293 7294else:7295  %2 = load i32, ptr %a, align 47296  %3 = xor i32 %2, 17297  store i32 %3, ptr %a7298  br label %merge7299 7300merge:7301  %4 = phi i32 [ %1, %then ], [ %2, %else ]7302  ret i32 %47303}7304 7305define signext i32 @atomicrmw_max_i32_monotonic_crossbb(ptr %a, i1 %c) nounwind {7306; RV32I-LABEL: atomicrmw_max_i32_monotonic_crossbb:7307; RV32I:       # %bb.0:7308; RV32I-NEXT:    addi sp, sp, -167309; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill7310; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill7311; RV32I-NEXT:    andi a1, a1, 17312; RV32I-NEXT:    mv s0, a07313; RV32I-NEXT:    beqz a1, .LBB60_57314; RV32I-NEXT:  # %bb.1: # %then7315; RV32I-NEXT:    lw a1, 0(s0)7316; RV32I-NEXT:    j .LBB60_37317; RV32I-NEXT:  .LBB60_2: # %atomicrmw.start7318; RV32I-NEXT:    # in Loop: Header=BB60_3 Depth=17319; RV32I-NEXT:    sw a1, 4(sp)7320; RV32I-NEXT:    addi a1, sp, 47321; RV32I-NEXT:    mv a0, s07322; RV32I-NEXT:    li a3, 07323; RV32I-NEXT:    li a4, 07324; RV32I-NEXT:    call __atomic_compare_exchange_47325; RV32I-NEXT:    lw a1, 4(sp)7326; RV32I-NEXT:    bnez a0, .LBB60_87327; RV32I-NEXT:  .LBB60_3: # %atomicrmw.start7328; RV32I-NEXT:    # =>This Inner Loop Header: Depth=17329; RV32I-NEXT:    mv a2, a17330; RV32I-NEXT:    bgtz a1, .LBB60_27331; RV32I-NEXT:  # %bb.4: # %atomicrmw.start7332; RV32I-NEXT:    # in Loop: Header=BB60_3 Depth=17333; RV32I-NEXT:    li a2, 17334; RV32I-NEXT:    j .LBB60_27335; RV32I-NEXT:  .LBB60_5: # %else7336; RV32I-NEXT:    lw a1, 0(s0)7337; RV32I-NEXT:    mv a0, a17338; RV32I-NEXT:    bgtz a1, .LBB60_77339; RV32I-NEXT:  # %bb.6: # %else7340; RV32I-NEXT:    li a0, 17341; RV32I-NEXT:  .LBB60_7: # %else7342; RV32I-NEXT:    sw a0, 0(s0)7343; RV32I-NEXT:  .LBB60_8: # %merge7344; RV32I-NEXT:    mv a0, a17345; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload7346; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload7347; RV32I-NEXT:    addi sp, sp, 167348; RV32I-NEXT:    ret7349;7350; RV32IA-LABEL: atomicrmw_max_i32_monotonic_crossbb:7351; RV32IA:       # %bb.0:7352; RV32IA-NEXT:    andi a2, a1, 17353; RV32IA-NEXT:    mv a1, a07354; RV32IA-NEXT:    beqz a2, .LBB60_27355; RV32IA-NEXT:  # %bb.1: # %then7356; RV32IA-NEXT:    li a0, 17357; RV32IA-NEXT:    amomax.w a0, a0, (a1)7358; RV32IA-NEXT:    ret7359; RV32IA-NEXT:  .LBB60_2: # %else7360; RV32IA-NEXT:    lw a0, 0(a1)7361; RV32IA-NEXT:    mv a2, a07362; RV32IA-NEXT:    bgtz a0, .LBB60_47363; RV32IA-NEXT:  # %bb.3: # %else7364; RV32IA-NEXT:    li a2, 17365; RV32IA-NEXT:  .LBB60_4: # %else7366; RV32IA-NEXT:    sw a2, 0(a1)7367; RV32IA-NEXT:    ret7368;7369; RV32I-ZALRSC-LABEL: atomicrmw_max_i32_monotonic_crossbb:7370; RV32I-ZALRSC:       # %bb.0:7371; RV32I-ZALRSC-NEXT:    andi a2, a1, 17372; RV32I-ZALRSC-NEXT:    mv a1, a07373; RV32I-ZALRSC-NEXT:    beqz a2, .LBB60_27374; RV32I-ZALRSC-NEXT:  # %bb.1: # %then7375; RV32I-ZALRSC-NEXT:    li a2, 17376; RV32I-ZALRSC-NEXT:  .LBB60_5: # %then7377; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=17378; RV32I-ZALRSC-NEXT:    lr.w a0, (a1)7379; RV32I-ZALRSC-NEXT:    mv a3, a07380; RV32I-ZALRSC-NEXT:    bge a3, a2, .LBB60_77381; RV32I-ZALRSC-NEXT:  # %bb.6: # %then7382; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB60_5 Depth=17383; RV32I-ZALRSC-NEXT:    mv a3, a27384; RV32I-ZALRSC-NEXT:  .LBB60_7: # %then7385; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB60_5 Depth=17386; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a1)7387; RV32I-ZALRSC-NEXT:    bnez a3, .LBB60_57388; RV32I-ZALRSC-NEXT:  # %bb.8: # %then7389; RV32I-ZALRSC-NEXT:    ret7390; RV32I-ZALRSC-NEXT:  .LBB60_2: # %else7391; RV32I-ZALRSC-NEXT:    lw a0, 0(a1)7392; RV32I-ZALRSC-NEXT:    mv a2, a07393; RV32I-ZALRSC-NEXT:    bgtz a0, .LBB60_47394; RV32I-ZALRSC-NEXT:  # %bb.3: # %else7395; RV32I-ZALRSC-NEXT:    li a2, 17396; RV32I-ZALRSC-NEXT:  .LBB60_4: # %else7397; RV32I-ZALRSC-NEXT:    sw a2, 0(a1)7398; RV32I-ZALRSC-NEXT:    ret7399;7400; RV64I-LABEL: atomicrmw_max_i32_monotonic_crossbb:7401; RV64I:       # %bb.0:7402; RV64I-NEXT:    addi sp, sp, -327403; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill7404; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill7405; RV64I-NEXT:    andi a1, a1, 17406; RV64I-NEXT:    mv s0, a07407; RV64I-NEXT:    beqz a1, .LBB60_57408; RV64I-NEXT:  # %bb.1: # %then7409; RV64I-NEXT:    lw a1, 0(s0)7410; RV64I-NEXT:    j .LBB60_37411; RV64I-NEXT:  .LBB60_2: # %atomicrmw.start7412; RV64I-NEXT:    # in Loop: Header=BB60_3 Depth=17413; RV64I-NEXT:    sw a1, 12(sp)7414; RV64I-NEXT:    addi a1, sp, 127415; RV64I-NEXT:    mv a0, s07416; RV64I-NEXT:    li a3, 07417; RV64I-NEXT:    li a4, 07418; RV64I-NEXT:    call __atomic_compare_exchange_47419; RV64I-NEXT:    lw a1, 12(sp)7420; RV64I-NEXT:    bnez a0, .LBB60_87421; RV64I-NEXT:  .LBB60_3: # %atomicrmw.start7422; RV64I-NEXT:    # =>This Inner Loop Header: Depth=17423; RV64I-NEXT:    li a0, 17424; RV64I-NEXT:    mv a2, a17425; RV64I-NEXT:    blt a0, a1, .LBB60_27426; RV64I-NEXT:  # %bb.4: # %atomicrmw.start7427; RV64I-NEXT:    # in Loop: Header=BB60_3 Depth=17428; RV64I-NEXT:    li a2, 17429; RV64I-NEXT:    j .LBB60_27430; RV64I-NEXT:  .LBB60_5: # %else7431; RV64I-NEXT:    lw a1, 0(s0)7432; RV64I-NEXT:    mv a0, a17433; RV64I-NEXT:    bgtz a1, .LBB60_77434; RV64I-NEXT:  # %bb.6: # %else7435; RV64I-NEXT:    li a0, 17436; RV64I-NEXT:  .LBB60_7: # %else7437; RV64I-NEXT:    sw a0, 0(s0)7438; RV64I-NEXT:  .LBB60_8: # %merge7439; RV64I-NEXT:    mv a0, a17440; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload7441; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload7442; RV64I-NEXT:    addi sp, sp, 327443; RV64I-NEXT:    ret7444;7445; RV64IA-LABEL: atomicrmw_max_i32_monotonic_crossbb:7446; RV64IA:       # %bb.0:7447; RV64IA-NEXT:    andi a2, a1, 17448; RV64IA-NEXT:    mv a1, a07449; RV64IA-NEXT:    beqz a2, .LBB60_27450; RV64IA-NEXT:  # %bb.1: # %then7451; RV64IA-NEXT:    li a0, 17452; RV64IA-NEXT:    amomax.w a0, a0, (a1)7453; RV64IA-NEXT:    ret7454; RV64IA-NEXT:  .LBB60_2: # %else7455; RV64IA-NEXT:    lw a0, 0(a1)7456; RV64IA-NEXT:    mv a2, a07457; RV64IA-NEXT:    bgtz a0, .LBB60_47458; RV64IA-NEXT:  # %bb.3: # %else7459; RV64IA-NEXT:    li a2, 17460; RV64IA-NEXT:  .LBB60_4: # %else7461; RV64IA-NEXT:    sw a2, 0(a1)7462; RV64IA-NEXT:    ret7463;7464; RV64I-ZALRSC-LABEL: atomicrmw_max_i32_monotonic_crossbb:7465; RV64I-ZALRSC:       # %bb.0:7466; RV64I-ZALRSC-NEXT:    andi a2, a1, 17467; RV64I-ZALRSC-NEXT:    mv a1, a07468; RV64I-ZALRSC-NEXT:    beqz a2, .LBB60_27469; RV64I-ZALRSC-NEXT:  # %bb.1: # %then7470; RV64I-ZALRSC-NEXT:    li a2, 17471; RV64I-ZALRSC-NEXT:  .LBB60_5: # %then7472; RV64I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=17473; RV64I-ZALRSC-NEXT:    lr.w a0, (a1)7474; RV64I-ZALRSC-NEXT:    mv a3, a07475; RV64I-ZALRSC-NEXT:    bge a3, a2, .LBB60_77476; RV64I-ZALRSC-NEXT:  # %bb.6: # %then7477; RV64I-ZALRSC-NEXT:    # in Loop: Header=BB60_5 Depth=17478; RV64I-ZALRSC-NEXT:    mv a3, a27479; RV64I-ZALRSC-NEXT:  .LBB60_7: # %then7480; RV64I-ZALRSC-NEXT:    # in Loop: Header=BB60_5 Depth=17481; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a1)7482; RV64I-ZALRSC-NEXT:    bnez a3, .LBB60_57483; RV64I-ZALRSC-NEXT:  # %bb.8: # %then7484; RV64I-ZALRSC-NEXT:    ret7485; RV64I-ZALRSC-NEXT:  .LBB60_2: # %else7486; RV64I-ZALRSC-NEXT:    lw a0, 0(a1)7487; RV64I-ZALRSC-NEXT:    mv a2, a07488; RV64I-ZALRSC-NEXT:    bgtz a0, .LBB60_47489; RV64I-ZALRSC-NEXT:  # %bb.3: # %else7490; RV64I-ZALRSC-NEXT:    li a2, 17491; RV64I-ZALRSC-NEXT:  .LBB60_4: # %else7492; RV64I-ZALRSC-NEXT:    sw a2, 0(a1)7493; RV64I-ZALRSC-NEXT:    ret7494  br i1 %c, label %then, label %else7495 7496then:7497  %1 = atomicrmw max ptr %a, i32 1 monotonic7498  br label %merge7499 7500else:7501  %2 = load i32, ptr %a, align 47502  %3 = call i32 @llvm.smax.i32(i32 %2, i32 1)7503  store i32 %3, ptr %a7504  br label %merge7505 7506merge:7507  %4 = phi i32 [ %1, %then ], [ %2, %else ]7508  ret i32 %47509}7510 7511define signext i32 @atomicrmw_min_i32_monotonic_crossbb(ptr %a, i1 %c) nounwind {7512; RV32I-LABEL: atomicrmw_min_i32_monotonic_crossbb:7513; RV32I:       # %bb.0:7514; RV32I-NEXT:    addi sp, sp, -167515; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill7516; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill7517; RV32I-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill7518; RV32I-NEXT:    andi a1, a1, 17519; RV32I-NEXT:    mv s0, a07520; RV32I-NEXT:    beqz a1, .LBB61_57521; RV32I-NEXT:  # %bb.1: # %then7522; RV32I-NEXT:    lw a1, 0(s0)7523; RV32I-NEXT:    li s1, 27524; RV32I-NEXT:    j .LBB61_37525; RV32I-NEXT:  .LBB61_2: # %atomicrmw.start7526; RV32I-NEXT:    # in Loop: Header=BB61_3 Depth=17527; RV32I-NEXT:    sw a1, 0(sp)7528; RV32I-NEXT:    mv a1, sp7529; RV32I-NEXT:    mv a0, s07530; RV32I-NEXT:    li a3, 07531; RV32I-NEXT:    li a4, 07532; RV32I-NEXT:    call __atomic_compare_exchange_47533; RV32I-NEXT:    lw a1, 0(sp)7534; RV32I-NEXT:    bnez a0, .LBB61_87535; RV32I-NEXT:  .LBB61_3: # %atomicrmw.start7536; RV32I-NEXT:    # =>This Inner Loop Header: Depth=17537; RV32I-NEXT:    mv a2, a17538; RV32I-NEXT:    blt a1, s1, .LBB61_27539; RV32I-NEXT:  # %bb.4: # %atomicrmw.start7540; RV32I-NEXT:    # in Loop: Header=BB61_3 Depth=17541; RV32I-NEXT:    li a2, 17542; RV32I-NEXT:    j .LBB61_27543; RV32I-NEXT:  .LBB61_5: # %else7544; RV32I-NEXT:    lw a1, 0(s0)7545; RV32I-NEXT:    mv a0, a17546; RV32I-NEXT:    blez a1, .LBB61_77547; RV32I-NEXT:  # %bb.6: # %else7548; RV32I-NEXT:    li a0, 17549; RV32I-NEXT:  .LBB61_7: # %else7550; RV32I-NEXT:    sw a0, 0(s0)7551; RV32I-NEXT:  .LBB61_8: # %merge7552; RV32I-NEXT:    mv a0, a17553; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload7554; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload7555; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload7556; RV32I-NEXT:    addi sp, sp, 167557; RV32I-NEXT:    ret7558;7559; RV32IA-LABEL: atomicrmw_min_i32_monotonic_crossbb:7560; RV32IA:       # %bb.0:7561; RV32IA-NEXT:    andi a2, a1, 17562; RV32IA-NEXT:    mv a1, a07563; RV32IA-NEXT:    beqz a2, .LBB61_27564; RV32IA-NEXT:  # %bb.1: # %then7565; RV32IA-NEXT:    li a0, 17566; RV32IA-NEXT:    amomin.w a0, a0, (a1)7567; RV32IA-NEXT:    ret7568; RV32IA-NEXT:  .LBB61_2: # %else7569; RV32IA-NEXT:    lw a0, 0(a1)7570; RV32IA-NEXT:    mv a2, a07571; RV32IA-NEXT:    blez a0, .LBB61_47572; RV32IA-NEXT:  # %bb.3: # %else7573; RV32IA-NEXT:    li a2, 17574; RV32IA-NEXT:  .LBB61_4: # %else7575; RV32IA-NEXT:    sw a2, 0(a1)7576; RV32IA-NEXT:    ret7577;7578; RV32I-ZALRSC-LABEL: atomicrmw_min_i32_monotonic_crossbb:7579; RV32I-ZALRSC:       # %bb.0:7580; RV32I-ZALRSC-NEXT:    andi a2, a1, 17581; RV32I-ZALRSC-NEXT:    mv a1, a07582; RV32I-ZALRSC-NEXT:    beqz a2, .LBB61_27583; RV32I-ZALRSC-NEXT:  # %bb.1: # %then7584; RV32I-ZALRSC-NEXT:    li a2, 17585; RV32I-ZALRSC-NEXT:  .LBB61_5: # %then7586; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=17587; RV32I-ZALRSC-NEXT:    lr.w a0, (a1)7588; RV32I-ZALRSC-NEXT:    mv a3, a07589; RV32I-ZALRSC-NEXT:    bge a2, a3, .LBB61_77590; RV32I-ZALRSC-NEXT:  # %bb.6: # %then7591; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB61_5 Depth=17592; RV32I-ZALRSC-NEXT:    mv a3, a27593; RV32I-ZALRSC-NEXT:  .LBB61_7: # %then7594; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB61_5 Depth=17595; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a1)7596; RV32I-ZALRSC-NEXT:    bnez a3, .LBB61_57597; RV32I-ZALRSC-NEXT:  # %bb.8: # %then7598; RV32I-ZALRSC-NEXT:    ret7599; RV32I-ZALRSC-NEXT:  .LBB61_2: # %else7600; RV32I-ZALRSC-NEXT:    lw a0, 0(a1)7601; RV32I-ZALRSC-NEXT:    mv a2, a07602; RV32I-ZALRSC-NEXT:    blez a0, .LBB61_47603; RV32I-ZALRSC-NEXT:  # %bb.3: # %else7604; RV32I-ZALRSC-NEXT:    li a2, 17605; RV32I-ZALRSC-NEXT:  .LBB61_4: # %else7606; RV32I-ZALRSC-NEXT:    sw a2, 0(a1)7607; RV32I-ZALRSC-NEXT:    ret7608;7609; RV64I-LABEL: atomicrmw_min_i32_monotonic_crossbb:7610; RV64I:       # %bb.0:7611; RV64I-NEXT:    addi sp, sp, -327612; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill7613; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill7614; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill7615; RV64I-NEXT:    andi a1, a1, 17616; RV64I-NEXT:    mv s0, a07617; RV64I-NEXT:    beqz a1, .LBB61_57618; RV64I-NEXT:  # %bb.1: # %then7619; RV64I-NEXT:    lw a1, 0(s0)7620; RV64I-NEXT:    li s1, 27621; RV64I-NEXT:    j .LBB61_37622; RV64I-NEXT:  .LBB61_2: # %atomicrmw.start7623; RV64I-NEXT:    # in Loop: Header=BB61_3 Depth=17624; RV64I-NEXT:    sw a1, 4(sp)7625; RV64I-NEXT:    addi a1, sp, 47626; RV64I-NEXT:    mv a0, s07627; RV64I-NEXT:    li a3, 07628; RV64I-NEXT:    li a4, 07629; RV64I-NEXT:    call __atomic_compare_exchange_47630; RV64I-NEXT:    lw a1, 4(sp)7631; RV64I-NEXT:    bnez a0, .LBB61_87632; RV64I-NEXT:  .LBB61_3: # %atomicrmw.start7633; RV64I-NEXT:    # =>This Inner Loop Header: Depth=17634; RV64I-NEXT:    mv a2, a17635; RV64I-NEXT:    blt a1, s1, .LBB61_27636; RV64I-NEXT:  # %bb.4: # %atomicrmw.start7637; RV64I-NEXT:    # in Loop: Header=BB61_3 Depth=17638; RV64I-NEXT:    li a2, 17639; RV64I-NEXT:    j .LBB61_27640; RV64I-NEXT:  .LBB61_5: # %else7641; RV64I-NEXT:    lw a1, 0(s0)7642; RV64I-NEXT:    mv a0, a17643; RV64I-NEXT:    blez a1, .LBB61_77644; RV64I-NEXT:  # %bb.6: # %else7645; RV64I-NEXT:    li a0, 17646; RV64I-NEXT:  .LBB61_7: # %else7647; RV64I-NEXT:    sw a0, 0(s0)7648; RV64I-NEXT:  .LBB61_8: # %merge7649; RV64I-NEXT:    mv a0, a17650; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload7651; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload7652; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload7653; RV64I-NEXT:    addi sp, sp, 327654; RV64I-NEXT:    ret7655;7656; RV64IA-LABEL: atomicrmw_min_i32_monotonic_crossbb:7657; RV64IA:       # %bb.0:7658; RV64IA-NEXT:    andi a2, a1, 17659; RV64IA-NEXT:    mv a1, a07660; RV64IA-NEXT:    beqz a2, .LBB61_27661; RV64IA-NEXT:  # %bb.1: # %then7662; RV64IA-NEXT:    li a0, 17663; RV64IA-NEXT:    amomin.w a0, a0, (a1)7664; RV64IA-NEXT:    ret7665; RV64IA-NEXT:  .LBB61_2: # %else7666; RV64IA-NEXT:    lw a0, 0(a1)7667; RV64IA-NEXT:    mv a2, a07668; RV64IA-NEXT:    blez a0, .LBB61_47669; RV64IA-NEXT:  # %bb.3: # %else7670; RV64IA-NEXT:    li a2, 17671; RV64IA-NEXT:  .LBB61_4: # %else7672; RV64IA-NEXT:    sw a2, 0(a1)7673; RV64IA-NEXT:    ret7674;7675; RV64I-ZALRSC-LABEL: atomicrmw_min_i32_monotonic_crossbb:7676; RV64I-ZALRSC:       # %bb.0:7677; RV64I-ZALRSC-NEXT:    andi a2, a1, 17678; RV64I-ZALRSC-NEXT:    mv a1, a07679; RV64I-ZALRSC-NEXT:    beqz a2, .LBB61_27680; RV64I-ZALRSC-NEXT:  # %bb.1: # %then7681; RV64I-ZALRSC-NEXT:    li a2, 17682; RV64I-ZALRSC-NEXT:  .LBB61_5: # %then7683; RV64I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=17684; RV64I-ZALRSC-NEXT:    lr.w a0, (a1)7685; RV64I-ZALRSC-NEXT:    mv a3, a07686; RV64I-ZALRSC-NEXT:    bge a2, a3, .LBB61_77687; RV64I-ZALRSC-NEXT:  # %bb.6: # %then7688; RV64I-ZALRSC-NEXT:    # in Loop: Header=BB61_5 Depth=17689; RV64I-ZALRSC-NEXT:    mv a3, a27690; RV64I-ZALRSC-NEXT:  .LBB61_7: # %then7691; RV64I-ZALRSC-NEXT:    # in Loop: Header=BB61_5 Depth=17692; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a1)7693; RV64I-ZALRSC-NEXT:    bnez a3, .LBB61_57694; RV64I-ZALRSC-NEXT:  # %bb.8: # %then7695; RV64I-ZALRSC-NEXT:    ret7696; RV64I-ZALRSC-NEXT:  .LBB61_2: # %else7697; RV64I-ZALRSC-NEXT:    lw a0, 0(a1)7698; RV64I-ZALRSC-NEXT:    mv a2, a07699; RV64I-ZALRSC-NEXT:    blez a0, .LBB61_47700; RV64I-ZALRSC-NEXT:  # %bb.3: # %else7701; RV64I-ZALRSC-NEXT:    li a2, 17702; RV64I-ZALRSC-NEXT:  .LBB61_4: # %else7703; RV64I-ZALRSC-NEXT:    sw a2, 0(a1)7704; RV64I-ZALRSC-NEXT:    ret7705  br i1 %c, label %then, label %else7706 7707then:7708  %1 = atomicrmw min ptr %a, i32 1 monotonic7709  br label %merge7710 7711else:7712  %2 = load i32, ptr %a, align 47713  %3 = call i32 @llvm.smin.i32(i32 %2, i32 1)7714  store i32 %3, ptr %a7715  br label %merge7716 7717merge:7718  %4 = phi i32 [ %1, %then ], [ %2, %else ]7719  ret i32 %47720}7721 7722define signext i32 @atomicrmw_umax_i32_monotonic_crossbb(ptr %a, i1 %c) nounwind {7723; RV32I-LABEL: atomicrmw_umax_i32_monotonic_crossbb:7724; RV32I:       # %bb.0:7725; RV32I-NEXT:    addi sp, sp, -167726; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill7727; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill7728; RV32I-NEXT:    andi a1, a1, 17729; RV32I-NEXT:    mv s0, a07730; RV32I-NEXT:    beqz a1, .LBB62_37731; RV32I-NEXT:  # %bb.1: # %then7732; RV32I-NEXT:    lw a1, 0(s0)7733; RV32I-NEXT:  .LBB62_2: # %atomicrmw.start7734; RV32I-NEXT:    # =>This Inner Loop Header: Depth=17735; RV32I-NEXT:    seqz a2, a17736; RV32I-NEXT:    add a2, a1, a27737; RV32I-NEXT:    sw a1, 4(sp)7738; RV32I-NEXT:    addi a1, sp, 47739; RV32I-NEXT:    mv a0, s07740; RV32I-NEXT:    li a3, 07741; RV32I-NEXT:    li a4, 07742; RV32I-NEXT:    call __atomic_compare_exchange_47743; RV32I-NEXT:    lw a1, 4(sp)7744; RV32I-NEXT:    beqz a0, .LBB62_27745; RV32I-NEXT:    j .LBB62_47746; RV32I-NEXT:  .LBB62_3: # %else7747; RV32I-NEXT:    lw a1, 0(s0)7748; RV32I-NEXT:    seqz a0, a17749; RV32I-NEXT:    add a0, a1, a07750; RV32I-NEXT:    sw a0, 0(s0)7751; RV32I-NEXT:  .LBB62_4: # %merge7752; RV32I-NEXT:    mv a0, a17753; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload7754; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload7755; RV32I-NEXT:    addi sp, sp, 167756; RV32I-NEXT:    ret7757;7758; RV32IA-LABEL: atomicrmw_umax_i32_monotonic_crossbb:7759; RV32IA:       # %bb.0:7760; RV32IA-NEXT:    andi a1, a1, 17761; RV32IA-NEXT:    beqz a1, .LBB62_27762; RV32IA-NEXT:  # %bb.1: # %then7763; RV32IA-NEXT:    li a1, 17764; RV32IA-NEXT:    amomaxu.w a0, a1, (a0)7765; RV32IA-NEXT:    ret7766; RV32IA-NEXT:  .LBB62_2: # %else7767; RV32IA-NEXT:    mv a1, a07768; RV32IA-NEXT:    lw a0, 0(a0)7769; RV32IA-NEXT:    seqz a2, a07770; RV32IA-NEXT:    add a2, a0, a27771; RV32IA-NEXT:    sw a2, 0(a1)7772; RV32IA-NEXT:    ret7773;7774; RV32I-ZALRSC-LABEL: atomicrmw_umax_i32_monotonic_crossbb:7775; RV32I-ZALRSC:       # %bb.0:7776; RV32I-ZALRSC-NEXT:    andi a2, a1, 17777; RV32I-ZALRSC-NEXT:    mv a1, a07778; RV32I-ZALRSC-NEXT:    beqz a2, .LBB62_27779; RV32I-ZALRSC-NEXT:  # %bb.1: # %then7780; RV32I-ZALRSC-NEXT:    li a2, 17781; RV32I-ZALRSC-NEXT:  .LBB62_3: # %then7782; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=17783; RV32I-ZALRSC-NEXT:    lr.w a0, (a1)7784; RV32I-ZALRSC-NEXT:    mv a3, a07785; RV32I-ZALRSC-NEXT:    bgeu a3, a2, .LBB62_57786; RV32I-ZALRSC-NEXT:  # %bb.4: # %then7787; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB62_3 Depth=17788; RV32I-ZALRSC-NEXT:    mv a3, a27789; RV32I-ZALRSC-NEXT:  .LBB62_5: # %then7790; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB62_3 Depth=17791; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a1)7792; RV32I-ZALRSC-NEXT:    bnez a3, .LBB62_37793; RV32I-ZALRSC-NEXT:  # %bb.6: # %then7794; RV32I-ZALRSC-NEXT:    ret7795; RV32I-ZALRSC-NEXT:  .LBB62_2: # %else7796; RV32I-ZALRSC-NEXT:    lw a0, 0(a1)7797; RV32I-ZALRSC-NEXT:    seqz a2, a07798; RV32I-ZALRSC-NEXT:    add a2, a0, a27799; RV32I-ZALRSC-NEXT:    sw a2, 0(a1)7800; RV32I-ZALRSC-NEXT:    ret7801;7802; RV64I-LABEL: atomicrmw_umax_i32_monotonic_crossbb:7803; RV64I:       # %bb.0:7804; RV64I-NEXT:    addi sp, sp, -327805; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill7806; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill7807; RV64I-NEXT:    andi a1, a1, 17808; RV64I-NEXT:    mv s0, a07809; RV64I-NEXT:    beqz a1, .LBB62_57810; RV64I-NEXT:  # %bb.1: # %then7811; RV64I-NEXT:    lw a1, 0(s0)7812; RV64I-NEXT:    j .LBB62_37813; RV64I-NEXT:  .LBB62_2: # %atomicrmw.start7814; RV64I-NEXT:    # in Loop: Header=BB62_3 Depth=17815; RV64I-NEXT:    sw a1, 12(sp)7816; RV64I-NEXT:    addi a1, sp, 127817; RV64I-NEXT:    mv a0, s07818; RV64I-NEXT:    li a3, 07819; RV64I-NEXT:    li a4, 07820; RV64I-NEXT:    call __atomic_compare_exchange_47821; RV64I-NEXT:    lw a1, 12(sp)7822; RV64I-NEXT:    bnez a0, .LBB62_67823; RV64I-NEXT:  .LBB62_3: # %atomicrmw.start7824; RV64I-NEXT:    # =>This Inner Loop Header: Depth=17825; RV64I-NEXT:    li a0, 17826; RV64I-NEXT:    mv a2, a17827; RV64I-NEXT:    bltu a0, a1, .LBB62_27828; RV64I-NEXT:  # %bb.4: # %atomicrmw.start7829; RV64I-NEXT:    # in Loop: Header=BB62_3 Depth=17830; RV64I-NEXT:    li a2, 17831; RV64I-NEXT:    j .LBB62_27832; RV64I-NEXT:  .LBB62_5: # %else7833; RV64I-NEXT:    lw a1, 0(s0)7834; RV64I-NEXT:    seqz a0, a17835; RV64I-NEXT:    add a0, a1, a07836; RV64I-NEXT:    sw a0, 0(s0)7837; RV64I-NEXT:  .LBB62_6: # %merge7838; RV64I-NEXT:    mv a0, a17839; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload7840; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload7841; RV64I-NEXT:    addi sp, sp, 327842; RV64I-NEXT:    ret7843;7844; RV64IA-LABEL: atomicrmw_umax_i32_monotonic_crossbb:7845; RV64IA:       # %bb.0:7846; RV64IA-NEXT:    andi a1, a1, 17847; RV64IA-NEXT:    beqz a1, .LBB62_27848; RV64IA-NEXT:  # %bb.1: # %then7849; RV64IA-NEXT:    li a1, 17850; RV64IA-NEXT:    amomaxu.w a0, a1, (a0)7851; RV64IA-NEXT:    ret7852; RV64IA-NEXT:  .LBB62_2: # %else7853; RV64IA-NEXT:    mv a1, a07854; RV64IA-NEXT:    lw a0, 0(a0)7855; RV64IA-NEXT:    seqz a2, a07856; RV64IA-NEXT:    add a2, a0, a27857; RV64IA-NEXT:    sw a2, 0(a1)7858; RV64IA-NEXT:    ret7859;7860; RV64I-ZALRSC-LABEL: atomicrmw_umax_i32_monotonic_crossbb:7861; RV64I-ZALRSC:       # %bb.0:7862; RV64I-ZALRSC-NEXT:    andi a1, a1, 17863; RV64I-ZALRSC-NEXT:    beqz a1, .LBB62_27864; RV64I-ZALRSC-NEXT:  # %bb.1: # %then7865; RV64I-ZALRSC-NEXT:    li a2, 17866; RV64I-ZALRSC-NEXT:  .LBB62_3: # %then7867; RV64I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=17868; RV64I-ZALRSC-NEXT:    lr.w a1, (a0)7869; RV64I-ZALRSC-NEXT:    mv a3, a17870; RV64I-ZALRSC-NEXT:    bgeu a3, a2, .LBB62_57871; RV64I-ZALRSC-NEXT:  # %bb.4: # %then7872; RV64I-ZALRSC-NEXT:    # in Loop: Header=BB62_3 Depth=17873; RV64I-ZALRSC-NEXT:    mv a3, a27874; RV64I-ZALRSC-NEXT:  .LBB62_5: # %then7875; RV64I-ZALRSC-NEXT:    # in Loop: Header=BB62_3 Depth=17876; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a0)7877; RV64I-ZALRSC-NEXT:    bnez a3, .LBB62_37878; RV64I-ZALRSC-NEXT:  # %bb.6: # %then7879; RV64I-ZALRSC-NEXT:    sext.w a0, a17880; RV64I-ZALRSC-NEXT:    ret7881; RV64I-ZALRSC-NEXT:  .LBB62_2: # %else7882; RV64I-ZALRSC-NEXT:    lw a1, 0(a0)7883; RV64I-ZALRSC-NEXT:    seqz a2, a17884; RV64I-ZALRSC-NEXT:    add a2, a1, a27885; RV64I-ZALRSC-NEXT:    sw a2, 0(a0)7886; RV64I-ZALRSC-NEXT:    sext.w a0, a17887; RV64I-ZALRSC-NEXT:    ret7888  br i1 %c, label %then, label %else7889 7890then:7891  %1 = atomicrmw umax ptr %a, i32 1 monotonic7892  br label %merge7893 7894else:7895  %2 = load i32, ptr %a, align 47896  %3 = call i32 @llvm.umax.i32(i32 %2, i32 1)7897  store i32 %3, ptr %a7898  br label %merge7899 7900merge:7901  %4 = phi i32 [ %1, %then ], [ %2, %else ]7902  ret i32 %47903}7904 7905define signext i32 @atomicrmw_umin_i32_monotonic_crossbb(ptr %a, i1 %c) nounwind {7906; RV32I-LABEL: atomicrmw_umin_i32_monotonic_crossbb:7907; RV32I:       # %bb.0:7908; RV32I-NEXT:    addi sp, sp, -167909; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill7910; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill7911; RV32I-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill7912; RV32I-NEXT:    andi a1, a1, 17913; RV32I-NEXT:    mv s0, a07914; RV32I-NEXT:    beqz a1, .LBB63_57915; RV32I-NEXT:  # %bb.1: # %then7916; RV32I-NEXT:    lw a1, 0(s0)7917; RV32I-NEXT:    li s1, 27918; RV32I-NEXT:    j .LBB63_37919; RV32I-NEXT:  .LBB63_2: # %atomicrmw.start7920; RV32I-NEXT:    # in Loop: Header=BB63_3 Depth=17921; RV32I-NEXT:    sw a1, 0(sp)7922; RV32I-NEXT:    mv a1, sp7923; RV32I-NEXT:    mv a0, s07924; RV32I-NEXT:    li a3, 07925; RV32I-NEXT:    li a4, 07926; RV32I-NEXT:    call __atomic_compare_exchange_47927; RV32I-NEXT:    lw a1, 0(sp)7928; RV32I-NEXT:    bnez a0, .LBB63_87929; RV32I-NEXT:  .LBB63_3: # %atomicrmw.start7930; RV32I-NEXT:    # =>This Inner Loop Header: Depth=17931; RV32I-NEXT:    mv a2, a17932; RV32I-NEXT:    bltu a1, s1, .LBB63_27933; RV32I-NEXT:  # %bb.4: # %atomicrmw.start7934; RV32I-NEXT:    # in Loop: Header=BB63_3 Depth=17935; RV32I-NEXT:    li a2, 17936; RV32I-NEXT:    j .LBB63_27937; RV32I-NEXT:  .LBB63_5: # %else7938; RV32I-NEXT:    lw a1, 0(s0)7939; RV32I-NEXT:    li a2, 17940; RV32I-NEXT:    mv a0, a17941; RV32I-NEXT:    bltu a1, a2, .LBB63_77942; RV32I-NEXT:  # %bb.6: # %else7943; RV32I-NEXT:    li a0, 17944; RV32I-NEXT:  .LBB63_7: # %else7945; RV32I-NEXT:    sw a0, 0(s0)7946; RV32I-NEXT:  .LBB63_8: # %merge7947; RV32I-NEXT:    mv a0, a17948; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload7949; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload7950; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload7951; RV32I-NEXT:    addi sp, sp, 167952; RV32I-NEXT:    ret7953;7954; RV32IA-LABEL: atomicrmw_umin_i32_monotonic_crossbb:7955; RV32IA:       # %bb.0:7956; RV32IA-NEXT:    andi a2, a1, 17957; RV32IA-NEXT:    mv a1, a07958; RV32IA-NEXT:    beqz a2, .LBB63_27959; RV32IA-NEXT:  # %bb.1: # %then7960; RV32IA-NEXT:    li a0, 17961; RV32IA-NEXT:    amominu.w a0, a0, (a1)7962; RV32IA-NEXT:    ret7963; RV32IA-NEXT:  .LBB63_2: # %else7964; RV32IA-NEXT:    lw a0, 0(a1)7965; RV32IA-NEXT:    li a3, 17966; RV32IA-NEXT:    mv a2, a07967; RV32IA-NEXT:    bltu a0, a3, .LBB63_47968; RV32IA-NEXT:  # %bb.3: # %else7969; RV32IA-NEXT:    li a2, 17970; RV32IA-NEXT:  .LBB63_4: # %else7971; RV32IA-NEXT:    sw a2, 0(a1)7972; RV32IA-NEXT:    ret7973;7974; RV32I-ZALRSC-LABEL: atomicrmw_umin_i32_monotonic_crossbb:7975; RV32I-ZALRSC:       # %bb.0:7976; RV32I-ZALRSC-NEXT:    andi a2, a1, 17977; RV32I-ZALRSC-NEXT:    mv a1, a07978; RV32I-ZALRSC-NEXT:    beqz a2, .LBB63_27979; RV32I-ZALRSC-NEXT:  # %bb.1: # %then7980; RV32I-ZALRSC-NEXT:    li a2, 17981; RV32I-ZALRSC-NEXT:  .LBB63_5: # %then7982; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=17983; RV32I-ZALRSC-NEXT:    lr.w a0, (a1)7984; RV32I-ZALRSC-NEXT:    mv a3, a07985; RV32I-ZALRSC-NEXT:    bgeu a2, a3, .LBB63_77986; RV32I-ZALRSC-NEXT:  # %bb.6: # %then7987; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB63_5 Depth=17988; RV32I-ZALRSC-NEXT:    mv a3, a27989; RV32I-ZALRSC-NEXT:  .LBB63_7: # %then7990; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB63_5 Depth=17991; RV32I-ZALRSC-NEXT:    sc.w a3, a3, (a1)7992; RV32I-ZALRSC-NEXT:    bnez a3, .LBB63_57993; RV32I-ZALRSC-NEXT:  # %bb.8: # %then7994; RV32I-ZALRSC-NEXT:    ret7995; RV32I-ZALRSC-NEXT:  .LBB63_2: # %else7996; RV32I-ZALRSC-NEXT:    lw a0, 0(a1)7997; RV32I-ZALRSC-NEXT:    li a3, 17998; RV32I-ZALRSC-NEXT:    mv a2, a07999; RV32I-ZALRSC-NEXT:    bltu a0, a3, .LBB63_48000; RV32I-ZALRSC-NEXT:  # %bb.3: # %else8001; RV32I-ZALRSC-NEXT:    li a2, 18002; RV32I-ZALRSC-NEXT:  .LBB63_4: # %else8003; RV32I-ZALRSC-NEXT:    sw a2, 0(a1)8004; RV32I-ZALRSC-NEXT:    ret8005;8006; RV64I-LABEL: atomicrmw_umin_i32_monotonic_crossbb:8007; RV64I:       # %bb.0:8008; RV64I-NEXT:    addi sp, sp, -328009; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill8010; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill8011; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill8012; RV64I-NEXT:    andi a1, a1, 18013; RV64I-NEXT:    mv s0, a08014; RV64I-NEXT:    beqz a1, .LBB63_58015; RV64I-NEXT:  # %bb.1: # %then8016; RV64I-NEXT:    lw a1, 0(s0)8017; RV64I-NEXT:    li s1, 28018; RV64I-NEXT:    j .LBB63_38019; RV64I-NEXT:  .LBB63_2: # %atomicrmw.start8020; RV64I-NEXT:    # in Loop: Header=BB63_3 Depth=18021; RV64I-NEXT:    sw a1, 4(sp)8022; RV64I-NEXT:    addi a1, sp, 48023; RV64I-NEXT:    mv a0, s08024; RV64I-NEXT:    li a3, 08025; RV64I-NEXT:    li a4, 08026; RV64I-NEXT:    call __atomic_compare_exchange_48027; RV64I-NEXT:    lw a1, 4(sp)8028; RV64I-NEXT:    bnez a0, .LBB63_88029; RV64I-NEXT:  .LBB63_3: # %atomicrmw.start8030; RV64I-NEXT:    # =>This Inner Loop Header: Depth=18031; RV64I-NEXT:    mv a2, a18032; RV64I-NEXT:    bltu a1, s1, .LBB63_28033; RV64I-NEXT:  # %bb.4: # %atomicrmw.start8034; RV64I-NEXT:    # in Loop: Header=BB63_3 Depth=18035; RV64I-NEXT:    li a2, 18036; RV64I-NEXT:    j .LBB63_28037; RV64I-NEXT:  .LBB63_5: # %else8038; RV64I-NEXT:    lw a1, 0(s0)8039; RV64I-NEXT:    li a2, 18040; RV64I-NEXT:    mv a0, a18041; RV64I-NEXT:    bltu a1, a2, .LBB63_78042; RV64I-NEXT:  # %bb.6: # %else8043; RV64I-NEXT:    li a0, 18044; RV64I-NEXT:  .LBB63_7: # %else8045; RV64I-NEXT:    sw a0, 0(s0)8046; RV64I-NEXT:  .LBB63_8: # %merge8047; RV64I-NEXT:    mv a0, a18048; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload8049; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload8050; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload8051; RV64I-NEXT:    addi sp, sp, 328052; RV64I-NEXT:    ret8053;8054; RV64IA-LABEL: atomicrmw_umin_i32_monotonic_crossbb:8055; RV64IA:       # %bb.0:8056; RV64IA-NEXT:    andi a2, a1, 18057; RV64IA-NEXT:    mv a1, a08058; RV64IA-NEXT:    beqz a2, .LBB63_28059; RV64IA-NEXT:  # %bb.1: # %then8060; RV64IA-NEXT:    li a0, 18061; RV64IA-NEXT:    amominu.w a0, a0, (a1)8062; RV64IA-NEXT:    ret8063; RV64IA-NEXT:  .LBB63_2: # %else8064; RV64IA-NEXT:    lw a0, 0(a1)8065; RV64IA-NEXT:    li a3, 18066; RV64IA-NEXT:    mv a2, a08067; RV64IA-NEXT:    bltu a0, a3, .LBB63_48068; RV64IA-NEXT:  # %bb.3: # %else8069; RV64IA-NEXT:    li a2, 18070; RV64IA-NEXT:  .LBB63_4: # %else8071; RV64IA-NEXT:    sw a2, 0(a1)8072; RV64IA-NEXT:    ret8073;8074; RV64I-ZALRSC-LABEL: atomicrmw_umin_i32_monotonic_crossbb:8075; RV64I-ZALRSC:       # %bb.0:8076; RV64I-ZALRSC-NEXT:    andi a2, a1, 18077; RV64I-ZALRSC-NEXT:    mv a1, a08078; RV64I-ZALRSC-NEXT:    beqz a2, .LBB63_28079; RV64I-ZALRSC-NEXT:  # %bb.1: # %then8080; RV64I-ZALRSC-NEXT:    li a2, 18081; RV64I-ZALRSC-NEXT:  .LBB63_5: # %then8082; RV64I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=18083; RV64I-ZALRSC-NEXT:    lr.w a0, (a1)8084; RV64I-ZALRSC-NEXT:    mv a3, a08085; RV64I-ZALRSC-NEXT:    bgeu a2, a3, .LBB63_78086; RV64I-ZALRSC-NEXT:  # %bb.6: # %then8087; RV64I-ZALRSC-NEXT:    # in Loop: Header=BB63_5 Depth=18088; RV64I-ZALRSC-NEXT:    mv a3, a28089; RV64I-ZALRSC-NEXT:  .LBB63_7: # %then8090; RV64I-ZALRSC-NEXT:    # in Loop: Header=BB63_5 Depth=18091; RV64I-ZALRSC-NEXT:    sc.w a3, a3, (a1)8092; RV64I-ZALRSC-NEXT:    bnez a3, .LBB63_58093; RV64I-ZALRSC-NEXT:  # %bb.8: # %then8094; RV64I-ZALRSC-NEXT:    ret8095; RV64I-ZALRSC-NEXT:  .LBB63_2: # %else8096; RV64I-ZALRSC-NEXT:    lw a0, 0(a1)8097; RV64I-ZALRSC-NEXT:    li a3, 18098; RV64I-ZALRSC-NEXT:    mv a2, a08099; RV64I-ZALRSC-NEXT:    bltu a0, a3, .LBB63_48100; RV64I-ZALRSC-NEXT:  # %bb.3: # %else8101; RV64I-ZALRSC-NEXT:    li a2, 18102; RV64I-ZALRSC-NEXT:  .LBB63_4: # %else8103; RV64I-ZALRSC-NEXT:    sw a2, 0(a1)8104; RV64I-ZALRSC-NEXT:    ret8105  br i1 %c, label %then, label %else8106 8107then:8108  %1 = atomicrmw umin ptr %a, i32 1 monotonic8109  br label %merge8110 8111else:8112  %2 = load i32, ptr %a, align 48113  %3 = call i32 @llvm.umin.i32(i32 %2, i32 1)8114  store i32 %3, ptr %a8115  br label %merge8116 8117merge:8118  %4 = phi i32 [ %1, %then ], [ %2, %else ]8119  ret i32 %48120}8121 8122define signext i32 @cmpxchg_i32_monotonic_crossbb(ptr %ptr, i32 signext %cmp, i32 signext %val, i1 zeroext %c) nounwind {8123; RV32I-LABEL: cmpxchg_i32_monotonic_crossbb:8124; RV32I:       # %bb.0:8125; RV32I-NEXT:    beqz a3, .LBB64_28126; RV32I-NEXT:  # %bb.1: # %then8127; RV32I-NEXT:    addi sp, sp, -168128; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill8129; RV32I-NEXT:    sw a1, 8(sp)8130; RV32I-NEXT:    addi a1, sp, 88131; RV32I-NEXT:    li a3, 58132; RV32I-NEXT:    li a4, 58133; RV32I-NEXT:    call __atomic_compare_exchange_48134; RV32I-NEXT:    lw a0, 8(sp)8135; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload8136; RV32I-NEXT:    addi sp, sp, 168137; RV32I-NEXT:    ret8138; RV32I-NEXT:  .LBB64_2: # %else8139; RV32I-NEXT:    lw a0, 0(a0)8140; RV32I-NEXT:    ret8141;8142; RV32IA-NOZACAS-LABEL: cmpxchg_i32_monotonic_crossbb:8143; RV32IA-NOZACAS:       # %bb.0:8144; RV32IA-NOZACAS-NEXT:    mv a4, a08145; RV32IA-NOZACAS-NEXT:    beqz a3, .LBB64_28146; RV32IA-NOZACAS-NEXT:  # %bb.1: # %then8147; RV32IA-NOZACAS-NEXT:  .LBB64_3: # %then8148; RV32IA-NOZACAS-NEXT:    # =>This Inner Loop Header: Depth=18149; RV32IA-NOZACAS-NEXT:    lr.w.aqrl a0, (a4)8150; RV32IA-NOZACAS-NEXT:    bne a0, a1, .LBB64_58151; RV32IA-NOZACAS-NEXT:  # %bb.4: # %then8152; RV32IA-NOZACAS-NEXT:    # in Loop: Header=BB64_3 Depth=18153; RV32IA-NOZACAS-NEXT:    sc.w.rl a3, a2, (a4)8154; RV32IA-NOZACAS-NEXT:    bnez a3, .LBB64_38155; RV32IA-NOZACAS-NEXT:  .LBB64_5: # %then8156; RV32IA-NOZACAS-NEXT:    ret8157; RV32IA-NOZACAS-NEXT:  .LBB64_2: # %else8158; RV32IA-NOZACAS-NEXT:    lw a0, 0(a4)8159; RV32IA-NOZACAS-NEXT:    ret8160;8161; RV32IA-ZACAS-LABEL: cmpxchg_i32_monotonic_crossbb:8162; RV32IA-ZACAS:       # %bb.0:8163; RV32IA-ZACAS-NEXT:    beqz a3, .LBB64_28164; RV32IA-ZACAS-NEXT:  # %bb.1: # %then8165; RV32IA-ZACAS-NEXT:    fence rw, rw8166; RV32IA-ZACAS-NEXT:    amocas.w.aqrl a1, a2, (a0)8167; RV32IA-ZACAS-NEXT:    mv a0, a18168; RV32IA-ZACAS-NEXT:    ret8169; RV32IA-ZACAS-NEXT:  .LBB64_2: # %else8170; RV32IA-ZACAS-NEXT:    lw a0, 0(a0)8171; RV32IA-ZACAS-NEXT:    ret8172;8173; RV32I-ZALRSC-LABEL: cmpxchg_i32_monotonic_crossbb:8174; RV32I-ZALRSC:       # %bb.0:8175; RV32I-ZALRSC-NEXT:    mv a4, a08176; RV32I-ZALRSC-NEXT:    beqz a3, .LBB64_28177; RV32I-ZALRSC-NEXT:  # %bb.1: # %then8178; RV32I-ZALRSC-NEXT:  .LBB64_3: # %then8179; RV32I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=18180; RV32I-ZALRSC-NEXT:    lr.w.aqrl a0, (a4)8181; RV32I-ZALRSC-NEXT:    bne a0, a1, .LBB64_58182; RV32I-ZALRSC-NEXT:  # %bb.4: # %then8183; RV32I-ZALRSC-NEXT:    # in Loop: Header=BB64_3 Depth=18184; RV32I-ZALRSC-NEXT:    sc.w.rl a3, a2, (a4)8185; RV32I-ZALRSC-NEXT:    bnez a3, .LBB64_38186; RV32I-ZALRSC-NEXT:  .LBB64_5: # %then8187; RV32I-ZALRSC-NEXT:    ret8188; RV32I-ZALRSC-NEXT:  .LBB64_2: # %else8189; RV32I-ZALRSC-NEXT:    lw a0, 0(a4)8190; RV32I-ZALRSC-NEXT:    ret8191;8192; RV64I-LABEL: cmpxchg_i32_monotonic_crossbb:8193; RV64I:       # %bb.0:8194; RV64I-NEXT:    beqz a3, .LBB64_28195; RV64I-NEXT:  # %bb.1: # %then8196; RV64I-NEXT:    addi sp, sp, -168197; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill8198; RV64I-NEXT:    sw a1, 4(sp)8199; RV64I-NEXT:    addi a1, sp, 48200; RV64I-NEXT:    li a3, 58201; RV64I-NEXT:    li a4, 58202; RV64I-NEXT:    call __atomic_compare_exchange_48203; RV64I-NEXT:    lw a0, 4(sp)8204; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload8205; RV64I-NEXT:    addi sp, sp, 168206; RV64I-NEXT:    ret8207; RV64I-NEXT:  .LBB64_2: # %else8208; RV64I-NEXT:    lw a0, 0(a0)8209; RV64I-NEXT:    ret8210;8211; RV64IA-NOZACAS-LABEL: cmpxchg_i32_monotonic_crossbb:8212; RV64IA-NOZACAS:       # %bb.0:8213; RV64IA-NOZACAS-NEXT:    beqz a3, .LBB64_28214; RV64IA-NOZACAS-NEXT:  # %bb.1: # %then8215; RV64IA-NOZACAS-NEXT:  .LBB64_3: # %then8216; RV64IA-NOZACAS-NEXT:    # =>This Inner Loop Header: Depth=18217; RV64IA-NOZACAS-NEXT:    lr.w.aqrl a3, (a0)8218; RV64IA-NOZACAS-NEXT:    bne a3, a1, .LBB64_58219; RV64IA-NOZACAS-NEXT:  # %bb.4: # %then8220; RV64IA-NOZACAS-NEXT:    # in Loop: Header=BB64_3 Depth=18221; RV64IA-NOZACAS-NEXT:    sc.w.rl a4, a2, (a0)8222; RV64IA-NOZACAS-NEXT:    bnez a4, .LBB64_38223; RV64IA-NOZACAS-NEXT:  .LBB64_5: # %then8224; RV64IA-NOZACAS-NEXT:    sext.w a0, a38225; RV64IA-NOZACAS-NEXT:    ret8226; RV64IA-NOZACAS-NEXT:  .LBB64_2: # %else8227; RV64IA-NOZACAS-NEXT:    lw a3, 0(a0)8228; RV64IA-NOZACAS-NEXT:    sext.w a0, a38229; RV64IA-NOZACAS-NEXT:    ret8230;8231; RV64IA-ZACAS-LABEL: cmpxchg_i32_monotonic_crossbb:8232; RV64IA-ZACAS:       # %bb.0:8233; RV64IA-ZACAS-NEXT:    beqz a3, .LBB64_28234; RV64IA-ZACAS-NEXT:  # %bb.1: # %then8235; RV64IA-ZACAS-NEXT:    fence rw, rw8236; RV64IA-ZACAS-NEXT:    amocas.w.aqrl a1, a2, (a0)8237; RV64IA-ZACAS-NEXT:    mv a0, a18238; RV64IA-ZACAS-NEXT:    ret8239; RV64IA-ZACAS-NEXT:  .LBB64_2: # %else8240; RV64IA-ZACAS-NEXT:    lw a0, 0(a0)8241; RV64IA-ZACAS-NEXT:    ret8242;8243; RV64I-ZALRSC-LABEL: cmpxchg_i32_monotonic_crossbb:8244; RV64I-ZALRSC:       # %bb.0:8245; RV64I-ZALRSC-NEXT:    beqz a3, .LBB64_28246; RV64I-ZALRSC-NEXT:  # %bb.1: # %then8247; RV64I-ZALRSC-NEXT:  .LBB64_3: # %then8248; RV64I-ZALRSC-NEXT:    # =>This Inner Loop Header: Depth=18249; RV64I-ZALRSC-NEXT:    lr.w.aqrl a3, (a0)8250; RV64I-ZALRSC-NEXT:    bne a3, a1, .LBB64_58251; RV64I-ZALRSC-NEXT:  # %bb.4: # %then8252; RV64I-ZALRSC-NEXT:    # in Loop: Header=BB64_3 Depth=18253; RV64I-ZALRSC-NEXT:    sc.w.rl a4, a2, (a0)8254; RV64I-ZALRSC-NEXT:    bnez a4, .LBB64_38255; RV64I-ZALRSC-NEXT:  .LBB64_5: # %then8256; RV64I-ZALRSC-NEXT:    sext.w a0, a38257; RV64I-ZALRSC-NEXT:    ret8258; RV64I-ZALRSC-NEXT:  .LBB64_2: # %else8259; RV64I-ZALRSC-NEXT:    lw a3, 0(a0)8260; RV64I-ZALRSC-NEXT:    sext.w a0, a38261; RV64I-ZALRSC-NEXT:    ret8262  br i1 %c, label %then, label %else8263 8264then:8265  %1 = cmpxchg ptr %ptr, i32 %cmp, i32 %val seq_cst seq_cst8266  %2 = extractvalue { i32, i1 } %1, 08267  br label %merge8268 8269else:8270  %3 = load i32, ptr %ptr, align 48271  br label %merge8272 8273merge:8274  %4 = phi i32 [ %2, %then ], [ %3, %else ]8275  ret i32 %48276}8277