5911 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=riscv32 < %s \3; RUN: | FileCheck -check-prefix=RV32I %s4; RUN: llc -global-isel -mtriple=riscv32 -mattr=+a < %s \5; RUN: | FileCheck -check-prefixes=RV32IA,RV32IA-WMO %s6; RUN: llc -global-isel -mtriple=riscv32 -mattr=+a,+zacas < %s \7; RUN: | FileCheck -check-prefixes=RV32IA,RV32IA-ZACAS,RV32IA-WMO-ZACAS %s8; RUN: llc -global-isel -mtriple=riscv32 -mattr=+a,+ztso < %s \9; RUN: | FileCheck -check-prefixes=RV32IA,RV32IA-TSO %s10; RUN: llc -global-isel -mtriple=riscv32 -mattr=+a,+ztso,+zacas < %s \11; RUN: | FileCheck -check-prefixes=RV32IA,RV32IA-ZACAS,RV32IA-TSO-ZACAS %s12; RUN: llc -global-isel -mtriple=riscv64 < %s \13; RUN: | FileCheck -check-prefix=RV64I %s14; RUN: llc -global-isel -mtriple=riscv64 -mattr=+a < %s \15; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-WMO %s16; RUN: llc -global-isel -mtriple=riscv64 -mattr=+a,+zacas < %s \17; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-ZACAS,RV64IA-WMO-ZACAS %s18; RUN: llc -global-isel -mtriple=riscv64 -mattr=+a,+zacas,+zabha < %s \19; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-ZABHA,RV64IA-WMO-ZABHA %s20; RUN: llc -global-isel -mtriple=riscv64 -mattr=+a,+ztso < %s \21; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-TSO %s22; RUN: llc -global-isel -mtriple=riscv64 -mattr=+a,+ztso,+zacas < %s \23; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-ZACAS,RV64IA-TSO-ZACAS %s24; RUN: llc -global-isel -mtriple=riscv64 -mattr=+a,+ztso,+zacas,+zabha < %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: li a3, 25544; RV32IA-NEXT: andi a4, a0, -445; RV32IA-NEXT: andi a0, a0, 346; RV32IA-NEXT: zext.b a1, a147; RV32IA-NEXT: zext.b a2, a248; RV32IA-NEXT: slli a0, a0, 349; RV32IA-NEXT: sll a3, a3, a050; RV32IA-NEXT: sll a1, a1, a051; RV32IA-NEXT: sll a0, a2, a052; RV32IA-NEXT: .LBB0_1: # =>This Inner Loop Header: Depth=153; RV32IA-NEXT: lr.w a2, (a4)54; RV32IA-NEXT: and a5, a2, a355; RV32IA-NEXT: bne a5, a1, .LBB0_356; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB0_1 Depth=157; RV32IA-NEXT: xor a5, a2, a058; RV32IA-NEXT: and a5, a5, a359; RV32IA-NEXT: xor a5, a2, a560; RV32IA-NEXT: sc.w a5, a5, (a4)61; RV32IA-NEXT: bnez a5, .LBB0_162; RV32IA-NEXT: .LBB0_3:63; RV32IA-NEXT: ret64;65; RV64I-LABEL: cmpxchg_i8_monotonic_monotonic:66; RV64I: # %bb.0:67; RV64I-NEXT: addi sp, sp, -1668; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill69; RV64I-NEXT: sb a1, 7(sp)70; RV64I-NEXT: addi a1, sp, 771; RV64I-NEXT: li a3, 072; RV64I-NEXT: li a4, 073; RV64I-NEXT: call __atomic_compare_exchange_174; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload75; RV64I-NEXT: addi sp, sp, 1676; RV64I-NEXT: ret77;78; RV64IA-WMO-LABEL: cmpxchg_i8_monotonic_monotonic:79; RV64IA-WMO: # %bb.0:80; RV64IA-WMO-NEXT: li a3, 25581; RV64IA-WMO-NEXT: andi a4, a0, -482; RV64IA-WMO-NEXT: andi a0, a0, 383; RV64IA-WMO-NEXT: zext.b a1, a184; RV64IA-WMO-NEXT: zext.b a2, a285; RV64IA-WMO-NEXT: slli a0, a0, 386; RV64IA-WMO-NEXT: sllw a3, a3, a087; RV64IA-WMO-NEXT: sllw a1, a1, a088; RV64IA-WMO-NEXT: sllw a0, a2, a089; RV64IA-WMO-NEXT: .LBB0_1: # =>This Inner Loop Header: Depth=190; RV64IA-WMO-NEXT: lr.w a2, (a4)91; RV64IA-WMO-NEXT: and a5, a2, a392; RV64IA-WMO-NEXT: bne a5, a1, .LBB0_393; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB0_1 Depth=194; RV64IA-WMO-NEXT: xor a5, a2, a095; RV64IA-WMO-NEXT: and a5, a5, a396; RV64IA-WMO-NEXT: xor a5, a2, a597; RV64IA-WMO-NEXT: sc.w a5, a5, (a4)98; RV64IA-WMO-NEXT: bnez a5, .LBB0_199; RV64IA-WMO-NEXT: .LBB0_3:100; RV64IA-WMO-NEXT: ret101;102; RV64IA-ZACAS-LABEL: cmpxchg_i8_monotonic_monotonic:103; RV64IA-ZACAS: # %bb.0:104; RV64IA-ZACAS-NEXT: li a3, 255105; RV64IA-ZACAS-NEXT: andi a4, a0, -4106; RV64IA-ZACAS-NEXT: andi a0, a0, 3107; RV64IA-ZACAS-NEXT: zext.b a1, a1108; RV64IA-ZACAS-NEXT: zext.b a2, a2109; RV64IA-ZACAS-NEXT: slli a0, a0, 3110; RV64IA-ZACAS-NEXT: sllw a3, a3, a0111; RV64IA-ZACAS-NEXT: sllw a1, a1, a0112; RV64IA-ZACAS-NEXT: sllw a0, a2, a0113; RV64IA-ZACAS-NEXT: .LBB0_1: # =>This Inner Loop Header: Depth=1114; RV64IA-ZACAS-NEXT: lr.w a2, (a4)115; RV64IA-ZACAS-NEXT: and a5, a2, a3116; RV64IA-ZACAS-NEXT: bne a5, a1, .LBB0_3117; RV64IA-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB0_1 Depth=1118; RV64IA-ZACAS-NEXT: xor a5, a2, a0119; RV64IA-ZACAS-NEXT: and a5, a5, a3120; RV64IA-ZACAS-NEXT: xor a5, a2, a5121; RV64IA-ZACAS-NEXT: sc.w a5, a5, (a4)122; RV64IA-ZACAS-NEXT: bnez a5, .LBB0_1123; RV64IA-ZACAS-NEXT: .LBB0_3:124; RV64IA-ZACAS-NEXT: ret125;126; RV64IA-ZABHA-LABEL: cmpxchg_i8_monotonic_monotonic:127; RV64IA-ZABHA: # %bb.0:128; RV64IA-ZABHA-NEXT: amocas.b a1, a2, (a0)129; RV64IA-ZABHA-NEXT: ret130;131; RV64IA-TSO-LABEL: cmpxchg_i8_monotonic_monotonic:132; RV64IA-TSO: # %bb.0:133; RV64IA-TSO-NEXT: li a3, 255134; RV64IA-TSO-NEXT: andi a4, a0, -4135; RV64IA-TSO-NEXT: andi a0, a0, 3136; RV64IA-TSO-NEXT: zext.b a1, a1137; RV64IA-TSO-NEXT: zext.b a2, a2138; RV64IA-TSO-NEXT: slli a0, a0, 3139; RV64IA-TSO-NEXT: sllw a3, a3, a0140; RV64IA-TSO-NEXT: sllw a1, a1, a0141; RV64IA-TSO-NEXT: sllw a0, a2, a0142; RV64IA-TSO-NEXT: .LBB0_1: # =>This Inner Loop Header: Depth=1143; RV64IA-TSO-NEXT: lr.w a2, (a4)144; RV64IA-TSO-NEXT: and a5, a2, a3145; RV64IA-TSO-NEXT: bne a5, a1, .LBB0_3146; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB0_1 Depth=1147; RV64IA-TSO-NEXT: xor a5, a2, a0148; RV64IA-TSO-NEXT: and a5, a5, a3149; RV64IA-TSO-NEXT: xor a5, a2, a5150; RV64IA-TSO-NEXT: sc.w a5, a5, (a4)151; RV64IA-TSO-NEXT: bnez a5, .LBB0_1152; RV64IA-TSO-NEXT: .LBB0_3:153; RV64IA-TSO-NEXT: ret154 %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val monotonic monotonic155 ret void156}157 158define void @cmpxchg_i8_acquire_monotonic(ptr %ptr, i8 %cmp, i8 %val) nounwind {159; RV32I-LABEL: cmpxchg_i8_acquire_monotonic:160; RV32I: # %bb.0:161; RV32I-NEXT: addi sp, sp, -16162; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill163; RV32I-NEXT: sb a1, 11(sp)164; RV32I-NEXT: addi a1, sp, 11165; RV32I-NEXT: li a3, 2166; RV32I-NEXT: li a4, 0167; RV32I-NEXT: call __atomic_compare_exchange_1168; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload169; RV32I-NEXT: addi sp, sp, 16170; RV32I-NEXT: ret171;172; RV32IA-WMO-LABEL: cmpxchg_i8_acquire_monotonic:173; RV32IA-WMO: # %bb.0:174; RV32IA-WMO-NEXT: li a3, 255175; RV32IA-WMO-NEXT: andi a4, a0, -4176; RV32IA-WMO-NEXT: andi a0, a0, 3177; RV32IA-WMO-NEXT: zext.b a1, a1178; RV32IA-WMO-NEXT: zext.b a2, a2179; RV32IA-WMO-NEXT: slli a0, a0, 3180; RV32IA-WMO-NEXT: sll a3, a3, a0181; RV32IA-WMO-NEXT: sll a1, a1, a0182; RV32IA-WMO-NEXT: sll a0, a2, a0183; RV32IA-WMO-NEXT: .LBB1_1: # =>This Inner Loop Header: Depth=1184; RV32IA-WMO-NEXT: lr.w.aq a2, (a4)185; RV32IA-WMO-NEXT: and a5, a2, a3186; RV32IA-WMO-NEXT: bne a5, a1, .LBB1_3187; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB1_1 Depth=1188; RV32IA-WMO-NEXT: xor a5, a2, a0189; RV32IA-WMO-NEXT: and a5, a5, a3190; RV32IA-WMO-NEXT: xor a5, a2, a5191; RV32IA-WMO-NEXT: sc.w a5, a5, (a4)192; RV32IA-WMO-NEXT: bnez a5, .LBB1_1193; RV32IA-WMO-NEXT: .LBB1_3:194; RV32IA-WMO-NEXT: ret195;196; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i8_acquire_monotonic:197; RV32IA-WMO-ZACAS: # %bb.0:198; RV32IA-WMO-ZACAS-NEXT: li a3, 255199; RV32IA-WMO-ZACAS-NEXT: andi a4, a0, -4200; RV32IA-WMO-ZACAS-NEXT: andi a0, a0, 3201; RV32IA-WMO-ZACAS-NEXT: zext.b a1, a1202; RV32IA-WMO-ZACAS-NEXT: zext.b a2, a2203; RV32IA-WMO-ZACAS-NEXT: slli a0, a0, 3204; RV32IA-WMO-ZACAS-NEXT: sll a3, a3, a0205; RV32IA-WMO-ZACAS-NEXT: sll a1, a1, a0206; RV32IA-WMO-ZACAS-NEXT: sll a0, a2, a0207; RV32IA-WMO-ZACAS-NEXT: .LBB1_1: # =>This Inner Loop Header: Depth=1208; RV32IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)209; RV32IA-WMO-ZACAS-NEXT: and a5, a2, a3210; RV32IA-WMO-ZACAS-NEXT: bne a5, a1, .LBB1_3211; RV32IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB1_1 Depth=1212; RV32IA-WMO-ZACAS-NEXT: xor a5, a2, a0213; RV32IA-WMO-ZACAS-NEXT: and a5, a5, a3214; RV32IA-WMO-ZACAS-NEXT: xor a5, a2, a5215; RV32IA-WMO-ZACAS-NEXT: sc.w a5, a5, (a4)216; RV32IA-WMO-ZACAS-NEXT: bnez a5, .LBB1_1217; RV32IA-WMO-ZACAS-NEXT: .LBB1_3:218; RV32IA-WMO-ZACAS-NEXT: ret219;220; RV32IA-TSO-LABEL: cmpxchg_i8_acquire_monotonic:221; RV32IA-TSO: # %bb.0:222; RV32IA-TSO-NEXT: li a3, 255223; RV32IA-TSO-NEXT: andi a4, a0, -4224; RV32IA-TSO-NEXT: andi a0, a0, 3225; RV32IA-TSO-NEXT: zext.b a1, a1226; RV32IA-TSO-NEXT: zext.b a2, a2227; RV32IA-TSO-NEXT: slli a0, a0, 3228; RV32IA-TSO-NEXT: sll a3, a3, a0229; RV32IA-TSO-NEXT: sll a1, a1, a0230; RV32IA-TSO-NEXT: sll a0, a2, a0231; RV32IA-TSO-NEXT: .LBB1_1: # =>This Inner Loop Header: Depth=1232; RV32IA-TSO-NEXT: lr.w a2, (a4)233; RV32IA-TSO-NEXT: and a5, a2, a3234; RV32IA-TSO-NEXT: bne a5, a1, .LBB1_3235; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB1_1 Depth=1236; RV32IA-TSO-NEXT: xor a5, a2, a0237; RV32IA-TSO-NEXT: and a5, a5, a3238; RV32IA-TSO-NEXT: xor a5, a2, a5239; RV32IA-TSO-NEXT: sc.w a5, a5, (a4)240; RV32IA-TSO-NEXT: bnez a5, .LBB1_1241; RV32IA-TSO-NEXT: .LBB1_3:242; RV32IA-TSO-NEXT: ret243;244; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i8_acquire_monotonic:245; RV32IA-TSO-ZACAS: # %bb.0:246; RV32IA-TSO-ZACAS-NEXT: li a3, 255247; RV32IA-TSO-ZACAS-NEXT: andi a4, a0, -4248; RV32IA-TSO-ZACAS-NEXT: andi a0, a0, 3249; RV32IA-TSO-ZACAS-NEXT: zext.b a1, a1250; RV32IA-TSO-ZACAS-NEXT: zext.b a2, a2251; RV32IA-TSO-ZACAS-NEXT: slli a0, a0, 3252; RV32IA-TSO-ZACAS-NEXT: sll a3, a3, a0253; RV32IA-TSO-ZACAS-NEXT: sll a1, a1, a0254; RV32IA-TSO-ZACAS-NEXT: sll a0, a2, a0255; RV32IA-TSO-ZACAS-NEXT: .LBB1_1: # =>This Inner Loop Header: Depth=1256; RV32IA-TSO-ZACAS-NEXT: lr.w a2, (a4)257; RV32IA-TSO-ZACAS-NEXT: and a5, a2, a3258; RV32IA-TSO-ZACAS-NEXT: bne a5, a1, .LBB1_3259; RV32IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB1_1 Depth=1260; RV32IA-TSO-ZACAS-NEXT: xor a5, a2, a0261; RV32IA-TSO-ZACAS-NEXT: and a5, a5, a3262; RV32IA-TSO-ZACAS-NEXT: xor a5, a2, a5263; RV32IA-TSO-ZACAS-NEXT: sc.w a5, a5, (a4)264; RV32IA-TSO-ZACAS-NEXT: bnez a5, .LBB1_1265; RV32IA-TSO-ZACAS-NEXT: .LBB1_3:266; RV32IA-TSO-ZACAS-NEXT: ret267;268; RV64I-LABEL: cmpxchg_i8_acquire_monotonic:269; RV64I: # %bb.0:270; RV64I-NEXT: addi sp, sp, -16271; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill272; RV64I-NEXT: sb a1, 7(sp)273; RV64I-NEXT: addi a1, sp, 7274; RV64I-NEXT: li a3, 2275; RV64I-NEXT: li a4, 0276; RV64I-NEXT: call __atomic_compare_exchange_1277; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload278; RV64I-NEXT: addi sp, sp, 16279; RV64I-NEXT: ret280;281; RV64IA-WMO-LABEL: cmpxchg_i8_acquire_monotonic:282; RV64IA-WMO: # %bb.0:283; RV64IA-WMO-NEXT: li a3, 255284; RV64IA-WMO-NEXT: andi a4, a0, -4285; RV64IA-WMO-NEXT: andi a0, a0, 3286; RV64IA-WMO-NEXT: zext.b a1, a1287; RV64IA-WMO-NEXT: zext.b a2, a2288; RV64IA-WMO-NEXT: slli a0, a0, 3289; RV64IA-WMO-NEXT: sllw a3, a3, a0290; RV64IA-WMO-NEXT: sllw a1, a1, a0291; RV64IA-WMO-NEXT: sllw a0, a2, a0292; RV64IA-WMO-NEXT: .LBB1_1: # =>This Inner Loop Header: Depth=1293; RV64IA-WMO-NEXT: lr.w.aq a2, (a4)294; RV64IA-WMO-NEXT: and a5, a2, a3295; RV64IA-WMO-NEXT: bne a5, a1, .LBB1_3296; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB1_1 Depth=1297; RV64IA-WMO-NEXT: xor a5, a2, a0298; RV64IA-WMO-NEXT: and a5, a5, a3299; RV64IA-WMO-NEXT: xor a5, a2, a5300; RV64IA-WMO-NEXT: sc.w a5, a5, (a4)301; RV64IA-WMO-NEXT: bnez a5, .LBB1_1302; RV64IA-WMO-NEXT: .LBB1_3:303; RV64IA-WMO-NEXT: ret304;305; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i8_acquire_monotonic:306; RV64IA-WMO-ZACAS: # %bb.0:307; RV64IA-WMO-ZACAS-NEXT: li a3, 255308; RV64IA-WMO-ZACAS-NEXT: andi a4, a0, -4309; RV64IA-WMO-ZACAS-NEXT: andi a0, a0, 3310; RV64IA-WMO-ZACAS-NEXT: zext.b a1, a1311; RV64IA-WMO-ZACAS-NEXT: zext.b a2, a2312; RV64IA-WMO-ZACAS-NEXT: slli a0, a0, 3313; RV64IA-WMO-ZACAS-NEXT: sllw a3, a3, a0314; RV64IA-WMO-ZACAS-NEXT: sllw a1, a1, a0315; RV64IA-WMO-ZACAS-NEXT: sllw a0, a2, a0316; RV64IA-WMO-ZACAS-NEXT: .LBB1_1: # =>This Inner Loop Header: Depth=1317; RV64IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)318; RV64IA-WMO-ZACAS-NEXT: and a5, a2, a3319; RV64IA-WMO-ZACAS-NEXT: bne a5, a1, .LBB1_3320; RV64IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB1_1 Depth=1321; RV64IA-WMO-ZACAS-NEXT: xor a5, a2, a0322; RV64IA-WMO-ZACAS-NEXT: and a5, a5, a3323; RV64IA-WMO-ZACAS-NEXT: xor a5, a2, a5324; RV64IA-WMO-ZACAS-NEXT: sc.w a5, a5, (a4)325; RV64IA-WMO-ZACAS-NEXT: bnez a5, .LBB1_1326; RV64IA-WMO-ZACAS-NEXT: .LBB1_3:327; RV64IA-WMO-ZACAS-NEXT: ret328;329; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_acquire_monotonic:330; RV64IA-WMO-ZABHA: # %bb.0:331; RV64IA-WMO-ZABHA-NEXT: amocas.b.aq a1, a2, (a0)332; RV64IA-WMO-ZABHA-NEXT: ret333;334; RV64IA-TSO-LABEL: cmpxchg_i8_acquire_monotonic:335; RV64IA-TSO: # %bb.0:336; RV64IA-TSO-NEXT: li a3, 255337; RV64IA-TSO-NEXT: andi a4, a0, -4338; RV64IA-TSO-NEXT: andi a0, a0, 3339; RV64IA-TSO-NEXT: zext.b a1, a1340; RV64IA-TSO-NEXT: zext.b a2, a2341; RV64IA-TSO-NEXT: slli a0, a0, 3342; RV64IA-TSO-NEXT: sllw a3, a3, a0343; RV64IA-TSO-NEXT: sllw a1, a1, a0344; RV64IA-TSO-NEXT: sllw a0, a2, a0345; RV64IA-TSO-NEXT: .LBB1_1: # =>This Inner Loop Header: Depth=1346; RV64IA-TSO-NEXT: lr.w a2, (a4)347; RV64IA-TSO-NEXT: and a5, a2, a3348; RV64IA-TSO-NEXT: bne a5, a1, .LBB1_3349; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB1_1 Depth=1350; RV64IA-TSO-NEXT: xor a5, a2, a0351; RV64IA-TSO-NEXT: and a5, a5, a3352; RV64IA-TSO-NEXT: xor a5, a2, a5353; RV64IA-TSO-NEXT: sc.w a5, a5, (a4)354; RV64IA-TSO-NEXT: bnez a5, .LBB1_1355; RV64IA-TSO-NEXT: .LBB1_3:356; RV64IA-TSO-NEXT: ret357;358; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i8_acquire_monotonic:359; RV64IA-TSO-ZACAS: # %bb.0:360; RV64IA-TSO-ZACAS-NEXT: li a3, 255361; RV64IA-TSO-ZACAS-NEXT: andi a4, a0, -4362; RV64IA-TSO-ZACAS-NEXT: andi a0, a0, 3363; RV64IA-TSO-ZACAS-NEXT: zext.b a1, a1364; RV64IA-TSO-ZACAS-NEXT: zext.b a2, a2365; RV64IA-TSO-ZACAS-NEXT: slli a0, a0, 3366; RV64IA-TSO-ZACAS-NEXT: sllw a3, a3, a0367; RV64IA-TSO-ZACAS-NEXT: sllw a1, a1, a0368; RV64IA-TSO-ZACAS-NEXT: sllw a0, a2, a0369; RV64IA-TSO-ZACAS-NEXT: .LBB1_1: # =>This Inner Loop Header: Depth=1370; RV64IA-TSO-ZACAS-NEXT: lr.w a2, (a4)371; RV64IA-TSO-ZACAS-NEXT: and a5, a2, a3372; RV64IA-TSO-ZACAS-NEXT: bne a5, a1, .LBB1_3373; RV64IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB1_1 Depth=1374; RV64IA-TSO-ZACAS-NEXT: xor a5, a2, a0375; RV64IA-TSO-ZACAS-NEXT: and a5, a5, a3376; RV64IA-TSO-ZACAS-NEXT: xor a5, a2, a5377; RV64IA-TSO-ZACAS-NEXT: sc.w a5, a5, (a4)378; RV64IA-TSO-ZACAS-NEXT: bnez a5, .LBB1_1379; RV64IA-TSO-ZACAS-NEXT: .LBB1_3:380; RV64IA-TSO-ZACAS-NEXT: ret381;382; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_acquire_monotonic:383; RV64IA-TSO-ZABHA: # %bb.0:384; RV64IA-TSO-ZABHA-NEXT: amocas.b a1, a2, (a0)385; RV64IA-TSO-ZABHA-NEXT: ret386 %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val acquire monotonic387 ret void388}389 390define void @cmpxchg_i8_acquire_acquire(ptr %ptr, i8 %cmp, i8 %val) nounwind {391; RV32I-LABEL: cmpxchg_i8_acquire_acquire:392; RV32I: # %bb.0:393; RV32I-NEXT: addi sp, sp, -16394; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill395; RV32I-NEXT: sb a1, 11(sp)396; RV32I-NEXT: addi a1, sp, 11397; RV32I-NEXT: li a3, 2398; RV32I-NEXT: li a4, 2399; RV32I-NEXT: call __atomic_compare_exchange_1400; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload401; RV32I-NEXT: addi sp, sp, 16402; RV32I-NEXT: ret403;404; RV32IA-WMO-LABEL: cmpxchg_i8_acquire_acquire:405; RV32IA-WMO: # %bb.0:406; RV32IA-WMO-NEXT: li a3, 255407; RV32IA-WMO-NEXT: andi a4, a0, -4408; RV32IA-WMO-NEXT: andi a0, a0, 3409; RV32IA-WMO-NEXT: zext.b a1, a1410; RV32IA-WMO-NEXT: zext.b a2, a2411; RV32IA-WMO-NEXT: slli a0, a0, 3412; RV32IA-WMO-NEXT: sll a3, a3, a0413; RV32IA-WMO-NEXT: sll a1, a1, a0414; RV32IA-WMO-NEXT: sll a0, a2, a0415; RV32IA-WMO-NEXT: .LBB2_1: # =>This Inner Loop Header: Depth=1416; RV32IA-WMO-NEXT: lr.w.aq a2, (a4)417; RV32IA-WMO-NEXT: and a5, a2, a3418; RV32IA-WMO-NEXT: bne a5, a1, .LBB2_3419; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB2_1 Depth=1420; RV32IA-WMO-NEXT: xor a5, a2, a0421; RV32IA-WMO-NEXT: and a5, a5, a3422; RV32IA-WMO-NEXT: xor a5, a2, a5423; RV32IA-WMO-NEXT: sc.w a5, a5, (a4)424; RV32IA-WMO-NEXT: bnez a5, .LBB2_1425; RV32IA-WMO-NEXT: .LBB2_3:426; RV32IA-WMO-NEXT: ret427;428; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i8_acquire_acquire:429; RV32IA-WMO-ZACAS: # %bb.0:430; RV32IA-WMO-ZACAS-NEXT: li a3, 255431; RV32IA-WMO-ZACAS-NEXT: andi a4, a0, -4432; RV32IA-WMO-ZACAS-NEXT: andi a0, a0, 3433; RV32IA-WMO-ZACAS-NEXT: zext.b a1, a1434; RV32IA-WMO-ZACAS-NEXT: zext.b a2, a2435; RV32IA-WMO-ZACAS-NEXT: slli a0, a0, 3436; RV32IA-WMO-ZACAS-NEXT: sll a3, a3, a0437; RV32IA-WMO-ZACAS-NEXT: sll a1, a1, a0438; RV32IA-WMO-ZACAS-NEXT: sll a0, a2, a0439; RV32IA-WMO-ZACAS-NEXT: .LBB2_1: # =>This Inner Loop Header: Depth=1440; RV32IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)441; RV32IA-WMO-ZACAS-NEXT: and a5, a2, a3442; RV32IA-WMO-ZACAS-NEXT: bne a5, a1, .LBB2_3443; RV32IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB2_1 Depth=1444; RV32IA-WMO-ZACAS-NEXT: xor a5, a2, a0445; RV32IA-WMO-ZACAS-NEXT: and a5, a5, a3446; RV32IA-WMO-ZACAS-NEXT: xor a5, a2, a5447; RV32IA-WMO-ZACAS-NEXT: sc.w a5, a5, (a4)448; RV32IA-WMO-ZACAS-NEXT: bnez a5, .LBB2_1449; RV32IA-WMO-ZACAS-NEXT: .LBB2_3:450; RV32IA-WMO-ZACAS-NEXT: ret451;452; RV32IA-TSO-LABEL: cmpxchg_i8_acquire_acquire:453; RV32IA-TSO: # %bb.0:454; RV32IA-TSO-NEXT: li a3, 255455; RV32IA-TSO-NEXT: andi a4, a0, -4456; RV32IA-TSO-NEXT: andi a0, a0, 3457; RV32IA-TSO-NEXT: zext.b a1, a1458; RV32IA-TSO-NEXT: zext.b a2, a2459; RV32IA-TSO-NEXT: slli a0, a0, 3460; RV32IA-TSO-NEXT: sll a3, a3, a0461; RV32IA-TSO-NEXT: sll a1, a1, a0462; RV32IA-TSO-NEXT: sll a0, a2, a0463; RV32IA-TSO-NEXT: .LBB2_1: # =>This Inner Loop Header: Depth=1464; RV32IA-TSO-NEXT: lr.w a2, (a4)465; RV32IA-TSO-NEXT: and a5, a2, a3466; RV32IA-TSO-NEXT: bne a5, a1, .LBB2_3467; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB2_1 Depth=1468; RV32IA-TSO-NEXT: xor a5, a2, a0469; RV32IA-TSO-NEXT: and a5, a5, a3470; RV32IA-TSO-NEXT: xor a5, a2, a5471; RV32IA-TSO-NEXT: sc.w a5, a5, (a4)472; RV32IA-TSO-NEXT: bnez a5, .LBB2_1473; RV32IA-TSO-NEXT: .LBB2_3:474; RV32IA-TSO-NEXT: ret475;476; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i8_acquire_acquire:477; RV32IA-TSO-ZACAS: # %bb.0:478; RV32IA-TSO-ZACAS-NEXT: li a3, 255479; RV32IA-TSO-ZACAS-NEXT: andi a4, a0, -4480; RV32IA-TSO-ZACAS-NEXT: andi a0, a0, 3481; RV32IA-TSO-ZACAS-NEXT: zext.b a1, a1482; RV32IA-TSO-ZACAS-NEXT: zext.b a2, a2483; RV32IA-TSO-ZACAS-NEXT: slli a0, a0, 3484; RV32IA-TSO-ZACAS-NEXT: sll a3, a3, a0485; RV32IA-TSO-ZACAS-NEXT: sll a1, a1, a0486; RV32IA-TSO-ZACAS-NEXT: sll a0, a2, a0487; RV32IA-TSO-ZACAS-NEXT: .LBB2_1: # =>This Inner Loop Header: Depth=1488; RV32IA-TSO-ZACAS-NEXT: lr.w a2, (a4)489; RV32IA-TSO-ZACAS-NEXT: and a5, a2, a3490; RV32IA-TSO-ZACAS-NEXT: bne a5, a1, .LBB2_3491; RV32IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB2_1 Depth=1492; RV32IA-TSO-ZACAS-NEXT: xor a5, a2, a0493; RV32IA-TSO-ZACAS-NEXT: and a5, a5, a3494; RV32IA-TSO-ZACAS-NEXT: xor a5, a2, a5495; RV32IA-TSO-ZACAS-NEXT: sc.w a5, a5, (a4)496; RV32IA-TSO-ZACAS-NEXT: bnez a5, .LBB2_1497; RV32IA-TSO-ZACAS-NEXT: .LBB2_3:498; RV32IA-TSO-ZACAS-NEXT: ret499;500; RV64I-LABEL: cmpxchg_i8_acquire_acquire:501; RV64I: # %bb.0:502; RV64I-NEXT: addi sp, sp, -16503; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill504; RV64I-NEXT: sb a1, 7(sp)505; RV64I-NEXT: addi a1, sp, 7506; RV64I-NEXT: li a3, 2507; RV64I-NEXT: li a4, 2508; RV64I-NEXT: call __atomic_compare_exchange_1509; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload510; RV64I-NEXT: addi sp, sp, 16511; RV64I-NEXT: ret512;513; RV64IA-WMO-LABEL: cmpxchg_i8_acquire_acquire:514; RV64IA-WMO: # %bb.0:515; RV64IA-WMO-NEXT: li a3, 255516; RV64IA-WMO-NEXT: andi a4, a0, -4517; RV64IA-WMO-NEXT: andi a0, a0, 3518; RV64IA-WMO-NEXT: zext.b a1, a1519; RV64IA-WMO-NEXT: zext.b a2, a2520; RV64IA-WMO-NEXT: slli a0, a0, 3521; RV64IA-WMO-NEXT: sllw a3, a3, a0522; RV64IA-WMO-NEXT: sllw a1, a1, a0523; RV64IA-WMO-NEXT: sllw a0, a2, a0524; RV64IA-WMO-NEXT: .LBB2_1: # =>This Inner Loop Header: Depth=1525; RV64IA-WMO-NEXT: lr.w.aq a2, (a4)526; RV64IA-WMO-NEXT: and a5, a2, a3527; RV64IA-WMO-NEXT: bne a5, a1, .LBB2_3528; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB2_1 Depth=1529; RV64IA-WMO-NEXT: xor a5, a2, a0530; RV64IA-WMO-NEXT: and a5, a5, a3531; RV64IA-WMO-NEXT: xor a5, a2, a5532; RV64IA-WMO-NEXT: sc.w a5, a5, (a4)533; RV64IA-WMO-NEXT: bnez a5, .LBB2_1534; RV64IA-WMO-NEXT: .LBB2_3:535; RV64IA-WMO-NEXT: ret536;537; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i8_acquire_acquire:538; RV64IA-WMO-ZACAS: # %bb.0:539; RV64IA-WMO-ZACAS-NEXT: li a3, 255540; RV64IA-WMO-ZACAS-NEXT: andi a4, a0, -4541; RV64IA-WMO-ZACAS-NEXT: andi a0, a0, 3542; RV64IA-WMO-ZACAS-NEXT: zext.b a1, a1543; RV64IA-WMO-ZACAS-NEXT: zext.b a2, a2544; RV64IA-WMO-ZACAS-NEXT: slli a0, a0, 3545; RV64IA-WMO-ZACAS-NEXT: sllw a3, a3, a0546; RV64IA-WMO-ZACAS-NEXT: sllw a1, a1, a0547; RV64IA-WMO-ZACAS-NEXT: sllw a0, a2, a0548; RV64IA-WMO-ZACAS-NEXT: .LBB2_1: # =>This Inner Loop Header: Depth=1549; RV64IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)550; RV64IA-WMO-ZACAS-NEXT: and a5, a2, a3551; RV64IA-WMO-ZACAS-NEXT: bne a5, a1, .LBB2_3552; RV64IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB2_1 Depth=1553; RV64IA-WMO-ZACAS-NEXT: xor a5, a2, a0554; RV64IA-WMO-ZACAS-NEXT: and a5, a5, a3555; RV64IA-WMO-ZACAS-NEXT: xor a5, a2, a5556; RV64IA-WMO-ZACAS-NEXT: sc.w a5, a5, (a4)557; RV64IA-WMO-ZACAS-NEXT: bnez a5, .LBB2_1558; RV64IA-WMO-ZACAS-NEXT: .LBB2_3:559; RV64IA-WMO-ZACAS-NEXT: ret560;561; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_acquire_acquire:562; RV64IA-WMO-ZABHA: # %bb.0:563; RV64IA-WMO-ZABHA-NEXT: amocas.b.aq a1, a2, (a0)564; RV64IA-WMO-ZABHA-NEXT: ret565;566; RV64IA-TSO-LABEL: cmpxchg_i8_acquire_acquire:567; RV64IA-TSO: # %bb.0:568; RV64IA-TSO-NEXT: li a3, 255569; RV64IA-TSO-NEXT: andi a4, a0, -4570; RV64IA-TSO-NEXT: andi a0, a0, 3571; RV64IA-TSO-NEXT: zext.b a1, a1572; RV64IA-TSO-NEXT: zext.b a2, a2573; RV64IA-TSO-NEXT: slli a0, a0, 3574; RV64IA-TSO-NEXT: sllw a3, a3, a0575; RV64IA-TSO-NEXT: sllw a1, a1, a0576; RV64IA-TSO-NEXT: sllw a0, a2, a0577; RV64IA-TSO-NEXT: .LBB2_1: # =>This Inner Loop Header: Depth=1578; RV64IA-TSO-NEXT: lr.w a2, (a4)579; RV64IA-TSO-NEXT: and a5, a2, a3580; RV64IA-TSO-NEXT: bne a5, a1, .LBB2_3581; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB2_1 Depth=1582; RV64IA-TSO-NEXT: xor a5, a2, a0583; RV64IA-TSO-NEXT: and a5, a5, a3584; RV64IA-TSO-NEXT: xor a5, a2, a5585; RV64IA-TSO-NEXT: sc.w a5, a5, (a4)586; RV64IA-TSO-NEXT: bnez a5, .LBB2_1587; RV64IA-TSO-NEXT: .LBB2_3:588; RV64IA-TSO-NEXT: ret589;590; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i8_acquire_acquire:591; RV64IA-TSO-ZACAS: # %bb.0:592; RV64IA-TSO-ZACAS-NEXT: li a3, 255593; RV64IA-TSO-ZACAS-NEXT: andi a4, a0, -4594; RV64IA-TSO-ZACAS-NEXT: andi a0, a0, 3595; RV64IA-TSO-ZACAS-NEXT: zext.b a1, a1596; RV64IA-TSO-ZACAS-NEXT: zext.b a2, a2597; RV64IA-TSO-ZACAS-NEXT: slli a0, a0, 3598; RV64IA-TSO-ZACAS-NEXT: sllw a3, a3, a0599; RV64IA-TSO-ZACAS-NEXT: sllw a1, a1, a0600; RV64IA-TSO-ZACAS-NEXT: sllw a0, a2, a0601; RV64IA-TSO-ZACAS-NEXT: .LBB2_1: # =>This Inner Loop Header: Depth=1602; RV64IA-TSO-ZACAS-NEXT: lr.w a2, (a4)603; RV64IA-TSO-ZACAS-NEXT: and a5, a2, a3604; RV64IA-TSO-ZACAS-NEXT: bne a5, a1, .LBB2_3605; RV64IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB2_1 Depth=1606; RV64IA-TSO-ZACAS-NEXT: xor a5, a2, a0607; RV64IA-TSO-ZACAS-NEXT: and a5, a5, a3608; RV64IA-TSO-ZACAS-NEXT: xor a5, a2, a5609; RV64IA-TSO-ZACAS-NEXT: sc.w a5, a5, (a4)610; RV64IA-TSO-ZACAS-NEXT: bnez a5, .LBB2_1611; RV64IA-TSO-ZACAS-NEXT: .LBB2_3:612; RV64IA-TSO-ZACAS-NEXT: ret613;614; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_acquire_acquire:615; RV64IA-TSO-ZABHA: # %bb.0:616; RV64IA-TSO-ZABHA-NEXT: amocas.b a1, a2, (a0)617; RV64IA-TSO-ZABHA-NEXT: ret618 %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val acquire acquire619 ret void620}621 622define void @cmpxchg_i8_release_monotonic(ptr %ptr, i8 %cmp, i8 %val) nounwind {623; RV32I-LABEL: cmpxchg_i8_release_monotonic:624; RV32I: # %bb.0:625; RV32I-NEXT: addi sp, sp, -16626; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill627; RV32I-NEXT: sb a1, 11(sp)628; RV32I-NEXT: addi a1, sp, 11629; RV32I-NEXT: li a3, 3630; RV32I-NEXT: li a4, 0631; RV32I-NEXT: call __atomic_compare_exchange_1632; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload633; RV32I-NEXT: addi sp, sp, 16634; RV32I-NEXT: ret635;636; RV32IA-WMO-LABEL: cmpxchg_i8_release_monotonic:637; RV32IA-WMO: # %bb.0:638; RV32IA-WMO-NEXT: li a3, 255639; RV32IA-WMO-NEXT: andi a4, a0, -4640; RV32IA-WMO-NEXT: andi a0, a0, 3641; RV32IA-WMO-NEXT: zext.b a1, a1642; RV32IA-WMO-NEXT: zext.b a2, a2643; RV32IA-WMO-NEXT: slli a0, a0, 3644; RV32IA-WMO-NEXT: sll a3, a3, a0645; RV32IA-WMO-NEXT: sll a1, a1, a0646; RV32IA-WMO-NEXT: sll a0, a2, a0647; RV32IA-WMO-NEXT: .LBB3_1: # =>This Inner Loop Header: Depth=1648; RV32IA-WMO-NEXT: lr.w a2, (a4)649; RV32IA-WMO-NEXT: and a5, a2, a3650; RV32IA-WMO-NEXT: bne a5, a1, .LBB3_3651; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB3_1 Depth=1652; RV32IA-WMO-NEXT: xor a5, a2, a0653; RV32IA-WMO-NEXT: and a5, a5, a3654; RV32IA-WMO-NEXT: xor a5, a2, a5655; RV32IA-WMO-NEXT: sc.w.rl a5, a5, (a4)656; RV32IA-WMO-NEXT: bnez a5, .LBB3_1657; RV32IA-WMO-NEXT: .LBB3_3:658; RV32IA-WMO-NEXT: ret659;660; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i8_release_monotonic:661; RV32IA-WMO-ZACAS: # %bb.0:662; RV32IA-WMO-ZACAS-NEXT: li a3, 255663; RV32IA-WMO-ZACAS-NEXT: andi a4, a0, -4664; RV32IA-WMO-ZACAS-NEXT: andi a0, a0, 3665; RV32IA-WMO-ZACAS-NEXT: zext.b a1, a1666; RV32IA-WMO-ZACAS-NEXT: zext.b a2, a2667; RV32IA-WMO-ZACAS-NEXT: slli a0, a0, 3668; RV32IA-WMO-ZACAS-NEXT: sll a3, a3, a0669; RV32IA-WMO-ZACAS-NEXT: sll a1, a1, a0670; RV32IA-WMO-ZACAS-NEXT: sll a0, a2, a0671; RV32IA-WMO-ZACAS-NEXT: .LBB3_1: # =>This Inner Loop Header: Depth=1672; RV32IA-WMO-ZACAS-NEXT: lr.w a2, (a4)673; RV32IA-WMO-ZACAS-NEXT: and a5, a2, a3674; RV32IA-WMO-ZACAS-NEXT: bne a5, a1, .LBB3_3675; RV32IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB3_1 Depth=1676; RV32IA-WMO-ZACAS-NEXT: xor a5, a2, a0677; RV32IA-WMO-ZACAS-NEXT: and a5, a5, a3678; RV32IA-WMO-ZACAS-NEXT: xor a5, a2, a5679; RV32IA-WMO-ZACAS-NEXT: sc.w.rl a5, a5, (a4)680; RV32IA-WMO-ZACAS-NEXT: bnez a5, .LBB3_1681; RV32IA-WMO-ZACAS-NEXT: .LBB3_3:682; RV32IA-WMO-ZACAS-NEXT: ret683;684; RV32IA-TSO-LABEL: cmpxchg_i8_release_monotonic:685; RV32IA-TSO: # %bb.0:686; RV32IA-TSO-NEXT: li a3, 255687; RV32IA-TSO-NEXT: andi a4, a0, -4688; RV32IA-TSO-NEXT: andi a0, a0, 3689; RV32IA-TSO-NEXT: zext.b a1, a1690; RV32IA-TSO-NEXT: zext.b a2, a2691; RV32IA-TSO-NEXT: slli a0, a0, 3692; RV32IA-TSO-NEXT: sll a3, a3, a0693; RV32IA-TSO-NEXT: sll a1, a1, a0694; RV32IA-TSO-NEXT: sll a0, a2, a0695; RV32IA-TSO-NEXT: .LBB3_1: # =>This Inner Loop Header: Depth=1696; RV32IA-TSO-NEXT: lr.w a2, (a4)697; RV32IA-TSO-NEXT: and a5, a2, a3698; RV32IA-TSO-NEXT: bne a5, a1, .LBB3_3699; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB3_1 Depth=1700; RV32IA-TSO-NEXT: xor a5, a2, a0701; RV32IA-TSO-NEXT: and a5, a5, a3702; RV32IA-TSO-NEXT: xor a5, a2, a5703; RV32IA-TSO-NEXT: sc.w a5, a5, (a4)704; RV32IA-TSO-NEXT: bnez a5, .LBB3_1705; RV32IA-TSO-NEXT: .LBB3_3:706; RV32IA-TSO-NEXT: ret707;708; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i8_release_monotonic:709; RV32IA-TSO-ZACAS: # %bb.0:710; RV32IA-TSO-ZACAS-NEXT: li a3, 255711; RV32IA-TSO-ZACAS-NEXT: andi a4, a0, -4712; RV32IA-TSO-ZACAS-NEXT: andi a0, a0, 3713; RV32IA-TSO-ZACAS-NEXT: zext.b a1, a1714; RV32IA-TSO-ZACAS-NEXT: zext.b a2, a2715; RV32IA-TSO-ZACAS-NEXT: slli a0, a0, 3716; RV32IA-TSO-ZACAS-NEXT: sll a3, a3, a0717; RV32IA-TSO-ZACAS-NEXT: sll a1, a1, a0718; RV32IA-TSO-ZACAS-NEXT: sll a0, a2, a0719; RV32IA-TSO-ZACAS-NEXT: .LBB3_1: # =>This Inner Loop Header: Depth=1720; RV32IA-TSO-ZACAS-NEXT: lr.w a2, (a4)721; RV32IA-TSO-ZACAS-NEXT: and a5, a2, a3722; RV32IA-TSO-ZACAS-NEXT: bne a5, a1, .LBB3_3723; RV32IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB3_1 Depth=1724; RV32IA-TSO-ZACAS-NEXT: xor a5, a2, a0725; RV32IA-TSO-ZACAS-NEXT: and a5, a5, a3726; RV32IA-TSO-ZACAS-NEXT: xor a5, a2, a5727; RV32IA-TSO-ZACAS-NEXT: sc.w a5, a5, (a4)728; RV32IA-TSO-ZACAS-NEXT: bnez a5, .LBB3_1729; RV32IA-TSO-ZACAS-NEXT: .LBB3_3:730; RV32IA-TSO-ZACAS-NEXT: ret731;732; RV64I-LABEL: cmpxchg_i8_release_monotonic:733; RV64I: # %bb.0:734; RV64I-NEXT: addi sp, sp, -16735; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill736; RV64I-NEXT: sb a1, 7(sp)737; RV64I-NEXT: addi a1, sp, 7738; RV64I-NEXT: li a3, 3739; RV64I-NEXT: li a4, 0740; RV64I-NEXT: call __atomic_compare_exchange_1741; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload742; RV64I-NEXT: addi sp, sp, 16743; RV64I-NEXT: ret744;745; RV64IA-WMO-LABEL: cmpxchg_i8_release_monotonic:746; RV64IA-WMO: # %bb.0:747; RV64IA-WMO-NEXT: li a3, 255748; RV64IA-WMO-NEXT: andi a4, a0, -4749; RV64IA-WMO-NEXT: andi a0, a0, 3750; RV64IA-WMO-NEXT: zext.b a1, a1751; RV64IA-WMO-NEXT: zext.b a2, a2752; RV64IA-WMO-NEXT: slli a0, a0, 3753; RV64IA-WMO-NEXT: sllw a3, a3, a0754; RV64IA-WMO-NEXT: sllw a1, a1, a0755; RV64IA-WMO-NEXT: sllw a0, a2, a0756; RV64IA-WMO-NEXT: .LBB3_1: # =>This Inner Loop Header: Depth=1757; RV64IA-WMO-NEXT: lr.w a2, (a4)758; RV64IA-WMO-NEXT: and a5, a2, a3759; RV64IA-WMO-NEXT: bne a5, a1, .LBB3_3760; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB3_1 Depth=1761; RV64IA-WMO-NEXT: xor a5, a2, a0762; RV64IA-WMO-NEXT: and a5, a5, a3763; RV64IA-WMO-NEXT: xor a5, a2, a5764; RV64IA-WMO-NEXT: sc.w.rl a5, a5, (a4)765; RV64IA-WMO-NEXT: bnez a5, .LBB3_1766; RV64IA-WMO-NEXT: .LBB3_3:767; RV64IA-WMO-NEXT: ret768;769; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i8_release_monotonic:770; RV64IA-WMO-ZACAS: # %bb.0:771; RV64IA-WMO-ZACAS-NEXT: li a3, 255772; RV64IA-WMO-ZACAS-NEXT: andi a4, a0, -4773; RV64IA-WMO-ZACAS-NEXT: andi a0, a0, 3774; RV64IA-WMO-ZACAS-NEXT: zext.b a1, a1775; RV64IA-WMO-ZACAS-NEXT: zext.b a2, a2776; RV64IA-WMO-ZACAS-NEXT: slli a0, a0, 3777; RV64IA-WMO-ZACAS-NEXT: sllw a3, a3, a0778; RV64IA-WMO-ZACAS-NEXT: sllw a1, a1, a0779; RV64IA-WMO-ZACAS-NEXT: sllw a0, a2, a0780; RV64IA-WMO-ZACAS-NEXT: .LBB3_1: # =>This Inner Loop Header: Depth=1781; RV64IA-WMO-ZACAS-NEXT: lr.w a2, (a4)782; RV64IA-WMO-ZACAS-NEXT: and a5, a2, a3783; RV64IA-WMO-ZACAS-NEXT: bne a5, a1, .LBB3_3784; RV64IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB3_1 Depth=1785; RV64IA-WMO-ZACAS-NEXT: xor a5, a2, a0786; RV64IA-WMO-ZACAS-NEXT: and a5, a5, a3787; RV64IA-WMO-ZACAS-NEXT: xor a5, a2, a5788; RV64IA-WMO-ZACAS-NEXT: sc.w.rl a5, a5, (a4)789; RV64IA-WMO-ZACAS-NEXT: bnez a5, .LBB3_1790; RV64IA-WMO-ZACAS-NEXT: .LBB3_3:791; RV64IA-WMO-ZACAS-NEXT: ret792;793; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_release_monotonic:794; RV64IA-WMO-ZABHA: # %bb.0:795; RV64IA-WMO-ZABHA-NEXT: amocas.b.rl a1, a2, (a0)796; RV64IA-WMO-ZABHA-NEXT: ret797;798; RV64IA-TSO-LABEL: cmpxchg_i8_release_monotonic:799; RV64IA-TSO: # %bb.0:800; RV64IA-TSO-NEXT: li a3, 255801; RV64IA-TSO-NEXT: andi a4, a0, -4802; RV64IA-TSO-NEXT: andi a0, a0, 3803; RV64IA-TSO-NEXT: zext.b a1, a1804; RV64IA-TSO-NEXT: zext.b a2, a2805; RV64IA-TSO-NEXT: slli a0, a0, 3806; RV64IA-TSO-NEXT: sllw a3, a3, a0807; RV64IA-TSO-NEXT: sllw a1, a1, a0808; RV64IA-TSO-NEXT: sllw a0, a2, a0809; RV64IA-TSO-NEXT: .LBB3_1: # =>This Inner Loop Header: Depth=1810; RV64IA-TSO-NEXT: lr.w a2, (a4)811; RV64IA-TSO-NEXT: and a5, a2, a3812; RV64IA-TSO-NEXT: bne a5, a1, .LBB3_3813; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB3_1 Depth=1814; RV64IA-TSO-NEXT: xor a5, a2, a0815; RV64IA-TSO-NEXT: and a5, a5, a3816; RV64IA-TSO-NEXT: xor a5, a2, a5817; RV64IA-TSO-NEXT: sc.w a5, a5, (a4)818; RV64IA-TSO-NEXT: bnez a5, .LBB3_1819; RV64IA-TSO-NEXT: .LBB3_3:820; RV64IA-TSO-NEXT: ret821;822; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i8_release_monotonic:823; RV64IA-TSO-ZACAS: # %bb.0:824; RV64IA-TSO-ZACAS-NEXT: li a3, 255825; RV64IA-TSO-ZACAS-NEXT: andi a4, a0, -4826; RV64IA-TSO-ZACAS-NEXT: andi a0, a0, 3827; RV64IA-TSO-ZACAS-NEXT: zext.b a1, a1828; RV64IA-TSO-ZACAS-NEXT: zext.b a2, a2829; RV64IA-TSO-ZACAS-NEXT: slli a0, a0, 3830; RV64IA-TSO-ZACAS-NEXT: sllw a3, a3, a0831; RV64IA-TSO-ZACAS-NEXT: sllw a1, a1, a0832; RV64IA-TSO-ZACAS-NEXT: sllw a0, a2, a0833; RV64IA-TSO-ZACAS-NEXT: .LBB3_1: # =>This Inner Loop Header: Depth=1834; RV64IA-TSO-ZACAS-NEXT: lr.w a2, (a4)835; RV64IA-TSO-ZACAS-NEXT: and a5, a2, a3836; RV64IA-TSO-ZACAS-NEXT: bne a5, a1, .LBB3_3837; RV64IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB3_1 Depth=1838; RV64IA-TSO-ZACAS-NEXT: xor a5, a2, a0839; RV64IA-TSO-ZACAS-NEXT: and a5, a5, a3840; RV64IA-TSO-ZACAS-NEXT: xor a5, a2, a5841; RV64IA-TSO-ZACAS-NEXT: sc.w a5, a5, (a4)842; RV64IA-TSO-ZACAS-NEXT: bnez a5, .LBB3_1843; RV64IA-TSO-ZACAS-NEXT: .LBB3_3:844; RV64IA-TSO-ZACAS-NEXT: ret845;846; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_release_monotonic:847; RV64IA-TSO-ZABHA: # %bb.0:848; RV64IA-TSO-ZABHA-NEXT: amocas.b a1, a2, (a0)849; RV64IA-TSO-ZABHA-NEXT: ret850 %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val release monotonic851 ret void852}853 854define void @cmpxchg_i8_release_acquire(ptr %ptr, i8 %cmp, i8 %val) nounwind {855; RV32I-LABEL: cmpxchg_i8_release_acquire:856; RV32I: # %bb.0:857; RV32I-NEXT: addi sp, sp, -16858; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill859; RV32I-NEXT: sb a1, 11(sp)860; RV32I-NEXT: addi a1, sp, 11861; RV32I-NEXT: li a3, 3862; RV32I-NEXT: li a4, 2863; RV32I-NEXT: call __atomic_compare_exchange_1864; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload865; RV32I-NEXT: addi sp, sp, 16866; RV32I-NEXT: ret867;868; RV32IA-WMO-LABEL: cmpxchg_i8_release_acquire:869; RV32IA-WMO: # %bb.0:870; RV32IA-WMO-NEXT: li a3, 255871; RV32IA-WMO-NEXT: andi a4, a0, -4872; RV32IA-WMO-NEXT: andi a0, a0, 3873; RV32IA-WMO-NEXT: zext.b a1, a1874; RV32IA-WMO-NEXT: zext.b a2, a2875; RV32IA-WMO-NEXT: slli a0, a0, 3876; RV32IA-WMO-NEXT: sll a3, a3, a0877; RV32IA-WMO-NEXT: sll a1, a1, a0878; RV32IA-WMO-NEXT: sll a0, a2, a0879; RV32IA-WMO-NEXT: .LBB4_1: # =>This Inner Loop Header: Depth=1880; RV32IA-WMO-NEXT: lr.w.aq a2, (a4)881; RV32IA-WMO-NEXT: and a5, a2, a3882; RV32IA-WMO-NEXT: bne a5, a1, .LBB4_3883; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB4_1 Depth=1884; RV32IA-WMO-NEXT: xor a5, a2, a0885; RV32IA-WMO-NEXT: and a5, a5, a3886; RV32IA-WMO-NEXT: xor a5, a2, a5887; RV32IA-WMO-NEXT: sc.w.rl a5, a5, (a4)888; RV32IA-WMO-NEXT: bnez a5, .LBB4_1889; RV32IA-WMO-NEXT: .LBB4_3:890; RV32IA-WMO-NEXT: ret891;892; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i8_release_acquire:893; RV32IA-WMO-ZACAS: # %bb.0:894; RV32IA-WMO-ZACAS-NEXT: li a3, 255895; RV32IA-WMO-ZACAS-NEXT: andi a4, a0, -4896; RV32IA-WMO-ZACAS-NEXT: andi a0, a0, 3897; RV32IA-WMO-ZACAS-NEXT: zext.b a1, a1898; RV32IA-WMO-ZACAS-NEXT: zext.b a2, a2899; RV32IA-WMO-ZACAS-NEXT: slli a0, a0, 3900; RV32IA-WMO-ZACAS-NEXT: sll a3, a3, a0901; RV32IA-WMO-ZACAS-NEXT: sll a1, a1, a0902; RV32IA-WMO-ZACAS-NEXT: sll a0, a2, a0903; RV32IA-WMO-ZACAS-NEXT: .LBB4_1: # =>This Inner Loop Header: Depth=1904; RV32IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)905; RV32IA-WMO-ZACAS-NEXT: and a5, a2, a3906; RV32IA-WMO-ZACAS-NEXT: bne a5, a1, .LBB4_3907; RV32IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB4_1 Depth=1908; RV32IA-WMO-ZACAS-NEXT: xor a5, a2, a0909; RV32IA-WMO-ZACAS-NEXT: and a5, a5, a3910; RV32IA-WMO-ZACAS-NEXT: xor a5, a2, a5911; RV32IA-WMO-ZACAS-NEXT: sc.w.rl a5, a5, (a4)912; RV32IA-WMO-ZACAS-NEXT: bnez a5, .LBB4_1913; RV32IA-WMO-ZACAS-NEXT: .LBB4_3:914; RV32IA-WMO-ZACAS-NEXT: ret915;916; RV32IA-TSO-LABEL: cmpxchg_i8_release_acquire:917; RV32IA-TSO: # %bb.0:918; RV32IA-TSO-NEXT: li a3, 255919; RV32IA-TSO-NEXT: andi a4, a0, -4920; RV32IA-TSO-NEXT: andi a0, a0, 3921; RV32IA-TSO-NEXT: zext.b a1, a1922; RV32IA-TSO-NEXT: zext.b a2, a2923; RV32IA-TSO-NEXT: slli a0, a0, 3924; RV32IA-TSO-NEXT: sll a3, a3, a0925; RV32IA-TSO-NEXT: sll a1, a1, a0926; RV32IA-TSO-NEXT: sll a0, a2, a0927; RV32IA-TSO-NEXT: .LBB4_1: # =>This Inner Loop Header: Depth=1928; RV32IA-TSO-NEXT: lr.w a2, (a4)929; RV32IA-TSO-NEXT: and a5, a2, a3930; RV32IA-TSO-NEXT: bne a5, a1, .LBB4_3931; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB4_1 Depth=1932; RV32IA-TSO-NEXT: xor a5, a2, a0933; RV32IA-TSO-NEXT: and a5, a5, a3934; RV32IA-TSO-NEXT: xor a5, a2, a5935; RV32IA-TSO-NEXT: sc.w a5, a5, (a4)936; RV32IA-TSO-NEXT: bnez a5, .LBB4_1937; RV32IA-TSO-NEXT: .LBB4_3:938; RV32IA-TSO-NEXT: ret939;940; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i8_release_acquire:941; RV32IA-TSO-ZACAS: # %bb.0:942; RV32IA-TSO-ZACAS-NEXT: li a3, 255943; RV32IA-TSO-ZACAS-NEXT: andi a4, a0, -4944; RV32IA-TSO-ZACAS-NEXT: andi a0, a0, 3945; RV32IA-TSO-ZACAS-NEXT: zext.b a1, a1946; RV32IA-TSO-ZACAS-NEXT: zext.b a2, a2947; RV32IA-TSO-ZACAS-NEXT: slli a0, a0, 3948; RV32IA-TSO-ZACAS-NEXT: sll a3, a3, a0949; RV32IA-TSO-ZACAS-NEXT: sll a1, a1, a0950; RV32IA-TSO-ZACAS-NEXT: sll a0, a2, a0951; RV32IA-TSO-ZACAS-NEXT: .LBB4_1: # =>This Inner Loop Header: Depth=1952; RV32IA-TSO-ZACAS-NEXT: lr.w a2, (a4)953; RV32IA-TSO-ZACAS-NEXT: and a5, a2, a3954; RV32IA-TSO-ZACAS-NEXT: bne a5, a1, .LBB4_3955; RV32IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB4_1 Depth=1956; RV32IA-TSO-ZACAS-NEXT: xor a5, a2, a0957; RV32IA-TSO-ZACAS-NEXT: and a5, a5, a3958; RV32IA-TSO-ZACAS-NEXT: xor a5, a2, a5959; RV32IA-TSO-ZACAS-NEXT: sc.w a5, a5, (a4)960; RV32IA-TSO-ZACAS-NEXT: bnez a5, .LBB4_1961; RV32IA-TSO-ZACAS-NEXT: .LBB4_3:962; RV32IA-TSO-ZACAS-NEXT: ret963;964; RV64I-LABEL: cmpxchg_i8_release_acquire:965; RV64I: # %bb.0:966; RV64I-NEXT: addi sp, sp, -16967; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill968; RV64I-NEXT: sb a1, 7(sp)969; RV64I-NEXT: addi a1, sp, 7970; RV64I-NEXT: li a3, 3971; RV64I-NEXT: li a4, 2972; RV64I-NEXT: call __atomic_compare_exchange_1973; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload974; RV64I-NEXT: addi sp, sp, 16975; RV64I-NEXT: ret976;977; RV64IA-WMO-LABEL: cmpxchg_i8_release_acquire:978; RV64IA-WMO: # %bb.0:979; RV64IA-WMO-NEXT: li a3, 255980; RV64IA-WMO-NEXT: andi a4, a0, -4981; RV64IA-WMO-NEXT: andi a0, a0, 3982; RV64IA-WMO-NEXT: zext.b a1, a1983; RV64IA-WMO-NEXT: zext.b a2, a2984; RV64IA-WMO-NEXT: slli a0, a0, 3985; RV64IA-WMO-NEXT: sllw a3, a3, a0986; RV64IA-WMO-NEXT: sllw a1, a1, a0987; RV64IA-WMO-NEXT: sllw a0, a2, a0988; RV64IA-WMO-NEXT: .LBB4_1: # =>This Inner Loop Header: Depth=1989; RV64IA-WMO-NEXT: lr.w.aq a2, (a4)990; RV64IA-WMO-NEXT: and a5, a2, a3991; RV64IA-WMO-NEXT: bne a5, a1, .LBB4_3992; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB4_1 Depth=1993; RV64IA-WMO-NEXT: xor a5, a2, a0994; RV64IA-WMO-NEXT: and a5, a5, a3995; RV64IA-WMO-NEXT: xor a5, a2, a5996; RV64IA-WMO-NEXT: sc.w.rl a5, a5, (a4)997; RV64IA-WMO-NEXT: bnez a5, .LBB4_1998; RV64IA-WMO-NEXT: .LBB4_3:999; RV64IA-WMO-NEXT: ret1000;1001; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i8_release_acquire:1002; RV64IA-WMO-ZACAS: # %bb.0:1003; RV64IA-WMO-ZACAS-NEXT: li a3, 2551004; RV64IA-WMO-ZACAS-NEXT: andi a4, a0, -41005; RV64IA-WMO-ZACAS-NEXT: andi a0, a0, 31006; RV64IA-WMO-ZACAS-NEXT: zext.b a1, a11007; RV64IA-WMO-ZACAS-NEXT: zext.b a2, a21008; RV64IA-WMO-ZACAS-NEXT: slli a0, a0, 31009; RV64IA-WMO-ZACAS-NEXT: sllw a3, a3, a01010; RV64IA-WMO-ZACAS-NEXT: sllw a1, a1, a01011; RV64IA-WMO-ZACAS-NEXT: sllw a0, a2, a01012; RV64IA-WMO-ZACAS-NEXT: .LBB4_1: # =>This Inner Loop Header: Depth=11013; RV64IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)1014; RV64IA-WMO-ZACAS-NEXT: and a5, a2, a31015; RV64IA-WMO-ZACAS-NEXT: bne a5, a1, .LBB4_31016; RV64IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB4_1 Depth=11017; RV64IA-WMO-ZACAS-NEXT: xor a5, a2, a01018; RV64IA-WMO-ZACAS-NEXT: and a5, a5, a31019; RV64IA-WMO-ZACAS-NEXT: xor a5, a2, a51020; RV64IA-WMO-ZACAS-NEXT: sc.w.rl a5, a5, (a4)1021; RV64IA-WMO-ZACAS-NEXT: bnez a5, .LBB4_11022; RV64IA-WMO-ZACAS-NEXT: .LBB4_3:1023; RV64IA-WMO-ZACAS-NEXT: ret1024;1025; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_release_acquire:1026; RV64IA-WMO-ZABHA: # %bb.0:1027; RV64IA-WMO-ZABHA-NEXT: amocas.b.aqrl a1, a2, (a0)1028; RV64IA-WMO-ZABHA-NEXT: ret1029;1030; RV64IA-TSO-LABEL: cmpxchg_i8_release_acquire:1031; RV64IA-TSO: # %bb.0:1032; RV64IA-TSO-NEXT: li a3, 2551033; RV64IA-TSO-NEXT: andi a4, a0, -41034; RV64IA-TSO-NEXT: andi a0, a0, 31035; RV64IA-TSO-NEXT: zext.b a1, a11036; RV64IA-TSO-NEXT: zext.b a2, a21037; RV64IA-TSO-NEXT: slli a0, a0, 31038; RV64IA-TSO-NEXT: sllw a3, a3, a01039; RV64IA-TSO-NEXT: sllw a1, a1, a01040; RV64IA-TSO-NEXT: sllw a0, a2, a01041; RV64IA-TSO-NEXT: .LBB4_1: # =>This Inner Loop Header: Depth=11042; RV64IA-TSO-NEXT: lr.w a2, (a4)1043; RV64IA-TSO-NEXT: and a5, a2, a31044; RV64IA-TSO-NEXT: bne a5, a1, .LBB4_31045; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB4_1 Depth=11046; RV64IA-TSO-NEXT: xor a5, a2, a01047; RV64IA-TSO-NEXT: and a5, a5, a31048; RV64IA-TSO-NEXT: xor a5, a2, a51049; RV64IA-TSO-NEXT: sc.w a5, a5, (a4)1050; RV64IA-TSO-NEXT: bnez a5, .LBB4_11051; RV64IA-TSO-NEXT: .LBB4_3:1052; RV64IA-TSO-NEXT: ret1053;1054; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i8_release_acquire:1055; RV64IA-TSO-ZACAS: # %bb.0:1056; RV64IA-TSO-ZACAS-NEXT: li a3, 2551057; RV64IA-TSO-ZACAS-NEXT: andi a4, a0, -41058; RV64IA-TSO-ZACAS-NEXT: andi a0, a0, 31059; RV64IA-TSO-ZACAS-NEXT: zext.b a1, a11060; RV64IA-TSO-ZACAS-NEXT: zext.b a2, a21061; RV64IA-TSO-ZACAS-NEXT: slli a0, a0, 31062; RV64IA-TSO-ZACAS-NEXT: sllw a3, a3, a01063; RV64IA-TSO-ZACAS-NEXT: sllw a1, a1, a01064; RV64IA-TSO-ZACAS-NEXT: sllw a0, a2, a01065; RV64IA-TSO-ZACAS-NEXT: .LBB4_1: # =>This Inner Loop Header: Depth=11066; RV64IA-TSO-ZACAS-NEXT: lr.w a2, (a4)1067; RV64IA-TSO-ZACAS-NEXT: and a5, a2, a31068; RV64IA-TSO-ZACAS-NEXT: bne a5, a1, .LBB4_31069; RV64IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB4_1 Depth=11070; RV64IA-TSO-ZACAS-NEXT: xor a5, a2, a01071; RV64IA-TSO-ZACAS-NEXT: and a5, a5, a31072; RV64IA-TSO-ZACAS-NEXT: xor a5, a2, a51073; RV64IA-TSO-ZACAS-NEXT: sc.w a5, a5, (a4)1074; RV64IA-TSO-ZACAS-NEXT: bnez a5, .LBB4_11075; RV64IA-TSO-ZACAS-NEXT: .LBB4_3:1076; RV64IA-TSO-ZACAS-NEXT: ret1077;1078; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_release_acquire:1079; RV64IA-TSO-ZABHA: # %bb.0:1080; RV64IA-TSO-ZABHA-NEXT: amocas.b a1, a2, (a0)1081; RV64IA-TSO-ZABHA-NEXT: ret1082 %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val release acquire1083 ret void1084}1085 1086define void @cmpxchg_i8_acq_rel_monotonic(ptr %ptr, i8 %cmp, i8 %val) nounwind {1087; RV32I-LABEL: cmpxchg_i8_acq_rel_monotonic:1088; RV32I: # %bb.0:1089; RV32I-NEXT: addi sp, sp, -161090; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1091; RV32I-NEXT: sb a1, 11(sp)1092; RV32I-NEXT: addi a1, sp, 111093; RV32I-NEXT: li a3, 41094; RV32I-NEXT: li a4, 01095; RV32I-NEXT: call __atomic_compare_exchange_11096; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1097; RV32I-NEXT: addi sp, sp, 161098; RV32I-NEXT: ret1099;1100; RV32IA-WMO-LABEL: cmpxchg_i8_acq_rel_monotonic:1101; RV32IA-WMO: # %bb.0:1102; RV32IA-WMO-NEXT: li a3, 2551103; RV32IA-WMO-NEXT: andi a4, a0, -41104; RV32IA-WMO-NEXT: andi a0, a0, 31105; RV32IA-WMO-NEXT: zext.b a1, a11106; RV32IA-WMO-NEXT: zext.b a2, a21107; RV32IA-WMO-NEXT: slli a0, a0, 31108; RV32IA-WMO-NEXT: sll a3, a3, a01109; RV32IA-WMO-NEXT: sll a1, a1, a01110; RV32IA-WMO-NEXT: sll a0, a2, a01111; RV32IA-WMO-NEXT: .LBB5_1: # =>This Inner Loop Header: Depth=11112; RV32IA-WMO-NEXT: lr.w.aq a2, (a4)1113; RV32IA-WMO-NEXT: and a5, a2, a31114; RV32IA-WMO-NEXT: bne a5, a1, .LBB5_31115; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB5_1 Depth=11116; RV32IA-WMO-NEXT: xor a5, a2, a01117; RV32IA-WMO-NEXT: and a5, a5, a31118; RV32IA-WMO-NEXT: xor a5, a2, a51119; RV32IA-WMO-NEXT: sc.w.rl a5, a5, (a4)1120; RV32IA-WMO-NEXT: bnez a5, .LBB5_11121; RV32IA-WMO-NEXT: .LBB5_3:1122; RV32IA-WMO-NEXT: ret1123;1124; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i8_acq_rel_monotonic:1125; RV32IA-WMO-ZACAS: # %bb.0:1126; RV32IA-WMO-ZACAS-NEXT: li a3, 2551127; RV32IA-WMO-ZACAS-NEXT: andi a4, a0, -41128; RV32IA-WMO-ZACAS-NEXT: andi a0, a0, 31129; RV32IA-WMO-ZACAS-NEXT: zext.b a1, a11130; RV32IA-WMO-ZACAS-NEXT: zext.b a2, a21131; RV32IA-WMO-ZACAS-NEXT: slli a0, a0, 31132; RV32IA-WMO-ZACAS-NEXT: sll a3, a3, a01133; RV32IA-WMO-ZACAS-NEXT: sll a1, a1, a01134; RV32IA-WMO-ZACAS-NEXT: sll a0, a2, a01135; RV32IA-WMO-ZACAS-NEXT: .LBB5_1: # =>This Inner Loop Header: Depth=11136; RV32IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)1137; RV32IA-WMO-ZACAS-NEXT: and a5, a2, a31138; RV32IA-WMO-ZACAS-NEXT: bne a5, a1, .LBB5_31139; RV32IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB5_1 Depth=11140; RV32IA-WMO-ZACAS-NEXT: xor a5, a2, a01141; RV32IA-WMO-ZACAS-NEXT: and a5, a5, a31142; RV32IA-WMO-ZACAS-NEXT: xor a5, a2, a51143; RV32IA-WMO-ZACAS-NEXT: sc.w.rl a5, a5, (a4)1144; RV32IA-WMO-ZACAS-NEXT: bnez a5, .LBB5_11145; RV32IA-WMO-ZACAS-NEXT: .LBB5_3:1146; RV32IA-WMO-ZACAS-NEXT: ret1147;1148; RV32IA-TSO-LABEL: cmpxchg_i8_acq_rel_monotonic:1149; RV32IA-TSO: # %bb.0:1150; RV32IA-TSO-NEXT: li a3, 2551151; RV32IA-TSO-NEXT: andi a4, a0, -41152; RV32IA-TSO-NEXT: andi a0, a0, 31153; RV32IA-TSO-NEXT: zext.b a1, a11154; RV32IA-TSO-NEXT: zext.b a2, a21155; RV32IA-TSO-NEXT: slli a0, a0, 31156; RV32IA-TSO-NEXT: sll a3, a3, a01157; RV32IA-TSO-NEXT: sll a1, a1, a01158; RV32IA-TSO-NEXT: sll a0, a2, a01159; RV32IA-TSO-NEXT: .LBB5_1: # =>This Inner Loop Header: Depth=11160; RV32IA-TSO-NEXT: lr.w a2, (a4)1161; RV32IA-TSO-NEXT: and a5, a2, a31162; RV32IA-TSO-NEXT: bne a5, a1, .LBB5_31163; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB5_1 Depth=11164; RV32IA-TSO-NEXT: xor a5, a2, a01165; RV32IA-TSO-NEXT: and a5, a5, a31166; RV32IA-TSO-NEXT: xor a5, a2, a51167; RV32IA-TSO-NEXT: sc.w a5, a5, (a4)1168; RV32IA-TSO-NEXT: bnez a5, .LBB5_11169; RV32IA-TSO-NEXT: .LBB5_3:1170; RV32IA-TSO-NEXT: ret1171;1172; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i8_acq_rel_monotonic:1173; RV32IA-TSO-ZACAS: # %bb.0:1174; RV32IA-TSO-ZACAS-NEXT: li a3, 2551175; RV32IA-TSO-ZACAS-NEXT: andi a4, a0, -41176; RV32IA-TSO-ZACAS-NEXT: andi a0, a0, 31177; RV32IA-TSO-ZACAS-NEXT: zext.b a1, a11178; RV32IA-TSO-ZACAS-NEXT: zext.b a2, a21179; RV32IA-TSO-ZACAS-NEXT: slli a0, a0, 31180; RV32IA-TSO-ZACAS-NEXT: sll a3, a3, a01181; RV32IA-TSO-ZACAS-NEXT: sll a1, a1, a01182; RV32IA-TSO-ZACAS-NEXT: sll a0, a2, a01183; RV32IA-TSO-ZACAS-NEXT: .LBB5_1: # =>This Inner Loop Header: Depth=11184; RV32IA-TSO-ZACAS-NEXT: lr.w a2, (a4)1185; RV32IA-TSO-ZACAS-NEXT: and a5, a2, a31186; RV32IA-TSO-ZACAS-NEXT: bne a5, a1, .LBB5_31187; RV32IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB5_1 Depth=11188; RV32IA-TSO-ZACAS-NEXT: xor a5, a2, a01189; RV32IA-TSO-ZACAS-NEXT: and a5, a5, a31190; RV32IA-TSO-ZACAS-NEXT: xor a5, a2, a51191; RV32IA-TSO-ZACAS-NEXT: sc.w a5, a5, (a4)1192; RV32IA-TSO-ZACAS-NEXT: bnez a5, .LBB5_11193; RV32IA-TSO-ZACAS-NEXT: .LBB5_3:1194; RV32IA-TSO-ZACAS-NEXT: ret1195;1196; RV64I-LABEL: cmpxchg_i8_acq_rel_monotonic:1197; RV64I: # %bb.0:1198; RV64I-NEXT: addi sp, sp, -161199; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1200; RV64I-NEXT: sb a1, 7(sp)1201; RV64I-NEXT: addi a1, sp, 71202; RV64I-NEXT: li a3, 41203; RV64I-NEXT: li a4, 01204; RV64I-NEXT: call __atomic_compare_exchange_11205; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1206; RV64I-NEXT: addi sp, sp, 161207; RV64I-NEXT: ret1208;1209; RV64IA-WMO-LABEL: cmpxchg_i8_acq_rel_monotonic:1210; RV64IA-WMO: # %bb.0:1211; RV64IA-WMO-NEXT: li a3, 2551212; RV64IA-WMO-NEXT: andi a4, a0, -41213; RV64IA-WMO-NEXT: andi a0, a0, 31214; RV64IA-WMO-NEXT: zext.b a1, a11215; RV64IA-WMO-NEXT: zext.b a2, a21216; RV64IA-WMO-NEXT: slli a0, a0, 31217; RV64IA-WMO-NEXT: sllw a3, a3, a01218; RV64IA-WMO-NEXT: sllw a1, a1, a01219; RV64IA-WMO-NEXT: sllw a0, a2, a01220; RV64IA-WMO-NEXT: .LBB5_1: # =>This Inner Loop Header: Depth=11221; RV64IA-WMO-NEXT: lr.w.aq a2, (a4)1222; RV64IA-WMO-NEXT: and a5, a2, a31223; RV64IA-WMO-NEXT: bne a5, a1, .LBB5_31224; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB5_1 Depth=11225; RV64IA-WMO-NEXT: xor a5, a2, a01226; RV64IA-WMO-NEXT: and a5, a5, a31227; RV64IA-WMO-NEXT: xor a5, a2, a51228; RV64IA-WMO-NEXT: sc.w.rl a5, a5, (a4)1229; RV64IA-WMO-NEXT: bnez a5, .LBB5_11230; RV64IA-WMO-NEXT: .LBB5_3:1231; RV64IA-WMO-NEXT: ret1232;1233; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i8_acq_rel_monotonic:1234; RV64IA-WMO-ZACAS: # %bb.0:1235; RV64IA-WMO-ZACAS-NEXT: li a3, 2551236; RV64IA-WMO-ZACAS-NEXT: andi a4, a0, -41237; RV64IA-WMO-ZACAS-NEXT: andi a0, a0, 31238; RV64IA-WMO-ZACAS-NEXT: zext.b a1, a11239; RV64IA-WMO-ZACAS-NEXT: zext.b a2, a21240; RV64IA-WMO-ZACAS-NEXT: slli a0, a0, 31241; RV64IA-WMO-ZACAS-NEXT: sllw a3, a3, a01242; RV64IA-WMO-ZACAS-NEXT: sllw a1, a1, a01243; RV64IA-WMO-ZACAS-NEXT: sllw a0, a2, a01244; RV64IA-WMO-ZACAS-NEXT: .LBB5_1: # =>This Inner Loop Header: Depth=11245; RV64IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)1246; RV64IA-WMO-ZACAS-NEXT: and a5, a2, a31247; RV64IA-WMO-ZACAS-NEXT: bne a5, a1, .LBB5_31248; RV64IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB5_1 Depth=11249; RV64IA-WMO-ZACAS-NEXT: xor a5, a2, a01250; RV64IA-WMO-ZACAS-NEXT: and a5, a5, a31251; RV64IA-WMO-ZACAS-NEXT: xor a5, a2, a51252; RV64IA-WMO-ZACAS-NEXT: sc.w.rl a5, a5, (a4)1253; RV64IA-WMO-ZACAS-NEXT: bnez a5, .LBB5_11254; RV64IA-WMO-ZACAS-NEXT: .LBB5_3:1255; RV64IA-WMO-ZACAS-NEXT: ret1256;1257; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_acq_rel_monotonic:1258; RV64IA-WMO-ZABHA: # %bb.0:1259; RV64IA-WMO-ZABHA-NEXT: amocas.b.aqrl a1, a2, (a0)1260; RV64IA-WMO-ZABHA-NEXT: ret1261;1262; RV64IA-TSO-LABEL: cmpxchg_i8_acq_rel_monotonic:1263; RV64IA-TSO: # %bb.0:1264; RV64IA-TSO-NEXT: li a3, 2551265; RV64IA-TSO-NEXT: andi a4, a0, -41266; RV64IA-TSO-NEXT: andi a0, a0, 31267; RV64IA-TSO-NEXT: zext.b a1, a11268; RV64IA-TSO-NEXT: zext.b a2, a21269; RV64IA-TSO-NEXT: slli a0, a0, 31270; RV64IA-TSO-NEXT: sllw a3, a3, a01271; RV64IA-TSO-NEXT: sllw a1, a1, a01272; RV64IA-TSO-NEXT: sllw a0, a2, a01273; RV64IA-TSO-NEXT: .LBB5_1: # =>This Inner Loop Header: Depth=11274; RV64IA-TSO-NEXT: lr.w a2, (a4)1275; RV64IA-TSO-NEXT: and a5, a2, a31276; RV64IA-TSO-NEXT: bne a5, a1, .LBB5_31277; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB5_1 Depth=11278; RV64IA-TSO-NEXT: xor a5, a2, a01279; RV64IA-TSO-NEXT: and a5, a5, a31280; RV64IA-TSO-NEXT: xor a5, a2, a51281; RV64IA-TSO-NEXT: sc.w a5, a5, (a4)1282; RV64IA-TSO-NEXT: bnez a5, .LBB5_11283; RV64IA-TSO-NEXT: .LBB5_3:1284; RV64IA-TSO-NEXT: ret1285;1286; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i8_acq_rel_monotonic:1287; RV64IA-TSO-ZACAS: # %bb.0:1288; RV64IA-TSO-ZACAS-NEXT: li a3, 2551289; RV64IA-TSO-ZACAS-NEXT: andi a4, a0, -41290; RV64IA-TSO-ZACAS-NEXT: andi a0, a0, 31291; RV64IA-TSO-ZACAS-NEXT: zext.b a1, a11292; RV64IA-TSO-ZACAS-NEXT: zext.b a2, a21293; RV64IA-TSO-ZACAS-NEXT: slli a0, a0, 31294; RV64IA-TSO-ZACAS-NEXT: sllw a3, a3, a01295; RV64IA-TSO-ZACAS-NEXT: sllw a1, a1, a01296; RV64IA-TSO-ZACAS-NEXT: sllw a0, a2, a01297; RV64IA-TSO-ZACAS-NEXT: .LBB5_1: # =>This Inner Loop Header: Depth=11298; RV64IA-TSO-ZACAS-NEXT: lr.w a2, (a4)1299; RV64IA-TSO-ZACAS-NEXT: and a5, a2, a31300; RV64IA-TSO-ZACAS-NEXT: bne a5, a1, .LBB5_31301; RV64IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB5_1 Depth=11302; RV64IA-TSO-ZACAS-NEXT: xor a5, a2, a01303; RV64IA-TSO-ZACAS-NEXT: and a5, a5, a31304; RV64IA-TSO-ZACAS-NEXT: xor a5, a2, a51305; RV64IA-TSO-ZACAS-NEXT: sc.w a5, a5, (a4)1306; RV64IA-TSO-ZACAS-NEXT: bnez a5, .LBB5_11307; RV64IA-TSO-ZACAS-NEXT: .LBB5_3:1308; RV64IA-TSO-ZACAS-NEXT: ret1309;1310; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_acq_rel_monotonic:1311; RV64IA-TSO-ZABHA: # %bb.0:1312; RV64IA-TSO-ZABHA-NEXT: amocas.b a1, a2, (a0)1313; RV64IA-TSO-ZABHA-NEXT: ret1314 %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val acq_rel monotonic1315 ret void1316}1317 1318define void @cmpxchg_i8_acq_rel_acquire(ptr %ptr, i8 %cmp, i8 %val) nounwind {1319; RV32I-LABEL: cmpxchg_i8_acq_rel_acquire:1320; RV32I: # %bb.0:1321; RV32I-NEXT: addi sp, sp, -161322; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1323; RV32I-NEXT: sb a1, 11(sp)1324; RV32I-NEXT: addi a1, sp, 111325; RV32I-NEXT: li a3, 41326; RV32I-NEXT: li a4, 21327; RV32I-NEXT: call __atomic_compare_exchange_11328; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1329; RV32I-NEXT: addi sp, sp, 161330; RV32I-NEXT: ret1331;1332; RV32IA-WMO-LABEL: cmpxchg_i8_acq_rel_acquire:1333; RV32IA-WMO: # %bb.0:1334; RV32IA-WMO-NEXT: li a3, 2551335; RV32IA-WMO-NEXT: andi a4, a0, -41336; RV32IA-WMO-NEXT: andi a0, a0, 31337; RV32IA-WMO-NEXT: zext.b a1, a11338; RV32IA-WMO-NEXT: zext.b a2, a21339; RV32IA-WMO-NEXT: slli a0, a0, 31340; RV32IA-WMO-NEXT: sll a3, a3, a01341; RV32IA-WMO-NEXT: sll a1, a1, a01342; RV32IA-WMO-NEXT: sll a0, a2, a01343; RV32IA-WMO-NEXT: .LBB6_1: # =>This Inner Loop Header: Depth=11344; RV32IA-WMO-NEXT: lr.w.aq a2, (a4)1345; RV32IA-WMO-NEXT: and a5, a2, a31346; RV32IA-WMO-NEXT: bne a5, a1, .LBB6_31347; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB6_1 Depth=11348; RV32IA-WMO-NEXT: xor a5, a2, a01349; RV32IA-WMO-NEXT: and a5, a5, a31350; RV32IA-WMO-NEXT: xor a5, a2, a51351; RV32IA-WMO-NEXT: sc.w.rl a5, a5, (a4)1352; RV32IA-WMO-NEXT: bnez a5, .LBB6_11353; RV32IA-WMO-NEXT: .LBB6_3:1354; RV32IA-WMO-NEXT: ret1355;1356; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i8_acq_rel_acquire:1357; RV32IA-WMO-ZACAS: # %bb.0:1358; RV32IA-WMO-ZACAS-NEXT: li a3, 2551359; RV32IA-WMO-ZACAS-NEXT: andi a4, a0, -41360; RV32IA-WMO-ZACAS-NEXT: andi a0, a0, 31361; RV32IA-WMO-ZACAS-NEXT: zext.b a1, a11362; RV32IA-WMO-ZACAS-NEXT: zext.b a2, a21363; RV32IA-WMO-ZACAS-NEXT: slli a0, a0, 31364; RV32IA-WMO-ZACAS-NEXT: sll a3, a3, a01365; RV32IA-WMO-ZACAS-NEXT: sll a1, a1, a01366; RV32IA-WMO-ZACAS-NEXT: sll a0, a2, a01367; RV32IA-WMO-ZACAS-NEXT: .LBB6_1: # =>This Inner Loop Header: Depth=11368; RV32IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)1369; RV32IA-WMO-ZACAS-NEXT: and a5, a2, a31370; RV32IA-WMO-ZACAS-NEXT: bne a5, a1, .LBB6_31371; RV32IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB6_1 Depth=11372; RV32IA-WMO-ZACAS-NEXT: xor a5, a2, a01373; RV32IA-WMO-ZACAS-NEXT: and a5, a5, a31374; RV32IA-WMO-ZACAS-NEXT: xor a5, a2, a51375; RV32IA-WMO-ZACAS-NEXT: sc.w.rl a5, a5, (a4)1376; RV32IA-WMO-ZACAS-NEXT: bnez a5, .LBB6_11377; RV32IA-WMO-ZACAS-NEXT: .LBB6_3:1378; RV32IA-WMO-ZACAS-NEXT: ret1379;1380; RV32IA-TSO-LABEL: cmpxchg_i8_acq_rel_acquire:1381; RV32IA-TSO: # %bb.0:1382; RV32IA-TSO-NEXT: li a3, 2551383; RV32IA-TSO-NEXT: andi a4, a0, -41384; RV32IA-TSO-NEXT: andi a0, a0, 31385; RV32IA-TSO-NEXT: zext.b a1, a11386; RV32IA-TSO-NEXT: zext.b a2, a21387; RV32IA-TSO-NEXT: slli a0, a0, 31388; RV32IA-TSO-NEXT: sll a3, a3, a01389; RV32IA-TSO-NEXT: sll a1, a1, a01390; RV32IA-TSO-NEXT: sll a0, a2, a01391; RV32IA-TSO-NEXT: .LBB6_1: # =>This Inner Loop Header: Depth=11392; RV32IA-TSO-NEXT: lr.w a2, (a4)1393; RV32IA-TSO-NEXT: and a5, a2, a31394; RV32IA-TSO-NEXT: bne a5, a1, .LBB6_31395; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB6_1 Depth=11396; RV32IA-TSO-NEXT: xor a5, a2, a01397; RV32IA-TSO-NEXT: and a5, a5, a31398; RV32IA-TSO-NEXT: xor a5, a2, a51399; RV32IA-TSO-NEXT: sc.w a5, a5, (a4)1400; RV32IA-TSO-NEXT: bnez a5, .LBB6_11401; RV32IA-TSO-NEXT: .LBB6_3:1402; RV32IA-TSO-NEXT: ret1403;1404; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i8_acq_rel_acquire:1405; RV32IA-TSO-ZACAS: # %bb.0:1406; RV32IA-TSO-ZACAS-NEXT: li a3, 2551407; RV32IA-TSO-ZACAS-NEXT: andi a4, a0, -41408; RV32IA-TSO-ZACAS-NEXT: andi a0, a0, 31409; RV32IA-TSO-ZACAS-NEXT: zext.b a1, a11410; RV32IA-TSO-ZACAS-NEXT: zext.b a2, a21411; RV32IA-TSO-ZACAS-NEXT: slli a0, a0, 31412; RV32IA-TSO-ZACAS-NEXT: sll a3, a3, a01413; RV32IA-TSO-ZACAS-NEXT: sll a1, a1, a01414; RV32IA-TSO-ZACAS-NEXT: sll a0, a2, a01415; RV32IA-TSO-ZACAS-NEXT: .LBB6_1: # =>This Inner Loop Header: Depth=11416; RV32IA-TSO-ZACAS-NEXT: lr.w a2, (a4)1417; RV32IA-TSO-ZACAS-NEXT: and a5, a2, a31418; RV32IA-TSO-ZACAS-NEXT: bne a5, a1, .LBB6_31419; RV32IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB6_1 Depth=11420; RV32IA-TSO-ZACAS-NEXT: xor a5, a2, a01421; RV32IA-TSO-ZACAS-NEXT: and a5, a5, a31422; RV32IA-TSO-ZACAS-NEXT: xor a5, a2, a51423; RV32IA-TSO-ZACAS-NEXT: sc.w a5, a5, (a4)1424; RV32IA-TSO-ZACAS-NEXT: bnez a5, .LBB6_11425; RV32IA-TSO-ZACAS-NEXT: .LBB6_3:1426; RV32IA-TSO-ZACAS-NEXT: ret1427;1428; RV64I-LABEL: cmpxchg_i8_acq_rel_acquire:1429; RV64I: # %bb.0:1430; RV64I-NEXT: addi sp, sp, -161431; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1432; RV64I-NEXT: sb a1, 7(sp)1433; RV64I-NEXT: addi a1, sp, 71434; RV64I-NEXT: li a3, 41435; RV64I-NEXT: li a4, 21436; RV64I-NEXT: call __atomic_compare_exchange_11437; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1438; RV64I-NEXT: addi sp, sp, 161439; RV64I-NEXT: ret1440;1441; RV64IA-WMO-LABEL: cmpxchg_i8_acq_rel_acquire:1442; RV64IA-WMO: # %bb.0:1443; RV64IA-WMO-NEXT: li a3, 2551444; RV64IA-WMO-NEXT: andi a4, a0, -41445; RV64IA-WMO-NEXT: andi a0, a0, 31446; RV64IA-WMO-NEXT: zext.b a1, a11447; RV64IA-WMO-NEXT: zext.b a2, a21448; RV64IA-WMO-NEXT: slli a0, a0, 31449; RV64IA-WMO-NEXT: sllw a3, a3, a01450; RV64IA-WMO-NEXT: sllw a1, a1, a01451; RV64IA-WMO-NEXT: sllw a0, a2, a01452; RV64IA-WMO-NEXT: .LBB6_1: # =>This Inner Loop Header: Depth=11453; RV64IA-WMO-NEXT: lr.w.aq a2, (a4)1454; RV64IA-WMO-NEXT: and a5, a2, a31455; RV64IA-WMO-NEXT: bne a5, a1, .LBB6_31456; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB6_1 Depth=11457; RV64IA-WMO-NEXT: xor a5, a2, a01458; RV64IA-WMO-NEXT: and a5, a5, a31459; RV64IA-WMO-NEXT: xor a5, a2, a51460; RV64IA-WMO-NEXT: sc.w.rl a5, a5, (a4)1461; RV64IA-WMO-NEXT: bnez a5, .LBB6_11462; RV64IA-WMO-NEXT: .LBB6_3:1463; RV64IA-WMO-NEXT: ret1464;1465; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i8_acq_rel_acquire:1466; RV64IA-WMO-ZACAS: # %bb.0:1467; RV64IA-WMO-ZACAS-NEXT: li a3, 2551468; RV64IA-WMO-ZACAS-NEXT: andi a4, a0, -41469; RV64IA-WMO-ZACAS-NEXT: andi a0, a0, 31470; RV64IA-WMO-ZACAS-NEXT: zext.b a1, a11471; RV64IA-WMO-ZACAS-NEXT: zext.b a2, a21472; RV64IA-WMO-ZACAS-NEXT: slli a0, a0, 31473; RV64IA-WMO-ZACAS-NEXT: sllw a3, a3, a01474; RV64IA-WMO-ZACAS-NEXT: sllw a1, a1, a01475; RV64IA-WMO-ZACAS-NEXT: sllw a0, a2, a01476; RV64IA-WMO-ZACAS-NEXT: .LBB6_1: # =>This Inner Loop Header: Depth=11477; RV64IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)1478; RV64IA-WMO-ZACAS-NEXT: and a5, a2, a31479; RV64IA-WMO-ZACAS-NEXT: bne a5, a1, .LBB6_31480; RV64IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB6_1 Depth=11481; RV64IA-WMO-ZACAS-NEXT: xor a5, a2, a01482; RV64IA-WMO-ZACAS-NEXT: and a5, a5, a31483; RV64IA-WMO-ZACAS-NEXT: xor a5, a2, a51484; RV64IA-WMO-ZACAS-NEXT: sc.w.rl a5, a5, (a4)1485; RV64IA-WMO-ZACAS-NEXT: bnez a5, .LBB6_11486; RV64IA-WMO-ZACAS-NEXT: .LBB6_3:1487; RV64IA-WMO-ZACAS-NEXT: ret1488;1489; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_acq_rel_acquire:1490; RV64IA-WMO-ZABHA: # %bb.0:1491; RV64IA-WMO-ZABHA-NEXT: amocas.b.aqrl a1, a2, (a0)1492; RV64IA-WMO-ZABHA-NEXT: ret1493;1494; RV64IA-TSO-LABEL: cmpxchg_i8_acq_rel_acquire:1495; RV64IA-TSO: # %bb.0:1496; RV64IA-TSO-NEXT: li a3, 2551497; RV64IA-TSO-NEXT: andi a4, a0, -41498; RV64IA-TSO-NEXT: andi a0, a0, 31499; RV64IA-TSO-NEXT: zext.b a1, a11500; RV64IA-TSO-NEXT: zext.b a2, a21501; RV64IA-TSO-NEXT: slli a0, a0, 31502; RV64IA-TSO-NEXT: sllw a3, a3, a01503; RV64IA-TSO-NEXT: sllw a1, a1, a01504; RV64IA-TSO-NEXT: sllw a0, a2, a01505; RV64IA-TSO-NEXT: .LBB6_1: # =>This Inner Loop Header: Depth=11506; RV64IA-TSO-NEXT: lr.w a2, (a4)1507; RV64IA-TSO-NEXT: and a5, a2, a31508; RV64IA-TSO-NEXT: bne a5, a1, .LBB6_31509; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB6_1 Depth=11510; RV64IA-TSO-NEXT: xor a5, a2, a01511; RV64IA-TSO-NEXT: and a5, a5, a31512; RV64IA-TSO-NEXT: xor a5, a2, a51513; RV64IA-TSO-NEXT: sc.w a5, a5, (a4)1514; RV64IA-TSO-NEXT: bnez a5, .LBB6_11515; RV64IA-TSO-NEXT: .LBB6_3:1516; RV64IA-TSO-NEXT: ret1517;1518; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i8_acq_rel_acquire:1519; RV64IA-TSO-ZACAS: # %bb.0:1520; RV64IA-TSO-ZACAS-NEXT: li a3, 2551521; RV64IA-TSO-ZACAS-NEXT: andi a4, a0, -41522; RV64IA-TSO-ZACAS-NEXT: andi a0, a0, 31523; RV64IA-TSO-ZACAS-NEXT: zext.b a1, a11524; RV64IA-TSO-ZACAS-NEXT: zext.b a2, a21525; RV64IA-TSO-ZACAS-NEXT: slli a0, a0, 31526; RV64IA-TSO-ZACAS-NEXT: sllw a3, a3, a01527; RV64IA-TSO-ZACAS-NEXT: sllw a1, a1, a01528; RV64IA-TSO-ZACAS-NEXT: sllw a0, a2, a01529; RV64IA-TSO-ZACAS-NEXT: .LBB6_1: # =>This Inner Loop Header: Depth=11530; RV64IA-TSO-ZACAS-NEXT: lr.w a2, (a4)1531; RV64IA-TSO-ZACAS-NEXT: and a5, a2, a31532; RV64IA-TSO-ZACAS-NEXT: bne a5, a1, .LBB6_31533; RV64IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB6_1 Depth=11534; RV64IA-TSO-ZACAS-NEXT: xor a5, a2, a01535; RV64IA-TSO-ZACAS-NEXT: and a5, a5, a31536; RV64IA-TSO-ZACAS-NEXT: xor a5, a2, a51537; RV64IA-TSO-ZACAS-NEXT: sc.w a5, a5, (a4)1538; RV64IA-TSO-ZACAS-NEXT: bnez a5, .LBB6_11539; RV64IA-TSO-ZACAS-NEXT: .LBB6_3:1540; RV64IA-TSO-ZACAS-NEXT: ret1541;1542; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_acq_rel_acquire:1543; RV64IA-TSO-ZABHA: # %bb.0:1544; RV64IA-TSO-ZABHA-NEXT: amocas.b a1, a2, (a0)1545; RV64IA-TSO-ZABHA-NEXT: ret1546 %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val acq_rel acquire1547 ret void1548}1549 1550define void @cmpxchg_i8_seq_cst_monotonic(ptr %ptr, i8 %cmp, i8 %val) nounwind {1551; RV32I-LABEL: cmpxchg_i8_seq_cst_monotonic:1552; RV32I: # %bb.0:1553; RV32I-NEXT: addi sp, sp, -161554; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1555; RV32I-NEXT: sb a1, 11(sp)1556; RV32I-NEXT: addi a1, sp, 111557; RV32I-NEXT: li a3, 51558; RV32I-NEXT: li a4, 01559; RV32I-NEXT: call __atomic_compare_exchange_11560; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1561; RV32I-NEXT: addi sp, sp, 161562; RV32I-NEXT: ret1563;1564; RV32IA-LABEL: cmpxchg_i8_seq_cst_monotonic:1565; RV32IA: # %bb.0:1566; RV32IA-NEXT: li a3, 2551567; RV32IA-NEXT: andi a4, a0, -41568; RV32IA-NEXT: andi a0, a0, 31569; RV32IA-NEXT: zext.b a1, a11570; RV32IA-NEXT: zext.b a2, a21571; RV32IA-NEXT: slli a0, a0, 31572; RV32IA-NEXT: sll a3, a3, a01573; RV32IA-NEXT: sll a1, a1, a01574; RV32IA-NEXT: sll a0, a2, a01575; RV32IA-NEXT: .LBB7_1: # =>This Inner Loop Header: Depth=11576; RV32IA-NEXT: lr.w.aqrl a2, (a4)1577; RV32IA-NEXT: and a5, a2, a31578; RV32IA-NEXT: bne a5, a1, .LBB7_31579; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB7_1 Depth=11580; RV32IA-NEXT: xor a5, a2, a01581; RV32IA-NEXT: and a5, a5, a31582; RV32IA-NEXT: xor a5, a2, a51583; RV32IA-NEXT: sc.w.rl a5, a5, (a4)1584; RV32IA-NEXT: bnez a5, .LBB7_11585; RV32IA-NEXT: .LBB7_3:1586; RV32IA-NEXT: ret1587;1588; RV64I-LABEL: cmpxchg_i8_seq_cst_monotonic:1589; RV64I: # %bb.0:1590; RV64I-NEXT: addi sp, sp, -161591; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1592; RV64I-NEXT: sb a1, 7(sp)1593; RV64I-NEXT: addi a1, sp, 71594; RV64I-NEXT: li a3, 51595; RV64I-NEXT: li a4, 01596; RV64I-NEXT: call __atomic_compare_exchange_11597; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1598; RV64I-NEXT: addi sp, sp, 161599; RV64I-NEXT: ret1600;1601; RV64IA-WMO-LABEL: cmpxchg_i8_seq_cst_monotonic:1602; RV64IA-WMO: # %bb.0:1603; RV64IA-WMO-NEXT: li a3, 2551604; RV64IA-WMO-NEXT: andi a4, a0, -41605; RV64IA-WMO-NEXT: andi a0, a0, 31606; RV64IA-WMO-NEXT: zext.b a1, a11607; RV64IA-WMO-NEXT: zext.b a2, a21608; RV64IA-WMO-NEXT: slli a0, a0, 31609; RV64IA-WMO-NEXT: sllw a3, a3, a01610; RV64IA-WMO-NEXT: sllw a1, a1, a01611; RV64IA-WMO-NEXT: sllw a0, a2, a01612; RV64IA-WMO-NEXT: .LBB7_1: # =>This Inner Loop Header: Depth=11613; RV64IA-WMO-NEXT: lr.w.aqrl a2, (a4)1614; RV64IA-WMO-NEXT: and a5, a2, a31615; RV64IA-WMO-NEXT: bne a5, a1, .LBB7_31616; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB7_1 Depth=11617; RV64IA-WMO-NEXT: xor a5, a2, a01618; RV64IA-WMO-NEXT: and a5, a5, a31619; RV64IA-WMO-NEXT: xor a5, a2, a51620; RV64IA-WMO-NEXT: sc.w.rl a5, a5, (a4)1621; RV64IA-WMO-NEXT: bnez a5, .LBB7_11622; RV64IA-WMO-NEXT: .LBB7_3:1623; RV64IA-WMO-NEXT: ret1624;1625; RV64IA-ZACAS-LABEL: cmpxchg_i8_seq_cst_monotonic:1626; RV64IA-ZACAS: # %bb.0:1627; RV64IA-ZACAS-NEXT: li a3, 2551628; RV64IA-ZACAS-NEXT: andi a4, a0, -41629; RV64IA-ZACAS-NEXT: andi a0, a0, 31630; RV64IA-ZACAS-NEXT: zext.b a1, a11631; RV64IA-ZACAS-NEXT: zext.b a2, a21632; RV64IA-ZACAS-NEXT: slli a0, a0, 31633; RV64IA-ZACAS-NEXT: sllw a3, a3, a01634; RV64IA-ZACAS-NEXT: sllw a1, a1, a01635; RV64IA-ZACAS-NEXT: sllw a0, a2, a01636; RV64IA-ZACAS-NEXT: .LBB7_1: # =>This Inner Loop Header: Depth=11637; RV64IA-ZACAS-NEXT: lr.w.aqrl a2, (a4)1638; RV64IA-ZACAS-NEXT: and a5, a2, a31639; RV64IA-ZACAS-NEXT: bne a5, a1, .LBB7_31640; RV64IA-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB7_1 Depth=11641; RV64IA-ZACAS-NEXT: xor a5, a2, a01642; RV64IA-ZACAS-NEXT: and a5, a5, a31643; RV64IA-ZACAS-NEXT: xor a5, a2, a51644; RV64IA-ZACAS-NEXT: sc.w.rl a5, a5, (a4)1645; RV64IA-ZACAS-NEXT: bnez a5, .LBB7_11646; RV64IA-ZACAS-NEXT: .LBB7_3:1647; RV64IA-ZACAS-NEXT: ret1648;1649; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_seq_cst_monotonic:1650; RV64IA-WMO-ZABHA: # %bb.0:1651; RV64IA-WMO-ZABHA-NEXT: amocas.b.aqrl a1, a2, (a0)1652; RV64IA-WMO-ZABHA-NEXT: ret1653;1654; RV64IA-TSO-LABEL: cmpxchg_i8_seq_cst_monotonic:1655; RV64IA-TSO: # %bb.0:1656; RV64IA-TSO-NEXT: li a3, 2551657; RV64IA-TSO-NEXT: andi a4, a0, -41658; RV64IA-TSO-NEXT: andi a0, a0, 31659; RV64IA-TSO-NEXT: zext.b a1, a11660; RV64IA-TSO-NEXT: zext.b a2, a21661; RV64IA-TSO-NEXT: slli a0, a0, 31662; RV64IA-TSO-NEXT: sllw a3, a3, a01663; RV64IA-TSO-NEXT: sllw a1, a1, a01664; RV64IA-TSO-NEXT: sllw a0, a2, a01665; RV64IA-TSO-NEXT: .LBB7_1: # =>This Inner Loop Header: Depth=11666; RV64IA-TSO-NEXT: lr.w.aqrl a2, (a4)1667; RV64IA-TSO-NEXT: and a5, a2, a31668; RV64IA-TSO-NEXT: bne a5, a1, .LBB7_31669; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB7_1 Depth=11670; RV64IA-TSO-NEXT: xor a5, a2, a01671; RV64IA-TSO-NEXT: and a5, a5, a31672; RV64IA-TSO-NEXT: xor a5, a2, a51673; RV64IA-TSO-NEXT: sc.w.rl a5, a5, (a4)1674; RV64IA-TSO-NEXT: bnez a5, .LBB7_11675; RV64IA-TSO-NEXT: .LBB7_3:1676; RV64IA-TSO-NEXT: ret1677;1678; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_seq_cst_monotonic:1679; RV64IA-TSO-ZABHA: # %bb.0:1680; RV64IA-TSO-ZABHA-NEXT: amocas.b a1, a2, (a0)1681; RV64IA-TSO-ZABHA-NEXT: ret1682 %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val seq_cst monotonic1683 ret void1684}1685 1686define void @cmpxchg_i8_seq_cst_acquire(ptr %ptr, i8 %cmp, i8 %val) nounwind {1687; RV32I-LABEL: cmpxchg_i8_seq_cst_acquire:1688; RV32I: # %bb.0:1689; RV32I-NEXT: addi sp, sp, -161690; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1691; RV32I-NEXT: sb a1, 11(sp)1692; RV32I-NEXT: addi a1, sp, 111693; RV32I-NEXT: li a3, 51694; RV32I-NEXT: li a4, 21695; RV32I-NEXT: call __atomic_compare_exchange_11696; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1697; RV32I-NEXT: addi sp, sp, 161698; RV32I-NEXT: ret1699;1700; RV32IA-LABEL: cmpxchg_i8_seq_cst_acquire:1701; RV32IA: # %bb.0:1702; RV32IA-NEXT: li a3, 2551703; RV32IA-NEXT: andi a4, a0, -41704; RV32IA-NEXT: andi a0, a0, 31705; RV32IA-NEXT: zext.b a1, a11706; RV32IA-NEXT: zext.b a2, a21707; RV32IA-NEXT: slli a0, a0, 31708; RV32IA-NEXT: sll a3, a3, a01709; RV32IA-NEXT: sll a1, a1, a01710; RV32IA-NEXT: sll a0, a2, a01711; RV32IA-NEXT: .LBB8_1: # =>This Inner Loop Header: Depth=11712; RV32IA-NEXT: lr.w.aqrl a2, (a4)1713; RV32IA-NEXT: and a5, a2, a31714; RV32IA-NEXT: bne a5, a1, .LBB8_31715; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB8_1 Depth=11716; RV32IA-NEXT: xor a5, a2, a01717; RV32IA-NEXT: and a5, a5, a31718; RV32IA-NEXT: xor a5, a2, a51719; RV32IA-NEXT: sc.w.rl a5, a5, (a4)1720; RV32IA-NEXT: bnez a5, .LBB8_11721; RV32IA-NEXT: .LBB8_3:1722; RV32IA-NEXT: ret1723;1724; RV64I-LABEL: cmpxchg_i8_seq_cst_acquire:1725; RV64I: # %bb.0:1726; RV64I-NEXT: addi sp, sp, -161727; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1728; RV64I-NEXT: sb a1, 7(sp)1729; RV64I-NEXT: addi a1, sp, 71730; RV64I-NEXT: li a3, 51731; RV64I-NEXT: li a4, 21732; RV64I-NEXT: call __atomic_compare_exchange_11733; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1734; RV64I-NEXT: addi sp, sp, 161735; RV64I-NEXT: ret1736;1737; RV64IA-WMO-LABEL: cmpxchg_i8_seq_cst_acquire:1738; RV64IA-WMO: # %bb.0:1739; RV64IA-WMO-NEXT: li a3, 2551740; RV64IA-WMO-NEXT: andi a4, a0, -41741; RV64IA-WMO-NEXT: andi a0, a0, 31742; RV64IA-WMO-NEXT: zext.b a1, a11743; RV64IA-WMO-NEXT: zext.b a2, a21744; RV64IA-WMO-NEXT: slli a0, a0, 31745; RV64IA-WMO-NEXT: sllw a3, a3, a01746; RV64IA-WMO-NEXT: sllw a1, a1, a01747; RV64IA-WMO-NEXT: sllw a0, a2, a01748; RV64IA-WMO-NEXT: .LBB8_1: # =>This Inner Loop Header: Depth=11749; RV64IA-WMO-NEXT: lr.w.aqrl a2, (a4)1750; RV64IA-WMO-NEXT: and a5, a2, a31751; RV64IA-WMO-NEXT: bne a5, a1, .LBB8_31752; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB8_1 Depth=11753; RV64IA-WMO-NEXT: xor a5, a2, a01754; RV64IA-WMO-NEXT: and a5, a5, a31755; RV64IA-WMO-NEXT: xor a5, a2, a51756; RV64IA-WMO-NEXT: sc.w.rl a5, a5, (a4)1757; RV64IA-WMO-NEXT: bnez a5, .LBB8_11758; RV64IA-WMO-NEXT: .LBB8_3:1759; RV64IA-WMO-NEXT: ret1760;1761; RV64IA-ZACAS-LABEL: cmpxchg_i8_seq_cst_acquire:1762; RV64IA-ZACAS: # %bb.0:1763; RV64IA-ZACAS-NEXT: li a3, 2551764; RV64IA-ZACAS-NEXT: andi a4, a0, -41765; RV64IA-ZACAS-NEXT: andi a0, a0, 31766; RV64IA-ZACAS-NEXT: zext.b a1, a11767; RV64IA-ZACAS-NEXT: zext.b a2, a21768; RV64IA-ZACAS-NEXT: slli a0, a0, 31769; RV64IA-ZACAS-NEXT: sllw a3, a3, a01770; RV64IA-ZACAS-NEXT: sllw a1, a1, a01771; RV64IA-ZACAS-NEXT: sllw a0, a2, a01772; RV64IA-ZACAS-NEXT: .LBB8_1: # =>This Inner Loop Header: Depth=11773; RV64IA-ZACAS-NEXT: lr.w.aqrl a2, (a4)1774; RV64IA-ZACAS-NEXT: and a5, a2, a31775; RV64IA-ZACAS-NEXT: bne a5, a1, .LBB8_31776; RV64IA-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB8_1 Depth=11777; RV64IA-ZACAS-NEXT: xor a5, a2, a01778; RV64IA-ZACAS-NEXT: and a5, a5, a31779; RV64IA-ZACAS-NEXT: xor a5, a2, a51780; RV64IA-ZACAS-NEXT: sc.w.rl a5, a5, (a4)1781; RV64IA-ZACAS-NEXT: bnez a5, .LBB8_11782; RV64IA-ZACAS-NEXT: .LBB8_3:1783; RV64IA-ZACAS-NEXT: ret1784;1785; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_seq_cst_acquire:1786; RV64IA-WMO-ZABHA: # %bb.0:1787; RV64IA-WMO-ZABHA-NEXT: amocas.b.aqrl a1, a2, (a0)1788; RV64IA-WMO-ZABHA-NEXT: ret1789;1790; RV64IA-TSO-LABEL: cmpxchg_i8_seq_cst_acquire:1791; RV64IA-TSO: # %bb.0:1792; RV64IA-TSO-NEXT: li a3, 2551793; RV64IA-TSO-NEXT: andi a4, a0, -41794; RV64IA-TSO-NEXT: andi a0, a0, 31795; RV64IA-TSO-NEXT: zext.b a1, a11796; RV64IA-TSO-NEXT: zext.b a2, a21797; RV64IA-TSO-NEXT: slli a0, a0, 31798; RV64IA-TSO-NEXT: sllw a3, a3, a01799; RV64IA-TSO-NEXT: sllw a1, a1, a01800; RV64IA-TSO-NEXT: sllw a0, a2, a01801; RV64IA-TSO-NEXT: .LBB8_1: # =>This Inner Loop Header: Depth=11802; RV64IA-TSO-NEXT: lr.w.aqrl a2, (a4)1803; RV64IA-TSO-NEXT: and a5, a2, a31804; RV64IA-TSO-NEXT: bne a5, a1, .LBB8_31805; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB8_1 Depth=11806; RV64IA-TSO-NEXT: xor a5, a2, a01807; RV64IA-TSO-NEXT: and a5, a5, a31808; RV64IA-TSO-NEXT: xor a5, a2, a51809; RV64IA-TSO-NEXT: sc.w.rl a5, a5, (a4)1810; RV64IA-TSO-NEXT: bnez a5, .LBB8_11811; RV64IA-TSO-NEXT: .LBB8_3:1812; RV64IA-TSO-NEXT: ret1813;1814; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_seq_cst_acquire:1815; RV64IA-TSO-ZABHA: # %bb.0:1816; RV64IA-TSO-ZABHA-NEXT: amocas.b a1, a2, (a0)1817; RV64IA-TSO-ZABHA-NEXT: ret1818 %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val seq_cst acquire1819 ret void1820}1821 1822define void @cmpxchg_i8_seq_cst_seq_cst(ptr %ptr, i8 %cmp, i8 %val) nounwind {1823; RV32I-LABEL: cmpxchg_i8_seq_cst_seq_cst:1824; RV32I: # %bb.0:1825; RV32I-NEXT: addi sp, sp, -161826; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1827; RV32I-NEXT: sb a1, 11(sp)1828; RV32I-NEXT: addi a1, sp, 111829; RV32I-NEXT: li a3, 51830; RV32I-NEXT: li a4, 51831; RV32I-NEXT: call __atomic_compare_exchange_11832; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1833; RV32I-NEXT: addi sp, sp, 161834; RV32I-NEXT: ret1835;1836; RV32IA-LABEL: cmpxchg_i8_seq_cst_seq_cst:1837; RV32IA: # %bb.0:1838; RV32IA-NEXT: li a3, 2551839; RV32IA-NEXT: andi a4, a0, -41840; RV32IA-NEXT: andi a0, a0, 31841; RV32IA-NEXT: zext.b a1, a11842; RV32IA-NEXT: zext.b a2, a21843; RV32IA-NEXT: slli a0, a0, 31844; RV32IA-NEXT: sll a3, a3, a01845; RV32IA-NEXT: sll a1, a1, a01846; RV32IA-NEXT: sll a0, a2, a01847; RV32IA-NEXT: .LBB9_1: # =>This Inner Loop Header: Depth=11848; RV32IA-NEXT: lr.w.aqrl a2, (a4)1849; RV32IA-NEXT: and a5, a2, a31850; RV32IA-NEXT: bne a5, a1, .LBB9_31851; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB9_1 Depth=11852; RV32IA-NEXT: xor a5, a2, a01853; RV32IA-NEXT: and a5, a5, a31854; RV32IA-NEXT: xor a5, a2, a51855; RV32IA-NEXT: sc.w.rl a5, a5, (a4)1856; RV32IA-NEXT: bnez a5, .LBB9_11857; RV32IA-NEXT: .LBB9_3:1858; RV32IA-NEXT: ret1859;1860; RV64I-LABEL: cmpxchg_i8_seq_cst_seq_cst:1861; RV64I: # %bb.0:1862; RV64I-NEXT: addi sp, sp, -161863; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1864; RV64I-NEXT: sb a1, 7(sp)1865; RV64I-NEXT: addi a1, sp, 71866; RV64I-NEXT: li a3, 51867; RV64I-NEXT: li a4, 51868; RV64I-NEXT: call __atomic_compare_exchange_11869; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1870; RV64I-NEXT: addi sp, sp, 161871; RV64I-NEXT: ret1872;1873; RV64IA-WMO-LABEL: cmpxchg_i8_seq_cst_seq_cst:1874; RV64IA-WMO: # %bb.0:1875; RV64IA-WMO-NEXT: li a3, 2551876; RV64IA-WMO-NEXT: andi a4, a0, -41877; RV64IA-WMO-NEXT: andi a0, a0, 31878; RV64IA-WMO-NEXT: zext.b a1, a11879; RV64IA-WMO-NEXT: zext.b a2, a21880; RV64IA-WMO-NEXT: slli a0, a0, 31881; RV64IA-WMO-NEXT: sllw a3, a3, a01882; RV64IA-WMO-NEXT: sllw a1, a1, a01883; RV64IA-WMO-NEXT: sllw a0, a2, a01884; RV64IA-WMO-NEXT: .LBB9_1: # =>This Inner Loop Header: Depth=11885; RV64IA-WMO-NEXT: lr.w.aqrl a2, (a4)1886; RV64IA-WMO-NEXT: and a5, a2, a31887; RV64IA-WMO-NEXT: bne a5, a1, .LBB9_31888; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB9_1 Depth=11889; RV64IA-WMO-NEXT: xor a5, a2, a01890; RV64IA-WMO-NEXT: and a5, a5, a31891; RV64IA-WMO-NEXT: xor a5, a2, a51892; RV64IA-WMO-NEXT: sc.w.rl a5, a5, (a4)1893; RV64IA-WMO-NEXT: bnez a5, .LBB9_11894; RV64IA-WMO-NEXT: .LBB9_3:1895; RV64IA-WMO-NEXT: ret1896;1897; RV64IA-ZACAS-LABEL: cmpxchg_i8_seq_cst_seq_cst:1898; RV64IA-ZACAS: # %bb.0:1899; RV64IA-ZACAS-NEXT: li a3, 2551900; RV64IA-ZACAS-NEXT: andi a4, a0, -41901; RV64IA-ZACAS-NEXT: andi a0, a0, 31902; RV64IA-ZACAS-NEXT: zext.b a1, a11903; RV64IA-ZACAS-NEXT: zext.b a2, a21904; RV64IA-ZACAS-NEXT: slli a0, a0, 31905; RV64IA-ZACAS-NEXT: sllw a3, a3, a01906; RV64IA-ZACAS-NEXT: sllw a1, a1, a01907; RV64IA-ZACAS-NEXT: sllw a0, a2, a01908; RV64IA-ZACAS-NEXT: .LBB9_1: # =>This Inner Loop Header: Depth=11909; RV64IA-ZACAS-NEXT: lr.w.aqrl a2, (a4)1910; RV64IA-ZACAS-NEXT: and a5, a2, a31911; RV64IA-ZACAS-NEXT: bne a5, a1, .LBB9_31912; RV64IA-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB9_1 Depth=11913; RV64IA-ZACAS-NEXT: xor a5, a2, a01914; RV64IA-ZACAS-NEXT: and a5, a5, a31915; RV64IA-ZACAS-NEXT: xor a5, a2, a51916; RV64IA-ZACAS-NEXT: sc.w.rl a5, a5, (a4)1917; RV64IA-ZACAS-NEXT: bnez a5, .LBB9_11918; RV64IA-ZACAS-NEXT: .LBB9_3:1919; RV64IA-ZACAS-NEXT: ret1920;1921; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i8_seq_cst_seq_cst:1922; RV64IA-WMO-ZABHA: # %bb.0:1923; RV64IA-WMO-ZABHA-NEXT: fence rw, rw1924; RV64IA-WMO-ZABHA-NEXT: amocas.b.aqrl a1, a2, (a0)1925; RV64IA-WMO-ZABHA-NEXT: ret1926;1927; RV64IA-TSO-LABEL: cmpxchg_i8_seq_cst_seq_cst:1928; RV64IA-TSO: # %bb.0:1929; RV64IA-TSO-NEXT: li a3, 2551930; RV64IA-TSO-NEXT: andi a4, a0, -41931; RV64IA-TSO-NEXT: andi a0, a0, 31932; RV64IA-TSO-NEXT: zext.b a1, a11933; RV64IA-TSO-NEXT: zext.b a2, a21934; RV64IA-TSO-NEXT: slli a0, a0, 31935; RV64IA-TSO-NEXT: sllw a3, a3, a01936; RV64IA-TSO-NEXT: sllw a1, a1, a01937; RV64IA-TSO-NEXT: sllw a0, a2, a01938; RV64IA-TSO-NEXT: .LBB9_1: # =>This Inner Loop Header: Depth=11939; RV64IA-TSO-NEXT: lr.w.aqrl a2, (a4)1940; RV64IA-TSO-NEXT: and a5, a2, a31941; RV64IA-TSO-NEXT: bne a5, a1, .LBB9_31942; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB9_1 Depth=11943; RV64IA-TSO-NEXT: xor a5, a2, a01944; RV64IA-TSO-NEXT: and a5, a5, a31945; RV64IA-TSO-NEXT: xor a5, a2, a51946; RV64IA-TSO-NEXT: sc.w.rl a5, a5, (a4)1947; RV64IA-TSO-NEXT: bnez a5, .LBB9_11948; RV64IA-TSO-NEXT: .LBB9_3:1949; RV64IA-TSO-NEXT: ret1950;1951; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i8_seq_cst_seq_cst:1952; RV64IA-TSO-ZABHA: # %bb.0:1953; RV64IA-TSO-ZABHA-NEXT: fence rw, rw1954; RV64IA-TSO-ZABHA-NEXT: amocas.b a1, a2, (a0)1955; RV64IA-TSO-ZABHA-NEXT: ret1956 %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val seq_cst seq_cst1957 ret void1958}1959 1960define void @cmpxchg_i16_monotonic_monotonic(ptr %ptr, i16 %cmp, i16 %val) nounwind {1961; RV32I-LABEL: cmpxchg_i16_monotonic_monotonic:1962; RV32I: # %bb.0:1963; RV32I-NEXT: addi sp, sp, -161964; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1965; RV32I-NEXT: sh a1, 10(sp)1966; RV32I-NEXT: addi a1, sp, 101967; RV32I-NEXT: li a3, 01968; RV32I-NEXT: li a4, 01969; RV32I-NEXT: call __atomic_compare_exchange_21970; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1971; RV32I-NEXT: addi sp, sp, 161972; RV32I-NEXT: ret1973;1974; RV32IA-LABEL: cmpxchg_i16_monotonic_monotonic:1975; RV32IA: # %bb.0:1976; RV32IA-NEXT: lui a3, 161977; RV32IA-NEXT: andi a4, a0, -41978; RV32IA-NEXT: andi a0, a0, 31979; RV32IA-NEXT: addi a3, a3, -11980; RV32IA-NEXT: slli a0, a0, 31981; RV32IA-NEXT: sll a5, a3, a01982; RV32IA-NEXT: and a1, a1, a31983; RV32IA-NEXT: and a2, a2, a31984; RV32IA-NEXT: sll a1, a1, a01985; RV32IA-NEXT: sll a0, a2, a01986; RV32IA-NEXT: .LBB10_1: # =>This Inner Loop Header: Depth=11987; RV32IA-NEXT: lr.w a2, (a4)1988; RV32IA-NEXT: and a3, a2, a51989; RV32IA-NEXT: bne a3, a1, .LBB10_31990; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB10_1 Depth=11991; RV32IA-NEXT: xor a3, a2, a01992; RV32IA-NEXT: and a3, a3, a51993; RV32IA-NEXT: xor a3, a2, a31994; RV32IA-NEXT: sc.w a3, a3, (a4)1995; RV32IA-NEXT: bnez a3, .LBB10_11996; RV32IA-NEXT: .LBB10_3:1997; RV32IA-NEXT: ret1998;1999; RV64I-LABEL: cmpxchg_i16_monotonic_monotonic:2000; RV64I: # %bb.0:2001; RV64I-NEXT: addi sp, sp, -162002; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill2003; RV64I-NEXT: sh a1, 6(sp)2004; RV64I-NEXT: addi a1, sp, 62005; RV64I-NEXT: li a3, 02006; RV64I-NEXT: li a4, 02007; RV64I-NEXT: call __atomic_compare_exchange_22008; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload2009; RV64I-NEXT: addi sp, sp, 162010; RV64I-NEXT: ret2011;2012; RV64IA-WMO-LABEL: cmpxchg_i16_monotonic_monotonic:2013; RV64IA-WMO: # %bb.0:2014; RV64IA-WMO-NEXT: lui a3, 162015; RV64IA-WMO-NEXT: andi a4, a0, -42016; RV64IA-WMO-NEXT: andi a0, a0, 32017; RV64IA-WMO-NEXT: addi a3, a3, -12018; RV64IA-WMO-NEXT: slli a0, a0, 32019; RV64IA-WMO-NEXT: sllw a5, a3, a02020; RV64IA-WMO-NEXT: and a1, a1, a32021; RV64IA-WMO-NEXT: and a2, a2, a32022; RV64IA-WMO-NEXT: sllw a1, a1, a02023; RV64IA-WMO-NEXT: sllw a0, a2, a02024; RV64IA-WMO-NEXT: .LBB10_1: # =>This Inner Loop Header: Depth=12025; RV64IA-WMO-NEXT: lr.w a2, (a4)2026; RV64IA-WMO-NEXT: and a3, a2, a52027; RV64IA-WMO-NEXT: bne a3, a1, .LBB10_32028; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB10_1 Depth=12029; RV64IA-WMO-NEXT: xor a3, a2, a02030; RV64IA-WMO-NEXT: and a3, a3, a52031; RV64IA-WMO-NEXT: xor a3, a2, a32032; RV64IA-WMO-NEXT: sc.w a3, a3, (a4)2033; RV64IA-WMO-NEXT: bnez a3, .LBB10_12034; RV64IA-WMO-NEXT: .LBB10_3:2035; RV64IA-WMO-NEXT: ret2036;2037; RV64IA-ZACAS-LABEL: cmpxchg_i16_monotonic_monotonic:2038; RV64IA-ZACAS: # %bb.0:2039; RV64IA-ZACAS-NEXT: lui a3, 162040; RV64IA-ZACAS-NEXT: andi a4, a0, -42041; RV64IA-ZACAS-NEXT: andi a0, a0, 32042; RV64IA-ZACAS-NEXT: addi a3, a3, -12043; RV64IA-ZACAS-NEXT: slli a0, a0, 32044; RV64IA-ZACAS-NEXT: sllw a5, a3, a02045; RV64IA-ZACAS-NEXT: and a1, a1, a32046; RV64IA-ZACAS-NEXT: and a2, a2, a32047; RV64IA-ZACAS-NEXT: sllw a1, a1, a02048; RV64IA-ZACAS-NEXT: sllw a0, a2, a02049; RV64IA-ZACAS-NEXT: .LBB10_1: # =>This Inner Loop Header: Depth=12050; RV64IA-ZACAS-NEXT: lr.w a2, (a4)2051; RV64IA-ZACAS-NEXT: and a3, a2, a52052; RV64IA-ZACAS-NEXT: bne a3, a1, .LBB10_32053; RV64IA-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB10_1 Depth=12054; RV64IA-ZACAS-NEXT: xor a3, a2, a02055; RV64IA-ZACAS-NEXT: and a3, a3, a52056; RV64IA-ZACAS-NEXT: xor a3, a2, a32057; RV64IA-ZACAS-NEXT: sc.w a3, a3, (a4)2058; RV64IA-ZACAS-NEXT: bnez a3, .LBB10_12059; RV64IA-ZACAS-NEXT: .LBB10_3:2060; RV64IA-ZACAS-NEXT: ret2061;2062; RV64IA-ZABHA-LABEL: cmpxchg_i16_monotonic_monotonic:2063; RV64IA-ZABHA: # %bb.0:2064; RV64IA-ZABHA-NEXT: amocas.h a1, a2, (a0)2065; RV64IA-ZABHA-NEXT: ret2066;2067; RV64IA-TSO-LABEL: cmpxchg_i16_monotonic_monotonic:2068; RV64IA-TSO: # %bb.0:2069; RV64IA-TSO-NEXT: lui a3, 162070; RV64IA-TSO-NEXT: andi a4, a0, -42071; RV64IA-TSO-NEXT: andi a0, a0, 32072; RV64IA-TSO-NEXT: addi a3, a3, -12073; RV64IA-TSO-NEXT: slli a0, a0, 32074; RV64IA-TSO-NEXT: sllw a5, a3, a02075; RV64IA-TSO-NEXT: and a1, a1, a32076; RV64IA-TSO-NEXT: and a2, a2, a32077; RV64IA-TSO-NEXT: sllw a1, a1, a02078; RV64IA-TSO-NEXT: sllw a0, a2, a02079; RV64IA-TSO-NEXT: .LBB10_1: # =>This Inner Loop Header: Depth=12080; RV64IA-TSO-NEXT: lr.w a2, (a4)2081; RV64IA-TSO-NEXT: and a3, a2, a52082; RV64IA-TSO-NEXT: bne a3, a1, .LBB10_32083; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB10_1 Depth=12084; RV64IA-TSO-NEXT: xor a3, a2, a02085; RV64IA-TSO-NEXT: and a3, a3, a52086; RV64IA-TSO-NEXT: xor a3, a2, a32087; RV64IA-TSO-NEXT: sc.w a3, a3, (a4)2088; RV64IA-TSO-NEXT: bnez a3, .LBB10_12089; RV64IA-TSO-NEXT: .LBB10_3:2090; RV64IA-TSO-NEXT: ret2091 %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val monotonic monotonic2092 ret void2093}2094 2095define void @cmpxchg_i16_acquire_monotonic(ptr %ptr, i16 %cmp, i16 %val) nounwind {2096; RV32I-LABEL: cmpxchg_i16_acquire_monotonic:2097; RV32I: # %bb.0:2098; RV32I-NEXT: addi sp, sp, -162099; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2100; RV32I-NEXT: sh a1, 10(sp)2101; RV32I-NEXT: addi a1, sp, 102102; RV32I-NEXT: li a3, 22103; RV32I-NEXT: li a4, 02104; RV32I-NEXT: call __atomic_compare_exchange_22105; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2106; RV32I-NEXT: addi sp, sp, 162107; RV32I-NEXT: ret2108;2109; RV32IA-WMO-LABEL: cmpxchg_i16_acquire_monotonic:2110; RV32IA-WMO: # %bb.0:2111; RV32IA-WMO-NEXT: lui a3, 162112; RV32IA-WMO-NEXT: andi a4, a0, -42113; RV32IA-WMO-NEXT: andi a0, a0, 32114; RV32IA-WMO-NEXT: addi a3, a3, -12115; RV32IA-WMO-NEXT: slli a0, a0, 32116; RV32IA-WMO-NEXT: sll a5, a3, a02117; RV32IA-WMO-NEXT: and a1, a1, a32118; RV32IA-WMO-NEXT: and a2, a2, a32119; RV32IA-WMO-NEXT: sll a1, a1, a02120; RV32IA-WMO-NEXT: sll a0, a2, a02121; RV32IA-WMO-NEXT: .LBB11_1: # =>This Inner Loop Header: Depth=12122; RV32IA-WMO-NEXT: lr.w.aq a2, (a4)2123; RV32IA-WMO-NEXT: and a3, a2, a52124; RV32IA-WMO-NEXT: bne a3, a1, .LBB11_32125; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB11_1 Depth=12126; RV32IA-WMO-NEXT: xor a3, a2, a02127; RV32IA-WMO-NEXT: and a3, a3, a52128; RV32IA-WMO-NEXT: xor a3, a2, a32129; RV32IA-WMO-NEXT: sc.w a3, a3, (a4)2130; RV32IA-WMO-NEXT: bnez a3, .LBB11_12131; RV32IA-WMO-NEXT: .LBB11_3:2132; RV32IA-WMO-NEXT: ret2133;2134; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i16_acquire_monotonic:2135; RV32IA-WMO-ZACAS: # %bb.0:2136; RV32IA-WMO-ZACAS-NEXT: lui a3, 162137; RV32IA-WMO-ZACAS-NEXT: andi a4, a0, -42138; RV32IA-WMO-ZACAS-NEXT: andi a0, a0, 32139; RV32IA-WMO-ZACAS-NEXT: addi a3, a3, -12140; RV32IA-WMO-ZACAS-NEXT: slli a0, a0, 32141; RV32IA-WMO-ZACAS-NEXT: sll a5, a3, a02142; RV32IA-WMO-ZACAS-NEXT: and a1, a1, a32143; RV32IA-WMO-ZACAS-NEXT: and a2, a2, a32144; RV32IA-WMO-ZACAS-NEXT: sll a1, a1, a02145; RV32IA-WMO-ZACAS-NEXT: sll a0, a2, a02146; RV32IA-WMO-ZACAS-NEXT: .LBB11_1: # =>This Inner Loop Header: Depth=12147; RV32IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)2148; RV32IA-WMO-ZACAS-NEXT: and a3, a2, a52149; RV32IA-WMO-ZACAS-NEXT: bne a3, a1, .LBB11_32150; RV32IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB11_1 Depth=12151; RV32IA-WMO-ZACAS-NEXT: xor a3, a2, a02152; RV32IA-WMO-ZACAS-NEXT: and a3, a3, a52153; RV32IA-WMO-ZACAS-NEXT: xor a3, a2, a32154; RV32IA-WMO-ZACAS-NEXT: sc.w a3, a3, (a4)2155; RV32IA-WMO-ZACAS-NEXT: bnez a3, .LBB11_12156; RV32IA-WMO-ZACAS-NEXT: .LBB11_3:2157; RV32IA-WMO-ZACAS-NEXT: ret2158;2159; RV32IA-TSO-LABEL: cmpxchg_i16_acquire_monotonic:2160; RV32IA-TSO: # %bb.0:2161; RV32IA-TSO-NEXT: lui a3, 162162; RV32IA-TSO-NEXT: andi a4, a0, -42163; RV32IA-TSO-NEXT: andi a0, a0, 32164; RV32IA-TSO-NEXT: addi a3, a3, -12165; RV32IA-TSO-NEXT: slli a0, a0, 32166; RV32IA-TSO-NEXT: sll a5, a3, a02167; RV32IA-TSO-NEXT: and a1, a1, a32168; RV32IA-TSO-NEXT: and a2, a2, a32169; RV32IA-TSO-NEXT: sll a1, a1, a02170; RV32IA-TSO-NEXT: sll a0, a2, a02171; RV32IA-TSO-NEXT: .LBB11_1: # =>This Inner Loop Header: Depth=12172; RV32IA-TSO-NEXT: lr.w a2, (a4)2173; RV32IA-TSO-NEXT: and a3, a2, a52174; RV32IA-TSO-NEXT: bne a3, a1, .LBB11_32175; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB11_1 Depth=12176; RV32IA-TSO-NEXT: xor a3, a2, a02177; RV32IA-TSO-NEXT: and a3, a3, a52178; RV32IA-TSO-NEXT: xor a3, a2, a32179; RV32IA-TSO-NEXT: sc.w a3, a3, (a4)2180; RV32IA-TSO-NEXT: bnez a3, .LBB11_12181; RV32IA-TSO-NEXT: .LBB11_3:2182; RV32IA-TSO-NEXT: ret2183;2184; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i16_acquire_monotonic:2185; RV32IA-TSO-ZACAS: # %bb.0:2186; RV32IA-TSO-ZACAS-NEXT: lui a3, 162187; RV32IA-TSO-ZACAS-NEXT: andi a4, a0, -42188; RV32IA-TSO-ZACAS-NEXT: andi a0, a0, 32189; RV32IA-TSO-ZACAS-NEXT: addi a3, a3, -12190; RV32IA-TSO-ZACAS-NEXT: slli a0, a0, 32191; RV32IA-TSO-ZACAS-NEXT: sll a5, a3, a02192; RV32IA-TSO-ZACAS-NEXT: and a1, a1, a32193; RV32IA-TSO-ZACAS-NEXT: and a2, a2, a32194; RV32IA-TSO-ZACAS-NEXT: sll a1, a1, a02195; RV32IA-TSO-ZACAS-NEXT: sll a0, a2, a02196; RV32IA-TSO-ZACAS-NEXT: .LBB11_1: # =>This Inner Loop Header: Depth=12197; RV32IA-TSO-ZACAS-NEXT: lr.w a2, (a4)2198; RV32IA-TSO-ZACAS-NEXT: and a3, a2, a52199; RV32IA-TSO-ZACAS-NEXT: bne a3, a1, .LBB11_32200; RV32IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB11_1 Depth=12201; RV32IA-TSO-ZACAS-NEXT: xor a3, a2, a02202; RV32IA-TSO-ZACAS-NEXT: and a3, a3, a52203; RV32IA-TSO-ZACAS-NEXT: xor a3, a2, a32204; RV32IA-TSO-ZACAS-NEXT: sc.w a3, a3, (a4)2205; RV32IA-TSO-ZACAS-NEXT: bnez a3, .LBB11_12206; RV32IA-TSO-ZACAS-NEXT: .LBB11_3:2207; RV32IA-TSO-ZACAS-NEXT: ret2208;2209; RV64I-LABEL: cmpxchg_i16_acquire_monotonic:2210; RV64I: # %bb.0:2211; RV64I-NEXT: addi sp, sp, -162212; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill2213; RV64I-NEXT: sh a1, 6(sp)2214; RV64I-NEXT: addi a1, sp, 62215; RV64I-NEXT: li a3, 22216; RV64I-NEXT: li a4, 02217; RV64I-NEXT: call __atomic_compare_exchange_22218; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload2219; RV64I-NEXT: addi sp, sp, 162220; RV64I-NEXT: ret2221;2222; RV64IA-WMO-LABEL: cmpxchg_i16_acquire_monotonic:2223; RV64IA-WMO: # %bb.0:2224; RV64IA-WMO-NEXT: lui a3, 162225; RV64IA-WMO-NEXT: andi a4, a0, -42226; RV64IA-WMO-NEXT: andi a0, a0, 32227; RV64IA-WMO-NEXT: addi a3, a3, -12228; RV64IA-WMO-NEXT: slli a0, a0, 32229; RV64IA-WMO-NEXT: sllw a5, a3, a02230; RV64IA-WMO-NEXT: and a1, a1, a32231; RV64IA-WMO-NEXT: and a2, a2, a32232; RV64IA-WMO-NEXT: sllw a1, a1, a02233; RV64IA-WMO-NEXT: sllw a0, a2, a02234; RV64IA-WMO-NEXT: .LBB11_1: # =>This Inner Loop Header: Depth=12235; RV64IA-WMO-NEXT: lr.w.aq a2, (a4)2236; RV64IA-WMO-NEXT: and a3, a2, a52237; RV64IA-WMO-NEXT: bne a3, a1, .LBB11_32238; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB11_1 Depth=12239; RV64IA-WMO-NEXT: xor a3, a2, a02240; RV64IA-WMO-NEXT: and a3, a3, a52241; RV64IA-WMO-NEXT: xor a3, a2, a32242; RV64IA-WMO-NEXT: sc.w a3, a3, (a4)2243; RV64IA-WMO-NEXT: bnez a3, .LBB11_12244; RV64IA-WMO-NEXT: .LBB11_3:2245; RV64IA-WMO-NEXT: ret2246;2247; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i16_acquire_monotonic:2248; RV64IA-WMO-ZACAS: # %bb.0:2249; RV64IA-WMO-ZACAS-NEXT: lui a3, 162250; RV64IA-WMO-ZACAS-NEXT: andi a4, a0, -42251; RV64IA-WMO-ZACAS-NEXT: andi a0, a0, 32252; RV64IA-WMO-ZACAS-NEXT: addi a3, a3, -12253; RV64IA-WMO-ZACAS-NEXT: slli a0, a0, 32254; RV64IA-WMO-ZACAS-NEXT: sllw a5, a3, a02255; RV64IA-WMO-ZACAS-NEXT: and a1, a1, a32256; RV64IA-WMO-ZACAS-NEXT: and a2, a2, a32257; RV64IA-WMO-ZACAS-NEXT: sllw a1, a1, a02258; RV64IA-WMO-ZACAS-NEXT: sllw a0, a2, a02259; RV64IA-WMO-ZACAS-NEXT: .LBB11_1: # =>This Inner Loop Header: Depth=12260; RV64IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)2261; RV64IA-WMO-ZACAS-NEXT: and a3, a2, a52262; RV64IA-WMO-ZACAS-NEXT: bne a3, a1, .LBB11_32263; RV64IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB11_1 Depth=12264; RV64IA-WMO-ZACAS-NEXT: xor a3, a2, a02265; RV64IA-WMO-ZACAS-NEXT: and a3, a3, a52266; RV64IA-WMO-ZACAS-NEXT: xor a3, a2, a32267; RV64IA-WMO-ZACAS-NEXT: sc.w a3, a3, (a4)2268; RV64IA-WMO-ZACAS-NEXT: bnez a3, .LBB11_12269; RV64IA-WMO-ZACAS-NEXT: .LBB11_3:2270; RV64IA-WMO-ZACAS-NEXT: ret2271;2272; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_acquire_monotonic:2273; RV64IA-WMO-ZABHA: # %bb.0:2274; RV64IA-WMO-ZABHA-NEXT: amocas.h.aq a1, a2, (a0)2275; RV64IA-WMO-ZABHA-NEXT: ret2276;2277; RV64IA-TSO-LABEL: cmpxchg_i16_acquire_monotonic:2278; RV64IA-TSO: # %bb.0:2279; RV64IA-TSO-NEXT: lui a3, 162280; RV64IA-TSO-NEXT: andi a4, a0, -42281; RV64IA-TSO-NEXT: andi a0, a0, 32282; RV64IA-TSO-NEXT: addi a3, a3, -12283; RV64IA-TSO-NEXT: slli a0, a0, 32284; RV64IA-TSO-NEXT: sllw a5, a3, a02285; RV64IA-TSO-NEXT: and a1, a1, a32286; RV64IA-TSO-NEXT: and a2, a2, a32287; RV64IA-TSO-NEXT: sllw a1, a1, a02288; RV64IA-TSO-NEXT: sllw a0, a2, a02289; RV64IA-TSO-NEXT: .LBB11_1: # =>This Inner Loop Header: Depth=12290; RV64IA-TSO-NEXT: lr.w a2, (a4)2291; RV64IA-TSO-NEXT: and a3, a2, a52292; RV64IA-TSO-NEXT: bne a3, a1, .LBB11_32293; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB11_1 Depth=12294; RV64IA-TSO-NEXT: xor a3, a2, a02295; RV64IA-TSO-NEXT: and a3, a3, a52296; RV64IA-TSO-NEXT: xor a3, a2, a32297; RV64IA-TSO-NEXT: sc.w a3, a3, (a4)2298; RV64IA-TSO-NEXT: bnez a3, .LBB11_12299; RV64IA-TSO-NEXT: .LBB11_3:2300; RV64IA-TSO-NEXT: ret2301;2302; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i16_acquire_monotonic:2303; RV64IA-TSO-ZACAS: # %bb.0:2304; RV64IA-TSO-ZACAS-NEXT: lui a3, 162305; RV64IA-TSO-ZACAS-NEXT: andi a4, a0, -42306; RV64IA-TSO-ZACAS-NEXT: andi a0, a0, 32307; RV64IA-TSO-ZACAS-NEXT: addi a3, a3, -12308; RV64IA-TSO-ZACAS-NEXT: slli a0, a0, 32309; RV64IA-TSO-ZACAS-NEXT: sllw a5, a3, a02310; RV64IA-TSO-ZACAS-NEXT: and a1, a1, a32311; RV64IA-TSO-ZACAS-NEXT: and a2, a2, a32312; RV64IA-TSO-ZACAS-NEXT: sllw a1, a1, a02313; RV64IA-TSO-ZACAS-NEXT: sllw a0, a2, a02314; RV64IA-TSO-ZACAS-NEXT: .LBB11_1: # =>This Inner Loop Header: Depth=12315; RV64IA-TSO-ZACAS-NEXT: lr.w a2, (a4)2316; RV64IA-TSO-ZACAS-NEXT: and a3, a2, a52317; RV64IA-TSO-ZACAS-NEXT: bne a3, a1, .LBB11_32318; RV64IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB11_1 Depth=12319; RV64IA-TSO-ZACAS-NEXT: xor a3, a2, a02320; RV64IA-TSO-ZACAS-NEXT: and a3, a3, a52321; RV64IA-TSO-ZACAS-NEXT: xor a3, a2, a32322; RV64IA-TSO-ZACAS-NEXT: sc.w a3, a3, (a4)2323; RV64IA-TSO-ZACAS-NEXT: bnez a3, .LBB11_12324; RV64IA-TSO-ZACAS-NEXT: .LBB11_3:2325; RV64IA-TSO-ZACAS-NEXT: ret2326;2327; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_acquire_monotonic:2328; RV64IA-TSO-ZABHA: # %bb.0:2329; RV64IA-TSO-ZABHA-NEXT: amocas.h a1, a2, (a0)2330; RV64IA-TSO-ZABHA-NEXT: ret2331 %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val acquire monotonic2332 ret void2333}2334 2335define void @cmpxchg_i16_acquire_acquire(ptr %ptr, i16 %cmp, i16 %val) nounwind {2336; RV32I-LABEL: cmpxchg_i16_acquire_acquire:2337; RV32I: # %bb.0:2338; RV32I-NEXT: addi sp, sp, -162339; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2340; RV32I-NEXT: sh a1, 10(sp)2341; RV32I-NEXT: addi a1, sp, 102342; RV32I-NEXT: li a3, 22343; RV32I-NEXT: li a4, 22344; RV32I-NEXT: call __atomic_compare_exchange_22345; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2346; RV32I-NEXT: addi sp, sp, 162347; RV32I-NEXT: ret2348;2349; RV32IA-WMO-LABEL: cmpxchg_i16_acquire_acquire:2350; RV32IA-WMO: # %bb.0:2351; RV32IA-WMO-NEXT: lui a3, 162352; RV32IA-WMO-NEXT: andi a4, a0, -42353; RV32IA-WMO-NEXT: andi a0, a0, 32354; RV32IA-WMO-NEXT: addi a3, a3, -12355; RV32IA-WMO-NEXT: slli a0, a0, 32356; RV32IA-WMO-NEXT: sll a5, a3, a02357; RV32IA-WMO-NEXT: and a1, a1, a32358; RV32IA-WMO-NEXT: and a2, a2, a32359; RV32IA-WMO-NEXT: sll a1, a1, a02360; RV32IA-WMO-NEXT: sll a0, a2, a02361; RV32IA-WMO-NEXT: .LBB12_1: # =>This Inner Loop Header: Depth=12362; RV32IA-WMO-NEXT: lr.w.aq a2, (a4)2363; RV32IA-WMO-NEXT: and a3, a2, a52364; RV32IA-WMO-NEXT: bne a3, a1, .LBB12_32365; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB12_1 Depth=12366; RV32IA-WMO-NEXT: xor a3, a2, a02367; RV32IA-WMO-NEXT: and a3, a3, a52368; RV32IA-WMO-NEXT: xor a3, a2, a32369; RV32IA-WMO-NEXT: sc.w a3, a3, (a4)2370; RV32IA-WMO-NEXT: bnez a3, .LBB12_12371; RV32IA-WMO-NEXT: .LBB12_3:2372; RV32IA-WMO-NEXT: ret2373;2374; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i16_acquire_acquire:2375; RV32IA-WMO-ZACAS: # %bb.0:2376; RV32IA-WMO-ZACAS-NEXT: lui a3, 162377; RV32IA-WMO-ZACAS-NEXT: andi a4, a0, -42378; RV32IA-WMO-ZACAS-NEXT: andi a0, a0, 32379; RV32IA-WMO-ZACAS-NEXT: addi a3, a3, -12380; RV32IA-WMO-ZACAS-NEXT: slli a0, a0, 32381; RV32IA-WMO-ZACAS-NEXT: sll a5, a3, a02382; RV32IA-WMO-ZACAS-NEXT: and a1, a1, a32383; RV32IA-WMO-ZACAS-NEXT: and a2, a2, a32384; RV32IA-WMO-ZACAS-NEXT: sll a1, a1, a02385; RV32IA-WMO-ZACAS-NEXT: sll a0, a2, a02386; RV32IA-WMO-ZACAS-NEXT: .LBB12_1: # =>This Inner Loop Header: Depth=12387; RV32IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)2388; RV32IA-WMO-ZACAS-NEXT: and a3, a2, a52389; RV32IA-WMO-ZACAS-NEXT: bne a3, a1, .LBB12_32390; RV32IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB12_1 Depth=12391; RV32IA-WMO-ZACAS-NEXT: xor a3, a2, a02392; RV32IA-WMO-ZACAS-NEXT: and a3, a3, a52393; RV32IA-WMO-ZACAS-NEXT: xor a3, a2, a32394; RV32IA-WMO-ZACAS-NEXT: sc.w a3, a3, (a4)2395; RV32IA-WMO-ZACAS-NEXT: bnez a3, .LBB12_12396; RV32IA-WMO-ZACAS-NEXT: .LBB12_3:2397; RV32IA-WMO-ZACAS-NEXT: ret2398;2399; RV32IA-TSO-LABEL: cmpxchg_i16_acquire_acquire:2400; RV32IA-TSO: # %bb.0:2401; RV32IA-TSO-NEXT: lui a3, 162402; RV32IA-TSO-NEXT: andi a4, a0, -42403; RV32IA-TSO-NEXT: andi a0, a0, 32404; RV32IA-TSO-NEXT: addi a3, a3, -12405; RV32IA-TSO-NEXT: slli a0, a0, 32406; RV32IA-TSO-NEXT: sll a5, a3, a02407; RV32IA-TSO-NEXT: and a1, a1, a32408; RV32IA-TSO-NEXT: and a2, a2, a32409; RV32IA-TSO-NEXT: sll a1, a1, a02410; RV32IA-TSO-NEXT: sll a0, a2, a02411; RV32IA-TSO-NEXT: .LBB12_1: # =>This Inner Loop Header: Depth=12412; RV32IA-TSO-NEXT: lr.w a2, (a4)2413; RV32IA-TSO-NEXT: and a3, a2, a52414; RV32IA-TSO-NEXT: bne a3, a1, .LBB12_32415; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB12_1 Depth=12416; RV32IA-TSO-NEXT: xor a3, a2, a02417; RV32IA-TSO-NEXT: and a3, a3, a52418; RV32IA-TSO-NEXT: xor a3, a2, a32419; RV32IA-TSO-NEXT: sc.w a3, a3, (a4)2420; RV32IA-TSO-NEXT: bnez a3, .LBB12_12421; RV32IA-TSO-NEXT: .LBB12_3:2422; RV32IA-TSO-NEXT: ret2423;2424; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i16_acquire_acquire:2425; RV32IA-TSO-ZACAS: # %bb.0:2426; RV32IA-TSO-ZACAS-NEXT: lui a3, 162427; RV32IA-TSO-ZACAS-NEXT: andi a4, a0, -42428; RV32IA-TSO-ZACAS-NEXT: andi a0, a0, 32429; RV32IA-TSO-ZACAS-NEXT: addi a3, a3, -12430; RV32IA-TSO-ZACAS-NEXT: slli a0, a0, 32431; RV32IA-TSO-ZACAS-NEXT: sll a5, a3, a02432; RV32IA-TSO-ZACAS-NEXT: and a1, a1, a32433; RV32IA-TSO-ZACAS-NEXT: and a2, a2, a32434; RV32IA-TSO-ZACAS-NEXT: sll a1, a1, a02435; RV32IA-TSO-ZACAS-NEXT: sll a0, a2, a02436; RV32IA-TSO-ZACAS-NEXT: .LBB12_1: # =>This Inner Loop Header: Depth=12437; RV32IA-TSO-ZACAS-NEXT: lr.w a2, (a4)2438; RV32IA-TSO-ZACAS-NEXT: and a3, a2, a52439; RV32IA-TSO-ZACAS-NEXT: bne a3, a1, .LBB12_32440; RV32IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB12_1 Depth=12441; RV32IA-TSO-ZACAS-NEXT: xor a3, a2, a02442; RV32IA-TSO-ZACAS-NEXT: and a3, a3, a52443; RV32IA-TSO-ZACAS-NEXT: xor a3, a2, a32444; RV32IA-TSO-ZACAS-NEXT: sc.w a3, a3, (a4)2445; RV32IA-TSO-ZACAS-NEXT: bnez a3, .LBB12_12446; RV32IA-TSO-ZACAS-NEXT: .LBB12_3:2447; RV32IA-TSO-ZACAS-NEXT: ret2448;2449; RV64I-LABEL: cmpxchg_i16_acquire_acquire:2450; RV64I: # %bb.0:2451; RV64I-NEXT: addi sp, sp, -162452; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill2453; RV64I-NEXT: sh a1, 6(sp)2454; RV64I-NEXT: addi a1, sp, 62455; RV64I-NEXT: li a3, 22456; RV64I-NEXT: li a4, 22457; RV64I-NEXT: call __atomic_compare_exchange_22458; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload2459; RV64I-NEXT: addi sp, sp, 162460; RV64I-NEXT: ret2461;2462; RV64IA-WMO-LABEL: cmpxchg_i16_acquire_acquire:2463; RV64IA-WMO: # %bb.0:2464; RV64IA-WMO-NEXT: lui a3, 162465; RV64IA-WMO-NEXT: andi a4, a0, -42466; RV64IA-WMO-NEXT: andi a0, a0, 32467; RV64IA-WMO-NEXT: addi a3, a3, -12468; RV64IA-WMO-NEXT: slli a0, a0, 32469; RV64IA-WMO-NEXT: sllw a5, a3, a02470; RV64IA-WMO-NEXT: and a1, a1, a32471; RV64IA-WMO-NEXT: and a2, a2, a32472; RV64IA-WMO-NEXT: sllw a1, a1, a02473; RV64IA-WMO-NEXT: sllw a0, a2, a02474; RV64IA-WMO-NEXT: .LBB12_1: # =>This Inner Loop Header: Depth=12475; RV64IA-WMO-NEXT: lr.w.aq a2, (a4)2476; RV64IA-WMO-NEXT: and a3, a2, a52477; RV64IA-WMO-NEXT: bne a3, a1, .LBB12_32478; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB12_1 Depth=12479; RV64IA-WMO-NEXT: xor a3, a2, a02480; RV64IA-WMO-NEXT: and a3, a3, a52481; RV64IA-WMO-NEXT: xor a3, a2, a32482; RV64IA-WMO-NEXT: sc.w a3, a3, (a4)2483; RV64IA-WMO-NEXT: bnez a3, .LBB12_12484; RV64IA-WMO-NEXT: .LBB12_3:2485; RV64IA-WMO-NEXT: ret2486;2487; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i16_acquire_acquire:2488; RV64IA-WMO-ZACAS: # %bb.0:2489; RV64IA-WMO-ZACAS-NEXT: lui a3, 162490; RV64IA-WMO-ZACAS-NEXT: andi a4, a0, -42491; RV64IA-WMO-ZACAS-NEXT: andi a0, a0, 32492; RV64IA-WMO-ZACAS-NEXT: addi a3, a3, -12493; RV64IA-WMO-ZACAS-NEXT: slli a0, a0, 32494; RV64IA-WMO-ZACAS-NEXT: sllw a5, a3, a02495; RV64IA-WMO-ZACAS-NEXT: and a1, a1, a32496; RV64IA-WMO-ZACAS-NEXT: and a2, a2, a32497; RV64IA-WMO-ZACAS-NEXT: sllw a1, a1, a02498; RV64IA-WMO-ZACAS-NEXT: sllw a0, a2, a02499; RV64IA-WMO-ZACAS-NEXT: .LBB12_1: # =>This Inner Loop Header: Depth=12500; RV64IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)2501; RV64IA-WMO-ZACAS-NEXT: and a3, a2, a52502; RV64IA-WMO-ZACAS-NEXT: bne a3, a1, .LBB12_32503; RV64IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB12_1 Depth=12504; RV64IA-WMO-ZACAS-NEXT: xor a3, a2, a02505; RV64IA-WMO-ZACAS-NEXT: and a3, a3, a52506; RV64IA-WMO-ZACAS-NEXT: xor a3, a2, a32507; RV64IA-WMO-ZACAS-NEXT: sc.w a3, a3, (a4)2508; RV64IA-WMO-ZACAS-NEXT: bnez a3, .LBB12_12509; RV64IA-WMO-ZACAS-NEXT: .LBB12_3:2510; RV64IA-WMO-ZACAS-NEXT: ret2511;2512; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_acquire_acquire:2513; RV64IA-WMO-ZABHA: # %bb.0:2514; RV64IA-WMO-ZABHA-NEXT: amocas.h.aq a1, a2, (a0)2515; RV64IA-WMO-ZABHA-NEXT: ret2516;2517; RV64IA-TSO-LABEL: cmpxchg_i16_acquire_acquire:2518; RV64IA-TSO: # %bb.0:2519; RV64IA-TSO-NEXT: lui a3, 162520; RV64IA-TSO-NEXT: andi a4, a0, -42521; RV64IA-TSO-NEXT: andi a0, a0, 32522; RV64IA-TSO-NEXT: addi a3, a3, -12523; RV64IA-TSO-NEXT: slli a0, a0, 32524; RV64IA-TSO-NEXT: sllw a5, a3, a02525; RV64IA-TSO-NEXT: and a1, a1, a32526; RV64IA-TSO-NEXT: and a2, a2, a32527; RV64IA-TSO-NEXT: sllw a1, a1, a02528; RV64IA-TSO-NEXT: sllw a0, a2, a02529; RV64IA-TSO-NEXT: .LBB12_1: # =>This Inner Loop Header: Depth=12530; RV64IA-TSO-NEXT: lr.w a2, (a4)2531; RV64IA-TSO-NEXT: and a3, a2, a52532; RV64IA-TSO-NEXT: bne a3, a1, .LBB12_32533; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB12_1 Depth=12534; RV64IA-TSO-NEXT: xor a3, a2, a02535; RV64IA-TSO-NEXT: and a3, a3, a52536; RV64IA-TSO-NEXT: xor a3, a2, a32537; RV64IA-TSO-NEXT: sc.w a3, a3, (a4)2538; RV64IA-TSO-NEXT: bnez a3, .LBB12_12539; RV64IA-TSO-NEXT: .LBB12_3:2540; RV64IA-TSO-NEXT: ret2541;2542; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i16_acquire_acquire:2543; RV64IA-TSO-ZACAS: # %bb.0:2544; RV64IA-TSO-ZACAS-NEXT: lui a3, 162545; RV64IA-TSO-ZACAS-NEXT: andi a4, a0, -42546; RV64IA-TSO-ZACAS-NEXT: andi a0, a0, 32547; RV64IA-TSO-ZACAS-NEXT: addi a3, a3, -12548; RV64IA-TSO-ZACAS-NEXT: slli a0, a0, 32549; RV64IA-TSO-ZACAS-NEXT: sllw a5, a3, a02550; RV64IA-TSO-ZACAS-NEXT: and a1, a1, a32551; RV64IA-TSO-ZACAS-NEXT: and a2, a2, a32552; RV64IA-TSO-ZACAS-NEXT: sllw a1, a1, a02553; RV64IA-TSO-ZACAS-NEXT: sllw a0, a2, a02554; RV64IA-TSO-ZACAS-NEXT: .LBB12_1: # =>This Inner Loop Header: Depth=12555; RV64IA-TSO-ZACAS-NEXT: lr.w a2, (a4)2556; RV64IA-TSO-ZACAS-NEXT: and a3, a2, a52557; RV64IA-TSO-ZACAS-NEXT: bne a3, a1, .LBB12_32558; RV64IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB12_1 Depth=12559; RV64IA-TSO-ZACAS-NEXT: xor a3, a2, a02560; RV64IA-TSO-ZACAS-NEXT: and a3, a3, a52561; RV64IA-TSO-ZACAS-NEXT: xor a3, a2, a32562; RV64IA-TSO-ZACAS-NEXT: sc.w a3, a3, (a4)2563; RV64IA-TSO-ZACAS-NEXT: bnez a3, .LBB12_12564; RV64IA-TSO-ZACAS-NEXT: .LBB12_3:2565; RV64IA-TSO-ZACAS-NEXT: ret2566;2567; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_acquire_acquire:2568; RV64IA-TSO-ZABHA: # %bb.0:2569; RV64IA-TSO-ZABHA-NEXT: amocas.h a1, a2, (a0)2570; RV64IA-TSO-ZABHA-NEXT: ret2571 %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val acquire acquire2572 ret void2573}2574 2575define void @cmpxchg_i16_release_monotonic(ptr %ptr, i16 %cmp, i16 %val) nounwind {2576; RV32I-LABEL: cmpxchg_i16_release_monotonic:2577; RV32I: # %bb.0:2578; RV32I-NEXT: addi sp, sp, -162579; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2580; RV32I-NEXT: sh a1, 10(sp)2581; RV32I-NEXT: addi a1, sp, 102582; RV32I-NEXT: li a3, 32583; RV32I-NEXT: li a4, 02584; RV32I-NEXT: call __atomic_compare_exchange_22585; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2586; RV32I-NEXT: addi sp, sp, 162587; RV32I-NEXT: ret2588;2589; RV32IA-WMO-LABEL: cmpxchg_i16_release_monotonic:2590; RV32IA-WMO: # %bb.0:2591; RV32IA-WMO-NEXT: lui a3, 162592; RV32IA-WMO-NEXT: andi a4, a0, -42593; RV32IA-WMO-NEXT: andi a0, a0, 32594; RV32IA-WMO-NEXT: addi a3, a3, -12595; RV32IA-WMO-NEXT: slli a0, a0, 32596; RV32IA-WMO-NEXT: sll a5, a3, a02597; RV32IA-WMO-NEXT: and a1, a1, a32598; RV32IA-WMO-NEXT: and a2, a2, a32599; RV32IA-WMO-NEXT: sll a1, a1, a02600; RV32IA-WMO-NEXT: sll a0, a2, a02601; RV32IA-WMO-NEXT: .LBB13_1: # =>This Inner Loop Header: Depth=12602; RV32IA-WMO-NEXT: lr.w a2, (a4)2603; RV32IA-WMO-NEXT: and a3, a2, a52604; RV32IA-WMO-NEXT: bne a3, a1, .LBB13_32605; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB13_1 Depth=12606; RV32IA-WMO-NEXT: xor a3, a2, a02607; RV32IA-WMO-NEXT: and a3, a3, a52608; RV32IA-WMO-NEXT: xor a3, a2, a32609; RV32IA-WMO-NEXT: sc.w.rl a3, a3, (a4)2610; RV32IA-WMO-NEXT: bnez a3, .LBB13_12611; RV32IA-WMO-NEXT: .LBB13_3:2612; RV32IA-WMO-NEXT: ret2613;2614; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i16_release_monotonic:2615; RV32IA-WMO-ZACAS: # %bb.0:2616; RV32IA-WMO-ZACAS-NEXT: lui a3, 162617; RV32IA-WMO-ZACAS-NEXT: andi a4, a0, -42618; RV32IA-WMO-ZACAS-NEXT: andi a0, a0, 32619; RV32IA-WMO-ZACAS-NEXT: addi a3, a3, -12620; RV32IA-WMO-ZACAS-NEXT: slli a0, a0, 32621; RV32IA-WMO-ZACAS-NEXT: sll a5, a3, a02622; RV32IA-WMO-ZACAS-NEXT: and a1, a1, a32623; RV32IA-WMO-ZACAS-NEXT: and a2, a2, a32624; RV32IA-WMO-ZACAS-NEXT: sll a1, a1, a02625; RV32IA-WMO-ZACAS-NEXT: sll a0, a2, a02626; RV32IA-WMO-ZACAS-NEXT: .LBB13_1: # =>This Inner Loop Header: Depth=12627; RV32IA-WMO-ZACAS-NEXT: lr.w a2, (a4)2628; RV32IA-WMO-ZACAS-NEXT: and a3, a2, a52629; RV32IA-WMO-ZACAS-NEXT: bne a3, a1, .LBB13_32630; RV32IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB13_1 Depth=12631; RV32IA-WMO-ZACAS-NEXT: xor a3, a2, a02632; RV32IA-WMO-ZACAS-NEXT: and a3, a3, a52633; RV32IA-WMO-ZACAS-NEXT: xor a3, a2, a32634; RV32IA-WMO-ZACAS-NEXT: sc.w.rl a3, a3, (a4)2635; RV32IA-WMO-ZACAS-NEXT: bnez a3, .LBB13_12636; RV32IA-WMO-ZACAS-NEXT: .LBB13_3:2637; RV32IA-WMO-ZACAS-NEXT: ret2638;2639; RV32IA-TSO-LABEL: cmpxchg_i16_release_monotonic:2640; RV32IA-TSO: # %bb.0:2641; RV32IA-TSO-NEXT: lui a3, 162642; RV32IA-TSO-NEXT: andi a4, a0, -42643; RV32IA-TSO-NEXT: andi a0, a0, 32644; RV32IA-TSO-NEXT: addi a3, a3, -12645; RV32IA-TSO-NEXT: slli a0, a0, 32646; RV32IA-TSO-NEXT: sll a5, a3, a02647; RV32IA-TSO-NEXT: and a1, a1, a32648; RV32IA-TSO-NEXT: and a2, a2, a32649; RV32IA-TSO-NEXT: sll a1, a1, a02650; RV32IA-TSO-NEXT: sll a0, a2, a02651; RV32IA-TSO-NEXT: .LBB13_1: # =>This Inner Loop Header: Depth=12652; RV32IA-TSO-NEXT: lr.w a2, (a4)2653; RV32IA-TSO-NEXT: and a3, a2, a52654; RV32IA-TSO-NEXT: bne a3, a1, .LBB13_32655; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB13_1 Depth=12656; RV32IA-TSO-NEXT: xor a3, a2, a02657; RV32IA-TSO-NEXT: and a3, a3, a52658; RV32IA-TSO-NEXT: xor a3, a2, a32659; RV32IA-TSO-NEXT: sc.w a3, a3, (a4)2660; RV32IA-TSO-NEXT: bnez a3, .LBB13_12661; RV32IA-TSO-NEXT: .LBB13_3:2662; RV32IA-TSO-NEXT: ret2663;2664; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i16_release_monotonic:2665; RV32IA-TSO-ZACAS: # %bb.0:2666; RV32IA-TSO-ZACAS-NEXT: lui a3, 162667; RV32IA-TSO-ZACAS-NEXT: andi a4, a0, -42668; RV32IA-TSO-ZACAS-NEXT: andi a0, a0, 32669; RV32IA-TSO-ZACAS-NEXT: addi a3, a3, -12670; RV32IA-TSO-ZACAS-NEXT: slli a0, a0, 32671; RV32IA-TSO-ZACAS-NEXT: sll a5, a3, a02672; RV32IA-TSO-ZACAS-NEXT: and a1, a1, a32673; RV32IA-TSO-ZACAS-NEXT: and a2, a2, a32674; RV32IA-TSO-ZACAS-NEXT: sll a1, a1, a02675; RV32IA-TSO-ZACAS-NEXT: sll a0, a2, a02676; RV32IA-TSO-ZACAS-NEXT: .LBB13_1: # =>This Inner Loop Header: Depth=12677; RV32IA-TSO-ZACAS-NEXT: lr.w a2, (a4)2678; RV32IA-TSO-ZACAS-NEXT: and a3, a2, a52679; RV32IA-TSO-ZACAS-NEXT: bne a3, a1, .LBB13_32680; RV32IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB13_1 Depth=12681; RV32IA-TSO-ZACAS-NEXT: xor a3, a2, a02682; RV32IA-TSO-ZACAS-NEXT: and a3, a3, a52683; RV32IA-TSO-ZACAS-NEXT: xor a3, a2, a32684; RV32IA-TSO-ZACAS-NEXT: sc.w a3, a3, (a4)2685; RV32IA-TSO-ZACAS-NEXT: bnez a3, .LBB13_12686; RV32IA-TSO-ZACAS-NEXT: .LBB13_3:2687; RV32IA-TSO-ZACAS-NEXT: ret2688;2689; RV64I-LABEL: cmpxchg_i16_release_monotonic:2690; RV64I: # %bb.0:2691; RV64I-NEXT: addi sp, sp, -162692; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill2693; RV64I-NEXT: sh a1, 6(sp)2694; RV64I-NEXT: addi a1, sp, 62695; RV64I-NEXT: li a3, 32696; RV64I-NEXT: li a4, 02697; RV64I-NEXT: call __atomic_compare_exchange_22698; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload2699; RV64I-NEXT: addi sp, sp, 162700; RV64I-NEXT: ret2701;2702; RV64IA-WMO-LABEL: cmpxchg_i16_release_monotonic:2703; RV64IA-WMO: # %bb.0:2704; RV64IA-WMO-NEXT: lui a3, 162705; RV64IA-WMO-NEXT: andi a4, a0, -42706; RV64IA-WMO-NEXT: andi a0, a0, 32707; RV64IA-WMO-NEXT: addi a3, a3, -12708; RV64IA-WMO-NEXT: slli a0, a0, 32709; RV64IA-WMO-NEXT: sllw a5, a3, a02710; RV64IA-WMO-NEXT: and a1, a1, a32711; RV64IA-WMO-NEXT: and a2, a2, a32712; RV64IA-WMO-NEXT: sllw a1, a1, a02713; RV64IA-WMO-NEXT: sllw a0, a2, a02714; RV64IA-WMO-NEXT: .LBB13_1: # =>This Inner Loop Header: Depth=12715; RV64IA-WMO-NEXT: lr.w a2, (a4)2716; RV64IA-WMO-NEXT: and a3, a2, a52717; RV64IA-WMO-NEXT: bne a3, a1, .LBB13_32718; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB13_1 Depth=12719; RV64IA-WMO-NEXT: xor a3, a2, a02720; RV64IA-WMO-NEXT: and a3, a3, a52721; RV64IA-WMO-NEXT: xor a3, a2, a32722; RV64IA-WMO-NEXT: sc.w.rl a3, a3, (a4)2723; RV64IA-WMO-NEXT: bnez a3, .LBB13_12724; RV64IA-WMO-NEXT: .LBB13_3:2725; RV64IA-WMO-NEXT: ret2726;2727; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i16_release_monotonic:2728; RV64IA-WMO-ZACAS: # %bb.0:2729; RV64IA-WMO-ZACAS-NEXT: lui a3, 162730; RV64IA-WMO-ZACAS-NEXT: andi a4, a0, -42731; RV64IA-WMO-ZACAS-NEXT: andi a0, a0, 32732; RV64IA-WMO-ZACAS-NEXT: addi a3, a3, -12733; RV64IA-WMO-ZACAS-NEXT: slli a0, a0, 32734; RV64IA-WMO-ZACAS-NEXT: sllw a5, a3, a02735; RV64IA-WMO-ZACAS-NEXT: and a1, a1, a32736; RV64IA-WMO-ZACAS-NEXT: and a2, a2, a32737; RV64IA-WMO-ZACAS-NEXT: sllw a1, a1, a02738; RV64IA-WMO-ZACAS-NEXT: sllw a0, a2, a02739; RV64IA-WMO-ZACAS-NEXT: .LBB13_1: # =>This Inner Loop Header: Depth=12740; RV64IA-WMO-ZACAS-NEXT: lr.w a2, (a4)2741; RV64IA-WMO-ZACAS-NEXT: and a3, a2, a52742; RV64IA-WMO-ZACAS-NEXT: bne a3, a1, .LBB13_32743; RV64IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB13_1 Depth=12744; RV64IA-WMO-ZACAS-NEXT: xor a3, a2, a02745; RV64IA-WMO-ZACAS-NEXT: and a3, a3, a52746; RV64IA-WMO-ZACAS-NEXT: xor a3, a2, a32747; RV64IA-WMO-ZACAS-NEXT: sc.w.rl a3, a3, (a4)2748; RV64IA-WMO-ZACAS-NEXT: bnez a3, .LBB13_12749; RV64IA-WMO-ZACAS-NEXT: .LBB13_3:2750; RV64IA-WMO-ZACAS-NEXT: ret2751;2752; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_release_monotonic:2753; RV64IA-WMO-ZABHA: # %bb.0:2754; RV64IA-WMO-ZABHA-NEXT: amocas.h.rl a1, a2, (a0)2755; RV64IA-WMO-ZABHA-NEXT: ret2756;2757; RV64IA-TSO-LABEL: cmpxchg_i16_release_monotonic:2758; RV64IA-TSO: # %bb.0:2759; RV64IA-TSO-NEXT: lui a3, 162760; RV64IA-TSO-NEXT: andi a4, a0, -42761; RV64IA-TSO-NEXT: andi a0, a0, 32762; RV64IA-TSO-NEXT: addi a3, a3, -12763; RV64IA-TSO-NEXT: slli a0, a0, 32764; RV64IA-TSO-NEXT: sllw a5, a3, a02765; RV64IA-TSO-NEXT: and a1, a1, a32766; RV64IA-TSO-NEXT: and a2, a2, a32767; RV64IA-TSO-NEXT: sllw a1, a1, a02768; RV64IA-TSO-NEXT: sllw a0, a2, a02769; RV64IA-TSO-NEXT: .LBB13_1: # =>This Inner Loop Header: Depth=12770; RV64IA-TSO-NEXT: lr.w a2, (a4)2771; RV64IA-TSO-NEXT: and a3, a2, a52772; RV64IA-TSO-NEXT: bne a3, a1, .LBB13_32773; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB13_1 Depth=12774; RV64IA-TSO-NEXT: xor a3, a2, a02775; RV64IA-TSO-NEXT: and a3, a3, a52776; RV64IA-TSO-NEXT: xor a3, a2, a32777; RV64IA-TSO-NEXT: sc.w a3, a3, (a4)2778; RV64IA-TSO-NEXT: bnez a3, .LBB13_12779; RV64IA-TSO-NEXT: .LBB13_3:2780; RV64IA-TSO-NEXT: ret2781;2782; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i16_release_monotonic:2783; RV64IA-TSO-ZACAS: # %bb.0:2784; RV64IA-TSO-ZACAS-NEXT: lui a3, 162785; RV64IA-TSO-ZACAS-NEXT: andi a4, a0, -42786; RV64IA-TSO-ZACAS-NEXT: andi a0, a0, 32787; RV64IA-TSO-ZACAS-NEXT: addi a3, a3, -12788; RV64IA-TSO-ZACAS-NEXT: slli a0, a0, 32789; RV64IA-TSO-ZACAS-NEXT: sllw a5, a3, a02790; RV64IA-TSO-ZACAS-NEXT: and a1, a1, a32791; RV64IA-TSO-ZACAS-NEXT: and a2, a2, a32792; RV64IA-TSO-ZACAS-NEXT: sllw a1, a1, a02793; RV64IA-TSO-ZACAS-NEXT: sllw a0, a2, a02794; RV64IA-TSO-ZACAS-NEXT: .LBB13_1: # =>This Inner Loop Header: Depth=12795; RV64IA-TSO-ZACAS-NEXT: lr.w a2, (a4)2796; RV64IA-TSO-ZACAS-NEXT: and a3, a2, a52797; RV64IA-TSO-ZACAS-NEXT: bne a3, a1, .LBB13_32798; RV64IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB13_1 Depth=12799; RV64IA-TSO-ZACAS-NEXT: xor a3, a2, a02800; RV64IA-TSO-ZACAS-NEXT: and a3, a3, a52801; RV64IA-TSO-ZACAS-NEXT: xor a3, a2, a32802; RV64IA-TSO-ZACAS-NEXT: sc.w a3, a3, (a4)2803; RV64IA-TSO-ZACAS-NEXT: bnez a3, .LBB13_12804; RV64IA-TSO-ZACAS-NEXT: .LBB13_3:2805; RV64IA-TSO-ZACAS-NEXT: ret2806;2807; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_release_monotonic:2808; RV64IA-TSO-ZABHA: # %bb.0:2809; RV64IA-TSO-ZABHA-NEXT: amocas.h a1, a2, (a0)2810; RV64IA-TSO-ZABHA-NEXT: ret2811 %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val release monotonic2812 ret void2813}2814 2815define void @cmpxchg_i16_release_acquire(ptr %ptr, i16 %cmp, i16 %val) nounwind {2816; RV32I-LABEL: cmpxchg_i16_release_acquire:2817; RV32I: # %bb.0:2818; RV32I-NEXT: addi sp, sp, -162819; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2820; RV32I-NEXT: sh a1, 10(sp)2821; RV32I-NEXT: addi a1, sp, 102822; RV32I-NEXT: li a3, 32823; RV32I-NEXT: li a4, 22824; RV32I-NEXT: call __atomic_compare_exchange_22825; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2826; RV32I-NEXT: addi sp, sp, 162827; RV32I-NEXT: ret2828;2829; RV32IA-WMO-LABEL: cmpxchg_i16_release_acquire:2830; RV32IA-WMO: # %bb.0:2831; RV32IA-WMO-NEXT: lui a3, 162832; RV32IA-WMO-NEXT: andi a4, a0, -42833; RV32IA-WMO-NEXT: andi a0, a0, 32834; RV32IA-WMO-NEXT: addi a3, a3, -12835; RV32IA-WMO-NEXT: slli a0, a0, 32836; RV32IA-WMO-NEXT: sll a5, a3, a02837; RV32IA-WMO-NEXT: and a1, a1, a32838; RV32IA-WMO-NEXT: and a2, a2, a32839; RV32IA-WMO-NEXT: sll a1, a1, a02840; RV32IA-WMO-NEXT: sll a0, a2, a02841; RV32IA-WMO-NEXT: .LBB14_1: # =>This Inner Loop Header: Depth=12842; RV32IA-WMO-NEXT: lr.w.aq a2, (a4)2843; RV32IA-WMO-NEXT: and a3, a2, a52844; RV32IA-WMO-NEXT: bne a3, a1, .LBB14_32845; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB14_1 Depth=12846; RV32IA-WMO-NEXT: xor a3, a2, a02847; RV32IA-WMO-NEXT: and a3, a3, a52848; RV32IA-WMO-NEXT: xor a3, a2, a32849; RV32IA-WMO-NEXT: sc.w.rl a3, a3, (a4)2850; RV32IA-WMO-NEXT: bnez a3, .LBB14_12851; RV32IA-WMO-NEXT: .LBB14_3:2852; RV32IA-WMO-NEXT: ret2853;2854; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i16_release_acquire:2855; RV32IA-WMO-ZACAS: # %bb.0:2856; RV32IA-WMO-ZACAS-NEXT: lui a3, 162857; RV32IA-WMO-ZACAS-NEXT: andi a4, a0, -42858; RV32IA-WMO-ZACAS-NEXT: andi a0, a0, 32859; RV32IA-WMO-ZACAS-NEXT: addi a3, a3, -12860; RV32IA-WMO-ZACAS-NEXT: slli a0, a0, 32861; RV32IA-WMO-ZACAS-NEXT: sll a5, a3, a02862; RV32IA-WMO-ZACAS-NEXT: and a1, a1, a32863; RV32IA-WMO-ZACAS-NEXT: and a2, a2, a32864; RV32IA-WMO-ZACAS-NEXT: sll a1, a1, a02865; RV32IA-WMO-ZACAS-NEXT: sll a0, a2, a02866; RV32IA-WMO-ZACAS-NEXT: .LBB14_1: # =>This Inner Loop Header: Depth=12867; RV32IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)2868; RV32IA-WMO-ZACAS-NEXT: and a3, a2, a52869; RV32IA-WMO-ZACAS-NEXT: bne a3, a1, .LBB14_32870; RV32IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB14_1 Depth=12871; RV32IA-WMO-ZACAS-NEXT: xor a3, a2, a02872; RV32IA-WMO-ZACAS-NEXT: and a3, a3, a52873; RV32IA-WMO-ZACAS-NEXT: xor a3, a2, a32874; RV32IA-WMO-ZACAS-NEXT: sc.w.rl a3, a3, (a4)2875; RV32IA-WMO-ZACAS-NEXT: bnez a3, .LBB14_12876; RV32IA-WMO-ZACAS-NEXT: .LBB14_3:2877; RV32IA-WMO-ZACAS-NEXT: ret2878;2879; RV32IA-TSO-LABEL: cmpxchg_i16_release_acquire:2880; RV32IA-TSO: # %bb.0:2881; RV32IA-TSO-NEXT: lui a3, 162882; RV32IA-TSO-NEXT: andi a4, a0, -42883; RV32IA-TSO-NEXT: andi a0, a0, 32884; RV32IA-TSO-NEXT: addi a3, a3, -12885; RV32IA-TSO-NEXT: slli a0, a0, 32886; RV32IA-TSO-NEXT: sll a5, a3, a02887; RV32IA-TSO-NEXT: and a1, a1, a32888; RV32IA-TSO-NEXT: and a2, a2, a32889; RV32IA-TSO-NEXT: sll a1, a1, a02890; RV32IA-TSO-NEXT: sll a0, a2, a02891; RV32IA-TSO-NEXT: .LBB14_1: # =>This Inner Loop Header: Depth=12892; RV32IA-TSO-NEXT: lr.w a2, (a4)2893; RV32IA-TSO-NEXT: and a3, a2, a52894; RV32IA-TSO-NEXT: bne a3, a1, .LBB14_32895; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB14_1 Depth=12896; RV32IA-TSO-NEXT: xor a3, a2, a02897; RV32IA-TSO-NEXT: and a3, a3, a52898; RV32IA-TSO-NEXT: xor a3, a2, a32899; RV32IA-TSO-NEXT: sc.w a3, a3, (a4)2900; RV32IA-TSO-NEXT: bnez a3, .LBB14_12901; RV32IA-TSO-NEXT: .LBB14_3:2902; RV32IA-TSO-NEXT: ret2903;2904; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i16_release_acquire:2905; RV32IA-TSO-ZACAS: # %bb.0:2906; RV32IA-TSO-ZACAS-NEXT: lui a3, 162907; RV32IA-TSO-ZACAS-NEXT: andi a4, a0, -42908; RV32IA-TSO-ZACAS-NEXT: andi a0, a0, 32909; RV32IA-TSO-ZACAS-NEXT: addi a3, a3, -12910; RV32IA-TSO-ZACAS-NEXT: slli a0, a0, 32911; RV32IA-TSO-ZACAS-NEXT: sll a5, a3, a02912; RV32IA-TSO-ZACAS-NEXT: and a1, a1, a32913; RV32IA-TSO-ZACAS-NEXT: and a2, a2, a32914; RV32IA-TSO-ZACAS-NEXT: sll a1, a1, a02915; RV32IA-TSO-ZACAS-NEXT: sll a0, a2, a02916; RV32IA-TSO-ZACAS-NEXT: .LBB14_1: # =>This Inner Loop Header: Depth=12917; RV32IA-TSO-ZACAS-NEXT: lr.w a2, (a4)2918; RV32IA-TSO-ZACAS-NEXT: and a3, a2, a52919; RV32IA-TSO-ZACAS-NEXT: bne a3, a1, .LBB14_32920; RV32IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB14_1 Depth=12921; RV32IA-TSO-ZACAS-NEXT: xor a3, a2, a02922; RV32IA-TSO-ZACAS-NEXT: and a3, a3, a52923; RV32IA-TSO-ZACAS-NEXT: xor a3, a2, a32924; RV32IA-TSO-ZACAS-NEXT: sc.w a3, a3, (a4)2925; RV32IA-TSO-ZACAS-NEXT: bnez a3, .LBB14_12926; RV32IA-TSO-ZACAS-NEXT: .LBB14_3:2927; RV32IA-TSO-ZACAS-NEXT: ret2928;2929; RV64I-LABEL: cmpxchg_i16_release_acquire:2930; RV64I: # %bb.0:2931; RV64I-NEXT: addi sp, sp, -162932; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill2933; RV64I-NEXT: sh a1, 6(sp)2934; RV64I-NEXT: addi a1, sp, 62935; RV64I-NEXT: li a3, 32936; RV64I-NEXT: li a4, 22937; RV64I-NEXT: call __atomic_compare_exchange_22938; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload2939; RV64I-NEXT: addi sp, sp, 162940; RV64I-NEXT: ret2941;2942; RV64IA-WMO-LABEL: cmpxchg_i16_release_acquire:2943; RV64IA-WMO: # %bb.0:2944; RV64IA-WMO-NEXT: lui a3, 162945; RV64IA-WMO-NEXT: andi a4, a0, -42946; RV64IA-WMO-NEXT: andi a0, a0, 32947; RV64IA-WMO-NEXT: addi a3, a3, -12948; RV64IA-WMO-NEXT: slli a0, a0, 32949; RV64IA-WMO-NEXT: sllw a5, a3, a02950; RV64IA-WMO-NEXT: and a1, a1, a32951; RV64IA-WMO-NEXT: and a2, a2, a32952; RV64IA-WMO-NEXT: sllw a1, a1, a02953; RV64IA-WMO-NEXT: sllw a0, a2, a02954; RV64IA-WMO-NEXT: .LBB14_1: # =>This Inner Loop Header: Depth=12955; RV64IA-WMO-NEXT: lr.w.aq a2, (a4)2956; RV64IA-WMO-NEXT: and a3, a2, a52957; RV64IA-WMO-NEXT: bne a3, a1, .LBB14_32958; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB14_1 Depth=12959; RV64IA-WMO-NEXT: xor a3, a2, a02960; RV64IA-WMO-NEXT: and a3, a3, a52961; RV64IA-WMO-NEXT: xor a3, a2, a32962; RV64IA-WMO-NEXT: sc.w.rl a3, a3, (a4)2963; RV64IA-WMO-NEXT: bnez a3, .LBB14_12964; RV64IA-WMO-NEXT: .LBB14_3:2965; RV64IA-WMO-NEXT: ret2966;2967; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i16_release_acquire:2968; RV64IA-WMO-ZACAS: # %bb.0:2969; RV64IA-WMO-ZACAS-NEXT: lui a3, 162970; RV64IA-WMO-ZACAS-NEXT: andi a4, a0, -42971; RV64IA-WMO-ZACAS-NEXT: andi a0, a0, 32972; RV64IA-WMO-ZACAS-NEXT: addi a3, a3, -12973; RV64IA-WMO-ZACAS-NEXT: slli a0, a0, 32974; RV64IA-WMO-ZACAS-NEXT: sllw a5, a3, a02975; RV64IA-WMO-ZACAS-NEXT: and a1, a1, a32976; RV64IA-WMO-ZACAS-NEXT: and a2, a2, a32977; RV64IA-WMO-ZACAS-NEXT: sllw a1, a1, a02978; RV64IA-WMO-ZACAS-NEXT: sllw a0, a2, a02979; RV64IA-WMO-ZACAS-NEXT: .LBB14_1: # =>This Inner Loop Header: Depth=12980; RV64IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)2981; RV64IA-WMO-ZACAS-NEXT: and a3, a2, a52982; RV64IA-WMO-ZACAS-NEXT: bne a3, a1, .LBB14_32983; RV64IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB14_1 Depth=12984; RV64IA-WMO-ZACAS-NEXT: xor a3, a2, a02985; RV64IA-WMO-ZACAS-NEXT: and a3, a3, a52986; RV64IA-WMO-ZACAS-NEXT: xor a3, a2, a32987; RV64IA-WMO-ZACAS-NEXT: sc.w.rl a3, a3, (a4)2988; RV64IA-WMO-ZACAS-NEXT: bnez a3, .LBB14_12989; RV64IA-WMO-ZACAS-NEXT: .LBB14_3:2990; RV64IA-WMO-ZACAS-NEXT: ret2991;2992; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_release_acquire:2993; RV64IA-WMO-ZABHA: # %bb.0:2994; RV64IA-WMO-ZABHA-NEXT: amocas.h.aqrl a1, a2, (a0)2995; RV64IA-WMO-ZABHA-NEXT: ret2996;2997; RV64IA-TSO-LABEL: cmpxchg_i16_release_acquire:2998; RV64IA-TSO: # %bb.0:2999; RV64IA-TSO-NEXT: lui a3, 163000; RV64IA-TSO-NEXT: andi a4, a0, -43001; RV64IA-TSO-NEXT: andi a0, a0, 33002; RV64IA-TSO-NEXT: addi a3, a3, -13003; RV64IA-TSO-NEXT: slli a0, a0, 33004; RV64IA-TSO-NEXT: sllw a5, a3, a03005; RV64IA-TSO-NEXT: and a1, a1, a33006; RV64IA-TSO-NEXT: and a2, a2, a33007; RV64IA-TSO-NEXT: sllw a1, a1, a03008; RV64IA-TSO-NEXT: sllw a0, a2, a03009; RV64IA-TSO-NEXT: .LBB14_1: # =>This Inner Loop Header: Depth=13010; RV64IA-TSO-NEXT: lr.w a2, (a4)3011; RV64IA-TSO-NEXT: and a3, a2, a53012; RV64IA-TSO-NEXT: bne a3, a1, .LBB14_33013; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB14_1 Depth=13014; RV64IA-TSO-NEXT: xor a3, a2, a03015; RV64IA-TSO-NEXT: and a3, a3, a53016; RV64IA-TSO-NEXT: xor a3, a2, a33017; RV64IA-TSO-NEXT: sc.w a3, a3, (a4)3018; RV64IA-TSO-NEXT: bnez a3, .LBB14_13019; RV64IA-TSO-NEXT: .LBB14_3:3020; RV64IA-TSO-NEXT: ret3021;3022; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i16_release_acquire:3023; RV64IA-TSO-ZACAS: # %bb.0:3024; RV64IA-TSO-ZACAS-NEXT: lui a3, 163025; RV64IA-TSO-ZACAS-NEXT: andi a4, a0, -43026; RV64IA-TSO-ZACAS-NEXT: andi a0, a0, 33027; RV64IA-TSO-ZACAS-NEXT: addi a3, a3, -13028; RV64IA-TSO-ZACAS-NEXT: slli a0, a0, 33029; RV64IA-TSO-ZACAS-NEXT: sllw a5, a3, a03030; RV64IA-TSO-ZACAS-NEXT: and a1, a1, a33031; RV64IA-TSO-ZACAS-NEXT: and a2, a2, a33032; RV64IA-TSO-ZACAS-NEXT: sllw a1, a1, a03033; RV64IA-TSO-ZACAS-NEXT: sllw a0, a2, a03034; RV64IA-TSO-ZACAS-NEXT: .LBB14_1: # =>This Inner Loop Header: Depth=13035; RV64IA-TSO-ZACAS-NEXT: lr.w a2, (a4)3036; RV64IA-TSO-ZACAS-NEXT: and a3, a2, a53037; RV64IA-TSO-ZACAS-NEXT: bne a3, a1, .LBB14_33038; RV64IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB14_1 Depth=13039; RV64IA-TSO-ZACAS-NEXT: xor a3, a2, a03040; RV64IA-TSO-ZACAS-NEXT: and a3, a3, a53041; RV64IA-TSO-ZACAS-NEXT: xor a3, a2, a33042; RV64IA-TSO-ZACAS-NEXT: sc.w a3, a3, (a4)3043; RV64IA-TSO-ZACAS-NEXT: bnez a3, .LBB14_13044; RV64IA-TSO-ZACAS-NEXT: .LBB14_3:3045; RV64IA-TSO-ZACAS-NEXT: ret3046;3047; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_release_acquire:3048; RV64IA-TSO-ZABHA: # %bb.0:3049; RV64IA-TSO-ZABHA-NEXT: amocas.h a1, a2, (a0)3050; RV64IA-TSO-ZABHA-NEXT: ret3051 %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val release acquire3052 ret void3053}3054 3055define void @cmpxchg_i16_acq_rel_monotonic(ptr %ptr, i16 %cmp, i16 %val) nounwind {3056; RV32I-LABEL: cmpxchg_i16_acq_rel_monotonic:3057; RV32I: # %bb.0:3058; RV32I-NEXT: addi sp, sp, -163059; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3060; RV32I-NEXT: sh a1, 10(sp)3061; RV32I-NEXT: addi a1, sp, 103062; RV32I-NEXT: li a3, 43063; RV32I-NEXT: li a4, 03064; RV32I-NEXT: call __atomic_compare_exchange_23065; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3066; RV32I-NEXT: addi sp, sp, 163067; RV32I-NEXT: ret3068;3069; RV32IA-WMO-LABEL: cmpxchg_i16_acq_rel_monotonic:3070; RV32IA-WMO: # %bb.0:3071; RV32IA-WMO-NEXT: lui a3, 163072; RV32IA-WMO-NEXT: andi a4, a0, -43073; RV32IA-WMO-NEXT: andi a0, a0, 33074; RV32IA-WMO-NEXT: addi a3, a3, -13075; RV32IA-WMO-NEXT: slli a0, a0, 33076; RV32IA-WMO-NEXT: sll a5, a3, a03077; RV32IA-WMO-NEXT: and a1, a1, a33078; RV32IA-WMO-NEXT: and a2, a2, a33079; RV32IA-WMO-NEXT: sll a1, a1, a03080; RV32IA-WMO-NEXT: sll a0, a2, a03081; RV32IA-WMO-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=13082; RV32IA-WMO-NEXT: lr.w.aq a2, (a4)3083; RV32IA-WMO-NEXT: and a3, a2, a53084; RV32IA-WMO-NEXT: bne a3, a1, .LBB15_33085; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=13086; RV32IA-WMO-NEXT: xor a3, a2, a03087; RV32IA-WMO-NEXT: and a3, a3, a53088; RV32IA-WMO-NEXT: xor a3, a2, a33089; RV32IA-WMO-NEXT: sc.w.rl a3, a3, (a4)3090; RV32IA-WMO-NEXT: bnez a3, .LBB15_13091; RV32IA-WMO-NEXT: .LBB15_3:3092; RV32IA-WMO-NEXT: ret3093;3094; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i16_acq_rel_monotonic:3095; RV32IA-WMO-ZACAS: # %bb.0:3096; RV32IA-WMO-ZACAS-NEXT: lui a3, 163097; RV32IA-WMO-ZACAS-NEXT: andi a4, a0, -43098; RV32IA-WMO-ZACAS-NEXT: andi a0, a0, 33099; RV32IA-WMO-ZACAS-NEXT: addi a3, a3, -13100; RV32IA-WMO-ZACAS-NEXT: slli a0, a0, 33101; RV32IA-WMO-ZACAS-NEXT: sll a5, a3, a03102; RV32IA-WMO-ZACAS-NEXT: and a1, a1, a33103; RV32IA-WMO-ZACAS-NEXT: and a2, a2, a33104; RV32IA-WMO-ZACAS-NEXT: sll a1, a1, a03105; RV32IA-WMO-ZACAS-NEXT: sll a0, a2, a03106; RV32IA-WMO-ZACAS-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=13107; RV32IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)3108; RV32IA-WMO-ZACAS-NEXT: and a3, a2, a53109; RV32IA-WMO-ZACAS-NEXT: bne a3, a1, .LBB15_33110; RV32IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=13111; RV32IA-WMO-ZACAS-NEXT: xor a3, a2, a03112; RV32IA-WMO-ZACAS-NEXT: and a3, a3, a53113; RV32IA-WMO-ZACAS-NEXT: xor a3, a2, a33114; RV32IA-WMO-ZACAS-NEXT: sc.w.rl a3, a3, (a4)3115; RV32IA-WMO-ZACAS-NEXT: bnez a3, .LBB15_13116; RV32IA-WMO-ZACAS-NEXT: .LBB15_3:3117; RV32IA-WMO-ZACAS-NEXT: ret3118;3119; RV32IA-TSO-LABEL: cmpxchg_i16_acq_rel_monotonic:3120; RV32IA-TSO: # %bb.0:3121; RV32IA-TSO-NEXT: lui a3, 163122; RV32IA-TSO-NEXT: andi a4, a0, -43123; RV32IA-TSO-NEXT: andi a0, a0, 33124; RV32IA-TSO-NEXT: addi a3, a3, -13125; RV32IA-TSO-NEXT: slli a0, a0, 33126; RV32IA-TSO-NEXT: sll a5, a3, a03127; RV32IA-TSO-NEXT: and a1, a1, a33128; RV32IA-TSO-NEXT: and a2, a2, a33129; RV32IA-TSO-NEXT: sll a1, a1, a03130; RV32IA-TSO-NEXT: sll a0, a2, a03131; RV32IA-TSO-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=13132; RV32IA-TSO-NEXT: lr.w a2, (a4)3133; RV32IA-TSO-NEXT: and a3, a2, a53134; RV32IA-TSO-NEXT: bne a3, a1, .LBB15_33135; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=13136; RV32IA-TSO-NEXT: xor a3, a2, a03137; RV32IA-TSO-NEXT: and a3, a3, a53138; RV32IA-TSO-NEXT: xor a3, a2, a33139; RV32IA-TSO-NEXT: sc.w a3, a3, (a4)3140; RV32IA-TSO-NEXT: bnez a3, .LBB15_13141; RV32IA-TSO-NEXT: .LBB15_3:3142; RV32IA-TSO-NEXT: ret3143;3144; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i16_acq_rel_monotonic:3145; RV32IA-TSO-ZACAS: # %bb.0:3146; RV32IA-TSO-ZACAS-NEXT: lui a3, 163147; RV32IA-TSO-ZACAS-NEXT: andi a4, a0, -43148; RV32IA-TSO-ZACAS-NEXT: andi a0, a0, 33149; RV32IA-TSO-ZACAS-NEXT: addi a3, a3, -13150; RV32IA-TSO-ZACAS-NEXT: slli a0, a0, 33151; RV32IA-TSO-ZACAS-NEXT: sll a5, a3, a03152; RV32IA-TSO-ZACAS-NEXT: and a1, a1, a33153; RV32IA-TSO-ZACAS-NEXT: and a2, a2, a33154; RV32IA-TSO-ZACAS-NEXT: sll a1, a1, a03155; RV32IA-TSO-ZACAS-NEXT: sll a0, a2, a03156; RV32IA-TSO-ZACAS-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=13157; RV32IA-TSO-ZACAS-NEXT: lr.w a2, (a4)3158; RV32IA-TSO-ZACAS-NEXT: and a3, a2, a53159; RV32IA-TSO-ZACAS-NEXT: bne a3, a1, .LBB15_33160; RV32IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=13161; RV32IA-TSO-ZACAS-NEXT: xor a3, a2, a03162; RV32IA-TSO-ZACAS-NEXT: and a3, a3, a53163; RV32IA-TSO-ZACAS-NEXT: xor a3, a2, a33164; RV32IA-TSO-ZACAS-NEXT: sc.w a3, a3, (a4)3165; RV32IA-TSO-ZACAS-NEXT: bnez a3, .LBB15_13166; RV32IA-TSO-ZACAS-NEXT: .LBB15_3:3167; RV32IA-TSO-ZACAS-NEXT: ret3168;3169; RV64I-LABEL: cmpxchg_i16_acq_rel_monotonic:3170; RV64I: # %bb.0:3171; RV64I-NEXT: addi sp, sp, -163172; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3173; RV64I-NEXT: sh a1, 6(sp)3174; RV64I-NEXT: addi a1, sp, 63175; RV64I-NEXT: li a3, 43176; RV64I-NEXT: li a4, 03177; RV64I-NEXT: call __atomic_compare_exchange_23178; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3179; RV64I-NEXT: addi sp, sp, 163180; RV64I-NEXT: ret3181;3182; RV64IA-WMO-LABEL: cmpxchg_i16_acq_rel_monotonic:3183; RV64IA-WMO: # %bb.0:3184; RV64IA-WMO-NEXT: lui a3, 163185; RV64IA-WMO-NEXT: andi a4, a0, -43186; RV64IA-WMO-NEXT: andi a0, a0, 33187; RV64IA-WMO-NEXT: addi a3, a3, -13188; RV64IA-WMO-NEXT: slli a0, a0, 33189; RV64IA-WMO-NEXT: sllw a5, a3, a03190; RV64IA-WMO-NEXT: and a1, a1, a33191; RV64IA-WMO-NEXT: and a2, a2, a33192; RV64IA-WMO-NEXT: sllw a1, a1, a03193; RV64IA-WMO-NEXT: sllw a0, a2, a03194; RV64IA-WMO-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=13195; RV64IA-WMO-NEXT: lr.w.aq a2, (a4)3196; RV64IA-WMO-NEXT: and a3, a2, a53197; RV64IA-WMO-NEXT: bne a3, a1, .LBB15_33198; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=13199; RV64IA-WMO-NEXT: xor a3, a2, a03200; RV64IA-WMO-NEXT: and a3, a3, a53201; RV64IA-WMO-NEXT: xor a3, a2, a33202; RV64IA-WMO-NEXT: sc.w.rl a3, a3, (a4)3203; RV64IA-WMO-NEXT: bnez a3, .LBB15_13204; RV64IA-WMO-NEXT: .LBB15_3:3205; RV64IA-WMO-NEXT: ret3206;3207; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i16_acq_rel_monotonic:3208; RV64IA-WMO-ZACAS: # %bb.0:3209; RV64IA-WMO-ZACAS-NEXT: lui a3, 163210; RV64IA-WMO-ZACAS-NEXT: andi a4, a0, -43211; RV64IA-WMO-ZACAS-NEXT: andi a0, a0, 33212; RV64IA-WMO-ZACAS-NEXT: addi a3, a3, -13213; RV64IA-WMO-ZACAS-NEXT: slli a0, a0, 33214; RV64IA-WMO-ZACAS-NEXT: sllw a5, a3, a03215; RV64IA-WMO-ZACAS-NEXT: and a1, a1, a33216; RV64IA-WMO-ZACAS-NEXT: and a2, a2, a33217; RV64IA-WMO-ZACAS-NEXT: sllw a1, a1, a03218; RV64IA-WMO-ZACAS-NEXT: sllw a0, a2, a03219; RV64IA-WMO-ZACAS-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=13220; RV64IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)3221; RV64IA-WMO-ZACAS-NEXT: and a3, a2, a53222; RV64IA-WMO-ZACAS-NEXT: bne a3, a1, .LBB15_33223; RV64IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=13224; RV64IA-WMO-ZACAS-NEXT: xor a3, a2, a03225; RV64IA-WMO-ZACAS-NEXT: and a3, a3, a53226; RV64IA-WMO-ZACAS-NEXT: xor a3, a2, a33227; RV64IA-WMO-ZACAS-NEXT: sc.w.rl a3, a3, (a4)3228; RV64IA-WMO-ZACAS-NEXT: bnez a3, .LBB15_13229; RV64IA-WMO-ZACAS-NEXT: .LBB15_3:3230; RV64IA-WMO-ZACAS-NEXT: ret3231;3232; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_acq_rel_monotonic:3233; RV64IA-WMO-ZABHA: # %bb.0:3234; RV64IA-WMO-ZABHA-NEXT: amocas.h.aqrl a1, a2, (a0)3235; RV64IA-WMO-ZABHA-NEXT: ret3236;3237; RV64IA-TSO-LABEL: cmpxchg_i16_acq_rel_monotonic:3238; RV64IA-TSO: # %bb.0:3239; RV64IA-TSO-NEXT: lui a3, 163240; RV64IA-TSO-NEXT: andi a4, a0, -43241; RV64IA-TSO-NEXT: andi a0, a0, 33242; RV64IA-TSO-NEXT: addi a3, a3, -13243; RV64IA-TSO-NEXT: slli a0, a0, 33244; RV64IA-TSO-NEXT: sllw a5, a3, a03245; RV64IA-TSO-NEXT: and a1, a1, a33246; RV64IA-TSO-NEXT: and a2, a2, a33247; RV64IA-TSO-NEXT: sllw a1, a1, a03248; RV64IA-TSO-NEXT: sllw a0, a2, a03249; RV64IA-TSO-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=13250; RV64IA-TSO-NEXT: lr.w a2, (a4)3251; RV64IA-TSO-NEXT: and a3, a2, a53252; RV64IA-TSO-NEXT: bne a3, a1, .LBB15_33253; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=13254; RV64IA-TSO-NEXT: xor a3, a2, a03255; RV64IA-TSO-NEXT: and a3, a3, a53256; RV64IA-TSO-NEXT: xor a3, a2, a33257; RV64IA-TSO-NEXT: sc.w a3, a3, (a4)3258; RV64IA-TSO-NEXT: bnez a3, .LBB15_13259; RV64IA-TSO-NEXT: .LBB15_3:3260; RV64IA-TSO-NEXT: ret3261;3262; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i16_acq_rel_monotonic:3263; RV64IA-TSO-ZACAS: # %bb.0:3264; RV64IA-TSO-ZACAS-NEXT: lui a3, 163265; RV64IA-TSO-ZACAS-NEXT: andi a4, a0, -43266; RV64IA-TSO-ZACAS-NEXT: andi a0, a0, 33267; RV64IA-TSO-ZACAS-NEXT: addi a3, a3, -13268; RV64IA-TSO-ZACAS-NEXT: slli a0, a0, 33269; RV64IA-TSO-ZACAS-NEXT: sllw a5, a3, a03270; RV64IA-TSO-ZACAS-NEXT: and a1, a1, a33271; RV64IA-TSO-ZACAS-NEXT: and a2, a2, a33272; RV64IA-TSO-ZACAS-NEXT: sllw a1, a1, a03273; RV64IA-TSO-ZACAS-NEXT: sllw a0, a2, a03274; RV64IA-TSO-ZACAS-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=13275; RV64IA-TSO-ZACAS-NEXT: lr.w a2, (a4)3276; RV64IA-TSO-ZACAS-NEXT: and a3, a2, a53277; RV64IA-TSO-ZACAS-NEXT: bne a3, a1, .LBB15_33278; RV64IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=13279; RV64IA-TSO-ZACAS-NEXT: xor a3, a2, a03280; RV64IA-TSO-ZACAS-NEXT: and a3, a3, a53281; RV64IA-TSO-ZACAS-NEXT: xor a3, a2, a33282; RV64IA-TSO-ZACAS-NEXT: sc.w a3, a3, (a4)3283; RV64IA-TSO-ZACAS-NEXT: bnez a3, .LBB15_13284; RV64IA-TSO-ZACAS-NEXT: .LBB15_3:3285; RV64IA-TSO-ZACAS-NEXT: ret3286;3287; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_acq_rel_monotonic:3288; RV64IA-TSO-ZABHA: # %bb.0:3289; RV64IA-TSO-ZABHA-NEXT: amocas.h a1, a2, (a0)3290; RV64IA-TSO-ZABHA-NEXT: ret3291 %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val acq_rel monotonic3292 ret void3293}3294 3295define void @cmpxchg_i16_acq_rel_acquire(ptr %ptr, i16 %cmp, i16 %val) nounwind {3296; RV32I-LABEL: cmpxchg_i16_acq_rel_acquire:3297; RV32I: # %bb.0:3298; RV32I-NEXT: addi sp, sp, -163299; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3300; RV32I-NEXT: sh a1, 10(sp)3301; RV32I-NEXT: addi a1, sp, 103302; RV32I-NEXT: li a3, 43303; RV32I-NEXT: li a4, 23304; RV32I-NEXT: call __atomic_compare_exchange_23305; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3306; RV32I-NEXT: addi sp, sp, 163307; RV32I-NEXT: ret3308;3309; RV32IA-WMO-LABEL: cmpxchg_i16_acq_rel_acquire:3310; RV32IA-WMO: # %bb.0:3311; RV32IA-WMO-NEXT: lui a3, 163312; RV32IA-WMO-NEXT: andi a4, a0, -43313; RV32IA-WMO-NEXT: andi a0, a0, 33314; RV32IA-WMO-NEXT: addi a3, a3, -13315; RV32IA-WMO-NEXT: slli a0, a0, 33316; RV32IA-WMO-NEXT: sll a5, a3, a03317; RV32IA-WMO-NEXT: and a1, a1, a33318; RV32IA-WMO-NEXT: and a2, a2, a33319; RV32IA-WMO-NEXT: sll a1, a1, a03320; RV32IA-WMO-NEXT: sll a0, a2, a03321; RV32IA-WMO-NEXT: .LBB16_1: # =>This Inner Loop Header: Depth=13322; RV32IA-WMO-NEXT: lr.w.aq a2, (a4)3323; RV32IA-WMO-NEXT: and a3, a2, a53324; RV32IA-WMO-NEXT: bne a3, a1, .LBB16_33325; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB16_1 Depth=13326; RV32IA-WMO-NEXT: xor a3, a2, a03327; RV32IA-WMO-NEXT: and a3, a3, a53328; RV32IA-WMO-NEXT: xor a3, a2, a33329; RV32IA-WMO-NEXT: sc.w.rl a3, a3, (a4)3330; RV32IA-WMO-NEXT: bnez a3, .LBB16_13331; RV32IA-WMO-NEXT: .LBB16_3:3332; RV32IA-WMO-NEXT: ret3333;3334; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i16_acq_rel_acquire:3335; RV32IA-WMO-ZACAS: # %bb.0:3336; RV32IA-WMO-ZACAS-NEXT: lui a3, 163337; RV32IA-WMO-ZACAS-NEXT: andi a4, a0, -43338; RV32IA-WMO-ZACAS-NEXT: andi a0, a0, 33339; RV32IA-WMO-ZACAS-NEXT: addi a3, a3, -13340; RV32IA-WMO-ZACAS-NEXT: slli a0, a0, 33341; RV32IA-WMO-ZACAS-NEXT: sll a5, a3, a03342; RV32IA-WMO-ZACAS-NEXT: and a1, a1, a33343; RV32IA-WMO-ZACAS-NEXT: and a2, a2, a33344; RV32IA-WMO-ZACAS-NEXT: sll a1, a1, a03345; RV32IA-WMO-ZACAS-NEXT: sll a0, a2, a03346; RV32IA-WMO-ZACAS-NEXT: .LBB16_1: # =>This Inner Loop Header: Depth=13347; RV32IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)3348; RV32IA-WMO-ZACAS-NEXT: and a3, a2, a53349; RV32IA-WMO-ZACAS-NEXT: bne a3, a1, .LBB16_33350; RV32IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB16_1 Depth=13351; RV32IA-WMO-ZACAS-NEXT: xor a3, a2, a03352; RV32IA-WMO-ZACAS-NEXT: and a3, a3, a53353; RV32IA-WMO-ZACAS-NEXT: xor a3, a2, a33354; RV32IA-WMO-ZACAS-NEXT: sc.w.rl a3, a3, (a4)3355; RV32IA-WMO-ZACAS-NEXT: bnez a3, .LBB16_13356; RV32IA-WMO-ZACAS-NEXT: .LBB16_3:3357; RV32IA-WMO-ZACAS-NEXT: ret3358;3359; RV32IA-TSO-LABEL: cmpxchg_i16_acq_rel_acquire:3360; RV32IA-TSO: # %bb.0:3361; RV32IA-TSO-NEXT: lui a3, 163362; RV32IA-TSO-NEXT: andi a4, a0, -43363; RV32IA-TSO-NEXT: andi a0, a0, 33364; RV32IA-TSO-NEXT: addi a3, a3, -13365; RV32IA-TSO-NEXT: slli a0, a0, 33366; RV32IA-TSO-NEXT: sll a5, a3, a03367; RV32IA-TSO-NEXT: and a1, a1, a33368; RV32IA-TSO-NEXT: and a2, a2, a33369; RV32IA-TSO-NEXT: sll a1, a1, a03370; RV32IA-TSO-NEXT: sll a0, a2, a03371; RV32IA-TSO-NEXT: .LBB16_1: # =>This Inner Loop Header: Depth=13372; RV32IA-TSO-NEXT: lr.w a2, (a4)3373; RV32IA-TSO-NEXT: and a3, a2, a53374; RV32IA-TSO-NEXT: bne a3, a1, .LBB16_33375; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB16_1 Depth=13376; RV32IA-TSO-NEXT: xor a3, a2, a03377; RV32IA-TSO-NEXT: and a3, a3, a53378; RV32IA-TSO-NEXT: xor a3, a2, a33379; RV32IA-TSO-NEXT: sc.w a3, a3, (a4)3380; RV32IA-TSO-NEXT: bnez a3, .LBB16_13381; RV32IA-TSO-NEXT: .LBB16_3:3382; RV32IA-TSO-NEXT: ret3383;3384; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i16_acq_rel_acquire:3385; RV32IA-TSO-ZACAS: # %bb.0:3386; RV32IA-TSO-ZACAS-NEXT: lui a3, 163387; RV32IA-TSO-ZACAS-NEXT: andi a4, a0, -43388; RV32IA-TSO-ZACAS-NEXT: andi a0, a0, 33389; RV32IA-TSO-ZACAS-NEXT: addi a3, a3, -13390; RV32IA-TSO-ZACAS-NEXT: slli a0, a0, 33391; RV32IA-TSO-ZACAS-NEXT: sll a5, a3, a03392; RV32IA-TSO-ZACAS-NEXT: and a1, a1, a33393; RV32IA-TSO-ZACAS-NEXT: and a2, a2, a33394; RV32IA-TSO-ZACAS-NEXT: sll a1, a1, a03395; RV32IA-TSO-ZACAS-NEXT: sll a0, a2, a03396; RV32IA-TSO-ZACAS-NEXT: .LBB16_1: # =>This Inner Loop Header: Depth=13397; RV32IA-TSO-ZACAS-NEXT: lr.w a2, (a4)3398; RV32IA-TSO-ZACAS-NEXT: and a3, a2, a53399; RV32IA-TSO-ZACAS-NEXT: bne a3, a1, .LBB16_33400; RV32IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB16_1 Depth=13401; RV32IA-TSO-ZACAS-NEXT: xor a3, a2, a03402; RV32IA-TSO-ZACAS-NEXT: and a3, a3, a53403; RV32IA-TSO-ZACAS-NEXT: xor a3, a2, a33404; RV32IA-TSO-ZACAS-NEXT: sc.w a3, a3, (a4)3405; RV32IA-TSO-ZACAS-NEXT: bnez a3, .LBB16_13406; RV32IA-TSO-ZACAS-NEXT: .LBB16_3:3407; RV32IA-TSO-ZACAS-NEXT: ret3408;3409; RV64I-LABEL: cmpxchg_i16_acq_rel_acquire:3410; RV64I: # %bb.0:3411; RV64I-NEXT: addi sp, sp, -163412; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3413; RV64I-NEXT: sh a1, 6(sp)3414; RV64I-NEXT: addi a1, sp, 63415; RV64I-NEXT: li a3, 43416; RV64I-NEXT: li a4, 23417; RV64I-NEXT: call __atomic_compare_exchange_23418; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3419; RV64I-NEXT: addi sp, sp, 163420; RV64I-NEXT: ret3421;3422; RV64IA-WMO-LABEL: cmpxchg_i16_acq_rel_acquire:3423; RV64IA-WMO: # %bb.0:3424; RV64IA-WMO-NEXT: lui a3, 163425; RV64IA-WMO-NEXT: andi a4, a0, -43426; RV64IA-WMO-NEXT: andi a0, a0, 33427; RV64IA-WMO-NEXT: addi a3, a3, -13428; RV64IA-WMO-NEXT: slli a0, a0, 33429; RV64IA-WMO-NEXT: sllw a5, a3, a03430; RV64IA-WMO-NEXT: and a1, a1, a33431; RV64IA-WMO-NEXT: and a2, a2, a33432; RV64IA-WMO-NEXT: sllw a1, a1, a03433; RV64IA-WMO-NEXT: sllw a0, a2, a03434; RV64IA-WMO-NEXT: .LBB16_1: # =>This Inner Loop Header: Depth=13435; RV64IA-WMO-NEXT: lr.w.aq a2, (a4)3436; RV64IA-WMO-NEXT: and a3, a2, a53437; RV64IA-WMO-NEXT: bne a3, a1, .LBB16_33438; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB16_1 Depth=13439; RV64IA-WMO-NEXT: xor a3, a2, a03440; RV64IA-WMO-NEXT: and a3, a3, a53441; RV64IA-WMO-NEXT: xor a3, a2, a33442; RV64IA-WMO-NEXT: sc.w.rl a3, a3, (a4)3443; RV64IA-WMO-NEXT: bnez a3, .LBB16_13444; RV64IA-WMO-NEXT: .LBB16_3:3445; RV64IA-WMO-NEXT: ret3446;3447; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i16_acq_rel_acquire:3448; RV64IA-WMO-ZACAS: # %bb.0:3449; RV64IA-WMO-ZACAS-NEXT: lui a3, 163450; RV64IA-WMO-ZACAS-NEXT: andi a4, a0, -43451; RV64IA-WMO-ZACAS-NEXT: andi a0, a0, 33452; RV64IA-WMO-ZACAS-NEXT: addi a3, a3, -13453; RV64IA-WMO-ZACAS-NEXT: slli a0, a0, 33454; RV64IA-WMO-ZACAS-NEXT: sllw a5, a3, a03455; RV64IA-WMO-ZACAS-NEXT: and a1, a1, a33456; RV64IA-WMO-ZACAS-NEXT: and a2, a2, a33457; RV64IA-WMO-ZACAS-NEXT: sllw a1, a1, a03458; RV64IA-WMO-ZACAS-NEXT: sllw a0, a2, a03459; RV64IA-WMO-ZACAS-NEXT: .LBB16_1: # =>This Inner Loop Header: Depth=13460; RV64IA-WMO-ZACAS-NEXT: lr.w.aq a2, (a4)3461; RV64IA-WMO-ZACAS-NEXT: and a3, a2, a53462; RV64IA-WMO-ZACAS-NEXT: bne a3, a1, .LBB16_33463; RV64IA-WMO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB16_1 Depth=13464; RV64IA-WMO-ZACAS-NEXT: xor a3, a2, a03465; RV64IA-WMO-ZACAS-NEXT: and a3, a3, a53466; RV64IA-WMO-ZACAS-NEXT: xor a3, a2, a33467; RV64IA-WMO-ZACAS-NEXT: sc.w.rl a3, a3, (a4)3468; RV64IA-WMO-ZACAS-NEXT: bnez a3, .LBB16_13469; RV64IA-WMO-ZACAS-NEXT: .LBB16_3:3470; RV64IA-WMO-ZACAS-NEXT: ret3471;3472; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_acq_rel_acquire:3473; RV64IA-WMO-ZABHA: # %bb.0:3474; RV64IA-WMO-ZABHA-NEXT: amocas.h.aqrl a1, a2, (a0)3475; RV64IA-WMO-ZABHA-NEXT: ret3476;3477; RV64IA-TSO-LABEL: cmpxchg_i16_acq_rel_acquire:3478; RV64IA-TSO: # %bb.0:3479; RV64IA-TSO-NEXT: lui a3, 163480; RV64IA-TSO-NEXT: andi a4, a0, -43481; RV64IA-TSO-NEXT: andi a0, a0, 33482; RV64IA-TSO-NEXT: addi a3, a3, -13483; RV64IA-TSO-NEXT: slli a0, a0, 33484; RV64IA-TSO-NEXT: sllw a5, a3, a03485; RV64IA-TSO-NEXT: and a1, a1, a33486; RV64IA-TSO-NEXT: and a2, a2, a33487; RV64IA-TSO-NEXT: sllw a1, a1, a03488; RV64IA-TSO-NEXT: sllw a0, a2, a03489; RV64IA-TSO-NEXT: .LBB16_1: # =>This Inner Loop Header: Depth=13490; RV64IA-TSO-NEXT: lr.w a2, (a4)3491; RV64IA-TSO-NEXT: and a3, a2, a53492; RV64IA-TSO-NEXT: bne a3, a1, .LBB16_33493; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB16_1 Depth=13494; RV64IA-TSO-NEXT: xor a3, a2, a03495; RV64IA-TSO-NEXT: and a3, a3, a53496; RV64IA-TSO-NEXT: xor a3, a2, a33497; RV64IA-TSO-NEXT: sc.w a3, a3, (a4)3498; RV64IA-TSO-NEXT: bnez a3, .LBB16_13499; RV64IA-TSO-NEXT: .LBB16_3:3500; RV64IA-TSO-NEXT: ret3501;3502; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i16_acq_rel_acquire:3503; RV64IA-TSO-ZACAS: # %bb.0:3504; RV64IA-TSO-ZACAS-NEXT: lui a3, 163505; RV64IA-TSO-ZACAS-NEXT: andi a4, a0, -43506; RV64IA-TSO-ZACAS-NEXT: andi a0, a0, 33507; RV64IA-TSO-ZACAS-NEXT: addi a3, a3, -13508; RV64IA-TSO-ZACAS-NEXT: slli a0, a0, 33509; RV64IA-TSO-ZACAS-NEXT: sllw a5, a3, a03510; RV64IA-TSO-ZACAS-NEXT: and a1, a1, a33511; RV64IA-TSO-ZACAS-NEXT: and a2, a2, a33512; RV64IA-TSO-ZACAS-NEXT: sllw a1, a1, a03513; RV64IA-TSO-ZACAS-NEXT: sllw a0, a2, a03514; RV64IA-TSO-ZACAS-NEXT: .LBB16_1: # =>This Inner Loop Header: Depth=13515; RV64IA-TSO-ZACAS-NEXT: lr.w a2, (a4)3516; RV64IA-TSO-ZACAS-NEXT: and a3, a2, a53517; RV64IA-TSO-ZACAS-NEXT: bne a3, a1, .LBB16_33518; RV64IA-TSO-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB16_1 Depth=13519; RV64IA-TSO-ZACAS-NEXT: xor a3, a2, a03520; RV64IA-TSO-ZACAS-NEXT: and a3, a3, a53521; RV64IA-TSO-ZACAS-NEXT: xor a3, a2, a33522; RV64IA-TSO-ZACAS-NEXT: sc.w a3, a3, (a4)3523; RV64IA-TSO-ZACAS-NEXT: bnez a3, .LBB16_13524; RV64IA-TSO-ZACAS-NEXT: .LBB16_3:3525; RV64IA-TSO-ZACAS-NEXT: ret3526;3527; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_acq_rel_acquire:3528; RV64IA-TSO-ZABHA: # %bb.0:3529; RV64IA-TSO-ZABHA-NEXT: amocas.h a1, a2, (a0)3530; RV64IA-TSO-ZABHA-NEXT: ret3531 %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val acq_rel acquire3532 ret void3533}3534 3535define void @cmpxchg_i16_seq_cst_monotonic(ptr %ptr, i16 %cmp, i16 %val) nounwind {3536; RV32I-LABEL: cmpxchg_i16_seq_cst_monotonic:3537; RV32I: # %bb.0:3538; RV32I-NEXT: addi sp, sp, -163539; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3540; RV32I-NEXT: sh a1, 10(sp)3541; RV32I-NEXT: addi a1, sp, 103542; RV32I-NEXT: li a3, 53543; RV32I-NEXT: li a4, 03544; RV32I-NEXT: call __atomic_compare_exchange_23545; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3546; RV32I-NEXT: addi sp, sp, 163547; RV32I-NEXT: ret3548;3549; RV32IA-LABEL: cmpxchg_i16_seq_cst_monotonic:3550; RV32IA: # %bb.0:3551; RV32IA-NEXT: lui a3, 163552; RV32IA-NEXT: andi a4, a0, -43553; RV32IA-NEXT: andi a0, a0, 33554; RV32IA-NEXT: addi a3, a3, -13555; RV32IA-NEXT: slli a0, a0, 33556; RV32IA-NEXT: sll a5, a3, a03557; RV32IA-NEXT: and a1, a1, a33558; RV32IA-NEXT: and a2, a2, a33559; RV32IA-NEXT: sll a1, a1, a03560; RV32IA-NEXT: sll a0, a2, a03561; RV32IA-NEXT: .LBB17_1: # =>This Inner Loop Header: Depth=13562; RV32IA-NEXT: lr.w.aqrl a2, (a4)3563; RV32IA-NEXT: and a3, a2, a53564; RV32IA-NEXT: bne a3, a1, .LBB17_33565; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB17_1 Depth=13566; RV32IA-NEXT: xor a3, a2, a03567; RV32IA-NEXT: and a3, a3, a53568; RV32IA-NEXT: xor a3, a2, a33569; RV32IA-NEXT: sc.w.rl a3, a3, (a4)3570; RV32IA-NEXT: bnez a3, .LBB17_13571; RV32IA-NEXT: .LBB17_3:3572; RV32IA-NEXT: ret3573;3574; RV64I-LABEL: cmpxchg_i16_seq_cst_monotonic:3575; RV64I: # %bb.0:3576; RV64I-NEXT: addi sp, sp, -163577; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3578; RV64I-NEXT: sh a1, 6(sp)3579; RV64I-NEXT: addi a1, sp, 63580; RV64I-NEXT: li a3, 53581; RV64I-NEXT: li a4, 03582; RV64I-NEXT: call __atomic_compare_exchange_23583; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3584; RV64I-NEXT: addi sp, sp, 163585; RV64I-NEXT: ret3586;3587; RV64IA-WMO-LABEL: cmpxchg_i16_seq_cst_monotonic:3588; RV64IA-WMO: # %bb.0:3589; RV64IA-WMO-NEXT: lui a3, 163590; RV64IA-WMO-NEXT: andi a4, a0, -43591; RV64IA-WMO-NEXT: andi a0, a0, 33592; RV64IA-WMO-NEXT: addi a3, a3, -13593; RV64IA-WMO-NEXT: slli a0, a0, 33594; RV64IA-WMO-NEXT: sllw a5, a3, a03595; RV64IA-WMO-NEXT: and a1, a1, a33596; RV64IA-WMO-NEXT: and a2, a2, a33597; RV64IA-WMO-NEXT: sllw a1, a1, a03598; RV64IA-WMO-NEXT: sllw a0, a2, a03599; RV64IA-WMO-NEXT: .LBB17_1: # =>This Inner Loop Header: Depth=13600; RV64IA-WMO-NEXT: lr.w.aqrl a2, (a4)3601; RV64IA-WMO-NEXT: and a3, a2, a53602; RV64IA-WMO-NEXT: bne a3, a1, .LBB17_33603; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB17_1 Depth=13604; RV64IA-WMO-NEXT: xor a3, a2, a03605; RV64IA-WMO-NEXT: and a3, a3, a53606; RV64IA-WMO-NEXT: xor a3, a2, a33607; RV64IA-WMO-NEXT: sc.w.rl a3, a3, (a4)3608; RV64IA-WMO-NEXT: bnez a3, .LBB17_13609; RV64IA-WMO-NEXT: .LBB17_3:3610; RV64IA-WMO-NEXT: ret3611;3612; RV64IA-ZACAS-LABEL: cmpxchg_i16_seq_cst_monotonic:3613; RV64IA-ZACAS: # %bb.0:3614; RV64IA-ZACAS-NEXT: lui a3, 163615; RV64IA-ZACAS-NEXT: andi a4, a0, -43616; RV64IA-ZACAS-NEXT: andi a0, a0, 33617; RV64IA-ZACAS-NEXT: addi a3, a3, -13618; RV64IA-ZACAS-NEXT: slli a0, a0, 33619; RV64IA-ZACAS-NEXT: sllw a5, a3, a03620; RV64IA-ZACAS-NEXT: and a1, a1, a33621; RV64IA-ZACAS-NEXT: and a2, a2, a33622; RV64IA-ZACAS-NEXT: sllw a1, a1, a03623; RV64IA-ZACAS-NEXT: sllw a0, a2, a03624; RV64IA-ZACAS-NEXT: .LBB17_1: # =>This Inner Loop Header: Depth=13625; RV64IA-ZACAS-NEXT: lr.w.aqrl a2, (a4)3626; RV64IA-ZACAS-NEXT: and a3, a2, a53627; RV64IA-ZACAS-NEXT: bne a3, a1, .LBB17_33628; RV64IA-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB17_1 Depth=13629; RV64IA-ZACAS-NEXT: xor a3, a2, a03630; RV64IA-ZACAS-NEXT: and a3, a3, a53631; RV64IA-ZACAS-NEXT: xor a3, a2, a33632; RV64IA-ZACAS-NEXT: sc.w.rl a3, a3, (a4)3633; RV64IA-ZACAS-NEXT: bnez a3, .LBB17_13634; RV64IA-ZACAS-NEXT: .LBB17_3:3635; RV64IA-ZACAS-NEXT: ret3636;3637; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_seq_cst_monotonic:3638; RV64IA-WMO-ZABHA: # %bb.0:3639; RV64IA-WMO-ZABHA-NEXT: amocas.h.aqrl a1, a2, (a0)3640; RV64IA-WMO-ZABHA-NEXT: ret3641;3642; RV64IA-TSO-LABEL: cmpxchg_i16_seq_cst_monotonic:3643; RV64IA-TSO: # %bb.0:3644; RV64IA-TSO-NEXT: lui a3, 163645; RV64IA-TSO-NEXT: andi a4, a0, -43646; RV64IA-TSO-NEXT: andi a0, a0, 33647; RV64IA-TSO-NEXT: addi a3, a3, -13648; RV64IA-TSO-NEXT: slli a0, a0, 33649; RV64IA-TSO-NEXT: sllw a5, a3, a03650; RV64IA-TSO-NEXT: and a1, a1, a33651; RV64IA-TSO-NEXT: and a2, a2, a33652; RV64IA-TSO-NEXT: sllw a1, a1, a03653; RV64IA-TSO-NEXT: sllw a0, a2, a03654; RV64IA-TSO-NEXT: .LBB17_1: # =>This Inner Loop Header: Depth=13655; RV64IA-TSO-NEXT: lr.w.aqrl a2, (a4)3656; RV64IA-TSO-NEXT: and a3, a2, a53657; RV64IA-TSO-NEXT: bne a3, a1, .LBB17_33658; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB17_1 Depth=13659; RV64IA-TSO-NEXT: xor a3, a2, a03660; RV64IA-TSO-NEXT: and a3, a3, a53661; RV64IA-TSO-NEXT: xor a3, a2, a33662; RV64IA-TSO-NEXT: sc.w.rl a3, a3, (a4)3663; RV64IA-TSO-NEXT: bnez a3, .LBB17_13664; RV64IA-TSO-NEXT: .LBB17_3:3665; RV64IA-TSO-NEXT: ret3666;3667; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_seq_cst_monotonic:3668; RV64IA-TSO-ZABHA: # %bb.0:3669; RV64IA-TSO-ZABHA-NEXT: amocas.h a1, a2, (a0)3670; RV64IA-TSO-ZABHA-NEXT: ret3671 %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val seq_cst monotonic3672 ret void3673}3674 3675define void @cmpxchg_i16_seq_cst_acquire(ptr %ptr, i16 %cmp, i16 %val) nounwind {3676; RV32I-LABEL: cmpxchg_i16_seq_cst_acquire:3677; RV32I: # %bb.0:3678; RV32I-NEXT: addi sp, sp, -163679; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3680; RV32I-NEXT: sh a1, 10(sp)3681; RV32I-NEXT: addi a1, sp, 103682; RV32I-NEXT: li a3, 53683; RV32I-NEXT: li a4, 23684; RV32I-NEXT: call __atomic_compare_exchange_23685; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3686; RV32I-NEXT: addi sp, sp, 163687; RV32I-NEXT: ret3688;3689; RV32IA-LABEL: cmpxchg_i16_seq_cst_acquire:3690; RV32IA: # %bb.0:3691; RV32IA-NEXT: lui a3, 163692; RV32IA-NEXT: andi a4, a0, -43693; RV32IA-NEXT: andi a0, a0, 33694; RV32IA-NEXT: addi a3, a3, -13695; RV32IA-NEXT: slli a0, a0, 33696; RV32IA-NEXT: sll a5, a3, a03697; RV32IA-NEXT: and a1, a1, a33698; RV32IA-NEXT: and a2, a2, a33699; RV32IA-NEXT: sll a1, a1, a03700; RV32IA-NEXT: sll a0, a2, a03701; RV32IA-NEXT: .LBB18_1: # =>This Inner Loop Header: Depth=13702; RV32IA-NEXT: lr.w.aqrl a2, (a4)3703; RV32IA-NEXT: and a3, a2, a53704; RV32IA-NEXT: bne a3, a1, .LBB18_33705; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB18_1 Depth=13706; RV32IA-NEXT: xor a3, a2, a03707; RV32IA-NEXT: and a3, a3, a53708; RV32IA-NEXT: xor a3, a2, a33709; RV32IA-NEXT: sc.w.rl a3, a3, (a4)3710; RV32IA-NEXT: bnez a3, .LBB18_13711; RV32IA-NEXT: .LBB18_3:3712; RV32IA-NEXT: ret3713;3714; RV64I-LABEL: cmpxchg_i16_seq_cst_acquire:3715; RV64I: # %bb.0:3716; RV64I-NEXT: addi sp, sp, -163717; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3718; RV64I-NEXT: sh a1, 6(sp)3719; RV64I-NEXT: addi a1, sp, 63720; RV64I-NEXT: li a3, 53721; RV64I-NEXT: li a4, 23722; RV64I-NEXT: call __atomic_compare_exchange_23723; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3724; RV64I-NEXT: addi sp, sp, 163725; RV64I-NEXT: ret3726;3727; RV64IA-WMO-LABEL: cmpxchg_i16_seq_cst_acquire:3728; RV64IA-WMO: # %bb.0:3729; RV64IA-WMO-NEXT: lui a3, 163730; RV64IA-WMO-NEXT: andi a4, a0, -43731; RV64IA-WMO-NEXT: andi a0, a0, 33732; RV64IA-WMO-NEXT: addi a3, a3, -13733; RV64IA-WMO-NEXT: slli a0, a0, 33734; RV64IA-WMO-NEXT: sllw a5, a3, a03735; RV64IA-WMO-NEXT: and a1, a1, a33736; RV64IA-WMO-NEXT: and a2, a2, a33737; RV64IA-WMO-NEXT: sllw a1, a1, a03738; RV64IA-WMO-NEXT: sllw a0, a2, a03739; RV64IA-WMO-NEXT: .LBB18_1: # =>This Inner Loop Header: Depth=13740; RV64IA-WMO-NEXT: lr.w.aqrl a2, (a4)3741; RV64IA-WMO-NEXT: and a3, a2, a53742; RV64IA-WMO-NEXT: bne a3, a1, .LBB18_33743; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB18_1 Depth=13744; RV64IA-WMO-NEXT: xor a3, a2, a03745; RV64IA-WMO-NEXT: and a3, a3, a53746; RV64IA-WMO-NEXT: xor a3, a2, a33747; RV64IA-WMO-NEXT: sc.w.rl a3, a3, (a4)3748; RV64IA-WMO-NEXT: bnez a3, .LBB18_13749; RV64IA-WMO-NEXT: .LBB18_3:3750; RV64IA-WMO-NEXT: ret3751;3752; RV64IA-ZACAS-LABEL: cmpxchg_i16_seq_cst_acquire:3753; RV64IA-ZACAS: # %bb.0:3754; RV64IA-ZACAS-NEXT: lui a3, 163755; RV64IA-ZACAS-NEXT: andi a4, a0, -43756; RV64IA-ZACAS-NEXT: andi a0, a0, 33757; RV64IA-ZACAS-NEXT: addi a3, a3, -13758; RV64IA-ZACAS-NEXT: slli a0, a0, 33759; RV64IA-ZACAS-NEXT: sllw a5, a3, a03760; RV64IA-ZACAS-NEXT: and a1, a1, a33761; RV64IA-ZACAS-NEXT: and a2, a2, a33762; RV64IA-ZACAS-NEXT: sllw a1, a1, a03763; RV64IA-ZACAS-NEXT: sllw a0, a2, a03764; RV64IA-ZACAS-NEXT: .LBB18_1: # =>This Inner Loop Header: Depth=13765; RV64IA-ZACAS-NEXT: lr.w.aqrl a2, (a4)3766; RV64IA-ZACAS-NEXT: and a3, a2, a53767; RV64IA-ZACAS-NEXT: bne a3, a1, .LBB18_33768; RV64IA-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB18_1 Depth=13769; RV64IA-ZACAS-NEXT: xor a3, a2, a03770; RV64IA-ZACAS-NEXT: and a3, a3, a53771; RV64IA-ZACAS-NEXT: xor a3, a2, a33772; RV64IA-ZACAS-NEXT: sc.w.rl a3, a3, (a4)3773; RV64IA-ZACAS-NEXT: bnez a3, .LBB18_13774; RV64IA-ZACAS-NEXT: .LBB18_3:3775; RV64IA-ZACAS-NEXT: ret3776;3777; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_seq_cst_acquire:3778; RV64IA-WMO-ZABHA: # %bb.0:3779; RV64IA-WMO-ZABHA-NEXT: amocas.h.aqrl a1, a2, (a0)3780; RV64IA-WMO-ZABHA-NEXT: ret3781;3782; RV64IA-TSO-LABEL: cmpxchg_i16_seq_cst_acquire:3783; RV64IA-TSO: # %bb.0:3784; RV64IA-TSO-NEXT: lui a3, 163785; RV64IA-TSO-NEXT: andi a4, a0, -43786; RV64IA-TSO-NEXT: andi a0, a0, 33787; RV64IA-TSO-NEXT: addi a3, a3, -13788; RV64IA-TSO-NEXT: slli a0, a0, 33789; RV64IA-TSO-NEXT: sllw a5, a3, a03790; RV64IA-TSO-NEXT: and a1, a1, a33791; RV64IA-TSO-NEXT: and a2, a2, a33792; RV64IA-TSO-NEXT: sllw a1, a1, a03793; RV64IA-TSO-NEXT: sllw a0, a2, a03794; RV64IA-TSO-NEXT: .LBB18_1: # =>This Inner Loop Header: Depth=13795; RV64IA-TSO-NEXT: lr.w.aqrl a2, (a4)3796; RV64IA-TSO-NEXT: and a3, a2, a53797; RV64IA-TSO-NEXT: bne a3, a1, .LBB18_33798; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB18_1 Depth=13799; RV64IA-TSO-NEXT: xor a3, a2, a03800; RV64IA-TSO-NEXT: and a3, a3, a53801; RV64IA-TSO-NEXT: xor a3, a2, a33802; RV64IA-TSO-NEXT: sc.w.rl a3, a3, (a4)3803; RV64IA-TSO-NEXT: bnez a3, .LBB18_13804; RV64IA-TSO-NEXT: .LBB18_3:3805; RV64IA-TSO-NEXT: ret3806;3807; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_seq_cst_acquire:3808; RV64IA-TSO-ZABHA: # %bb.0:3809; RV64IA-TSO-ZABHA-NEXT: amocas.h a1, a2, (a0)3810; RV64IA-TSO-ZABHA-NEXT: ret3811 %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val seq_cst acquire3812 ret void3813}3814 3815define void @cmpxchg_i16_seq_cst_seq_cst(ptr %ptr, i16 %cmp, i16 %val) nounwind {3816; RV32I-LABEL: cmpxchg_i16_seq_cst_seq_cst:3817; RV32I: # %bb.0:3818; RV32I-NEXT: addi sp, sp, -163819; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3820; RV32I-NEXT: sh a1, 10(sp)3821; RV32I-NEXT: addi a1, sp, 103822; RV32I-NEXT: li a3, 53823; RV32I-NEXT: li a4, 53824; RV32I-NEXT: call __atomic_compare_exchange_23825; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3826; RV32I-NEXT: addi sp, sp, 163827; RV32I-NEXT: ret3828;3829; RV32IA-LABEL: cmpxchg_i16_seq_cst_seq_cst:3830; RV32IA: # %bb.0:3831; RV32IA-NEXT: lui a3, 163832; RV32IA-NEXT: andi a4, a0, -43833; RV32IA-NEXT: andi a0, a0, 33834; RV32IA-NEXT: addi a3, a3, -13835; RV32IA-NEXT: slli a0, a0, 33836; RV32IA-NEXT: sll a5, a3, a03837; RV32IA-NEXT: and a1, a1, a33838; RV32IA-NEXT: and a2, a2, a33839; RV32IA-NEXT: sll a1, a1, a03840; RV32IA-NEXT: sll a0, a2, a03841; RV32IA-NEXT: .LBB19_1: # =>This Inner Loop Header: Depth=13842; RV32IA-NEXT: lr.w.aqrl a2, (a4)3843; RV32IA-NEXT: and a3, a2, a53844; RV32IA-NEXT: bne a3, a1, .LBB19_33845; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB19_1 Depth=13846; RV32IA-NEXT: xor a3, a2, a03847; RV32IA-NEXT: and a3, a3, a53848; RV32IA-NEXT: xor a3, a2, a33849; RV32IA-NEXT: sc.w.rl a3, a3, (a4)3850; RV32IA-NEXT: bnez a3, .LBB19_13851; RV32IA-NEXT: .LBB19_3:3852; RV32IA-NEXT: ret3853;3854; RV64I-LABEL: cmpxchg_i16_seq_cst_seq_cst:3855; RV64I: # %bb.0:3856; RV64I-NEXT: addi sp, sp, -163857; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3858; RV64I-NEXT: sh a1, 6(sp)3859; RV64I-NEXT: addi a1, sp, 63860; RV64I-NEXT: li a3, 53861; RV64I-NEXT: li a4, 53862; RV64I-NEXT: call __atomic_compare_exchange_23863; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3864; RV64I-NEXT: addi sp, sp, 163865; RV64I-NEXT: ret3866;3867; RV64IA-WMO-LABEL: cmpxchg_i16_seq_cst_seq_cst:3868; RV64IA-WMO: # %bb.0:3869; RV64IA-WMO-NEXT: lui a3, 163870; RV64IA-WMO-NEXT: andi a4, a0, -43871; RV64IA-WMO-NEXT: andi a0, a0, 33872; RV64IA-WMO-NEXT: addi a3, a3, -13873; RV64IA-WMO-NEXT: slli a0, a0, 33874; RV64IA-WMO-NEXT: sllw a5, a3, a03875; RV64IA-WMO-NEXT: and a1, a1, a33876; RV64IA-WMO-NEXT: and a2, a2, a33877; RV64IA-WMO-NEXT: sllw a1, a1, a03878; RV64IA-WMO-NEXT: sllw a0, a2, a03879; RV64IA-WMO-NEXT: .LBB19_1: # =>This Inner Loop Header: Depth=13880; RV64IA-WMO-NEXT: lr.w.aqrl a2, (a4)3881; RV64IA-WMO-NEXT: and a3, a2, a53882; RV64IA-WMO-NEXT: bne a3, a1, .LBB19_33883; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB19_1 Depth=13884; RV64IA-WMO-NEXT: xor a3, a2, a03885; RV64IA-WMO-NEXT: and a3, a3, a53886; RV64IA-WMO-NEXT: xor a3, a2, a33887; RV64IA-WMO-NEXT: sc.w.rl a3, a3, (a4)3888; RV64IA-WMO-NEXT: bnez a3, .LBB19_13889; RV64IA-WMO-NEXT: .LBB19_3:3890; RV64IA-WMO-NEXT: ret3891;3892; RV64IA-ZACAS-LABEL: cmpxchg_i16_seq_cst_seq_cst:3893; RV64IA-ZACAS: # %bb.0:3894; RV64IA-ZACAS-NEXT: lui a3, 163895; RV64IA-ZACAS-NEXT: andi a4, a0, -43896; RV64IA-ZACAS-NEXT: andi a0, a0, 33897; RV64IA-ZACAS-NEXT: addi a3, a3, -13898; RV64IA-ZACAS-NEXT: slli a0, a0, 33899; RV64IA-ZACAS-NEXT: sllw a5, a3, a03900; RV64IA-ZACAS-NEXT: and a1, a1, a33901; RV64IA-ZACAS-NEXT: and a2, a2, a33902; RV64IA-ZACAS-NEXT: sllw a1, a1, a03903; RV64IA-ZACAS-NEXT: sllw a0, a2, a03904; RV64IA-ZACAS-NEXT: .LBB19_1: # =>This Inner Loop Header: Depth=13905; RV64IA-ZACAS-NEXT: lr.w.aqrl a2, (a4)3906; RV64IA-ZACAS-NEXT: and a3, a2, a53907; RV64IA-ZACAS-NEXT: bne a3, a1, .LBB19_33908; RV64IA-ZACAS-NEXT: # %bb.2: # in Loop: Header=BB19_1 Depth=13909; RV64IA-ZACAS-NEXT: xor a3, a2, a03910; RV64IA-ZACAS-NEXT: and a3, a3, a53911; RV64IA-ZACAS-NEXT: xor a3, a2, a33912; RV64IA-ZACAS-NEXT: sc.w.rl a3, a3, (a4)3913; RV64IA-ZACAS-NEXT: bnez a3, .LBB19_13914; RV64IA-ZACAS-NEXT: .LBB19_3:3915; RV64IA-ZACAS-NEXT: ret3916;3917; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i16_seq_cst_seq_cst:3918; RV64IA-WMO-ZABHA: # %bb.0:3919; RV64IA-WMO-ZABHA-NEXT: fence rw, rw3920; RV64IA-WMO-ZABHA-NEXT: amocas.h.aqrl a1, a2, (a0)3921; RV64IA-WMO-ZABHA-NEXT: ret3922;3923; RV64IA-TSO-LABEL: cmpxchg_i16_seq_cst_seq_cst:3924; RV64IA-TSO: # %bb.0:3925; RV64IA-TSO-NEXT: lui a3, 163926; RV64IA-TSO-NEXT: andi a4, a0, -43927; RV64IA-TSO-NEXT: andi a0, a0, 33928; RV64IA-TSO-NEXT: addi a3, a3, -13929; RV64IA-TSO-NEXT: slli a0, a0, 33930; RV64IA-TSO-NEXT: sllw a5, a3, a03931; RV64IA-TSO-NEXT: and a1, a1, a33932; RV64IA-TSO-NEXT: and a2, a2, a33933; RV64IA-TSO-NEXT: sllw a1, a1, a03934; RV64IA-TSO-NEXT: sllw a0, a2, a03935; RV64IA-TSO-NEXT: .LBB19_1: # =>This Inner Loop Header: Depth=13936; RV64IA-TSO-NEXT: lr.w.aqrl a2, (a4)3937; RV64IA-TSO-NEXT: and a3, a2, a53938; RV64IA-TSO-NEXT: bne a3, a1, .LBB19_33939; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB19_1 Depth=13940; RV64IA-TSO-NEXT: xor a3, a2, a03941; RV64IA-TSO-NEXT: and a3, a3, a53942; RV64IA-TSO-NEXT: xor a3, a2, a33943; RV64IA-TSO-NEXT: sc.w.rl a3, a3, (a4)3944; RV64IA-TSO-NEXT: bnez a3, .LBB19_13945; RV64IA-TSO-NEXT: .LBB19_3:3946; RV64IA-TSO-NEXT: ret3947;3948; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i16_seq_cst_seq_cst:3949; RV64IA-TSO-ZABHA: # %bb.0:3950; RV64IA-TSO-ZABHA-NEXT: fence rw, rw3951; RV64IA-TSO-ZABHA-NEXT: amocas.h a1, a2, (a0)3952; RV64IA-TSO-ZABHA-NEXT: ret3953 %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val seq_cst seq_cst3954 ret void3955}3956 3957define void @cmpxchg_i32_monotonic_monotonic(ptr %ptr, i32 %cmp, i32 %val) nounwind {3958; RV32I-LABEL: cmpxchg_i32_monotonic_monotonic:3959; RV32I: # %bb.0:3960; RV32I-NEXT: addi sp, sp, -163961; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3962; RV32I-NEXT: sw a1, 8(sp)3963; RV32I-NEXT: addi a1, sp, 83964; RV32I-NEXT: li a3, 03965; RV32I-NEXT: li a4, 03966; RV32I-NEXT: call __atomic_compare_exchange_43967; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3968; RV32I-NEXT: addi sp, sp, 163969; RV32I-NEXT: ret3970;3971; RV32IA-WMO-LABEL: cmpxchg_i32_monotonic_monotonic:3972; RV32IA-WMO: # %bb.0:3973; RV32IA-WMO-NEXT: .LBB20_1: # =>This Inner Loop Header: Depth=13974; RV32IA-WMO-NEXT: lr.w a3, (a0)3975; RV32IA-WMO-NEXT: bne a3, a1, .LBB20_33976; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB20_1 Depth=13977; RV32IA-WMO-NEXT: sc.w a4, a2, (a0)3978; RV32IA-WMO-NEXT: bnez a4, .LBB20_13979; RV32IA-WMO-NEXT: .LBB20_3:3980; RV32IA-WMO-NEXT: ret3981;3982; RV32IA-ZACAS-LABEL: cmpxchg_i32_monotonic_monotonic:3983; RV32IA-ZACAS: # %bb.0:3984; RV32IA-ZACAS-NEXT: amocas.w a1, a2, (a0)3985; RV32IA-ZACAS-NEXT: ret3986;3987; RV32IA-TSO-LABEL: cmpxchg_i32_monotonic_monotonic:3988; RV32IA-TSO: # %bb.0:3989; RV32IA-TSO-NEXT: .LBB20_1: # =>This Inner Loop Header: Depth=13990; RV32IA-TSO-NEXT: lr.w a3, (a0)3991; RV32IA-TSO-NEXT: bne a3, a1, .LBB20_33992; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB20_1 Depth=13993; RV32IA-TSO-NEXT: sc.w a4, a2, (a0)3994; RV32IA-TSO-NEXT: bnez a4, .LBB20_13995; RV32IA-TSO-NEXT: .LBB20_3:3996; RV32IA-TSO-NEXT: ret3997;3998; RV64I-LABEL: cmpxchg_i32_monotonic_monotonic:3999; RV64I: # %bb.0:4000; RV64I-NEXT: addi sp, sp, -164001; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4002; RV64I-NEXT: sw a1, 4(sp)4003; RV64I-NEXT: addi a1, sp, 44004; RV64I-NEXT: li a3, 04005; RV64I-NEXT: li a4, 04006; RV64I-NEXT: call __atomic_compare_exchange_44007; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4008; RV64I-NEXT: addi sp, sp, 164009; RV64I-NEXT: ret4010;4011; RV64IA-WMO-LABEL: cmpxchg_i32_monotonic_monotonic:4012; RV64IA-WMO: # %bb.0:4013; RV64IA-WMO-NEXT: .LBB20_1: # =>This Inner Loop Header: Depth=14014; RV64IA-WMO-NEXT: lr.w a3, (a0)4015; RV64IA-WMO-NEXT: bne a3, a1, .LBB20_34016; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB20_1 Depth=14017; RV64IA-WMO-NEXT: sc.w a4, a2, (a0)4018; RV64IA-WMO-NEXT: bnez a4, .LBB20_14019; RV64IA-WMO-NEXT: .LBB20_3:4020; RV64IA-WMO-NEXT: ret4021;4022; RV64IA-ZACAS-LABEL: cmpxchg_i32_monotonic_monotonic:4023; RV64IA-ZACAS: # %bb.0:4024; RV64IA-ZACAS-NEXT: amocas.w a1, a2, (a0)4025; RV64IA-ZACAS-NEXT: ret4026;4027; RV64IA-ZABHA-LABEL: cmpxchg_i32_monotonic_monotonic:4028; RV64IA-ZABHA: # %bb.0:4029; RV64IA-ZABHA-NEXT: amocas.w a1, a2, (a0)4030; RV64IA-ZABHA-NEXT: ret4031;4032; RV64IA-TSO-LABEL: cmpxchg_i32_monotonic_monotonic:4033; RV64IA-TSO: # %bb.0:4034; RV64IA-TSO-NEXT: .LBB20_1: # =>This Inner Loop Header: Depth=14035; RV64IA-TSO-NEXT: lr.w a3, (a0)4036; RV64IA-TSO-NEXT: bne a3, a1, .LBB20_34037; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB20_1 Depth=14038; RV64IA-TSO-NEXT: sc.w a4, a2, (a0)4039; RV64IA-TSO-NEXT: bnez a4, .LBB20_14040; RV64IA-TSO-NEXT: .LBB20_3:4041; RV64IA-TSO-NEXT: ret4042 %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val monotonic monotonic4043 ret void4044}4045 4046define void @cmpxchg_i32_acquire_monotonic(ptr %ptr, i32 %cmp, i32 %val) nounwind {4047; RV32I-LABEL: cmpxchg_i32_acquire_monotonic:4048; RV32I: # %bb.0:4049; RV32I-NEXT: addi sp, sp, -164050; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4051; RV32I-NEXT: sw a1, 8(sp)4052; RV32I-NEXT: addi a1, sp, 84053; RV32I-NEXT: li a3, 24054; RV32I-NEXT: li a4, 04055; RV32I-NEXT: call __atomic_compare_exchange_44056; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4057; RV32I-NEXT: addi sp, sp, 164058; RV32I-NEXT: ret4059;4060; RV32IA-WMO-LABEL: cmpxchg_i32_acquire_monotonic:4061; RV32IA-WMO: # %bb.0:4062; RV32IA-WMO-NEXT: .LBB21_1: # =>This Inner Loop Header: Depth=14063; RV32IA-WMO-NEXT: lr.w.aq a3, (a0)4064; RV32IA-WMO-NEXT: bne a3, a1, .LBB21_34065; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB21_1 Depth=14066; RV32IA-WMO-NEXT: sc.w a4, a2, (a0)4067; RV32IA-WMO-NEXT: bnez a4, .LBB21_14068; RV32IA-WMO-NEXT: .LBB21_3:4069; RV32IA-WMO-NEXT: ret4070;4071; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_acquire_monotonic:4072; RV32IA-WMO-ZACAS: # %bb.0:4073; RV32IA-WMO-ZACAS-NEXT: amocas.w.aq a1, a2, (a0)4074; RV32IA-WMO-ZACAS-NEXT: ret4075;4076; RV32IA-TSO-LABEL: cmpxchg_i32_acquire_monotonic:4077; RV32IA-TSO: # %bb.0:4078; RV32IA-TSO-NEXT: .LBB21_1: # =>This Inner Loop Header: Depth=14079; RV32IA-TSO-NEXT: lr.w a3, (a0)4080; RV32IA-TSO-NEXT: bne a3, a1, .LBB21_34081; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB21_1 Depth=14082; RV32IA-TSO-NEXT: sc.w a4, a2, (a0)4083; RV32IA-TSO-NEXT: bnez a4, .LBB21_14084; RV32IA-TSO-NEXT: .LBB21_3:4085; RV32IA-TSO-NEXT: ret4086;4087; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_acquire_monotonic:4088; RV32IA-TSO-ZACAS: # %bb.0:4089; RV32IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4090; RV32IA-TSO-ZACAS-NEXT: ret4091;4092; RV64I-LABEL: cmpxchg_i32_acquire_monotonic:4093; RV64I: # %bb.0:4094; RV64I-NEXT: addi sp, sp, -164095; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4096; RV64I-NEXT: sw a1, 4(sp)4097; RV64I-NEXT: addi a1, sp, 44098; RV64I-NEXT: li a3, 24099; RV64I-NEXT: li a4, 04100; RV64I-NEXT: call __atomic_compare_exchange_44101; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4102; RV64I-NEXT: addi sp, sp, 164103; RV64I-NEXT: ret4104;4105; RV64IA-WMO-LABEL: cmpxchg_i32_acquire_monotonic:4106; RV64IA-WMO: # %bb.0:4107; RV64IA-WMO-NEXT: .LBB21_1: # =>This Inner Loop Header: Depth=14108; RV64IA-WMO-NEXT: lr.w.aq a3, (a0)4109; RV64IA-WMO-NEXT: bne a3, a1, .LBB21_34110; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB21_1 Depth=14111; RV64IA-WMO-NEXT: sc.w a4, a2, (a0)4112; RV64IA-WMO-NEXT: bnez a4, .LBB21_14113; RV64IA-WMO-NEXT: .LBB21_3:4114; RV64IA-WMO-NEXT: ret4115;4116; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_acquire_monotonic:4117; RV64IA-WMO-ZACAS: # %bb.0:4118; RV64IA-WMO-ZACAS-NEXT: amocas.w.aq a1, a2, (a0)4119; RV64IA-WMO-ZACAS-NEXT: ret4120;4121; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_acquire_monotonic:4122; RV64IA-WMO-ZABHA: # %bb.0:4123; RV64IA-WMO-ZABHA-NEXT: amocas.w.aq a1, a2, (a0)4124; RV64IA-WMO-ZABHA-NEXT: ret4125;4126; RV64IA-TSO-LABEL: cmpxchg_i32_acquire_monotonic:4127; RV64IA-TSO: # %bb.0:4128; RV64IA-TSO-NEXT: .LBB21_1: # =>This Inner Loop Header: Depth=14129; RV64IA-TSO-NEXT: lr.w a3, (a0)4130; RV64IA-TSO-NEXT: bne a3, a1, .LBB21_34131; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB21_1 Depth=14132; RV64IA-TSO-NEXT: sc.w a4, a2, (a0)4133; RV64IA-TSO-NEXT: bnez a4, .LBB21_14134; RV64IA-TSO-NEXT: .LBB21_3:4135; RV64IA-TSO-NEXT: ret4136;4137; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_acquire_monotonic:4138; RV64IA-TSO-ZACAS: # %bb.0:4139; RV64IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4140; RV64IA-TSO-ZACAS-NEXT: ret4141;4142; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_acquire_monotonic:4143; RV64IA-TSO-ZABHA: # %bb.0:4144; RV64IA-TSO-ZABHA-NEXT: amocas.w a1, a2, (a0)4145; RV64IA-TSO-ZABHA-NEXT: ret4146 %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val acquire monotonic4147 ret void4148}4149 4150define void @cmpxchg_i32_acquire_acquire(ptr %ptr, i32 %cmp, i32 %val) nounwind {4151; RV32I-LABEL: cmpxchg_i32_acquire_acquire:4152; RV32I: # %bb.0:4153; RV32I-NEXT: addi sp, sp, -164154; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4155; RV32I-NEXT: sw a1, 8(sp)4156; RV32I-NEXT: addi a1, sp, 84157; RV32I-NEXT: li a3, 24158; RV32I-NEXT: li a4, 24159; RV32I-NEXT: call __atomic_compare_exchange_44160; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4161; RV32I-NEXT: addi sp, sp, 164162; RV32I-NEXT: ret4163;4164; RV32IA-WMO-LABEL: cmpxchg_i32_acquire_acquire:4165; RV32IA-WMO: # %bb.0:4166; RV32IA-WMO-NEXT: .LBB22_1: # =>This Inner Loop Header: Depth=14167; RV32IA-WMO-NEXT: lr.w.aq a3, (a0)4168; RV32IA-WMO-NEXT: bne a3, a1, .LBB22_34169; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB22_1 Depth=14170; RV32IA-WMO-NEXT: sc.w a4, a2, (a0)4171; RV32IA-WMO-NEXT: bnez a4, .LBB22_14172; RV32IA-WMO-NEXT: .LBB22_3:4173; RV32IA-WMO-NEXT: ret4174;4175; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_acquire_acquire:4176; RV32IA-WMO-ZACAS: # %bb.0:4177; RV32IA-WMO-ZACAS-NEXT: amocas.w.aq a1, a2, (a0)4178; RV32IA-WMO-ZACAS-NEXT: ret4179;4180; RV32IA-TSO-LABEL: cmpxchg_i32_acquire_acquire:4181; RV32IA-TSO: # %bb.0:4182; RV32IA-TSO-NEXT: .LBB22_1: # =>This Inner Loop Header: Depth=14183; RV32IA-TSO-NEXT: lr.w a3, (a0)4184; RV32IA-TSO-NEXT: bne a3, a1, .LBB22_34185; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB22_1 Depth=14186; RV32IA-TSO-NEXT: sc.w a4, a2, (a0)4187; RV32IA-TSO-NEXT: bnez a4, .LBB22_14188; RV32IA-TSO-NEXT: .LBB22_3:4189; RV32IA-TSO-NEXT: ret4190;4191; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_acquire_acquire:4192; RV32IA-TSO-ZACAS: # %bb.0:4193; RV32IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4194; RV32IA-TSO-ZACAS-NEXT: ret4195;4196; RV64I-LABEL: cmpxchg_i32_acquire_acquire:4197; RV64I: # %bb.0:4198; RV64I-NEXT: addi sp, sp, -164199; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4200; RV64I-NEXT: sw a1, 4(sp)4201; RV64I-NEXT: addi a1, sp, 44202; RV64I-NEXT: li a3, 24203; RV64I-NEXT: li a4, 24204; RV64I-NEXT: call __atomic_compare_exchange_44205; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4206; RV64I-NEXT: addi sp, sp, 164207; RV64I-NEXT: ret4208;4209; RV64IA-WMO-LABEL: cmpxchg_i32_acquire_acquire:4210; RV64IA-WMO: # %bb.0:4211; RV64IA-WMO-NEXT: .LBB22_1: # =>This Inner Loop Header: Depth=14212; RV64IA-WMO-NEXT: lr.w.aq a3, (a0)4213; RV64IA-WMO-NEXT: bne a3, a1, .LBB22_34214; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB22_1 Depth=14215; RV64IA-WMO-NEXT: sc.w a4, a2, (a0)4216; RV64IA-WMO-NEXT: bnez a4, .LBB22_14217; RV64IA-WMO-NEXT: .LBB22_3:4218; RV64IA-WMO-NEXT: ret4219;4220; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_acquire_acquire:4221; RV64IA-WMO-ZACAS: # %bb.0:4222; RV64IA-WMO-ZACAS-NEXT: amocas.w.aq a1, a2, (a0)4223; RV64IA-WMO-ZACAS-NEXT: ret4224;4225; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_acquire_acquire:4226; RV64IA-WMO-ZABHA: # %bb.0:4227; RV64IA-WMO-ZABHA-NEXT: amocas.w.aq a1, a2, (a0)4228; RV64IA-WMO-ZABHA-NEXT: ret4229;4230; RV64IA-TSO-LABEL: cmpxchg_i32_acquire_acquire:4231; RV64IA-TSO: # %bb.0:4232; RV64IA-TSO-NEXT: .LBB22_1: # =>This Inner Loop Header: Depth=14233; RV64IA-TSO-NEXT: lr.w a3, (a0)4234; RV64IA-TSO-NEXT: bne a3, a1, .LBB22_34235; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB22_1 Depth=14236; RV64IA-TSO-NEXT: sc.w a4, a2, (a0)4237; RV64IA-TSO-NEXT: bnez a4, .LBB22_14238; RV64IA-TSO-NEXT: .LBB22_3:4239; RV64IA-TSO-NEXT: ret4240;4241; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_acquire_acquire:4242; RV64IA-TSO-ZACAS: # %bb.0:4243; RV64IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4244; RV64IA-TSO-ZACAS-NEXT: ret4245;4246; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_acquire_acquire:4247; RV64IA-TSO-ZABHA: # %bb.0:4248; RV64IA-TSO-ZABHA-NEXT: amocas.w a1, a2, (a0)4249; RV64IA-TSO-ZABHA-NEXT: ret4250 %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val acquire acquire4251 ret void4252}4253 4254define void @cmpxchg_i32_release_monotonic(ptr %ptr, i32 %cmp, i32 %val) nounwind {4255; RV32I-LABEL: cmpxchg_i32_release_monotonic:4256; RV32I: # %bb.0:4257; RV32I-NEXT: addi sp, sp, -164258; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4259; RV32I-NEXT: sw a1, 8(sp)4260; RV32I-NEXT: addi a1, sp, 84261; RV32I-NEXT: li a3, 34262; RV32I-NEXT: li a4, 04263; RV32I-NEXT: call __atomic_compare_exchange_44264; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4265; RV32I-NEXT: addi sp, sp, 164266; RV32I-NEXT: ret4267;4268; RV32IA-WMO-LABEL: cmpxchg_i32_release_monotonic:4269; RV32IA-WMO: # %bb.0:4270; RV32IA-WMO-NEXT: .LBB23_1: # =>This Inner Loop Header: Depth=14271; RV32IA-WMO-NEXT: lr.w a3, (a0)4272; RV32IA-WMO-NEXT: bne a3, a1, .LBB23_34273; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB23_1 Depth=14274; RV32IA-WMO-NEXT: sc.w.rl a4, a2, (a0)4275; RV32IA-WMO-NEXT: bnez a4, .LBB23_14276; RV32IA-WMO-NEXT: .LBB23_3:4277; RV32IA-WMO-NEXT: ret4278;4279; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_release_monotonic:4280; RV32IA-WMO-ZACAS: # %bb.0:4281; RV32IA-WMO-ZACAS-NEXT: amocas.w.rl a1, a2, (a0)4282; RV32IA-WMO-ZACAS-NEXT: ret4283;4284; RV32IA-TSO-LABEL: cmpxchg_i32_release_monotonic:4285; RV32IA-TSO: # %bb.0:4286; RV32IA-TSO-NEXT: .LBB23_1: # =>This Inner Loop Header: Depth=14287; RV32IA-TSO-NEXT: lr.w a3, (a0)4288; RV32IA-TSO-NEXT: bne a3, a1, .LBB23_34289; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB23_1 Depth=14290; RV32IA-TSO-NEXT: sc.w a4, a2, (a0)4291; RV32IA-TSO-NEXT: bnez a4, .LBB23_14292; RV32IA-TSO-NEXT: .LBB23_3:4293; RV32IA-TSO-NEXT: ret4294;4295; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_release_monotonic:4296; RV32IA-TSO-ZACAS: # %bb.0:4297; RV32IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4298; RV32IA-TSO-ZACAS-NEXT: ret4299;4300; RV64I-LABEL: cmpxchg_i32_release_monotonic:4301; RV64I: # %bb.0:4302; RV64I-NEXT: addi sp, sp, -164303; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4304; RV64I-NEXT: sw a1, 4(sp)4305; RV64I-NEXT: addi a1, sp, 44306; RV64I-NEXT: li a3, 34307; RV64I-NEXT: li a4, 04308; RV64I-NEXT: call __atomic_compare_exchange_44309; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4310; RV64I-NEXT: addi sp, sp, 164311; RV64I-NEXT: ret4312;4313; RV64IA-WMO-LABEL: cmpxchg_i32_release_monotonic:4314; RV64IA-WMO: # %bb.0:4315; RV64IA-WMO-NEXT: .LBB23_1: # =>This Inner Loop Header: Depth=14316; RV64IA-WMO-NEXT: lr.w a3, (a0)4317; RV64IA-WMO-NEXT: bne a3, a1, .LBB23_34318; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB23_1 Depth=14319; RV64IA-WMO-NEXT: sc.w.rl a4, a2, (a0)4320; RV64IA-WMO-NEXT: bnez a4, .LBB23_14321; RV64IA-WMO-NEXT: .LBB23_3:4322; RV64IA-WMO-NEXT: ret4323;4324; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_release_monotonic:4325; RV64IA-WMO-ZACAS: # %bb.0:4326; RV64IA-WMO-ZACAS-NEXT: amocas.w.rl a1, a2, (a0)4327; RV64IA-WMO-ZACAS-NEXT: ret4328;4329; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_release_monotonic:4330; RV64IA-WMO-ZABHA: # %bb.0:4331; RV64IA-WMO-ZABHA-NEXT: amocas.w.rl a1, a2, (a0)4332; RV64IA-WMO-ZABHA-NEXT: ret4333;4334; RV64IA-TSO-LABEL: cmpxchg_i32_release_monotonic:4335; RV64IA-TSO: # %bb.0:4336; RV64IA-TSO-NEXT: .LBB23_1: # =>This Inner Loop Header: Depth=14337; RV64IA-TSO-NEXT: lr.w a3, (a0)4338; RV64IA-TSO-NEXT: bne a3, a1, .LBB23_34339; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB23_1 Depth=14340; RV64IA-TSO-NEXT: sc.w a4, a2, (a0)4341; RV64IA-TSO-NEXT: bnez a4, .LBB23_14342; RV64IA-TSO-NEXT: .LBB23_3:4343; RV64IA-TSO-NEXT: ret4344;4345; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_release_monotonic:4346; RV64IA-TSO-ZACAS: # %bb.0:4347; RV64IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4348; RV64IA-TSO-ZACAS-NEXT: ret4349;4350; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_release_monotonic:4351; RV64IA-TSO-ZABHA: # %bb.0:4352; RV64IA-TSO-ZABHA-NEXT: amocas.w a1, a2, (a0)4353; RV64IA-TSO-ZABHA-NEXT: ret4354 %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val release monotonic4355 ret void4356}4357 4358define void @cmpxchg_i32_release_acquire(ptr %ptr, i32 %cmp, i32 %val) nounwind {4359; RV32I-LABEL: cmpxchg_i32_release_acquire:4360; RV32I: # %bb.0:4361; RV32I-NEXT: addi sp, sp, -164362; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4363; RV32I-NEXT: sw a1, 8(sp)4364; RV32I-NEXT: addi a1, sp, 84365; RV32I-NEXT: li a3, 34366; RV32I-NEXT: li a4, 24367; RV32I-NEXT: call __atomic_compare_exchange_44368; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4369; RV32I-NEXT: addi sp, sp, 164370; RV32I-NEXT: ret4371;4372; RV32IA-WMO-LABEL: cmpxchg_i32_release_acquire:4373; RV32IA-WMO: # %bb.0:4374; RV32IA-WMO-NEXT: .LBB24_1: # =>This Inner Loop Header: Depth=14375; RV32IA-WMO-NEXT: lr.w.aq a3, (a0)4376; RV32IA-WMO-NEXT: bne a3, a1, .LBB24_34377; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB24_1 Depth=14378; RV32IA-WMO-NEXT: sc.w.rl a4, a2, (a0)4379; RV32IA-WMO-NEXT: bnez a4, .LBB24_14380; RV32IA-WMO-NEXT: .LBB24_3:4381; RV32IA-WMO-NEXT: ret4382;4383; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_release_acquire:4384; RV32IA-WMO-ZACAS: # %bb.0:4385; RV32IA-WMO-ZACAS-NEXT: amocas.w.aqrl a1, a2, (a0)4386; RV32IA-WMO-ZACAS-NEXT: ret4387;4388; RV32IA-TSO-LABEL: cmpxchg_i32_release_acquire:4389; RV32IA-TSO: # %bb.0:4390; RV32IA-TSO-NEXT: .LBB24_1: # =>This Inner Loop Header: Depth=14391; RV32IA-TSO-NEXT: lr.w a3, (a0)4392; RV32IA-TSO-NEXT: bne a3, a1, .LBB24_34393; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB24_1 Depth=14394; RV32IA-TSO-NEXT: sc.w a4, a2, (a0)4395; RV32IA-TSO-NEXT: bnez a4, .LBB24_14396; RV32IA-TSO-NEXT: .LBB24_3:4397; RV32IA-TSO-NEXT: ret4398;4399; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_release_acquire:4400; RV32IA-TSO-ZACAS: # %bb.0:4401; RV32IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4402; RV32IA-TSO-ZACAS-NEXT: ret4403;4404; RV64I-LABEL: cmpxchg_i32_release_acquire:4405; RV64I: # %bb.0:4406; RV64I-NEXT: addi sp, sp, -164407; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4408; RV64I-NEXT: sw a1, 4(sp)4409; RV64I-NEXT: addi a1, sp, 44410; RV64I-NEXT: li a3, 34411; RV64I-NEXT: li a4, 24412; RV64I-NEXT: call __atomic_compare_exchange_44413; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4414; RV64I-NEXT: addi sp, sp, 164415; RV64I-NEXT: ret4416;4417; RV64IA-WMO-LABEL: cmpxchg_i32_release_acquire:4418; RV64IA-WMO: # %bb.0:4419; RV64IA-WMO-NEXT: .LBB24_1: # =>This Inner Loop Header: Depth=14420; RV64IA-WMO-NEXT: lr.w.aq a3, (a0)4421; RV64IA-WMO-NEXT: bne a3, a1, .LBB24_34422; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB24_1 Depth=14423; RV64IA-WMO-NEXT: sc.w.rl a4, a2, (a0)4424; RV64IA-WMO-NEXT: bnez a4, .LBB24_14425; RV64IA-WMO-NEXT: .LBB24_3:4426; RV64IA-WMO-NEXT: ret4427;4428; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_release_acquire:4429; RV64IA-WMO-ZACAS: # %bb.0:4430; RV64IA-WMO-ZACAS-NEXT: amocas.w.aqrl a1, a2, (a0)4431; RV64IA-WMO-ZACAS-NEXT: ret4432;4433; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_release_acquire:4434; RV64IA-WMO-ZABHA: # %bb.0:4435; RV64IA-WMO-ZABHA-NEXT: amocas.w.aqrl a1, a2, (a0)4436; RV64IA-WMO-ZABHA-NEXT: ret4437;4438; RV64IA-TSO-LABEL: cmpxchg_i32_release_acquire:4439; RV64IA-TSO: # %bb.0:4440; RV64IA-TSO-NEXT: .LBB24_1: # =>This Inner Loop Header: Depth=14441; RV64IA-TSO-NEXT: lr.w a3, (a0)4442; RV64IA-TSO-NEXT: bne a3, a1, .LBB24_34443; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB24_1 Depth=14444; RV64IA-TSO-NEXT: sc.w a4, a2, (a0)4445; RV64IA-TSO-NEXT: bnez a4, .LBB24_14446; RV64IA-TSO-NEXT: .LBB24_3:4447; RV64IA-TSO-NEXT: ret4448;4449; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_release_acquire:4450; RV64IA-TSO-ZACAS: # %bb.0:4451; RV64IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4452; RV64IA-TSO-ZACAS-NEXT: ret4453;4454; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_release_acquire:4455; RV64IA-TSO-ZABHA: # %bb.0:4456; RV64IA-TSO-ZABHA-NEXT: amocas.w a1, a2, (a0)4457; RV64IA-TSO-ZABHA-NEXT: ret4458 %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val release acquire4459 ret void4460}4461 4462define void @cmpxchg_i32_acq_rel_monotonic(ptr %ptr, i32 %cmp, i32 %val) nounwind {4463; RV32I-LABEL: cmpxchg_i32_acq_rel_monotonic:4464; RV32I: # %bb.0:4465; RV32I-NEXT: addi sp, sp, -164466; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4467; RV32I-NEXT: sw a1, 8(sp)4468; RV32I-NEXT: addi a1, sp, 84469; RV32I-NEXT: li a3, 44470; RV32I-NEXT: li a4, 04471; RV32I-NEXT: call __atomic_compare_exchange_44472; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4473; RV32I-NEXT: addi sp, sp, 164474; RV32I-NEXT: ret4475;4476; RV32IA-WMO-LABEL: cmpxchg_i32_acq_rel_monotonic:4477; RV32IA-WMO: # %bb.0:4478; RV32IA-WMO-NEXT: .LBB25_1: # =>This Inner Loop Header: Depth=14479; RV32IA-WMO-NEXT: lr.w.aq a3, (a0)4480; RV32IA-WMO-NEXT: bne a3, a1, .LBB25_34481; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB25_1 Depth=14482; RV32IA-WMO-NEXT: sc.w.rl a4, a2, (a0)4483; RV32IA-WMO-NEXT: bnez a4, .LBB25_14484; RV32IA-WMO-NEXT: .LBB25_3:4485; RV32IA-WMO-NEXT: ret4486;4487; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_acq_rel_monotonic:4488; RV32IA-WMO-ZACAS: # %bb.0:4489; RV32IA-WMO-ZACAS-NEXT: amocas.w.aqrl a1, a2, (a0)4490; RV32IA-WMO-ZACAS-NEXT: ret4491;4492; RV32IA-TSO-LABEL: cmpxchg_i32_acq_rel_monotonic:4493; RV32IA-TSO: # %bb.0:4494; RV32IA-TSO-NEXT: .LBB25_1: # =>This Inner Loop Header: Depth=14495; RV32IA-TSO-NEXT: lr.w a3, (a0)4496; RV32IA-TSO-NEXT: bne a3, a1, .LBB25_34497; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB25_1 Depth=14498; RV32IA-TSO-NEXT: sc.w a4, a2, (a0)4499; RV32IA-TSO-NEXT: bnez a4, .LBB25_14500; RV32IA-TSO-NEXT: .LBB25_3:4501; RV32IA-TSO-NEXT: ret4502;4503; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_acq_rel_monotonic:4504; RV32IA-TSO-ZACAS: # %bb.0:4505; RV32IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4506; RV32IA-TSO-ZACAS-NEXT: ret4507;4508; RV64I-LABEL: cmpxchg_i32_acq_rel_monotonic:4509; RV64I: # %bb.0:4510; RV64I-NEXT: addi sp, sp, -164511; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4512; RV64I-NEXT: sw a1, 4(sp)4513; RV64I-NEXT: addi a1, sp, 44514; RV64I-NEXT: li a3, 44515; RV64I-NEXT: li a4, 04516; RV64I-NEXT: call __atomic_compare_exchange_44517; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4518; RV64I-NEXT: addi sp, sp, 164519; RV64I-NEXT: ret4520;4521; RV64IA-WMO-LABEL: cmpxchg_i32_acq_rel_monotonic:4522; RV64IA-WMO: # %bb.0:4523; RV64IA-WMO-NEXT: .LBB25_1: # =>This Inner Loop Header: Depth=14524; RV64IA-WMO-NEXT: lr.w.aq a3, (a0)4525; RV64IA-WMO-NEXT: bne a3, a1, .LBB25_34526; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB25_1 Depth=14527; RV64IA-WMO-NEXT: sc.w.rl a4, a2, (a0)4528; RV64IA-WMO-NEXT: bnez a4, .LBB25_14529; RV64IA-WMO-NEXT: .LBB25_3:4530; RV64IA-WMO-NEXT: ret4531;4532; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_acq_rel_monotonic:4533; RV64IA-WMO-ZACAS: # %bb.0:4534; RV64IA-WMO-ZACAS-NEXT: amocas.w.aqrl a1, a2, (a0)4535; RV64IA-WMO-ZACAS-NEXT: ret4536;4537; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_acq_rel_monotonic:4538; RV64IA-WMO-ZABHA: # %bb.0:4539; RV64IA-WMO-ZABHA-NEXT: amocas.w.aqrl a1, a2, (a0)4540; RV64IA-WMO-ZABHA-NEXT: ret4541;4542; RV64IA-TSO-LABEL: cmpxchg_i32_acq_rel_monotonic:4543; RV64IA-TSO: # %bb.0:4544; RV64IA-TSO-NEXT: .LBB25_1: # =>This Inner Loop Header: Depth=14545; RV64IA-TSO-NEXT: lr.w a3, (a0)4546; RV64IA-TSO-NEXT: bne a3, a1, .LBB25_34547; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB25_1 Depth=14548; RV64IA-TSO-NEXT: sc.w a4, a2, (a0)4549; RV64IA-TSO-NEXT: bnez a4, .LBB25_14550; RV64IA-TSO-NEXT: .LBB25_3:4551; RV64IA-TSO-NEXT: ret4552;4553; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_acq_rel_monotonic:4554; RV64IA-TSO-ZACAS: # %bb.0:4555; RV64IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4556; RV64IA-TSO-ZACAS-NEXT: ret4557;4558; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_acq_rel_monotonic:4559; RV64IA-TSO-ZABHA: # %bb.0:4560; RV64IA-TSO-ZABHA-NEXT: amocas.w a1, a2, (a0)4561; RV64IA-TSO-ZABHA-NEXT: ret4562 %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val acq_rel monotonic4563 ret void4564}4565 4566define void @cmpxchg_i32_acq_rel_acquire(ptr %ptr, i32 %cmp, i32 %val) nounwind {4567; RV32I-LABEL: cmpxchg_i32_acq_rel_acquire:4568; RV32I: # %bb.0:4569; RV32I-NEXT: addi sp, sp, -164570; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4571; RV32I-NEXT: sw a1, 8(sp)4572; RV32I-NEXT: addi a1, sp, 84573; RV32I-NEXT: li a3, 44574; RV32I-NEXT: li a4, 24575; RV32I-NEXT: call __atomic_compare_exchange_44576; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4577; RV32I-NEXT: addi sp, sp, 164578; RV32I-NEXT: ret4579;4580; RV32IA-WMO-LABEL: cmpxchg_i32_acq_rel_acquire:4581; RV32IA-WMO: # %bb.0:4582; RV32IA-WMO-NEXT: .LBB26_1: # =>This Inner Loop Header: Depth=14583; RV32IA-WMO-NEXT: lr.w.aq a3, (a0)4584; RV32IA-WMO-NEXT: bne a3, a1, .LBB26_34585; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB26_1 Depth=14586; RV32IA-WMO-NEXT: sc.w.rl a4, a2, (a0)4587; RV32IA-WMO-NEXT: bnez a4, .LBB26_14588; RV32IA-WMO-NEXT: .LBB26_3:4589; RV32IA-WMO-NEXT: ret4590;4591; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_acq_rel_acquire:4592; RV32IA-WMO-ZACAS: # %bb.0:4593; RV32IA-WMO-ZACAS-NEXT: amocas.w.aqrl a1, a2, (a0)4594; RV32IA-WMO-ZACAS-NEXT: ret4595;4596; RV32IA-TSO-LABEL: cmpxchg_i32_acq_rel_acquire:4597; RV32IA-TSO: # %bb.0:4598; RV32IA-TSO-NEXT: .LBB26_1: # =>This Inner Loop Header: Depth=14599; RV32IA-TSO-NEXT: lr.w a3, (a0)4600; RV32IA-TSO-NEXT: bne a3, a1, .LBB26_34601; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB26_1 Depth=14602; RV32IA-TSO-NEXT: sc.w a4, a2, (a0)4603; RV32IA-TSO-NEXT: bnez a4, .LBB26_14604; RV32IA-TSO-NEXT: .LBB26_3:4605; RV32IA-TSO-NEXT: ret4606;4607; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_acq_rel_acquire:4608; RV32IA-TSO-ZACAS: # %bb.0:4609; RV32IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4610; RV32IA-TSO-ZACAS-NEXT: ret4611;4612; RV64I-LABEL: cmpxchg_i32_acq_rel_acquire:4613; RV64I: # %bb.0:4614; RV64I-NEXT: addi sp, sp, -164615; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4616; RV64I-NEXT: sw a1, 4(sp)4617; RV64I-NEXT: addi a1, sp, 44618; RV64I-NEXT: li a3, 44619; RV64I-NEXT: li a4, 24620; RV64I-NEXT: call __atomic_compare_exchange_44621; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4622; RV64I-NEXT: addi sp, sp, 164623; RV64I-NEXT: ret4624;4625; RV64IA-WMO-LABEL: cmpxchg_i32_acq_rel_acquire:4626; RV64IA-WMO: # %bb.0:4627; RV64IA-WMO-NEXT: .LBB26_1: # =>This Inner Loop Header: Depth=14628; RV64IA-WMO-NEXT: lr.w.aq a3, (a0)4629; RV64IA-WMO-NEXT: bne a3, a1, .LBB26_34630; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB26_1 Depth=14631; RV64IA-WMO-NEXT: sc.w.rl a4, a2, (a0)4632; RV64IA-WMO-NEXT: bnez a4, .LBB26_14633; RV64IA-WMO-NEXT: .LBB26_3:4634; RV64IA-WMO-NEXT: ret4635;4636; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_acq_rel_acquire:4637; RV64IA-WMO-ZACAS: # %bb.0:4638; RV64IA-WMO-ZACAS-NEXT: amocas.w.aqrl a1, a2, (a0)4639; RV64IA-WMO-ZACAS-NEXT: ret4640;4641; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_acq_rel_acquire:4642; RV64IA-WMO-ZABHA: # %bb.0:4643; RV64IA-WMO-ZABHA-NEXT: amocas.w.aqrl a1, a2, (a0)4644; RV64IA-WMO-ZABHA-NEXT: ret4645;4646; RV64IA-TSO-LABEL: cmpxchg_i32_acq_rel_acquire:4647; RV64IA-TSO: # %bb.0:4648; RV64IA-TSO-NEXT: .LBB26_1: # =>This Inner Loop Header: Depth=14649; RV64IA-TSO-NEXT: lr.w a3, (a0)4650; RV64IA-TSO-NEXT: bne a3, a1, .LBB26_34651; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB26_1 Depth=14652; RV64IA-TSO-NEXT: sc.w a4, a2, (a0)4653; RV64IA-TSO-NEXT: bnez a4, .LBB26_14654; RV64IA-TSO-NEXT: .LBB26_3:4655; RV64IA-TSO-NEXT: ret4656;4657; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_acq_rel_acquire:4658; RV64IA-TSO-ZACAS: # %bb.0:4659; RV64IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4660; RV64IA-TSO-ZACAS-NEXT: ret4661;4662; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_acq_rel_acquire:4663; RV64IA-TSO-ZABHA: # %bb.0:4664; RV64IA-TSO-ZABHA-NEXT: amocas.w a1, a2, (a0)4665; RV64IA-TSO-ZABHA-NEXT: ret4666 %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val acq_rel acquire4667 ret void4668}4669 4670define void @cmpxchg_i32_seq_cst_monotonic(ptr %ptr, i32 %cmp, i32 %val) nounwind {4671; RV32I-LABEL: cmpxchg_i32_seq_cst_monotonic:4672; RV32I: # %bb.0:4673; RV32I-NEXT: addi sp, sp, -164674; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4675; RV32I-NEXT: sw a1, 8(sp)4676; RV32I-NEXT: addi a1, sp, 84677; RV32I-NEXT: li a3, 54678; RV32I-NEXT: li a4, 04679; RV32I-NEXT: call __atomic_compare_exchange_44680; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4681; RV32I-NEXT: addi sp, sp, 164682; RV32I-NEXT: ret4683;4684; RV32IA-WMO-LABEL: cmpxchg_i32_seq_cst_monotonic:4685; RV32IA-WMO: # %bb.0:4686; RV32IA-WMO-NEXT: .LBB27_1: # =>This Inner Loop Header: Depth=14687; RV32IA-WMO-NEXT: lr.w.aqrl a3, (a0)4688; RV32IA-WMO-NEXT: bne a3, a1, .LBB27_34689; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB27_1 Depth=14690; RV32IA-WMO-NEXT: sc.w.rl a4, a2, (a0)4691; RV32IA-WMO-NEXT: bnez a4, .LBB27_14692; RV32IA-WMO-NEXT: .LBB27_3:4693; RV32IA-WMO-NEXT: ret4694;4695; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_seq_cst_monotonic:4696; RV32IA-WMO-ZACAS: # %bb.0:4697; RV32IA-WMO-ZACAS-NEXT: amocas.w.aqrl a1, a2, (a0)4698; RV32IA-WMO-ZACAS-NEXT: ret4699;4700; RV32IA-TSO-LABEL: cmpxchg_i32_seq_cst_monotonic:4701; RV32IA-TSO: # %bb.0:4702; RV32IA-TSO-NEXT: .LBB27_1: # =>This Inner Loop Header: Depth=14703; RV32IA-TSO-NEXT: lr.w.aqrl a3, (a0)4704; RV32IA-TSO-NEXT: bne a3, a1, .LBB27_34705; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB27_1 Depth=14706; RV32IA-TSO-NEXT: sc.w.rl a4, a2, (a0)4707; RV32IA-TSO-NEXT: bnez a4, .LBB27_14708; RV32IA-TSO-NEXT: .LBB27_3:4709; RV32IA-TSO-NEXT: ret4710;4711; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_seq_cst_monotonic:4712; RV32IA-TSO-ZACAS: # %bb.0:4713; RV32IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4714; RV32IA-TSO-ZACAS-NEXT: ret4715;4716; RV64I-LABEL: cmpxchg_i32_seq_cst_monotonic:4717; RV64I: # %bb.0:4718; RV64I-NEXT: addi sp, sp, -164719; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4720; RV64I-NEXT: sw a1, 4(sp)4721; RV64I-NEXT: addi a1, sp, 44722; RV64I-NEXT: li a3, 54723; RV64I-NEXT: li a4, 04724; RV64I-NEXT: call __atomic_compare_exchange_44725; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4726; RV64I-NEXT: addi sp, sp, 164727; RV64I-NEXT: ret4728;4729; RV64IA-WMO-LABEL: cmpxchg_i32_seq_cst_monotonic:4730; RV64IA-WMO: # %bb.0:4731; RV64IA-WMO-NEXT: .LBB27_1: # =>This Inner Loop Header: Depth=14732; RV64IA-WMO-NEXT: lr.w.aqrl a3, (a0)4733; RV64IA-WMO-NEXT: bne a3, a1, .LBB27_34734; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB27_1 Depth=14735; RV64IA-WMO-NEXT: sc.w.rl a4, a2, (a0)4736; RV64IA-WMO-NEXT: bnez a4, .LBB27_14737; RV64IA-WMO-NEXT: .LBB27_3:4738; RV64IA-WMO-NEXT: ret4739;4740; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_seq_cst_monotonic:4741; RV64IA-WMO-ZACAS: # %bb.0:4742; RV64IA-WMO-ZACAS-NEXT: amocas.w.aqrl a1, a2, (a0)4743; RV64IA-WMO-ZACAS-NEXT: ret4744;4745; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_seq_cst_monotonic:4746; RV64IA-WMO-ZABHA: # %bb.0:4747; RV64IA-WMO-ZABHA-NEXT: amocas.w.aqrl a1, a2, (a0)4748; RV64IA-WMO-ZABHA-NEXT: ret4749;4750; RV64IA-TSO-LABEL: cmpxchg_i32_seq_cst_monotonic:4751; RV64IA-TSO: # %bb.0:4752; RV64IA-TSO-NEXT: .LBB27_1: # =>This Inner Loop Header: Depth=14753; RV64IA-TSO-NEXT: lr.w.aqrl a3, (a0)4754; RV64IA-TSO-NEXT: bne a3, a1, .LBB27_34755; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB27_1 Depth=14756; RV64IA-TSO-NEXT: sc.w.rl a4, a2, (a0)4757; RV64IA-TSO-NEXT: bnez a4, .LBB27_14758; RV64IA-TSO-NEXT: .LBB27_3:4759; RV64IA-TSO-NEXT: ret4760;4761; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_seq_cst_monotonic:4762; RV64IA-TSO-ZACAS: # %bb.0:4763; RV64IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4764; RV64IA-TSO-ZACAS-NEXT: ret4765;4766; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_seq_cst_monotonic:4767; RV64IA-TSO-ZABHA: # %bb.0:4768; RV64IA-TSO-ZABHA-NEXT: amocas.w a1, a2, (a0)4769; RV64IA-TSO-ZABHA-NEXT: ret4770 %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val seq_cst monotonic4771 ret void4772}4773 4774define void @cmpxchg_i32_seq_cst_acquire(ptr %ptr, i32 %cmp, i32 %val) nounwind {4775; RV32I-LABEL: cmpxchg_i32_seq_cst_acquire:4776; RV32I: # %bb.0:4777; RV32I-NEXT: addi sp, sp, -164778; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4779; RV32I-NEXT: sw a1, 8(sp)4780; RV32I-NEXT: addi a1, sp, 84781; RV32I-NEXT: li a3, 54782; RV32I-NEXT: li a4, 24783; RV32I-NEXT: call __atomic_compare_exchange_44784; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4785; RV32I-NEXT: addi sp, sp, 164786; RV32I-NEXT: ret4787;4788; RV32IA-WMO-LABEL: cmpxchg_i32_seq_cst_acquire:4789; RV32IA-WMO: # %bb.0:4790; RV32IA-WMO-NEXT: .LBB28_1: # =>This Inner Loop Header: Depth=14791; RV32IA-WMO-NEXT: lr.w.aqrl a3, (a0)4792; RV32IA-WMO-NEXT: bne a3, a1, .LBB28_34793; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB28_1 Depth=14794; RV32IA-WMO-NEXT: sc.w.rl a4, a2, (a0)4795; RV32IA-WMO-NEXT: bnez a4, .LBB28_14796; RV32IA-WMO-NEXT: .LBB28_3:4797; RV32IA-WMO-NEXT: ret4798;4799; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_seq_cst_acquire:4800; RV32IA-WMO-ZACAS: # %bb.0:4801; RV32IA-WMO-ZACAS-NEXT: amocas.w.aqrl a1, a2, (a0)4802; RV32IA-WMO-ZACAS-NEXT: ret4803;4804; RV32IA-TSO-LABEL: cmpxchg_i32_seq_cst_acquire:4805; RV32IA-TSO: # %bb.0:4806; RV32IA-TSO-NEXT: .LBB28_1: # =>This Inner Loop Header: Depth=14807; RV32IA-TSO-NEXT: lr.w.aqrl a3, (a0)4808; RV32IA-TSO-NEXT: bne a3, a1, .LBB28_34809; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB28_1 Depth=14810; RV32IA-TSO-NEXT: sc.w.rl a4, a2, (a0)4811; RV32IA-TSO-NEXT: bnez a4, .LBB28_14812; RV32IA-TSO-NEXT: .LBB28_3:4813; RV32IA-TSO-NEXT: ret4814;4815; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_seq_cst_acquire:4816; RV32IA-TSO-ZACAS: # %bb.0:4817; RV32IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4818; RV32IA-TSO-ZACAS-NEXT: ret4819;4820; RV64I-LABEL: cmpxchg_i32_seq_cst_acquire:4821; RV64I: # %bb.0:4822; RV64I-NEXT: addi sp, sp, -164823; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4824; RV64I-NEXT: sw a1, 4(sp)4825; RV64I-NEXT: addi a1, sp, 44826; RV64I-NEXT: li a3, 54827; RV64I-NEXT: li a4, 24828; RV64I-NEXT: call __atomic_compare_exchange_44829; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4830; RV64I-NEXT: addi sp, sp, 164831; RV64I-NEXT: ret4832;4833; RV64IA-WMO-LABEL: cmpxchg_i32_seq_cst_acquire:4834; RV64IA-WMO: # %bb.0:4835; RV64IA-WMO-NEXT: .LBB28_1: # =>This Inner Loop Header: Depth=14836; RV64IA-WMO-NEXT: lr.w.aqrl a3, (a0)4837; RV64IA-WMO-NEXT: bne a3, a1, .LBB28_34838; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB28_1 Depth=14839; RV64IA-WMO-NEXT: sc.w.rl a4, a2, (a0)4840; RV64IA-WMO-NEXT: bnez a4, .LBB28_14841; RV64IA-WMO-NEXT: .LBB28_3:4842; RV64IA-WMO-NEXT: ret4843;4844; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_seq_cst_acquire:4845; RV64IA-WMO-ZACAS: # %bb.0:4846; RV64IA-WMO-ZACAS-NEXT: amocas.w.aqrl a1, a2, (a0)4847; RV64IA-WMO-ZACAS-NEXT: ret4848;4849; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_seq_cst_acquire:4850; RV64IA-WMO-ZABHA: # %bb.0:4851; RV64IA-WMO-ZABHA-NEXT: amocas.w.aqrl a1, a2, (a0)4852; RV64IA-WMO-ZABHA-NEXT: ret4853;4854; RV64IA-TSO-LABEL: cmpxchg_i32_seq_cst_acquire:4855; RV64IA-TSO: # %bb.0:4856; RV64IA-TSO-NEXT: .LBB28_1: # =>This Inner Loop Header: Depth=14857; RV64IA-TSO-NEXT: lr.w.aqrl a3, (a0)4858; RV64IA-TSO-NEXT: bne a3, a1, .LBB28_34859; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB28_1 Depth=14860; RV64IA-TSO-NEXT: sc.w.rl a4, a2, (a0)4861; RV64IA-TSO-NEXT: bnez a4, .LBB28_14862; RV64IA-TSO-NEXT: .LBB28_3:4863; RV64IA-TSO-NEXT: ret4864;4865; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_seq_cst_acquire:4866; RV64IA-TSO-ZACAS: # %bb.0:4867; RV64IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4868; RV64IA-TSO-ZACAS-NEXT: ret4869;4870; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_seq_cst_acquire:4871; RV64IA-TSO-ZABHA: # %bb.0:4872; RV64IA-TSO-ZABHA-NEXT: amocas.w a1, a2, (a0)4873; RV64IA-TSO-ZABHA-NEXT: ret4874 %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val seq_cst acquire4875 ret void4876}4877 4878define void @cmpxchg_i32_seq_cst_seq_cst(ptr %ptr, i32 %cmp, i32 %val) nounwind {4879; RV32I-LABEL: cmpxchg_i32_seq_cst_seq_cst:4880; RV32I: # %bb.0:4881; RV32I-NEXT: addi sp, sp, -164882; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4883; RV32I-NEXT: sw a1, 8(sp)4884; RV32I-NEXT: addi a1, sp, 84885; RV32I-NEXT: li a3, 54886; RV32I-NEXT: li a4, 54887; RV32I-NEXT: call __atomic_compare_exchange_44888; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4889; RV32I-NEXT: addi sp, sp, 164890; RV32I-NEXT: ret4891;4892; RV32IA-WMO-LABEL: cmpxchg_i32_seq_cst_seq_cst:4893; RV32IA-WMO: # %bb.0:4894; RV32IA-WMO-NEXT: .LBB29_1: # =>This Inner Loop Header: Depth=14895; RV32IA-WMO-NEXT: lr.w.aqrl a3, (a0)4896; RV32IA-WMO-NEXT: bne a3, a1, .LBB29_34897; RV32IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB29_1 Depth=14898; RV32IA-WMO-NEXT: sc.w.rl a4, a2, (a0)4899; RV32IA-WMO-NEXT: bnez a4, .LBB29_14900; RV32IA-WMO-NEXT: .LBB29_3:4901; RV32IA-WMO-NEXT: ret4902;4903; RV32IA-WMO-ZACAS-LABEL: cmpxchg_i32_seq_cst_seq_cst:4904; RV32IA-WMO-ZACAS: # %bb.0:4905; RV32IA-WMO-ZACAS-NEXT: fence rw, rw4906; RV32IA-WMO-ZACAS-NEXT: amocas.w.aqrl a1, a2, (a0)4907; RV32IA-WMO-ZACAS-NEXT: ret4908;4909; RV32IA-TSO-LABEL: cmpxchg_i32_seq_cst_seq_cst:4910; RV32IA-TSO: # %bb.0:4911; RV32IA-TSO-NEXT: .LBB29_1: # =>This Inner Loop Header: Depth=14912; RV32IA-TSO-NEXT: lr.w.aqrl a3, (a0)4913; RV32IA-TSO-NEXT: bne a3, a1, .LBB29_34914; RV32IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB29_1 Depth=14915; RV32IA-TSO-NEXT: sc.w.rl a4, a2, (a0)4916; RV32IA-TSO-NEXT: bnez a4, .LBB29_14917; RV32IA-TSO-NEXT: .LBB29_3:4918; RV32IA-TSO-NEXT: ret4919;4920; RV32IA-TSO-ZACAS-LABEL: cmpxchg_i32_seq_cst_seq_cst:4921; RV32IA-TSO-ZACAS: # %bb.0:4922; RV32IA-TSO-ZACAS-NEXT: fence rw, rw4923; RV32IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4924; RV32IA-TSO-ZACAS-NEXT: ret4925;4926; RV64I-LABEL: cmpxchg_i32_seq_cst_seq_cst:4927; RV64I: # %bb.0:4928; RV64I-NEXT: addi sp, sp, -164929; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4930; RV64I-NEXT: sw a1, 4(sp)4931; RV64I-NEXT: addi a1, sp, 44932; RV64I-NEXT: li a3, 54933; RV64I-NEXT: li a4, 54934; RV64I-NEXT: call __atomic_compare_exchange_44935; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4936; RV64I-NEXT: addi sp, sp, 164937; RV64I-NEXT: ret4938;4939; RV64IA-WMO-LABEL: cmpxchg_i32_seq_cst_seq_cst:4940; RV64IA-WMO: # %bb.0:4941; RV64IA-WMO-NEXT: .LBB29_1: # =>This Inner Loop Header: Depth=14942; RV64IA-WMO-NEXT: lr.w.aqrl a3, (a0)4943; RV64IA-WMO-NEXT: bne a3, a1, .LBB29_34944; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB29_1 Depth=14945; RV64IA-WMO-NEXT: sc.w.rl a4, a2, (a0)4946; RV64IA-WMO-NEXT: bnez a4, .LBB29_14947; RV64IA-WMO-NEXT: .LBB29_3:4948; RV64IA-WMO-NEXT: ret4949;4950; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i32_seq_cst_seq_cst:4951; RV64IA-WMO-ZACAS: # %bb.0:4952; RV64IA-WMO-ZACAS-NEXT: fence rw, rw4953; RV64IA-WMO-ZACAS-NEXT: amocas.w.aqrl a1, a2, (a0)4954; RV64IA-WMO-ZACAS-NEXT: ret4955;4956; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i32_seq_cst_seq_cst:4957; RV64IA-WMO-ZABHA: # %bb.0:4958; RV64IA-WMO-ZABHA-NEXT: fence rw, rw4959; RV64IA-WMO-ZABHA-NEXT: amocas.w.aqrl a1, a2, (a0)4960; RV64IA-WMO-ZABHA-NEXT: ret4961;4962; RV64IA-TSO-LABEL: cmpxchg_i32_seq_cst_seq_cst:4963; RV64IA-TSO: # %bb.0:4964; RV64IA-TSO-NEXT: .LBB29_1: # =>This Inner Loop Header: Depth=14965; RV64IA-TSO-NEXT: lr.w.aqrl a3, (a0)4966; RV64IA-TSO-NEXT: bne a3, a1, .LBB29_34967; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB29_1 Depth=14968; RV64IA-TSO-NEXT: sc.w.rl a4, a2, (a0)4969; RV64IA-TSO-NEXT: bnez a4, .LBB29_14970; RV64IA-TSO-NEXT: .LBB29_3:4971; RV64IA-TSO-NEXT: ret4972;4973; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i32_seq_cst_seq_cst:4974; RV64IA-TSO-ZACAS: # %bb.0:4975; RV64IA-TSO-ZACAS-NEXT: fence rw, rw4976; RV64IA-TSO-ZACAS-NEXT: amocas.w a1, a2, (a0)4977; RV64IA-TSO-ZACAS-NEXT: ret4978;4979; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i32_seq_cst_seq_cst:4980; RV64IA-TSO-ZABHA: # %bb.0:4981; RV64IA-TSO-ZABHA-NEXT: fence rw, rw4982; RV64IA-TSO-ZABHA-NEXT: amocas.w a1, a2, (a0)4983; RV64IA-TSO-ZABHA-NEXT: ret4984 %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val seq_cst seq_cst4985 ret void4986}4987 4988define void @cmpxchg_i64_monotonic_monotonic(ptr %ptr, i64 %cmp, i64 %val) nounwind {4989; RV32I-LABEL: cmpxchg_i64_monotonic_monotonic:4990; RV32I: # %bb.0:4991; RV32I-NEXT: addi sp, sp, -164992; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4993; RV32I-NEXT: sw a1, 0(sp)4994; RV32I-NEXT: sw a2, 4(sp)4995; RV32I-NEXT: mv a1, sp4996; RV32I-NEXT: mv a2, a34997; RV32I-NEXT: mv a3, a44998; RV32I-NEXT: li a4, 04999; RV32I-NEXT: li a5, 05000; RV32I-NEXT: call __atomic_compare_exchange_85001; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5002; RV32I-NEXT: addi sp, sp, 165003; RV32I-NEXT: ret5004;5005; RV32IA-LABEL: cmpxchg_i64_monotonic_monotonic:5006; RV32IA: # %bb.0:5007; RV32IA-NEXT: addi sp, sp, -165008; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5009; RV32IA-NEXT: sw a1, 0(sp)5010; RV32IA-NEXT: sw a2, 4(sp)5011; RV32IA-NEXT: mv a1, sp5012; RV32IA-NEXT: mv a2, a35013; RV32IA-NEXT: mv a3, a45014; RV32IA-NEXT: li a4, 05015; RV32IA-NEXT: li a5, 05016; RV32IA-NEXT: call __atomic_compare_exchange_85017; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5018; RV32IA-NEXT: addi sp, sp, 165019; RV32IA-NEXT: ret5020;5021; RV64I-LABEL: cmpxchg_i64_monotonic_monotonic:5022; RV64I: # %bb.0:5023; RV64I-NEXT: addi sp, sp, -165024; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5025; RV64I-NEXT: sd a1, 0(sp)5026; RV64I-NEXT: mv a1, sp5027; RV64I-NEXT: li a3, 05028; RV64I-NEXT: li a4, 05029; RV64I-NEXT: call __atomic_compare_exchange_85030; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5031; RV64I-NEXT: addi sp, sp, 165032; RV64I-NEXT: ret5033;5034; RV64IA-WMO-LABEL: cmpxchg_i64_monotonic_monotonic:5035; RV64IA-WMO: # %bb.0:5036; RV64IA-WMO-NEXT: .LBB30_1: # =>This Inner Loop Header: Depth=15037; RV64IA-WMO-NEXT: lr.d a3, (a0)5038; RV64IA-WMO-NEXT: bne a3, a1, .LBB30_35039; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB30_1 Depth=15040; RV64IA-WMO-NEXT: sc.d a4, a2, (a0)5041; RV64IA-WMO-NEXT: bnez a4, .LBB30_15042; RV64IA-WMO-NEXT: .LBB30_3:5043; RV64IA-WMO-NEXT: ret5044;5045; RV64IA-ZACAS-LABEL: cmpxchg_i64_monotonic_monotonic:5046; RV64IA-ZACAS: # %bb.0:5047; RV64IA-ZACAS-NEXT: amocas.d a1, a2, (a0)5048; RV64IA-ZACAS-NEXT: ret5049;5050; RV64IA-ZABHA-LABEL: cmpxchg_i64_monotonic_monotonic:5051; RV64IA-ZABHA: # %bb.0:5052; RV64IA-ZABHA-NEXT: amocas.d a1, a2, (a0)5053; RV64IA-ZABHA-NEXT: ret5054;5055; RV64IA-TSO-LABEL: cmpxchg_i64_monotonic_monotonic:5056; RV64IA-TSO: # %bb.0:5057; RV64IA-TSO-NEXT: .LBB30_1: # =>This Inner Loop Header: Depth=15058; RV64IA-TSO-NEXT: lr.d a3, (a0)5059; RV64IA-TSO-NEXT: bne a3, a1, .LBB30_35060; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB30_1 Depth=15061; RV64IA-TSO-NEXT: sc.d a4, a2, (a0)5062; RV64IA-TSO-NEXT: bnez a4, .LBB30_15063; RV64IA-TSO-NEXT: .LBB30_3:5064; RV64IA-TSO-NEXT: ret5065 %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val monotonic monotonic5066 ret void5067}5068 5069define void @cmpxchg_i64_acquire_monotonic(ptr %ptr, i64 %cmp, i64 %val) nounwind {5070; RV32I-LABEL: cmpxchg_i64_acquire_monotonic:5071; RV32I: # %bb.0:5072; RV32I-NEXT: addi sp, sp, -165073; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5074; RV32I-NEXT: mv a5, a35075; RV32I-NEXT: mv a3, a45076; RV32I-NEXT: sw a1, 0(sp)5077; RV32I-NEXT: sw a2, 4(sp)5078; RV32I-NEXT: mv a1, sp5079; RV32I-NEXT: li a4, 25080; RV32I-NEXT: mv a2, a55081; RV32I-NEXT: li a5, 05082; RV32I-NEXT: call __atomic_compare_exchange_85083; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5084; RV32I-NEXT: addi sp, sp, 165085; RV32I-NEXT: ret5086;5087; RV32IA-LABEL: cmpxchg_i64_acquire_monotonic:5088; RV32IA: # %bb.0:5089; RV32IA-NEXT: addi sp, sp, -165090; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5091; RV32IA-NEXT: mv a5, a35092; RV32IA-NEXT: mv a3, a45093; RV32IA-NEXT: sw a1, 0(sp)5094; RV32IA-NEXT: sw a2, 4(sp)5095; RV32IA-NEXT: mv a1, sp5096; RV32IA-NEXT: li a4, 25097; RV32IA-NEXT: mv a2, a55098; RV32IA-NEXT: li a5, 05099; RV32IA-NEXT: call __atomic_compare_exchange_85100; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5101; RV32IA-NEXT: addi sp, sp, 165102; RV32IA-NEXT: ret5103;5104; RV64I-LABEL: cmpxchg_i64_acquire_monotonic:5105; RV64I: # %bb.0:5106; RV64I-NEXT: addi sp, sp, -165107; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5108; RV64I-NEXT: sd a1, 0(sp)5109; RV64I-NEXT: mv a1, sp5110; RV64I-NEXT: li a3, 25111; RV64I-NEXT: li a4, 05112; RV64I-NEXT: call __atomic_compare_exchange_85113; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5114; RV64I-NEXT: addi sp, sp, 165115; RV64I-NEXT: ret5116;5117; RV64IA-WMO-LABEL: cmpxchg_i64_acquire_monotonic:5118; RV64IA-WMO: # %bb.0:5119; RV64IA-WMO-NEXT: .LBB31_1: # =>This Inner Loop Header: Depth=15120; RV64IA-WMO-NEXT: lr.d.aq a3, (a0)5121; RV64IA-WMO-NEXT: bne a3, a1, .LBB31_35122; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB31_1 Depth=15123; RV64IA-WMO-NEXT: sc.d a4, a2, (a0)5124; RV64IA-WMO-NEXT: bnez a4, .LBB31_15125; RV64IA-WMO-NEXT: .LBB31_3:5126; RV64IA-WMO-NEXT: ret5127;5128; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_acquire_monotonic:5129; RV64IA-WMO-ZACAS: # %bb.0:5130; RV64IA-WMO-ZACAS-NEXT: amocas.d.aq a1, a2, (a0)5131; RV64IA-WMO-ZACAS-NEXT: ret5132;5133; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_acquire_monotonic:5134; RV64IA-WMO-ZABHA: # %bb.0:5135; RV64IA-WMO-ZABHA-NEXT: amocas.d.aq a1, a2, (a0)5136; RV64IA-WMO-ZABHA-NEXT: ret5137;5138; RV64IA-TSO-LABEL: cmpxchg_i64_acquire_monotonic:5139; RV64IA-TSO: # %bb.0:5140; RV64IA-TSO-NEXT: .LBB31_1: # =>This Inner Loop Header: Depth=15141; RV64IA-TSO-NEXT: lr.d a3, (a0)5142; RV64IA-TSO-NEXT: bne a3, a1, .LBB31_35143; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB31_1 Depth=15144; RV64IA-TSO-NEXT: sc.d a4, a2, (a0)5145; RV64IA-TSO-NEXT: bnez a4, .LBB31_15146; RV64IA-TSO-NEXT: .LBB31_3:5147; RV64IA-TSO-NEXT: ret5148;5149; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_acquire_monotonic:5150; RV64IA-TSO-ZACAS: # %bb.0:5151; RV64IA-TSO-ZACAS-NEXT: amocas.d a1, a2, (a0)5152; RV64IA-TSO-ZACAS-NEXT: ret5153;5154; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_acquire_monotonic:5155; RV64IA-TSO-ZABHA: # %bb.0:5156; RV64IA-TSO-ZABHA-NEXT: amocas.d a1, a2, (a0)5157; RV64IA-TSO-ZABHA-NEXT: ret5158 %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val acquire monotonic5159 ret void5160}5161 5162define void @cmpxchg_i64_acquire_acquire(ptr %ptr, i64 %cmp, i64 %val) nounwind {5163; RV32I-LABEL: cmpxchg_i64_acquire_acquire:5164; RV32I: # %bb.0:5165; RV32I-NEXT: addi sp, sp, -165166; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5167; RV32I-NEXT: mv a6, a35168; RV32I-NEXT: mv a3, a45169; RV32I-NEXT: sw a1, 0(sp)5170; RV32I-NEXT: sw a2, 4(sp)5171; RV32I-NEXT: mv a1, sp5172; RV32I-NEXT: li a4, 25173; RV32I-NEXT: li a5, 25174; RV32I-NEXT: mv a2, a65175; RV32I-NEXT: call __atomic_compare_exchange_85176; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5177; RV32I-NEXT: addi sp, sp, 165178; RV32I-NEXT: ret5179;5180; RV32IA-LABEL: cmpxchg_i64_acquire_acquire:5181; RV32IA: # %bb.0:5182; RV32IA-NEXT: addi sp, sp, -165183; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5184; RV32IA-NEXT: mv a6, a35185; RV32IA-NEXT: mv a3, a45186; RV32IA-NEXT: sw a1, 0(sp)5187; RV32IA-NEXT: sw a2, 4(sp)5188; RV32IA-NEXT: mv a1, sp5189; RV32IA-NEXT: li a4, 25190; RV32IA-NEXT: li a5, 25191; RV32IA-NEXT: mv a2, a65192; RV32IA-NEXT: call __atomic_compare_exchange_85193; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5194; RV32IA-NEXT: addi sp, sp, 165195; RV32IA-NEXT: ret5196;5197; RV64I-LABEL: cmpxchg_i64_acquire_acquire:5198; RV64I: # %bb.0:5199; RV64I-NEXT: addi sp, sp, -165200; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5201; RV64I-NEXT: sd a1, 0(sp)5202; RV64I-NEXT: mv a1, sp5203; RV64I-NEXT: li a3, 25204; RV64I-NEXT: li a4, 25205; RV64I-NEXT: call __atomic_compare_exchange_85206; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5207; RV64I-NEXT: addi sp, sp, 165208; RV64I-NEXT: ret5209;5210; RV64IA-WMO-LABEL: cmpxchg_i64_acquire_acquire:5211; RV64IA-WMO: # %bb.0:5212; RV64IA-WMO-NEXT: .LBB32_1: # =>This Inner Loop Header: Depth=15213; RV64IA-WMO-NEXT: lr.d.aq a3, (a0)5214; RV64IA-WMO-NEXT: bne a3, a1, .LBB32_35215; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB32_1 Depth=15216; RV64IA-WMO-NEXT: sc.d a4, a2, (a0)5217; RV64IA-WMO-NEXT: bnez a4, .LBB32_15218; RV64IA-WMO-NEXT: .LBB32_3:5219; RV64IA-WMO-NEXT: ret5220;5221; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_acquire_acquire:5222; RV64IA-WMO-ZACAS: # %bb.0:5223; RV64IA-WMO-ZACAS-NEXT: amocas.d.aq a1, a2, (a0)5224; RV64IA-WMO-ZACAS-NEXT: ret5225;5226; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_acquire_acquire:5227; RV64IA-WMO-ZABHA: # %bb.0:5228; RV64IA-WMO-ZABHA-NEXT: amocas.d.aq a1, a2, (a0)5229; RV64IA-WMO-ZABHA-NEXT: ret5230;5231; RV64IA-TSO-LABEL: cmpxchg_i64_acquire_acquire:5232; RV64IA-TSO: # %bb.0:5233; RV64IA-TSO-NEXT: .LBB32_1: # =>This Inner Loop Header: Depth=15234; RV64IA-TSO-NEXT: lr.d a3, (a0)5235; RV64IA-TSO-NEXT: bne a3, a1, .LBB32_35236; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB32_1 Depth=15237; RV64IA-TSO-NEXT: sc.d a4, a2, (a0)5238; RV64IA-TSO-NEXT: bnez a4, .LBB32_15239; RV64IA-TSO-NEXT: .LBB32_3:5240; RV64IA-TSO-NEXT: ret5241;5242; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_acquire_acquire:5243; RV64IA-TSO-ZACAS: # %bb.0:5244; RV64IA-TSO-ZACAS-NEXT: amocas.d a1, a2, (a0)5245; RV64IA-TSO-ZACAS-NEXT: ret5246;5247; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_acquire_acquire:5248; RV64IA-TSO-ZABHA: # %bb.0:5249; RV64IA-TSO-ZABHA-NEXT: amocas.d a1, a2, (a0)5250; RV64IA-TSO-ZABHA-NEXT: ret5251 %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val acquire acquire5252 ret void5253}5254 5255define void @cmpxchg_i64_release_monotonic(ptr %ptr, i64 %cmp, i64 %val) nounwind {5256; RV32I-LABEL: cmpxchg_i64_release_monotonic:5257; RV32I: # %bb.0:5258; RV32I-NEXT: addi sp, sp, -165259; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5260; RV32I-NEXT: mv a5, a35261; RV32I-NEXT: mv a3, a45262; RV32I-NEXT: sw a1, 0(sp)5263; RV32I-NEXT: sw a2, 4(sp)5264; RV32I-NEXT: mv a1, sp5265; RV32I-NEXT: li a4, 35266; RV32I-NEXT: mv a2, a55267; RV32I-NEXT: li a5, 05268; RV32I-NEXT: call __atomic_compare_exchange_85269; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5270; RV32I-NEXT: addi sp, sp, 165271; RV32I-NEXT: ret5272;5273; RV32IA-LABEL: cmpxchg_i64_release_monotonic:5274; RV32IA: # %bb.0:5275; RV32IA-NEXT: addi sp, sp, -165276; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5277; RV32IA-NEXT: mv a5, a35278; RV32IA-NEXT: mv a3, a45279; RV32IA-NEXT: sw a1, 0(sp)5280; RV32IA-NEXT: sw a2, 4(sp)5281; RV32IA-NEXT: mv a1, sp5282; RV32IA-NEXT: li a4, 35283; RV32IA-NEXT: mv a2, a55284; RV32IA-NEXT: li a5, 05285; RV32IA-NEXT: call __atomic_compare_exchange_85286; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5287; RV32IA-NEXT: addi sp, sp, 165288; RV32IA-NEXT: ret5289;5290; RV64I-LABEL: cmpxchg_i64_release_monotonic:5291; RV64I: # %bb.0:5292; RV64I-NEXT: addi sp, sp, -165293; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5294; RV64I-NEXT: sd a1, 0(sp)5295; RV64I-NEXT: mv a1, sp5296; RV64I-NEXT: li a3, 35297; RV64I-NEXT: li a4, 05298; RV64I-NEXT: call __atomic_compare_exchange_85299; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5300; RV64I-NEXT: addi sp, sp, 165301; RV64I-NEXT: ret5302;5303; RV64IA-WMO-LABEL: cmpxchg_i64_release_monotonic:5304; RV64IA-WMO: # %bb.0:5305; RV64IA-WMO-NEXT: .LBB33_1: # =>This Inner Loop Header: Depth=15306; RV64IA-WMO-NEXT: lr.d a3, (a0)5307; RV64IA-WMO-NEXT: bne a3, a1, .LBB33_35308; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB33_1 Depth=15309; RV64IA-WMO-NEXT: sc.d.rl a4, a2, (a0)5310; RV64IA-WMO-NEXT: bnez a4, .LBB33_15311; RV64IA-WMO-NEXT: .LBB33_3:5312; RV64IA-WMO-NEXT: ret5313;5314; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_release_monotonic:5315; RV64IA-WMO-ZACAS: # %bb.0:5316; RV64IA-WMO-ZACAS-NEXT: amocas.d.rl a1, a2, (a0)5317; RV64IA-WMO-ZACAS-NEXT: ret5318;5319; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_release_monotonic:5320; RV64IA-WMO-ZABHA: # %bb.0:5321; RV64IA-WMO-ZABHA-NEXT: amocas.d.rl a1, a2, (a0)5322; RV64IA-WMO-ZABHA-NEXT: ret5323;5324; RV64IA-TSO-LABEL: cmpxchg_i64_release_monotonic:5325; RV64IA-TSO: # %bb.0:5326; RV64IA-TSO-NEXT: .LBB33_1: # =>This Inner Loop Header: Depth=15327; RV64IA-TSO-NEXT: lr.d a3, (a0)5328; RV64IA-TSO-NEXT: bne a3, a1, .LBB33_35329; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB33_1 Depth=15330; RV64IA-TSO-NEXT: sc.d a4, a2, (a0)5331; RV64IA-TSO-NEXT: bnez a4, .LBB33_15332; RV64IA-TSO-NEXT: .LBB33_3:5333; RV64IA-TSO-NEXT: ret5334;5335; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_release_monotonic:5336; RV64IA-TSO-ZACAS: # %bb.0:5337; RV64IA-TSO-ZACAS-NEXT: amocas.d a1, a2, (a0)5338; RV64IA-TSO-ZACAS-NEXT: ret5339;5340; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_release_monotonic:5341; RV64IA-TSO-ZABHA: # %bb.0:5342; RV64IA-TSO-ZABHA-NEXT: amocas.d a1, a2, (a0)5343; RV64IA-TSO-ZABHA-NEXT: ret5344 %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val release monotonic5345 ret void5346}5347 5348define void @cmpxchg_i64_release_acquire(ptr %ptr, i64 %cmp, i64 %val) nounwind {5349; RV32I-LABEL: cmpxchg_i64_release_acquire:5350; RV32I: # %bb.0:5351; RV32I-NEXT: addi sp, sp, -165352; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5353; RV32I-NEXT: mv a6, a35354; RV32I-NEXT: mv a3, a45355; RV32I-NEXT: sw a1, 0(sp)5356; RV32I-NEXT: sw a2, 4(sp)5357; RV32I-NEXT: mv a1, sp5358; RV32I-NEXT: li a4, 35359; RV32I-NEXT: li a5, 25360; RV32I-NEXT: mv a2, a65361; RV32I-NEXT: call __atomic_compare_exchange_85362; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5363; RV32I-NEXT: addi sp, sp, 165364; RV32I-NEXT: ret5365;5366; RV32IA-LABEL: cmpxchg_i64_release_acquire:5367; RV32IA: # %bb.0:5368; RV32IA-NEXT: addi sp, sp, -165369; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5370; RV32IA-NEXT: mv a6, a35371; RV32IA-NEXT: mv a3, a45372; RV32IA-NEXT: sw a1, 0(sp)5373; RV32IA-NEXT: sw a2, 4(sp)5374; RV32IA-NEXT: mv a1, sp5375; RV32IA-NEXT: li a4, 35376; RV32IA-NEXT: li a5, 25377; RV32IA-NEXT: mv a2, a65378; RV32IA-NEXT: call __atomic_compare_exchange_85379; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5380; RV32IA-NEXT: addi sp, sp, 165381; RV32IA-NEXT: ret5382;5383; RV64I-LABEL: cmpxchg_i64_release_acquire:5384; RV64I: # %bb.0:5385; RV64I-NEXT: addi sp, sp, -165386; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5387; RV64I-NEXT: sd a1, 0(sp)5388; RV64I-NEXT: mv a1, sp5389; RV64I-NEXT: li a3, 35390; RV64I-NEXT: li a4, 25391; RV64I-NEXT: call __atomic_compare_exchange_85392; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5393; RV64I-NEXT: addi sp, sp, 165394; RV64I-NEXT: ret5395;5396; RV64IA-WMO-LABEL: cmpxchg_i64_release_acquire:5397; RV64IA-WMO: # %bb.0:5398; RV64IA-WMO-NEXT: .LBB34_1: # =>This Inner Loop Header: Depth=15399; RV64IA-WMO-NEXT: lr.d.aq a3, (a0)5400; RV64IA-WMO-NEXT: bne a3, a1, .LBB34_35401; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB34_1 Depth=15402; RV64IA-WMO-NEXT: sc.d.rl a4, a2, (a0)5403; RV64IA-WMO-NEXT: bnez a4, .LBB34_15404; RV64IA-WMO-NEXT: .LBB34_3:5405; RV64IA-WMO-NEXT: ret5406;5407; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_release_acquire:5408; RV64IA-WMO-ZACAS: # %bb.0:5409; RV64IA-WMO-ZACAS-NEXT: amocas.d.aqrl a1, a2, (a0)5410; RV64IA-WMO-ZACAS-NEXT: ret5411;5412; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_release_acquire:5413; RV64IA-WMO-ZABHA: # %bb.0:5414; RV64IA-WMO-ZABHA-NEXT: amocas.d.aqrl a1, a2, (a0)5415; RV64IA-WMO-ZABHA-NEXT: ret5416;5417; RV64IA-TSO-LABEL: cmpxchg_i64_release_acquire:5418; RV64IA-TSO: # %bb.0:5419; RV64IA-TSO-NEXT: .LBB34_1: # =>This Inner Loop Header: Depth=15420; RV64IA-TSO-NEXT: lr.d a3, (a0)5421; RV64IA-TSO-NEXT: bne a3, a1, .LBB34_35422; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB34_1 Depth=15423; RV64IA-TSO-NEXT: sc.d a4, a2, (a0)5424; RV64IA-TSO-NEXT: bnez a4, .LBB34_15425; RV64IA-TSO-NEXT: .LBB34_3:5426; RV64IA-TSO-NEXT: ret5427;5428; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_release_acquire:5429; RV64IA-TSO-ZACAS: # %bb.0:5430; RV64IA-TSO-ZACAS-NEXT: amocas.d a1, a2, (a0)5431; RV64IA-TSO-ZACAS-NEXT: ret5432;5433; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_release_acquire:5434; RV64IA-TSO-ZABHA: # %bb.0:5435; RV64IA-TSO-ZABHA-NEXT: amocas.d a1, a2, (a0)5436; RV64IA-TSO-ZABHA-NEXT: ret5437 %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val release acquire5438 ret void5439}5440 5441define void @cmpxchg_i64_acq_rel_monotonic(ptr %ptr, i64 %cmp, i64 %val) nounwind {5442; RV32I-LABEL: cmpxchg_i64_acq_rel_monotonic:5443; RV32I: # %bb.0:5444; RV32I-NEXT: addi sp, sp, -165445; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5446; RV32I-NEXT: mv a5, a35447; RV32I-NEXT: mv a3, a45448; RV32I-NEXT: sw a1, 0(sp)5449; RV32I-NEXT: sw a2, 4(sp)5450; RV32I-NEXT: mv a1, sp5451; RV32I-NEXT: li a4, 45452; RV32I-NEXT: mv a2, a55453; RV32I-NEXT: li a5, 05454; RV32I-NEXT: call __atomic_compare_exchange_85455; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5456; RV32I-NEXT: addi sp, sp, 165457; RV32I-NEXT: ret5458;5459; RV32IA-LABEL: cmpxchg_i64_acq_rel_monotonic:5460; RV32IA: # %bb.0:5461; RV32IA-NEXT: addi sp, sp, -165462; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5463; RV32IA-NEXT: mv a5, a35464; RV32IA-NEXT: mv a3, a45465; RV32IA-NEXT: sw a1, 0(sp)5466; RV32IA-NEXT: sw a2, 4(sp)5467; RV32IA-NEXT: mv a1, sp5468; RV32IA-NEXT: li a4, 45469; RV32IA-NEXT: mv a2, a55470; RV32IA-NEXT: li a5, 05471; RV32IA-NEXT: call __atomic_compare_exchange_85472; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5473; RV32IA-NEXT: addi sp, sp, 165474; RV32IA-NEXT: ret5475;5476; RV64I-LABEL: cmpxchg_i64_acq_rel_monotonic:5477; RV64I: # %bb.0:5478; RV64I-NEXT: addi sp, sp, -165479; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5480; RV64I-NEXT: sd a1, 0(sp)5481; RV64I-NEXT: mv a1, sp5482; RV64I-NEXT: li a3, 45483; RV64I-NEXT: li a4, 05484; RV64I-NEXT: call __atomic_compare_exchange_85485; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5486; RV64I-NEXT: addi sp, sp, 165487; RV64I-NEXT: ret5488;5489; RV64IA-WMO-LABEL: cmpxchg_i64_acq_rel_monotonic:5490; RV64IA-WMO: # %bb.0:5491; RV64IA-WMO-NEXT: .LBB35_1: # =>This Inner Loop Header: Depth=15492; RV64IA-WMO-NEXT: lr.d.aq a3, (a0)5493; RV64IA-WMO-NEXT: bne a3, a1, .LBB35_35494; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB35_1 Depth=15495; RV64IA-WMO-NEXT: sc.d.rl a4, a2, (a0)5496; RV64IA-WMO-NEXT: bnez a4, .LBB35_15497; RV64IA-WMO-NEXT: .LBB35_3:5498; RV64IA-WMO-NEXT: ret5499;5500; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_acq_rel_monotonic:5501; RV64IA-WMO-ZACAS: # %bb.0:5502; RV64IA-WMO-ZACAS-NEXT: amocas.d.aqrl a1, a2, (a0)5503; RV64IA-WMO-ZACAS-NEXT: ret5504;5505; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_acq_rel_monotonic:5506; RV64IA-WMO-ZABHA: # %bb.0:5507; RV64IA-WMO-ZABHA-NEXT: amocas.d.aqrl a1, a2, (a0)5508; RV64IA-WMO-ZABHA-NEXT: ret5509;5510; RV64IA-TSO-LABEL: cmpxchg_i64_acq_rel_monotonic:5511; RV64IA-TSO: # %bb.0:5512; RV64IA-TSO-NEXT: .LBB35_1: # =>This Inner Loop Header: Depth=15513; RV64IA-TSO-NEXT: lr.d a3, (a0)5514; RV64IA-TSO-NEXT: bne a3, a1, .LBB35_35515; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB35_1 Depth=15516; RV64IA-TSO-NEXT: sc.d a4, a2, (a0)5517; RV64IA-TSO-NEXT: bnez a4, .LBB35_15518; RV64IA-TSO-NEXT: .LBB35_3:5519; RV64IA-TSO-NEXT: ret5520;5521; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_acq_rel_monotonic:5522; RV64IA-TSO-ZACAS: # %bb.0:5523; RV64IA-TSO-ZACAS-NEXT: amocas.d a1, a2, (a0)5524; RV64IA-TSO-ZACAS-NEXT: ret5525;5526; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_acq_rel_monotonic:5527; RV64IA-TSO-ZABHA: # %bb.0:5528; RV64IA-TSO-ZABHA-NEXT: amocas.d a1, a2, (a0)5529; RV64IA-TSO-ZABHA-NEXT: ret5530 %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val acq_rel monotonic5531 ret void5532}5533 5534define void @cmpxchg_i64_acq_rel_acquire(ptr %ptr, i64 %cmp, i64 %val) nounwind {5535; RV32I-LABEL: cmpxchg_i64_acq_rel_acquire:5536; RV32I: # %bb.0:5537; RV32I-NEXT: addi sp, sp, -165538; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5539; RV32I-NEXT: mv a6, a35540; RV32I-NEXT: mv a3, a45541; RV32I-NEXT: sw a1, 0(sp)5542; RV32I-NEXT: sw a2, 4(sp)5543; RV32I-NEXT: mv a1, sp5544; RV32I-NEXT: li a4, 45545; RV32I-NEXT: li a5, 25546; RV32I-NEXT: mv a2, a65547; RV32I-NEXT: call __atomic_compare_exchange_85548; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5549; RV32I-NEXT: addi sp, sp, 165550; RV32I-NEXT: ret5551;5552; RV32IA-LABEL: cmpxchg_i64_acq_rel_acquire:5553; RV32IA: # %bb.0:5554; RV32IA-NEXT: addi sp, sp, -165555; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5556; RV32IA-NEXT: mv a6, a35557; RV32IA-NEXT: mv a3, a45558; RV32IA-NEXT: sw a1, 0(sp)5559; RV32IA-NEXT: sw a2, 4(sp)5560; RV32IA-NEXT: mv a1, sp5561; RV32IA-NEXT: li a4, 45562; RV32IA-NEXT: li a5, 25563; RV32IA-NEXT: mv a2, a65564; RV32IA-NEXT: call __atomic_compare_exchange_85565; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5566; RV32IA-NEXT: addi sp, sp, 165567; RV32IA-NEXT: ret5568;5569; RV64I-LABEL: cmpxchg_i64_acq_rel_acquire:5570; RV64I: # %bb.0:5571; RV64I-NEXT: addi sp, sp, -165572; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5573; RV64I-NEXT: sd a1, 0(sp)5574; RV64I-NEXT: mv a1, sp5575; RV64I-NEXT: li a3, 45576; RV64I-NEXT: li a4, 25577; RV64I-NEXT: call __atomic_compare_exchange_85578; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5579; RV64I-NEXT: addi sp, sp, 165580; RV64I-NEXT: ret5581;5582; RV64IA-WMO-LABEL: cmpxchg_i64_acq_rel_acquire:5583; RV64IA-WMO: # %bb.0:5584; RV64IA-WMO-NEXT: .LBB36_1: # =>This Inner Loop Header: Depth=15585; RV64IA-WMO-NEXT: lr.d.aq a3, (a0)5586; RV64IA-WMO-NEXT: bne a3, a1, .LBB36_35587; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB36_1 Depth=15588; RV64IA-WMO-NEXT: sc.d.rl a4, a2, (a0)5589; RV64IA-WMO-NEXT: bnez a4, .LBB36_15590; RV64IA-WMO-NEXT: .LBB36_3:5591; RV64IA-WMO-NEXT: ret5592;5593; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_acq_rel_acquire:5594; RV64IA-WMO-ZACAS: # %bb.0:5595; RV64IA-WMO-ZACAS-NEXT: amocas.d.aqrl a1, a2, (a0)5596; RV64IA-WMO-ZACAS-NEXT: ret5597;5598; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_acq_rel_acquire:5599; RV64IA-WMO-ZABHA: # %bb.0:5600; RV64IA-WMO-ZABHA-NEXT: amocas.d.aqrl a1, a2, (a0)5601; RV64IA-WMO-ZABHA-NEXT: ret5602;5603; RV64IA-TSO-LABEL: cmpxchg_i64_acq_rel_acquire:5604; RV64IA-TSO: # %bb.0:5605; RV64IA-TSO-NEXT: .LBB36_1: # =>This Inner Loop Header: Depth=15606; RV64IA-TSO-NEXT: lr.d a3, (a0)5607; RV64IA-TSO-NEXT: bne a3, a1, .LBB36_35608; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB36_1 Depth=15609; RV64IA-TSO-NEXT: sc.d a4, a2, (a0)5610; RV64IA-TSO-NEXT: bnez a4, .LBB36_15611; RV64IA-TSO-NEXT: .LBB36_3:5612; RV64IA-TSO-NEXT: ret5613;5614; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_acq_rel_acquire:5615; RV64IA-TSO-ZACAS: # %bb.0:5616; RV64IA-TSO-ZACAS-NEXT: amocas.d a1, a2, (a0)5617; RV64IA-TSO-ZACAS-NEXT: ret5618;5619; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_acq_rel_acquire:5620; RV64IA-TSO-ZABHA: # %bb.0:5621; RV64IA-TSO-ZABHA-NEXT: amocas.d a1, a2, (a0)5622; RV64IA-TSO-ZABHA-NEXT: ret5623 %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val acq_rel acquire5624 ret void5625}5626 5627define void @cmpxchg_i64_seq_cst_monotonic(ptr %ptr, i64 %cmp, i64 %val) nounwind {5628; RV32I-LABEL: cmpxchg_i64_seq_cst_monotonic:5629; RV32I: # %bb.0:5630; RV32I-NEXT: addi sp, sp, -165631; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5632; RV32I-NEXT: mv a5, a35633; RV32I-NEXT: mv a3, a45634; RV32I-NEXT: sw a1, 0(sp)5635; RV32I-NEXT: sw a2, 4(sp)5636; RV32I-NEXT: mv a1, sp5637; RV32I-NEXT: li a4, 55638; RV32I-NEXT: mv a2, a55639; RV32I-NEXT: li a5, 05640; RV32I-NEXT: call __atomic_compare_exchange_85641; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5642; RV32I-NEXT: addi sp, sp, 165643; RV32I-NEXT: ret5644;5645; RV32IA-LABEL: cmpxchg_i64_seq_cst_monotonic:5646; RV32IA: # %bb.0:5647; RV32IA-NEXT: addi sp, sp, -165648; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5649; RV32IA-NEXT: mv a5, a35650; RV32IA-NEXT: mv a3, a45651; RV32IA-NEXT: sw a1, 0(sp)5652; RV32IA-NEXT: sw a2, 4(sp)5653; RV32IA-NEXT: mv a1, sp5654; RV32IA-NEXT: li a4, 55655; RV32IA-NEXT: mv a2, a55656; RV32IA-NEXT: li a5, 05657; RV32IA-NEXT: call __atomic_compare_exchange_85658; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5659; RV32IA-NEXT: addi sp, sp, 165660; RV32IA-NEXT: ret5661;5662; RV64I-LABEL: cmpxchg_i64_seq_cst_monotonic:5663; RV64I: # %bb.0:5664; RV64I-NEXT: addi sp, sp, -165665; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5666; RV64I-NEXT: sd a1, 0(sp)5667; RV64I-NEXT: mv a1, sp5668; RV64I-NEXT: li a3, 55669; RV64I-NEXT: li a4, 05670; RV64I-NEXT: call __atomic_compare_exchange_85671; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5672; RV64I-NEXT: addi sp, sp, 165673; RV64I-NEXT: ret5674;5675; RV64IA-WMO-LABEL: cmpxchg_i64_seq_cst_monotonic:5676; RV64IA-WMO: # %bb.0:5677; RV64IA-WMO-NEXT: .LBB37_1: # =>This Inner Loop Header: Depth=15678; RV64IA-WMO-NEXT: lr.d.aqrl a3, (a0)5679; RV64IA-WMO-NEXT: bne a3, a1, .LBB37_35680; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB37_1 Depth=15681; RV64IA-WMO-NEXT: sc.d.rl a4, a2, (a0)5682; RV64IA-WMO-NEXT: bnez a4, .LBB37_15683; RV64IA-WMO-NEXT: .LBB37_3:5684; RV64IA-WMO-NEXT: ret5685;5686; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_seq_cst_monotonic:5687; RV64IA-WMO-ZACAS: # %bb.0:5688; RV64IA-WMO-ZACAS-NEXT: amocas.d.aqrl a1, a2, (a0)5689; RV64IA-WMO-ZACAS-NEXT: ret5690;5691; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_seq_cst_monotonic:5692; RV64IA-WMO-ZABHA: # %bb.0:5693; RV64IA-WMO-ZABHA-NEXT: amocas.d.aqrl a1, a2, (a0)5694; RV64IA-WMO-ZABHA-NEXT: ret5695;5696; RV64IA-TSO-LABEL: cmpxchg_i64_seq_cst_monotonic:5697; RV64IA-TSO: # %bb.0:5698; RV64IA-TSO-NEXT: .LBB37_1: # =>This Inner Loop Header: Depth=15699; RV64IA-TSO-NEXT: lr.d.aqrl a3, (a0)5700; RV64IA-TSO-NEXT: bne a3, a1, .LBB37_35701; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB37_1 Depth=15702; RV64IA-TSO-NEXT: sc.d.rl a4, a2, (a0)5703; RV64IA-TSO-NEXT: bnez a4, .LBB37_15704; RV64IA-TSO-NEXT: .LBB37_3:5705; RV64IA-TSO-NEXT: ret5706;5707; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_seq_cst_monotonic:5708; RV64IA-TSO-ZACAS: # %bb.0:5709; RV64IA-TSO-ZACAS-NEXT: amocas.d a1, a2, (a0)5710; RV64IA-TSO-ZACAS-NEXT: ret5711;5712; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_seq_cst_monotonic:5713; RV64IA-TSO-ZABHA: # %bb.0:5714; RV64IA-TSO-ZABHA-NEXT: amocas.d a1, a2, (a0)5715; RV64IA-TSO-ZABHA-NEXT: ret5716 %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val seq_cst monotonic5717 ret void5718}5719 5720define void @cmpxchg_i64_seq_cst_acquire(ptr %ptr, i64 %cmp, i64 %val) nounwind {5721; RV32I-LABEL: cmpxchg_i64_seq_cst_acquire:5722; RV32I: # %bb.0:5723; RV32I-NEXT: addi sp, sp, -165724; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5725; RV32I-NEXT: mv a6, a35726; RV32I-NEXT: mv a3, a45727; RV32I-NEXT: sw a1, 0(sp)5728; RV32I-NEXT: sw a2, 4(sp)5729; RV32I-NEXT: mv a1, sp5730; RV32I-NEXT: li a4, 55731; RV32I-NEXT: li a5, 25732; RV32I-NEXT: mv a2, a65733; RV32I-NEXT: call __atomic_compare_exchange_85734; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5735; RV32I-NEXT: addi sp, sp, 165736; RV32I-NEXT: ret5737;5738; RV32IA-LABEL: cmpxchg_i64_seq_cst_acquire:5739; RV32IA: # %bb.0:5740; RV32IA-NEXT: addi sp, sp, -165741; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5742; RV32IA-NEXT: mv a6, a35743; RV32IA-NEXT: mv a3, a45744; RV32IA-NEXT: sw a1, 0(sp)5745; RV32IA-NEXT: sw a2, 4(sp)5746; RV32IA-NEXT: mv a1, sp5747; RV32IA-NEXT: li a4, 55748; RV32IA-NEXT: li a5, 25749; RV32IA-NEXT: mv a2, a65750; RV32IA-NEXT: call __atomic_compare_exchange_85751; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5752; RV32IA-NEXT: addi sp, sp, 165753; RV32IA-NEXT: ret5754;5755; RV64I-LABEL: cmpxchg_i64_seq_cst_acquire:5756; RV64I: # %bb.0:5757; RV64I-NEXT: addi sp, sp, -165758; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5759; RV64I-NEXT: sd a1, 0(sp)5760; RV64I-NEXT: mv a1, sp5761; RV64I-NEXT: li a3, 55762; RV64I-NEXT: li a4, 25763; RV64I-NEXT: call __atomic_compare_exchange_85764; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5765; RV64I-NEXT: addi sp, sp, 165766; RV64I-NEXT: ret5767;5768; RV64IA-WMO-LABEL: cmpxchg_i64_seq_cst_acquire:5769; RV64IA-WMO: # %bb.0:5770; RV64IA-WMO-NEXT: .LBB38_1: # =>This Inner Loop Header: Depth=15771; RV64IA-WMO-NEXT: lr.d.aqrl a3, (a0)5772; RV64IA-WMO-NEXT: bne a3, a1, .LBB38_35773; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB38_1 Depth=15774; RV64IA-WMO-NEXT: sc.d.rl a4, a2, (a0)5775; RV64IA-WMO-NEXT: bnez a4, .LBB38_15776; RV64IA-WMO-NEXT: .LBB38_3:5777; RV64IA-WMO-NEXT: ret5778;5779; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_seq_cst_acquire:5780; RV64IA-WMO-ZACAS: # %bb.0:5781; RV64IA-WMO-ZACAS-NEXT: amocas.d.aqrl a1, a2, (a0)5782; RV64IA-WMO-ZACAS-NEXT: ret5783;5784; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_seq_cst_acquire:5785; RV64IA-WMO-ZABHA: # %bb.0:5786; RV64IA-WMO-ZABHA-NEXT: amocas.d.aqrl a1, a2, (a0)5787; RV64IA-WMO-ZABHA-NEXT: ret5788;5789; RV64IA-TSO-LABEL: cmpxchg_i64_seq_cst_acquire:5790; RV64IA-TSO: # %bb.0:5791; RV64IA-TSO-NEXT: .LBB38_1: # =>This Inner Loop Header: Depth=15792; RV64IA-TSO-NEXT: lr.d.aqrl a3, (a0)5793; RV64IA-TSO-NEXT: bne a3, a1, .LBB38_35794; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB38_1 Depth=15795; RV64IA-TSO-NEXT: sc.d.rl a4, a2, (a0)5796; RV64IA-TSO-NEXT: bnez a4, .LBB38_15797; RV64IA-TSO-NEXT: .LBB38_3:5798; RV64IA-TSO-NEXT: ret5799;5800; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_seq_cst_acquire:5801; RV64IA-TSO-ZACAS: # %bb.0:5802; RV64IA-TSO-ZACAS-NEXT: amocas.d a1, a2, (a0)5803; RV64IA-TSO-ZACAS-NEXT: ret5804;5805; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_seq_cst_acquire:5806; RV64IA-TSO-ZABHA: # %bb.0:5807; RV64IA-TSO-ZABHA-NEXT: amocas.d a1, a2, (a0)5808; RV64IA-TSO-ZABHA-NEXT: ret5809 %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val seq_cst acquire5810 ret void5811}5812 5813define void @cmpxchg_i64_seq_cst_seq_cst(ptr %ptr, i64 %cmp, i64 %val) nounwind {5814; RV32I-LABEL: cmpxchg_i64_seq_cst_seq_cst:5815; RV32I: # %bb.0:5816; RV32I-NEXT: addi sp, sp, -165817; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5818; RV32I-NEXT: mv a6, a35819; RV32I-NEXT: mv a3, a45820; RV32I-NEXT: sw a1, 0(sp)5821; RV32I-NEXT: sw a2, 4(sp)5822; RV32I-NEXT: mv a1, sp5823; RV32I-NEXT: li a4, 55824; RV32I-NEXT: li a5, 55825; RV32I-NEXT: mv a2, a65826; RV32I-NEXT: call __atomic_compare_exchange_85827; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5828; RV32I-NEXT: addi sp, sp, 165829; RV32I-NEXT: ret5830;5831; RV32IA-LABEL: cmpxchg_i64_seq_cst_seq_cst:5832; RV32IA: # %bb.0:5833; RV32IA-NEXT: addi sp, sp, -165834; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5835; RV32IA-NEXT: mv a6, a35836; RV32IA-NEXT: mv a3, a45837; RV32IA-NEXT: sw a1, 0(sp)5838; RV32IA-NEXT: sw a2, 4(sp)5839; RV32IA-NEXT: mv a1, sp5840; RV32IA-NEXT: li a4, 55841; RV32IA-NEXT: li a5, 55842; RV32IA-NEXT: mv a2, a65843; RV32IA-NEXT: call __atomic_compare_exchange_85844; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5845; RV32IA-NEXT: addi sp, sp, 165846; RV32IA-NEXT: ret5847;5848; RV64I-LABEL: cmpxchg_i64_seq_cst_seq_cst:5849; RV64I: # %bb.0:5850; RV64I-NEXT: addi sp, sp, -165851; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5852; RV64I-NEXT: sd a1, 0(sp)5853; RV64I-NEXT: mv a1, sp5854; RV64I-NEXT: li a3, 55855; RV64I-NEXT: li a4, 55856; RV64I-NEXT: call __atomic_compare_exchange_85857; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5858; RV64I-NEXT: addi sp, sp, 165859; RV64I-NEXT: ret5860;5861; RV64IA-WMO-LABEL: cmpxchg_i64_seq_cst_seq_cst:5862; RV64IA-WMO: # %bb.0:5863; RV64IA-WMO-NEXT: .LBB39_1: # =>This Inner Loop Header: Depth=15864; RV64IA-WMO-NEXT: lr.d.aqrl a3, (a0)5865; RV64IA-WMO-NEXT: bne a3, a1, .LBB39_35866; RV64IA-WMO-NEXT: # %bb.2: # in Loop: Header=BB39_1 Depth=15867; RV64IA-WMO-NEXT: sc.d.rl a4, a2, (a0)5868; RV64IA-WMO-NEXT: bnez a4, .LBB39_15869; RV64IA-WMO-NEXT: .LBB39_3:5870; RV64IA-WMO-NEXT: ret5871;5872; RV64IA-WMO-ZACAS-LABEL: cmpxchg_i64_seq_cst_seq_cst:5873; RV64IA-WMO-ZACAS: # %bb.0:5874; RV64IA-WMO-ZACAS-NEXT: fence rw, rw5875; RV64IA-WMO-ZACAS-NEXT: amocas.d.aqrl a1, a2, (a0)5876; RV64IA-WMO-ZACAS-NEXT: ret5877;5878; RV64IA-WMO-ZABHA-LABEL: cmpxchg_i64_seq_cst_seq_cst:5879; RV64IA-WMO-ZABHA: # %bb.0:5880; RV64IA-WMO-ZABHA-NEXT: fence rw, rw5881; RV64IA-WMO-ZABHA-NEXT: amocas.d.aqrl a1, a2, (a0)5882; RV64IA-WMO-ZABHA-NEXT: ret5883;5884; RV64IA-TSO-LABEL: cmpxchg_i64_seq_cst_seq_cst:5885; RV64IA-TSO: # %bb.0:5886; RV64IA-TSO-NEXT: .LBB39_1: # =>This Inner Loop Header: Depth=15887; RV64IA-TSO-NEXT: lr.d.aqrl a3, (a0)5888; RV64IA-TSO-NEXT: bne a3, a1, .LBB39_35889; RV64IA-TSO-NEXT: # %bb.2: # in Loop: Header=BB39_1 Depth=15890; RV64IA-TSO-NEXT: sc.d.rl a4, a2, (a0)5891; RV64IA-TSO-NEXT: bnez a4, .LBB39_15892; RV64IA-TSO-NEXT: .LBB39_3:5893; RV64IA-TSO-NEXT: ret5894;5895; RV64IA-TSO-ZACAS-LABEL: cmpxchg_i64_seq_cst_seq_cst:5896; RV64IA-TSO-ZACAS: # %bb.0:5897; RV64IA-TSO-ZACAS-NEXT: fence rw, rw5898; RV64IA-TSO-ZACAS-NEXT: amocas.d a1, a2, (a0)5899; RV64IA-TSO-ZACAS-NEXT: ret5900;5901; RV64IA-TSO-ZABHA-LABEL: cmpxchg_i64_seq_cst_seq_cst:5902; RV64IA-TSO-ZABHA: # %bb.0:5903; RV64IA-TSO-ZABHA-NEXT: fence rw, rw5904; RV64IA-TSO-ZABHA-NEXT: amocas.d a1, a2, (a0)5905; RV64IA-TSO-ZABHA-NEXT: ret5906 %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val seq_cst seq_cst5907 ret void5908}5909;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:5910; RV64IA: {{.*}}5911