brintos

brintos / llvm-project-archived public Read only

0
0
Text · 213.6 KiB · 12f057c Raw
5803 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-WMO %s6; RUN: llc -mtriple=riscv32 -mattr=+a,+zacas -verify-machineinstrs < %s \7; RUN:   | FileCheck -check-prefixes=RV32IA,RV32IA-ZACAS,RV32IA-WMO-ZACAS %s8; RUN: llc -mtriple=riscv32 -mattr=+a,+ztso -verify-machineinstrs < %s \9; RUN:   | FileCheck -check-prefixes=RV32IA,RV32IA-TSO %s10; RUN: llc -mtriple=riscv32 -mattr=+a,+ztso,+zacas -verify-machineinstrs < %s \11; RUN:   | FileCheck -check-prefixes=RV32IA,RV32IA-ZACAS,RV32IA-TSO-ZACAS %s12; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \13; RUN:   | FileCheck -check-prefix=RV64I %s14; RUN: llc -mtriple=riscv64 -mattr=+a -verify-machineinstrs < %s \15; RUN:   | FileCheck -check-prefixes=RV64IA,RV64IA-WMO %s16; RUN: llc -mtriple=riscv64 -mattr=+a,+zacas -verify-machineinstrs < %s \17; RUN:   | FileCheck -check-prefixes=RV64IA,RV64IA-ZACAS,RV64IA-WMO-ZACAS %s18; RUN: llc -mtriple=riscv64 -mattr=+a,+zacas,+zabha -verify-machineinstrs < %s \19; RUN:   | FileCheck -check-prefixes=RV64IA,RV64IA-ZABHA,RV64IA-WMO-ZABHA %s20; RUN: llc -mtriple=riscv64 -mattr=+a,+ztso -verify-machineinstrs < %s \21; RUN:   | FileCheck -check-prefixes=RV64IA,RV64IA-TSO %s22; RUN: llc -mtriple=riscv64 -mattr=+a,+ztso,+zacas -verify-machineinstrs < %s \23; RUN:   | FileCheck -check-prefixes=RV64IA,RV64IA-ZACAS,RV64IA-TSO-ZACAS %s24; RUN: llc -mtriple=riscv64 -mattr=+a,+ztso,+zacas,+zabha -verify-machineinstrs < %s \25; RUN:   | FileCheck -check-prefixes=RV64IA,RV64IA-ZABHA,RV64IA-TSO-ZABHA %s26 27define void @cmpxchg_i8_monotonic_monotonic(ptr %ptr, i8 %cmp, i8 %val) nounwind {28; RV32I-LABEL: cmpxchg_i8_monotonic_monotonic:29; RV32I:       # %bb.0:30; RV32I-NEXT:    addi sp, sp, -1631; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill32; RV32I-NEXT:    sb a1, 11(sp)33; RV32I-NEXT:    addi a1, sp, 1134; RV32I-NEXT:    li a3, 035; RV32I-NEXT:    li a4, 036; RV32I-NEXT:    call __atomic_compare_exchange_137; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload38; RV32I-NEXT:    addi sp, sp, 1639; RV32I-NEXT:    ret40;41; RV32IA-LABEL: cmpxchg_i8_monotonic_monotonic:42; RV32IA:       # %bb.0:43; RV32IA-NEXT:    andi a3, a0, -444; RV32IA-NEXT:    slli a0, a0, 345; RV32IA-NEXT:    li a4, 25546; RV32IA-NEXT:    zext.b a1, a147; RV32IA-NEXT:    zext.b a2, a248; RV32IA-NEXT:    sll a4, a4, a049; RV32IA-NEXT:    sll a1, a1, a050; RV32IA-NEXT:    sll a0, a2, a051; RV32IA-NEXT:  .LBB0_1: # =>This Inner Loop Header: Depth=152; RV32IA-NEXT:    lr.w a2, (a3)53; RV32IA-NEXT:    and a5, a2, a454; RV32IA-NEXT:    bne a5, a1, .LBB0_355; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB0_1 Depth=156; RV32IA-NEXT:    xor a5, a2, a057; RV32IA-NEXT:    and a5, a5, a458; RV32IA-NEXT:    xor a5, a2, a559; RV32IA-NEXT:    sc.w a5, a5, (a3)60; RV32IA-NEXT:    bnez a5, .LBB0_161; RV32IA-NEXT:  .LBB0_3:62; RV32IA-NEXT:    ret63;64; RV64I-LABEL: cmpxchg_i8_monotonic_monotonic:65; RV64I:       # %bb.0:66; RV64I-NEXT:    addi sp, sp, -1667; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill68; RV64I-NEXT:    sb a1, 7(sp)69; RV64I-NEXT:    addi a1, sp, 770; RV64I-NEXT:    li a3, 071; RV64I-NEXT:    li a4, 072; RV64I-NEXT:    call __atomic_compare_exchange_173; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload74; RV64I-NEXT:    addi sp, sp, 1675; RV64I-NEXT:    ret76;77; RV64IA-WMO-LABEL: cmpxchg_i8_monotonic_monotonic:78; RV64IA-WMO:       # %bb.0:79; RV64IA-WMO-NEXT:    andi a3, a0, -480; RV64IA-WMO-NEXT:    slli a0, a0, 381; RV64IA-WMO-NEXT:    li a4, 25582; RV64IA-WMO-NEXT:    zext.b a1, a183; RV64IA-WMO-NEXT:    zext.b a2, a284; RV64IA-WMO-NEXT:    sllw a4, a4, a085; RV64IA-WMO-NEXT:    sllw a1, a1, a086; RV64IA-WMO-NEXT:    sllw a0, a2, a087; RV64IA-WMO-NEXT:  .LBB0_1: # =>This Inner Loop Header: Depth=188; RV64IA-WMO-NEXT:    lr.w a2, (a3)89; RV64IA-WMO-NEXT:    and a5, a2, a490; RV64IA-WMO-NEXT:    bne a5, a1, .LBB0_391; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB0_1 Depth=192; RV64IA-WMO-NEXT:    xor a5, a2, a093; RV64IA-WMO-NEXT:    and a5, a5, a494; RV64IA-WMO-NEXT:    xor a5, a2, a595; RV64IA-WMO-NEXT:    sc.w a5, a5, (a3)96; RV64IA-WMO-NEXT:    bnez a5, .LBB0_197; RV64IA-WMO-NEXT:  .LBB0_3:98; RV64IA-WMO-NEXT:    ret99;100; RV64IA-ZACAS-LABEL: cmpxchg_i8_monotonic_monotonic:101; RV64IA-ZACAS:       # %bb.0:102; RV64IA-ZACAS-NEXT:    andi a3, a0, -4103; RV64IA-ZACAS-NEXT:    slli a0, a0, 3104; RV64IA-ZACAS-NEXT:    li a4, 255105; RV64IA-ZACAS-NEXT:    zext.b a1, a1106; RV64IA-ZACAS-NEXT:    zext.b a2, a2107; RV64IA-ZACAS-NEXT:    sllw a4, a4, a0108; RV64IA-ZACAS-NEXT:    sllw a1, a1, a0109; RV64IA-ZACAS-NEXT:    sllw a0, a2, a0110; RV64IA-ZACAS-NEXT:  .LBB0_1: # =>This Inner Loop Header: Depth=1111; RV64IA-ZACAS-NEXT:    lr.w a2, (a3)112; RV64IA-ZACAS-NEXT:    and a5, a2, a4113; RV64IA-ZACAS-NEXT:    bne a5, a1, .LBB0_3114; RV64IA-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB0_1 Depth=1115; RV64IA-ZACAS-NEXT:    xor a5, a2, a0116; RV64IA-ZACAS-NEXT:    and a5, a5, a4117; RV64IA-ZACAS-NEXT:    xor a5, a2, a5118; RV64IA-ZACAS-NEXT:    sc.w a5, a5, (a3)119; RV64IA-ZACAS-NEXT:    bnez a5, .LBB0_1120; RV64IA-ZACAS-NEXT:  .LBB0_3:121; RV64IA-ZACAS-NEXT:    ret122;123; RV64IA-ZABHA-LABEL: cmpxchg_i8_monotonic_monotonic:124; RV64IA-ZABHA:       # %bb.0:125; RV64IA-ZABHA-NEXT:    amocas.b a1, a2, (a0)126; RV64IA-ZABHA-NEXT:    ret127;128; RV64IA-TSO-LABEL: cmpxchg_i8_monotonic_monotonic:129; RV64IA-TSO:       # %bb.0:130; RV64IA-TSO-NEXT:    andi a3, a0, -4131; RV64IA-TSO-NEXT:    slli a0, a0, 3132; RV64IA-TSO-NEXT:    li a4, 255133; RV64IA-TSO-NEXT:    zext.b a1, a1134; RV64IA-TSO-NEXT:    zext.b a2, a2135; RV64IA-TSO-NEXT:    sllw a4, a4, a0136; RV64IA-TSO-NEXT:    sllw a1, a1, a0137; RV64IA-TSO-NEXT:    sllw a0, a2, a0138; RV64IA-TSO-NEXT:  .LBB0_1: # =>This Inner Loop Header: Depth=1139; RV64IA-TSO-NEXT:    lr.w a2, (a3)140; RV64IA-TSO-NEXT:    and a5, a2, a4141; RV64IA-TSO-NEXT:    bne a5, a1, .LBB0_3142; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB0_1 Depth=1143; RV64IA-TSO-NEXT:    xor a5, a2, a0144; RV64IA-TSO-NEXT:    and a5, a5, a4145; RV64IA-TSO-NEXT:    xor a5, a2, a5146; RV64IA-TSO-NEXT:    sc.w a5, a5, (a3)147; RV64IA-TSO-NEXT:    bnez a5, .LBB0_1148; RV64IA-TSO-NEXT:  .LBB0_3:149; RV64IA-TSO-NEXT:    ret150  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val monotonic monotonic151  ret void152}153 154define void @cmpxchg_i8_acquire_monotonic(ptr %ptr, i8 %cmp, i8 %val) nounwind {155; RV32I-LABEL: cmpxchg_i8_acquire_monotonic:156; RV32I:       # %bb.0:157; RV32I-NEXT:    addi sp, sp, -16158; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill159; RV32I-NEXT:    sb a1, 11(sp)160; RV32I-NEXT:    addi a1, sp, 11161; RV32I-NEXT:    li a3, 2162; RV32I-NEXT:    li a4, 0163; RV32I-NEXT:    call __atomic_compare_exchange_1164; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload165; RV32I-NEXT:    addi sp, sp, 16166; RV32I-NEXT:    ret167;168; RV32IA-WMO-LABEL: cmpxchg_i8_acquire_monotonic:169; RV32IA-WMO:       # %bb.0:170; RV32IA-WMO-NEXT:    andi a3, a0, -4171; RV32IA-WMO-NEXT:    slli a0, a0, 3172; RV32IA-WMO-NEXT:    li a4, 255173; RV32IA-WMO-NEXT:    zext.b a1, a1174; RV32IA-WMO-NEXT:    zext.b a2, a2175; RV32IA-WMO-NEXT:    sll a4, a4, a0176; RV32IA-WMO-NEXT:    sll a1, a1, a0177; RV32IA-WMO-NEXT:    sll a0, a2, a0178; RV32IA-WMO-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=1179; RV32IA-WMO-NEXT:    lr.w.aq a2, (a3)180; RV32IA-WMO-NEXT:    and a5, a2, a4181; RV32IA-WMO-NEXT:    bne a5, a1, .LBB1_3182; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB1_1 Depth=1183; RV32IA-WMO-NEXT:    xor a5, a2, a0184; RV32IA-WMO-NEXT:    and a5, a5, a4185; RV32IA-WMO-NEXT:    xor a5, a2, a5186; RV32IA-WMO-NEXT:    sc.w a5, a5, (a3)187; RV32IA-WMO-NEXT:    bnez a5, .LBB1_1188; RV32IA-WMO-NEXT:  .LBB1_3:189; RV32IA-WMO-NEXT:    ret190;191; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i8_acquire_monotonic:192; RV32IA-WMO-ZACAS:       # %bb.0:193; RV32IA-WMO-ZACAS-NEXT:    andi a3, a0, -4194; RV32IA-WMO-ZACAS-NEXT:    slli a0, a0, 3195; RV32IA-WMO-ZACAS-NEXT:    li a4, 255196; RV32IA-WMO-ZACAS-NEXT:    zext.b a1, a1197; RV32IA-WMO-ZACAS-NEXT:    zext.b a2, a2198; RV32IA-WMO-ZACAS-NEXT:    sll a4, a4, a0199; RV32IA-WMO-ZACAS-NEXT:    sll a1, a1, a0200; RV32IA-WMO-ZACAS-NEXT:    sll a0, a2, a0201; RV32IA-WMO-ZACAS-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=1202; RV32IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)203; RV32IA-WMO-ZACAS-NEXT:    and a5, a2, a4204; RV32IA-WMO-ZACAS-NEXT:    bne a5, a1, .LBB1_3205; RV32IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB1_1 Depth=1206; RV32IA-WMO-ZACAS-NEXT:    xor a5, a2, a0207; RV32IA-WMO-ZACAS-NEXT:    and a5, a5, a4208; RV32IA-WMO-ZACAS-NEXT:    xor a5, a2, a5209; RV32IA-WMO-ZACAS-NEXT:    sc.w a5, a5, (a3)210; RV32IA-WMO-ZACAS-NEXT:    bnez a5, .LBB1_1211; RV32IA-WMO-ZACAS-NEXT:  .LBB1_3:212; RV32IA-WMO-ZACAS-NEXT:    ret213;214; RV32IA-TSO-LABEL: cmpxchg_i8_acquire_monotonic:215; RV32IA-TSO:       # %bb.0:216; RV32IA-TSO-NEXT:    andi a3, a0, -4217; RV32IA-TSO-NEXT:    slli a0, a0, 3218; RV32IA-TSO-NEXT:    li a4, 255219; RV32IA-TSO-NEXT:    zext.b a1, a1220; RV32IA-TSO-NEXT:    zext.b a2, a2221; RV32IA-TSO-NEXT:    sll a4, a4, a0222; RV32IA-TSO-NEXT:    sll a1, a1, a0223; RV32IA-TSO-NEXT:    sll a0, a2, a0224; RV32IA-TSO-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=1225; RV32IA-TSO-NEXT:    lr.w a2, (a3)226; RV32IA-TSO-NEXT:    and a5, a2, a4227; RV32IA-TSO-NEXT:    bne a5, a1, .LBB1_3228; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB1_1 Depth=1229; RV32IA-TSO-NEXT:    xor a5, a2, a0230; RV32IA-TSO-NEXT:    and a5, a5, a4231; RV32IA-TSO-NEXT:    xor a5, a2, a5232; RV32IA-TSO-NEXT:    sc.w a5, a5, (a3)233; RV32IA-TSO-NEXT:    bnez a5, .LBB1_1234; RV32IA-TSO-NEXT:  .LBB1_3:235; RV32IA-TSO-NEXT:    ret236;237; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i8_acquire_monotonic:238; RV32IA-TSO-ZACAS:       # %bb.0:239; RV32IA-TSO-ZACAS-NEXT:    andi a3, a0, -4240; RV32IA-TSO-ZACAS-NEXT:    slli a0, a0, 3241; RV32IA-TSO-ZACAS-NEXT:    li a4, 255242; RV32IA-TSO-ZACAS-NEXT:    zext.b a1, a1243; RV32IA-TSO-ZACAS-NEXT:    zext.b a2, a2244; RV32IA-TSO-ZACAS-NEXT:    sll a4, a4, a0245; RV32IA-TSO-ZACAS-NEXT:    sll a1, a1, a0246; RV32IA-TSO-ZACAS-NEXT:    sll a0, a2, a0247; RV32IA-TSO-ZACAS-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=1248; RV32IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)249; RV32IA-TSO-ZACAS-NEXT:    and a5, a2, a4250; RV32IA-TSO-ZACAS-NEXT:    bne a5, a1, .LBB1_3251; RV32IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB1_1 Depth=1252; RV32IA-TSO-ZACAS-NEXT:    xor a5, a2, a0253; RV32IA-TSO-ZACAS-NEXT:    and a5, a5, a4254; RV32IA-TSO-ZACAS-NEXT:    xor a5, a2, a5255; RV32IA-TSO-ZACAS-NEXT:    sc.w a5, a5, (a3)256; RV32IA-TSO-ZACAS-NEXT:    bnez a5, .LBB1_1257; RV32IA-TSO-ZACAS-NEXT:  .LBB1_3:258; RV32IA-TSO-ZACAS-NEXT:    ret259;260; RV64I-LABEL: cmpxchg_i8_acquire_monotonic:261; RV64I:       # %bb.0:262; RV64I-NEXT:    addi sp, sp, -16263; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill264; RV64I-NEXT:    sb a1, 7(sp)265; RV64I-NEXT:    addi a1, sp, 7266; RV64I-NEXT:    li a3, 2267; RV64I-NEXT:    li a4, 0268; RV64I-NEXT:    call __atomic_compare_exchange_1269; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload270; RV64I-NEXT:    addi sp, sp, 16271; RV64I-NEXT:    ret272;273; RV64IA-WMO-LABEL: cmpxchg_i8_acquire_monotonic:274; RV64IA-WMO:       # %bb.0:275; RV64IA-WMO-NEXT:    andi a3, a0, -4276; RV64IA-WMO-NEXT:    slli a0, a0, 3277; RV64IA-WMO-NEXT:    li a4, 255278; RV64IA-WMO-NEXT:    zext.b a1, a1279; RV64IA-WMO-NEXT:    zext.b a2, a2280; RV64IA-WMO-NEXT:    sllw a4, a4, a0281; RV64IA-WMO-NEXT:    sllw a1, a1, a0282; RV64IA-WMO-NEXT:    sllw a0, a2, a0283; RV64IA-WMO-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=1284; RV64IA-WMO-NEXT:    lr.w.aq a2, (a3)285; RV64IA-WMO-NEXT:    and a5, a2, a4286; RV64IA-WMO-NEXT:    bne a5, a1, .LBB1_3287; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB1_1 Depth=1288; RV64IA-WMO-NEXT:    xor a5, a2, a0289; RV64IA-WMO-NEXT:    and a5, a5, a4290; RV64IA-WMO-NEXT:    xor a5, a2, a5291; RV64IA-WMO-NEXT:    sc.w a5, a5, (a3)292; RV64IA-WMO-NEXT:    bnez a5, .LBB1_1293; RV64IA-WMO-NEXT:  .LBB1_3:294; RV64IA-WMO-NEXT:    ret295;296; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i8_acquire_monotonic:297; RV64IA-WMO-ZACAS:       # %bb.0:298; RV64IA-WMO-ZACAS-NEXT:    andi a3, a0, -4299; RV64IA-WMO-ZACAS-NEXT:    slli a0, a0, 3300; RV64IA-WMO-ZACAS-NEXT:    li a4, 255301; RV64IA-WMO-ZACAS-NEXT:    zext.b a1, a1302; RV64IA-WMO-ZACAS-NEXT:    zext.b a2, a2303; RV64IA-WMO-ZACAS-NEXT:    sllw a4, a4, a0304; RV64IA-WMO-ZACAS-NEXT:    sllw a1, a1, a0305; RV64IA-WMO-ZACAS-NEXT:    sllw a0, a2, a0306; RV64IA-WMO-ZACAS-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=1307; RV64IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)308; RV64IA-WMO-ZACAS-NEXT:    and a5, a2, a4309; RV64IA-WMO-ZACAS-NEXT:    bne a5, a1, .LBB1_3310; RV64IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB1_1 Depth=1311; RV64IA-WMO-ZACAS-NEXT:    xor a5, a2, a0312; RV64IA-WMO-ZACAS-NEXT:    and a5, a5, a4313; RV64IA-WMO-ZACAS-NEXT:    xor a5, a2, a5314; RV64IA-WMO-ZACAS-NEXT:    sc.w a5, a5, (a3)315; RV64IA-WMO-ZACAS-NEXT:    bnez a5, .LBB1_1316; RV64IA-WMO-ZACAS-NEXT:  .LBB1_3:317; RV64IA-WMO-ZACAS-NEXT:    ret318;319; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_acquire_monotonic:320; RV64IA-WMO-ZABHA:       # %bb.0:321; RV64IA-WMO-ZABHA-NEXT:    amocas.b.aq a1, a2, (a0)322; RV64IA-WMO-ZABHA-NEXT:    ret323;324; RV64IA-TSO-LABEL: cmpxchg_i8_acquire_monotonic:325; RV64IA-TSO:       # %bb.0:326; RV64IA-TSO-NEXT:    andi a3, a0, -4327; RV64IA-TSO-NEXT:    slli a0, a0, 3328; RV64IA-TSO-NEXT:    li a4, 255329; RV64IA-TSO-NEXT:    zext.b a1, a1330; RV64IA-TSO-NEXT:    zext.b a2, a2331; RV64IA-TSO-NEXT:    sllw a4, a4, a0332; RV64IA-TSO-NEXT:    sllw a1, a1, a0333; RV64IA-TSO-NEXT:    sllw a0, a2, a0334; RV64IA-TSO-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=1335; RV64IA-TSO-NEXT:    lr.w a2, (a3)336; RV64IA-TSO-NEXT:    and a5, a2, a4337; RV64IA-TSO-NEXT:    bne a5, a1, .LBB1_3338; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB1_1 Depth=1339; RV64IA-TSO-NEXT:    xor a5, a2, a0340; RV64IA-TSO-NEXT:    and a5, a5, a4341; RV64IA-TSO-NEXT:    xor a5, a2, a5342; RV64IA-TSO-NEXT:    sc.w a5, a5, (a3)343; RV64IA-TSO-NEXT:    bnez a5, .LBB1_1344; RV64IA-TSO-NEXT:  .LBB1_3:345; RV64IA-TSO-NEXT:    ret346;347; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i8_acquire_monotonic:348; RV64IA-TSO-ZACAS:       # %bb.0:349; RV64IA-TSO-ZACAS-NEXT:    andi a3, a0, -4350; RV64IA-TSO-ZACAS-NEXT:    slli a0, a0, 3351; RV64IA-TSO-ZACAS-NEXT:    li a4, 255352; RV64IA-TSO-ZACAS-NEXT:    zext.b a1, a1353; RV64IA-TSO-ZACAS-NEXT:    zext.b a2, a2354; RV64IA-TSO-ZACAS-NEXT:    sllw a4, a4, a0355; RV64IA-TSO-ZACAS-NEXT:    sllw a1, a1, a0356; RV64IA-TSO-ZACAS-NEXT:    sllw a0, a2, a0357; RV64IA-TSO-ZACAS-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=1358; RV64IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)359; RV64IA-TSO-ZACAS-NEXT:    and a5, a2, a4360; RV64IA-TSO-ZACAS-NEXT:    bne a5, a1, .LBB1_3361; RV64IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB1_1 Depth=1362; RV64IA-TSO-ZACAS-NEXT:    xor a5, a2, a0363; RV64IA-TSO-ZACAS-NEXT:    and a5, a5, a4364; RV64IA-TSO-ZACAS-NEXT:    xor a5, a2, a5365; RV64IA-TSO-ZACAS-NEXT:    sc.w a5, a5, (a3)366; RV64IA-TSO-ZACAS-NEXT:    bnez a5, .LBB1_1367; RV64IA-TSO-ZACAS-NEXT:  .LBB1_3:368; RV64IA-TSO-ZACAS-NEXT:    ret369;370; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_acquire_monotonic:371; RV64IA-TSO-ZABHA:       # %bb.0:372; RV64IA-TSO-ZABHA-NEXT:    amocas.b a1, a2, (a0)373; RV64IA-TSO-ZABHA-NEXT:    ret374  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val acquire monotonic375  ret void376}377 378define void @cmpxchg_i8_acquire_acquire(ptr %ptr, i8 %cmp, i8 %val) nounwind {379; RV32I-LABEL: cmpxchg_i8_acquire_acquire:380; RV32I:       # %bb.0:381; RV32I-NEXT:    addi sp, sp, -16382; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill383; RV32I-NEXT:    sb a1, 11(sp)384; RV32I-NEXT:    addi a1, sp, 11385; RV32I-NEXT:    li a3, 2386; RV32I-NEXT:    li a4, 2387; RV32I-NEXT:    call __atomic_compare_exchange_1388; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload389; RV32I-NEXT:    addi sp, sp, 16390; RV32I-NEXT:    ret391;392; RV32IA-WMO-LABEL: cmpxchg_i8_acquire_acquire:393; RV32IA-WMO:       # %bb.0:394; RV32IA-WMO-NEXT:    andi a3, a0, -4395; RV32IA-WMO-NEXT:    slli a0, a0, 3396; RV32IA-WMO-NEXT:    li a4, 255397; RV32IA-WMO-NEXT:    zext.b a1, a1398; RV32IA-WMO-NEXT:    zext.b a2, a2399; RV32IA-WMO-NEXT:    sll a4, a4, a0400; RV32IA-WMO-NEXT:    sll a1, a1, a0401; RV32IA-WMO-NEXT:    sll a0, a2, a0402; RV32IA-WMO-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1403; RV32IA-WMO-NEXT:    lr.w.aq a2, (a3)404; RV32IA-WMO-NEXT:    and a5, a2, a4405; RV32IA-WMO-NEXT:    bne a5, a1, .LBB2_3406; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB2_1 Depth=1407; RV32IA-WMO-NEXT:    xor a5, a2, a0408; RV32IA-WMO-NEXT:    and a5, a5, a4409; RV32IA-WMO-NEXT:    xor a5, a2, a5410; RV32IA-WMO-NEXT:    sc.w a5, a5, (a3)411; RV32IA-WMO-NEXT:    bnez a5, .LBB2_1412; RV32IA-WMO-NEXT:  .LBB2_3:413; RV32IA-WMO-NEXT:    ret414;415; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i8_acquire_acquire:416; RV32IA-WMO-ZACAS:       # %bb.0:417; RV32IA-WMO-ZACAS-NEXT:    andi a3, a0, -4418; RV32IA-WMO-ZACAS-NEXT:    slli a0, a0, 3419; RV32IA-WMO-ZACAS-NEXT:    li a4, 255420; RV32IA-WMO-ZACAS-NEXT:    zext.b a1, a1421; RV32IA-WMO-ZACAS-NEXT:    zext.b a2, a2422; RV32IA-WMO-ZACAS-NEXT:    sll a4, a4, a0423; RV32IA-WMO-ZACAS-NEXT:    sll a1, a1, a0424; RV32IA-WMO-ZACAS-NEXT:    sll a0, a2, a0425; RV32IA-WMO-ZACAS-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1426; RV32IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)427; RV32IA-WMO-ZACAS-NEXT:    and a5, a2, a4428; RV32IA-WMO-ZACAS-NEXT:    bne a5, a1, .LBB2_3429; RV32IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB2_1 Depth=1430; RV32IA-WMO-ZACAS-NEXT:    xor a5, a2, a0431; RV32IA-WMO-ZACAS-NEXT:    and a5, a5, a4432; RV32IA-WMO-ZACAS-NEXT:    xor a5, a2, a5433; RV32IA-WMO-ZACAS-NEXT:    sc.w a5, a5, (a3)434; RV32IA-WMO-ZACAS-NEXT:    bnez a5, .LBB2_1435; RV32IA-WMO-ZACAS-NEXT:  .LBB2_3:436; RV32IA-WMO-ZACAS-NEXT:    ret437;438; RV32IA-TSO-LABEL: cmpxchg_i8_acquire_acquire:439; RV32IA-TSO:       # %bb.0:440; RV32IA-TSO-NEXT:    andi a3, a0, -4441; RV32IA-TSO-NEXT:    slli a0, a0, 3442; RV32IA-TSO-NEXT:    li a4, 255443; RV32IA-TSO-NEXT:    zext.b a1, a1444; RV32IA-TSO-NEXT:    zext.b a2, a2445; RV32IA-TSO-NEXT:    sll a4, a4, a0446; RV32IA-TSO-NEXT:    sll a1, a1, a0447; RV32IA-TSO-NEXT:    sll a0, a2, a0448; RV32IA-TSO-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1449; RV32IA-TSO-NEXT:    lr.w a2, (a3)450; RV32IA-TSO-NEXT:    and a5, a2, a4451; RV32IA-TSO-NEXT:    bne a5, a1, .LBB2_3452; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB2_1 Depth=1453; RV32IA-TSO-NEXT:    xor a5, a2, a0454; RV32IA-TSO-NEXT:    and a5, a5, a4455; RV32IA-TSO-NEXT:    xor a5, a2, a5456; RV32IA-TSO-NEXT:    sc.w a5, a5, (a3)457; RV32IA-TSO-NEXT:    bnez a5, .LBB2_1458; RV32IA-TSO-NEXT:  .LBB2_3:459; RV32IA-TSO-NEXT:    ret460;461; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i8_acquire_acquire:462; RV32IA-TSO-ZACAS:       # %bb.0:463; RV32IA-TSO-ZACAS-NEXT:    andi a3, a0, -4464; RV32IA-TSO-ZACAS-NEXT:    slli a0, a0, 3465; RV32IA-TSO-ZACAS-NEXT:    li a4, 255466; RV32IA-TSO-ZACAS-NEXT:    zext.b a1, a1467; RV32IA-TSO-ZACAS-NEXT:    zext.b a2, a2468; RV32IA-TSO-ZACAS-NEXT:    sll a4, a4, a0469; RV32IA-TSO-ZACAS-NEXT:    sll a1, a1, a0470; RV32IA-TSO-ZACAS-NEXT:    sll a0, a2, a0471; RV32IA-TSO-ZACAS-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1472; RV32IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)473; RV32IA-TSO-ZACAS-NEXT:    and a5, a2, a4474; RV32IA-TSO-ZACAS-NEXT:    bne a5, a1, .LBB2_3475; RV32IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB2_1 Depth=1476; RV32IA-TSO-ZACAS-NEXT:    xor a5, a2, a0477; RV32IA-TSO-ZACAS-NEXT:    and a5, a5, a4478; RV32IA-TSO-ZACAS-NEXT:    xor a5, a2, a5479; RV32IA-TSO-ZACAS-NEXT:    sc.w a5, a5, (a3)480; RV32IA-TSO-ZACAS-NEXT:    bnez a5, .LBB2_1481; RV32IA-TSO-ZACAS-NEXT:  .LBB2_3:482; RV32IA-TSO-ZACAS-NEXT:    ret483;484; RV64I-LABEL: cmpxchg_i8_acquire_acquire:485; RV64I:       # %bb.0:486; RV64I-NEXT:    addi sp, sp, -16487; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill488; RV64I-NEXT:    sb a1, 7(sp)489; RV64I-NEXT:    addi a1, sp, 7490; RV64I-NEXT:    li a3, 2491; RV64I-NEXT:    li a4, 2492; RV64I-NEXT:    call __atomic_compare_exchange_1493; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload494; RV64I-NEXT:    addi sp, sp, 16495; RV64I-NEXT:    ret496;497; RV64IA-WMO-LABEL: cmpxchg_i8_acquire_acquire:498; RV64IA-WMO:       # %bb.0:499; RV64IA-WMO-NEXT:    andi a3, a0, -4500; RV64IA-WMO-NEXT:    slli a0, a0, 3501; RV64IA-WMO-NEXT:    li a4, 255502; RV64IA-WMO-NEXT:    zext.b a1, a1503; RV64IA-WMO-NEXT:    zext.b a2, a2504; RV64IA-WMO-NEXT:    sllw a4, a4, a0505; RV64IA-WMO-NEXT:    sllw a1, a1, a0506; RV64IA-WMO-NEXT:    sllw a0, a2, a0507; RV64IA-WMO-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1508; RV64IA-WMO-NEXT:    lr.w.aq a2, (a3)509; RV64IA-WMO-NEXT:    and a5, a2, a4510; RV64IA-WMO-NEXT:    bne a5, a1, .LBB2_3511; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB2_1 Depth=1512; RV64IA-WMO-NEXT:    xor a5, a2, a0513; RV64IA-WMO-NEXT:    and a5, a5, a4514; RV64IA-WMO-NEXT:    xor a5, a2, a5515; RV64IA-WMO-NEXT:    sc.w a5, a5, (a3)516; RV64IA-WMO-NEXT:    bnez a5, .LBB2_1517; RV64IA-WMO-NEXT:  .LBB2_3:518; RV64IA-WMO-NEXT:    ret519;520; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i8_acquire_acquire:521; RV64IA-WMO-ZACAS:       # %bb.0:522; RV64IA-WMO-ZACAS-NEXT:    andi a3, a0, -4523; RV64IA-WMO-ZACAS-NEXT:    slli a0, a0, 3524; RV64IA-WMO-ZACAS-NEXT:    li a4, 255525; RV64IA-WMO-ZACAS-NEXT:    zext.b a1, a1526; RV64IA-WMO-ZACAS-NEXT:    zext.b a2, a2527; RV64IA-WMO-ZACAS-NEXT:    sllw a4, a4, a0528; RV64IA-WMO-ZACAS-NEXT:    sllw a1, a1, a0529; RV64IA-WMO-ZACAS-NEXT:    sllw a0, a2, a0530; RV64IA-WMO-ZACAS-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1531; RV64IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)532; RV64IA-WMO-ZACAS-NEXT:    and a5, a2, a4533; RV64IA-WMO-ZACAS-NEXT:    bne a5, a1, .LBB2_3534; RV64IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB2_1 Depth=1535; RV64IA-WMO-ZACAS-NEXT:    xor a5, a2, a0536; RV64IA-WMO-ZACAS-NEXT:    and a5, a5, a4537; RV64IA-WMO-ZACAS-NEXT:    xor a5, a2, a5538; RV64IA-WMO-ZACAS-NEXT:    sc.w a5, a5, (a3)539; RV64IA-WMO-ZACAS-NEXT:    bnez a5, .LBB2_1540; RV64IA-WMO-ZACAS-NEXT:  .LBB2_3:541; RV64IA-WMO-ZACAS-NEXT:    ret542;543; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_acquire_acquire:544; RV64IA-WMO-ZABHA:       # %bb.0:545; RV64IA-WMO-ZABHA-NEXT:    amocas.b.aq a1, a2, (a0)546; RV64IA-WMO-ZABHA-NEXT:    ret547;548; RV64IA-TSO-LABEL: cmpxchg_i8_acquire_acquire:549; RV64IA-TSO:       # %bb.0:550; RV64IA-TSO-NEXT:    andi a3, a0, -4551; RV64IA-TSO-NEXT:    slli a0, a0, 3552; RV64IA-TSO-NEXT:    li a4, 255553; RV64IA-TSO-NEXT:    zext.b a1, a1554; RV64IA-TSO-NEXT:    zext.b a2, a2555; RV64IA-TSO-NEXT:    sllw a4, a4, a0556; RV64IA-TSO-NEXT:    sllw a1, a1, a0557; RV64IA-TSO-NEXT:    sllw a0, a2, a0558; RV64IA-TSO-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1559; RV64IA-TSO-NEXT:    lr.w a2, (a3)560; RV64IA-TSO-NEXT:    and a5, a2, a4561; RV64IA-TSO-NEXT:    bne a5, a1, .LBB2_3562; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB2_1 Depth=1563; RV64IA-TSO-NEXT:    xor a5, a2, a0564; RV64IA-TSO-NEXT:    and a5, a5, a4565; RV64IA-TSO-NEXT:    xor a5, a2, a5566; RV64IA-TSO-NEXT:    sc.w a5, a5, (a3)567; RV64IA-TSO-NEXT:    bnez a5, .LBB2_1568; RV64IA-TSO-NEXT:  .LBB2_3:569; RV64IA-TSO-NEXT:    ret570;571; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i8_acquire_acquire:572; RV64IA-TSO-ZACAS:       # %bb.0:573; RV64IA-TSO-ZACAS-NEXT:    andi a3, a0, -4574; RV64IA-TSO-ZACAS-NEXT:    slli a0, a0, 3575; RV64IA-TSO-ZACAS-NEXT:    li a4, 255576; RV64IA-TSO-ZACAS-NEXT:    zext.b a1, a1577; RV64IA-TSO-ZACAS-NEXT:    zext.b a2, a2578; RV64IA-TSO-ZACAS-NEXT:    sllw a4, a4, a0579; RV64IA-TSO-ZACAS-NEXT:    sllw a1, a1, a0580; RV64IA-TSO-ZACAS-NEXT:    sllw a0, a2, a0581; RV64IA-TSO-ZACAS-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1582; RV64IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)583; RV64IA-TSO-ZACAS-NEXT:    and a5, a2, a4584; RV64IA-TSO-ZACAS-NEXT:    bne a5, a1, .LBB2_3585; RV64IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB2_1 Depth=1586; RV64IA-TSO-ZACAS-NEXT:    xor a5, a2, a0587; RV64IA-TSO-ZACAS-NEXT:    and a5, a5, a4588; RV64IA-TSO-ZACAS-NEXT:    xor a5, a2, a5589; RV64IA-TSO-ZACAS-NEXT:    sc.w a5, a5, (a3)590; RV64IA-TSO-ZACAS-NEXT:    bnez a5, .LBB2_1591; RV64IA-TSO-ZACAS-NEXT:  .LBB2_3:592; RV64IA-TSO-ZACAS-NEXT:    ret593;594; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_acquire_acquire:595; RV64IA-TSO-ZABHA:       # %bb.0:596; RV64IA-TSO-ZABHA-NEXT:    amocas.b a1, a2, (a0)597; RV64IA-TSO-ZABHA-NEXT:    ret598  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val acquire acquire599  ret void600}601 602define void @cmpxchg_i8_release_monotonic(ptr %ptr, i8 %cmp, i8 %val) nounwind {603; RV32I-LABEL: cmpxchg_i8_release_monotonic:604; RV32I:       # %bb.0:605; RV32I-NEXT:    addi sp, sp, -16606; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill607; RV32I-NEXT:    sb a1, 11(sp)608; RV32I-NEXT:    addi a1, sp, 11609; RV32I-NEXT:    li a3, 3610; RV32I-NEXT:    li a4, 0611; RV32I-NEXT:    call __atomic_compare_exchange_1612; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload613; RV32I-NEXT:    addi sp, sp, 16614; RV32I-NEXT:    ret615;616; RV32IA-WMO-LABEL: cmpxchg_i8_release_monotonic:617; RV32IA-WMO:       # %bb.0:618; RV32IA-WMO-NEXT:    andi a3, a0, -4619; RV32IA-WMO-NEXT:    slli a0, a0, 3620; RV32IA-WMO-NEXT:    li a4, 255621; RV32IA-WMO-NEXT:    zext.b a1, a1622; RV32IA-WMO-NEXT:    zext.b a2, a2623; RV32IA-WMO-NEXT:    sll a4, a4, a0624; RV32IA-WMO-NEXT:    sll a1, a1, a0625; RV32IA-WMO-NEXT:    sll a0, a2, a0626; RV32IA-WMO-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1627; RV32IA-WMO-NEXT:    lr.w a2, (a3)628; RV32IA-WMO-NEXT:    and a5, a2, a4629; RV32IA-WMO-NEXT:    bne a5, a1, .LBB3_3630; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB3_1 Depth=1631; RV32IA-WMO-NEXT:    xor a5, a2, a0632; RV32IA-WMO-NEXT:    and a5, a5, a4633; RV32IA-WMO-NEXT:    xor a5, a2, a5634; RV32IA-WMO-NEXT:    sc.w.rl a5, a5, (a3)635; RV32IA-WMO-NEXT:    bnez a5, .LBB3_1636; RV32IA-WMO-NEXT:  .LBB3_3:637; RV32IA-WMO-NEXT:    ret638;639; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i8_release_monotonic:640; RV32IA-WMO-ZACAS:       # %bb.0:641; RV32IA-WMO-ZACAS-NEXT:    andi a3, a0, -4642; RV32IA-WMO-ZACAS-NEXT:    slli a0, a0, 3643; RV32IA-WMO-ZACAS-NEXT:    li a4, 255644; RV32IA-WMO-ZACAS-NEXT:    zext.b a1, a1645; RV32IA-WMO-ZACAS-NEXT:    zext.b a2, a2646; RV32IA-WMO-ZACAS-NEXT:    sll a4, a4, a0647; RV32IA-WMO-ZACAS-NEXT:    sll a1, a1, a0648; RV32IA-WMO-ZACAS-NEXT:    sll a0, a2, a0649; RV32IA-WMO-ZACAS-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1650; RV32IA-WMO-ZACAS-NEXT:    lr.w a2, (a3)651; RV32IA-WMO-ZACAS-NEXT:    and a5, a2, a4652; RV32IA-WMO-ZACAS-NEXT:    bne a5, a1, .LBB3_3653; RV32IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB3_1 Depth=1654; RV32IA-WMO-ZACAS-NEXT:    xor a5, a2, a0655; RV32IA-WMO-ZACAS-NEXT:    and a5, a5, a4656; RV32IA-WMO-ZACAS-NEXT:    xor a5, a2, a5657; RV32IA-WMO-ZACAS-NEXT:    sc.w.rl a5, a5, (a3)658; RV32IA-WMO-ZACAS-NEXT:    bnez a5, .LBB3_1659; RV32IA-WMO-ZACAS-NEXT:  .LBB3_3:660; RV32IA-WMO-ZACAS-NEXT:    ret661;662; RV32IA-TSO-LABEL: cmpxchg_i8_release_monotonic:663; RV32IA-TSO:       # %bb.0:664; RV32IA-TSO-NEXT:    andi a3, a0, -4665; RV32IA-TSO-NEXT:    slli a0, a0, 3666; RV32IA-TSO-NEXT:    li a4, 255667; RV32IA-TSO-NEXT:    zext.b a1, a1668; RV32IA-TSO-NEXT:    zext.b a2, a2669; RV32IA-TSO-NEXT:    sll a4, a4, a0670; RV32IA-TSO-NEXT:    sll a1, a1, a0671; RV32IA-TSO-NEXT:    sll a0, a2, a0672; RV32IA-TSO-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1673; RV32IA-TSO-NEXT:    lr.w a2, (a3)674; RV32IA-TSO-NEXT:    and a5, a2, a4675; RV32IA-TSO-NEXT:    bne a5, a1, .LBB3_3676; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB3_1 Depth=1677; RV32IA-TSO-NEXT:    xor a5, a2, a0678; RV32IA-TSO-NEXT:    and a5, a5, a4679; RV32IA-TSO-NEXT:    xor a5, a2, a5680; RV32IA-TSO-NEXT:    sc.w a5, a5, (a3)681; RV32IA-TSO-NEXT:    bnez a5, .LBB3_1682; RV32IA-TSO-NEXT:  .LBB3_3:683; RV32IA-TSO-NEXT:    ret684;685; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i8_release_monotonic:686; RV32IA-TSO-ZACAS:       # %bb.0:687; RV32IA-TSO-ZACAS-NEXT:    andi a3, a0, -4688; RV32IA-TSO-ZACAS-NEXT:    slli a0, a0, 3689; RV32IA-TSO-ZACAS-NEXT:    li a4, 255690; RV32IA-TSO-ZACAS-NEXT:    zext.b a1, a1691; RV32IA-TSO-ZACAS-NEXT:    zext.b a2, a2692; RV32IA-TSO-ZACAS-NEXT:    sll a4, a4, a0693; RV32IA-TSO-ZACAS-NEXT:    sll a1, a1, a0694; RV32IA-TSO-ZACAS-NEXT:    sll a0, a2, a0695; RV32IA-TSO-ZACAS-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1696; RV32IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)697; RV32IA-TSO-ZACAS-NEXT:    and a5, a2, a4698; RV32IA-TSO-ZACAS-NEXT:    bne a5, a1, .LBB3_3699; RV32IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB3_1 Depth=1700; RV32IA-TSO-ZACAS-NEXT:    xor a5, a2, a0701; RV32IA-TSO-ZACAS-NEXT:    and a5, a5, a4702; RV32IA-TSO-ZACAS-NEXT:    xor a5, a2, a5703; RV32IA-TSO-ZACAS-NEXT:    sc.w a5, a5, (a3)704; RV32IA-TSO-ZACAS-NEXT:    bnez a5, .LBB3_1705; RV32IA-TSO-ZACAS-NEXT:  .LBB3_3:706; RV32IA-TSO-ZACAS-NEXT:    ret707;708; RV64I-LABEL: cmpxchg_i8_release_monotonic:709; RV64I:       # %bb.0:710; RV64I-NEXT:    addi sp, sp, -16711; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill712; RV64I-NEXT:    sb a1, 7(sp)713; RV64I-NEXT:    addi a1, sp, 7714; RV64I-NEXT:    li a3, 3715; RV64I-NEXT:    li a4, 0716; RV64I-NEXT:    call __atomic_compare_exchange_1717; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload718; RV64I-NEXT:    addi sp, sp, 16719; RV64I-NEXT:    ret720;721; RV64IA-WMO-LABEL: cmpxchg_i8_release_monotonic:722; RV64IA-WMO:       # %bb.0:723; RV64IA-WMO-NEXT:    andi a3, a0, -4724; RV64IA-WMO-NEXT:    slli a0, a0, 3725; RV64IA-WMO-NEXT:    li a4, 255726; RV64IA-WMO-NEXT:    zext.b a1, a1727; RV64IA-WMO-NEXT:    zext.b a2, a2728; RV64IA-WMO-NEXT:    sllw a4, a4, a0729; RV64IA-WMO-NEXT:    sllw a1, a1, a0730; RV64IA-WMO-NEXT:    sllw a0, a2, a0731; RV64IA-WMO-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1732; RV64IA-WMO-NEXT:    lr.w a2, (a3)733; RV64IA-WMO-NEXT:    and a5, a2, a4734; RV64IA-WMO-NEXT:    bne a5, a1, .LBB3_3735; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB3_1 Depth=1736; RV64IA-WMO-NEXT:    xor a5, a2, a0737; RV64IA-WMO-NEXT:    and a5, a5, a4738; RV64IA-WMO-NEXT:    xor a5, a2, a5739; RV64IA-WMO-NEXT:    sc.w.rl a5, a5, (a3)740; RV64IA-WMO-NEXT:    bnez a5, .LBB3_1741; RV64IA-WMO-NEXT:  .LBB3_3:742; RV64IA-WMO-NEXT:    ret743;744; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i8_release_monotonic:745; RV64IA-WMO-ZACAS:       # %bb.0:746; RV64IA-WMO-ZACAS-NEXT:    andi a3, a0, -4747; RV64IA-WMO-ZACAS-NEXT:    slli a0, a0, 3748; RV64IA-WMO-ZACAS-NEXT:    li a4, 255749; RV64IA-WMO-ZACAS-NEXT:    zext.b a1, a1750; RV64IA-WMO-ZACAS-NEXT:    zext.b a2, a2751; RV64IA-WMO-ZACAS-NEXT:    sllw a4, a4, a0752; RV64IA-WMO-ZACAS-NEXT:    sllw a1, a1, a0753; RV64IA-WMO-ZACAS-NEXT:    sllw a0, a2, a0754; RV64IA-WMO-ZACAS-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1755; RV64IA-WMO-ZACAS-NEXT:    lr.w a2, (a3)756; RV64IA-WMO-ZACAS-NEXT:    and a5, a2, a4757; RV64IA-WMO-ZACAS-NEXT:    bne a5, a1, .LBB3_3758; RV64IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB3_1 Depth=1759; RV64IA-WMO-ZACAS-NEXT:    xor a5, a2, a0760; RV64IA-WMO-ZACAS-NEXT:    and a5, a5, a4761; RV64IA-WMO-ZACAS-NEXT:    xor a5, a2, a5762; RV64IA-WMO-ZACAS-NEXT:    sc.w.rl a5, a5, (a3)763; RV64IA-WMO-ZACAS-NEXT:    bnez a5, .LBB3_1764; RV64IA-WMO-ZACAS-NEXT:  .LBB3_3:765; RV64IA-WMO-ZACAS-NEXT:    ret766;767; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_release_monotonic:768; RV64IA-WMO-ZABHA:       # %bb.0:769; RV64IA-WMO-ZABHA-NEXT:    amocas.b.rl a1, a2, (a0)770; RV64IA-WMO-ZABHA-NEXT:    ret771;772; RV64IA-TSO-LABEL: cmpxchg_i8_release_monotonic:773; RV64IA-TSO:       # %bb.0:774; RV64IA-TSO-NEXT:    andi a3, a0, -4775; RV64IA-TSO-NEXT:    slli a0, a0, 3776; RV64IA-TSO-NEXT:    li a4, 255777; RV64IA-TSO-NEXT:    zext.b a1, a1778; RV64IA-TSO-NEXT:    zext.b a2, a2779; RV64IA-TSO-NEXT:    sllw a4, a4, a0780; RV64IA-TSO-NEXT:    sllw a1, a1, a0781; RV64IA-TSO-NEXT:    sllw a0, a2, a0782; RV64IA-TSO-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1783; RV64IA-TSO-NEXT:    lr.w a2, (a3)784; RV64IA-TSO-NEXT:    and a5, a2, a4785; RV64IA-TSO-NEXT:    bne a5, a1, .LBB3_3786; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB3_1 Depth=1787; RV64IA-TSO-NEXT:    xor a5, a2, a0788; RV64IA-TSO-NEXT:    and a5, a5, a4789; RV64IA-TSO-NEXT:    xor a5, a2, a5790; RV64IA-TSO-NEXT:    sc.w a5, a5, (a3)791; RV64IA-TSO-NEXT:    bnez a5, .LBB3_1792; RV64IA-TSO-NEXT:  .LBB3_3:793; RV64IA-TSO-NEXT:    ret794;795; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i8_release_monotonic:796; RV64IA-TSO-ZACAS:       # %bb.0:797; RV64IA-TSO-ZACAS-NEXT:    andi a3, a0, -4798; RV64IA-TSO-ZACAS-NEXT:    slli a0, a0, 3799; RV64IA-TSO-ZACAS-NEXT:    li a4, 255800; RV64IA-TSO-ZACAS-NEXT:    zext.b a1, a1801; RV64IA-TSO-ZACAS-NEXT:    zext.b a2, a2802; RV64IA-TSO-ZACAS-NEXT:    sllw a4, a4, a0803; RV64IA-TSO-ZACAS-NEXT:    sllw a1, a1, a0804; RV64IA-TSO-ZACAS-NEXT:    sllw a0, a2, a0805; RV64IA-TSO-ZACAS-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1806; RV64IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)807; RV64IA-TSO-ZACAS-NEXT:    and a5, a2, a4808; RV64IA-TSO-ZACAS-NEXT:    bne a5, a1, .LBB3_3809; RV64IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB3_1 Depth=1810; RV64IA-TSO-ZACAS-NEXT:    xor a5, a2, a0811; RV64IA-TSO-ZACAS-NEXT:    and a5, a5, a4812; RV64IA-TSO-ZACAS-NEXT:    xor a5, a2, a5813; RV64IA-TSO-ZACAS-NEXT:    sc.w a5, a5, (a3)814; RV64IA-TSO-ZACAS-NEXT:    bnez a5, .LBB3_1815; RV64IA-TSO-ZACAS-NEXT:  .LBB3_3:816; RV64IA-TSO-ZACAS-NEXT:    ret817;818; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_release_monotonic:819; RV64IA-TSO-ZABHA:       # %bb.0:820; RV64IA-TSO-ZABHA-NEXT:    amocas.b a1, a2, (a0)821; RV64IA-TSO-ZABHA-NEXT:    ret822  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val release monotonic823  ret void824}825 826define void @cmpxchg_i8_release_acquire(ptr %ptr, i8 %cmp, i8 %val) nounwind {827; RV32I-LABEL: cmpxchg_i8_release_acquire:828; RV32I:       # %bb.0:829; RV32I-NEXT:    addi sp, sp, -16830; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill831; RV32I-NEXT:    sb a1, 11(sp)832; RV32I-NEXT:    addi a1, sp, 11833; RV32I-NEXT:    li a3, 3834; RV32I-NEXT:    li a4, 2835; RV32I-NEXT:    call __atomic_compare_exchange_1836; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload837; RV32I-NEXT:    addi sp, sp, 16838; RV32I-NEXT:    ret839;840; RV32IA-WMO-LABEL: cmpxchg_i8_release_acquire:841; RV32IA-WMO:       # %bb.0:842; RV32IA-WMO-NEXT:    andi a3, a0, -4843; RV32IA-WMO-NEXT:    slli a0, a0, 3844; RV32IA-WMO-NEXT:    li a4, 255845; RV32IA-WMO-NEXT:    zext.b a1, a1846; RV32IA-WMO-NEXT:    zext.b a2, a2847; RV32IA-WMO-NEXT:    sll a4, a4, a0848; RV32IA-WMO-NEXT:    sll a1, a1, a0849; RV32IA-WMO-NEXT:    sll a0, a2, a0850; RV32IA-WMO-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1851; RV32IA-WMO-NEXT:    lr.w.aq a2, (a3)852; RV32IA-WMO-NEXT:    and a5, a2, a4853; RV32IA-WMO-NEXT:    bne a5, a1, .LBB4_3854; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB4_1 Depth=1855; RV32IA-WMO-NEXT:    xor a5, a2, a0856; RV32IA-WMO-NEXT:    and a5, a5, a4857; RV32IA-WMO-NEXT:    xor a5, a2, a5858; RV32IA-WMO-NEXT:    sc.w.rl a5, a5, (a3)859; RV32IA-WMO-NEXT:    bnez a5, .LBB4_1860; RV32IA-WMO-NEXT:  .LBB4_3:861; RV32IA-WMO-NEXT:    ret862;863; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i8_release_acquire:864; RV32IA-WMO-ZACAS:       # %bb.0:865; RV32IA-WMO-ZACAS-NEXT:    andi a3, a0, -4866; RV32IA-WMO-ZACAS-NEXT:    slli a0, a0, 3867; RV32IA-WMO-ZACAS-NEXT:    li a4, 255868; RV32IA-WMO-ZACAS-NEXT:    zext.b a1, a1869; RV32IA-WMO-ZACAS-NEXT:    zext.b a2, a2870; RV32IA-WMO-ZACAS-NEXT:    sll a4, a4, a0871; RV32IA-WMO-ZACAS-NEXT:    sll a1, a1, a0872; RV32IA-WMO-ZACAS-NEXT:    sll a0, a2, a0873; RV32IA-WMO-ZACAS-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1874; RV32IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)875; RV32IA-WMO-ZACAS-NEXT:    and a5, a2, a4876; RV32IA-WMO-ZACAS-NEXT:    bne a5, a1, .LBB4_3877; RV32IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB4_1 Depth=1878; RV32IA-WMO-ZACAS-NEXT:    xor a5, a2, a0879; RV32IA-WMO-ZACAS-NEXT:    and a5, a5, a4880; RV32IA-WMO-ZACAS-NEXT:    xor a5, a2, a5881; RV32IA-WMO-ZACAS-NEXT:    sc.w.rl a5, a5, (a3)882; RV32IA-WMO-ZACAS-NEXT:    bnez a5, .LBB4_1883; RV32IA-WMO-ZACAS-NEXT:  .LBB4_3:884; RV32IA-WMO-ZACAS-NEXT:    ret885;886; RV32IA-TSO-LABEL: cmpxchg_i8_release_acquire:887; RV32IA-TSO:       # %bb.0:888; RV32IA-TSO-NEXT:    andi a3, a0, -4889; RV32IA-TSO-NEXT:    slli a0, a0, 3890; RV32IA-TSO-NEXT:    li a4, 255891; RV32IA-TSO-NEXT:    zext.b a1, a1892; RV32IA-TSO-NEXT:    zext.b a2, a2893; RV32IA-TSO-NEXT:    sll a4, a4, a0894; RV32IA-TSO-NEXT:    sll a1, a1, a0895; RV32IA-TSO-NEXT:    sll a0, a2, a0896; RV32IA-TSO-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1897; RV32IA-TSO-NEXT:    lr.w a2, (a3)898; RV32IA-TSO-NEXT:    and a5, a2, a4899; RV32IA-TSO-NEXT:    bne a5, a1, .LBB4_3900; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB4_1 Depth=1901; RV32IA-TSO-NEXT:    xor a5, a2, a0902; RV32IA-TSO-NEXT:    and a5, a5, a4903; RV32IA-TSO-NEXT:    xor a5, a2, a5904; RV32IA-TSO-NEXT:    sc.w a5, a5, (a3)905; RV32IA-TSO-NEXT:    bnez a5, .LBB4_1906; RV32IA-TSO-NEXT:  .LBB4_3:907; RV32IA-TSO-NEXT:    ret908;909; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i8_release_acquire:910; RV32IA-TSO-ZACAS:       # %bb.0:911; RV32IA-TSO-ZACAS-NEXT:    andi a3, a0, -4912; RV32IA-TSO-ZACAS-NEXT:    slli a0, a0, 3913; RV32IA-TSO-ZACAS-NEXT:    li a4, 255914; RV32IA-TSO-ZACAS-NEXT:    zext.b a1, a1915; RV32IA-TSO-ZACAS-NEXT:    zext.b a2, a2916; RV32IA-TSO-ZACAS-NEXT:    sll a4, a4, a0917; RV32IA-TSO-ZACAS-NEXT:    sll a1, a1, a0918; RV32IA-TSO-ZACAS-NEXT:    sll a0, a2, a0919; RV32IA-TSO-ZACAS-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1920; RV32IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)921; RV32IA-TSO-ZACAS-NEXT:    and a5, a2, a4922; RV32IA-TSO-ZACAS-NEXT:    bne a5, a1, .LBB4_3923; RV32IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB4_1 Depth=1924; RV32IA-TSO-ZACAS-NEXT:    xor a5, a2, a0925; RV32IA-TSO-ZACAS-NEXT:    and a5, a5, a4926; RV32IA-TSO-ZACAS-NEXT:    xor a5, a2, a5927; RV32IA-TSO-ZACAS-NEXT:    sc.w a5, a5, (a3)928; RV32IA-TSO-ZACAS-NEXT:    bnez a5, .LBB4_1929; RV32IA-TSO-ZACAS-NEXT:  .LBB4_3:930; RV32IA-TSO-ZACAS-NEXT:    ret931;932; RV64I-LABEL: cmpxchg_i8_release_acquire:933; RV64I:       # %bb.0:934; RV64I-NEXT:    addi sp, sp, -16935; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill936; RV64I-NEXT:    sb a1, 7(sp)937; RV64I-NEXT:    addi a1, sp, 7938; RV64I-NEXT:    li a3, 3939; RV64I-NEXT:    li a4, 2940; RV64I-NEXT:    call __atomic_compare_exchange_1941; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload942; RV64I-NEXT:    addi sp, sp, 16943; RV64I-NEXT:    ret944;945; RV64IA-WMO-LABEL: cmpxchg_i8_release_acquire:946; RV64IA-WMO:       # %bb.0:947; RV64IA-WMO-NEXT:    andi a3, a0, -4948; RV64IA-WMO-NEXT:    slli a0, a0, 3949; RV64IA-WMO-NEXT:    li a4, 255950; RV64IA-WMO-NEXT:    zext.b a1, a1951; RV64IA-WMO-NEXT:    zext.b a2, a2952; RV64IA-WMO-NEXT:    sllw a4, a4, a0953; RV64IA-WMO-NEXT:    sllw a1, a1, a0954; RV64IA-WMO-NEXT:    sllw a0, a2, a0955; RV64IA-WMO-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1956; RV64IA-WMO-NEXT:    lr.w.aq a2, (a3)957; RV64IA-WMO-NEXT:    and a5, a2, a4958; RV64IA-WMO-NEXT:    bne a5, a1, .LBB4_3959; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB4_1 Depth=1960; RV64IA-WMO-NEXT:    xor a5, a2, a0961; RV64IA-WMO-NEXT:    and a5, a5, a4962; RV64IA-WMO-NEXT:    xor a5, a2, a5963; RV64IA-WMO-NEXT:    sc.w.rl a5, a5, (a3)964; RV64IA-WMO-NEXT:    bnez a5, .LBB4_1965; RV64IA-WMO-NEXT:  .LBB4_3:966; RV64IA-WMO-NEXT:    ret967;968; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i8_release_acquire:969; RV64IA-WMO-ZACAS:       # %bb.0:970; RV64IA-WMO-ZACAS-NEXT:    andi a3, a0, -4971; RV64IA-WMO-ZACAS-NEXT:    slli a0, a0, 3972; RV64IA-WMO-ZACAS-NEXT:    li a4, 255973; RV64IA-WMO-ZACAS-NEXT:    zext.b a1, a1974; RV64IA-WMO-ZACAS-NEXT:    zext.b a2, a2975; RV64IA-WMO-ZACAS-NEXT:    sllw a4, a4, a0976; RV64IA-WMO-ZACAS-NEXT:    sllw a1, a1, a0977; RV64IA-WMO-ZACAS-NEXT:    sllw a0, a2, a0978; RV64IA-WMO-ZACAS-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1979; RV64IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)980; RV64IA-WMO-ZACAS-NEXT:    and a5, a2, a4981; RV64IA-WMO-ZACAS-NEXT:    bne a5, a1, .LBB4_3982; RV64IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB4_1 Depth=1983; RV64IA-WMO-ZACAS-NEXT:    xor a5, a2, a0984; RV64IA-WMO-ZACAS-NEXT:    and a5, a5, a4985; RV64IA-WMO-ZACAS-NEXT:    xor a5, a2, a5986; RV64IA-WMO-ZACAS-NEXT:    sc.w.rl a5, a5, (a3)987; RV64IA-WMO-ZACAS-NEXT:    bnez a5, .LBB4_1988; RV64IA-WMO-ZACAS-NEXT:  .LBB4_3:989; RV64IA-WMO-ZACAS-NEXT:    ret990;991; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_release_acquire:992; RV64IA-WMO-ZABHA:       # %bb.0:993; RV64IA-WMO-ZABHA-NEXT:    amocas.b.aqrl a1, a2, (a0)994; RV64IA-WMO-ZABHA-NEXT:    ret995;996; RV64IA-TSO-LABEL: cmpxchg_i8_release_acquire:997; RV64IA-TSO:       # %bb.0:998; RV64IA-TSO-NEXT:    andi a3, a0, -4999; RV64IA-TSO-NEXT:    slli a0, a0, 31000; RV64IA-TSO-NEXT:    li a4, 2551001; RV64IA-TSO-NEXT:    zext.b a1, a11002; RV64IA-TSO-NEXT:    zext.b a2, a21003; RV64IA-TSO-NEXT:    sllw a4, a4, a01004; RV64IA-TSO-NEXT:    sllw a1, a1, a01005; RV64IA-TSO-NEXT:    sllw a0, a2, a01006; RV64IA-TSO-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=11007; RV64IA-TSO-NEXT:    lr.w a2, (a3)1008; RV64IA-TSO-NEXT:    and a5, a2, a41009; RV64IA-TSO-NEXT:    bne a5, a1, .LBB4_31010; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB4_1 Depth=11011; RV64IA-TSO-NEXT:    xor a5, a2, a01012; RV64IA-TSO-NEXT:    and a5, a5, a41013; RV64IA-TSO-NEXT:    xor a5, a2, a51014; RV64IA-TSO-NEXT:    sc.w a5, a5, (a3)1015; RV64IA-TSO-NEXT:    bnez a5, .LBB4_11016; RV64IA-TSO-NEXT:  .LBB4_3:1017; RV64IA-TSO-NEXT:    ret1018;1019; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i8_release_acquire:1020; RV64IA-TSO-ZACAS:       # %bb.0:1021; RV64IA-TSO-ZACAS-NEXT:    andi a3, a0, -41022; RV64IA-TSO-ZACAS-NEXT:    slli a0, a0, 31023; RV64IA-TSO-ZACAS-NEXT:    li a4, 2551024; RV64IA-TSO-ZACAS-NEXT:    zext.b a1, a11025; RV64IA-TSO-ZACAS-NEXT:    zext.b a2, a21026; RV64IA-TSO-ZACAS-NEXT:    sllw a4, a4, a01027; RV64IA-TSO-ZACAS-NEXT:    sllw a1, a1, a01028; RV64IA-TSO-ZACAS-NEXT:    sllw a0, a2, a01029; RV64IA-TSO-ZACAS-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=11030; RV64IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)1031; RV64IA-TSO-ZACAS-NEXT:    and a5, a2, a41032; RV64IA-TSO-ZACAS-NEXT:    bne a5, a1, .LBB4_31033; RV64IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB4_1 Depth=11034; RV64IA-TSO-ZACAS-NEXT:    xor a5, a2, a01035; RV64IA-TSO-ZACAS-NEXT:    and a5, a5, a41036; RV64IA-TSO-ZACAS-NEXT:    xor a5, a2, a51037; RV64IA-TSO-ZACAS-NEXT:    sc.w a5, a5, (a3)1038; RV64IA-TSO-ZACAS-NEXT:    bnez a5, .LBB4_11039; RV64IA-TSO-ZACAS-NEXT:  .LBB4_3:1040; RV64IA-TSO-ZACAS-NEXT:    ret1041;1042; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_release_acquire:1043; RV64IA-TSO-ZABHA:       # %bb.0:1044; RV64IA-TSO-ZABHA-NEXT:    amocas.b a1, a2, (a0)1045; RV64IA-TSO-ZABHA-NEXT:    ret1046  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val release acquire1047  ret void1048}1049 1050define void @cmpxchg_i8_acq_rel_monotonic(ptr %ptr, i8 %cmp, i8 %val) nounwind {1051; RV32I-LABEL: cmpxchg_i8_acq_rel_monotonic:1052; RV32I:       # %bb.0:1053; RV32I-NEXT:    addi sp, sp, -161054; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1055; RV32I-NEXT:    sb a1, 11(sp)1056; RV32I-NEXT:    addi a1, sp, 111057; RV32I-NEXT:    li a3, 41058; RV32I-NEXT:    li a4, 01059; RV32I-NEXT:    call __atomic_compare_exchange_11060; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1061; RV32I-NEXT:    addi sp, sp, 161062; RV32I-NEXT:    ret1063;1064; RV32IA-WMO-LABEL: cmpxchg_i8_acq_rel_monotonic:1065; RV32IA-WMO:       # %bb.0:1066; RV32IA-WMO-NEXT:    andi a3, a0, -41067; RV32IA-WMO-NEXT:    slli a0, a0, 31068; RV32IA-WMO-NEXT:    li a4, 2551069; RV32IA-WMO-NEXT:    zext.b a1, a11070; RV32IA-WMO-NEXT:    zext.b a2, a21071; RV32IA-WMO-NEXT:    sll a4, a4, a01072; RV32IA-WMO-NEXT:    sll a1, a1, a01073; RV32IA-WMO-NEXT:    sll a0, a2, a01074; RV32IA-WMO-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=11075; RV32IA-WMO-NEXT:    lr.w.aq a2, (a3)1076; RV32IA-WMO-NEXT:    and a5, a2, a41077; RV32IA-WMO-NEXT:    bne a5, a1, .LBB5_31078; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB5_1 Depth=11079; RV32IA-WMO-NEXT:    xor a5, a2, a01080; RV32IA-WMO-NEXT:    and a5, a5, a41081; RV32IA-WMO-NEXT:    xor a5, a2, a51082; RV32IA-WMO-NEXT:    sc.w.rl a5, a5, (a3)1083; RV32IA-WMO-NEXT:    bnez a5, .LBB5_11084; RV32IA-WMO-NEXT:  .LBB5_3:1085; RV32IA-WMO-NEXT:    ret1086;1087; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i8_acq_rel_monotonic:1088; RV32IA-WMO-ZACAS:       # %bb.0:1089; RV32IA-WMO-ZACAS-NEXT:    andi a3, a0, -41090; RV32IA-WMO-ZACAS-NEXT:    slli a0, a0, 31091; RV32IA-WMO-ZACAS-NEXT:    li a4, 2551092; RV32IA-WMO-ZACAS-NEXT:    zext.b a1, a11093; RV32IA-WMO-ZACAS-NEXT:    zext.b a2, a21094; RV32IA-WMO-ZACAS-NEXT:    sll a4, a4, a01095; RV32IA-WMO-ZACAS-NEXT:    sll a1, a1, a01096; RV32IA-WMO-ZACAS-NEXT:    sll a0, a2, a01097; RV32IA-WMO-ZACAS-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=11098; RV32IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)1099; RV32IA-WMO-ZACAS-NEXT:    and a5, a2, a41100; RV32IA-WMO-ZACAS-NEXT:    bne a5, a1, .LBB5_31101; RV32IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB5_1 Depth=11102; RV32IA-WMO-ZACAS-NEXT:    xor a5, a2, a01103; RV32IA-WMO-ZACAS-NEXT:    and a5, a5, a41104; RV32IA-WMO-ZACAS-NEXT:    xor a5, a2, a51105; RV32IA-WMO-ZACAS-NEXT:    sc.w.rl a5, a5, (a3)1106; RV32IA-WMO-ZACAS-NEXT:    bnez a5, .LBB5_11107; RV32IA-WMO-ZACAS-NEXT:  .LBB5_3:1108; RV32IA-WMO-ZACAS-NEXT:    ret1109;1110; RV32IA-TSO-LABEL: cmpxchg_i8_acq_rel_monotonic:1111; RV32IA-TSO:       # %bb.0:1112; RV32IA-TSO-NEXT:    andi a3, a0, -41113; RV32IA-TSO-NEXT:    slli a0, a0, 31114; RV32IA-TSO-NEXT:    li a4, 2551115; RV32IA-TSO-NEXT:    zext.b a1, a11116; RV32IA-TSO-NEXT:    zext.b a2, a21117; RV32IA-TSO-NEXT:    sll a4, a4, a01118; RV32IA-TSO-NEXT:    sll a1, a1, a01119; RV32IA-TSO-NEXT:    sll a0, a2, a01120; RV32IA-TSO-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=11121; RV32IA-TSO-NEXT:    lr.w a2, (a3)1122; RV32IA-TSO-NEXT:    and a5, a2, a41123; RV32IA-TSO-NEXT:    bne a5, a1, .LBB5_31124; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB5_1 Depth=11125; RV32IA-TSO-NEXT:    xor a5, a2, a01126; RV32IA-TSO-NEXT:    and a5, a5, a41127; RV32IA-TSO-NEXT:    xor a5, a2, a51128; RV32IA-TSO-NEXT:    sc.w a5, a5, (a3)1129; RV32IA-TSO-NEXT:    bnez a5, .LBB5_11130; RV32IA-TSO-NEXT:  .LBB5_3:1131; RV32IA-TSO-NEXT:    ret1132;1133; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i8_acq_rel_monotonic:1134; RV32IA-TSO-ZACAS:       # %bb.0:1135; RV32IA-TSO-ZACAS-NEXT:    andi a3, a0, -41136; RV32IA-TSO-ZACAS-NEXT:    slli a0, a0, 31137; RV32IA-TSO-ZACAS-NEXT:    li a4, 2551138; RV32IA-TSO-ZACAS-NEXT:    zext.b a1, a11139; RV32IA-TSO-ZACAS-NEXT:    zext.b a2, a21140; RV32IA-TSO-ZACAS-NEXT:    sll a4, a4, a01141; RV32IA-TSO-ZACAS-NEXT:    sll a1, a1, a01142; RV32IA-TSO-ZACAS-NEXT:    sll a0, a2, a01143; RV32IA-TSO-ZACAS-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=11144; RV32IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)1145; RV32IA-TSO-ZACAS-NEXT:    and a5, a2, a41146; RV32IA-TSO-ZACAS-NEXT:    bne a5, a1, .LBB5_31147; RV32IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB5_1 Depth=11148; RV32IA-TSO-ZACAS-NEXT:    xor a5, a2, a01149; RV32IA-TSO-ZACAS-NEXT:    and a5, a5, a41150; RV32IA-TSO-ZACAS-NEXT:    xor a5, a2, a51151; RV32IA-TSO-ZACAS-NEXT:    sc.w a5, a5, (a3)1152; RV32IA-TSO-ZACAS-NEXT:    bnez a5, .LBB5_11153; RV32IA-TSO-ZACAS-NEXT:  .LBB5_3:1154; RV32IA-TSO-ZACAS-NEXT:    ret1155;1156; RV64I-LABEL: cmpxchg_i8_acq_rel_monotonic:1157; RV64I:       # %bb.0:1158; RV64I-NEXT:    addi sp, sp, -161159; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1160; RV64I-NEXT:    sb a1, 7(sp)1161; RV64I-NEXT:    addi a1, sp, 71162; RV64I-NEXT:    li a3, 41163; RV64I-NEXT:    li a4, 01164; RV64I-NEXT:    call __atomic_compare_exchange_11165; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1166; RV64I-NEXT:    addi sp, sp, 161167; RV64I-NEXT:    ret1168;1169; RV64IA-WMO-LABEL: cmpxchg_i8_acq_rel_monotonic:1170; RV64IA-WMO:       # %bb.0:1171; RV64IA-WMO-NEXT:    andi a3, a0, -41172; RV64IA-WMO-NEXT:    slli a0, a0, 31173; RV64IA-WMO-NEXT:    li a4, 2551174; RV64IA-WMO-NEXT:    zext.b a1, a11175; RV64IA-WMO-NEXT:    zext.b a2, a21176; RV64IA-WMO-NEXT:    sllw a4, a4, a01177; RV64IA-WMO-NEXT:    sllw a1, a1, a01178; RV64IA-WMO-NEXT:    sllw a0, a2, a01179; RV64IA-WMO-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=11180; RV64IA-WMO-NEXT:    lr.w.aq a2, (a3)1181; RV64IA-WMO-NEXT:    and a5, a2, a41182; RV64IA-WMO-NEXT:    bne a5, a1, .LBB5_31183; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB5_1 Depth=11184; RV64IA-WMO-NEXT:    xor a5, a2, a01185; RV64IA-WMO-NEXT:    and a5, a5, a41186; RV64IA-WMO-NEXT:    xor a5, a2, a51187; RV64IA-WMO-NEXT:    sc.w.rl a5, a5, (a3)1188; RV64IA-WMO-NEXT:    bnez a5, .LBB5_11189; RV64IA-WMO-NEXT:  .LBB5_3:1190; RV64IA-WMO-NEXT:    ret1191;1192; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i8_acq_rel_monotonic:1193; RV64IA-WMO-ZACAS:       # %bb.0:1194; RV64IA-WMO-ZACAS-NEXT:    andi a3, a0, -41195; RV64IA-WMO-ZACAS-NEXT:    slli a0, a0, 31196; RV64IA-WMO-ZACAS-NEXT:    li a4, 2551197; RV64IA-WMO-ZACAS-NEXT:    zext.b a1, a11198; RV64IA-WMO-ZACAS-NEXT:    zext.b a2, a21199; RV64IA-WMO-ZACAS-NEXT:    sllw a4, a4, a01200; RV64IA-WMO-ZACAS-NEXT:    sllw a1, a1, a01201; RV64IA-WMO-ZACAS-NEXT:    sllw a0, a2, a01202; RV64IA-WMO-ZACAS-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=11203; RV64IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)1204; RV64IA-WMO-ZACAS-NEXT:    and a5, a2, a41205; RV64IA-WMO-ZACAS-NEXT:    bne a5, a1, .LBB5_31206; RV64IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB5_1 Depth=11207; RV64IA-WMO-ZACAS-NEXT:    xor a5, a2, a01208; RV64IA-WMO-ZACAS-NEXT:    and a5, a5, a41209; RV64IA-WMO-ZACAS-NEXT:    xor a5, a2, a51210; RV64IA-WMO-ZACAS-NEXT:    sc.w.rl a5, a5, (a3)1211; RV64IA-WMO-ZACAS-NEXT:    bnez a5, .LBB5_11212; RV64IA-WMO-ZACAS-NEXT:  .LBB5_3:1213; RV64IA-WMO-ZACAS-NEXT:    ret1214;1215; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_acq_rel_monotonic:1216; RV64IA-WMO-ZABHA:       # %bb.0:1217; RV64IA-WMO-ZABHA-NEXT:    amocas.b.aqrl a1, a2, (a0)1218; RV64IA-WMO-ZABHA-NEXT:    ret1219;1220; RV64IA-TSO-LABEL: cmpxchg_i8_acq_rel_monotonic:1221; RV64IA-TSO:       # %bb.0:1222; RV64IA-TSO-NEXT:    andi a3, a0, -41223; RV64IA-TSO-NEXT:    slli a0, a0, 31224; RV64IA-TSO-NEXT:    li a4, 2551225; RV64IA-TSO-NEXT:    zext.b a1, a11226; RV64IA-TSO-NEXT:    zext.b a2, a21227; RV64IA-TSO-NEXT:    sllw a4, a4, a01228; RV64IA-TSO-NEXT:    sllw a1, a1, a01229; RV64IA-TSO-NEXT:    sllw a0, a2, a01230; RV64IA-TSO-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=11231; RV64IA-TSO-NEXT:    lr.w a2, (a3)1232; RV64IA-TSO-NEXT:    and a5, a2, a41233; RV64IA-TSO-NEXT:    bne a5, a1, .LBB5_31234; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB5_1 Depth=11235; RV64IA-TSO-NEXT:    xor a5, a2, a01236; RV64IA-TSO-NEXT:    and a5, a5, a41237; RV64IA-TSO-NEXT:    xor a5, a2, a51238; RV64IA-TSO-NEXT:    sc.w a5, a5, (a3)1239; RV64IA-TSO-NEXT:    bnez a5, .LBB5_11240; RV64IA-TSO-NEXT:  .LBB5_3:1241; RV64IA-TSO-NEXT:    ret1242;1243; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i8_acq_rel_monotonic:1244; RV64IA-TSO-ZACAS:       # %bb.0:1245; RV64IA-TSO-ZACAS-NEXT:    andi a3, a0, -41246; RV64IA-TSO-ZACAS-NEXT:    slli a0, a0, 31247; RV64IA-TSO-ZACAS-NEXT:    li a4, 2551248; RV64IA-TSO-ZACAS-NEXT:    zext.b a1, a11249; RV64IA-TSO-ZACAS-NEXT:    zext.b a2, a21250; RV64IA-TSO-ZACAS-NEXT:    sllw a4, a4, a01251; RV64IA-TSO-ZACAS-NEXT:    sllw a1, a1, a01252; RV64IA-TSO-ZACAS-NEXT:    sllw a0, a2, a01253; RV64IA-TSO-ZACAS-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=11254; RV64IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)1255; RV64IA-TSO-ZACAS-NEXT:    and a5, a2, a41256; RV64IA-TSO-ZACAS-NEXT:    bne a5, a1, .LBB5_31257; RV64IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB5_1 Depth=11258; RV64IA-TSO-ZACAS-NEXT:    xor a5, a2, a01259; RV64IA-TSO-ZACAS-NEXT:    and a5, a5, a41260; RV64IA-TSO-ZACAS-NEXT:    xor a5, a2, a51261; RV64IA-TSO-ZACAS-NEXT:    sc.w a5, a5, (a3)1262; RV64IA-TSO-ZACAS-NEXT:    bnez a5, .LBB5_11263; RV64IA-TSO-ZACAS-NEXT:  .LBB5_3:1264; RV64IA-TSO-ZACAS-NEXT:    ret1265;1266; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_acq_rel_monotonic:1267; RV64IA-TSO-ZABHA:       # %bb.0:1268; RV64IA-TSO-ZABHA-NEXT:    amocas.b a1, a2, (a0)1269; RV64IA-TSO-ZABHA-NEXT:    ret1270  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val acq_rel monotonic1271  ret void1272}1273 1274define void @cmpxchg_i8_acq_rel_acquire(ptr %ptr, i8 %cmp, i8 %val) nounwind {1275; RV32I-LABEL: cmpxchg_i8_acq_rel_acquire:1276; RV32I:       # %bb.0:1277; RV32I-NEXT:    addi sp, sp, -161278; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1279; RV32I-NEXT:    sb a1, 11(sp)1280; RV32I-NEXT:    addi a1, sp, 111281; RV32I-NEXT:    li a3, 41282; RV32I-NEXT:    li a4, 21283; RV32I-NEXT:    call __atomic_compare_exchange_11284; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1285; RV32I-NEXT:    addi sp, sp, 161286; RV32I-NEXT:    ret1287;1288; RV32IA-WMO-LABEL: cmpxchg_i8_acq_rel_acquire:1289; RV32IA-WMO:       # %bb.0:1290; RV32IA-WMO-NEXT:    andi a3, a0, -41291; RV32IA-WMO-NEXT:    slli a0, a0, 31292; RV32IA-WMO-NEXT:    li a4, 2551293; RV32IA-WMO-NEXT:    zext.b a1, a11294; RV32IA-WMO-NEXT:    zext.b a2, a21295; RV32IA-WMO-NEXT:    sll a4, a4, a01296; RV32IA-WMO-NEXT:    sll a1, a1, a01297; RV32IA-WMO-NEXT:    sll a0, a2, a01298; RV32IA-WMO-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=11299; RV32IA-WMO-NEXT:    lr.w.aq a2, (a3)1300; RV32IA-WMO-NEXT:    and a5, a2, a41301; RV32IA-WMO-NEXT:    bne a5, a1, .LBB6_31302; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB6_1 Depth=11303; RV32IA-WMO-NEXT:    xor a5, a2, a01304; RV32IA-WMO-NEXT:    and a5, a5, a41305; RV32IA-WMO-NEXT:    xor a5, a2, a51306; RV32IA-WMO-NEXT:    sc.w.rl a5, a5, (a3)1307; RV32IA-WMO-NEXT:    bnez a5, .LBB6_11308; RV32IA-WMO-NEXT:  .LBB6_3:1309; RV32IA-WMO-NEXT:    ret1310;1311; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i8_acq_rel_acquire:1312; RV32IA-WMO-ZACAS:       # %bb.0:1313; RV32IA-WMO-ZACAS-NEXT:    andi a3, a0, -41314; RV32IA-WMO-ZACAS-NEXT:    slli a0, a0, 31315; RV32IA-WMO-ZACAS-NEXT:    li a4, 2551316; RV32IA-WMO-ZACAS-NEXT:    zext.b a1, a11317; RV32IA-WMO-ZACAS-NEXT:    zext.b a2, a21318; RV32IA-WMO-ZACAS-NEXT:    sll a4, a4, a01319; RV32IA-WMO-ZACAS-NEXT:    sll a1, a1, a01320; RV32IA-WMO-ZACAS-NEXT:    sll a0, a2, a01321; RV32IA-WMO-ZACAS-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=11322; RV32IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)1323; RV32IA-WMO-ZACAS-NEXT:    and a5, a2, a41324; RV32IA-WMO-ZACAS-NEXT:    bne a5, a1, .LBB6_31325; RV32IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB6_1 Depth=11326; RV32IA-WMO-ZACAS-NEXT:    xor a5, a2, a01327; RV32IA-WMO-ZACAS-NEXT:    and a5, a5, a41328; RV32IA-WMO-ZACAS-NEXT:    xor a5, a2, a51329; RV32IA-WMO-ZACAS-NEXT:    sc.w.rl a5, a5, (a3)1330; RV32IA-WMO-ZACAS-NEXT:    bnez a5, .LBB6_11331; RV32IA-WMO-ZACAS-NEXT:  .LBB6_3:1332; RV32IA-WMO-ZACAS-NEXT:    ret1333;1334; RV32IA-TSO-LABEL: cmpxchg_i8_acq_rel_acquire:1335; RV32IA-TSO:       # %bb.0:1336; RV32IA-TSO-NEXT:    andi a3, a0, -41337; RV32IA-TSO-NEXT:    slli a0, a0, 31338; RV32IA-TSO-NEXT:    li a4, 2551339; RV32IA-TSO-NEXT:    zext.b a1, a11340; RV32IA-TSO-NEXT:    zext.b a2, a21341; RV32IA-TSO-NEXT:    sll a4, a4, a01342; RV32IA-TSO-NEXT:    sll a1, a1, a01343; RV32IA-TSO-NEXT:    sll a0, a2, a01344; RV32IA-TSO-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=11345; RV32IA-TSO-NEXT:    lr.w a2, (a3)1346; RV32IA-TSO-NEXT:    and a5, a2, a41347; RV32IA-TSO-NEXT:    bne a5, a1, .LBB6_31348; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB6_1 Depth=11349; RV32IA-TSO-NEXT:    xor a5, a2, a01350; RV32IA-TSO-NEXT:    and a5, a5, a41351; RV32IA-TSO-NEXT:    xor a5, a2, a51352; RV32IA-TSO-NEXT:    sc.w a5, a5, (a3)1353; RV32IA-TSO-NEXT:    bnez a5, .LBB6_11354; RV32IA-TSO-NEXT:  .LBB6_3:1355; RV32IA-TSO-NEXT:    ret1356;1357; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i8_acq_rel_acquire:1358; RV32IA-TSO-ZACAS:       # %bb.0:1359; RV32IA-TSO-ZACAS-NEXT:    andi a3, a0, -41360; RV32IA-TSO-ZACAS-NEXT:    slli a0, a0, 31361; RV32IA-TSO-ZACAS-NEXT:    li a4, 2551362; RV32IA-TSO-ZACAS-NEXT:    zext.b a1, a11363; RV32IA-TSO-ZACAS-NEXT:    zext.b a2, a21364; RV32IA-TSO-ZACAS-NEXT:    sll a4, a4, a01365; RV32IA-TSO-ZACAS-NEXT:    sll a1, a1, a01366; RV32IA-TSO-ZACAS-NEXT:    sll a0, a2, a01367; RV32IA-TSO-ZACAS-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=11368; RV32IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)1369; RV32IA-TSO-ZACAS-NEXT:    and a5, a2, a41370; RV32IA-TSO-ZACAS-NEXT:    bne a5, a1, .LBB6_31371; RV32IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB6_1 Depth=11372; RV32IA-TSO-ZACAS-NEXT:    xor a5, a2, a01373; RV32IA-TSO-ZACAS-NEXT:    and a5, a5, a41374; RV32IA-TSO-ZACAS-NEXT:    xor a5, a2, a51375; RV32IA-TSO-ZACAS-NEXT:    sc.w a5, a5, (a3)1376; RV32IA-TSO-ZACAS-NEXT:    bnez a5, .LBB6_11377; RV32IA-TSO-ZACAS-NEXT:  .LBB6_3:1378; RV32IA-TSO-ZACAS-NEXT:    ret1379;1380; RV64I-LABEL: cmpxchg_i8_acq_rel_acquire:1381; RV64I:       # %bb.0:1382; RV64I-NEXT:    addi sp, sp, -161383; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1384; RV64I-NEXT:    sb a1, 7(sp)1385; RV64I-NEXT:    addi a1, sp, 71386; RV64I-NEXT:    li a3, 41387; RV64I-NEXT:    li a4, 21388; RV64I-NEXT:    call __atomic_compare_exchange_11389; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1390; RV64I-NEXT:    addi sp, sp, 161391; RV64I-NEXT:    ret1392;1393; RV64IA-WMO-LABEL: cmpxchg_i8_acq_rel_acquire:1394; RV64IA-WMO:       # %bb.0:1395; RV64IA-WMO-NEXT:    andi a3, a0, -41396; RV64IA-WMO-NEXT:    slli a0, a0, 31397; RV64IA-WMO-NEXT:    li a4, 2551398; RV64IA-WMO-NEXT:    zext.b a1, a11399; RV64IA-WMO-NEXT:    zext.b a2, a21400; RV64IA-WMO-NEXT:    sllw a4, a4, a01401; RV64IA-WMO-NEXT:    sllw a1, a1, a01402; RV64IA-WMO-NEXT:    sllw a0, a2, a01403; RV64IA-WMO-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=11404; RV64IA-WMO-NEXT:    lr.w.aq a2, (a3)1405; RV64IA-WMO-NEXT:    and a5, a2, a41406; RV64IA-WMO-NEXT:    bne a5, a1, .LBB6_31407; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB6_1 Depth=11408; RV64IA-WMO-NEXT:    xor a5, a2, a01409; RV64IA-WMO-NEXT:    and a5, a5, a41410; RV64IA-WMO-NEXT:    xor a5, a2, a51411; RV64IA-WMO-NEXT:    sc.w.rl a5, a5, (a3)1412; RV64IA-WMO-NEXT:    bnez a5, .LBB6_11413; RV64IA-WMO-NEXT:  .LBB6_3:1414; RV64IA-WMO-NEXT:    ret1415;1416; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i8_acq_rel_acquire:1417; RV64IA-WMO-ZACAS:       # %bb.0:1418; RV64IA-WMO-ZACAS-NEXT:    andi a3, a0, -41419; RV64IA-WMO-ZACAS-NEXT:    slli a0, a0, 31420; RV64IA-WMO-ZACAS-NEXT:    li a4, 2551421; RV64IA-WMO-ZACAS-NEXT:    zext.b a1, a11422; RV64IA-WMO-ZACAS-NEXT:    zext.b a2, a21423; RV64IA-WMO-ZACAS-NEXT:    sllw a4, a4, a01424; RV64IA-WMO-ZACAS-NEXT:    sllw a1, a1, a01425; RV64IA-WMO-ZACAS-NEXT:    sllw a0, a2, a01426; RV64IA-WMO-ZACAS-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=11427; RV64IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)1428; RV64IA-WMO-ZACAS-NEXT:    and a5, a2, a41429; RV64IA-WMO-ZACAS-NEXT:    bne a5, a1, .LBB6_31430; RV64IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB6_1 Depth=11431; RV64IA-WMO-ZACAS-NEXT:    xor a5, a2, a01432; RV64IA-WMO-ZACAS-NEXT:    and a5, a5, a41433; RV64IA-WMO-ZACAS-NEXT:    xor a5, a2, a51434; RV64IA-WMO-ZACAS-NEXT:    sc.w.rl a5, a5, (a3)1435; RV64IA-WMO-ZACAS-NEXT:    bnez a5, .LBB6_11436; RV64IA-WMO-ZACAS-NEXT:  .LBB6_3:1437; RV64IA-WMO-ZACAS-NEXT:    ret1438;1439; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_acq_rel_acquire:1440; RV64IA-WMO-ZABHA:       # %bb.0:1441; RV64IA-WMO-ZABHA-NEXT:    amocas.b.aqrl a1, a2, (a0)1442; RV64IA-WMO-ZABHA-NEXT:    ret1443;1444; RV64IA-TSO-LABEL: cmpxchg_i8_acq_rel_acquire:1445; RV64IA-TSO:       # %bb.0:1446; RV64IA-TSO-NEXT:    andi a3, a0, -41447; RV64IA-TSO-NEXT:    slli a0, a0, 31448; RV64IA-TSO-NEXT:    li a4, 2551449; RV64IA-TSO-NEXT:    zext.b a1, a11450; RV64IA-TSO-NEXT:    zext.b a2, a21451; RV64IA-TSO-NEXT:    sllw a4, a4, a01452; RV64IA-TSO-NEXT:    sllw a1, a1, a01453; RV64IA-TSO-NEXT:    sllw a0, a2, a01454; RV64IA-TSO-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=11455; RV64IA-TSO-NEXT:    lr.w a2, (a3)1456; RV64IA-TSO-NEXT:    and a5, a2, a41457; RV64IA-TSO-NEXT:    bne a5, a1, .LBB6_31458; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB6_1 Depth=11459; RV64IA-TSO-NEXT:    xor a5, a2, a01460; RV64IA-TSO-NEXT:    and a5, a5, a41461; RV64IA-TSO-NEXT:    xor a5, a2, a51462; RV64IA-TSO-NEXT:    sc.w a5, a5, (a3)1463; RV64IA-TSO-NEXT:    bnez a5, .LBB6_11464; RV64IA-TSO-NEXT:  .LBB6_3:1465; RV64IA-TSO-NEXT:    ret1466;1467; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i8_acq_rel_acquire:1468; RV64IA-TSO-ZACAS:       # %bb.0:1469; RV64IA-TSO-ZACAS-NEXT:    andi a3, a0, -41470; RV64IA-TSO-ZACAS-NEXT:    slli a0, a0, 31471; RV64IA-TSO-ZACAS-NEXT:    li a4, 2551472; RV64IA-TSO-ZACAS-NEXT:    zext.b a1, a11473; RV64IA-TSO-ZACAS-NEXT:    zext.b a2, a21474; RV64IA-TSO-ZACAS-NEXT:    sllw a4, a4, a01475; RV64IA-TSO-ZACAS-NEXT:    sllw a1, a1, a01476; RV64IA-TSO-ZACAS-NEXT:    sllw a0, a2, a01477; RV64IA-TSO-ZACAS-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=11478; RV64IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)1479; RV64IA-TSO-ZACAS-NEXT:    and a5, a2, a41480; RV64IA-TSO-ZACAS-NEXT:    bne a5, a1, .LBB6_31481; RV64IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB6_1 Depth=11482; RV64IA-TSO-ZACAS-NEXT:    xor a5, a2, a01483; RV64IA-TSO-ZACAS-NEXT:    and a5, a5, a41484; RV64IA-TSO-ZACAS-NEXT:    xor a5, a2, a51485; RV64IA-TSO-ZACAS-NEXT:    sc.w a5, a5, (a3)1486; RV64IA-TSO-ZACAS-NEXT:    bnez a5, .LBB6_11487; RV64IA-TSO-ZACAS-NEXT:  .LBB6_3:1488; RV64IA-TSO-ZACAS-NEXT:    ret1489;1490; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_acq_rel_acquire:1491; RV64IA-TSO-ZABHA:       # %bb.0:1492; RV64IA-TSO-ZABHA-NEXT:    amocas.b a1, a2, (a0)1493; RV64IA-TSO-ZABHA-NEXT:    ret1494  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val acq_rel acquire1495  ret void1496}1497 1498define void @cmpxchg_i8_seq_cst_monotonic(ptr %ptr, i8 %cmp, i8 %val) nounwind {1499; RV32I-LABEL: cmpxchg_i8_seq_cst_monotonic:1500; RV32I:       # %bb.0:1501; RV32I-NEXT:    addi sp, sp, -161502; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1503; RV32I-NEXT:    sb a1, 11(sp)1504; RV32I-NEXT:    addi a1, sp, 111505; RV32I-NEXT:    li a3, 51506; RV32I-NEXT:    li a4, 01507; RV32I-NEXT:    call __atomic_compare_exchange_11508; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1509; RV32I-NEXT:    addi sp, sp, 161510; RV32I-NEXT:    ret1511;1512; RV32IA-LABEL: cmpxchg_i8_seq_cst_monotonic:1513; RV32IA:       # %bb.0:1514; RV32IA-NEXT:    andi a3, a0, -41515; RV32IA-NEXT:    slli a0, a0, 31516; RV32IA-NEXT:    li a4, 2551517; RV32IA-NEXT:    zext.b a1, a11518; RV32IA-NEXT:    zext.b a2, a21519; RV32IA-NEXT:    sll a4, a4, a01520; RV32IA-NEXT:    sll a1, a1, a01521; RV32IA-NEXT:    sll a0, a2, a01522; RV32IA-NEXT:  .LBB7_1: # =>This Inner Loop Header: Depth=11523; RV32IA-NEXT:    lr.w.aqrl a2, (a3)1524; RV32IA-NEXT:    and a5, a2, a41525; RV32IA-NEXT:    bne a5, a1, .LBB7_31526; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB7_1 Depth=11527; RV32IA-NEXT:    xor a5, a2, a01528; RV32IA-NEXT:    and a5, a5, a41529; RV32IA-NEXT:    xor a5, a2, a51530; RV32IA-NEXT:    sc.w.rl a5, a5, (a3)1531; RV32IA-NEXT:    bnez a5, .LBB7_11532; RV32IA-NEXT:  .LBB7_3:1533; RV32IA-NEXT:    ret1534;1535; RV64I-LABEL: cmpxchg_i8_seq_cst_monotonic:1536; RV64I:       # %bb.0:1537; RV64I-NEXT:    addi sp, sp, -161538; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1539; RV64I-NEXT:    sb a1, 7(sp)1540; RV64I-NEXT:    addi a1, sp, 71541; RV64I-NEXT:    li a3, 51542; RV64I-NEXT:    li a4, 01543; RV64I-NEXT:    call __atomic_compare_exchange_11544; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1545; RV64I-NEXT:    addi sp, sp, 161546; RV64I-NEXT:    ret1547;1548; RV64IA-WMO-LABEL: cmpxchg_i8_seq_cst_monotonic:1549; RV64IA-WMO:       # %bb.0:1550; RV64IA-WMO-NEXT:    andi a3, a0, -41551; RV64IA-WMO-NEXT:    slli a0, a0, 31552; RV64IA-WMO-NEXT:    li a4, 2551553; RV64IA-WMO-NEXT:    zext.b a1, a11554; RV64IA-WMO-NEXT:    zext.b a2, a21555; RV64IA-WMO-NEXT:    sllw a4, a4, a01556; RV64IA-WMO-NEXT:    sllw a1, a1, a01557; RV64IA-WMO-NEXT:    sllw a0, a2, a01558; RV64IA-WMO-NEXT:  .LBB7_1: # =>This Inner Loop Header: Depth=11559; RV64IA-WMO-NEXT:    lr.w.aqrl a2, (a3)1560; RV64IA-WMO-NEXT:    and a5, a2, a41561; RV64IA-WMO-NEXT:    bne a5, a1, .LBB7_31562; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB7_1 Depth=11563; RV64IA-WMO-NEXT:    xor a5, a2, a01564; RV64IA-WMO-NEXT:    and a5, a5, a41565; RV64IA-WMO-NEXT:    xor a5, a2, a51566; RV64IA-WMO-NEXT:    sc.w.rl a5, a5, (a3)1567; RV64IA-WMO-NEXT:    bnez a5, .LBB7_11568; RV64IA-WMO-NEXT:  .LBB7_3:1569; RV64IA-WMO-NEXT:    ret1570;1571; RV64IA-ZACAS-LABEL: cmpxchg_i8_seq_cst_monotonic:1572; RV64IA-ZACAS:       # %bb.0:1573; RV64IA-ZACAS-NEXT:    andi a3, a0, -41574; RV64IA-ZACAS-NEXT:    slli a0, a0, 31575; RV64IA-ZACAS-NEXT:    li a4, 2551576; RV64IA-ZACAS-NEXT:    zext.b a1, a11577; RV64IA-ZACAS-NEXT:    zext.b a2, a21578; RV64IA-ZACAS-NEXT:    sllw a4, a4, a01579; RV64IA-ZACAS-NEXT:    sllw a1, a1, a01580; RV64IA-ZACAS-NEXT:    sllw a0, a2, a01581; RV64IA-ZACAS-NEXT:  .LBB7_1: # =>This Inner Loop Header: Depth=11582; RV64IA-ZACAS-NEXT:    lr.w.aqrl a2, (a3)1583; RV64IA-ZACAS-NEXT:    and a5, a2, a41584; RV64IA-ZACAS-NEXT:    bne a5, a1, .LBB7_31585; RV64IA-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB7_1 Depth=11586; RV64IA-ZACAS-NEXT:    xor a5, a2, a01587; RV64IA-ZACAS-NEXT:    and a5, a5, a41588; RV64IA-ZACAS-NEXT:    xor a5, a2, a51589; RV64IA-ZACAS-NEXT:    sc.w.rl a5, a5, (a3)1590; RV64IA-ZACAS-NEXT:    bnez a5, .LBB7_11591; RV64IA-ZACAS-NEXT:  .LBB7_3:1592; RV64IA-ZACAS-NEXT:    ret1593;1594; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_seq_cst_monotonic:1595; RV64IA-WMO-ZABHA:       # %bb.0:1596; RV64IA-WMO-ZABHA-NEXT:    amocas.b.aqrl a1, a2, (a0)1597; RV64IA-WMO-ZABHA-NEXT:    ret1598;1599; RV64IA-TSO-LABEL: cmpxchg_i8_seq_cst_monotonic:1600; RV64IA-TSO:       # %bb.0:1601; RV64IA-TSO-NEXT:    andi a3, a0, -41602; RV64IA-TSO-NEXT:    slli a0, a0, 31603; RV64IA-TSO-NEXT:    li a4, 2551604; RV64IA-TSO-NEXT:    zext.b a1, a11605; RV64IA-TSO-NEXT:    zext.b a2, a21606; RV64IA-TSO-NEXT:    sllw a4, a4, a01607; RV64IA-TSO-NEXT:    sllw a1, a1, a01608; RV64IA-TSO-NEXT:    sllw a0, a2, a01609; RV64IA-TSO-NEXT:  .LBB7_1: # =>This Inner Loop Header: Depth=11610; RV64IA-TSO-NEXT:    lr.w.aqrl a2, (a3)1611; RV64IA-TSO-NEXT:    and a5, a2, a41612; RV64IA-TSO-NEXT:    bne a5, a1, .LBB7_31613; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB7_1 Depth=11614; RV64IA-TSO-NEXT:    xor a5, a2, a01615; RV64IA-TSO-NEXT:    and a5, a5, a41616; RV64IA-TSO-NEXT:    xor a5, a2, a51617; RV64IA-TSO-NEXT:    sc.w.rl a5, a5, (a3)1618; RV64IA-TSO-NEXT:    bnez a5, .LBB7_11619; RV64IA-TSO-NEXT:  .LBB7_3:1620; RV64IA-TSO-NEXT:    ret1621;1622; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_seq_cst_monotonic:1623; RV64IA-TSO-ZABHA:       # %bb.0:1624; RV64IA-TSO-ZABHA-NEXT:    amocas.b a1, a2, (a0)1625; RV64IA-TSO-ZABHA-NEXT:    ret1626  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val seq_cst monotonic1627  ret void1628}1629 1630define void @cmpxchg_i8_seq_cst_acquire(ptr %ptr, i8 %cmp, i8 %val) nounwind {1631; RV32I-LABEL: cmpxchg_i8_seq_cst_acquire:1632; RV32I:       # %bb.0:1633; RV32I-NEXT:    addi sp, sp, -161634; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1635; RV32I-NEXT:    sb a1, 11(sp)1636; RV32I-NEXT:    addi a1, sp, 111637; RV32I-NEXT:    li a3, 51638; RV32I-NEXT:    li a4, 21639; RV32I-NEXT:    call __atomic_compare_exchange_11640; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1641; RV32I-NEXT:    addi sp, sp, 161642; RV32I-NEXT:    ret1643;1644; RV32IA-LABEL: cmpxchg_i8_seq_cst_acquire:1645; RV32IA:       # %bb.0:1646; RV32IA-NEXT:    andi a3, a0, -41647; RV32IA-NEXT:    slli a0, a0, 31648; RV32IA-NEXT:    li a4, 2551649; RV32IA-NEXT:    zext.b a1, a11650; RV32IA-NEXT:    zext.b a2, a21651; RV32IA-NEXT:    sll a4, a4, a01652; RV32IA-NEXT:    sll a1, a1, a01653; RV32IA-NEXT:    sll a0, a2, a01654; RV32IA-NEXT:  .LBB8_1: # =>This Inner Loop Header: Depth=11655; RV32IA-NEXT:    lr.w.aqrl a2, (a3)1656; RV32IA-NEXT:    and a5, a2, a41657; RV32IA-NEXT:    bne a5, a1, .LBB8_31658; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB8_1 Depth=11659; RV32IA-NEXT:    xor a5, a2, a01660; RV32IA-NEXT:    and a5, a5, a41661; RV32IA-NEXT:    xor a5, a2, a51662; RV32IA-NEXT:    sc.w.rl a5, a5, (a3)1663; RV32IA-NEXT:    bnez a5, .LBB8_11664; RV32IA-NEXT:  .LBB8_3:1665; RV32IA-NEXT:    ret1666;1667; RV64I-LABEL: cmpxchg_i8_seq_cst_acquire:1668; RV64I:       # %bb.0:1669; RV64I-NEXT:    addi sp, sp, -161670; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1671; RV64I-NEXT:    sb a1, 7(sp)1672; RV64I-NEXT:    addi a1, sp, 71673; RV64I-NEXT:    li a3, 51674; RV64I-NEXT:    li a4, 21675; RV64I-NEXT:    call __atomic_compare_exchange_11676; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1677; RV64I-NEXT:    addi sp, sp, 161678; RV64I-NEXT:    ret1679;1680; RV64IA-WMO-LABEL: cmpxchg_i8_seq_cst_acquire:1681; RV64IA-WMO:       # %bb.0:1682; RV64IA-WMO-NEXT:    andi a3, a0, -41683; RV64IA-WMO-NEXT:    slli a0, a0, 31684; RV64IA-WMO-NEXT:    li a4, 2551685; RV64IA-WMO-NEXT:    zext.b a1, a11686; RV64IA-WMO-NEXT:    zext.b a2, a21687; RV64IA-WMO-NEXT:    sllw a4, a4, a01688; RV64IA-WMO-NEXT:    sllw a1, a1, a01689; RV64IA-WMO-NEXT:    sllw a0, a2, a01690; RV64IA-WMO-NEXT:  .LBB8_1: # =>This Inner Loop Header: Depth=11691; RV64IA-WMO-NEXT:    lr.w.aqrl a2, (a3)1692; RV64IA-WMO-NEXT:    and a5, a2, a41693; RV64IA-WMO-NEXT:    bne a5, a1, .LBB8_31694; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB8_1 Depth=11695; RV64IA-WMO-NEXT:    xor a5, a2, a01696; RV64IA-WMO-NEXT:    and a5, a5, a41697; RV64IA-WMO-NEXT:    xor a5, a2, a51698; RV64IA-WMO-NEXT:    sc.w.rl a5, a5, (a3)1699; RV64IA-WMO-NEXT:    bnez a5, .LBB8_11700; RV64IA-WMO-NEXT:  .LBB8_3:1701; RV64IA-WMO-NEXT:    ret1702;1703; RV64IA-ZACAS-LABEL: cmpxchg_i8_seq_cst_acquire:1704; RV64IA-ZACAS:       # %bb.0:1705; RV64IA-ZACAS-NEXT:    andi a3, a0, -41706; RV64IA-ZACAS-NEXT:    slli a0, a0, 31707; RV64IA-ZACAS-NEXT:    li a4, 2551708; RV64IA-ZACAS-NEXT:    zext.b a1, a11709; RV64IA-ZACAS-NEXT:    zext.b a2, a21710; RV64IA-ZACAS-NEXT:    sllw a4, a4, a01711; RV64IA-ZACAS-NEXT:    sllw a1, a1, a01712; RV64IA-ZACAS-NEXT:    sllw a0, a2, a01713; RV64IA-ZACAS-NEXT:  .LBB8_1: # =>This Inner Loop Header: Depth=11714; RV64IA-ZACAS-NEXT:    lr.w.aqrl a2, (a3)1715; RV64IA-ZACAS-NEXT:    and a5, a2, a41716; RV64IA-ZACAS-NEXT:    bne a5, a1, .LBB8_31717; RV64IA-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB8_1 Depth=11718; RV64IA-ZACAS-NEXT:    xor a5, a2, a01719; RV64IA-ZACAS-NEXT:    and a5, a5, a41720; RV64IA-ZACAS-NEXT:    xor a5, a2, a51721; RV64IA-ZACAS-NEXT:    sc.w.rl a5, a5, (a3)1722; RV64IA-ZACAS-NEXT:    bnez a5, .LBB8_11723; RV64IA-ZACAS-NEXT:  .LBB8_3:1724; RV64IA-ZACAS-NEXT:    ret1725;1726; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_seq_cst_acquire:1727; RV64IA-WMO-ZABHA:       # %bb.0:1728; RV64IA-WMO-ZABHA-NEXT:    amocas.b.aqrl a1, a2, (a0)1729; RV64IA-WMO-ZABHA-NEXT:    ret1730;1731; RV64IA-TSO-LABEL: cmpxchg_i8_seq_cst_acquire:1732; RV64IA-TSO:       # %bb.0:1733; RV64IA-TSO-NEXT:    andi a3, a0, -41734; RV64IA-TSO-NEXT:    slli a0, a0, 31735; RV64IA-TSO-NEXT:    li a4, 2551736; RV64IA-TSO-NEXT:    zext.b a1, a11737; RV64IA-TSO-NEXT:    zext.b a2, a21738; RV64IA-TSO-NEXT:    sllw a4, a4, a01739; RV64IA-TSO-NEXT:    sllw a1, a1, a01740; RV64IA-TSO-NEXT:    sllw a0, a2, a01741; RV64IA-TSO-NEXT:  .LBB8_1: # =>This Inner Loop Header: Depth=11742; RV64IA-TSO-NEXT:    lr.w.aqrl a2, (a3)1743; RV64IA-TSO-NEXT:    and a5, a2, a41744; RV64IA-TSO-NEXT:    bne a5, a1, .LBB8_31745; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB8_1 Depth=11746; RV64IA-TSO-NEXT:    xor a5, a2, a01747; RV64IA-TSO-NEXT:    and a5, a5, a41748; RV64IA-TSO-NEXT:    xor a5, a2, a51749; RV64IA-TSO-NEXT:    sc.w.rl a5, a5, (a3)1750; RV64IA-TSO-NEXT:    bnez a5, .LBB8_11751; RV64IA-TSO-NEXT:  .LBB8_3:1752; RV64IA-TSO-NEXT:    ret1753;1754; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_seq_cst_acquire:1755; RV64IA-TSO-ZABHA:       # %bb.0:1756; RV64IA-TSO-ZABHA-NEXT:    amocas.b a1, a2, (a0)1757; RV64IA-TSO-ZABHA-NEXT:    ret1758  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val seq_cst acquire1759  ret void1760}1761 1762define void @cmpxchg_i8_seq_cst_seq_cst(ptr %ptr, i8 %cmp, i8 %val) nounwind {1763; RV32I-LABEL: cmpxchg_i8_seq_cst_seq_cst:1764; RV32I:       # %bb.0:1765; RV32I-NEXT:    addi sp, sp, -161766; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1767; RV32I-NEXT:    sb a1, 11(sp)1768; RV32I-NEXT:    addi a1, sp, 111769; RV32I-NEXT:    li a3, 51770; RV32I-NEXT:    li a4, 51771; RV32I-NEXT:    call __atomic_compare_exchange_11772; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1773; RV32I-NEXT:    addi sp, sp, 161774; RV32I-NEXT:    ret1775;1776; RV32IA-LABEL: cmpxchg_i8_seq_cst_seq_cst:1777; RV32IA:       # %bb.0:1778; RV32IA-NEXT:    andi a3, a0, -41779; RV32IA-NEXT:    slli a0, a0, 31780; RV32IA-NEXT:    li a4, 2551781; RV32IA-NEXT:    zext.b a1, a11782; RV32IA-NEXT:    zext.b a2, a21783; RV32IA-NEXT:    sll a4, a4, a01784; RV32IA-NEXT:    sll a1, a1, a01785; RV32IA-NEXT:    sll a0, a2, a01786; RV32IA-NEXT:  .LBB9_1: # =>This Inner Loop Header: Depth=11787; RV32IA-NEXT:    lr.w.aqrl a2, (a3)1788; RV32IA-NEXT:    and a5, a2, a41789; RV32IA-NEXT:    bne a5, a1, .LBB9_31790; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB9_1 Depth=11791; RV32IA-NEXT:    xor a5, a2, a01792; RV32IA-NEXT:    and a5, a5, a41793; RV32IA-NEXT:    xor a5, a2, a51794; RV32IA-NEXT:    sc.w.rl a5, a5, (a3)1795; RV32IA-NEXT:    bnez a5, .LBB9_11796; RV32IA-NEXT:  .LBB9_3:1797; RV32IA-NEXT:    ret1798;1799; RV64I-LABEL: cmpxchg_i8_seq_cst_seq_cst:1800; RV64I:       # %bb.0:1801; RV64I-NEXT:    addi sp, sp, -161802; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1803; RV64I-NEXT:    sb a1, 7(sp)1804; RV64I-NEXT:    addi a1, sp, 71805; RV64I-NEXT:    li a3, 51806; RV64I-NEXT:    li a4, 51807; RV64I-NEXT:    call __atomic_compare_exchange_11808; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1809; RV64I-NEXT:    addi sp, sp, 161810; RV64I-NEXT:    ret1811;1812; RV64IA-WMO-LABEL: cmpxchg_i8_seq_cst_seq_cst:1813; RV64IA-WMO:       # %bb.0:1814; RV64IA-WMO-NEXT:    andi a3, a0, -41815; RV64IA-WMO-NEXT:    slli a0, a0, 31816; RV64IA-WMO-NEXT:    li a4, 2551817; RV64IA-WMO-NEXT:    zext.b a1, a11818; RV64IA-WMO-NEXT:    zext.b a2, a21819; RV64IA-WMO-NEXT:    sllw a4, a4, a01820; RV64IA-WMO-NEXT:    sllw a1, a1, a01821; RV64IA-WMO-NEXT:    sllw a0, a2, a01822; RV64IA-WMO-NEXT:  .LBB9_1: # =>This Inner Loop Header: Depth=11823; RV64IA-WMO-NEXT:    lr.w.aqrl a2, (a3)1824; RV64IA-WMO-NEXT:    and a5, a2, a41825; RV64IA-WMO-NEXT:    bne a5, a1, .LBB9_31826; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB9_1 Depth=11827; RV64IA-WMO-NEXT:    xor a5, a2, a01828; RV64IA-WMO-NEXT:    and a5, a5, a41829; RV64IA-WMO-NEXT:    xor a5, a2, a51830; RV64IA-WMO-NEXT:    sc.w.rl a5, a5, (a3)1831; RV64IA-WMO-NEXT:    bnez a5, .LBB9_11832; RV64IA-WMO-NEXT:  .LBB9_3:1833; RV64IA-WMO-NEXT:    ret1834;1835; RV64IA-ZACAS-LABEL: cmpxchg_i8_seq_cst_seq_cst:1836; RV64IA-ZACAS:       # %bb.0:1837; RV64IA-ZACAS-NEXT:    andi a3, a0, -41838; RV64IA-ZACAS-NEXT:    slli a0, a0, 31839; RV64IA-ZACAS-NEXT:    li a4, 2551840; RV64IA-ZACAS-NEXT:    zext.b a1, a11841; RV64IA-ZACAS-NEXT:    zext.b a2, a21842; RV64IA-ZACAS-NEXT:    sllw a4, a4, a01843; RV64IA-ZACAS-NEXT:    sllw a1, a1, a01844; RV64IA-ZACAS-NEXT:    sllw a0, a2, a01845; RV64IA-ZACAS-NEXT:  .LBB9_1: # =>This Inner Loop Header: Depth=11846; RV64IA-ZACAS-NEXT:    lr.w.aqrl a2, (a3)1847; RV64IA-ZACAS-NEXT:    and a5, a2, a41848; RV64IA-ZACAS-NEXT:    bne a5, a1, .LBB9_31849; RV64IA-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB9_1 Depth=11850; RV64IA-ZACAS-NEXT:    xor a5, a2, a01851; RV64IA-ZACAS-NEXT:    and a5, a5, a41852; RV64IA-ZACAS-NEXT:    xor a5, a2, a51853; RV64IA-ZACAS-NEXT:    sc.w.rl a5, a5, (a3)1854; RV64IA-ZACAS-NEXT:    bnez a5, .LBB9_11855; RV64IA-ZACAS-NEXT:  .LBB9_3:1856; RV64IA-ZACAS-NEXT:    ret1857;1858; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_seq_cst_seq_cst:1859; RV64IA-WMO-ZABHA:       # %bb.0:1860; RV64IA-WMO-ZABHA-NEXT:    fence rw, rw1861; RV64IA-WMO-ZABHA-NEXT:    amocas.b.aqrl a1, a2, (a0)1862; RV64IA-WMO-ZABHA-NEXT:    ret1863;1864; RV64IA-TSO-LABEL: cmpxchg_i8_seq_cst_seq_cst:1865; RV64IA-TSO:       # %bb.0:1866; RV64IA-TSO-NEXT:    andi a3, a0, -41867; RV64IA-TSO-NEXT:    slli a0, a0, 31868; RV64IA-TSO-NEXT:    li a4, 2551869; RV64IA-TSO-NEXT:    zext.b a1, a11870; RV64IA-TSO-NEXT:    zext.b a2, a21871; RV64IA-TSO-NEXT:    sllw a4, a4, a01872; RV64IA-TSO-NEXT:    sllw a1, a1, a01873; RV64IA-TSO-NEXT:    sllw a0, a2, a01874; RV64IA-TSO-NEXT:  .LBB9_1: # =>This Inner Loop Header: Depth=11875; RV64IA-TSO-NEXT:    lr.w.aqrl a2, (a3)1876; RV64IA-TSO-NEXT:    and a5, a2, a41877; RV64IA-TSO-NEXT:    bne a5, a1, .LBB9_31878; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB9_1 Depth=11879; RV64IA-TSO-NEXT:    xor a5, a2, a01880; RV64IA-TSO-NEXT:    and a5, a5, a41881; RV64IA-TSO-NEXT:    xor a5, a2, a51882; RV64IA-TSO-NEXT:    sc.w.rl a5, a5, (a3)1883; RV64IA-TSO-NEXT:    bnez a5, .LBB9_11884; RV64IA-TSO-NEXT:  .LBB9_3:1885; RV64IA-TSO-NEXT:    ret1886;1887; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_seq_cst_seq_cst:1888; RV64IA-TSO-ZABHA:       # %bb.0:1889; RV64IA-TSO-ZABHA-NEXT:    fence rw, rw1890; RV64IA-TSO-ZABHA-NEXT:    amocas.b a1, a2, (a0)1891; RV64IA-TSO-ZABHA-NEXT:    ret1892  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val seq_cst seq_cst1893  ret void1894}1895 1896define void @cmpxchg_i16_monotonic_monotonic(ptr %ptr, i16 %cmp, i16 %val) nounwind {1897; RV32I-LABEL: cmpxchg_i16_monotonic_monotonic:1898; RV32I:       # %bb.0:1899; RV32I-NEXT:    addi sp, sp, -161900; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1901; RV32I-NEXT:    sh a1, 10(sp)1902; RV32I-NEXT:    addi a1, sp, 101903; RV32I-NEXT:    li a3, 01904; RV32I-NEXT:    li a4, 01905; RV32I-NEXT:    call __atomic_compare_exchange_21906; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1907; RV32I-NEXT:    addi sp, sp, 161908; RV32I-NEXT:    ret1909;1910; RV32IA-LABEL: cmpxchg_i16_monotonic_monotonic:1911; RV32IA:       # %bb.0:1912; RV32IA-NEXT:    andi a3, a0, -41913; RV32IA-NEXT:    slli a0, a0, 31914; RV32IA-NEXT:    lui a4, 161915; RV32IA-NEXT:    addi a4, a4, -11916; RV32IA-NEXT:    sll a5, a4, a01917; RV32IA-NEXT:    and a1, a1, a41918; RV32IA-NEXT:    and a2, a2, a41919; RV32IA-NEXT:    sll a1, a1, a01920; RV32IA-NEXT:    sll a0, a2, a01921; RV32IA-NEXT:  .LBB10_1: # =>This Inner Loop Header: Depth=11922; RV32IA-NEXT:    lr.w a2, (a3)1923; RV32IA-NEXT:    and a4, a2, a51924; RV32IA-NEXT:    bne a4, a1, .LBB10_31925; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB10_1 Depth=11926; RV32IA-NEXT:    xor a4, a2, a01927; RV32IA-NEXT:    and a4, a4, a51928; RV32IA-NEXT:    xor a4, a2, a41929; RV32IA-NEXT:    sc.w a4, a4, (a3)1930; RV32IA-NEXT:    bnez a4, .LBB10_11931; RV32IA-NEXT:  .LBB10_3:1932; RV32IA-NEXT:    ret1933;1934; RV64I-LABEL: cmpxchg_i16_monotonic_monotonic:1935; RV64I:       # %bb.0:1936; RV64I-NEXT:    addi sp, sp, -161937; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1938; RV64I-NEXT:    sh a1, 6(sp)1939; RV64I-NEXT:    addi a1, sp, 61940; RV64I-NEXT:    li a3, 01941; RV64I-NEXT:    li a4, 01942; RV64I-NEXT:    call __atomic_compare_exchange_21943; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1944; RV64I-NEXT:    addi sp, sp, 161945; RV64I-NEXT:    ret1946;1947; RV64IA-WMO-LABEL: cmpxchg_i16_monotonic_monotonic:1948; RV64IA-WMO:       # %bb.0:1949; RV64IA-WMO-NEXT:    andi a3, a0, -41950; RV64IA-WMO-NEXT:    slli a0, a0, 31951; RV64IA-WMO-NEXT:    lui a4, 161952; RV64IA-WMO-NEXT:    addi a4, a4, -11953; RV64IA-WMO-NEXT:    sllw a5, a4, a01954; RV64IA-WMO-NEXT:    and a1, a1, a41955; RV64IA-WMO-NEXT:    and a2, a2, a41956; RV64IA-WMO-NEXT:    sllw a1, a1, a01957; RV64IA-WMO-NEXT:    sllw a0, a2, a01958; RV64IA-WMO-NEXT:  .LBB10_1: # =>This Inner Loop Header: Depth=11959; RV64IA-WMO-NEXT:    lr.w a2, (a3)1960; RV64IA-WMO-NEXT:    and a4, a2, a51961; RV64IA-WMO-NEXT:    bne a4, a1, .LBB10_31962; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB10_1 Depth=11963; RV64IA-WMO-NEXT:    xor a4, a2, a01964; RV64IA-WMO-NEXT:    and a4, a4, a51965; RV64IA-WMO-NEXT:    xor a4, a2, a41966; RV64IA-WMO-NEXT:    sc.w a4, a4, (a3)1967; RV64IA-WMO-NEXT:    bnez a4, .LBB10_11968; RV64IA-WMO-NEXT:  .LBB10_3:1969; RV64IA-WMO-NEXT:    ret1970;1971; RV64IA-ZACAS-LABEL: cmpxchg_i16_monotonic_monotonic:1972; RV64IA-ZACAS:       # %bb.0:1973; RV64IA-ZACAS-NEXT:    andi a3, a0, -41974; RV64IA-ZACAS-NEXT:    slli a0, a0, 31975; RV64IA-ZACAS-NEXT:    lui a4, 161976; RV64IA-ZACAS-NEXT:    addi a4, a4, -11977; RV64IA-ZACAS-NEXT:    sllw a5, a4, a01978; RV64IA-ZACAS-NEXT:    and a1, a1, a41979; RV64IA-ZACAS-NEXT:    and a2, a2, a41980; RV64IA-ZACAS-NEXT:    sllw a1, a1, a01981; RV64IA-ZACAS-NEXT:    sllw a0, a2, a01982; RV64IA-ZACAS-NEXT:  .LBB10_1: # =>This Inner Loop Header: Depth=11983; RV64IA-ZACAS-NEXT:    lr.w a2, (a3)1984; RV64IA-ZACAS-NEXT:    and a4, a2, a51985; RV64IA-ZACAS-NEXT:    bne a4, a1, .LBB10_31986; RV64IA-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB10_1 Depth=11987; RV64IA-ZACAS-NEXT:    xor a4, a2, a01988; RV64IA-ZACAS-NEXT:    and a4, a4, a51989; RV64IA-ZACAS-NEXT:    xor a4, a2, a41990; RV64IA-ZACAS-NEXT:    sc.w a4, a4, (a3)1991; RV64IA-ZACAS-NEXT:    bnez a4, .LBB10_11992; RV64IA-ZACAS-NEXT:  .LBB10_3:1993; RV64IA-ZACAS-NEXT:    ret1994;1995; RV64IA-ZABHA-LABEL: cmpxchg_i16_monotonic_monotonic:1996; RV64IA-ZABHA:       # %bb.0:1997; RV64IA-ZABHA-NEXT:    amocas.h a1, a2, (a0)1998; RV64IA-ZABHA-NEXT:    ret1999;2000; RV64IA-TSO-LABEL: cmpxchg_i16_monotonic_monotonic:2001; RV64IA-TSO:       # %bb.0:2002; RV64IA-TSO-NEXT:    andi a3, a0, -42003; RV64IA-TSO-NEXT:    slli a0, a0, 32004; RV64IA-TSO-NEXT:    lui a4, 162005; RV64IA-TSO-NEXT:    addi a4, a4, -12006; RV64IA-TSO-NEXT:    sllw a5, a4, a02007; RV64IA-TSO-NEXT:    and a1, a1, a42008; RV64IA-TSO-NEXT:    and a2, a2, a42009; RV64IA-TSO-NEXT:    sllw a1, a1, a02010; RV64IA-TSO-NEXT:    sllw a0, a2, a02011; RV64IA-TSO-NEXT:  .LBB10_1: # =>This Inner Loop Header: Depth=12012; RV64IA-TSO-NEXT:    lr.w a2, (a3)2013; RV64IA-TSO-NEXT:    and a4, a2, a52014; RV64IA-TSO-NEXT:    bne a4, a1, .LBB10_32015; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB10_1 Depth=12016; RV64IA-TSO-NEXT:    xor a4, a2, a02017; RV64IA-TSO-NEXT:    and a4, a4, a52018; RV64IA-TSO-NEXT:    xor a4, a2, a42019; RV64IA-TSO-NEXT:    sc.w a4, a4, (a3)2020; RV64IA-TSO-NEXT:    bnez a4, .LBB10_12021; RV64IA-TSO-NEXT:  .LBB10_3:2022; RV64IA-TSO-NEXT:    ret2023  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val monotonic monotonic2024  ret void2025}2026 2027define void @cmpxchg_i16_acquire_monotonic(ptr %ptr, i16 %cmp, i16 %val) nounwind {2028; RV32I-LABEL: cmpxchg_i16_acquire_monotonic:2029; RV32I:       # %bb.0:2030; RV32I-NEXT:    addi sp, sp, -162031; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2032; RV32I-NEXT:    sh a1, 10(sp)2033; RV32I-NEXT:    addi a1, sp, 102034; RV32I-NEXT:    li a3, 22035; RV32I-NEXT:    li a4, 02036; RV32I-NEXT:    call __atomic_compare_exchange_22037; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2038; RV32I-NEXT:    addi sp, sp, 162039; RV32I-NEXT:    ret2040;2041; RV32IA-WMO-LABEL: cmpxchg_i16_acquire_monotonic:2042; RV32IA-WMO:       # %bb.0:2043; RV32IA-WMO-NEXT:    andi a3, a0, -42044; RV32IA-WMO-NEXT:    slli a0, a0, 32045; RV32IA-WMO-NEXT:    lui a4, 162046; RV32IA-WMO-NEXT:    addi a4, a4, -12047; RV32IA-WMO-NEXT:    sll a5, a4, a02048; RV32IA-WMO-NEXT:    and a1, a1, a42049; RV32IA-WMO-NEXT:    and a2, a2, a42050; RV32IA-WMO-NEXT:    sll a1, a1, a02051; RV32IA-WMO-NEXT:    sll a0, a2, a02052; RV32IA-WMO-NEXT:  .LBB11_1: # =>This Inner Loop Header: Depth=12053; RV32IA-WMO-NEXT:    lr.w.aq a2, (a3)2054; RV32IA-WMO-NEXT:    and a4, a2, a52055; RV32IA-WMO-NEXT:    bne a4, a1, .LBB11_32056; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB11_1 Depth=12057; RV32IA-WMO-NEXT:    xor a4, a2, a02058; RV32IA-WMO-NEXT:    and a4, a4, a52059; RV32IA-WMO-NEXT:    xor a4, a2, a42060; RV32IA-WMO-NEXT:    sc.w a4, a4, (a3)2061; RV32IA-WMO-NEXT:    bnez a4, .LBB11_12062; RV32IA-WMO-NEXT:  .LBB11_3:2063; RV32IA-WMO-NEXT:    ret2064;2065; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i16_acquire_monotonic:2066; RV32IA-WMO-ZACAS:       # %bb.0:2067; RV32IA-WMO-ZACAS-NEXT:    andi a3, a0, -42068; RV32IA-WMO-ZACAS-NEXT:    slli a0, a0, 32069; RV32IA-WMO-ZACAS-NEXT:    lui a4, 162070; RV32IA-WMO-ZACAS-NEXT:    addi a4, a4, -12071; RV32IA-WMO-ZACAS-NEXT:    sll a5, a4, a02072; RV32IA-WMO-ZACAS-NEXT:    and a1, a1, a42073; RV32IA-WMO-ZACAS-NEXT:    and a2, a2, a42074; RV32IA-WMO-ZACAS-NEXT:    sll a1, a1, a02075; RV32IA-WMO-ZACAS-NEXT:    sll a0, a2, a02076; RV32IA-WMO-ZACAS-NEXT:  .LBB11_1: # =>This Inner Loop Header: Depth=12077; RV32IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)2078; RV32IA-WMO-ZACAS-NEXT:    and a4, a2, a52079; RV32IA-WMO-ZACAS-NEXT:    bne a4, a1, .LBB11_32080; RV32IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB11_1 Depth=12081; RV32IA-WMO-ZACAS-NEXT:    xor a4, a2, a02082; RV32IA-WMO-ZACAS-NEXT:    and a4, a4, a52083; RV32IA-WMO-ZACAS-NEXT:    xor a4, a2, a42084; RV32IA-WMO-ZACAS-NEXT:    sc.w a4, a4, (a3)2085; RV32IA-WMO-ZACAS-NEXT:    bnez a4, .LBB11_12086; RV32IA-WMO-ZACAS-NEXT:  .LBB11_3:2087; RV32IA-WMO-ZACAS-NEXT:    ret2088;2089; RV32IA-TSO-LABEL: cmpxchg_i16_acquire_monotonic:2090; RV32IA-TSO:       # %bb.0:2091; RV32IA-TSO-NEXT:    andi a3, a0, -42092; RV32IA-TSO-NEXT:    slli a0, a0, 32093; RV32IA-TSO-NEXT:    lui a4, 162094; RV32IA-TSO-NEXT:    addi a4, a4, -12095; RV32IA-TSO-NEXT:    sll a5, a4, a02096; RV32IA-TSO-NEXT:    and a1, a1, a42097; RV32IA-TSO-NEXT:    and a2, a2, a42098; RV32IA-TSO-NEXT:    sll a1, a1, a02099; RV32IA-TSO-NEXT:    sll a0, a2, a02100; RV32IA-TSO-NEXT:  .LBB11_1: # =>This Inner Loop Header: Depth=12101; RV32IA-TSO-NEXT:    lr.w a2, (a3)2102; RV32IA-TSO-NEXT:    and a4, a2, a52103; RV32IA-TSO-NEXT:    bne a4, a1, .LBB11_32104; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB11_1 Depth=12105; RV32IA-TSO-NEXT:    xor a4, a2, a02106; RV32IA-TSO-NEXT:    and a4, a4, a52107; RV32IA-TSO-NEXT:    xor a4, a2, a42108; RV32IA-TSO-NEXT:    sc.w a4, a4, (a3)2109; RV32IA-TSO-NEXT:    bnez a4, .LBB11_12110; RV32IA-TSO-NEXT:  .LBB11_3:2111; RV32IA-TSO-NEXT:    ret2112;2113; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i16_acquire_monotonic:2114; RV32IA-TSO-ZACAS:       # %bb.0:2115; RV32IA-TSO-ZACAS-NEXT:    andi a3, a0, -42116; RV32IA-TSO-ZACAS-NEXT:    slli a0, a0, 32117; RV32IA-TSO-ZACAS-NEXT:    lui a4, 162118; RV32IA-TSO-ZACAS-NEXT:    addi a4, a4, -12119; RV32IA-TSO-ZACAS-NEXT:    sll a5, a4, a02120; RV32IA-TSO-ZACAS-NEXT:    and a1, a1, a42121; RV32IA-TSO-ZACAS-NEXT:    and a2, a2, a42122; RV32IA-TSO-ZACAS-NEXT:    sll a1, a1, a02123; RV32IA-TSO-ZACAS-NEXT:    sll a0, a2, a02124; RV32IA-TSO-ZACAS-NEXT:  .LBB11_1: # =>This Inner Loop Header: Depth=12125; RV32IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)2126; RV32IA-TSO-ZACAS-NEXT:    and a4, a2, a52127; RV32IA-TSO-ZACAS-NEXT:    bne a4, a1, .LBB11_32128; RV32IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB11_1 Depth=12129; RV32IA-TSO-ZACAS-NEXT:    xor a4, a2, a02130; RV32IA-TSO-ZACAS-NEXT:    and a4, a4, a52131; RV32IA-TSO-ZACAS-NEXT:    xor a4, a2, a42132; RV32IA-TSO-ZACAS-NEXT:    sc.w a4, a4, (a3)2133; RV32IA-TSO-ZACAS-NEXT:    bnez a4, .LBB11_12134; RV32IA-TSO-ZACAS-NEXT:  .LBB11_3:2135; RV32IA-TSO-ZACAS-NEXT:    ret2136;2137; RV64I-LABEL: cmpxchg_i16_acquire_monotonic:2138; RV64I:       # %bb.0:2139; RV64I-NEXT:    addi sp, sp, -162140; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2141; RV64I-NEXT:    sh a1, 6(sp)2142; RV64I-NEXT:    addi a1, sp, 62143; RV64I-NEXT:    li a3, 22144; RV64I-NEXT:    li a4, 02145; RV64I-NEXT:    call __atomic_compare_exchange_22146; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2147; RV64I-NEXT:    addi sp, sp, 162148; RV64I-NEXT:    ret2149;2150; RV64IA-WMO-LABEL: cmpxchg_i16_acquire_monotonic:2151; RV64IA-WMO:       # %bb.0:2152; RV64IA-WMO-NEXT:    andi a3, a0, -42153; RV64IA-WMO-NEXT:    slli a0, a0, 32154; RV64IA-WMO-NEXT:    lui a4, 162155; RV64IA-WMO-NEXT:    addi a4, a4, -12156; RV64IA-WMO-NEXT:    sllw a5, a4, a02157; RV64IA-WMO-NEXT:    and a1, a1, a42158; RV64IA-WMO-NEXT:    and a2, a2, a42159; RV64IA-WMO-NEXT:    sllw a1, a1, a02160; RV64IA-WMO-NEXT:    sllw a0, a2, a02161; RV64IA-WMO-NEXT:  .LBB11_1: # =>This Inner Loop Header: Depth=12162; RV64IA-WMO-NEXT:    lr.w.aq a2, (a3)2163; RV64IA-WMO-NEXT:    and a4, a2, a52164; RV64IA-WMO-NEXT:    bne a4, a1, .LBB11_32165; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB11_1 Depth=12166; RV64IA-WMO-NEXT:    xor a4, a2, a02167; RV64IA-WMO-NEXT:    and a4, a4, a52168; RV64IA-WMO-NEXT:    xor a4, a2, a42169; RV64IA-WMO-NEXT:    sc.w a4, a4, (a3)2170; RV64IA-WMO-NEXT:    bnez a4, .LBB11_12171; RV64IA-WMO-NEXT:  .LBB11_3:2172; RV64IA-WMO-NEXT:    ret2173;2174; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i16_acquire_monotonic:2175; RV64IA-WMO-ZACAS:       # %bb.0:2176; RV64IA-WMO-ZACAS-NEXT:    andi a3, a0, -42177; RV64IA-WMO-ZACAS-NEXT:    slli a0, a0, 32178; RV64IA-WMO-ZACAS-NEXT:    lui a4, 162179; RV64IA-WMO-ZACAS-NEXT:    addi a4, a4, -12180; RV64IA-WMO-ZACAS-NEXT:    sllw a5, a4, a02181; RV64IA-WMO-ZACAS-NEXT:    and a1, a1, a42182; RV64IA-WMO-ZACAS-NEXT:    and a2, a2, a42183; RV64IA-WMO-ZACAS-NEXT:    sllw a1, a1, a02184; RV64IA-WMO-ZACAS-NEXT:    sllw a0, a2, a02185; RV64IA-WMO-ZACAS-NEXT:  .LBB11_1: # =>This Inner Loop Header: Depth=12186; RV64IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)2187; RV64IA-WMO-ZACAS-NEXT:    and a4, a2, a52188; RV64IA-WMO-ZACAS-NEXT:    bne a4, a1, .LBB11_32189; RV64IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB11_1 Depth=12190; RV64IA-WMO-ZACAS-NEXT:    xor a4, a2, a02191; RV64IA-WMO-ZACAS-NEXT:    and a4, a4, a52192; RV64IA-WMO-ZACAS-NEXT:    xor a4, a2, a42193; RV64IA-WMO-ZACAS-NEXT:    sc.w a4, a4, (a3)2194; RV64IA-WMO-ZACAS-NEXT:    bnez a4, .LBB11_12195; RV64IA-WMO-ZACAS-NEXT:  .LBB11_3:2196; RV64IA-WMO-ZACAS-NEXT:    ret2197;2198; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_acquire_monotonic:2199; RV64IA-WMO-ZABHA:       # %bb.0:2200; RV64IA-WMO-ZABHA-NEXT:    amocas.h.aq a1, a2, (a0)2201; RV64IA-WMO-ZABHA-NEXT:    ret2202;2203; RV64IA-TSO-LABEL: cmpxchg_i16_acquire_monotonic:2204; RV64IA-TSO:       # %bb.0:2205; RV64IA-TSO-NEXT:    andi a3, a0, -42206; RV64IA-TSO-NEXT:    slli a0, a0, 32207; RV64IA-TSO-NEXT:    lui a4, 162208; RV64IA-TSO-NEXT:    addi a4, a4, -12209; RV64IA-TSO-NEXT:    sllw a5, a4, a02210; RV64IA-TSO-NEXT:    and a1, a1, a42211; RV64IA-TSO-NEXT:    and a2, a2, a42212; RV64IA-TSO-NEXT:    sllw a1, a1, a02213; RV64IA-TSO-NEXT:    sllw a0, a2, a02214; RV64IA-TSO-NEXT:  .LBB11_1: # =>This Inner Loop Header: Depth=12215; RV64IA-TSO-NEXT:    lr.w a2, (a3)2216; RV64IA-TSO-NEXT:    and a4, a2, a52217; RV64IA-TSO-NEXT:    bne a4, a1, .LBB11_32218; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB11_1 Depth=12219; RV64IA-TSO-NEXT:    xor a4, a2, a02220; RV64IA-TSO-NEXT:    and a4, a4, a52221; RV64IA-TSO-NEXT:    xor a4, a2, a42222; RV64IA-TSO-NEXT:    sc.w a4, a4, (a3)2223; RV64IA-TSO-NEXT:    bnez a4, .LBB11_12224; RV64IA-TSO-NEXT:  .LBB11_3:2225; RV64IA-TSO-NEXT:    ret2226;2227; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i16_acquire_monotonic:2228; RV64IA-TSO-ZACAS:       # %bb.0:2229; RV64IA-TSO-ZACAS-NEXT:    andi a3, a0, -42230; RV64IA-TSO-ZACAS-NEXT:    slli a0, a0, 32231; RV64IA-TSO-ZACAS-NEXT:    lui a4, 162232; RV64IA-TSO-ZACAS-NEXT:    addi a4, a4, -12233; RV64IA-TSO-ZACAS-NEXT:    sllw a5, a4, a02234; RV64IA-TSO-ZACAS-NEXT:    and a1, a1, a42235; RV64IA-TSO-ZACAS-NEXT:    and a2, a2, a42236; RV64IA-TSO-ZACAS-NEXT:    sllw a1, a1, a02237; RV64IA-TSO-ZACAS-NEXT:    sllw a0, a2, a02238; RV64IA-TSO-ZACAS-NEXT:  .LBB11_1: # =>This Inner Loop Header: Depth=12239; RV64IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)2240; RV64IA-TSO-ZACAS-NEXT:    and a4, a2, a52241; RV64IA-TSO-ZACAS-NEXT:    bne a4, a1, .LBB11_32242; RV64IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB11_1 Depth=12243; RV64IA-TSO-ZACAS-NEXT:    xor a4, a2, a02244; RV64IA-TSO-ZACAS-NEXT:    and a4, a4, a52245; RV64IA-TSO-ZACAS-NEXT:    xor a4, a2, a42246; RV64IA-TSO-ZACAS-NEXT:    sc.w a4, a4, (a3)2247; RV64IA-TSO-ZACAS-NEXT:    bnez a4, .LBB11_12248; RV64IA-TSO-ZACAS-NEXT:  .LBB11_3:2249; RV64IA-TSO-ZACAS-NEXT:    ret2250;2251; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_acquire_monotonic:2252; RV64IA-TSO-ZABHA:       # %bb.0:2253; RV64IA-TSO-ZABHA-NEXT:    amocas.h a1, a2, (a0)2254; RV64IA-TSO-ZABHA-NEXT:    ret2255  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val acquire monotonic2256  ret void2257}2258 2259define void @cmpxchg_i16_acquire_acquire(ptr %ptr, i16 %cmp, i16 %val) nounwind {2260; RV32I-LABEL: cmpxchg_i16_acquire_acquire:2261; RV32I:       # %bb.0:2262; RV32I-NEXT:    addi sp, sp, -162263; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2264; RV32I-NEXT:    sh a1, 10(sp)2265; RV32I-NEXT:    addi a1, sp, 102266; RV32I-NEXT:    li a3, 22267; RV32I-NEXT:    li a4, 22268; RV32I-NEXT:    call __atomic_compare_exchange_22269; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2270; RV32I-NEXT:    addi sp, sp, 162271; RV32I-NEXT:    ret2272;2273; RV32IA-WMO-LABEL: cmpxchg_i16_acquire_acquire:2274; RV32IA-WMO:       # %bb.0:2275; RV32IA-WMO-NEXT:    andi a3, a0, -42276; RV32IA-WMO-NEXT:    slli a0, a0, 32277; RV32IA-WMO-NEXT:    lui a4, 162278; RV32IA-WMO-NEXT:    addi a4, a4, -12279; RV32IA-WMO-NEXT:    sll a5, a4, a02280; RV32IA-WMO-NEXT:    and a1, a1, a42281; RV32IA-WMO-NEXT:    and a2, a2, a42282; RV32IA-WMO-NEXT:    sll a1, a1, a02283; RV32IA-WMO-NEXT:    sll a0, a2, a02284; RV32IA-WMO-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=12285; RV32IA-WMO-NEXT:    lr.w.aq a2, (a3)2286; RV32IA-WMO-NEXT:    and a4, a2, a52287; RV32IA-WMO-NEXT:    bne a4, a1, .LBB12_32288; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB12_1 Depth=12289; RV32IA-WMO-NEXT:    xor a4, a2, a02290; RV32IA-WMO-NEXT:    and a4, a4, a52291; RV32IA-WMO-NEXT:    xor a4, a2, a42292; RV32IA-WMO-NEXT:    sc.w a4, a4, (a3)2293; RV32IA-WMO-NEXT:    bnez a4, .LBB12_12294; RV32IA-WMO-NEXT:  .LBB12_3:2295; RV32IA-WMO-NEXT:    ret2296;2297; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i16_acquire_acquire:2298; RV32IA-WMO-ZACAS:       # %bb.0:2299; RV32IA-WMO-ZACAS-NEXT:    andi a3, a0, -42300; RV32IA-WMO-ZACAS-NEXT:    slli a0, a0, 32301; RV32IA-WMO-ZACAS-NEXT:    lui a4, 162302; RV32IA-WMO-ZACAS-NEXT:    addi a4, a4, -12303; RV32IA-WMO-ZACAS-NEXT:    sll a5, a4, a02304; RV32IA-WMO-ZACAS-NEXT:    and a1, a1, a42305; RV32IA-WMO-ZACAS-NEXT:    and a2, a2, a42306; RV32IA-WMO-ZACAS-NEXT:    sll a1, a1, a02307; RV32IA-WMO-ZACAS-NEXT:    sll a0, a2, a02308; RV32IA-WMO-ZACAS-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=12309; RV32IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)2310; RV32IA-WMO-ZACAS-NEXT:    and a4, a2, a52311; RV32IA-WMO-ZACAS-NEXT:    bne a4, a1, .LBB12_32312; RV32IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB12_1 Depth=12313; RV32IA-WMO-ZACAS-NEXT:    xor a4, a2, a02314; RV32IA-WMO-ZACAS-NEXT:    and a4, a4, a52315; RV32IA-WMO-ZACAS-NEXT:    xor a4, a2, a42316; RV32IA-WMO-ZACAS-NEXT:    sc.w a4, a4, (a3)2317; RV32IA-WMO-ZACAS-NEXT:    bnez a4, .LBB12_12318; RV32IA-WMO-ZACAS-NEXT:  .LBB12_3:2319; RV32IA-WMO-ZACAS-NEXT:    ret2320;2321; RV32IA-TSO-LABEL: cmpxchg_i16_acquire_acquire:2322; RV32IA-TSO:       # %bb.0:2323; RV32IA-TSO-NEXT:    andi a3, a0, -42324; RV32IA-TSO-NEXT:    slli a0, a0, 32325; RV32IA-TSO-NEXT:    lui a4, 162326; RV32IA-TSO-NEXT:    addi a4, a4, -12327; RV32IA-TSO-NEXT:    sll a5, a4, a02328; RV32IA-TSO-NEXT:    and a1, a1, a42329; RV32IA-TSO-NEXT:    and a2, a2, a42330; RV32IA-TSO-NEXT:    sll a1, a1, a02331; RV32IA-TSO-NEXT:    sll a0, a2, a02332; RV32IA-TSO-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=12333; RV32IA-TSO-NEXT:    lr.w a2, (a3)2334; RV32IA-TSO-NEXT:    and a4, a2, a52335; RV32IA-TSO-NEXT:    bne a4, a1, .LBB12_32336; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB12_1 Depth=12337; RV32IA-TSO-NEXT:    xor a4, a2, a02338; RV32IA-TSO-NEXT:    and a4, a4, a52339; RV32IA-TSO-NEXT:    xor a4, a2, a42340; RV32IA-TSO-NEXT:    sc.w a4, a4, (a3)2341; RV32IA-TSO-NEXT:    bnez a4, .LBB12_12342; RV32IA-TSO-NEXT:  .LBB12_3:2343; RV32IA-TSO-NEXT:    ret2344;2345; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i16_acquire_acquire:2346; RV32IA-TSO-ZACAS:       # %bb.0:2347; RV32IA-TSO-ZACAS-NEXT:    andi a3, a0, -42348; RV32IA-TSO-ZACAS-NEXT:    slli a0, a0, 32349; RV32IA-TSO-ZACAS-NEXT:    lui a4, 162350; RV32IA-TSO-ZACAS-NEXT:    addi a4, a4, -12351; RV32IA-TSO-ZACAS-NEXT:    sll a5, a4, a02352; RV32IA-TSO-ZACAS-NEXT:    and a1, a1, a42353; RV32IA-TSO-ZACAS-NEXT:    and a2, a2, a42354; RV32IA-TSO-ZACAS-NEXT:    sll a1, a1, a02355; RV32IA-TSO-ZACAS-NEXT:    sll a0, a2, a02356; RV32IA-TSO-ZACAS-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=12357; RV32IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)2358; RV32IA-TSO-ZACAS-NEXT:    and a4, a2, a52359; RV32IA-TSO-ZACAS-NEXT:    bne a4, a1, .LBB12_32360; RV32IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB12_1 Depth=12361; RV32IA-TSO-ZACAS-NEXT:    xor a4, a2, a02362; RV32IA-TSO-ZACAS-NEXT:    and a4, a4, a52363; RV32IA-TSO-ZACAS-NEXT:    xor a4, a2, a42364; RV32IA-TSO-ZACAS-NEXT:    sc.w a4, a4, (a3)2365; RV32IA-TSO-ZACAS-NEXT:    bnez a4, .LBB12_12366; RV32IA-TSO-ZACAS-NEXT:  .LBB12_3:2367; RV32IA-TSO-ZACAS-NEXT:    ret2368;2369; RV64I-LABEL: cmpxchg_i16_acquire_acquire:2370; RV64I:       # %bb.0:2371; RV64I-NEXT:    addi sp, sp, -162372; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2373; RV64I-NEXT:    sh a1, 6(sp)2374; RV64I-NEXT:    addi a1, sp, 62375; RV64I-NEXT:    li a3, 22376; RV64I-NEXT:    li a4, 22377; RV64I-NEXT:    call __atomic_compare_exchange_22378; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2379; RV64I-NEXT:    addi sp, sp, 162380; RV64I-NEXT:    ret2381;2382; RV64IA-WMO-LABEL: cmpxchg_i16_acquire_acquire:2383; RV64IA-WMO:       # %bb.0:2384; RV64IA-WMO-NEXT:    andi a3, a0, -42385; RV64IA-WMO-NEXT:    slli a0, a0, 32386; RV64IA-WMO-NEXT:    lui a4, 162387; RV64IA-WMO-NEXT:    addi a4, a4, -12388; RV64IA-WMO-NEXT:    sllw a5, a4, a02389; RV64IA-WMO-NEXT:    and a1, a1, a42390; RV64IA-WMO-NEXT:    and a2, a2, a42391; RV64IA-WMO-NEXT:    sllw a1, a1, a02392; RV64IA-WMO-NEXT:    sllw a0, a2, a02393; RV64IA-WMO-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=12394; RV64IA-WMO-NEXT:    lr.w.aq a2, (a3)2395; RV64IA-WMO-NEXT:    and a4, a2, a52396; RV64IA-WMO-NEXT:    bne a4, a1, .LBB12_32397; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB12_1 Depth=12398; RV64IA-WMO-NEXT:    xor a4, a2, a02399; RV64IA-WMO-NEXT:    and a4, a4, a52400; RV64IA-WMO-NEXT:    xor a4, a2, a42401; RV64IA-WMO-NEXT:    sc.w a4, a4, (a3)2402; RV64IA-WMO-NEXT:    bnez a4, .LBB12_12403; RV64IA-WMO-NEXT:  .LBB12_3:2404; RV64IA-WMO-NEXT:    ret2405;2406; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i16_acquire_acquire:2407; RV64IA-WMO-ZACAS:       # %bb.0:2408; RV64IA-WMO-ZACAS-NEXT:    andi a3, a0, -42409; RV64IA-WMO-ZACAS-NEXT:    slli a0, a0, 32410; RV64IA-WMO-ZACAS-NEXT:    lui a4, 162411; RV64IA-WMO-ZACAS-NEXT:    addi a4, a4, -12412; RV64IA-WMO-ZACAS-NEXT:    sllw a5, a4, a02413; RV64IA-WMO-ZACAS-NEXT:    and a1, a1, a42414; RV64IA-WMO-ZACAS-NEXT:    and a2, a2, a42415; RV64IA-WMO-ZACAS-NEXT:    sllw a1, a1, a02416; RV64IA-WMO-ZACAS-NEXT:    sllw a0, a2, a02417; RV64IA-WMO-ZACAS-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=12418; RV64IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)2419; RV64IA-WMO-ZACAS-NEXT:    and a4, a2, a52420; RV64IA-WMO-ZACAS-NEXT:    bne a4, a1, .LBB12_32421; RV64IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB12_1 Depth=12422; RV64IA-WMO-ZACAS-NEXT:    xor a4, a2, a02423; RV64IA-WMO-ZACAS-NEXT:    and a4, a4, a52424; RV64IA-WMO-ZACAS-NEXT:    xor a4, a2, a42425; RV64IA-WMO-ZACAS-NEXT:    sc.w a4, a4, (a3)2426; RV64IA-WMO-ZACAS-NEXT:    bnez a4, .LBB12_12427; RV64IA-WMO-ZACAS-NEXT:  .LBB12_3:2428; RV64IA-WMO-ZACAS-NEXT:    ret2429;2430; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_acquire_acquire:2431; RV64IA-WMO-ZABHA:       # %bb.0:2432; RV64IA-WMO-ZABHA-NEXT:    amocas.h.aq a1, a2, (a0)2433; RV64IA-WMO-ZABHA-NEXT:    ret2434;2435; RV64IA-TSO-LABEL: cmpxchg_i16_acquire_acquire:2436; RV64IA-TSO:       # %bb.0:2437; RV64IA-TSO-NEXT:    andi a3, a0, -42438; RV64IA-TSO-NEXT:    slli a0, a0, 32439; RV64IA-TSO-NEXT:    lui a4, 162440; RV64IA-TSO-NEXT:    addi a4, a4, -12441; RV64IA-TSO-NEXT:    sllw a5, a4, a02442; RV64IA-TSO-NEXT:    and a1, a1, a42443; RV64IA-TSO-NEXT:    and a2, a2, a42444; RV64IA-TSO-NEXT:    sllw a1, a1, a02445; RV64IA-TSO-NEXT:    sllw a0, a2, a02446; RV64IA-TSO-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=12447; RV64IA-TSO-NEXT:    lr.w a2, (a3)2448; RV64IA-TSO-NEXT:    and a4, a2, a52449; RV64IA-TSO-NEXT:    bne a4, a1, .LBB12_32450; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB12_1 Depth=12451; RV64IA-TSO-NEXT:    xor a4, a2, a02452; RV64IA-TSO-NEXT:    and a4, a4, a52453; RV64IA-TSO-NEXT:    xor a4, a2, a42454; RV64IA-TSO-NEXT:    sc.w a4, a4, (a3)2455; RV64IA-TSO-NEXT:    bnez a4, .LBB12_12456; RV64IA-TSO-NEXT:  .LBB12_3:2457; RV64IA-TSO-NEXT:    ret2458;2459; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i16_acquire_acquire:2460; RV64IA-TSO-ZACAS:       # %bb.0:2461; RV64IA-TSO-ZACAS-NEXT:    andi a3, a0, -42462; RV64IA-TSO-ZACAS-NEXT:    slli a0, a0, 32463; RV64IA-TSO-ZACAS-NEXT:    lui a4, 162464; RV64IA-TSO-ZACAS-NEXT:    addi a4, a4, -12465; RV64IA-TSO-ZACAS-NEXT:    sllw a5, a4, a02466; RV64IA-TSO-ZACAS-NEXT:    and a1, a1, a42467; RV64IA-TSO-ZACAS-NEXT:    and a2, a2, a42468; RV64IA-TSO-ZACAS-NEXT:    sllw a1, a1, a02469; RV64IA-TSO-ZACAS-NEXT:    sllw a0, a2, a02470; RV64IA-TSO-ZACAS-NEXT:  .LBB12_1: # =>This Inner Loop Header: Depth=12471; RV64IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)2472; RV64IA-TSO-ZACAS-NEXT:    and a4, a2, a52473; RV64IA-TSO-ZACAS-NEXT:    bne a4, a1, .LBB12_32474; RV64IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB12_1 Depth=12475; RV64IA-TSO-ZACAS-NEXT:    xor a4, a2, a02476; RV64IA-TSO-ZACAS-NEXT:    and a4, a4, a52477; RV64IA-TSO-ZACAS-NEXT:    xor a4, a2, a42478; RV64IA-TSO-ZACAS-NEXT:    sc.w a4, a4, (a3)2479; RV64IA-TSO-ZACAS-NEXT:    bnez a4, .LBB12_12480; RV64IA-TSO-ZACAS-NEXT:  .LBB12_3:2481; RV64IA-TSO-ZACAS-NEXT:    ret2482;2483; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_acquire_acquire:2484; RV64IA-TSO-ZABHA:       # %bb.0:2485; RV64IA-TSO-ZABHA-NEXT:    amocas.h a1, a2, (a0)2486; RV64IA-TSO-ZABHA-NEXT:    ret2487  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val acquire acquire2488  ret void2489}2490 2491define void @cmpxchg_i16_release_monotonic(ptr %ptr, i16 %cmp, i16 %val) nounwind {2492; RV32I-LABEL: cmpxchg_i16_release_monotonic:2493; RV32I:       # %bb.0:2494; RV32I-NEXT:    addi sp, sp, -162495; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2496; RV32I-NEXT:    sh a1, 10(sp)2497; RV32I-NEXT:    addi a1, sp, 102498; RV32I-NEXT:    li a3, 32499; RV32I-NEXT:    li a4, 02500; RV32I-NEXT:    call __atomic_compare_exchange_22501; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2502; RV32I-NEXT:    addi sp, sp, 162503; RV32I-NEXT:    ret2504;2505; RV32IA-WMO-LABEL: cmpxchg_i16_release_monotonic:2506; RV32IA-WMO:       # %bb.0:2507; RV32IA-WMO-NEXT:    andi a3, a0, -42508; RV32IA-WMO-NEXT:    slli a0, a0, 32509; RV32IA-WMO-NEXT:    lui a4, 162510; RV32IA-WMO-NEXT:    addi a4, a4, -12511; RV32IA-WMO-NEXT:    sll a5, a4, a02512; RV32IA-WMO-NEXT:    and a1, a1, a42513; RV32IA-WMO-NEXT:    and a2, a2, a42514; RV32IA-WMO-NEXT:    sll a1, a1, a02515; RV32IA-WMO-NEXT:    sll a0, a2, a02516; RV32IA-WMO-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=12517; RV32IA-WMO-NEXT:    lr.w a2, (a3)2518; RV32IA-WMO-NEXT:    and a4, a2, a52519; RV32IA-WMO-NEXT:    bne a4, a1, .LBB13_32520; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB13_1 Depth=12521; RV32IA-WMO-NEXT:    xor a4, a2, a02522; RV32IA-WMO-NEXT:    and a4, a4, a52523; RV32IA-WMO-NEXT:    xor a4, a2, a42524; RV32IA-WMO-NEXT:    sc.w.rl a4, a4, (a3)2525; RV32IA-WMO-NEXT:    bnez a4, .LBB13_12526; RV32IA-WMO-NEXT:  .LBB13_3:2527; RV32IA-WMO-NEXT:    ret2528;2529; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i16_release_monotonic:2530; RV32IA-WMO-ZACAS:       # %bb.0:2531; RV32IA-WMO-ZACAS-NEXT:    andi a3, a0, -42532; RV32IA-WMO-ZACAS-NEXT:    slli a0, a0, 32533; RV32IA-WMO-ZACAS-NEXT:    lui a4, 162534; RV32IA-WMO-ZACAS-NEXT:    addi a4, a4, -12535; RV32IA-WMO-ZACAS-NEXT:    sll a5, a4, a02536; RV32IA-WMO-ZACAS-NEXT:    and a1, a1, a42537; RV32IA-WMO-ZACAS-NEXT:    and a2, a2, a42538; RV32IA-WMO-ZACAS-NEXT:    sll a1, a1, a02539; RV32IA-WMO-ZACAS-NEXT:    sll a0, a2, a02540; RV32IA-WMO-ZACAS-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=12541; RV32IA-WMO-ZACAS-NEXT:    lr.w a2, (a3)2542; RV32IA-WMO-ZACAS-NEXT:    and a4, a2, a52543; RV32IA-WMO-ZACAS-NEXT:    bne a4, a1, .LBB13_32544; RV32IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB13_1 Depth=12545; RV32IA-WMO-ZACAS-NEXT:    xor a4, a2, a02546; RV32IA-WMO-ZACAS-NEXT:    and a4, a4, a52547; RV32IA-WMO-ZACAS-NEXT:    xor a4, a2, a42548; RV32IA-WMO-ZACAS-NEXT:    sc.w.rl a4, a4, (a3)2549; RV32IA-WMO-ZACAS-NEXT:    bnez a4, .LBB13_12550; RV32IA-WMO-ZACAS-NEXT:  .LBB13_3:2551; RV32IA-WMO-ZACAS-NEXT:    ret2552;2553; RV32IA-TSO-LABEL: cmpxchg_i16_release_monotonic:2554; RV32IA-TSO:       # %bb.0:2555; RV32IA-TSO-NEXT:    andi a3, a0, -42556; RV32IA-TSO-NEXT:    slli a0, a0, 32557; RV32IA-TSO-NEXT:    lui a4, 162558; RV32IA-TSO-NEXT:    addi a4, a4, -12559; RV32IA-TSO-NEXT:    sll a5, a4, a02560; RV32IA-TSO-NEXT:    and a1, a1, a42561; RV32IA-TSO-NEXT:    and a2, a2, a42562; RV32IA-TSO-NEXT:    sll a1, a1, a02563; RV32IA-TSO-NEXT:    sll a0, a2, a02564; RV32IA-TSO-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=12565; RV32IA-TSO-NEXT:    lr.w a2, (a3)2566; RV32IA-TSO-NEXT:    and a4, a2, a52567; RV32IA-TSO-NEXT:    bne a4, a1, .LBB13_32568; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB13_1 Depth=12569; RV32IA-TSO-NEXT:    xor a4, a2, a02570; RV32IA-TSO-NEXT:    and a4, a4, a52571; RV32IA-TSO-NEXT:    xor a4, a2, a42572; RV32IA-TSO-NEXT:    sc.w a4, a4, (a3)2573; RV32IA-TSO-NEXT:    bnez a4, .LBB13_12574; RV32IA-TSO-NEXT:  .LBB13_3:2575; RV32IA-TSO-NEXT:    ret2576;2577; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i16_release_monotonic:2578; RV32IA-TSO-ZACAS:       # %bb.0:2579; RV32IA-TSO-ZACAS-NEXT:    andi a3, a0, -42580; RV32IA-TSO-ZACAS-NEXT:    slli a0, a0, 32581; RV32IA-TSO-ZACAS-NEXT:    lui a4, 162582; RV32IA-TSO-ZACAS-NEXT:    addi a4, a4, -12583; RV32IA-TSO-ZACAS-NEXT:    sll a5, a4, a02584; RV32IA-TSO-ZACAS-NEXT:    and a1, a1, a42585; RV32IA-TSO-ZACAS-NEXT:    and a2, a2, a42586; RV32IA-TSO-ZACAS-NEXT:    sll a1, a1, a02587; RV32IA-TSO-ZACAS-NEXT:    sll a0, a2, a02588; RV32IA-TSO-ZACAS-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=12589; RV32IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)2590; RV32IA-TSO-ZACAS-NEXT:    and a4, a2, a52591; RV32IA-TSO-ZACAS-NEXT:    bne a4, a1, .LBB13_32592; RV32IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB13_1 Depth=12593; RV32IA-TSO-ZACAS-NEXT:    xor a4, a2, a02594; RV32IA-TSO-ZACAS-NEXT:    and a4, a4, a52595; RV32IA-TSO-ZACAS-NEXT:    xor a4, a2, a42596; RV32IA-TSO-ZACAS-NEXT:    sc.w a4, a4, (a3)2597; RV32IA-TSO-ZACAS-NEXT:    bnez a4, .LBB13_12598; RV32IA-TSO-ZACAS-NEXT:  .LBB13_3:2599; RV32IA-TSO-ZACAS-NEXT:    ret2600;2601; RV64I-LABEL: cmpxchg_i16_release_monotonic:2602; RV64I:       # %bb.0:2603; RV64I-NEXT:    addi sp, sp, -162604; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2605; RV64I-NEXT:    sh a1, 6(sp)2606; RV64I-NEXT:    addi a1, sp, 62607; RV64I-NEXT:    li a3, 32608; RV64I-NEXT:    li a4, 02609; RV64I-NEXT:    call __atomic_compare_exchange_22610; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2611; RV64I-NEXT:    addi sp, sp, 162612; RV64I-NEXT:    ret2613;2614; RV64IA-WMO-LABEL: cmpxchg_i16_release_monotonic:2615; RV64IA-WMO:       # %bb.0:2616; RV64IA-WMO-NEXT:    andi a3, a0, -42617; RV64IA-WMO-NEXT:    slli a0, a0, 32618; RV64IA-WMO-NEXT:    lui a4, 162619; RV64IA-WMO-NEXT:    addi a4, a4, -12620; RV64IA-WMO-NEXT:    sllw a5, a4, a02621; RV64IA-WMO-NEXT:    and a1, a1, a42622; RV64IA-WMO-NEXT:    and a2, a2, a42623; RV64IA-WMO-NEXT:    sllw a1, a1, a02624; RV64IA-WMO-NEXT:    sllw a0, a2, a02625; RV64IA-WMO-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=12626; RV64IA-WMO-NEXT:    lr.w a2, (a3)2627; RV64IA-WMO-NEXT:    and a4, a2, a52628; RV64IA-WMO-NEXT:    bne a4, a1, .LBB13_32629; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB13_1 Depth=12630; RV64IA-WMO-NEXT:    xor a4, a2, a02631; RV64IA-WMO-NEXT:    and a4, a4, a52632; RV64IA-WMO-NEXT:    xor a4, a2, a42633; RV64IA-WMO-NEXT:    sc.w.rl a4, a4, (a3)2634; RV64IA-WMO-NEXT:    bnez a4, .LBB13_12635; RV64IA-WMO-NEXT:  .LBB13_3:2636; RV64IA-WMO-NEXT:    ret2637;2638; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i16_release_monotonic:2639; RV64IA-WMO-ZACAS:       # %bb.0:2640; RV64IA-WMO-ZACAS-NEXT:    andi a3, a0, -42641; RV64IA-WMO-ZACAS-NEXT:    slli a0, a0, 32642; RV64IA-WMO-ZACAS-NEXT:    lui a4, 162643; RV64IA-WMO-ZACAS-NEXT:    addi a4, a4, -12644; RV64IA-WMO-ZACAS-NEXT:    sllw a5, a4, a02645; RV64IA-WMO-ZACAS-NEXT:    and a1, a1, a42646; RV64IA-WMO-ZACAS-NEXT:    and a2, a2, a42647; RV64IA-WMO-ZACAS-NEXT:    sllw a1, a1, a02648; RV64IA-WMO-ZACAS-NEXT:    sllw a0, a2, a02649; RV64IA-WMO-ZACAS-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=12650; RV64IA-WMO-ZACAS-NEXT:    lr.w a2, (a3)2651; RV64IA-WMO-ZACAS-NEXT:    and a4, a2, a52652; RV64IA-WMO-ZACAS-NEXT:    bne a4, a1, .LBB13_32653; RV64IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB13_1 Depth=12654; RV64IA-WMO-ZACAS-NEXT:    xor a4, a2, a02655; RV64IA-WMO-ZACAS-NEXT:    and a4, a4, a52656; RV64IA-WMO-ZACAS-NEXT:    xor a4, a2, a42657; RV64IA-WMO-ZACAS-NEXT:    sc.w.rl a4, a4, (a3)2658; RV64IA-WMO-ZACAS-NEXT:    bnez a4, .LBB13_12659; RV64IA-WMO-ZACAS-NEXT:  .LBB13_3:2660; RV64IA-WMO-ZACAS-NEXT:    ret2661;2662; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_release_monotonic:2663; RV64IA-WMO-ZABHA:       # %bb.0:2664; RV64IA-WMO-ZABHA-NEXT:    amocas.h.rl a1, a2, (a0)2665; RV64IA-WMO-ZABHA-NEXT:    ret2666;2667; RV64IA-TSO-LABEL: cmpxchg_i16_release_monotonic:2668; RV64IA-TSO:       # %bb.0:2669; RV64IA-TSO-NEXT:    andi a3, a0, -42670; RV64IA-TSO-NEXT:    slli a0, a0, 32671; RV64IA-TSO-NEXT:    lui a4, 162672; RV64IA-TSO-NEXT:    addi a4, a4, -12673; RV64IA-TSO-NEXT:    sllw a5, a4, a02674; RV64IA-TSO-NEXT:    and a1, a1, a42675; RV64IA-TSO-NEXT:    and a2, a2, a42676; RV64IA-TSO-NEXT:    sllw a1, a1, a02677; RV64IA-TSO-NEXT:    sllw a0, a2, a02678; RV64IA-TSO-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=12679; RV64IA-TSO-NEXT:    lr.w a2, (a3)2680; RV64IA-TSO-NEXT:    and a4, a2, a52681; RV64IA-TSO-NEXT:    bne a4, a1, .LBB13_32682; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB13_1 Depth=12683; RV64IA-TSO-NEXT:    xor a4, a2, a02684; RV64IA-TSO-NEXT:    and a4, a4, a52685; RV64IA-TSO-NEXT:    xor a4, a2, a42686; RV64IA-TSO-NEXT:    sc.w a4, a4, (a3)2687; RV64IA-TSO-NEXT:    bnez a4, .LBB13_12688; RV64IA-TSO-NEXT:  .LBB13_3:2689; RV64IA-TSO-NEXT:    ret2690;2691; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i16_release_monotonic:2692; RV64IA-TSO-ZACAS:       # %bb.0:2693; RV64IA-TSO-ZACAS-NEXT:    andi a3, a0, -42694; RV64IA-TSO-ZACAS-NEXT:    slli a0, a0, 32695; RV64IA-TSO-ZACAS-NEXT:    lui a4, 162696; RV64IA-TSO-ZACAS-NEXT:    addi a4, a4, -12697; RV64IA-TSO-ZACAS-NEXT:    sllw a5, a4, a02698; RV64IA-TSO-ZACAS-NEXT:    and a1, a1, a42699; RV64IA-TSO-ZACAS-NEXT:    and a2, a2, a42700; RV64IA-TSO-ZACAS-NEXT:    sllw a1, a1, a02701; RV64IA-TSO-ZACAS-NEXT:    sllw a0, a2, a02702; RV64IA-TSO-ZACAS-NEXT:  .LBB13_1: # =>This Inner Loop Header: Depth=12703; RV64IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)2704; RV64IA-TSO-ZACAS-NEXT:    and a4, a2, a52705; RV64IA-TSO-ZACAS-NEXT:    bne a4, a1, .LBB13_32706; RV64IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB13_1 Depth=12707; RV64IA-TSO-ZACAS-NEXT:    xor a4, a2, a02708; RV64IA-TSO-ZACAS-NEXT:    and a4, a4, a52709; RV64IA-TSO-ZACAS-NEXT:    xor a4, a2, a42710; RV64IA-TSO-ZACAS-NEXT:    sc.w a4, a4, (a3)2711; RV64IA-TSO-ZACAS-NEXT:    bnez a4, .LBB13_12712; RV64IA-TSO-ZACAS-NEXT:  .LBB13_3:2713; RV64IA-TSO-ZACAS-NEXT:    ret2714;2715; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_release_monotonic:2716; RV64IA-TSO-ZABHA:       # %bb.0:2717; RV64IA-TSO-ZABHA-NEXT:    amocas.h a1, a2, (a0)2718; RV64IA-TSO-ZABHA-NEXT:    ret2719  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val release monotonic2720  ret void2721}2722 2723define void @cmpxchg_i16_release_acquire(ptr %ptr, i16 %cmp, i16 %val) nounwind {2724; RV32I-LABEL: cmpxchg_i16_release_acquire:2725; RV32I:       # %bb.0:2726; RV32I-NEXT:    addi sp, sp, -162727; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2728; RV32I-NEXT:    sh a1, 10(sp)2729; RV32I-NEXT:    addi a1, sp, 102730; RV32I-NEXT:    li a3, 32731; RV32I-NEXT:    li a4, 22732; RV32I-NEXT:    call __atomic_compare_exchange_22733; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2734; RV32I-NEXT:    addi sp, sp, 162735; RV32I-NEXT:    ret2736;2737; RV32IA-WMO-LABEL: cmpxchg_i16_release_acquire:2738; RV32IA-WMO:       # %bb.0:2739; RV32IA-WMO-NEXT:    andi a3, a0, -42740; RV32IA-WMO-NEXT:    slli a0, a0, 32741; RV32IA-WMO-NEXT:    lui a4, 162742; RV32IA-WMO-NEXT:    addi a4, a4, -12743; RV32IA-WMO-NEXT:    sll a5, a4, a02744; RV32IA-WMO-NEXT:    and a1, a1, a42745; RV32IA-WMO-NEXT:    and a2, a2, a42746; RV32IA-WMO-NEXT:    sll a1, a1, a02747; RV32IA-WMO-NEXT:    sll a0, a2, a02748; RV32IA-WMO-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=12749; RV32IA-WMO-NEXT:    lr.w.aq a2, (a3)2750; RV32IA-WMO-NEXT:    and a4, a2, a52751; RV32IA-WMO-NEXT:    bne a4, a1, .LBB14_32752; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB14_1 Depth=12753; RV32IA-WMO-NEXT:    xor a4, a2, a02754; RV32IA-WMO-NEXT:    and a4, a4, a52755; RV32IA-WMO-NEXT:    xor a4, a2, a42756; RV32IA-WMO-NEXT:    sc.w.rl a4, a4, (a3)2757; RV32IA-WMO-NEXT:    bnez a4, .LBB14_12758; RV32IA-WMO-NEXT:  .LBB14_3:2759; RV32IA-WMO-NEXT:    ret2760;2761; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i16_release_acquire:2762; RV32IA-WMO-ZACAS:       # %bb.0:2763; RV32IA-WMO-ZACAS-NEXT:    andi a3, a0, -42764; RV32IA-WMO-ZACAS-NEXT:    slli a0, a0, 32765; RV32IA-WMO-ZACAS-NEXT:    lui a4, 162766; RV32IA-WMO-ZACAS-NEXT:    addi a4, a4, -12767; RV32IA-WMO-ZACAS-NEXT:    sll a5, a4, a02768; RV32IA-WMO-ZACAS-NEXT:    and a1, a1, a42769; RV32IA-WMO-ZACAS-NEXT:    and a2, a2, a42770; RV32IA-WMO-ZACAS-NEXT:    sll a1, a1, a02771; RV32IA-WMO-ZACAS-NEXT:    sll a0, a2, a02772; RV32IA-WMO-ZACAS-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=12773; RV32IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)2774; RV32IA-WMO-ZACAS-NEXT:    and a4, a2, a52775; RV32IA-WMO-ZACAS-NEXT:    bne a4, a1, .LBB14_32776; RV32IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB14_1 Depth=12777; RV32IA-WMO-ZACAS-NEXT:    xor a4, a2, a02778; RV32IA-WMO-ZACAS-NEXT:    and a4, a4, a52779; RV32IA-WMO-ZACAS-NEXT:    xor a4, a2, a42780; RV32IA-WMO-ZACAS-NEXT:    sc.w.rl a4, a4, (a3)2781; RV32IA-WMO-ZACAS-NEXT:    bnez a4, .LBB14_12782; RV32IA-WMO-ZACAS-NEXT:  .LBB14_3:2783; RV32IA-WMO-ZACAS-NEXT:    ret2784;2785; RV32IA-TSO-LABEL: cmpxchg_i16_release_acquire:2786; RV32IA-TSO:       # %bb.0:2787; RV32IA-TSO-NEXT:    andi a3, a0, -42788; RV32IA-TSO-NEXT:    slli a0, a0, 32789; RV32IA-TSO-NEXT:    lui a4, 162790; RV32IA-TSO-NEXT:    addi a4, a4, -12791; RV32IA-TSO-NEXT:    sll a5, a4, a02792; RV32IA-TSO-NEXT:    and a1, a1, a42793; RV32IA-TSO-NEXT:    and a2, a2, a42794; RV32IA-TSO-NEXT:    sll a1, a1, a02795; RV32IA-TSO-NEXT:    sll a0, a2, a02796; RV32IA-TSO-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=12797; RV32IA-TSO-NEXT:    lr.w a2, (a3)2798; RV32IA-TSO-NEXT:    and a4, a2, a52799; RV32IA-TSO-NEXT:    bne a4, a1, .LBB14_32800; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB14_1 Depth=12801; RV32IA-TSO-NEXT:    xor a4, a2, a02802; RV32IA-TSO-NEXT:    and a4, a4, a52803; RV32IA-TSO-NEXT:    xor a4, a2, a42804; RV32IA-TSO-NEXT:    sc.w a4, a4, (a3)2805; RV32IA-TSO-NEXT:    bnez a4, .LBB14_12806; RV32IA-TSO-NEXT:  .LBB14_3:2807; RV32IA-TSO-NEXT:    ret2808;2809; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i16_release_acquire:2810; RV32IA-TSO-ZACAS:       # %bb.0:2811; RV32IA-TSO-ZACAS-NEXT:    andi a3, a0, -42812; RV32IA-TSO-ZACAS-NEXT:    slli a0, a0, 32813; RV32IA-TSO-ZACAS-NEXT:    lui a4, 162814; RV32IA-TSO-ZACAS-NEXT:    addi a4, a4, -12815; RV32IA-TSO-ZACAS-NEXT:    sll a5, a4, a02816; RV32IA-TSO-ZACAS-NEXT:    and a1, a1, a42817; RV32IA-TSO-ZACAS-NEXT:    and a2, a2, a42818; RV32IA-TSO-ZACAS-NEXT:    sll a1, a1, a02819; RV32IA-TSO-ZACAS-NEXT:    sll a0, a2, a02820; RV32IA-TSO-ZACAS-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=12821; RV32IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)2822; RV32IA-TSO-ZACAS-NEXT:    and a4, a2, a52823; RV32IA-TSO-ZACAS-NEXT:    bne a4, a1, .LBB14_32824; RV32IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB14_1 Depth=12825; RV32IA-TSO-ZACAS-NEXT:    xor a4, a2, a02826; RV32IA-TSO-ZACAS-NEXT:    and a4, a4, a52827; RV32IA-TSO-ZACAS-NEXT:    xor a4, a2, a42828; RV32IA-TSO-ZACAS-NEXT:    sc.w a4, a4, (a3)2829; RV32IA-TSO-ZACAS-NEXT:    bnez a4, .LBB14_12830; RV32IA-TSO-ZACAS-NEXT:  .LBB14_3:2831; RV32IA-TSO-ZACAS-NEXT:    ret2832;2833; RV64I-LABEL: cmpxchg_i16_release_acquire:2834; RV64I:       # %bb.0:2835; RV64I-NEXT:    addi sp, sp, -162836; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2837; RV64I-NEXT:    sh a1, 6(sp)2838; RV64I-NEXT:    addi a1, sp, 62839; RV64I-NEXT:    li a3, 32840; RV64I-NEXT:    li a4, 22841; RV64I-NEXT:    call __atomic_compare_exchange_22842; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2843; RV64I-NEXT:    addi sp, sp, 162844; RV64I-NEXT:    ret2845;2846; RV64IA-WMO-LABEL: cmpxchg_i16_release_acquire:2847; RV64IA-WMO:       # %bb.0:2848; RV64IA-WMO-NEXT:    andi a3, a0, -42849; RV64IA-WMO-NEXT:    slli a0, a0, 32850; RV64IA-WMO-NEXT:    lui a4, 162851; RV64IA-WMO-NEXT:    addi a4, a4, -12852; RV64IA-WMO-NEXT:    sllw a5, a4, a02853; RV64IA-WMO-NEXT:    and a1, a1, a42854; RV64IA-WMO-NEXT:    and a2, a2, a42855; RV64IA-WMO-NEXT:    sllw a1, a1, a02856; RV64IA-WMO-NEXT:    sllw a0, a2, a02857; RV64IA-WMO-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=12858; RV64IA-WMO-NEXT:    lr.w.aq a2, (a3)2859; RV64IA-WMO-NEXT:    and a4, a2, a52860; RV64IA-WMO-NEXT:    bne a4, a1, .LBB14_32861; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB14_1 Depth=12862; RV64IA-WMO-NEXT:    xor a4, a2, a02863; RV64IA-WMO-NEXT:    and a4, a4, a52864; RV64IA-WMO-NEXT:    xor a4, a2, a42865; RV64IA-WMO-NEXT:    sc.w.rl a4, a4, (a3)2866; RV64IA-WMO-NEXT:    bnez a4, .LBB14_12867; RV64IA-WMO-NEXT:  .LBB14_3:2868; RV64IA-WMO-NEXT:    ret2869;2870; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i16_release_acquire:2871; RV64IA-WMO-ZACAS:       # %bb.0:2872; RV64IA-WMO-ZACAS-NEXT:    andi a3, a0, -42873; RV64IA-WMO-ZACAS-NEXT:    slli a0, a0, 32874; RV64IA-WMO-ZACAS-NEXT:    lui a4, 162875; RV64IA-WMO-ZACAS-NEXT:    addi a4, a4, -12876; RV64IA-WMO-ZACAS-NEXT:    sllw a5, a4, a02877; RV64IA-WMO-ZACAS-NEXT:    and a1, a1, a42878; RV64IA-WMO-ZACAS-NEXT:    and a2, a2, a42879; RV64IA-WMO-ZACAS-NEXT:    sllw a1, a1, a02880; RV64IA-WMO-ZACAS-NEXT:    sllw a0, a2, a02881; RV64IA-WMO-ZACAS-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=12882; RV64IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)2883; RV64IA-WMO-ZACAS-NEXT:    and a4, a2, a52884; RV64IA-WMO-ZACAS-NEXT:    bne a4, a1, .LBB14_32885; RV64IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB14_1 Depth=12886; RV64IA-WMO-ZACAS-NEXT:    xor a4, a2, a02887; RV64IA-WMO-ZACAS-NEXT:    and a4, a4, a52888; RV64IA-WMO-ZACAS-NEXT:    xor a4, a2, a42889; RV64IA-WMO-ZACAS-NEXT:    sc.w.rl a4, a4, (a3)2890; RV64IA-WMO-ZACAS-NEXT:    bnez a4, .LBB14_12891; RV64IA-WMO-ZACAS-NEXT:  .LBB14_3:2892; RV64IA-WMO-ZACAS-NEXT:    ret2893;2894; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_release_acquire:2895; RV64IA-WMO-ZABHA:       # %bb.0:2896; RV64IA-WMO-ZABHA-NEXT:    amocas.h.aqrl a1, a2, (a0)2897; RV64IA-WMO-ZABHA-NEXT:    ret2898;2899; RV64IA-TSO-LABEL: cmpxchg_i16_release_acquire:2900; RV64IA-TSO:       # %bb.0:2901; RV64IA-TSO-NEXT:    andi a3, a0, -42902; RV64IA-TSO-NEXT:    slli a0, a0, 32903; RV64IA-TSO-NEXT:    lui a4, 162904; RV64IA-TSO-NEXT:    addi a4, a4, -12905; RV64IA-TSO-NEXT:    sllw a5, a4, a02906; RV64IA-TSO-NEXT:    and a1, a1, a42907; RV64IA-TSO-NEXT:    and a2, a2, a42908; RV64IA-TSO-NEXT:    sllw a1, a1, a02909; RV64IA-TSO-NEXT:    sllw a0, a2, a02910; RV64IA-TSO-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=12911; RV64IA-TSO-NEXT:    lr.w a2, (a3)2912; RV64IA-TSO-NEXT:    and a4, a2, a52913; RV64IA-TSO-NEXT:    bne a4, a1, .LBB14_32914; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB14_1 Depth=12915; RV64IA-TSO-NEXT:    xor a4, a2, a02916; RV64IA-TSO-NEXT:    and a4, a4, a52917; RV64IA-TSO-NEXT:    xor a4, a2, a42918; RV64IA-TSO-NEXT:    sc.w a4, a4, (a3)2919; RV64IA-TSO-NEXT:    bnez a4, .LBB14_12920; RV64IA-TSO-NEXT:  .LBB14_3:2921; RV64IA-TSO-NEXT:    ret2922;2923; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i16_release_acquire:2924; RV64IA-TSO-ZACAS:       # %bb.0:2925; RV64IA-TSO-ZACAS-NEXT:    andi a3, a0, -42926; RV64IA-TSO-ZACAS-NEXT:    slli a0, a0, 32927; RV64IA-TSO-ZACAS-NEXT:    lui a4, 162928; RV64IA-TSO-ZACAS-NEXT:    addi a4, a4, -12929; RV64IA-TSO-ZACAS-NEXT:    sllw a5, a4, a02930; RV64IA-TSO-ZACAS-NEXT:    and a1, a1, a42931; RV64IA-TSO-ZACAS-NEXT:    and a2, a2, a42932; RV64IA-TSO-ZACAS-NEXT:    sllw a1, a1, a02933; RV64IA-TSO-ZACAS-NEXT:    sllw a0, a2, a02934; RV64IA-TSO-ZACAS-NEXT:  .LBB14_1: # =>This Inner Loop Header: Depth=12935; RV64IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)2936; RV64IA-TSO-ZACAS-NEXT:    and a4, a2, a52937; RV64IA-TSO-ZACAS-NEXT:    bne a4, a1, .LBB14_32938; RV64IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB14_1 Depth=12939; RV64IA-TSO-ZACAS-NEXT:    xor a4, a2, a02940; RV64IA-TSO-ZACAS-NEXT:    and a4, a4, a52941; RV64IA-TSO-ZACAS-NEXT:    xor a4, a2, a42942; RV64IA-TSO-ZACAS-NEXT:    sc.w a4, a4, (a3)2943; RV64IA-TSO-ZACAS-NEXT:    bnez a4, .LBB14_12944; RV64IA-TSO-ZACAS-NEXT:  .LBB14_3:2945; RV64IA-TSO-ZACAS-NEXT:    ret2946;2947; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_release_acquire:2948; RV64IA-TSO-ZABHA:       # %bb.0:2949; RV64IA-TSO-ZABHA-NEXT:    amocas.h a1, a2, (a0)2950; RV64IA-TSO-ZABHA-NEXT:    ret2951  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val release acquire2952  ret void2953}2954 2955define void @cmpxchg_i16_acq_rel_monotonic(ptr %ptr, i16 %cmp, i16 %val) nounwind {2956; RV32I-LABEL: cmpxchg_i16_acq_rel_monotonic:2957; RV32I:       # %bb.0:2958; RV32I-NEXT:    addi sp, sp, -162959; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2960; RV32I-NEXT:    sh a1, 10(sp)2961; RV32I-NEXT:    addi a1, sp, 102962; RV32I-NEXT:    li a3, 42963; RV32I-NEXT:    li a4, 02964; RV32I-NEXT:    call __atomic_compare_exchange_22965; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2966; RV32I-NEXT:    addi sp, sp, 162967; RV32I-NEXT:    ret2968;2969; RV32IA-WMO-LABEL: cmpxchg_i16_acq_rel_monotonic:2970; RV32IA-WMO:       # %bb.0:2971; RV32IA-WMO-NEXT:    andi a3, a0, -42972; RV32IA-WMO-NEXT:    slli a0, a0, 32973; RV32IA-WMO-NEXT:    lui a4, 162974; RV32IA-WMO-NEXT:    addi a4, a4, -12975; RV32IA-WMO-NEXT:    sll a5, a4, a02976; RV32IA-WMO-NEXT:    and a1, a1, a42977; RV32IA-WMO-NEXT:    and a2, a2, a42978; RV32IA-WMO-NEXT:    sll a1, a1, a02979; RV32IA-WMO-NEXT:    sll a0, a2, a02980; RV32IA-WMO-NEXT:  .LBB15_1: # =>This Inner Loop Header: Depth=12981; RV32IA-WMO-NEXT:    lr.w.aq a2, (a3)2982; RV32IA-WMO-NEXT:    and a4, a2, a52983; RV32IA-WMO-NEXT:    bne a4, a1, .LBB15_32984; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB15_1 Depth=12985; RV32IA-WMO-NEXT:    xor a4, a2, a02986; RV32IA-WMO-NEXT:    and a4, a4, a52987; RV32IA-WMO-NEXT:    xor a4, a2, a42988; RV32IA-WMO-NEXT:    sc.w.rl a4, a4, (a3)2989; RV32IA-WMO-NEXT:    bnez a4, .LBB15_12990; RV32IA-WMO-NEXT:  .LBB15_3:2991; RV32IA-WMO-NEXT:    ret2992;2993; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i16_acq_rel_monotonic:2994; RV32IA-WMO-ZACAS:       # %bb.0:2995; RV32IA-WMO-ZACAS-NEXT:    andi a3, a0, -42996; RV32IA-WMO-ZACAS-NEXT:    slli a0, a0, 32997; RV32IA-WMO-ZACAS-NEXT:    lui a4, 162998; RV32IA-WMO-ZACAS-NEXT:    addi a4, a4, -12999; RV32IA-WMO-ZACAS-NEXT:    sll a5, a4, a03000; RV32IA-WMO-ZACAS-NEXT:    and a1, a1, a43001; RV32IA-WMO-ZACAS-NEXT:    and a2, a2, a43002; RV32IA-WMO-ZACAS-NEXT:    sll a1, a1, a03003; RV32IA-WMO-ZACAS-NEXT:    sll a0, a2, a03004; RV32IA-WMO-ZACAS-NEXT:  .LBB15_1: # =>This Inner Loop Header: Depth=13005; RV32IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)3006; RV32IA-WMO-ZACAS-NEXT:    and a4, a2, a53007; RV32IA-WMO-ZACAS-NEXT:    bne a4, a1, .LBB15_33008; RV32IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB15_1 Depth=13009; RV32IA-WMO-ZACAS-NEXT:    xor a4, a2, a03010; RV32IA-WMO-ZACAS-NEXT:    and a4, a4, a53011; RV32IA-WMO-ZACAS-NEXT:    xor a4, a2, a43012; RV32IA-WMO-ZACAS-NEXT:    sc.w.rl a4, a4, (a3)3013; RV32IA-WMO-ZACAS-NEXT:    bnez a4, .LBB15_13014; RV32IA-WMO-ZACAS-NEXT:  .LBB15_3:3015; RV32IA-WMO-ZACAS-NEXT:    ret3016;3017; RV32IA-TSO-LABEL: cmpxchg_i16_acq_rel_monotonic:3018; RV32IA-TSO:       # %bb.0:3019; RV32IA-TSO-NEXT:    andi a3, a0, -43020; RV32IA-TSO-NEXT:    slli a0, a0, 33021; RV32IA-TSO-NEXT:    lui a4, 163022; RV32IA-TSO-NEXT:    addi a4, a4, -13023; RV32IA-TSO-NEXT:    sll a5, a4, a03024; RV32IA-TSO-NEXT:    and a1, a1, a43025; RV32IA-TSO-NEXT:    and a2, a2, a43026; RV32IA-TSO-NEXT:    sll a1, a1, a03027; RV32IA-TSO-NEXT:    sll a0, a2, a03028; RV32IA-TSO-NEXT:  .LBB15_1: # =>This Inner Loop Header: Depth=13029; RV32IA-TSO-NEXT:    lr.w a2, (a3)3030; RV32IA-TSO-NEXT:    and a4, a2, a53031; RV32IA-TSO-NEXT:    bne a4, a1, .LBB15_33032; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB15_1 Depth=13033; RV32IA-TSO-NEXT:    xor a4, a2, a03034; RV32IA-TSO-NEXT:    and a4, a4, a53035; RV32IA-TSO-NEXT:    xor a4, a2, a43036; RV32IA-TSO-NEXT:    sc.w a4, a4, (a3)3037; RV32IA-TSO-NEXT:    bnez a4, .LBB15_13038; RV32IA-TSO-NEXT:  .LBB15_3:3039; RV32IA-TSO-NEXT:    ret3040;3041; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i16_acq_rel_monotonic:3042; RV32IA-TSO-ZACAS:       # %bb.0:3043; RV32IA-TSO-ZACAS-NEXT:    andi a3, a0, -43044; RV32IA-TSO-ZACAS-NEXT:    slli a0, a0, 33045; RV32IA-TSO-ZACAS-NEXT:    lui a4, 163046; RV32IA-TSO-ZACAS-NEXT:    addi a4, a4, -13047; RV32IA-TSO-ZACAS-NEXT:    sll a5, a4, a03048; RV32IA-TSO-ZACAS-NEXT:    and a1, a1, a43049; RV32IA-TSO-ZACAS-NEXT:    and a2, a2, a43050; RV32IA-TSO-ZACAS-NEXT:    sll a1, a1, a03051; RV32IA-TSO-ZACAS-NEXT:    sll a0, a2, a03052; RV32IA-TSO-ZACAS-NEXT:  .LBB15_1: # =>This Inner Loop Header: Depth=13053; RV32IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)3054; RV32IA-TSO-ZACAS-NEXT:    and a4, a2, a53055; RV32IA-TSO-ZACAS-NEXT:    bne a4, a1, .LBB15_33056; RV32IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB15_1 Depth=13057; RV32IA-TSO-ZACAS-NEXT:    xor a4, a2, a03058; RV32IA-TSO-ZACAS-NEXT:    and a4, a4, a53059; RV32IA-TSO-ZACAS-NEXT:    xor a4, a2, a43060; RV32IA-TSO-ZACAS-NEXT:    sc.w a4, a4, (a3)3061; RV32IA-TSO-ZACAS-NEXT:    bnez a4, .LBB15_13062; RV32IA-TSO-ZACAS-NEXT:  .LBB15_3:3063; RV32IA-TSO-ZACAS-NEXT:    ret3064;3065; RV64I-LABEL: cmpxchg_i16_acq_rel_monotonic:3066; RV64I:       # %bb.0:3067; RV64I-NEXT:    addi sp, sp, -163068; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3069; RV64I-NEXT:    sh a1, 6(sp)3070; RV64I-NEXT:    addi a1, sp, 63071; RV64I-NEXT:    li a3, 43072; RV64I-NEXT:    li a4, 03073; RV64I-NEXT:    call __atomic_compare_exchange_23074; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3075; RV64I-NEXT:    addi sp, sp, 163076; RV64I-NEXT:    ret3077;3078; RV64IA-WMO-LABEL: cmpxchg_i16_acq_rel_monotonic:3079; RV64IA-WMO:       # %bb.0:3080; RV64IA-WMO-NEXT:    andi a3, a0, -43081; RV64IA-WMO-NEXT:    slli a0, a0, 33082; RV64IA-WMO-NEXT:    lui a4, 163083; RV64IA-WMO-NEXT:    addi a4, a4, -13084; RV64IA-WMO-NEXT:    sllw a5, a4, a03085; RV64IA-WMO-NEXT:    and a1, a1, a43086; RV64IA-WMO-NEXT:    and a2, a2, a43087; RV64IA-WMO-NEXT:    sllw a1, a1, a03088; RV64IA-WMO-NEXT:    sllw a0, a2, a03089; RV64IA-WMO-NEXT:  .LBB15_1: # =>This Inner Loop Header: Depth=13090; RV64IA-WMO-NEXT:    lr.w.aq a2, (a3)3091; RV64IA-WMO-NEXT:    and a4, a2, a53092; RV64IA-WMO-NEXT:    bne a4, a1, .LBB15_33093; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB15_1 Depth=13094; RV64IA-WMO-NEXT:    xor a4, a2, a03095; RV64IA-WMO-NEXT:    and a4, a4, a53096; RV64IA-WMO-NEXT:    xor a4, a2, a43097; RV64IA-WMO-NEXT:    sc.w.rl a4, a4, (a3)3098; RV64IA-WMO-NEXT:    bnez a4, .LBB15_13099; RV64IA-WMO-NEXT:  .LBB15_3:3100; RV64IA-WMO-NEXT:    ret3101;3102; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i16_acq_rel_monotonic:3103; RV64IA-WMO-ZACAS:       # %bb.0:3104; RV64IA-WMO-ZACAS-NEXT:    andi a3, a0, -43105; RV64IA-WMO-ZACAS-NEXT:    slli a0, a0, 33106; RV64IA-WMO-ZACAS-NEXT:    lui a4, 163107; RV64IA-WMO-ZACAS-NEXT:    addi a4, a4, -13108; RV64IA-WMO-ZACAS-NEXT:    sllw a5, a4, a03109; RV64IA-WMO-ZACAS-NEXT:    and a1, a1, a43110; RV64IA-WMO-ZACAS-NEXT:    and a2, a2, a43111; RV64IA-WMO-ZACAS-NEXT:    sllw a1, a1, a03112; RV64IA-WMO-ZACAS-NEXT:    sllw a0, a2, a03113; RV64IA-WMO-ZACAS-NEXT:  .LBB15_1: # =>This Inner Loop Header: Depth=13114; RV64IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)3115; RV64IA-WMO-ZACAS-NEXT:    and a4, a2, a53116; RV64IA-WMO-ZACAS-NEXT:    bne a4, a1, .LBB15_33117; RV64IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB15_1 Depth=13118; RV64IA-WMO-ZACAS-NEXT:    xor a4, a2, a03119; RV64IA-WMO-ZACAS-NEXT:    and a4, a4, a53120; RV64IA-WMO-ZACAS-NEXT:    xor a4, a2, a43121; RV64IA-WMO-ZACAS-NEXT:    sc.w.rl a4, a4, (a3)3122; RV64IA-WMO-ZACAS-NEXT:    bnez a4, .LBB15_13123; RV64IA-WMO-ZACAS-NEXT:  .LBB15_3:3124; RV64IA-WMO-ZACAS-NEXT:    ret3125;3126; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_acq_rel_monotonic:3127; RV64IA-WMO-ZABHA:       # %bb.0:3128; RV64IA-WMO-ZABHA-NEXT:    amocas.h.aqrl a1, a2, (a0)3129; RV64IA-WMO-ZABHA-NEXT:    ret3130;3131; RV64IA-TSO-LABEL: cmpxchg_i16_acq_rel_monotonic:3132; RV64IA-TSO:       # %bb.0:3133; RV64IA-TSO-NEXT:    andi a3, a0, -43134; RV64IA-TSO-NEXT:    slli a0, a0, 33135; RV64IA-TSO-NEXT:    lui a4, 163136; RV64IA-TSO-NEXT:    addi a4, a4, -13137; RV64IA-TSO-NEXT:    sllw a5, a4, a03138; RV64IA-TSO-NEXT:    and a1, a1, a43139; RV64IA-TSO-NEXT:    and a2, a2, a43140; RV64IA-TSO-NEXT:    sllw a1, a1, a03141; RV64IA-TSO-NEXT:    sllw a0, a2, a03142; RV64IA-TSO-NEXT:  .LBB15_1: # =>This Inner Loop Header: Depth=13143; RV64IA-TSO-NEXT:    lr.w a2, (a3)3144; RV64IA-TSO-NEXT:    and a4, a2, a53145; RV64IA-TSO-NEXT:    bne a4, a1, .LBB15_33146; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB15_1 Depth=13147; RV64IA-TSO-NEXT:    xor a4, a2, a03148; RV64IA-TSO-NEXT:    and a4, a4, a53149; RV64IA-TSO-NEXT:    xor a4, a2, a43150; RV64IA-TSO-NEXT:    sc.w a4, a4, (a3)3151; RV64IA-TSO-NEXT:    bnez a4, .LBB15_13152; RV64IA-TSO-NEXT:  .LBB15_3:3153; RV64IA-TSO-NEXT:    ret3154;3155; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i16_acq_rel_monotonic:3156; RV64IA-TSO-ZACAS:       # %bb.0:3157; RV64IA-TSO-ZACAS-NEXT:    andi a3, a0, -43158; RV64IA-TSO-ZACAS-NEXT:    slli a0, a0, 33159; RV64IA-TSO-ZACAS-NEXT:    lui a4, 163160; RV64IA-TSO-ZACAS-NEXT:    addi a4, a4, -13161; RV64IA-TSO-ZACAS-NEXT:    sllw a5, a4, a03162; RV64IA-TSO-ZACAS-NEXT:    and a1, a1, a43163; RV64IA-TSO-ZACAS-NEXT:    and a2, a2, a43164; RV64IA-TSO-ZACAS-NEXT:    sllw a1, a1, a03165; RV64IA-TSO-ZACAS-NEXT:    sllw a0, a2, a03166; RV64IA-TSO-ZACAS-NEXT:  .LBB15_1: # =>This Inner Loop Header: Depth=13167; RV64IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)3168; RV64IA-TSO-ZACAS-NEXT:    and a4, a2, a53169; RV64IA-TSO-ZACAS-NEXT:    bne a4, a1, .LBB15_33170; RV64IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB15_1 Depth=13171; RV64IA-TSO-ZACAS-NEXT:    xor a4, a2, a03172; RV64IA-TSO-ZACAS-NEXT:    and a4, a4, a53173; RV64IA-TSO-ZACAS-NEXT:    xor a4, a2, a43174; RV64IA-TSO-ZACAS-NEXT:    sc.w a4, a4, (a3)3175; RV64IA-TSO-ZACAS-NEXT:    bnez a4, .LBB15_13176; RV64IA-TSO-ZACAS-NEXT:  .LBB15_3:3177; RV64IA-TSO-ZACAS-NEXT:    ret3178;3179; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_acq_rel_monotonic:3180; RV64IA-TSO-ZABHA:       # %bb.0:3181; RV64IA-TSO-ZABHA-NEXT:    amocas.h a1, a2, (a0)3182; RV64IA-TSO-ZABHA-NEXT:    ret3183  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val acq_rel monotonic3184  ret void3185}3186 3187define void @cmpxchg_i16_acq_rel_acquire(ptr %ptr, i16 %cmp, i16 %val) nounwind {3188; RV32I-LABEL: cmpxchg_i16_acq_rel_acquire:3189; RV32I:       # %bb.0:3190; RV32I-NEXT:    addi sp, sp, -163191; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3192; RV32I-NEXT:    sh a1, 10(sp)3193; RV32I-NEXT:    addi a1, sp, 103194; RV32I-NEXT:    li a3, 43195; RV32I-NEXT:    li a4, 23196; RV32I-NEXT:    call __atomic_compare_exchange_23197; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3198; RV32I-NEXT:    addi sp, sp, 163199; RV32I-NEXT:    ret3200;3201; RV32IA-WMO-LABEL: cmpxchg_i16_acq_rel_acquire:3202; RV32IA-WMO:       # %bb.0:3203; RV32IA-WMO-NEXT:    andi a3, a0, -43204; RV32IA-WMO-NEXT:    slli a0, a0, 33205; RV32IA-WMO-NEXT:    lui a4, 163206; RV32IA-WMO-NEXT:    addi a4, a4, -13207; RV32IA-WMO-NEXT:    sll a5, a4, a03208; RV32IA-WMO-NEXT:    and a1, a1, a43209; RV32IA-WMO-NEXT:    and a2, a2, a43210; RV32IA-WMO-NEXT:    sll a1, a1, a03211; RV32IA-WMO-NEXT:    sll a0, a2, a03212; RV32IA-WMO-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=13213; RV32IA-WMO-NEXT:    lr.w.aq a2, (a3)3214; RV32IA-WMO-NEXT:    and a4, a2, a53215; RV32IA-WMO-NEXT:    bne a4, a1, .LBB16_33216; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB16_1 Depth=13217; RV32IA-WMO-NEXT:    xor a4, a2, a03218; RV32IA-WMO-NEXT:    and a4, a4, a53219; RV32IA-WMO-NEXT:    xor a4, a2, a43220; RV32IA-WMO-NEXT:    sc.w.rl a4, a4, (a3)3221; RV32IA-WMO-NEXT:    bnez a4, .LBB16_13222; RV32IA-WMO-NEXT:  .LBB16_3:3223; RV32IA-WMO-NEXT:    ret3224;3225; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i16_acq_rel_acquire:3226; RV32IA-WMO-ZACAS:       # %bb.0:3227; RV32IA-WMO-ZACAS-NEXT:    andi a3, a0, -43228; RV32IA-WMO-ZACAS-NEXT:    slli a0, a0, 33229; RV32IA-WMO-ZACAS-NEXT:    lui a4, 163230; RV32IA-WMO-ZACAS-NEXT:    addi a4, a4, -13231; RV32IA-WMO-ZACAS-NEXT:    sll a5, a4, a03232; RV32IA-WMO-ZACAS-NEXT:    and a1, a1, a43233; RV32IA-WMO-ZACAS-NEXT:    and a2, a2, a43234; RV32IA-WMO-ZACAS-NEXT:    sll a1, a1, a03235; RV32IA-WMO-ZACAS-NEXT:    sll a0, a2, a03236; RV32IA-WMO-ZACAS-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=13237; RV32IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)3238; RV32IA-WMO-ZACAS-NEXT:    and a4, a2, a53239; RV32IA-WMO-ZACAS-NEXT:    bne a4, a1, .LBB16_33240; RV32IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB16_1 Depth=13241; RV32IA-WMO-ZACAS-NEXT:    xor a4, a2, a03242; RV32IA-WMO-ZACAS-NEXT:    and a4, a4, a53243; RV32IA-WMO-ZACAS-NEXT:    xor a4, a2, a43244; RV32IA-WMO-ZACAS-NEXT:    sc.w.rl a4, a4, (a3)3245; RV32IA-WMO-ZACAS-NEXT:    bnez a4, .LBB16_13246; RV32IA-WMO-ZACAS-NEXT:  .LBB16_3:3247; RV32IA-WMO-ZACAS-NEXT:    ret3248;3249; RV32IA-TSO-LABEL: cmpxchg_i16_acq_rel_acquire:3250; RV32IA-TSO:       # %bb.0:3251; RV32IA-TSO-NEXT:    andi a3, a0, -43252; RV32IA-TSO-NEXT:    slli a0, a0, 33253; RV32IA-TSO-NEXT:    lui a4, 163254; RV32IA-TSO-NEXT:    addi a4, a4, -13255; RV32IA-TSO-NEXT:    sll a5, a4, a03256; RV32IA-TSO-NEXT:    and a1, a1, a43257; RV32IA-TSO-NEXT:    and a2, a2, a43258; RV32IA-TSO-NEXT:    sll a1, a1, a03259; RV32IA-TSO-NEXT:    sll a0, a2, a03260; RV32IA-TSO-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=13261; RV32IA-TSO-NEXT:    lr.w a2, (a3)3262; RV32IA-TSO-NEXT:    and a4, a2, a53263; RV32IA-TSO-NEXT:    bne a4, a1, .LBB16_33264; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB16_1 Depth=13265; RV32IA-TSO-NEXT:    xor a4, a2, a03266; RV32IA-TSO-NEXT:    and a4, a4, a53267; RV32IA-TSO-NEXT:    xor a4, a2, a43268; RV32IA-TSO-NEXT:    sc.w a4, a4, (a3)3269; RV32IA-TSO-NEXT:    bnez a4, .LBB16_13270; RV32IA-TSO-NEXT:  .LBB16_3:3271; RV32IA-TSO-NEXT:    ret3272;3273; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i16_acq_rel_acquire:3274; RV32IA-TSO-ZACAS:       # %bb.0:3275; RV32IA-TSO-ZACAS-NEXT:    andi a3, a0, -43276; RV32IA-TSO-ZACAS-NEXT:    slli a0, a0, 33277; RV32IA-TSO-ZACAS-NEXT:    lui a4, 163278; RV32IA-TSO-ZACAS-NEXT:    addi a4, a4, -13279; RV32IA-TSO-ZACAS-NEXT:    sll a5, a4, a03280; RV32IA-TSO-ZACAS-NEXT:    and a1, a1, a43281; RV32IA-TSO-ZACAS-NEXT:    and a2, a2, a43282; RV32IA-TSO-ZACAS-NEXT:    sll a1, a1, a03283; RV32IA-TSO-ZACAS-NEXT:    sll a0, a2, a03284; RV32IA-TSO-ZACAS-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=13285; RV32IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)3286; RV32IA-TSO-ZACAS-NEXT:    and a4, a2, a53287; RV32IA-TSO-ZACAS-NEXT:    bne a4, a1, .LBB16_33288; RV32IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB16_1 Depth=13289; RV32IA-TSO-ZACAS-NEXT:    xor a4, a2, a03290; RV32IA-TSO-ZACAS-NEXT:    and a4, a4, a53291; RV32IA-TSO-ZACAS-NEXT:    xor a4, a2, a43292; RV32IA-TSO-ZACAS-NEXT:    sc.w a4, a4, (a3)3293; RV32IA-TSO-ZACAS-NEXT:    bnez a4, .LBB16_13294; RV32IA-TSO-ZACAS-NEXT:  .LBB16_3:3295; RV32IA-TSO-ZACAS-NEXT:    ret3296;3297; RV64I-LABEL: cmpxchg_i16_acq_rel_acquire:3298; RV64I:       # %bb.0:3299; RV64I-NEXT:    addi sp, sp, -163300; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3301; RV64I-NEXT:    sh a1, 6(sp)3302; RV64I-NEXT:    addi a1, sp, 63303; RV64I-NEXT:    li a3, 43304; RV64I-NEXT:    li a4, 23305; RV64I-NEXT:    call __atomic_compare_exchange_23306; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3307; RV64I-NEXT:    addi sp, sp, 163308; RV64I-NEXT:    ret3309;3310; RV64IA-WMO-LABEL: cmpxchg_i16_acq_rel_acquire:3311; RV64IA-WMO:       # %bb.0:3312; RV64IA-WMO-NEXT:    andi a3, a0, -43313; RV64IA-WMO-NEXT:    slli a0, a0, 33314; RV64IA-WMO-NEXT:    lui a4, 163315; RV64IA-WMO-NEXT:    addi a4, a4, -13316; RV64IA-WMO-NEXT:    sllw a5, a4, a03317; RV64IA-WMO-NEXT:    and a1, a1, a43318; RV64IA-WMO-NEXT:    and a2, a2, a43319; RV64IA-WMO-NEXT:    sllw a1, a1, a03320; RV64IA-WMO-NEXT:    sllw a0, a2, a03321; RV64IA-WMO-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=13322; RV64IA-WMO-NEXT:    lr.w.aq a2, (a3)3323; RV64IA-WMO-NEXT:    and a4, a2, a53324; RV64IA-WMO-NEXT:    bne a4, a1, .LBB16_33325; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB16_1 Depth=13326; RV64IA-WMO-NEXT:    xor a4, a2, a03327; RV64IA-WMO-NEXT:    and a4, a4, a53328; RV64IA-WMO-NEXT:    xor a4, a2, a43329; RV64IA-WMO-NEXT:    sc.w.rl a4, a4, (a3)3330; RV64IA-WMO-NEXT:    bnez a4, .LBB16_13331; RV64IA-WMO-NEXT:  .LBB16_3:3332; RV64IA-WMO-NEXT:    ret3333;3334; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i16_acq_rel_acquire:3335; RV64IA-WMO-ZACAS:       # %bb.0:3336; RV64IA-WMO-ZACAS-NEXT:    andi a3, a0, -43337; RV64IA-WMO-ZACAS-NEXT:    slli a0, a0, 33338; RV64IA-WMO-ZACAS-NEXT:    lui a4, 163339; RV64IA-WMO-ZACAS-NEXT:    addi a4, a4, -13340; RV64IA-WMO-ZACAS-NEXT:    sllw a5, a4, a03341; RV64IA-WMO-ZACAS-NEXT:    and a1, a1, a43342; RV64IA-WMO-ZACAS-NEXT:    and a2, a2, a43343; RV64IA-WMO-ZACAS-NEXT:    sllw a1, a1, a03344; RV64IA-WMO-ZACAS-NEXT:    sllw a0, a2, a03345; RV64IA-WMO-ZACAS-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=13346; RV64IA-WMO-ZACAS-NEXT:    lr.w.aq a2, (a3)3347; RV64IA-WMO-ZACAS-NEXT:    and a4, a2, a53348; RV64IA-WMO-ZACAS-NEXT:    bne a4, a1, .LBB16_33349; RV64IA-WMO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB16_1 Depth=13350; RV64IA-WMO-ZACAS-NEXT:    xor a4, a2, a03351; RV64IA-WMO-ZACAS-NEXT:    and a4, a4, a53352; RV64IA-WMO-ZACAS-NEXT:    xor a4, a2, a43353; RV64IA-WMO-ZACAS-NEXT:    sc.w.rl a4, a4, (a3)3354; RV64IA-WMO-ZACAS-NEXT:    bnez a4, .LBB16_13355; RV64IA-WMO-ZACAS-NEXT:  .LBB16_3:3356; RV64IA-WMO-ZACAS-NEXT:    ret3357;3358; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_acq_rel_acquire:3359; RV64IA-WMO-ZABHA:       # %bb.0:3360; RV64IA-WMO-ZABHA-NEXT:    amocas.h.aqrl a1, a2, (a0)3361; RV64IA-WMO-ZABHA-NEXT:    ret3362;3363; RV64IA-TSO-LABEL: cmpxchg_i16_acq_rel_acquire:3364; RV64IA-TSO:       # %bb.0:3365; RV64IA-TSO-NEXT:    andi a3, a0, -43366; RV64IA-TSO-NEXT:    slli a0, a0, 33367; RV64IA-TSO-NEXT:    lui a4, 163368; RV64IA-TSO-NEXT:    addi a4, a4, -13369; RV64IA-TSO-NEXT:    sllw a5, a4, a03370; RV64IA-TSO-NEXT:    and a1, a1, a43371; RV64IA-TSO-NEXT:    and a2, a2, a43372; RV64IA-TSO-NEXT:    sllw a1, a1, a03373; RV64IA-TSO-NEXT:    sllw a0, a2, a03374; RV64IA-TSO-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=13375; RV64IA-TSO-NEXT:    lr.w a2, (a3)3376; RV64IA-TSO-NEXT:    and a4, a2, a53377; RV64IA-TSO-NEXT:    bne a4, a1, .LBB16_33378; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB16_1 Depth=13379; RV64IA-TSO-NEXT:    xor a4, a2, a03380; RV64IA-TSO-NEXT:    and a4, a4, a53381; RV64IA-TSO-NEXT:    xor a4, a2, a43382; RV64IA-TSO-NEXT:    sc.w a4, a4, (a3)3383; RV64IA-TSO-NEXT:    bnez a4, .LBB16_13384; RV64IA-TSO-NEXT:  .LBB16_3:3385; RV64IA-TSO-NEXT:    ret3386;3387; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i16_acq_rel_acquire:3388; RV64IA-TSO-ZACAS:       # %bb.0:3389; RV64IA-TSO-ZACAS-NEXT:    andi a3, a0, -43390; RV64IA-TSO-ZACAS-NEXT:    slli a0, a0, 33391; RV64IA-TSO-ZACAS-NEXT:    lui a4, 163392; RV64IA-TSO-ZACAS-NEXT:    addi a4, a4, -13393; RV64IA-TSO-ZACAS-NEXT:    sllw a5, a4, a03394; RV64IA-TSO-ZACAS-NEXT:    and a1, a1, a43395; RV64IA-TSO-ZACAS-NEXT:    and a2, a2, a43396; RV64IA-TSO-ZACAS-NEXT:    sllw a1, a1, a03397; RV64IA-TSO-ZACAS-NEXT:    sllw a0, a2, a03398; RV64IA-TSO-ZACAS-NEXT:  .LBB16_1: # =>This Inner Loop Header: Depth=13399; RV64IA-TSO-ZACAS-NEXT:    lr.w a2, (a3)3400; RV64IA-TSO-ZACAS-NEXT:    and a4, a2, a53401; RV64IA-TSO-ZACAS-NEXT:    bne a4, a1, .LBB16_33402; RV64IA-TSO-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB16_1 Depth=13403; RV64IA-TSO-ZACAS-NEXT:    xor a4, a2, a03404; RV64IA-TSO-ZACAS-NEXT:    and a4, a4, a53405; RV64IA-TSO-ZACAS-NEXT:    xor a4, a2, a43406; RV64IA-TSO-ZACAS-NEXT:    sc.w a4, a4, (a3)3407; RV64IA-TSO-ZACAS-NEXT:    bnez a4, .LBB16_13408; RV64IA-TSO-ZACAS-NEXT:  .LBB16_3:3409; RV64IA-TSO-ZACAS-NEXT:    ret3410;3411; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_acq_rel_acquire:3412; RV64IA-TSO-ZABHA:       # %bb.0:3413; RV64IA-TSO-ZABHA-NEXT:    amocas.h a1, a2, (a0)3414; RV64IA-TSO-ZABHA-NEXT:    ret3415  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val acq_rel acquire3416  ret void3417}3418 3419define void @cmpxchg_i16_seq_cst_monotonic(ptr %ptr, i16 %cmp, i16 %val) nounwind {3420; RV32I-LABEL: cmpxchg_i16_seq_cst_monotonic:3421; RV32I:       # %bb.0:3422; RV32I-NEXT:    addi sp, sp, -163423; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3424; RV32I-NEXT:    sh a1, 10(sp)3425; RV32I-NEXT:    addi a1, sp, 103426; RV32I-NEXT:    li a3, 53427; RV32I-NEXT:    li a4, 03428; RV32I-NEXT:    call __atomic_compare_exchange_23429; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3430; RV32I-NEXT:    addi sp, sp, 163431; RV32I-NEXT:    ret3432;3433; RV32IA-LABEL: cmpxchg_i16_seq_cst_monotonic:3434; RV32IA:       # %bb.0:3435; RV32IA-NEXT:    andi a3, a0, -43436; RV32IA-NEXT:    slli a0, a0, 33437; RV32IA-NEXT:    lui a4, 163438; RV32IA-NEXT:    addi a4, a4, -13439; RV32IA-NEXT:    sll a5, a4, a03440; RV32IA-NEXT:    and a1, a1, a43441; RV32IA-NEXT:    and a2, a2, a43442; RV32IA-NEXT:    sll a1, a1, a03443; RV32IA-NEXT:    sll a0, a2, a03444; RV32IA-NEXT:  .LBB17_1: # =>This Inner Loop Header: Depth=13445; RV32IA-NEXT:    lr.w.aqrl a2, (a3)3446; RV32IA-NEXT:    and a4, a2, a53447; RV32IA-NEXT:    bne a4, a1, .LBB17_33448; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB17_1 Depth=13449; RV32IA-NEXT:    xor a4, a2, a03450; RV32IA-NEXT:    and a4, a4, a53451; RV32IA-NEXT:    xor a4, a2, a43452; RV32IA-NEXT:    sc.w.rl a4, a4, (a3)3453; RV32IA-NEXT:    bnez a4, .LBB17_13454; RV32IA-NEXT:  .LBB17_3:3455; RV32IA-NEXT:    ret3456;3457; RV64I-LABEL: cmpxchg_i16_seq_cst_monotonic:3458; RV64I:       # %bb.0:3459; RV64I-NEXT:    addi sp, sp, -163460; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3461; RV64I-NEXT:    sh a1, 6(sp)3462; RV64I-NEXT:    addi a1, sp, 63463; RV64I-NEXT:    li a3, 53464; RV64I-NEXT:    li a4, 03465; RV64I-NEXT:    call __atomic_compare_exchange_23466; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3467; RV64I-NEXT:    addi sp, sp, 163468; RV64I-NEXT:    ret3469;3470; RV64IA-WMO-LABEL: cmpxchg_i16_seq_cst_monotonic:3471; RV64IA-WMO:       # %bb.0:3472; RV64IA-WMO-NEXT:    andi a3, a0, -43473; RV64IA-WMO-NEXT:    slli a0, a0, 33474; RV64IA-WMO-NEXT:    lui a4, 163475; RV64IA-WMO-NEXT:    addi a4, a4, -13476; RV64IA-WMO-NEXT:    sllw a5, a4, a03477; RV64IA-WMO-NEXT:    and a1, a1, a43478; RV64IA-WMO-NEXT:    and a2, a2, a43479; RV64IA-WMO-NEXT:    sllw a1, a1, a03480; RV64IA-WMO-NEXT:    sllw a0, a2, a03481; RV64IA-WMO-NEXT:  .LBB17_1: # =>This Inner Loop Header: Depth=13482; RV64IA-WMO-NEXT:    lr.w.aqrl a2, (a3)3483; RV64IA-WMO-NEXT:    and a4, a2, a53484; RV64IA-WMO-NEXT:    bne a4, a1, .LBB17_33485; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB17_1 Depth=13486; RV64IA-WMO-NEXT:    xor a4, a2, a03487; RV64IA-WMO-NEXT:    and a4, a4, a53488; RV64IA-WMO-NEXT:    xor a4, a2, a43489; RV64IA-WMO-NEXT:    sc.w.rl a4, a4, (a3)3490; RV64IA-WMO-NEXT:    bnez a4, .LBB17_13491; RV64IA-WMO-NEXT:  .LBB17_3:3492; RV64IA-WMO-NEXT:    ret3493;3494; RV64IA-ZACAS-LABEL: cmpxchg_i16_seq_cst_monotonic:3495; RV64IA-ZACAS:       # %bb.0:3496; RV64IA-ZACAS-NEXT:    andi a3, a0, -43497; RV64IA-ZACAS-NEXT:    slli a0, a0, 33498; RV64IA-ZACAS-NEXT:    lui a4, 163499; RV64IA-ZACAS-NEXT:    addi a4, a4, -13500; RV64IA-ZACAS-NEXT:    sllw a5, a4, a03501; RV64IA-ZACAS-NEXT:    and a1, a1, a43502; RV64IA-ZACAS-NEXT:    and a2, a2, a43503; RV64IA-ZACAS-NEXT:    sllw a1, a1, a03504; RV64IA-ZACAS-NEXT:    sllw a0, a2, a03505; RV64IA-ZACAS-NEXT:  .LBB17_1: # =>This Inner Loop Header: Depth=13506; RV64IA-ZACAS-NEXT:    lr.w.aqrl a2, (a3)3507; RV64IA-ZACAS-NEXT:    and a4, a2, a53508; RV64IA-ZACAS-NEXT:    bne a4, a1, .LBB17_33509; RV64IA-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB17_1 Depth=13510; RV64IA-ZACAS-NEXT:    xor a4, a2, a03511; RV64IA-ZACAS-NEXT:    and a4, a4, a53512; RV64IA-ZACAS-NEXT:    xor a4, a2, a43513; RV64IA-ZACAS-NEXT:    sc.w.rl a4, a4, (a3)3514; RV64IA-ZACAS-NEXT:    bnez a4, .LBB17_13515; RV64IA-ZACAS-NEXT:  .LBB17_3:3516; RV64IA-ZACAS-NEXT:    ret3517;3518; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_seq_cst_monotonic:3519; RV64IA-WMO-ZABHA:       # %bb.0:3520; RV64IA-WMO-ZABHA-NEXT:    amocas.h.aqrl a1, a2, (a0)3521; RV64IA-WMO-ZABHA-NEXT:    ret3522;3523; RV64IA-TSO-LABEL: cmpxchg_i16_seq_cst_monotonic:3524; RV64IA-TSO:       # %bb.0:3525; RV64IA-TSO-NEXT:    andi a3, a0, -43526; RV64IA-TSO-NEXT:    slli a0, a0, 33527; RV64IA-TSO-NEXT:    lui a4, 163528; RV64IA-TSO-NEXT:    addi a4, a4, -13529; RV64IA-TSO-NEXT:    sllw a5, a4, a03530; RV64IA-TSO-NEXT:    and a1, a1, a43531; RV64IA-TSO-NEXT:    and a2, a2, a43532; RV64IA-TSO-NEXT:    sllw a1, a1, a03533; RV64IA-TSO-NEXT:    sllw a0, a2, a03534; RV64IA-TSO-NEXT:  .LBB17_1: # =>This Inner Loop Header: Depth=13535; RV64IA-TSO-NEXT:    lr.w.aqrl a2, (a3)3536; RV64IA-TSO-NEXT:    and a4, a2, a53537; RV64IA-TSO-NEXT:    bne a4, a1, .LBB17_33538; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB17_1 Depth=13539; RV64IA-TSO-NEXT:    xor a4, a2, a03540; RV64IA-TSO-NEXT:    and a4, a4, a53541; RV64IA-TSO-NEXT:    xor a4, a2, a43542; RV64IA-TSO-NEXT:    sc.w.rl a4, a4, (a3)3543; RV64IA-TSO-NEXT:    bnez a4, .LBB17_13544; RV64IA-TSO-NEXT:  .LBB17_3:3545; RV64IA-TSO-NEXT:    ret3546;3547; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_seq_cst_monotonic:3548; RV64IA-TSO-ZABHA:       # %bb.0:3549; RV64IA-TSO-ZABHA-NEXT:    amocas.h a1, a2, (a0)3550; RV64IA-TSO-ZABHA-NEXT:    ret3551  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val seq_cst monotonic3552  ret void3553}3554 3555define void @cmpxchg_i16_seq_cst_acquire(ptr %ptr, i16 %cmp, i16 %val) nounwind {3556; RV32I-LABEL: cmpxchg_i16_seq_cst_acquire:3557; RV32I:       # %bb.0:3558; RV32I-NEXT:    addi sp, sp, -163559; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3560; RV32I-NEXT:    sh a1, 10(sp)3561; RV32I-NEXT:    addi a1, sp, 103562; RV32I-NEXT:    li a3, 53563; RV32I-NEXT:    li a4, 23564; RV32I-NEXT:    call __atomic_compare_exchange_23565; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3566; RV32I-NEXT:    addi sp, sp, 163567; RV32I-NEXT:    ret3568;3569; RV32IA-LABEL: cmpxchg_i16_seq_cst_acquire:3570; RV32IA:       # %bb.0:3571; RV32IA-NEXT:    andi a3, a0, -43572; RV32IA-NEXT:    slli a0, a0, 33573; RV32IA-NEXT:    lui a4, 163574; RV32IA-NEXT:    addi a4, a4, -13575; RV32IA-NEXT:    sll a5, a4, a03576; RV32IA-NEXT:    and a1, a1, a43577; RV32IA-NEXT:    and a2, a2, a43578; RV32IA-NEXT:    sll a1, a1, a03579; RV32IA-NEXT:    sll a0, a2, a03580; RV32IA-NEXT:  .LBB18_1: # =>This Inner Loop Header: Depth=13581; RV32IA-NEXT:    lr.w.aqrl a2, (a3)3582; RV32IA-NEXT:    and a4, a2, a53583; RV32IA-NEXT:    bne a4, a1, .LBB18_33584; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB18_1 Depth=13585; RV32IA-NEXT:    xor a4, a2, a03586; RV32IA-NEXT:    and a4, a4, a53587; RV32IA-NEXT:    xor a4, a2, a43588; RV32IA-NEXT:    sc.w.rl a4, a4, (a3)3589; RV32IA-NEXT:    bnez a4, .LBB18_13590; RV32IA-NEXT:  .LBB18_3:3591; RV32IA-NEXT:    ret3592;3593; RV64I-LABEL: cmpxchg_i16_seq_cst_acquire:3594; RV64I:       # %bb.0:3595; RV64I-NEXT:    addi sp, sp, -163596; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3597; RV64I-NEXT:    sh a1, 6(sp)3598; RV64I-NEXT:    addi a1, sp, 63599; RV64I-NEXT:    li a3, 53600; RV64I-NEXT:    li a4, 23601; RV64I-NEXT:    call __atomic_compare_exchange_23602; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3603; RV64I-NEXT:    addi sp, sp, 163604; RV64I-NEXT:    ret3605;3606; RV64IA-WMO-LABEL: cmpxchg_i16_seq_cst_acquire:3607; RV64IA-WMO:       # %bb.0:3608; RV64IA-WMO-NEXT:    andi a3, a0, -43609; RV64IA-WMO-NEXT:    slli a0, a0, 33610; RV64IA-WMO-NEXT:    lui a4, 163611; RV64IA-WMO-NEXT:    addi a4, a4, -13612; RV64IA-WMO-NEXT:    sllw a5, a4, a03613; RV64IA-WMO-NEXT:    and a1, a1, a43614; RV64IA-WMO-NEXT:    and a2, a2, a43615; RV64IA-WMO-NEXT:    sllw a1, a1, a03616; RV64IA-WMO-NEXT:    sllw a0, a2, a03617; RV64IA-WMO-NEXT:  .LBB18_1: # =>This Inner Loop Header: Depth=13618; RV64IA-WMO-NEXT:    lr.w.aqrl a2, (a3)3619; RV64IA-WMO-NEXT:    and a4, a2, a53620; RV64IA-WMO-NEXT:    bne a4, a1, .LBB18_33621; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB18_1 Depth=13622; RV64IA-WMO-NEXT:    xor a4, a2, a03623; RV64IA-WMO-NEXT:    and a4, a4, a53624; RV64IA-WMO-NEXT:    xor a4, a2, a43625; RV64IA-WMO-NEXT:    sc.w.rl a4, a4, (a3)3626; RV64IA-WMO-NEXT:    bnez a4, .LBB18_13627; RV64IA-WMO-NEXT:  .LBB18_3:3628; RV64IA-WMO-NEXT:    ret3629;3630; RV64IA-ZACAS-LABEL: cmpxchg_i16_seq_cst_acquire:3631; RV64IA-ZACAS:       # %bb.0:3632; RV64IA-ZACAS-NEXT:    andi a3, a0, -43633; RV64IA-ZACAS-NEXT:    slli a0, a0, 33634; RV64IA-ZACAS-NEXT:    lui a4, 163635; RV64IA-ZACAS-NEXT:    addi a4, a4, -13636; RV64IA-ZACAS-NEXT:    sllw a5, a4, a03637; RV64IA-ZACAS-NEXT:    and a1, a1, a43638; RV64IA-ZACAS-NEXT:    and a2, a2, a43639; RV64IA-ZACAS-NEXT:    sllw a1, a1, a03640; RV64IA-ZACAS-NEXT:    sllw a0, a2, a03641; RV64IA-ZACAS-NEXT:  .LBB18_1: # =>This Inner Loop Header: Depth=13642; RV64IA-ZACAS-NEXT:    lr.w.aqrl a2, (a3)3643; RV64IA-ZACAS-NEXT:    and a4, a2, a53644; RV64IA-ZACAS-NEXT:    bne a4, a1, .LBB18_33645; RV64IA-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB18_1 Depth=13646; RV64IA-ZACAS-NEXT:    xor a4, a2, a03647; RV64IA-ZACAS-NEXT:    and a4, a4, a53648; RV64IA-ZACAS-NEXT:    xor a4, a2, a43649; RV64IA-ZACAS-NEXT:    sc.w.rl a4, a4, (a3)3650; RV64IA-ZACAS-NEXT:    bnez a4, .LBB18_13651; RV64IA-ZACAS-NEXT:  .LBB18_3:3652; RV64IA-ZACAS-NEXT:    ret3653;3654; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_seq_cst_acquire:3655; RV64IA-WMO-ZABHA:       # %bb.0:3656; RV64IA-WMO-ZABHA-NEXT:    amocas.h.aqrl a1, a2, (a0)3657; RV64IA-WMO-ZABHA-NEXT:    ret3658;3659; RV64IA-TSO-LABEL: cmpxchg_i16_seq_cst_acquire:3660; RV64IA-TSO:       # %bb.0:3661; RV64IA-TSO-NEXT:    andi a3, a0, -43662; RV64IA-TSO-NEXT:    slli a0, a0, 33663; RV64IA-TSO-NEXT:    lui a4, 163664; RV64IA-TSO-NEXT:    addi a4, a4, -13665; RV64IA-TSO-NEXT:    sllw a5, a4, a03666; RV64IA-TSO-NEXT:    and a1, a1, a43667; RV64IA-TSO-NEXT:    and a2, a2, a43668; RV64IA-TSO-NEXT:    sllw a1, a1, a03669; RV64IA-TSO-NEXT:    sllw a0, a2, a03670; RV64IA-TSO-NEXT:  .LBB18_1: # =>This Inner Loop Header: Depth=13671; RV64IA-TSO-NEXT:    lr.w.aqrl a2, (a3)3672; RV64IA-TSO-NEXT:    and a4, a2, a53673; RV64IA-TSO-NEXT:    bne a4, a1, .LBB18_33674; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB18_1 Depth=13675; RV64IA-TSO-NEXT:    xor a4, a2, a03676; RV64IA-TSO-NEXT:    and a4, a4, a53677; RV64IA-TSO-NEXT:    xor a4, a2, a43678; RV64IA-TSO-NEXT:    sc.w.rl a4, a4, (a3)3679; RV64IA-TSO-NEXT:    bnez a4, .LBB18_13680; RV64IA-TSO-NEXT:  .LBB18_3:3681; RV64IA-TSO-NEXT:    ret3682;3683; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_seq_cst_acquire:3684; RV64IA-TSO-ZABHA:       # %bb.0:3685; RV64IA-TSO-ZABHA-NEXT:    amocas.h a1, a2, (a0)3686; RV64IA-TSO-ZABHA-NEXT:    ret3687  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val seq_cst acquire3688  ret void3689}3690 3691define void @cmpxchg_i16_seq_cst_seq_cst(ptr %ptr, i16 %cmp, i16 %val) nounwind {3692; RV32I-LABEL: cmpxchg_i16_seq_cst_seq_cst:3693; RV32I:       # %bb.0:3694; RV32I-NEXT:    addi sp, sp, -163695; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3696; RV32I-NEXT:    sh a1, 10(sp)3697; RV32I-NEXT:    addi a1, sp, 103698; RV32I-NEXT:    li a3, 53699; RV32I-NEXT:    li a4, 53700; RV32I-NEXT:    call __atomic_compare_exchange_23701; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3702; RV32I-NEXT:    addi sp, sp, 163703; RV32I-NEXT:    ret3704;3705; RV32IA-LABEL: cmpxchg_i16_seq_cst_seq_cst:3706; RV32IA:       # %bb.0:3707; RV32IA-NEXT:    andi a3, a0, -43708; RV32IA-NEXT:    slli a0, a0, 33709; RV32IA-NEXT:    lui a4, 163710; RV32IA-NEXT:    addi a4, a4, -13711; RV32IA-NEXT:    sll a5, a4, a03712; RV32IA-NEXT:    and a1, a1, a43713; RV32IA-NEXT:    and a2, a2, a43714; RV32IA-NEXT:    sll a1, a1, a03715; RV32IA-NEXT:    sll a0, a2, a03716; RV32IA-NEXT:  .LBB19_1: # =>This Inner Loop Header: Depth=13717; RV32IA-NEXT:    lr.w.aqrl a2, (a3)3718; RV32IA-NEXT:    and a4, a2, a53719; RV32IA-NEXT:    bne a4, a1, .LBB19_33720; RV32IA-NEXT:  # %bb.2: # in Loop: Header=BB19_1 Depth=13721; RV32IA-NEXT:    xor a4, a2, a03722; RV32IA-NEXT:    and a4, a4, a53723; RV32IA-NEXT:    xor a4, a2, a43724; RV32IA-NEXT:    sc.w.rl a4, a4, (a3)3725; RV32IA-NEXT:    bnez a4, .LBB19_13726; RV32IA-NEXT:  .LBB19_3:3727; RV32IA-NEXT:    ret3728;3729; RV64I-LABEL: cmpxchg_i16_seq_cst_seq_cst:3730; RV64I:       # %bb.0:3731; RV64I-NEXT:    addi sp, sp, -163732; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3733; RV64I-NEXT:    sh a1, 6(sp)3734; RV64I-NEXT:    addi a1, sp, 63735; RV64I-NEXT:    li a3, 53736; RV64I-NEXT:    li a4, 53737; RV64I-NEXT:    call __atomic_compare_exchange_23738; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3739; RV64I-NEXT:    addi sp, sp, 163740; RV64I-NEXT:    ret3741;3742; RV64IA-WMO-LABEL: cmpxchg_i16_seq_cst_seq_cst:3743; RV64IA-WMO:       # %bb.0:3744; RV64IA-WMO-NEXT:    andi a3, a0, -43745; RV64IA-WMO-NEXT:    slli a0, a0, 33746; RV64IA-WMO-NEXT:    lui a4, 163747; RV64IA-WMO-NEXT:    addi a4, a4, -13748; RV64IA-WMO-NEXT:    sllw a5, a4, a03749; RV64IA-WMO-NEXT:    and a1, a1, a43750; RV64IA-WMO-NEXT:    and a2, a2, a43751; RV64IA-WMO-NEXT:    sllw a1, a1, a03752; RV64IA-WMO-NEXT:    sllw a0, a2, a03753; RV64IA-WMO-NEXT:  .LBB19_1: # =>This Inner Loop Header: Depth=13754; RV64IA-WMO-NEXT:    lr.w.aqrl a2, (a3)3755; RV64IA-WMO-NEXT:    and a4, a2, a53756; RV64IA-WMO-NEXT:    bne a4, a1, .LBB19_33757; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB19_1 Depth=13758; RV64IA-WMO-NEXT:    xor a4, a2, a03759; RV64IA-WMO-NEXT:    and a4, a4, a53760; RV64IA-WMO-NEXT:    xor a4, a2, a43761; RV64IA-WMO-NEXT:    sc.w.rl a4, a4, (a3)3762; RV64IA-WMO-NEXT:    bnez a4, .LBB19_13763; RV64IA-WMO-NEXT:  .LBB19_3:3764; RV64IA-WMO-NEXT:    ret3765;3766; RV64IA-ZACAS-LABEL: cmpxchg_i16_seq_cst_seq_cst:3767; RV64IA-ZACAS:       # %bb.0:3768; RV64IA-ZACAS-NEXT:    andi a3, a0, -43769; RV64IA-ZACAS-NEXT:    slli a0, a0, 33770; RV64IA-ZACAS-NEXT:    lui a4, 163771; RV64IA-ZACAS-NEXT:    addi a4, a4, -13772; RV64IA-ZACAS-NEXT:    sllw a5, a4, a03773; RV64IA-ZACAS-NEXT:    and a1, a1, a43774; RV64IA-ZACAS-NEXT:    and a2, a2, a43775; RV64IA-ZACAS-NEXT:    sllw a1, a1, a03776; RV64IA-ZACAS-NEXT:    sllw a0, a2, a03777; RV64IA-ZACAS-NEXT:  .LBB19_1: # =>This Inner Loop Header: Depth=13778; RV64IA-ZACAS-NEXT:    lr.w.aqrl a2, (a3)3779; RV64IA-ZACAS-NEXT:    and a4, a2, a53780; RV64IA-ZACAS-NEXT:    bne a4, a1, .LBB19_33781; RV64IA-ZACAS-NEXT:  # %bb.2: # in Loop: Header=BB19_1 Depth=13782; RV64IA-ZACAS-NEXT:    xor a4, a2, a03783; RV64IA-ZACAS-NEXT:    and a4, a4, a53784; RV64IA-ZACAS-NEXT:    xor a4, a2, a43785; RV64IA-ZACAS-NEXT:    sc.w.rl a4, a4, (a3)3786; RV64IA-ZACAS-NEXT:    bnez a4, .LBB19_13787; RV64IA-ZACAS-NEXT:  .LBB19_3:3788; RV64IA-ZACAS-NEXT:    ret3789;3790; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_seq_cst_seq_cst:3791; RV64IA-WMO-ZABHA:       # %bb.0:3792; RV64IA-WMO-ZABHA-NEXT:    fence rw, rw3793; RV64IA-WMO-ZABHA-NEXT:    amocas.h.aqrl a1, a2, (a0)3794; RV64IA-WMO-ZABHA-NEXT:    ret3795;3796; RV64IA-TSO-LABEL: cmpxchg_i16_seq_cst_seq_cst:3797; RV64IA-TSO:       # %bb.0:3798; RV64IA-TSO-NEXT:    andi a3, a0, -43799; RV64IA-TSO-NEXT:    slli a0, a0, 33800; RV64IA-TSO-NEXT:    lui a4, 163801; RV64IA-TSO-NEXT:    addi a4, a4, -13802; RV64IA-TSO-NEXT:    sllw a5, a4, a03803; RV64IA-TSO-NEXT:    and a1, a1, a43804; RV64IA-TSO-NEXT:    and a2, a2, a43805; RV64IA-TSO-NEXT:    sllw a1, a1, a03806; RV64IA-TSO-NEXT:    sllw a0, a2, a03807; RV64IA-TSO-NEXT:  .LBB19_1: # =>This Inner Loop Header: Depth=13808; RV64IA-TSO-NEXT:    lr.w.aqrl a2, (a3)3809; RV64IA-TSO-NEXT:    and a4, a2, a53810; RV64IA-TSO-NEXT:    bne a4, a1, .LBB19_33811; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB19_1 Depth=13812; RV64IA-TSO-NEXT:    xor a4, a2, a03813; RV64IA-TSO-NEXT:    and a4, a4, a53814; RV64IA-TSO-NEXT:    xor a4, a2, a43815; RV64IA-TSO-NEXT:    sc.w.rl a4, a4, (a3)3816; RV64IA-TSO-NEXT:    bnez a4, .LBB19_13817; RV64IA-TSO-NEXT:  .LBB19_3:3818; RV64IA-TSO-NEXT:    ret3819;3820; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_seq_cst_seq_cst:3821; RV64IA-TSO-ZABHA:       # %bb.0:3822; RV64IA-TSO-ZABHA-NEXT:    fence rw, rw3823; RV64IA-TSO-ZABHA-NEXT:    amocas.h a1, a2, (a0)3824; RV64IA-TSO-ZABHA-NEXT:    ret3825  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val seq_cst seq_cst3826  ret void3827}3828 3829define void @cmpxchg_i32_monotonic_monotonic(ptr %ptr, i32 %cmp, i32 %val) nounwind {3830; RV32I-LABEL: cmpxchg_i32_monotonic_monotonic:3831; RV32I:       # %bb.0:3832; RV32I-NEXT:    addi sp, sp, -163833; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3834; RV32I-NEXT:    sw a1, 8(sp)3835; RV32I-NEXT:    addi a1, sp, 83836; RV32I-NEXT:    li a3, 03837; RV32I-NEXT:    li a4, 03838; RV32I-NEXT:    call __atomic_compare_exchange_43839; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3840; RV32I-NEXT:    addi sp, sp, 163841; RV32I-NEXT:    ret3842;3843; RV32IA-WMO-LABEL: cmpxchg_i32_monotonic_monotonic:3844; RV32IA-WMO:       # %bb.0:3845; RV32IA-WMO-NEXT:  .LBB20_1: # =>This Inner Loop Header: Depth=13846; RV32IA-WMO-NEXT:    lr.w a3, (a0)3847; RV32IA-WMO-NEXT:    bne a3, a1, .LBB20_33848; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB20_1 Depth=13849; RV32IA-WMO-NEXT:    sc.w a4, a2, (a0)3850; RV32IA-WMO-NEXT:    bnez a4, .LBB20_13851; RV32IA-WMO-NEXT:  .LBB20_3:3852; RV32IA-WMO-NEXT:    ret3853;3854; RV32IA-ZACAS-LABEL: cmpxchg_i32_monotonic_monotonic:3855; RV32IA-ZACAS:       # %bb.0:3856; RV32IA-ZACAS-NEXT:    amocas.w a1, a2, (a0)3857; RV32IA-ZACAS-NEXT:    ret3858;3859; RV32IA-TSO-LABEL: cmpxchg_i32_monotonic_monotonic:3860; RV32IA-TSO:       # %bb.0:3861; RV32IA-TSO-NEXT:  .LBB20_1: # =>This Inner Loop Header: Depth=13862; RV32IA-TSO-NEXT:    lr.w a3, (a0)3863; RV32IA-TSO-NEXT:    bne a3, a1, .LBB20_33864; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB20_1 Depth=13865; RV32IA-TSO-NEXT:    sc.w a4, a2, (a0)3866; RV32IA-TSO-NEXT:    bnez a4, .LBB20_13867; RV32IA-TSO-NEXT:  .LBB20_3:3868; RV32IA-TSO-NEXT:    ret3869;3870; RV64I-LABEL: cmpxchg_i32_monotonic_monotonic:3871; RV64I:       # %bb.0:3872; RV64I-NEXT:    addi sp, sp, -163873; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3874; RV64I-NEXT:    sw a1, 4(sp)3875; RV64I-NEXT:    addi a1, sp, 43876; RV64I-NEXT:    li a3, 03877; RV64I-NEXT:    li a4, 03878; RV64I-NEXT:    call __atomic_compare_exchange_43879; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3880; RV64I-NEXT:    addi sp, sp, 163881; RV64I-NEXT:    ret3882;3883; RV64IA-WMO-LABEL: cmpxchg_i32_monotonic_monotonic:3884; RV64IA-WMO:       # %bb.0:3885; RV64IA-WMO-NEXT:    sext.w a1, a13886; RV64IA-WMO-NEXT:  .LBB20_1: # =>This Inner Loop Header: Depth=13887; RV64IA-WMO-NEXT:    lr.w a3, (a0)3888; RV64IA-WMO-NEXT:    bne a3, a1, .LBB20_33889; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB20_1 Depth=13890; RV64IA-WMO-NEXT:    sc.w a4, a2, (a0)3891; RV64IA-WMO-NEXT:    bnez a4, .LBB20_13892; RV64IA-WMO-NEXT:  .LBB20_3:3893; RV64IA-WMO-NEXT:    ret3894;3895; RV64IA-ZACAS-LABEL: cmpxchg_i32_monotonic_monotonic:3896; RV64IA-ZACAS:       # %bb.0:3897; RV64IA-ZACAS-NEXT:    amocas.w a1, a2, (a0)3898; RV64IA-ZACAS-NEXT:    ret3899;3900; RV64IA-ZABHA-LABEL: cmpxchg_i32_monotonic_monotonic:3901; RV64IA-ZABHA:       # %bb.0:3902; RV64IA-ZABHA-NEXT:    amocas.w a1, a2, (a0)3903; RV64IA-ZABHA-NEXT:    ret3904;3905; RV64IA-TSO-LABEL: cmpxchg_i32_monotonic_monotonic:3906; RV64IA-TSO:       # %bb.0:3907; RV64IA-TSO-NEXT:    sext.w a1, a13908; RV64IA-TSO-NEXT:  .LBB20_1: # =>This Inner Loop Header: Depth=13909; RV64IA-TSO-NEXT:    lr.w a3, (a0)3910; RV64IA-TSO-NEXT:    bne a3, a1, .LBB20_33911; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB20_1 Depth=13912; RV64IA-TSO-NEXT:    sc.w a4, a2, (a0)3913; RV64IA-TSO-NEXT:    bnez a4, .LBB20_13914; RV64IA-TSO-NEXT:  .LBB20_3:3915; RV64IA-TSO-NEXT:    ret3916  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val monotonic monotonic3917  ret void3918}3919 3920define void @cmpxchg_i32_acquire_monotonic(ptr %ptr, i32 %cmp, i32 %val) nounwind {3921; RV32I-LABEL: cmpxchg_i32_acquire_monotonic:3922; RV32I:       # %bb.0:3923; RV32I-NEXT:    addi sp, sp, -163924; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3925; RV32I-NEXT:    sw a1, 8(sp)3926; RV32I-NEXT:    addi a1, sp, 83927; RV32I-NEXT:    li a3, 23928; RV32I-NEXT:    li a4, 03929; RV32I-NEXT:    call __atomic_compare_exchange_43930; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3931; RV32I-NEXT:    addi sp, sp, 163932; RV32I-NEXT:    ret3933;3934; RV32IA-WMO-LABEL: cmpxchg_i32_acquire_monotonic:3935; RV32IA-WMO:       # %bb.0:3936; RV32IA-WMO-NEXT:  .LBB21_1: # =>This Inner Loop Header: Depth=13937; RV32IA-WMO-NEXT:    lr.w.aq a3, (a0)3938; RV32IA-WMO-NEXT:    bne a3, a1, .LBB21_33939; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB21_1 Depth=13940; RV32IA-WMO-NEXT:    sc.w a4, a2, (a0)3941; RV32IA-WMO-NEXT:    bnez a4, .LBB21_13942; RV32IA-WMO-NEXT:  .LBB21_3:3943; RV32IA-WMO-NEXT:    ret3944;3945; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_acquire_monotonic:3946; RV32IA-WMO-ZACAS:       # %bb.0:3947; RV32IA-WMO-ZACAS-NEXT:    amocas.w.aq a1, a2, (a0)3948; RV32IA-WMO-ZACAS-NEXT:    ret3949;3950; RV32IA-TSO-LABEL: cmpxchg_i32_acquire_monotonic:3951; RV32IA-TSO:       # %bb.0:3952; RV32IA-TSO-NEXT:  .LBB21_1: # =>This Inner Loop Header: Depth=13953; RV32IA-TSO-NEXT:    lr.w a3, (a0)3954; RV32IA-TSO-NEXT:    bne a3, a1, .LBB21_33955; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB21_1 Depth=13956; RV32IA-TSO-NEXT:    sc.w a4, a2, (a0)3957; RV32IA-TSO-NEXT:    bnez a4, .LBB21_13958; RV32IA-TSO-NEXT:  .LBB21_3:3959; RV32IA-TSO-NEXT:    ret3960;3961; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_acquire_monotonic:3962; RV32IA-TSO-ZACAS:       # %bb.0:3963; RV32IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)3964; RV32IA-TSO-ZACAS-NEXT:    ret3965;3966; RV64I-LABEL: cmpxchg_i32_acquire_monotonic:3967; RV64I:       # %bb.0:3968; RV64I-NEXT:    addi sp, sp, -163969; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3970; RV64I-NEXT:    sw a1, 4(sp)3971; RV64I-NEXT:    addi a1, sp, 43972; RV64I-NEXT:    li a3, 23973; RV64I-NEXT:    li a4, 03974; RV64I-NEXT:    call __atomic_compare_exchange_43975; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3976; RV64I-NEXT:    addi sp, sp, 163977; RV64I-NEXT:    ret3978;3979; RV64IA-WMO-LABEL: cmpxchg_i32_acquire_monotonic:3980; RV64IA-WMO:       # %bb.0:3981; RV64IA-WMO-NEXT:    sext.w a1, a13982; RV64IA-WMO-NEXT:  .LBB21_1: # =>This Inner Loop Header: Depth=13983; RV64IA-WMO-NEXT:    lr.w.aq a3, (a0)3984; RV64IA-WMO-NEXT:    bne a3, a1, .LBB21_33985; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB21_1 Depth=13986; RV64IA-WMO-NEXT:    sc.w a4, a2, (a0)3987; RV64IA-WMO-NEXT:    bnez a4, .LBB21_13988; RV64IA-WMO-NEXT:  .LBB21_3:3989; RV64IA-WMO-NEXT:    ret3990;3991; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_acquire_monotonic:3992; RV64IA-WMO-ZACAS:       # %bb.0:3993; RV64IA-WMO-ZACAS-NEXT:    amocas.w.aq a1, a2, (a0)3994; RV64IA-WMO-ZACAS-NEXT:    ret3995;3996; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_acquire_monotonic:3997; RV64IA-WMO-ZABHA:       # %bb.0:3998; RV64IA-WMO-ZABHA-NEXT:    amocas.w.aq a1, a2, (a0)3999; RV64IA-WMO-ZABHA-NEXT:    ret4000;4001; RV64IA-TSO-LABEL: cmpxchg_i32_acquire_monotonic:4002; RV64IA-TSO:       # %bb.0:4003; RV64IA-TSO-NEXT:    sext.w a1, a14004; RV64IA-TSO-NEXT:  .LBB21_1: # =>This Inner Loop Header: Depth=14005; RV64IA-TSO-NEXT:    lr.w a3, (a0)4006; RV64IA-TSO-NEXT:    bne a3, a1, .LBB21_34007; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB21_1 Depth=14008; RV64IA-TSO-NEXT:    sc.w a4, a2, (a0)4009; RV64IA-TSO-NEXT:    bnez a4, .LBB21_14010; RV64IA-TSO-NEXT:  .LBB21_3:4011; RV64IA-TSO-NEXT:    ret4012;4013; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_acquire_monotonic:4014; RV64IA-TSO-ZACAS:       # %bb.0:4015; RV64IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4016; RV64IA-TSO-ZACAS-NEXT:    ret4017;4018; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_acquire_monotonic:4019; RV64IA-TSO-ZABHA:       # %bb.0:4020; RV64IA-TSO-ZABHA-NEXT:    amocas.w a1, a2, (a0)4021; RV64IA-TSO-ZABHA-NEXT:    ret4022  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val acquire monotonic4023  ret void4024}4025 4026define void @cmpxchg_i32_acquire_acquire(ptr %ptr, i32 %cmp, i32 %val) nounwind {4027; RV32I-LABEL: cmpxchg_i32_acquire_acquire:4028; RV32I:       # %bb.0:4029; RV32I-NEXT:    addi sp, sp, -164030; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4031; RV32I-NEXT:    sw a1, 8(sp)4032; RV32I-NEXT:    addi a1, sp, 84033; RV32I-NEXT:    li a3, 24034; RV32I-NEXT:    li a4, 24035; RV32I-NEXT:    call __atomic_compare_exchange_44036; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4037; RV32I-NEXT:    addi sp, sp, 164038; RV32I-NEXT:    ret4039;4040; RV32IA-WMO-LABEL: cmpxchg_i32_acquire_acquire:4041; RV32IA-WMO:       # %bb.0:4042; RV32IA-WMO-NEXT:  .LBB22_1: # =>This Inner Loop Header: Depth=14043; RV32IA-WMO-NEXT:    lr.w.aq a3, (a0)4044; RV32IA-WMO-NEXT:    bne a3, a1, .LBB22_34045; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB22_1 Depth=14046; RV32IA-WMO-NEXT:    sc.w a4, a2, (a0)4047; RV32IA-WMO-NEXT:    bnez a4, .LBB22_14048; RV32IA-WMO-NEXT:  .LBB22_3:4049; RV32IA-WMO-NEXT:    ret4050;4051; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_acquire_acquire:4052; RV32IA-WMO-ZACAS:       # %bb.0:4053; RV32IA-WMO-ZACAS-NEXT:    amocas.w.aq a1, a2, (a0)4054; RV32IA-WMO-ZACAS-NEXT:    ret4055;4056; RV32IA-TSO-LABEL: cmpxchg_i32_acquire_acquire:4057; RV32IA-TSO:       # %bb.0:4058; RV32IA-TSO-NEXT:  .LBB22_1: # =>This Inner Loop Header: Depth=14059; RV32IA-TSO-NEXT:    lr.w a3, (a0)4060; RV32IA-TSO-NEXT:    bne a3, a1, .LBB22_34061; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB22_1 Depth=14062; RV32IA-TSO-NEXT:    sc.w a4, a2, (a0)4063; RV32IA-TSO-NEXT:    bnez a4, .LBB22_14064; RV32IA-TSO-NEXT:  .LBB22_3:4065; RV32IA-TSO-NEXT:    ret4066;4067; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_acquire_acquire:4068; RV32IA-TSO-ZACAS:       # %bb.0:4069; RV32IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4070; RV32IA-TSO-ZACAS-NEXT:    ret4071;4072; RV64I-LABEL: cmpxchg_i32_acquire_acquire:4073; RV64I:       # %bb.0:4074; RV64I-NEXT:    addi sp, sp, -164075; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4076; RV64I-NEXT:    sw a1, 4(sp)4077; RV64I-NEXT:    addi a1, sp, 44078; RV64I-NEXT:    li a3, 24079; RV64I-NEXT:    li a4, 24080; RV64I-NEXT:    call __atomic_compare_exchange_44081; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4082; RV64I-NEXT:    addi sp, sp, 164083; RV64I-NEXT:    ret4084;4085; RV64IA-WMO-LABEL: cmpxchg_i32_acquire_acquire:4086; RV64IA-WMO:       # %bb.0:4087; RV64IA-WMO-NEXT:    sext.w a1, a14088; RV64IA-WMO-NEXT:  .LBB22_1: # =>This Inner Loop Header: Depth=14089; RV64IA-WMO-NEXT:    lr.w.aq a3, (a0)4090; RV64IA-WMO-NEXT:    bne a3, a1, .LBB22_34091; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB22_1 Depth=14092; RV64IA-WMO-NEXT:    sc.w a4, a2, (a0)4093; RV64IA-WMO-NEXT:    bnez a4, .LBB22_14094; RV64IA-WMO-NEXT:  .LBB22_3:4095; RV64IA-WMO-NEXT:    ret4096;4097; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_acquire_acquire:4098; RV64IA-WMO-ZACAS:       # %bb.0:4099; RV64IA-WMO-ZACAS-NEXT:    amocas.w.aq a1, a2, (a0)4100; RV64IA-WMO-ZACAS-NEXT:    ret4101;4102; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_acquire_acquire:4103; RV64IA-WMO-ZABHA:       # %bb.0:4104; RV64IA-WMO-ZABHA-NEXT:    amocas.w.aq a1, a2, (a0)4105; RV64IA-WMO-ZABHA-NEXT:    ret4106;4107; RV64IA-TSO-LABEL: cmpxchg_i32_acquire_acquire:4108; RV64IA-TSO:       # %bb.0:4109; RV64IA-TSO-NEXT:    sext.w a1, a14110; RV64IA-TSO-NEXT:  .LBB22_1: # =>This Inner Loop Header: Depth=14111; RV64IA-TSO-NEXT:    lr.w a3, (a0)4112; RV64IA-TSO-NEXT:    bne a3, a1, .LBB22_34113; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB22_1 Depth=14114; RV64IA-TSO-NEXT:    sc.w a4, a2, (a0)4115; RV64IA-TSO-NEXT:    bnez a4, .LBB22_14116; RV64IA-TSO-NEXT:  .LBB22_3:4117; RV64IA-TSO-NEXT:    ret4118;4119; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_acquire_acquire:4120; RV64IA-TSO-ZACAS:       # %bb.0:4121; RV64IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4122; RV64IA-TSO-ZACAS-NEXT:    ret4123;4124; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_acquire_acquire:4125; RV64IA-TSO-ZABHA:       # %bb.0:4126; RV64IA-TSO-ZABHA-NEXT:    amocas.w a1, a2, (a0)4127; RV64IA-TSO-ZABHA-NEXT:    ret4128  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val acquire acquire4129  ret void4130}4131 4132define void @cmpxchg_i32_release_monotonic(ptr %ptr, i32 %cmp, i32 %val) nounwind {4133; RV32I-LABEL: cmpxchg_i32_release_monotonic:4134; RV32I:       # %bb.0:4135; RV32I-NEXT:    addi sp, sp, -164136; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4137; RV32I-NEXT:    sw a1, 8(sp)4138; RV32I-NEXT:    addi a1, sp, 84139; RV32I-NEXT:    li a3, 34140; RV32I-NEXT:    li a4, 04141; RV32I-NEXT:    call __atomic_compare_exchange_44142; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4143; RV32I-NEXT:    addi sp, sp, 164144; RV32I-NEXT:    ret4145;4146; RV32IA-WMO-LABEL: cmpxchg_i32_release_monotonic:4147; RV32IA-WMO:       # %bb.0:4148; RV32IA-WMO-NEXT:  .LBB23_1: # =>This Inner Loop Header: Depth=14149; RV32IA-WMO-NEXT:    lr.w a3, (a0)4150; RV32IA-WMO-NEXT:    bne a3, a1, .LBB23_34151; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB23_1 Depth=14152; RV32IA-WMO-NEXT:    sc.w.rl a4, a2, (a0)4153; RV32IA-WMO-NEXT:    bnez a4, .LBB23_14154; RV32IA-WMO-NEXT:  .LBB23_3:4155; RV32IA-WMO-NEXT:    ret4156;4157; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_release_monotonic:4158; RV32IA-WMO-ZACAS:       # %bb.0:4159; RV32IA-WMO-ZACAS-NEXT:    amocas.w.rl a1, a2, (a0)4160; RV32IA-WMO-ZACAS-NEXT:    ret4161;4162; RV32IA-TSO-LABEL: cmpxchg_i32_release_monotonic:4163; RV32IA-TSO:       # %bb.0:4164; RV32IA-TSO-NEXT:  .LBB23_1: # =>This Inner Loop Header: Depth=14165; RV32IA-TSO-NEXT:    lr.w a3, (a0)4166; RV32IA-TSO-NEXT:    bne a3, a1, .LBB23_34167; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB23_1 Depth=14168; RV32IA-TSO-NEXT:    sc.w a4, a2, (a0)4169; RV32IA-TSO-NEXT:    bnez a4, .LBB23_14170; RV32IA-TSO-NEXT:  .LBB23_3:4171; RV32IA-TSO-NEXT:    ret4172;4173; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_release_monotonic:4174; RV32IA-TSO-ZACAS:       # %bb.0:4175; RV32IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4176; RV32IA-TSO-ZACAS-NEXT:    ret4177;4178; RV64I-LABEL: cmpxchg_i32_release_monotonic:4179; RV64I:       # %bb.0:4180; RV64I-NEXT:    addi sp, sp, -164181; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4182; RV64I-NEXT:    sw a1, 4(sp)4183; RV64I-NEXT:    addi a1, sp, 44184; RV64I-NEXT:    li a3, 34185; RV64I-NEXT:    li a4, 04186; RV64I-NEXT:    call __atomic_compare_exchange_44187; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4188; RV64I-NEXT:    addi sp, sp, 164189; RV64I-NEXT:    ret4190;4191; RV64IA-WMO-LABEL: cmpxchg_i32_release_monotonic:4192; RV64IA-WMO:       # %bb.0:4193; RV64IA-WMO-NEXT:    sext.w a1, a14194; RV64IA-WMO-NEXT:  .LBB23_1: # =>This Inner Loop Header: Depth=14195; RV64IA-WMO-NEXT:    lr.w a3, (a0)4196; RV64IA-WMO-NEXT:    bne a3, a1, .LBB23_34197; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB23_1 Depth=14198; RV64IA-WMO-NEXT:    sc.w.rl a4, a2, (a0)4199; RV64IA-WMO-NEXT:    bnez a4, .LBB23_14200; RV64IA-WMO-NEXT:  .LBB23_3:4201; RV64IA-WMO-NEXT:    ret4202;4203; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_release_monotonic:4204; RV64IA-WMO-ZACAS:       # %bb.0:4205; RV64IA-WMO-ZACAS-NEXT:    amocas.w.rl a1, a2, (a0)4206; RV64IA-WMO-ZACAS-NEXT:    ret4207;4208; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_release_monotonic:4209; RV64IA-WMO-ZABHA:       # %bb.0:4210; RV64IA-WMO-ZABHA-NEXT:    amocas.w.rl a1, a2, (a0)4211; RV64IA-WMO-ZABHA-NEXT:    ret4212;4213; RV64IA-TSO-LABEL: cmpxchg_i32_release_monotonic:4214; RV64IA-TSO:       # %bb.0:4215; RV64IA-TSO-NEXT:    sext.w a1, a14216; RV64IA-TSO-NEXT:  .LBB23_1: # =>This Inner Loop Header: Depth=14217; RV64IA-TSO-NEXT:    lr.w a3, (a0)4218; RV64IA-TSO-NEXT:    bne a3, a1, .LBB23_34219; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB23_1 Depth=14220; RV64IA-TSO-NEXT:    sc.w a4, a2, (a0)4221; RV64IA-TSO-NEXT:    bnez a4, .LBB23_14222; RV64IA-TSO-NEXT:  .LBB23_3:4223; RV64IA-TSO-NEXT:    ret4224;4225; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_release_monotonic:4226; RV64IA-TSO-ZACAS:       # %bb.0:4227; RV64IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4228; RV64IA-TSO-ZACAS-NEXT:    ret4229;4230; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_release_monotonic:4231; RV64IA-TSO-ZABHA:       # %bb.0:4232; RV64IA-TSO-ZABHA-NEXT:    amocas.w a1, a2, (a0)4233; RV64IA-TSO-ZABHA-NEXT:    ret4234  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val release monotonic4235  ret void4236}4237 4238define void @cmpxchg_i32_release_acquire(ptr %ptr, i32 %cmp, i32 %val) nounwind {4239; RV32I-LABEL: cmpxchg_i32_release_acquire:4240; RV32I:       # %bb.0:4241; RV32I-NEXT:    addi sp, sp, -164242; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4243; RV32I-NEXT:    sw a1, 8(sp)4244; RV32I-NEXT:    addi a1, sp, 84245; RV32I-NEXT:    li a3, 34246; RV32I-NEXT:    li a4, 24247; RV32I-NEXT:    call __atomic_compare_exchange_44248; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4249; RV32I-NEXT:    addi sp, sp, 164250; RV32I-NEXT:    ret4251;4252; RV32IA-WMO-LABEL: cmpxchg_i32_release_acquire:4253; RV32IA-WMO:       # %bb.0:4254; RV32IA-WMO-NEXT:  .LBB24_1: # =>This Inner Loop Header: Depth=14255; RV32IA-WMO-NEXT:    lr.w.aq a3, (a0)4256; RV32IA-WMO-NEXT:    bne a3, a1, .LBB24_34257; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB24_1 Depth=14258; RV32IA-WMO-NEXT:    sc.w.rl a4, a2, (a0)4259; RV32IA-WMO-NEXT:    bnez a4, .LBB24_14260; RV32IA-WMO-NEXT:  .LBB24_3:4261; RV32IA-WMO-NEXT:    ret4262;4263; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_release_acquire:4264; RV32IA-WMO-ZACAS:       # %bb.0:4265; RV32IA-WMO-ZACAS-NEXT:    amocas.w.aqrl a1, a2, (a0)4266; RV32IA-WMO-ZACAS-NEXT:    ret4267;4268; RV32IA-TSO-LABEL: cmpxchg_i32_release_acquire:4269; RV32IA-TSO:       # %bb.0:4270; RV32IA-TSO-NEXT:  .LBB24_1: # =>This Inner Loop Header: Depth=14271; RV32IA-TSO-NEXT:    lr.w a3, (a0)4272; RV32IA-TSO-NEXT:    bne a3, a1, .LBB24_34273; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB24_1 Depth=14274; RV32IA-TSO-NEXT:    sc.w a4, a2, (a0)4275; RV32IA-TSO-NEXT:    bnez a4, .LBB24_14276; RV32IA-TSO-NEXT:  .LBB24_3:4277; RV32IA-TSO-NEXT:    ret4278;4279; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_release_acquire:4280; RV32IA-TSO-ZACAS:       # %bb.0:4281; RV32IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4282; RV32IA-TSO-ZACAS-NEXT:    ret4283;4284; RV64I-LABEL: cmpxchg_i32_release_acquire:4285; RV64I:       # %bb.0:4286; RV64I-NEXT:    addi sp, sp, -164287; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4288; RV64I-NEXT:    sw a1, 4(sp)4289; RV64I-NEXT:    addi a1, sp, 44290; RV64I-NEXT:    li a3, 34291; RV64I-NEXT:    li a4, 24292; RV64I-NEXT:    call __atomic_compare_exchange_44293; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4294; RV64I-NEXT:    addi sp, sp, 164295; RV64I-NEXT:    ret4296;4297; RV64IA-WMO-LABEL: cmpxchg_i32_release_acquire:4298; RV64IA-WMO:       # %bb.0:4299; RV64IA-WMO-NEXT:    sext.w a1, a14300; RV64IA-WMO-NEXT:  .LBB24_1: # =>This Inner Loop Header: Depth=14301; RV64IA-WMO-NEXT:    lr.w.aq a3, (a0)4302; RV64IA-WMO-NEXT:    bne a3, a1, .LBB24_34303; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB24_1 Depth=14304; RV64IA-WMO-NEXT:    sc.w.rl a4, a2, (a0)4305; RV64IA-WMO-NEXT:    bnez a4, .LBB24_14306; RV64IA-WMO-NEXT:  .LBB24_3:4307; RV64IA-WMO-NEXT:    ret4308;4309; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_release_acquire:4310; RV64IA-WMO-ZACAS:       # %bb.0:4311; RV64IA-WMO-ZACAS-NEXT:    amocas.w.aqrl a1, a2, (a0)4312; RV64IA-WMO-ZACAS-NEXT:    ret4313;4314; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_release_acquire:4315; RV64IA-WMO-ZABHA:       # %bb.0:4316; RV64IA-WMO-ZABHA-NEXT:    amocas.w.aqrl a1, a2, (a0)4317; RV64IA-WMO-ZABHA-NEXT:    ret4318;4319; RV64IA-TSO-LABEL: cmpxchg_i32_release_acquire:4320; RV64IA-TSO:       # %bb.0:4321; RV64IA-TSO-NEXT:    sext.w a1, a14322; RV64IA-TSO-NEXT:  .LBB24_1: # =>This Inner Loop Header: Depth=14323; RV64IA-TSO-NEXT:    lr.w a3, (a0)4324; RV64IA-TSO-NEXT:    bne a3, a1, .LBB24_34325; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB24_1 Depth=14326; RV64IA-TSO-NEXT:    sc.w a4, a2, (a0)4327; RV64IA-TSO-NEXT:    bnez a4, .LBB24_14328; RV64IA-TSO-NEXT:  .LBB24_3:4329; RV64IA-TSO-NEXT:    ret4330;4331; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_release_acquire:4332; RV64IA-TSO-ZACAS:       # %bb.0:4333; RV64IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4334; RV64IA-TSO-ZACAS-NEXT:    ret4335;4336; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_release_acquire:4337; RV64IA-TSO-ZABHA:       # %bb.0:4338; RV64IA-TSO-ZABHA-NEXT:    amocas.w a1, a2, (a0)4339; RV64IA-TSO-ZABHA-NEXT:    ret4340  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val release acquire4341  ret void4342}4343 4344define void @cmpxchg_i32_acq_rel_monotonic(ptr %ptr, i32 %cmp, i32 %val) nounwind {4345; RV32I-LABEL: cmpxchg_i32_acq_rel_monotonic:4346; RV32I:       # %bb.0:4347; RV32I-NEXT:    addi sp, sp, -164348; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4349; RV32I-NEXT:    sw a1, 8(sp)4350; RV32I-NEXT:    addi a1, sp, 84351; RV32I-NEXT:    li a3, 44352; RV32I-NEXT:    li a4, 04353; RV32I-NEXT:    call __atomic_compare_exchange_44354; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4355; RV32I-NEXT:    addi sp, sp, 164356; RV32I-NEXT:    ret4357;4358; RV32IA-WMO-LABEL: cmpxchg_i32_acq_rel_monotonic:4359; RV32IA-WMO:       # %bb.0:4360; RV32IA-WMO-NEXT:  .LBB25_1: # =>This Inner Loop Header: Depth=14361; RV32IA-WMO-NEXT:    lr.w.aq a3, (a0)4362; RV32IA-WMO-NEXT:    bne a3, a1, .LBB25_34363; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB25_1 Depth=14364; RV32IA-WMO-NEXT:    sc.w.rl a4, a2, (a0)4365; RV32IA-WMO-NEXT:    bnez a4, .LBB25_14366; RV32IA-WMO-NEXT:  .LBB25_3:4367; RV32IA-WMO-NEXT:    ret4368;4369; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_acq_rel_monotonic:4370; RV32IA-WMO-ZACAS:       # %bb.0:4371; RV32IA-WMO-ZACAS-NEXT:    amocas.w.aqrl a1, a2, (a0)4372; RV32IA-WMO-ZACAS-NEXT:    ret4373;4374; RV32IA-TSO-LABEL: cmpxchg_i32_acq_rel_monotonic:4375; RV32IA-TSO:       # %bb.0:4376; RV32IA-TSO-NEXT:  .LBB25_1: # =>This Inner Loop Header: Depth=14377; RV32IA-TSO-NEXT:    lr.w a3, (a0)4378; RV32IA-TSO-NEXT:    bne a3, a1, .LBB25_34379; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB25_1 Depth=14380; RV32IA-TSO-NEXT:    sc.w a4, a2, (a0)4381; RV32IA-TSO-NEXT:    bnez a4, .LBB25_14382; RV32IA-TSO-NEXT:  .LBB25_3:4383; RV32IA-TSO-NEXT:    ret4384;4385; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_acq_rel_monotonic:4386; RV32IA-TSO-ZACAS:       # %bb.0:4387; RV32IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4388; RV32IA-TSO-ZACAS-NEXT:    ret4389;4390; RV64I-LABEL: cmpxchg_i32_acq_rel_monotonic:4391; RV64I:       # %bb.0:4392; RV64I-NEXT:    addi sp, sp, -164393; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4394; RV64I-NEXT:    sw a1, 4(sp)4395; RV64I-NEXT:    addi a1, sp, 44396; RV64I-NEXT:    li a3, 44397; RV64I-NEXT:    li a4, 04398; RV64I-NEXT:    call __atomic_compare_exchange_44399; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4400; RV64I-NEXT:    addi sp, sp, 164401; RV64I-NEXT:    ret4402;4403; RV64IA-WMO-LABEL: cmpxchg_i32_acq_rel_monotonic:4404; RV64IA-WMO:       # %bb.0:4405; RV64IA-WMO-NEXT:    sext.w a1, a14406; RV64IA-WMO-NEXT:  .LBB25_1: # =>This Inner Loop Header: Depth=14407; RV64IA-WMO-NEXT:    lr.w.aq a3, (a0)4408; RV64IA-WMO-NEXT:    bne a3, a1, .LBB25_34409; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB25_1 Depth=14410; RV64IA-WMO-NEXT:    sc.w.rl a4, a2, (a0)4411; RV64IA-WMO-NEXT:    bnez a4, .LBB25_14412; RV64IA-WMO-NEXT:  .LBB25_3:4413; RV64IA-WMO-NEXT:    ret4414;4415; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_acq_rel_monotonic:4416; RV64IA-WMO-ZACAS:       # %bb.0:4417; RV64IA-WMO-ZACAS-NEXT:    amocas.w.aqrl a1, a2, (a0)4418; RV64IA-WMO-ZACAS-NEXT:    ret4419;4420; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_acq_rel_monotonic:4421; RV64IA-WMO-ZABHA:       # %bb.0:4422; RV64IA-WMO-ZABHA-NEXT:    amocas.w.aqrl a1, a2, (a0)4423; RV64IA-WMO-ZABHA-NEXT:    ret4424;4425; RV64IA-TSO-LABEL: cmpxchg_i32_acq_rel_monotonic:4426; RV64IA-TSO:       # %bb.0:4427; RV64IA-TSO-NEXT:    sext.w a1, a14428; RV64IA-TSO-NEXT:  .LBB25_1: # =>This Inner Loop Header: Depth=14429; RV64IA-TSO-NEXT:    lr.w a3, (a0)4430; RV64IA-TSO-NEXT:    bne a3, a1, .LBB25_34431; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB25_1 Depth=14432; RV64IA-TSO-NEXT:    sc.w a4, a2, (a0)4433; RV64IA-TSO-NEXT:    bnez a4, .LBB25_14434; RV64IA-TSO-NEXT:  .LBB25_3:4435; RV64IA-TSO-NEXT:    ret4436;4437; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_acq_rel_monotonic:4438; RV64IA-TSO-ZACAS:       # %bb.0:4439; RV64IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4440; RV64IA-TSO-ZACAS-NEXT:    ret4441;4442; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_acq_rel_monotonic:4443; RV64IA-TSO-ZABHA:       # %bb.0:4444; RV64IA-TSO-ZABHA-NEXT:    amocas.w a1, a2, (a0)4445; RV64IA-TSO-ZABHA-NEXT:    ret4446  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val acq_rel monotonic4447  ret void4448}4449 4450define void @cmpxchg_i32_acq_rel_acquire(ptr %ptr, i32 %cmp, i32 %val) nounwind {4451; RV32I-LABEL: cmpxchg_i32_acq_rel_acquire:4452; RV32I:       # %bb.0:4453; RV32I-NEXT:    addi sp, sp, -164454; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4455; RV32I-NEXT:    sw a1, 8(sp)4456; RV32I-NEXT:    addi a1, sp, 84457; RV32I-NEXT:    li a3, 44458; RV32I-NEXT:    li a4, 24459; RV32I-NEXT:    call __atomic_compare_exchange_44460; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4461; RV32I-NEXT:    addi sp, sp, 164462; RV32I-NEXT:    ret4463;4464; RV32IA-WMO-LABEL: cmpxchg_i32_acq_rel_acquire:4465; RV32IA-WMO:       # %bb.0:4466; RV32IA-WMO-NEXT:  .LBB26_1: # =>This Inner Loop Header: Depth=14467; RV32IA-WMO-NEXT:    lr.w.aq a3, (a0)4468; RV32IA-WMO-NEXT:    bne a3, a1, .LBB26_34469; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB26_1 Depth=14470; RV32IA-WMO-NEXT:    sc.w.rl a4, a2, (a0)4471; RV32IA-WMO-NEXT:    bnez a4, .LBB26_14472; RV32IA-WMO-NEXT:  .LBB26_3:4473; RV32IA-WMO-NEXT:    ret4474;4475; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_acq_rel_acquire:4476; RV32IA-WMO-ZACAS:       # %bb.0:4477; RV32IA-WMO-ZACAS-NEXT:    amocas.w.aqrl a1, a2, (a0)4478; RV32IA-WMO-ZACAS-NEXT:    ret4479;4480; RV32IA-TSO-LABEL: cmpxchg_i32_acq_rel_acquire:4481; RV32IA-TSO:       # %bb.0:4482; RV32IA-TSO-NEXT:  .LBB26_1: # =>This Inner Loop Header: Depth=14483; RV32IA-TSO-NEXT:    lr.w a3, (a0)4484; RV32IA-TSO-NEXT:    bne a3, a1, .LBB26_34485; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB26_1 Depth=14486; RV32IA-TSO-NEXT:    sc.w a4, a2, (a0)4487; RV32IA-TSO-NEXT:    bnez a4, .LBB26_14488; RV32IA-TSO-NEXT:  .LBB26_3:4489; RV32IA-TSO-NEXT:    ret4490;4491; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_acq_rel_acquire:4492; RV32IA-TSO-ZACAS:       # %bb.0:4493; RV32IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4494; RV32IA-TSO-ZACAS-NEXT:    ret4495;4496; RV64I-LABEL: cmpxchg_i32_acq_rel_acquire:4497; RV64I:       # %bb.0:4498; RV64I-NEXT:    addi sp, sp, -164499; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4500; RV64I-NEXT:    sw a1, 4(sp)4501; RV64I-NEXT:    addi a1, sp, 44502; RV64I-NEXT:    li a3, 44503; RV64I-NEXT:    li a4, 24504; RV64I-NEXT:    call __atomic_compare_exchange_44505; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4506; RV64I-NEXT:    addi sp, sp, 164507; RV64I-NEXT:    ret4508;4509; RV64IA-WMO-LABEL: cmpxchg_i32_acq_rel_acquire:4510; RV64IA-WMO:       # %bb.0:4511; RV64IA-WMO-NEXT:    sext.w a1, a14512; RV64IA-WMO-NEXT:  .LBB26_1: # =>This Inner Loop Header: Depth=14513; RV64IA-WMO-NEXT:    lr.w.aq a3, (a0)4514; RV64IA-WMO-NEXT:    bne a3, a1, .LBB26_34515; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB26_1 Depth=14516; RV64IA-WMO-NEXT:    sc.w.rl a4, a2, (a0)4517; RV64IA-WMO-NEXT:    bnez a4, .LBB26_14518; RV64IA-WMO-NEXT:  .LBB26_3:4519; RV64IA-WMO-NEXT:    ret4520;4521; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_acq_rel_acquire:4522; RV64IA-WMO-ZACAS:       # %bb.0:4523; RV64IA-WMO-ZACAS-NEXT:    amocas.w.aqrl a1, a2, (a0)4524; RV64IA-WMO-ZACAS-NEXT:    ret4525;4526; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_acq_rel_acquire:4527; RV64IA-WMO-ZABHA:       # %bb.0:4528; RV64IA-WMO-ZABHA-NEXT:    amocas.w.aqrl a1, a2, (a0)4529; RV64IA-WMO-ZABHA-NEXT:    ret4530;4531; RV64IA-TSO-LABEL: cmpxchg_i32_acq_rel_acquire:4532; RV64IA-TSO:       # %bb.0:4533; RV64IA-TSO-NEXT:    sext.w a1, a14534; RV64IA-TSO-NEXT:  .LBB26_1: # =>This Inner Loop Header: Depth=14535; RV64IA-TSO-NEXT:    lr.w a3, (a0)4536; RV64IA-TSO-NEXT:    bne a3, a1, .LBB26_34537; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB26_1 Depth=14538; RV64IA-TSO-NEXT:    sc.w a4, a2, (a0)4539; RV64IA-TSO-NEXT:    bnez a4, .LBB26_14540; RV64IA-TSO-NEXT:  .LBB26_3:4541; RV64IA-TSO-NEXT:    ret4542;4543; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_acq_rel_acquire:4544; RV64IA-TSO-ZACAS:       # %bb.0:4545; RV64IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4546; RV64IA-TSO-ZACAS-NEXT:    ret4547;4548; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_acq_rel_acquire:4549; RV64IA-TSO-ZABHA:       # %bb.0:4550; RV64IA-TSO-ZABHA-NEXT:    amocas.w a1, a2, (a0)4551; RV64IA-TSO-ZABHA-NEXT:    ret4552  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val acq_rel acquire4553  ret void4554}4555 4556define void @cmpxchg_i32_seq_cst_monotonic(ptr %ptr, i32 %cmp, i32 %val) nounwind {4557; RV32I-LABEL: cmpxchg_i32_seq_cst_monotonic:4558; RV32I:       # %bb.0:4559; RV32I-NEXT:    addi sp, sp, -164560; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4561; RV32I-NEXT:    sw a1, 8(sp)4562; RV32I-NEXT:    addi a1, sp, 84563; RV32I-NEXT:    li a3, 54564; RV32I-NEXT:    li a4, 04565; RV32I-NEXT:    call __atomic_compare_exchange_44566; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4567; RV32I-NEXT:    addi sp, sp, 164568; RV32I-NEXT:    ret4569;4570; RV32IA-WMO-LABEL: cmpxchg_i32_seq_cst_monotonic:4571; RV32IA-WMO:       # %bb.0:4572; RV32IA-WMO-NEXT:  .LBB27_1: # =>This Inner Loop Header: Depth=14573; RV32IA-WMO-NEXT:    lr.w.aqrl a3, (a0)4574; RV32IA-WMO-NEXT:    bne a3, a1, .LBB27_34575; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB27_1 Depth=14576; RV32IA-WMO-NEXT:    sc.w.rl a4, a2, (a0)4577; RV32IA-WMO-NEXT:    bnez a4, .LBB27_14578; RV32IA-WMO-NEXT:  .LBB27_3:4579; RV32IA-WMO-NEXT:    ret4580;4581; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_seq_cst_monotonic:4582; RV32IA-WMO-ZACAS:       # %bb.0:4583; RV32IA-WMO-ZACAS-NEXT:    amocas.w.aqrl a1, a2, (a0)4584; RV32IA-WMO-ZACAS-NEXT:    ret4585;4586; RV32IA-TSO-LABEL: cmpxchg_i32_seq_cst_monotonic:4587; RV32IA-TSO:       # %bb.0:4588; RV32IA-TSO-NEXT:  .LBB27_1: # =>This Inner Loop Header: Depth=14589; RV32IA-TSO-NEXT:    lr.w.aqrl a3, (a0)4590; RV32IA-TSO-NEXT:    bne a3, a1, .LBB27_34591; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB27_1 Depth=14592; RV32IA-TSO-NEXT:    sc.w.rl a4, a2, (a0)4593; RV32IA-TSO-NEXT:    bnez a4, .LBB27_14594; RV32IA-TSO-NEXT:  .LBB27_3:4595; RV32IA-TSO-NEXT:    ret4596;4597; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_seq_cst_monotonic:4598; RV32IA-TSO-ZACAS:       # %bb.0:4599; RV32IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4600; RV32IA-TSO-ZACAS-NEXT:    ret4601;4602; RV64I-LABEL: cmpxchg_i32_seq_cst_monotonic:4603; RV64I:       # %bb.0:4604; RV64I-NEXT:    addi sp, sp, -164605; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4606; RV64I-NEXT:    sw a1, 4(sp)4607; RV64I-NEXT:    addi a1, sp, 44608; RV64I-NEXT:    li a3, 54609; RV64I-NEXT:    li a4, 04610; RV64I-NEXT:    call __atomic_compare_exchange_44611; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4612; RV64I-NEXT:    addi sp, sp, 164613; RV64I-NEXT:    ret4614;4615; RV64IA-WMO-LABEL: cmpxchg_i32_seq_cst_monotonic:4616; RV64IA-WMO:       # %bb.0:4617; RV64IA-WMO-NEXT:    sext.w a1, a14618; RV64IA-WMO-NEXT:  .LBB27_1: # =>This Inner Loop Header: Depth=14619; RV64IA-WMO-NEXT:    lr.w.aqrl a3, (a0)4620; RV64IA-WMO-NEXT:    bne a3, a1, .LBB27_34621; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB27_1 Depth=14622; RV64IA-WMO-NEXT:    sc.w.rl a4, a2, (a0)4623; RV64IA-WMO-NEXT:    bnez a4, .LBB27_14624; RV64IA-WMO-NEXT:  .LBB27_3:4625; RV64IA-WMO-NEXT:    ret4626;4627; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_seq_cst_monotonic:4628; RV64IA-WMO-ZACAS:       # %bb.0:4629; RV64IA-WMO-ZACAS-NEXT:    amocas.w.aqrl a1, a2, (a0)4630; RV64IA-WMO-ZACAS-NEXT:    ret4631;4632; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_seq_cst_monotonic:4633; RV64IA-WMO-ZABHA:       # %bb.0:4634; RV64IA-WMO-ZABHA-NEXT:    amocas.w.aqrl a1, a2, (a0)4635; RV64IA-WMO-ZABHA-NEXT:    ret4636;4637; RV64IA-TSO-LABEL: cmpxchg_i32_seq_cst_monotonic:4638; RV64IA-TSO:       # %bb.0:4639; RV64IA-TSO-NEXT:    sext.w a1, a14640; RV64IA-TSO-NEXT:  .LBB27_1: # =>This Inner Loop Header: Depth=14641; RV64IA-TSO-NEXT:    lr.w.aqrl a3, (a0)4642; RV64IA-TSO-NEXT:    bne a3, a1, .LBB27_34643; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB27_1 Depth=14644; RV64IA-TSO-NEXT:    sc.w.rl a4, a2, (a0)4645; RV64IA-TSO-NEXT:    bnez a4, .LBB27_14646; RV64IA-TSO-NEXT:  .LBB27_3:4647; RV64IA-TSO-NEXT:    ret4648;4649; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_seq_cst_monotonic:4650; RV64IA-TSO-ZACAS:       # %bb.0:4651; RV64IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4652; RV64IA-TSO-ZACAS-NEXT:    ret4653;4654; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_seq_cst_monotonic:4655; RV64IA-TSO-ZABHA:       # %bb.0:4656; RV64IA-TSO-ZABHA-NEXT:    amocas.w a1, a2, (a0)4657; RV64IA-TSO-ZABHA-NEXT:    ret4658  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val seq_cst monotonic4659  ret void4660}4661 4662define void @cmpxchg_i32_seq_cst_acquire(ptr %ptr, i32 %cmp, i32 %val) nounwind {4663; RV32I-LABEL: cmpxchg_i32_seq_cst_acquire:4664; RV32I:       # %bb.0:4665; RV32I-NEXT:    addi sp, sp, -164666; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4667; RV32I-NEXT:    sw a1, 8(sp)4668; RV32I-NEXT:    addi a1, sp, 84669; RV32I-NEXT:    li a3, 54670; RV32I-NEXT:    li a4, 24671; RV32I-NEXT:    call __atomic_compare_exchange_44672; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4673; RV32I-NEXT:    addi sp, sp, 164674; RV32I-NEXT:    ret4675;4676; RV32IA-WMO-LABEL: cmpxchg_i32_seq_cst_acquire:4677; RV32IA-WMO:       # %bb.0:4678; RV32IA-WMO-NEXT:  .LBB28_1: # =>This Inner Loop Header: Depth=14679; RV32IA-WMO-NEXT:    lr.w.aqrl a3, (a0)4680; RV32IA-WMO-NEXT:    bne a3, a1, .LBB28_34681; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB28_1 Depth=14682; RV32IA-WMO-NEXT:    sc.w.rl a4, a2, (a0)4683; RV32IA-WMO-NEXT:    bnez a4, .LBB28_14684; RV32IA-WMO-NEXT:  .LBB28_3:4685; RV32IA-WMO-NEXT:    ret4686;4687; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_seq_cst_acquire:4688; RV32IA-WMO-ZACAS:       # %bb.0:4689; RV32IA-WMO-ZACAS-NEXT:    amocas.w.aqrl a1, a2, (a0)4690; RV32IA-WMO-ZACAS-NEXT:    ret4691;4692; RV32IA-TSO-LABEL: cmpxchg_i32_seq_cst_acquire:4693; RV32IA-TSO:       # %bb.0:4694; RV32IA-TSO-NEXT:  .LBB28_1: # =>This Inner Loop Header: Depth=14695; RV32IA-TSO-NEXT:    lr.w.aqrl a3, (a0)4696; RV32IA-TSO-NEXT:    bne a3, a1, .LBB28_34697; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB28_1 Depth=14698; RV32IA-TSO-NEXT:    sc.w.rl a4, a2, (a0)4699; RV32IA-TSO-NEXT:    bnez a4, .LBB28_14700; RV32IA-TSO-NEXT:  .LBB28_3:4701; RV32IA-TSO-NEXT:    ret4702;4703; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_seq_cst_acquire:4704; RV32IA-TSO-ZACAS:       # %bb.0:4705; RV32IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4706; RV32IA-TSO-ZACAS-NEXT:    ret4707;4708; RV64I-LABEL: cmpxchg_i32_seq_cst_acquire:4709; RV64I:       # %bb.0:4710; RV64I-NEXT:    addi sp, sp, -164711; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4712; RV64I-NEXT:    sw a1, 4(sp)4713; RV64I-NEXT:    addi a1, sp, 44714; RV64I-NEXT:    li a3, 54715; RV64I-NEXT:    li a4, 24716; RV64I-NEXT:    call __atomic_compare_exchange_44717; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4718; RV64I-NEXT:    addi sp, sp, 164719; RV64I-NEXT:    ret4720;4721; RV64IA-WMO-LABEL: cmpxchg_i32_seq_cst_acquire:4722; RV64IA-WMO:       # %bb.0:4723; RV64IA-WMO-NEXT:    sext.w a1, a14724; RV64IA-WMO-NEXT:  .LBB28_1: # =>This Inner Loop Header: Depth=14725; RV64IA-WMO-NEXT:    lr.w.aqrl a3, (a0)4726; RV64IA-WMO-NEXT:    bne a3, a1, .LBB28_34727; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB28_1 Depth=14728; RV64IA-WMO-NEXT:    sc.w.rl a4, a2, (a0)4729; RV64IA-WMO-NEXT:    bnez a4, .LBB28_14730; RV64IA-WMO-NEXT:  .LBB28_3:4731; RV64IA-WMO-NEXT:    ret4732;4733; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_seq_cst_acquire:4734; RV64IA-WMO-ZACAS:       # %bb.0:4735; RV64IA-WMO-ZACAS-NEXT:    amocas.w.aqrl a1, a2, (a0)4736; RV64IA-WMO-ZACAS-NEXT:    ret4737;4738; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_seq_cst_acquire:4739; RV64IA-WMO-ZABHA:       # %bb.0:4740; RV64IA-WMO-ZABHA-NEXT:    amocas.w.aqrl a1, a2, (a0)4741; RV64IA-WMO-ZABHA-NEXT:    ret4742;4743; RV64IA-TSO-LABEL: cmpxchg_i32_seq_cst_acquire:4744; RV64IA-TSO:       # %bb.0:4745; RV64IA-TSO-NEXT:    sext.w a1, a14746; RV64IA-TSO-NEXT:  .LBB28_1: # =>This Inner Loop Header: Depth=14747; RV64IA-TSO-NEXT:    lr.w.aqrl a3, (a0)4748; RV64IA-TSO-NEXT:    bne a3, a1, .LBB28_34749; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB28_1 Depth=14750; RV64IA-TSO-NEXT:    sc.w.rl a4, a2, (a0)4751; RV64IA-TSO-NEXT:    bnez a4, .LBB28_14752; RV64IA-TSO-NEXT:  .LBB28_3:4753; RV64IA-TSO-NEXT:    ret4754;4755; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_seq_cst_acquire:4756; RV64IA-TSO-ZACAS:       # %bb.0:4757; RV64IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4758; RV64IA-TSO-ZACAS-NEXT:    ret4759;4760; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_seq_cst_acquire:4761; RV64IA-TSO-ZABHA:       # %bb.0:4762; RV64IA-TSO-ZABHA-NEXT:    amocas.w a1, a2, (a0)4763; RV64IA-TSO-ZABHA-NEXT:    ret4764  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val seq_cst acquire4765  ret void4766}4767 4768define void @cmpxchg_i32_seq_cst_seq_cst(ptr %ptr, i32 %cmp, i32 %val) nounwind {4769; RV32I-LABEL: cmpxchg_i32_seq_cst_seq_cst:4770; RV32I:       # %bb.0:4771; RV32I-NEXT:    addi sp, sp, -164772; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4773; RV32I-NEXT:    sw a1, 8(sp)4774; RV32I-NEXT:    addi a1, sp, 84775; RV32I-NEXT:    li a3, 54776; RV32I-NEXT:    li a4, 54777; RV32I-NEXT:    call __atomic_compare_exchange_44778; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4779; RV32I-NEXT:    addi sp, sp, 164780; RV32I-NEXT:    ret4781;4782; RV32IA-WMO-LABEL: cmpxchg_i32_seq_cst_seq_cst:4783; RV32IA-WMO:       # %bb.0:4784; RV32IA-WMO-NEXT:  .LBB29_1: # =>This Inner Loop Header: Depth=14785; RV32IA-WMO-NEXT:    lr.w.aqrl a3, (a0)4786; RV32IA-WMO-NEXT:    bne a3, a1, .LBB29_34787; RV32IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB29_1 Depth=14788; RV32IA-WMO-NEXT:    sc.w.rl a4, a2, (a0)4789; RV32IA-WMO-NEXT:    bnez a4, .LBB29_14790; RV32IA-WMO-NEXT:  .LBB29_3:4791; RV32IA-WMO-NEXT:    ret4792;4793; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_seq_cst_seq_cst:4794; RV32IA-WMO-ZACAS:       # %bb.0:4795; RV32IA-WMO-ZACAS-NEXT:    fence rw, rw4796; RV32IA-WMO-ZACAS-NEXT:    amocas.w.aqrl a1, a2, (a0)4797; RV32IA-WMO-ZACAS-NEXT:    ret4798;4799; RV32IA-TSO-LABEL: cmpxchg_i32_seq_cst_seq_cst:4800; RV32IA-TSO:       # %bb.0:4801; RV32IA-TSO-NEXT:  .LBB29_1: # =>This Inner Loop Header: Depth=14802; RV32IA-TSO-NEXT:    lr.w.aqrl a3, (a0)4803; RV32IA-TSO-NEXT:    bne a3, a1, .LBB29_34804; RV32IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB29_1 Depth=14805; RV32IA-TSO-NEXT:    sc.w.rl a4, a2, (a0)4806; RV32IA-TSO-NEXT:    bnez a4, .LBB29_14807; RV32IA-TSO-NEXT:  .LBB29_3:4808; RV32IA-TSO-NEXT:    ret4809;4810; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_seq_cst_seq_cst:4811; RV32IA-TSO-ZACAS:       # %bb.0:4812; RV32IA-TSO-ZACAS-NEXT:    fence rw, rw4813; RV32IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4814; RV32IA-TSO-ZACAS-NEXT:    ret4815;4816; RV64I-LABEL: cmpxchg_i32_seq_cst_seq_cst:4817; RV64I:       # %bb.0:4818; RV64I-NEXT:    addi sp, sp, -164819; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4820; RV64I-NEXT:    sw a1, 4(sp)4821; RV64I-NEXT:    addi a1, sp, 44822; RV64I-NEXT:    li a3, 54823; RV64I-NEXT:    li a4, 54824; RV64I-NEXT:    call __atomic_compare_exchange_44825; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4826; RV64I-NEXT:    addi sp, sp, 164827; RV64I-NEXT:    ret4828;4829; RV64IA-WMO-LABEL: cmpxchg_i32_seq_cst_seq_cst:4830; RV64IA-WMO:       # %bb.0:4831; RV64IA-WMO-NEXT:    sext.w a1, a14832; RV64IA-WMO-NEXT:  .LBB29_1: # =>This Inner Loop Header: Depth=14833; RV64IA-WMO-NEXT:    lr.w.aqrl a3, (a0)4834; RV64IA-WMO-NEXT:    bne a3, a1, .LBB29_34835; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB29_1 Depth=14836; RV64IA-WMO-NEXT:    sc.w.rl a4, a2, (a0)4837; RV64IA-WMO-NEXT:    bnez a4, .LBB29_14838; RV64IA-WMO-NEXT:  .LBB29_3:4839; RV64IA-WMO-NEXT:    ret4840;4841; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_seq_cst_seq_cst:4842; RV64IA-WMO-ZACAS:       # %bb.0:4843; RV64IA-WMO-ZACAS-NEXT:    fence rw, rw4844; RV64IA-WMO-ZACAS-NEXT:    amocas.w.aqrl a1, a2, (a0)4845; RV64IA-WMO-ZACAS-NEXT:    ret4846;4847; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_seq_cst_seq_cst:4848; RV64IA-WMO-ZABHA:       # %bb.0:4849; RV64IA-WMO-ZABHA-NEXT:    fence rw, rw4850; RV64IA-WMO-ZABHA-NEXT:    amocas.w.aqrl a1, a2, (a0)4851; RV64IA-WMO-ZABHA-NEXT:    ret4852;4853; RV64IA-TSO-LABEL: cmpxchg_i32_seq_cst_seq_cst:4854; RV64IA-TSO:       # %bb.0:4855; RV64IA-TSO-NEXT:    sext.w a1, a14856; RV64IA-TSO-NEXT:  .LBB29_1: # =>This Inner Loop Header: Depth=14857; RV64IA-TSO-NEXT:    lr.w.aqrl a3, (a0)4858; RV64IA-TSO-NEXT:    bne a3, a1, .LBB29_34859; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB29_1 Depth=14860; RV64IA-TSO-NEXT:    sc.w.rl a4, a2, (a0)4861; RV64IA-TSO-NEXT:    bnez a4, .LBB29_14862; RV64IA-TSO-NEXT:  .LBB29_3:4863; RV64IA-TSO-NEXT:    ret4864;4865; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_seq_cst_seq_cst:4866; RV64IA-TSO-ZACAS:       # %bb.0:4867; RV64IA-TSO-ZACAS-NEXT:    fence rw, rw4868; RV64IA-TSO-ZACAS-NEXT:    amocas.w a1, a2, (a0)4869; RV64IA-TSO-ZACAS-NEXT:    ret4870;4871; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_seq_cst_seq_cst:4872; RV64IA-TSO-ZABHA:       # %bb.0:4873; RV64IA-TSO-ZABHA-NEXT:    fence rw, rw4874; RV64IA-TSO-ZABHA-NEXT:    amocas.w a1, a2, (a0)4875; RV64IA-TSO-ZABHA-NEXT:    ret4876  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val seq_cst seq_cst4877  ret void4878}4879 4880define void @cmpxchg_i64_monotonic_monotonic(ptr %ptr, i64 %cmp, i64 %val) nounwind {4881; RV32I-LABEL: cmpxchg_i64_monotonic_monotonic:4882; RV32I:       # %bb.0:4883; RV32I-NEXT:    addi sp, sp, -164884; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4885; RV32I-NEXT:    sw a1, 0(sp)4886; RV32I-NEXT:    sw a2, 4(sp)4887; RV32I-NEXT:    mv a1, sp4888; RV32I-NEXT:    mv a2, a34889; RV32I-NEXT:    mv a3, a44890; RV32I-NEXT:    li a4, 04891; RV32I-NEXT:    li a5, 04892; RV32I-NEXT:    call __atomic_compare_exchange_84893; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4894; RV32I-NEXT:    addi sp, sp, 164895; RV32I-NEXT:    ret4896;4897; RV32IA-LABEL: cmpxchg_i64_monotonic_monotonic:4898; RV32IA:       # %bb.0:4899; RV32IA-NEXT:    addi sp, sp, -164900; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4901; RV32IA-NEXT:    sw a1, 0(sp)4902; RV32IA-NEXT:    sw a2, 4(sp)4903; RV32IA-NEXT:    mv a1, sp4904; RV32IA-NEXT:    mv a2, a34905; RV32IA-NEXT:    mv a3, a44906; RV32IA-NEXT:    li a4, 04907; RV32IA-NEXT:    li a5, 04908; RV32IA-NEXT:    call __atomic_compare_exchange_84909; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4910; RV32IA-NEXT:    addi sp, sp, 164911; RV32IA-NEXT:    ret4912;4913; RV64I-LABEL: cmpxchg_i64_monotonic_monotonic:4914; RV64I:       # %bb.0:4915; RV64I-NEXT:    addi sp, sp, -164916; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4917; RV64I-NEXT:    sd a1, 0(sp)4918; RV64I-NEXT:    mv a1, sp4919; RV64I-NEXT:    li a3, 04920; RV64I-NEXT:    li a4, 04921; RV64I-NEXT:    call __atomic_compare_exchange_84922; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4923; RV64I-NEXT:    addi sp, sp, 164924; RV64I-NEXT:    ret4925;4926; RV64IA-WMO-LABEL: cmpxchg_i64_monotonic_monotonic:4927; RV64IA-WMO:       # %bb.0:4928; RV64IA-WMO-NEXT:  .LBB30_1: # =>This Inner Loop Header: Depth=14929; RV64IA-WMO-NEXT:    lr.d a3, (a0)4930; RV64IA-WMO-NEXT:    bne a3, a1, .LBB30_34931; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB30_1 Depth=14932; RV64IA-WMO-NEXT:    sc.d a4, a2, (a0)4933; RV64IA-WMO-NEXT:    bnez a4, .LBB30_14934; RV64IA-WMO-NEXT:  .LBB30_3:4935; RV64IA-WMO-NEXT:    ret4936;4937; RV64IA-ZACAS-LABEL: cmpxchg_i64_monotonic_monotonic:4938; RV64IA-ZACAS:       # %bb.0:4939; RV64IA-ZACAS-NEXT:    amocas.d a1, a2, (a0)4940; RV64IA-ZACAS-NEXT:    ret4941;4942; RV64IA-ZABHA-LABEL: cmpxchg_i64_monotonic_monotonic:4943; RV64IA-ZABHA:       # %bb.0:4944; RV64IA-ZABHA-NEXT:    amocas.d a1, a2, (a0)4945; RV64IA-ZABHA-NEXT:    ret4946;4947; RV64IA-TSO-LABEL: cmpxchg_i64_monotonic_monotonic:4948; RV64IA-TSO:       # %bb.0:4949; RV64IA-TSO-NEXT:  .LBB30_1: # =>This Inner Loop Header: Depth=14950; RV64IA-TSO-NEXT:    lr.d a3, (a0)4951; RV64IA-TSO-NEXT:    bne a3, a1, .LBB30_34952; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB30_1 Depth=14953; RV64IA-TSO-NEXT:    sc.d a4, a2, (a0)4954; RV64IA-TSO-NEXT:    bnez a4, .LBB30_14955; RV64IA-TSO-NEXT:  .LBB30_3:4956; RV64IA-TSO-NEXT:    ret4957  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val monotonic monotonic4958  ret void4959}4960 4961define void @cmpxchg_i64_acquire_monotonic(ptr %ptr, i64 %cmp, i64 %val) nounwind {4962; RV32I-LABEL: cmpxchg_i64_acquire_monotonic:4963; RV32I:       # %bb.0:4964; RV32I-NEXT:    addi sp, sp, -164965; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4966; RV32I-NEXT:    mv a5, a44967; RV32I-NEXT:    sw a1, 0(sp)4968; RV32I-NEXT:    sw a2, 4(sp)4969; RV32I-NEXT:    mv a1, sp4970; RV32I-NEXT:    li a4, 24971; RV32I-NEXT:    mv a2, a34972; RV32I-NEXT:    mv a3, a54973; RV32I-NEXT:    li a5, 04974; RV32I-NEXT:    call __atomic_compare_exchange_84975; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4976; RV32I-NEXT:    addi sp, sp, 164977; RV32I-NEXT:    ret4978;4979; RV32IA-LABEL: cmpxchg_i64_acquire_monotonic:4980; RV32IA:       # %bb.0:4981; RV32IA-NEXT:    addi sp, sp, -164982; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4983; RV32IA-NEXT:    mv a5, a44984; RV32IA-NEXT:    sw a1, 0(sp)4985; RV32IA-NEXT:    sw a2, 4(sp)4986; RV32IA-NEXT:    mv a1, sp4987; RV32IA-NEXT:    li a4, 24988; RV32IA-NEXT:    mv a2, a34989; RV32IA-NEXT:    mv a3, a54990; RV32IA-NEXT:    li a5, 04991; RV32IA-NEXT:    call __atomic_compare_exchange_84992; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4993; RV32IA-NEXT:    addi sp, sp, 164994; RV32IA-NEXT:    ret4995;4996; RV64I-LABEL: cmpxchg_i64_acquire_monotonic:4997; RV64I:       # %bb.0:4998; RV64I-NEXT:    addi sp, sp, -164999; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill5000; RV64I-NEXT:    sd a1, 0(sp)5001; RV64I-NEXT:    mv a1, sp5002; RV64I-NEXT:    li a3, 25003; RV64I-NEXT:    li a4, 05004; RV64I-NEXT:    call __atomic_compare_exchange_85005; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload5006; RV64I-NEXT:    addi sp, sp, 165007; RV64I-NEXT:    ret5008;5009; RV64IA-WMO-LABEL: cmpxchg_i64_acquire_monotonic:5010; RV64IA-WMO:       # %bb.0:5011; RV64IA-WMO-NEXT:  .LBB31_1: # =>This Inner Loop Header: Depth=15012; RV64IA-WMO-NEXT:    lr.d.aq a3, (a0)5013; RV64IA-WMO-NEXT:    bne a3, a1, .LBB31_35014; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB31_1 Depth=15015; RV64IA-WMO-NEXT:    sc.d a4, a2, (a0)5016; RV64IA-WMO-NEXT:    bnez a4, .LBB31_15017; RV64IA-WMO-NEXT:  .LBB31_3:5018; RV64IA-WMO-NEXT:    ret5019;5020; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_acquire_monotonic:5021; RV64IA-WMO-ZACAS:       # %bb.0:5022; RV64IA-WMO-ZACAS-NEXT:    amocas.d.aq a1, a2, (a0)5023; RV64IA-WMO-ZACAS-NEXT:    ret5024;5025; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_acquire_monotonic:5026; RV64IA-WMO-ZABHA:       # %bb.0:5027; RV64IA-WMO-ZABHA-NEXT:    amocas.d.aq a1, a2, (a0)5028; RV64IA-WMO-ZABHA-NEXT:    ret5029;5030; RV64IA-TSO-LABEL: cmpxchg_i64_acquire_monotonic:5031; RV64IA-TSO:       # %bb.0:5032; RV64IA-TSO-NEXT:  .LBB31_1: # =>This Inner Loop Header: Depth=15033; RV64IA-TSO-NEXT:    lr.d a3, (a0)5034; RV64IA-TSO-NEXT:    bne a3, a1, .LBB31_35035; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB31_1 Depth=15036; RV64IA-TSO-NEXT:    sc.d a4, a2, (a0)5037; RV64IA-TSO-NEXT:    bnez a4, .LBB31_15038; RV64IA-TSO-NEXT:  .LBB31_3:5039; RV64IA-TSO-NEXT:    ret5040;5041; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_acquire_monotonic:5042; RV64IA-TSO-ZACAS:       # %bb.0:5043; RV64IA-TSO-ZACAS-NEXT:    amocas.d a1, a2, (a0)5044; RV64IA-TSO-ZACAS-NEXT:    ret5045;5046; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_acquire_monotonic:5047; RV64IA-TSO-ZABHA:       # %bb.0:5048; RV64IA-TSO-ZABHA-NEXT:    amocas.d a1, a2, (a0)5049; RV64IA-TSO-ZABHA-NEXT:    ret5050  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val acquire monotonic5051  ret void5052}5053 5054define void @cmpxchg_i64_acquire_acquire(ptr %ptr, i64 %cmp, i64 %val) nounwind {5055; RV32I-LABEL: cmpxchg_i64_acquire_acquire:5056; RV32I:       # %bb.0:5057; RV32I-NEXT:    addi sp, sp, -165058; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5059; RV32I-NEXT:    mv a6, a45060; RV32I-NEXT:    sw a1, 0(sp)5061; RV32I-NEXT:    sw a2, 4(sp)5062; RV32I-NEXT:    mv a1, sp5063; RV32I-NEXT:    li a4, 25064; RV32I-NEXT:    li a5, 25065; RV32I-NEXT:    mv a2, a35066; RV32I-NEXT:    mv a3, a65067; RV32I-NEXT:    call __atomic_compare_exchange_85068; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5069; RV32I-NEXT:    addi sp, sp, 165070; RV32I-NEXT:    ret5071;5072; RV32IA-LABEL: cmpxchg_i64_acquire_acquire:5073; RV32IA:       # %bb.0:5074; RV32IA-NEXT:    addi sp, sp, -165075; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5076; RV32IA-NEXT:    mv a6, a45077; RV32IA-NEXT:    sw a1, 0(sp)5078; RV32IA-NEXT:    sw a2, 4(sp)5079; RV32IA-NEXT:    mv a1, sp5080; RV32IA-NEXT:    li a4, 25081; RV32IA-NEXT:    li a5, 25082; RV32IA-NEXT:    mv a2, a35083; RV32IA-NEXT:    mv a3, a65084; RV32IA-NEXT:    call __atomic_compare_exchange_85085; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5086; RV32IA-NEXT:    addi sp, sp, 165087; RV32IA-NEXT:    ret5088;5089; RV64I-LABEL: cmpxchg_i64_acquire_acquire:5090; RV64I:       # %bb.0:5091; RV64I-NEXT:    addi sp, sp, -165092; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill5093; RV64I-NEXT:    sd a1, 0(sp)5094; RV64I-NEXT:    mv a1, sp5095; RV64I-NEXT:    li a3, 25096; RV64I-NEXT:    li a4, 25097; RV64I-NEXT:    call __atomic_compare_exchange_85098; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload5099; RV64I-NEXT:    addi sp, sp, 165100; RV64I-NEXT:    ret5101;5102; RV64IA-WMO-LABEL: cmpxchg_i64_acquire_acquire:5103; RV64IA-WMO:       # %bb.0:5104; RV64IA-WMO-NEXT:  .LBB32_1: # =>This Inner Loop Header: Depth=15105; RV64IA-WMO-NEXT:    lr.d.aq a3, (a0)5106; RV64IA-WMO-NEXT:    bne a3, a1, .LBB32_35107; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB32_1 Depth=15108; RV64IA-WMO-NEXT:    sc.d a4, a2, (a0)5109; RV64IA-WMO-NEXT:    bnez a4, .LBB32_15110; RV64IA-WMO-NEXT:  .LBB32_3:5111; RV64IA-WMO-NEXT:    ret5112;5113; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_acquire_acquire:5114; RV64IA-WMO-ZACAS:       # %bb.0:5115; RV64IA-WMO-ZACAS-NEXT:    amocas.d.aq a1, a2, (a0)5116; RV64IA-WMO-ZACAS-NEXT:    ret5117;5118; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_acquire_acquire:5119; RV64IA-WMO-ZABHA:       # %bb.0:5120; RV64IA-WMO-ZABHA-NEXT:    amocas.d.aq a1, a2, (a0)5121; RV64IA-WMO-ZABHA-NEXT:    ret5122;5123; RV64IA-TSO-LABEL: cmpxchg_i64_acquire_acquire:5124; RV64IA-TSO:       # %bb.0:5125; RV64IA-TSO-NEXT:  .LBB32_1: # =>This Inner Loop Header: Depth=15126; RV64IA-TSO-NEXT:    lr.d a3, (a0)5127; RV64IA-TSO-NEXT:    bne a3, a1, .LBB32_35128; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB32_1 Depth=15129; RV64IA-TSO-NEXT:    sc.d a4, a2, (a0)5130; RV64IA-TSO-NEXT:    bnez a4, .LBB32_15131; RV64IA-TSO-NEXT:  .LBB32_3:5132; RV64IA-TSO-NEXT:    ret5133;5134; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_acquire_acquire:5135; RV64IA-TSO-ZACAS:       # %bb.0:5136; RV64IA-TSO-ZACAS-NEXT:    amocas.d a1, a2, (a0)5137; RV64IA-TSO-ZACAS-NEXT:    ret5138;5139; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_acquire_acquire:5140; RV64IA-TSO-ZABHA:       # %bb.0:5141; RV64IA-TSO-ZABHA-NEXT:    amocas.d a1, a2, (a0)5142; RV64IA-TSO-ZABHA-NEXT:    ret5143  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val acquire acquire5144  ret void5145}5146 5147define void @cmpxchg_i64_release_monotonic(ptr %ptr, i64 %cmp, i64 %val) nounwind {5148; RV32I-LABEL: cmpxchg_i64_release_monotonic:5149; RV32I:       # %bb.0:5150; RV32I-NEXT:    addi sp, sp, -165151; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5152; RV32I-NEXT:    mv a5, a45153; RV32I-NEXT:    sw a1, 0(sp)5154; RV32I-NEXT:    sw a2, 4(sp)5155; RV32I-NEXT:    mv a1, sp5156; RV32I-NEXT:    li a4, 35157; RV32I-NEXT:    mv a2, a35158; RV32I-NEXT:    mv a3, a55159; RV32I-NEXT:    li a5, 05160; RV32I-NEXT:    call __atomic_compare_exchange_85161; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5162; RV32I-NEXT:    addi sp, sp, 165163; RV32I-NEXT:    ret5164;5165; RV32IA-LABEL: cmpxchg_i64_release_monotonic:5166; RV32IA:       # %bb.0:5167; RV32IA-NEXT:    addi sp, sp, -165168; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5169; RV32IA-NEXT:    mv a5, a45170; RV32IA-NEXT:    sw a1, 0(sp)5171; RV32IA-NEXT:    sw a2, 4(sp)5172; RV32IA-NEXT:    mv a1, sp5173; RV32IA-NEXT:    li a4, 35174; RV32IA-NEXT:    mv a2, a35175; RV32IA-NEXT:    mv a3, a55176; RV32IA-NEXT:    li a5, 05177; RV32IA-NEXT:    call __atomic_compare_exchange_85178; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5179; RV32IA-NEXT:    addi sp, sp, 165180; RV32IA-NEXT:    ret5181;5182; RV64I-LABEL: cmpxchg_i64_release_monotonic:5183; RV64I:       # %bb.0:5184; RV64I-NEXT:    addi sp, sp, -165185; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill5186; RV64I-NEXT:    sd a1, 0(sp)5187; RV64I-NEXT:    mv a1, sp5188; RV64I-NEXT:    li a3, 35189; RV64I-NEXT:    li a4, 05190; RV64I-NEXT:    call __atomic_compare_exchange_85191; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload5192; RV64I-NEXT:    addi sp, sp, 165193; RV64I-NEXT:    ret5194;5195; RV64IA-WMO-LABEL: cmpxchg_i64_release_monotonic:5196; RV64IA-WMO:       # %bb.0:5197; RV64IA-WMO-NEXT:  .LBB33_1: # =>This Inner Loop Header: Depth=15198; RV64IA-WMO-NEXT:    lr.d a3, (a0)5199; RV64IA-WMO-NEXT:    bne a3, a1, .LBB33_35200; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB33_1 Depth=15201; RV64IA-WMO-NEXT:    sc.d.rl a4, a2, (a0)5202; RV64IA-WMO-NEXT:    bnez a4, .LBB33_15203; RV64IA-WMO-NEXT:  .LBB33_3:5204; RV64IA-WMO-NEXT:    ret5205;5206; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_release_monotonic:5207; RV64IA-WMO-ZACAS:       # %bb.0:5208; RV64IA-WMO-ZACAS-NEXT:    amocas.d.rl a1, a2, (a0)5209; RV64IA-WMO-ZACAS-NEXT:    ret5210;5211; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_release_monotonic:5212; RV64IA-WMO-ZABHA:       # %bb.0:5213; RV64IA-WMO-ZABHA-NEXT:    amocas.d.rl a1, a2, (a0)5214; RV64IA-WMO-ZABHA-NEXT:    ret5215;5216; RV64IA-TSO-LABEL: cmpxchg_i64_release_monotonic:5217; RV64IA-TSO:       # %bb.0:5218; RV64IA-TSO-NEXT:  .LBB33_1: # =>This Inner Loop Header: Depth=15219; RV64IA-TSO-NEXT:    lr.d a3, (a0)5220; RV64IA-TSO-NEXT:    bne a3, a1, .LBB33_35221; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB33_1 Depth=15222; RV64IA-TSO-NEXT:    sc.d a4, a2, (a0)5223; RV64IA-TSO-NEXT:    bnez a4, .LBB33_15224; RV64IA-TSO-NEXT:  .LBB33_3:5225; RV64IA-TSO-NEXT:    ret5226;5227; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_release_monotonic:5228; RV64IA-TSO-ZACAS:       # %bb.0:5229; RV64IA-TSO-ZACAS-NEXT:    amocas.d a1, a2, (a0)5230; RV64IA-TSO-ZACAS-NEXT:    ret5231;5232; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_release_monotonic:5233; RV64IA-TSO-ZABHA:       # %bb.0:5234; RV64IA-TSO-ZABHA-NEXT:    amocas.d a1, a2, (a0)5235; RV64IA-TSO-ZABHA-NEXT:    ret5236  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val release monotonic5237  ret void5238}5239 5240define void @cmpxchg_i64_release_acquire(ptr %ptr, i64 %cmp, i64 %val) nounwind {5241; RV32I-LABEL: cmpxchg_i64_release_acquire:5242; RV32I:       # %bb.0:5243; RV32I-NEXT:    addi sp, sp, -165244; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5245; RV32I-NEXT:    mv a6, a45246; RV32I-NEXT:    sw a1, 0(sp)5247; RV32I-NEXT:    sw a2, 4(sp)5248; RV32I-NEXT:    mv a1, sp5249; RV32I-NEXT:    li a4, 35250; RV32I-NEXT:    li a5, 25251; RV32I-NEXT:    mv a2, a35252; RV32I-NEXT:    mv a3, a65253; RV32I-NEXT:    call __atomic_compare_exchange_85254; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5255; RV32I-NEXT:    addi sp, sp, 165256; RV32I-NEXT:    ret5257;5258; RV32IA-LABEL: cmpxchg_i64_release_acquire:5259; RV32IA:       # %bb.0:5260; RV32IA-NEXT:    addi sp, sp, -165261; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5262; RV32IA-NEXT:    mv a6, a45263; RV32IA-NEXT:    sw a1, 0(sp)5264; RV32IA-NEXT:    sw a2, 4(sp)5265; RV32IA-NEXT:    mv a1, sp5266; RV32IA-NEXT:    li a4, 35267; RV32IA-NEXT:    li a5, 25268; RV32IA-NEXT:    mv a2, a35269; RV32IA-NEXT:    mv a3, a65270; RV32IA-NEXT:    call __atomic_compare_exchange_85271; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5272; RV32IA-NEXT:    addi sp, sp, 165273; RV32IA-NEXT:    ret5274;5275; RV64I-LABEL: cmpxchg_i64_release_acquire:5276; RV64I:       # %bb.0:5277; RV64I-NEXT:    addi sp, sp, -165278; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill5279; RV64I-NEXT:    sd a1, 0(sp)5280; RV64I-NEXT:    mv a1, sp5281; RV64I-NEXT:    li a3, 35282; RV64I-NEXT:    li a4, 25283; RV64I-NEXT:    call __atomic_compare_exchange_85284; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload5285; RV64I-NEXT:    addi sp, sp, 165286; RV64I-NEXT:    ret5287;5288; RV64IA-WMO-LABEL: cmpxchg_i64_release_acquire:5289; RV64IA-WMO:       # %bb.0:5290; RV64IA-WMO-NEXT:  .LBB34_1: # =>This Inner Loop Header: Depth=15291; RV64IA-WMO-NEXT:    lr.d.aq a3, (a0)5292; RV64IA-WMO-NEXT:    bne a3, a1, .LBB34_35293; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB34_1 Depth=15294; RV64IA-WMO-NEXT:    sc.d.rl a4, a2, (a0)5295; RV64IA-WMO-NEXT:    bnez a4, .LBB34_15296; RV64IA-WMO-NEXT:  .LBB34_3:5297; RV64IA-WMO-NEXT:    ret5298;5299; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_release_acquire:5300; RV64IA-WMO-ZACAS:       # %bb.0:5301; RV64IA-WMO-ZACAS-NEXT:    amocas.d.aqrl a1, a2, (a0)5302; RV64IA-WMO-ZACAS-NEXT:    ret5303;5304; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_release_acquire:5305; RV64IA-WMO-ZABHA:       # %bb.0:5306; RV64IA-WMO-ZABHA-NEXT:    amocas.d.aqrl a1, a2, (a0)5307; RV64IA-WMO-ZABHA-NEXT:    ret5308;5309; RV64IA-TSO-LABEL: cmpxchg_i64_release_acquire:5310; RV64IA-TSO:       # %bb.0:5311; RV64IA-TSO-NEXT:  .LBB34_1: # =>This Inner Loop Header: Depth=15312; RV64IA-TSO-NEXT:    lr.d a3, (a0)5313; RV64IA-TSO-NEXT:    bne a3, a1, .LBB34_35314; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB34_1 Depth=15315; RV64IA-TSO-NEXT:    sc.d a4, a2, (a0)5316; RV64IA-TSO-NEXT:    bnez a4, .LBB34_15317; RV64IA-TSO-NEXT:  .LBB34_3:5318; RV64IA-TSO-NEXT:    ret5319;5320; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_release_acquire:5321; RV64IA-TSO-ZACAS:       # %bb.0:5322; RV64IA-TSO-ZACAS-NEXT:    amocas.d a1, a2, (a0)5323; RV64IA-TSO-ZACAS-NEXT:    ret5324;5325; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_release_acquire:5326; RV64IA-TSO-ZABHA:       # %bb.0:5327; RV64IA-TSO-ZABHA-NEXT:    amocas.d a1, a2, (a0)5328; RV64IA-TSO-ZABHA-NEXT:    ret5329  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val release acquire5330  ret void5331}5332 5333define void @cmpxchg_i64_acq_rel_monotonic(ptr %ptr, i64 %cmp, i64 %val) nounwind {5334; RV32I-LABEL: cmpxchg_i64_acq_rel_monotonic:5335; RV32I:       # %bb.0:5336; RV32I-NEXT:    addi sp, sp, -165337; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5338; RV32I-NEXT:    mv a5, a45339; RV32I-NEXT:    sw a1, 0(sp)5340; RV32I-NEXT:    sw a2, 4(sp)5341; RV32I-NEXT:    mv a1, sp5342; RV32I-NEXT:    li a4, 45343; RV32I-NEXT:    mv a2, a35344; RV32I-NEXT:    mv a3, a55345; RV32I-NEXT:    li a5, 05346; RV32I-NEXT:    call __atomic_compare_exchange_85347; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5348; RV32I-NEXT:    addi sp, sp, 165349; RV32I-NEXT:    ret5350;5351; RV32IA-LABEL: cmpxchg_i64_acq_rel_monotonic:5352; RV32IA:       # %bb.0:5353; RV32IA-NEXT:    addi sp, sp, -165354; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5355; RV32IA-NEXT:    mv a5, a45356; RV32IA-NEXT:    sw a1, 0(sp)5357; RV32IA-NEXT:    sw a2, 4(sp)5358; RV32IA-NEXT:    mv a1, sp5359; RV32IA-NEXT:    li a4, 45360; RV32IA-NEXT:    mv a2, a35361; RV32IA-NEXT:    mv a3, a55362; RV32IA-NEXT:    li a5, 05363; RV32IA-NEXT:    call __atomic_compare_exchange_85364; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5365; RV32IA-NEXT:    addi sp, sp, 165366; RV32IA-NEXT:    ret5367;5368; RV64I-LABEL: cmpxchg_i64_acq_rel_monotonic:5369; RV64I:       # %bb.0:5370; RV64I-NEXT:    addi sp, sp, -165371; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill5372; RV64I-NEXT:    sd a1, 0(sp)5373; RV64I-NEXT:    mv a1, sp5374; RV64I-NEXT:    li a3, 45375; RV64I-NEXT:    li a4, 05376; RV64I-NEXT:    call __atomic_compare_exchange_85377; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload5378; RV64I-NEXT:    addi sp, sp, 165379; RV64I-NEXT:    ret5380;5381; RV64IA-WMO-LABEL: cmpxchg_i64_acq_rel_monotonic:5382; RV64IA-WMO:       # %bb.0:5383; RV64IA-WMO-NEXT:  .LBB35_1: # =>This Inner Loop Header: Depth=15384; RV64IA-WMO-NEXT:    lr.d.aq a3, (a0)5385; RV64IA-WMO-NEXT:    bne a3, a1, .LBB35_35386; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB35_1 Depth=15387; RV64IA-WMO-NEXT:    sc.d.rl a4, a2, (a0)5388; RV64IA-WMO-NEXT:    bnez a4, .LBB35_15389; RV64IA-WMO-NEXT:  .LBB35_3:5390; RV64IA-WMO-NEXT:    ret5391;5392; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_acq_rel_monotonic:5393; RV64IA-WMO-ZACAS:       # %bb.0:5394; RV64IA-WMO-ZACAS-NEXT:    amocas.d.aqrl a1, a2, (a0)5395; RV64IA-WMO-ZACAS-NEXT:    ret5396;5397; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_acq_rel_monotonic:5398; RV64IA-WMO-ZABHA:       # %bb.0:5399; RV64IA-WMO-ZABHA-NEXT:    amocas.d.aqrl a1, a2, (a0)5400; RV64IA-WMO-ZABHA-NEXT:    ret5401;5402; RV64IA-TSO-LABEL: cmpxchg_i64_acq_rel_monotonic:5403; RV64IA-TSO:       # %bb.0:5404; RV64IA-TSO-NEXT:  .LBB35_1: # =>This Inner Loop Header: Depth=15405; RV64IA-TSO-NEXT:    lr.d a3, (a0)5406; RV64IA-TSO-NEXT:    bne a3, a1, .LBB35_35407; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB35_1 Depth=15408; RV64IA-TSO-NEXT:    sc.d a4, a2, (a0)5409; RV64IA-TSO-NEXT:    bnez a4, .LBB35_15410; RV64IA-TSO-NEXT:  .LBB35_3:5411; RV64IA-TSO-NEXT:    ret5412;5413; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_acq_rel_monotonic:5414; RV64IA-TSO-ZACAS:       # %bb.0:5415; RV64IA-TSO-ZACAS-NEXT:    amocas.d a1, a2, (a0)5416; RV64IA-TSO-ZACAS-NEXT:    ret5417;5418; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_acq_rel_monotonic:5419; RV64IA-TSO-ZABHA:       # %bb.0:5420; RV64IA-TSO-ZABHA-NEXT:    amocas.d a1, a2, (a0)5421; RV64IA-TSO-ZABHA-NEXT:    ret5422  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val acq_rel monotonic5423  ret void5424}5425 5426define void @cmpxchg_i64_acq_rel_acquire(ptr %ptr, i64 %cmp, i64 %val) nounwind {5427; RV32I-LABEL: cmpxchg_i64_acq_rel_acquire:5428; RV32I:       # %bb.0:5429; RV32I-NEXT:    addi sp, sp, -165430; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5431; RV32I-NEXT:    mv a6, a45432; RV32I-NEXT:    sw a1, 0(sp)5433; RV32I-NEXT:    sw a2, 4(sp)5434; RV32I-NEXT:    mv a1, sp5435; RV32I-NEXT:    li a4, 45436; RV32I-NEXT:    li a5, 25437; RV32I-NEXT:    mv a2, a35438; RV32I-NEXT:    mv a3, a65439; RV32I-NEXT:    call __atomic_compare_exchange_85440; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5441; RV32I-NEXT:    addi sp, sp, 165442; RV32I-NEXT:    ret5443;5444; RV32IA-LABEL: cmpxchg_i64_acq_rel_acquire:5445; RV32IA:       # %bb.0:5446; RV32IA-NEXT:    addi sp, sp, -165447; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5448; RV32IA-NEXT:    mv a6, a45449; RV32IA-NEXT:    sw a1, 0(sp)5450; RV32IA-NEXT:    sw a2, 4(sp)5451; RV32IA-NEXT:    mv a1, sp5452; RV32IA-NEXT:    li a4, 45453; RV32IA-NEXT:    li a5, 25454; RV32IA-NEXT:    mv a2, a35455; RV32IA-NEXT:    mv a3, a65456; RV32IA-NEXT:    call __atomic_compare_exchange_85457; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5458; RV32IA-NEXT:    addi sp, sp, 165459; RV32IA-NEXT:    ret5460;5461; RV64I-LABEL: cmpxchg_i64_acq_rel_acquire:5462; RV64I:       # %bb.0:5463; RV64I-NEXT:    addi sp, sp, -165464; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill5465; RV64I-NEXT:    sd a1, 0(sp)5466; RV64I-NEXT:    mv a1, sp5467; RV64I-NEXT:    li a3, 45468; RV64I-NEXT:    li a4, 25469; RV64I-NEXT:    call __atomic_compare_exchange_85470; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload5471; RV64I-NEXT:    addi sp, sp, 165472; RV64I-NEXT:    ret5473;5474; RV64IA-WMO-LABEL: cmpxchg_i64_acq_rel_acquire:5475; RV64IA-WMO:       # %bb.0:5476; RV64IA-WMO-NEXT:  .LBB36_1: # =>This Inner Loop Header: Depth=15477; RV64IA-WMO-NEXT:    lr.d.aq a3, (a0)5478; RV64IA-WMO-NEXT:    bne a3, a1, .LBB36_35479; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB36_1 Depth=15480; RV64IA-WMO-NEXT:    sc.d.rl a4, a2, (a0)5481; RV64IA-WMO-NEXT:    bnez a4, .LBB36_15482; RV64IA-WMO-NEXT:  .LBB36_3:5483; RV64IA-WMO-NEXT:    ret5484;5485; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_acq_rel_acquire:5486; RV64IA-WMO-ZACAS:       # %bb.0:5487; RV64IA-WMO-ZACAS-NEXT:    amocas.d.aqrl a1, a2, (a0)5488; RV64IA-WMO-ZACAS-NEXT:    ret5489;5490; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_acq_rel_acquire:5491; RV64IA-WMO-ZABHA:       # %bb.0:5492; RV64IA-WMO-ZABHA-NEXT:    amocas.d.aqrl a1, a2, (a0)5493; RV64IA-WMO-ZABHA-NEXT:    ret5494;5495; RV64IA-TSO-LABEL: cmpxchg_i64_acq_rel_acquire:5496; RV64IA-TSO:       # %bb.0:5497; RV64IA-TSO-NEXT:  .LBB36_1: # =>This Inner Loop Header: Depth=15498; RV64IA-TSO-NEXT:    lr.d a3, (a0)5499; RV64IA-TSO-NEXT:    bne a3, a1, .LBB36_35500; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB36_1 Depth=15501; RV64IA-TSO-NEXT:    sc.d a4, a2, (a0)5502; RV64IA-TSO-NEXT:    bnez a4, .LBB36_15503; RV64IA-TSO-NEXT:  .LBB36_3:5504; RV64IA-TSO-NEXT:    ret5505;5506; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_acq_rel_acquire:5507; RV64IA-TSO-ZACAS:       # %bb.0:5508; RV64IA-TSO-ZACAS-NEXT:    amocas.d a1, a2, (a0)5509; RV64IA-TSO-ZACAS-NEXT:    ret5510;5511; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_acq_rel_acquire:5512; RV64IA-TSO-ZABHA:       # %bb.0:5513; RV64IA-TSO-ZABHA-NEXT:    amocas.d a1, a2, (a0)5514; RV64IA-TSO-ZABHA-NEXT:    ret5515  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val acq_rel acquire5516  ret void5517}5518 5519define void @cmpxchg_i64_seq_cst_monotonic(ptr %ptr, i64 %cmp, i64 %val) nounwind {5520; RV32I-LABEL: cmpxchg_i64_seq_cst_monotonic:5521; RV32I:       # %bb.0:5522; RV32I-NEXT:    addi sp, sp, -165523; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5524; RV32I-NEXT:    mv a5, a45525; RV32I-NEXT:    sw a1, 0(sp)5526; RV32I-NEXT:    sw a2, 4(sp)5527; RV32I-NEXT:    mv a1, sp5528; RV32I-NEXT:    li a4, 55529; RV32I-NEXT:    mv a2, a35530; RV32I-NEXT:    mv a3, a55531; RV32I-NEXT:    li a5, 05532; RV32I-NEXT:    call __atomic_compare_exchange_85533; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5534; RV32I-NEXT:    addi sp, sp, 165535; RV32I-NEXT:    ret5536;5537; RV32IA-LABEL: cmpxchg_i64_seq_cst_monotonic:5538; RV32IA:       # %bb.0:5539; RV32IA-NEXT:    addi sp, sp, -165540; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5541; RV32IA-NEXT:    mv a5, a45542; RV32IA-NEXT:    sw a1, 0(sp)5543; RV32IA-NEXT:    sw a2, 4(sp)5544; RV32IA-NEXT:    mv a1, sp5545; RV32IA-NEXT:    li a4, 55546; RV32IA-NEXT:    mv a2, a35547; RV32IA-NEXT:    mv a3, a55548; RV32IA-NEXT:    li a5, 05549; RV32IA-NEXT:    call __atomic_compare_exchange_85550; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5551; RV32IA-NEXT:    addi sp, sp, 165552; RV32IA-NEXT:    ret5553;5554; RV64I-LABEL: cmpxchg_i64_seq_cst_monotonic:5555; RV64I:       # %bb.0:5556; RV64I-NEXT:    addi sp, sp, -165557; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill5558; RV64I-NEXT:    sd a1, 0(sp)5559; RV64I-NEXT:    mv a1, sp5560; RV64I-NEXT:    li a3, 55561; RV64I-NEXT:    li a4, 05562; RV64I-NEXT:    call __atomic_compare_exchange_85563; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload5564; RV64I-NEXT:    addi sp, sp, 165565; RV64I-NEXT:    ret5566;5567; RV64IA-WMO-LABEL: cmpxchg_i64_seq_cst_monotonic:5568; RV64IA-WMO:       # %bb.0:5569; RV64IA-WMO-NEXT:  .LBB37_1: # =>This Inner Loop Header: Depth=15570; RV64IA-WMO-NEXT:    lr.d.aqrl a3, (a0)5571; RV64IA-WMO-NEXT:    bne a3, a1, .LBB37_35572; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB37_1 Depth=15573; RV64IA-WMO-NEXT:    sc.d.rl a4, a2, (a0)5574; RV64IA-WMO-NEXT:    bnez a4, .LBB37_15575; RV64IA-WMO-NEXT:  .LBB37_3:5576; RV64IA-WMO-NEXT:    ret5577;5578; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_seq_cst_monotonic:5579; RV64IA-WMO-ZACAS:       # %bb.0:5580; RV64IA-WMO-ZACAS-NEXT:    amocas.d.aqrl a1, a2, (a0)5581; RV64IA-WMO-ZACAS-NEXT:    ret5582;5583; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_seq_cst_monotonic:5584; RV64IA-WMO-ZABHA:       # %bb.0:5585; RV64IA-WMO-ZABHA-NEXT:    amocas.d.aqrl a1, a2, (a0)5586; RV64IA-WMO-ZABHA-NEXT:    ret5587;5588; RV64IA-TSO-LABEL: cmpxchg_i64_seq_cst_monotonic:5589; RV64IA-TSO:       # %bb.0:5590; RV64IA-TSO-NEXT:  .LBB37_1: # =>This Inner Loop Header: Depth=15591; RV64IA-TSO-NEXT:    lr.d.aqrl a3, (a0)5592; RV64IA-TSO-NEXT:    bne a3, a1, .LBB37_35593; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB37_1 Depth=15594; RV64IA-TSO-NEXT:    sc.d.rl a4, a2, (a0)5595; RV64IA-TSO-NEXT:    bnez a4, .LBB37_15596; RV64IA-TSO-NEXT:  .LBB37_3:5597; RV64IA-TSO-NEXT:    ret5598;5599; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_seq_cst_monotonic:5600; RV64IA-TSO-ZACAS:       # %bb.0:5601; RV64IA-TSO-ZACAS-NEXT:    amocas.d a1, a2, (a0)5602; RV64IA-TSO-ZACAS-NEXT:    ret5603;5604; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_seq_cst_monotonic:5605; RV64IA-TSO-ZABHA:       # %bb.0:5606; RV64IA-TSO-ZABHA-NEXT:    amocas.d a1, a2, (a0)5607; RV64IA-TSO-ZABHA-NEXT:    ret5608  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val seq_cst monotonic5609  ret void5610}5611 5612define void @cmpxchg_i64_seq_cst_acquire(ptr %ptr, i64 %cmp, i64 %val) nounwind {5613; RV32I-LABEL: cmpxchg_i64_seq_cst_acquire:5614; RV32I:       # %bb.0:5615; RV32I-NEXT:    addi sp, sp, -165616; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5617; RV32I-NEXT:    mv a6, a45618; RV32I-NEXT:    sw a1, 0(sp)5619; RV32I-NEXT:    sw a2, 4(sp)5620; RV32I-NEXT:    mv a1, sp5621; RV32I-NEXT:    li a4, 55622; RV32I-NEXT:    li a5, 25623; RV32I-NEXT:    mv a2, a35624; RV32I-NEXT:    mv a3, a65625; RV32I-NEXT:    call __atomic_compare_exchange_85626; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5627; RV32I-NEXT:    addi sp, sp, 165628; RV32I-NEXT:    ret5629;5630; RV32IA-LABEL: cmpxchg_i64_seq_cst_acquire:5631; RV32IA:       # %bb.0:5632; RV32IA-NEXT:    addi sp, sp, -165633; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5634; RV32IA-NEXT:    mv a6, a45635; RV32IA-NEXT:    sw a1, 0(sp)5636; RV32IA-NEXT:    sw a2, 4(sp)5637; RV32IA-NEXT:    mv a1, sp5638; RV32IA-NEXT:    li a4, 55639; RV32IA-NEXT:    li a5, 25640; RV32IA-NEXT:    mv a2, a35641; RV32IA-NEXT:    mv a3, a65642; RV32IA-NEXT:    call __atomic_compare_exchange_85643; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5644; RV32IA-NEXT:    addi sp, sp, 165645; RV32IA-NEXT:    ret5646;5647; RV64I-LABEL: cmpxchg_i64_seq_cst_acquire:5648; RV64I:       # %bb.0:5649; RV64I-NEXT:    addi sp, sp, -165650; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill5651; RV64I-NEXT:    sd a1, 0(sp)5652; RV64I-NEXT:    mv a1, sp5653; RV64I-NEXT:    li a3, 55654; RV64I-NEXT:    li a4, 25655; RV64I-NEXT:    call __atomic_compare_exchange_85656; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload5657; RV64I-NEXT:    addi sp, sp, 165658; RV64I-NEXT:    ret5659;5660; RV64IA-WMO-LABEL: cmpxchg_i64_seq_cst_acquire:5661; RV64IA-WMO:       # %bb.0:5662; RV64IA-WMO-NEXT:  .LBB38_1: # =>This Inner Loop Header: Depth=15663; RV64IA-WMO-NEXT:    lr.d.aqrl a3, (a0)5664; RV64IA-WMO-NEXT:    bne a3, a1, .LBB38_35665; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB38_1 Depth=15666; RV64IA-WMO-NEXT:    sc.d.rl a4, a2, (a0)5667; RV64IA-WMO-NEXT:    bnez a4, .LBB38_15668; RV64IA-WMO-NEXT:  .LBB38_3:5669; RV64IA-WMO-NEXT:    ret5670;5671; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_seq_cst_acquire:5672; RV64IA-WMO-ZACAS:       # %bb.0:5673; RV64IA-WMO-ZACAS-NEXT:    amocas.d.aqrl a1, a2, (a0)5674; RV64IA-WMO-ZACAS-NEXT:    ret5675;5676; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_seq_cst_acquire:5677; RV64IA-WMO-ZABHA:       # %bb.0:5678; RV64IA-WMO-ZABHA-NEXT:    amocas.d.aqrl a1, a2, (a0)5679; RV64IA-WMO-ZABHA-NEXT:    ret5680;5681; RV64IA-TSO-LABEL: cmpxchg_i64_seq_cst_acquire:5682; RV64IA-TSO:       # %bb.0:5683; RV64IA-TSO-NEXT:  .LBB38_1: # =>This Inner Loop Header: Depth=15684; RV64IA-TSO-NEXT:    lr.d.aqrl a3, (a0)5685; RV64IA-TSO-NEXT:    bne a3, a1, .LBB38_35686; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB38_1 Depth=15687; RV64IA-TSO-NEXT:    sc.d.rl a4, a2, (a0)5688; RV64IA-TSO-NEXT:    bnez a4, .LBB38_15689; RV64IA-TSO-NEXT:  .LBB38_3:5690; RV64IA-TSO-NEXT:    ret5691;5692; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_seq_cst_acquire:5693; RV64IA-TSO-ZACAS:       # %bb.0:5694; RV64IA-TSO-ZACAS-NEXT:    amocas.d a1, a2, (a0)5695; RV64IA-TSO-ZACAS-NEXT:    ret5696;5697; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_seq_cst_acquire:5698; RV64IA-TSO-ZABHA:       # %bb.0:5699; RV64IA-TSO-ZABHA-NEXT:    amocas.d a1, a2, (a0)5700; RV64IA-TSO-ZABHA-NEXT:    ret5701  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val seq_cst acquire5702  ret void5703}5704 5705define void @cmpxchg_i64_seq_cst_seq_cst(ptr %ptr, i64 %cmp, i64 %val) nounwind {5706; RV32I-LABEL: cmpxchg_i64_seq_cst_seq_cst:5707; RV32I:       # %bb.0:5708; RV32I-NEXT:    addi sp, sp, -165709; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5710; RV32I-NEXT:    mv a6, a45711; RV32I-NEXT:    sw a1, 0(sp)5712; RV32I-NEXT:    sw a2, 4(sp)5713; RV32I-NEXT:    mv a1, sp5714; RV32I-NEXT:    li a4, 55715; RV32I-NEXT:    li a5, 55716; RV32I-NEXT:    mv a2, a35717; RV32I-NEXT:    mv a3, a65718; RV32I-NEXT:    call __atomic_compare_exchange_85719; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5720; RV32I-NEXT:    addi sp, sp, 165721; RV32I-NEXT:    ret5722;5723; RV32IA-LABEL: cmpxchg_i64_seq_cst_seq_cst:5724; RV32IA:       # %bb.0:5725; RV32IA-NEXT:    addi sp, sp, -165726; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill5727; RV32IA-NEXT:    mv a6, a45728; RV32IA-NEXT:    sw a1, 0(sp)5729; RV32IA-NEXT:    sw a2, 4(sp)5730; RV32IA-NEXT:    mv a1, sp5731; RV32IA-NEXT:    li a4, 55732; RV32IA-NEXT:    li a5, 55733; RV32IA-NEXT:    mv a2, a35734; RV32IA-NEXT:    mv a3, a65735; RV32IA-NEXT:    call __atomic_compare_exchange_85736; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload5737; RV32IA-NEXT:    addi sp, sp, 165738; RV32IA-NEXT:    ret5739;5740; RV64I-LABEL: cmpxchg_i64_seq_cst_seq_cst:5741; RV64I:       # %bb.0:5742; RV64I-NEXT:    addi sp, sp, -165743; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill5744; RV64I-NEXT:    sd a1, 0(sp)5745; RV64I-NEXT:    mv a1, sp5746; RV64I-NEXT:    li a3, 55747; RV64I-NEXT:    li a4, 55748; RV64I-NEXT:    call __atomic_compare_exchange_85749; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload5750; RV64I-NEXT:    addi sp, sp, 165751; RV64I-NEXT:    ret5752;5753; RV64IA-WMO-LABEL: cmpxchg_i64_seq_cst_seq_cst:5754; RV64IA-WMO:       # %bb.0:5755; RV64IA-WMO-NEXT:  .LBB39_1: # =>This Inner Loop Header: Depth=15756; RV64IA-WMO-NEXT:    lr.d.aqrl a3, (a0)5757; RV64IA-WMO-NEXT:    bne a3, a1, .LBB39_35758; RV64IA-WMO-NEXT:  # %bb.2: # in Loop: Header=BB39_1 Depth=15759; RV64IA-WMO-NEXT:    sc.d.rl a4, a2, (a0)5760; RV64IA-WMO-NEXT:    bnez a4, .LBB39_15761; RV64IA-WMO-NEXT:  .LBB39_3:5762; RV64IA-WMO-NEXT:    ret5763;5764; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_seq_cst_seq_cst:5765; RV64IA-WMO-ZACAS:       # %bb.0:5766; RV64IA-WMO-ZACAS-NEXT:    fence rw, rw5767; RV64IA-WMO-ZACAS-NEXT:    amocas.d.aqrl a1, a2, (a0)5768; RV64IA-WMO-ZACAS-NEXT:    ret5769;5770; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_seq_cst_seq_cst:5771; RV64IA-WMO-ZABHA:       # %bb.0:5772; RV64IA-WMO-ZABHA-NEXT:    fence rw, rw5773; RV64IA-WMO-ZABHA-NEXT:    amocas.d.aqrl a1, a2, (a0)5774; RV64IA-WMO-ZABHA-NEXT:    ret5775;5776; RV64IA-TSO-LABEL: cmpxchg_i64_seq_cst_seq_cst:5777; RV64IA-TSO:       # %bb.0:5778; RV64IA-TSO-NEXT:  .LBB39_1: # =>This Inner Loop Header: Depth=15779; RV64IA-TSO-NEXT:    lr.d.aqrl a3, (a0)5780; RV64IA-TSO-NEXT:    bne a3, a1, .LBB39_35781; RV64IA-TSO-NEXT:  # %bb.2: # in Loop: Header=BB39_1 Depth=15782; RV64IA-TSO-NEXT:    sc.d.rl a4, a2, (a0)5783; RV64IA-TSO-NEXT:    bnez a4, .LBB39_15784; RV64IA-TSO-NEXT:  .LBB39_3:5785; RV64IA-TSO-NEXT:    ret5786;5787; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_seq_cst_seq_cst:5788; RV64IA-TSO-ZACAS:       # %bb.0:5789; RV64IA-TSO-ZACAS-NEXT:    fence rw, rw5790; RV64IA-TSO-ZACAS-NEXT:    amocas.d a1, a2, (a0)5791; RV64IA-TSO-ZACAS-NEXT:    ret5792;5793; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_seq_cst_seq_cst:5794; RV64IA-TSO-ZABHA:       # %bb.0:5795; RV64IA-TSO-ZABHA-NEXT:    fence rw, rw5796; RV64IA-TSO-ZABHA-NEXT:    amocas.d a1, a2, (a0)5797; RV64IA-TSO-ZABHA-NEXT:    ret5798  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val seq_cst seq_cst5799  ret void5800}5801;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:5802; RV64IA: {{.*}}5803