brintos

brintos / llvm-project-archived public Read only

0
0
Text · 26.1 KiB · b43555c Raw
643 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+b,+zalrsc -verify-machineinstrs < %s \3; RUN:   | FileCheck -check-prefixes=RV32IB-COMMON,RV32IB-ZALRSC %s4; RUN: llc -mtriple=riscv32 -mattr=+b,+zalrsc,+permissive-zalrsc -verify-machineinstrs < %s \5; RUN:   | FileCheck -check-prefixes=RV32IB-COMMON,RV32IB-ZALRSC-PERM %s6; RUN: llc -mtriple=riscv32 -mattr=+b,+zalrsc,+permissive-zalrsc,+a -verify-machineinstrs < %s \7; RUN:   | FileCheck -check-prefixes=RV32IB-COMMON,RV32IAB %s8;9; RUN: llc -mtriple=riscv64 -mattr=+b,+zalrsc -verify-machineinstrs < %s \10; RUN:   | FileCheck -check-prefixes=RV64IB-ZALRSC %s11; RUN: llc -mtriple=riscv64 -mattr=+b,+zalrsc,+permissive-zalrsc -verify-machineinstrs < %s \12; RUN:   | FileCheck -check-prefixes=RV64IB-ZALRSC-PERM %s13; RUN: llc -mtriple=riscv64 -mattr=+b,+zalrsc,+permissive-zalrsc,+a -verify-machineinstrs < %s \14; RUN:   | FileCheck -check-prefixes=RV64IAB %s15 16define i32 @atomicrmw_max_i32_seq_cst(ptr %a, i32 %b) nounwind {17; RV32IB-ZALRSC-LABEL: atomicrmw_max_i32_seq_cst:18; RV32IB-ZALRSC:       # %bb.0:19; RV32IB-ZALRSC-NEXT:  .LBB0_1: # =>This Inner Loop Header: Depth=120; RV32IB-ZALRSC-NEXT:    lr.w.aqrl a2, (a0)21; RV32IB-ZALRSC-NEXT:    mv a3, a222; RV32IB-ZALRSC-NEXT:    bge a3, a1, .LBB0_323; RV32IB-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB0_1 Depth=124; RV32IB-ZALRSC-NEXT:    mv a3, a125; RV32IB-ZALRSC-NEXT:  .LBB0_3: # in Loop: Header=BB0_1 Depth=126; RV32IB-ZALRSC-NEXT:    sc.w.rl a3, a3, (a0)27; RV32IB-ZALRSC-NEXT:    bnez a3, .LBB0_128; RV32IB-ZALRSC-NEXT:  # %bb.4:29; RV32IB-ZALRSC-NEXT:    mv a0, a230; RV32IB-ZALRSC-NEXT:    ret31;32; RV32IB-ZALRSC-PERM-LABEL: atomicrmw_max_i32_seq_cst:33; RV32IB-ZALRSC-PERM:       # %bb.0:34; RV32IB-ZALRSC-PERM-NEXT:  .LBB0_1: # =>This Inner Loop Header: Depth=135; RV32IB-ZALRSC-PERM-NEXT:    lr.w.aqrl a2, (a0)36; RV32IB-ZALRSC-PERM-NEXT:    max a3, a2, a137; RV32IB-ZALRSC-PERM-NEXT:    sc.w.rl a3, a3, (a0)38; RV32IB-ZALRSC-PERM-NEXT:    bnez a3, .LBB0_139; RV32IB-ZALRSC-PERM-NEXT:  # %bb.2:40; RV32IB-ZALRSC-PERM-NEXT:    mv a0, a241; RV32IB-ZALRSC-PERM-NEXT:    ret42;43; RV32IAB-LABEL: atomicrmw_max_i32_seq_cst:44; RV32IAB:       # %bb.0:45; RV32IAB-NEXT:    amomax.w.aqrl a0, a1, (a0)46; RV32IAB-NEXT:    ret47;48; RV64IB-ZALRSC-LABEL: atomicrmw_max_i32_seq_cst:49; RV64IB-ZALRSC:       # %bb.0:50; RV64IB-ZALRSC-NEXT:    sext.w a2, a151; RV64IB-ZALRSC-NEXT:  .LBB0_1: # =>This Inner Loop Header: Depth=152; RV64IB-ZALRSC-NEXT:    lr.w.aqrl a1, (a0)53; RV64IB-ZALRSC-NEXT:    mv a3, a154; RV64IB-ZALRSC-NEXT:    bge a3, a2, .LBB0_355; RV64IB-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB0_1 Depth=156; RV64IB-ZALRSC-NEXT:    mv a3, a257; RV64IB-ZALRSC-NEXT:  .LBB0_3: # in Loop: Header=BB0_1 Depth=158; RV64IB-ZALRSC-NEXT:    sc.w.rl a3, a3, (a0)59; RV64IB-ZALRSC-NEXT:    bnez a3, .LBB0_160; RV64IB-ZALRSC-NEXT:  # %bb.4:61; RV64IB-ZALRSC-NEXT:    mv a0, a162; RV64IB-ZALRSC-NEXT:    ret63;64; RV64IB-ZALRSC-PERM-LABEL: atomicrmw_max_i32_seq_cst:65; RV64IB-ZALRSC-PERM:       # %bb.0:66; RV64IB-ZALRSC-PERM-NEXT:    sext.w a2, a167; RV64IB-ZALRSC-PERM-NEXT:  .LBB0_1: # =>This Inner Loop Header: Depth=168; RV64IB-ZALRSC-PERM-NEXT:    lr.w.aqrl a1, (a0)69; RV64IB-ZALRSC-PERM-NEXT:    max a3, a1, a270; RV64IB-ZALRSC-PERM-NEXT:    sc.w.rl a3, a3, (a0)71; RV64IB-ZALRSC-PERM-NEXT:    bnez a3, .LBB0_172; RV64IB-ZALRSC-PERM-NEXT:  # %bb.2:73; RV64IB-ZALRSC-PERM-NEXT:    mv a0, a174; RV64IB-ZALRSC-PERM-NEXT:    ret75;76; RV64IAB-LABEL: atomicrmw_max_i32_seq_cst:77; RV64IAB:       # %bb.0:78; RV64IAB-NEXT:    amomax.w.aqrl a0, a1, (a0)79; RV64IAB-NEXT:    ret80  %1 = atomicrmw max ptr %a, i32 %b seq_cst81  ret i32 %182}83 84define i32 @atomicrmw_min_i32_seq_cst(ptr %a, i32 %b) nounwind {85; RV32IB-ZALRSC-LABEL: atomicrmw_min_i32_seq_cst:86; RV32IB-ZALRSC:       # %bb.0:87; RV32IB-ZALRSC-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=188; RV32IB-ZALRSC-NEXT:    lr.w.aqrl a2, (a0)89; RV32IB-ZALRSC-NEXT:    mv a3, a290; RV32IB-ZALRSC-NEXT:    bge a1, a3, .LBB1_391; RV32IB-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB1_1 Depth=192; RV32IB-ZALRSC-NEXT:    mv a3, a193; RV32IB-ZALRSC-NEXT:  .LBB1_3: # in Loop: Header=BB1_1 Depth=194; RV32IB-ZALRSC-NEXT:    sc.w.rl a3, a3, (a0)95; RV32IB-ZALRSC-NEXT:    bnez a3, .LBB1_196; RV32IB-ZALRSC-NEXT:  # %bb.4:97; RV32IB-ZALRSC-NEXT:    mv a0, a298; RV32IB-ZALRSC-NEXT:    ret99;100; RV32IB-ZALRSC-PERM-LABEL: atomicrmw_min_i32_seq_cst:101; RV32IB-ZALRSC-PERM:       # %bb.0:102; RV32IB-ZALRSC-PERM-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=1103; RV32IB-ZALRSC-PERM-NEXT:    lr.w.aqrl a2, (a0)104; RV32IB-ZALRSC-PERM-NEXT:    min a3, a2, a1105; RV32IB-ZALRSC-PERM-NEXT:    sc.w.rl a3, a3, (a0)106; RV32IB-ZALRSC-PERM-NEXT:    bnez a3, .LBB1_1107; RV32IB-ZALRSC-PERM-NEXT:  # %bb.2:108; RV32IB-ZALRSC-PERM-NEXT:    mv a0, a2109; RV32IB-ZALRSC-PERM-NEXT:    ret110;111; RV32IAB-LABEL: atomicrmw_min_i32_seq_cst:112; RV32IAB:       # %bb.0:113; RV32IAB-NEXT:    amomin.w.aqrl a0, a1, (a0)114; RV32IAB-NEXT:    ret115;116; RV64IB-ZALRSC-LABEL: atomicrmw_min_i32_seq_cst:117; RV64IB-ZALRSC:       # %bb.0:118; RV64IB-ZALRSC-NEXT:    sext.w a2, a1119; RV64IB-ZALRSC-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=1120; RV64IB-ZALRSC-NEXT:    lr.w.aqrl a1, (a0)121; RV64IB-ZALRSC-NEXT:    mv a3, a1122; RV64IB-ZALRSC-NEXT:    bge a2, a3, .LBB1_3123; RV64IB-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB1_1 Depth=1124; RV64IB-ZALRSC-NEXT:    mv a3, a2125; RV64IB-ZALRSC-NEXT:  .LBB1_3: # in Loop: Header=BB1_1 Depth=1126; RV64IB-ZALRSC-NEXT:    sc.w.rl a3, a3, (a0)127; RV64IB-ZALRSC-NEXT:    bnez a3, .LBB1_1128; RV64IB-ZALRSC-NEXT:  # %bb.4:129; RV64IB-ZALRSC-NEXT:    mv a0, a1130; RV64IB-ZALRSC-NEXT:    ret131;132; RV64IB-ZALRSC-PERM-LABEL: atomicrmw_min_i32_seq_cst:133; RV64IB-ZALRSC-PERM:       # %bb.0:134; RV64IB-ZALRSC-PERM-NEXT:    sext.w a2, a1135; RV64IB-ZALRSC-PERM-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=1136; RV64IB-ZALRSC-PERM-NEXT:    lr.w.aqrl a1, (a0)137; RV64IB-ZALRSC-PERM-NEXT:    min a3, a1, a2138; RV64IB-ZALRSC-PERM-NEXT:    sc.w.rl a3, a3, (a0)139; RV64IB-ZALRSC-PERM-NEXT:    bnez a3, .LBB1_1140; RV64IB-ZALRSC-PERM-NEXT:  # %bb.2:141; RV64IB-ZALRSC-PERM-NEXT:    mv a0, a1142; RV64IB-ZALRSC-PERM-NEXT:    ret143;144; RV64IAB-LABEL: atomicrmw_min_i32_seq_cst:145; RV64IAB:       # %bb.0:146; RV64IAB-NEXT:    amomin.w.aqrl a0, a1, (a0)147; RV64IAB-NEXT:    ret148  %1 = atomicrmw min ptr %a, i32 %b seq_cst149  ret i32 %1150}151 152define i32 @atomicrmw_umax_i32_seq_cst(ptr %a, i32 %b) nounwind {153; RV32IB-ZALRSC-LABEL: atomicrmw_umax_i32_seq_cst:154; RV32IB-ZALRSC:       # %bb.0:155; RV32IB-ZALRSC-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1156; RV32IB-ZALRSC-NEXT:    lr.w.aqrl a2, (a0)157; RV32IB-ZALRSC-NEXT:    mv a3, a2158; RV32IB-ZALRSC-NEXT:    bgeu a3, a1, .LBB2_3159; RV32IB-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB2_1 Depth=1160; RV32IB-ZALRSC-NEXT:    mv a3, a1161; RV32IB-ZALRSC-NEXT:  .LBB2_3: # in Loop: Header=BB2_1 Depth=1162; RV32IB-ZALRSC-NEXT:    sc.w.rl a3, a3, (a0)163; RV32IB-ZALRSC-NEXT:    bnez a3, .LBB2_1164; RV32IB-ZALRSC-NEXT:  # %bb.4:165; RV32IB-ZALRSC-NEXT:    mv a0, a2166; RV32IB-ZALRSC-NEXT:    ret167;168; RV32IB-ZALRSC-PERM-LABEL: atomicrmw_umax_i32_seq_cst:169; RV32IB-ZALRSC-PERM:       # %bb.0:170; RV32IB-ZALRSC-PERM-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1171; RV32IB-ZALRSC-PERM-NEXT:    lr.w.aqrl a2, (a0)172; RV32IB-ZALRSC-PERM-NEXT:    maxu a3, a2, a1173; RV32IB-ZALRSC-PERM-NEXT:    sc.w.rl a3, a3, (a0)174; RV32IB-ZALRSC-PERM-NEXT:    bnez a3, .LBB2_1175; RV32IB-ZALRSC-PERM-NEXT:  # %bb.2:176; RV32IB-ZALRSC-PERM-NEXT:    mv a0, a2177; RV32IB-ZALRSC-PERM-NEXT:    ret178;179; RV32IAB-LABEL: atomicrmw_umax_i32_seq_cst:180; RV32IAB:       # %bb.0:181; RV32IAB-NEXT:    amomaxu.w.aqrl a0, a1, (a0)182; RV32IAB-NEXT:    ret183;184; RV64IB-ZALRSC-LABEL: atomicrmw_umax_i32_seq_cst:185; RV64IB-ZALRSC:       # %bb.0:186; RV64IB-ZALRSC-NEXT:    sext.w a2, a1187; RV64IB-ZALRSC-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1188; RV64IB-ZALRSC-NEXT:    lr.w.aqrl a1, (a0)189; RV64IB-ZALRSC-NEXT:    mv a3, a1190; RV64IB-ZALRSC-NEXT:    bgeu a3, a2, .LBB2_3191; RV64IB-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB2_1 Depth=1192; RV64IB-ZALRSC-NEXT:    mv a3, a2193; RV64IB-ZALRSC-NEXT:  .LBB2_3: # in Loop: Header=BB2_1 Depth=1194; RV64IB-ZALRSC-NEXT:    sc.w.rl a3, a3, (a0)195; RV64IB-ZALRSC-NEXT:    bnez a3, .LBB2_1196; RV64IB-ZALRSC-NEXT:  # %bb.4:197; RV64IB-ZALRSC-NEXT:    mv a0, a1198; RV64IB-ZALRSC-NEXT:    ret199;200; RV64IB-ZALRSC-PERM-LABEL: atomicrmw_umax_i32_seq_cst:201; RV64IB-ZALRSC-PERM:       # %bb.0:202; RV64IB-ZALRSC-PERM-NEXT:    sext.w a2, a1203; RV64IB-ZALRSC-PERM-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1204; RV64IB-ZALRSC-PERM-NEXT:    lr.w.aqrl a1, (a0)205; RV64IB-ZALRSC-PERM-NEXT:    maxu a3, a1, a2206; RV64IB-ZALRSC-PERM-NEXT:    sc.w.rl a3, a3, (a0)207; RV64IB-ZALRSC-PERM-NEXT:    bnez a3, .LBB2_1208; RV64IB-ZALRSC-PERM-NEXT:  # %bb.2:209; RV64IB-ZALRSC-PERM-NEXT:    mv a0, a1210; RV64IB-ZALRSC-PERM-NEXT:    ret211;212; RV64IAB-LABEL: atomicrmw_umax_i32_seq_cst:213; RV64IAB:       # %bb.0:214; RV64IAB-NEXT:    amomaxu.w.aqrl a0, a1, (a0)215; RV64IAB-NEXT:    ret216  %1 = atomicrmw umax ptr %a, i32 %b seq_cst217  ret i32 %1218}219 220define i32 @atomicrmw_umin_i32_seq_cst(ptr %a, i32 %b) nounwind {221; RV32IB-ZALRSC-LABEL: atomicrmw_umin_i32_seq_cst:222; RV32IB-ZALRSC:       # %bb.0:223; RV32IB-ZALRSC-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1224; RV32IB-ZALRSC-NEXT:    lr.w.aqrl a2, (a0)225; RV32IB-ZALRSC-NEXT:    mv a3, a2226; RV32IB-ZALRSC-NEXT:    bgeu a1, a3, .LBB3_3227; RV32IB-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB3_1 Depth=1228; RV32IB-ZALRSC-NEXT:    mv a3, a1229; RV32IB-ZALRSC-NEXT:  .LBB3_3: # in Loop: Header=BB3_1 Depth=1230; RV32IB-ZALRSC-NEXT:    sc.w.rl a3, a3, (a0)231; RV32IB-ZALRSC-NEXT:    bnez a3, .LBB3_1232; RV32IB-ZALRSC-NEXT:  # %bb.4:233; RV32IB-ZALRSC-NEXT:    mv a0, a2234; RV32IB-ZALRSC-NEXT:    ret235;236; RV32IB-ZALRSC-PERM-LABEL: atomicrmw_umin_i32_seq_cst:237; RV32IB-ZALRSC-PERM:       # %bb.0:238; RV32IB-ZALRSC-PERM-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1239; RV32IB-ZALRSC-PERM-NEXT:    lr.w.aqrl a2, (a0)240; RV32IB-ZALRSC-PERM-NEXT:    minu a3, a2, a1241; RV32IB-ZALRSC-PERM-NEXT:    sc.w.rl a3, a3, (a0)242; RV32IB-ZALRSC-PERM-NEXT:    bnez a3, .LBB3_1243; RV32IB-ZALRSC-PERM-NEXT:  # %bb.2:244; RV32IB-ZALRSC-PERM-NEXT:    mv a0, a2245; RV32IB-ZALRSC-PERM-NEXT:    ret246;247; RV32IAB-LABEL: atomicrmw_umin_i32_seq_cst:248; RV32IAB:       # %bb.0:249; RV32IAB-NEXT:    amominu.w.aqrl a0, a1, (a0)250; RV32IAB-NEXT:    ret251;252; RV64IB-ZALRSC-LABEL: atomicrmw_umin_i32_seq_cst:253; RV64IB-ZALRSC:       # %bb.0:254; RV64IB-ZALRSC-NEXT:    sext.w a2, a1255; RV64IB-ZALRSC-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1256; RV64IB-ZALRSC-NEXT:    lr.w.aqrl a1, (a0)257; RV64IB-ZALRSC-NEXT:    mv a3, a1258; RV64IB-ZALRSC-NEXT:    bgeu a2, a3, .LBB3_3259; RV64IB-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB3_1 Depth=1260; RV64IB-ZALRSC-NEXT:    mv a3, a2261; RV64IB-ZALRSC-NEXT:  .LBB3_3: # in Loop: Header=BB3_1 Depth=1262; RV64IB-ZALRSC-NEXT:    sc.w.rl a3, a3, (a0)263; RV64IB-ZALRSC-NEXT:    bnez a3, .LBB3_1264; RV64IB-ZALRSC-NEXT:  # %bb.4:265; RV64IB-ZALRSC-NEXT:    mv a0, a1266; RV64IB-ZALRSC-NEXT:    ret267;268; RV64IB-ZALRSC-PERM-LABEL: atomicrmw_umin_i32_seq_cst:269; RV64IB-ZALRSC-PERM:       # %bb.0:270; RV64IB-ZALRSC-PERM-NEXT:    sext.w a2, a1271; RV64IB-ZALRSC-PERM-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1272; RV64IB-ZALRSC-PERM-NEXT:    lr.w.aqrl a1, (a0)273; RV64IB-ZALRSC-PERM-NEXT:    minu a3, a1, a2274; RV64IB-ZALRSC-PERM-NEXT:    sc.w.rl a3, a3, (a0)275; RV64IB-ZALRSC-PERM-NEXT:    bnez a3, .LBB3_1276; RV64IB-ZALRSC-PERM-NEXT:  # %bb.2:277; RV64IB-ZALRSC-PERM-NEXT:    mv a0, a1278; RV64IB-ZALRSC-PERM-NEXT:    ret279;280; RV64IAB-LABEL: atomicrmw_umin_i32_seq_cst:281; RV64IAB:       # %bb.0:282; RV64IAB-NEXT:    amominu.w.aqrl a0, a1, (a0)283; RV64IAB-NEXT:    ret284  %1 = atomicrmw umin ptr %a, i32 %b seq_cst285  ret i32 %1286}287 288define i64 @atomicrmw_max_i64_seq_cst(ptr %a, i64 %b) nounwind {289; RV32IB-COMMON-LABEL: atomicrmw_max_i64_seq_cst:290; RV32IB-COMMON:       # %bb.0:291; RV32IB-COMMON-NEXT:    addi sp, sp, -32292; RV32IB-COMMON-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill293; RV32IB-COMMON-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill294; RV32IB-COMMON-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill295; RV32IB-COMMON-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill296; RV32IB-COMMON-NEXT:    mv s0, a2297; RV32IB-COMMON-NEXT:    mv s1, a0298; RV32IB-COMMON-NEXT:    lw a4, 0(a0)299; RV32IB-COMMON-NEXT:    lw a5, 4(a0)300; RV32IB-COMMON-NEXT:    mv s2, a1301; RV32IB-COMMON-NEXT:    j .LBB4_2302; RV32IB-COMMON-NEXT:  .LBB4_1: # %atomicrmw.start303; RV32IB-COMMON-NEXT:    # in Loop: Header=BB4_2 Depth=1304; RV32IB-COMMON-NEXT:    sw a4, 8(sp)305; RV32IB-COMMON-NEXT:    sw a5, 12(sp)306; RV32IB-COMMON-NEXT:    addi a1, sp, 8307; RV32IB-COMMON-NEXT:    li a4, 5308; RV32IB-COMMON-NEXT:    li a5, 5309; RV32IB-COMMON-NEXT:    mv a0, s1310; RV32IB-COMMON-NEXT:    call __atomic_compare_exchange_8311; RV32IB-COMMON-NEXT:    lw a4, 8(sp)312; RV32IB-COMMON-NEXT:    lw a5, 12(sp)313; RV32IB-COMMON-NEXT:    bnez a0, .LBB4_7314; RV32IB-COMMON-NEXT:  .LBB4_2: # %atomicrmw.start315; RV32IB-COMMON-NEXT:    # =>This Inner Loop Header: Depth=1316; RV32IB-COMMON-NEXT:    beq a5, s0, .LBB4_4317; RV32IB-COMMON-NEXT:  # %bb.3: # %atomicrmw.start318; RV32IB-COMMON-NEXT:    # in Loop: Header=BB4_2 Depth=1319; RV32IB-COMMON-NEXT:    slt a0, s0, a5320; RV32IB-COMMON-NEXT:    j .LBB4_5321; RV32IB-COMMON-NEXT:  .LBB4_4: # in Loop: Header=BB4_2 Depth=1322; RV32IB-COMMON-NEXT:    sltu a0, s2, a4323; RV32IB-COMMON-NEXT:  .LBB4_5: # %atomicrmw.start324; RV32IB-COMMON-NEXT:    # in Loop: Header=BB4_2 Depth=1325; RV32IB-COMMON-NEXT:    mv a2, a4326; RV32IB-COMMON-NEXT:    mv a3, a5327; RV32IB-COMMON-NEXT:    bnez a0, .LBB4_1328; RV32IB-COMMON-NEXT:  # %bb.6: # %atomicrmw.start329; RV32IB-COMMON-NEXT:    # in Loop: Header=BB4_2 Depth=1330; RV32IB-COMMON-NEXT:    mv a2, s2331; RV32IB-COMMON-NEXT:    mv a3, s0332; RV32IB-COMMON-NEXT:    j .LBB4_1333; RV32IB-COMMON-NEXT:  .LBB4_7: # %atomicrmw.end334; RV32IB-COMMON-NEXT:    mv a0, a4335; RV32IB-COMMON-NEXT:    mv a1, a5336; RV32IB-COMMON-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload337; RV32IB-COMMON-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload338; RV32IB-COMMON-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload339; RV32IB-COMMON-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload340; RV32IB-COMMON-NEXT:    addi sp, sp, 32341; RV32IB-COMMON-NEXT:    ret342;343; RV64IB-ZALRSC-LABEL: atomicrmw_max_i64_seq_cst:344; RV64IB-ZALRSC:       # %bb.0:345; RV64IB-ZALRSC-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1346; RV64IB-ZALRSC-NEXT:    lr.d.aqrl a2, (a0)347; RV64IB-ZALRSC-NEXT:    mv a3, a2348; RV64IB-ZALRSC-NEXT:    bge a3, a1, .LBB4_3349; RV64IB-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB4_1 Depth=1350; RV64IB-ZALRSC-NEXT:    mv a3, a1351; RV64IB-ZALRSC-NEXT:  .LBB4_3: # in Loop: Header=BB4_1 Depth=1352; RV64IB-ZALRSC-NEXT:    sc.d.rl a3, a3, (a0)353; RV64IB-ZALRSC-NEXT:    bnez a3, .LBB4_1354; RV64IB-ZALRSC-NEXT:  # %bb.4:355; RV64IB-ZALRSC-NEXT:    mv a0, a2356; RV64IB-ZALRSC-NEXT:    ret357;358; RV64IB-ZALRSC-PERM-LABEL: atomicrmw_max_i64_seq_cst:359; RV64IB-ZALRSC-PERM:       # %bb.0:360; RV64IB-ZALRSC-PERM-NEXT:  .LBB4_1: # =>This Inner Loop Header: Depth=1361; RV64IB-ZALRSC-PERM-NEXT:    lr.d.aqrl a2, (a0)362; RV64IB-ZALRSC-PERM-NEXT:    max a3, a2, a1363; RV64IB-ZALRSC-PERM-NEXT:    sc.d.rl a3, a3, (a0)364; RV64IB-ZALRSC-PERM-NEXT:    bnez a3, .LBB4_1365; RV64IB-ZALRSC-PERM-NEXT:  # %bb.2:366; RV64IB-ZALRSC-PERM-NEXT:    mv a0, a2367; RV64IB-ZALRSC-PERM-NEXT:    ret368;369; RV64IAB-LABEL: atomicrmw_max_i64_seq_cst:370; RV64IAB:       # %bb.0:371; RV64IAB-NEXT:    amomax.d.aqrl a0, a1, (a0)372; RV64IAB-NEXT:    ret373  %1 = atomicrmw max ptr %a, i64 %b seq_cst374  ret i64 %1375}376 377define i64 @atomicrmw_min_i64_seq_cst(ptr %a, i64 %b) nounwind {378; RV32IB-COMMON-LABEL: atomicrmw_min_i64_seq_cst:379; RV32IB-COMMON:       # %bb.0:380; RV32IB-COMMON-NEXT:    addi sp, sp, -32381; RV32IB-COMMON-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill382; RV32IB-COMMON-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill383; RV32IB-COMMON-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill384; RV32IB-COMMON-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill385; RV32IB-COMMON-NEXT:    mv s0, a2386; RV32IB-COMMON-NEXT:    mv s1, a0387; RV32IB-COMMON-NEXT:    lw a4, 0(a0)388; RV32IB-COMMON-NEXT:    lw a5, 4(a0)389; RV32IB-COMMON-NEXT:    mv s2, a1390; RV32IB-COMMON-NEXT:    j .LBB5_2391; RV32IB-COMMON-NEXT:  .LBB5_1: # %atomicrmw.start392; RV32IB-COMMON-NEXT:    # in Loop: Header=BB5_2 Depth=1393; RV32IB-COMMON-NEXT:    sw a4, 8(sp)394; RV32IB-COMMON-NEXT:    sw a5, 12(sp)395; RV32IB-COMMON-NEXT:    addi a1, sp, 8396; RV32IB-COMMON-NEXT:    li a4, 5397; RV32IB-COMMON-NEXT:    li a5, 5398; RV32IB-COMMON-NEXT:    mv a0, s1399; RV32IB-COMMON-NEXT:    call __atomic_compare_exchange_8400; RV32IB-COMMON-NEXT:    lw a4, 8(sp)401; RV32IB-COMMON-NEXT:    lw a5, 12(sp)402; RV32IB-COMMON-NEXT:    bnez a0, .LBB5_7403; RV32IB-COMMON-NEXT:  .LBB5_2: # %atomicrmw.start404; RV32IB-COMMON-NEXT:    # =>This Inner Loop Header: Depth=1405; RV32IB-COMMON-NEXT:    beq a5, s0, .LBB5_4406; RV32IB-COMMON-NEXT:  # %bb.3: # %atomicrmw.start407; RV32IB-COMMON-NEXT:    # in Loop: Header=BB5_2 Depth=1408; RV32IB-COMMON-NEXT:    slt a0, a5, s0409; RV32IB-COMMON-NEXT:    j .LBB5_5410; RV32IB-COMMON-NEXT:  .LBB5_4: # in Loop: Header=BB5_2 Depth=1411; RV32IB-COMMON-NEXT:    sltu a0, a4, s2412; RV32IB-COMMON-NEXT:  .LBB5_5: # %atomicrmw.start413; RV32IB-COMMON-NEXT:    # in Loop: Header=BB5_2 Depth=1414; RV32IB-COMMON-NEXT:    mv a2, a4415; RV32IB-COMMON-NEXT:    mv a3, a5416; RV32IB-COMMON-NEXT:    bnez a0, .LBB5_1417; RV32IB-COMMON-NEXT:  # %bb.6: # %atomicrmw.start418; RV32IB-COMMON-NEXT:    # in Loop: Header=BB5_2 Depth=1419; RV32IB-COMMON-NEXT:    mv a2, s2420; RV32IB-COMMON-NEXT:    mv a3, s0421; RV32IB-COMMON-NEXT:    j .LBB5_1422; RV32IB-COMMON-NEXT:  .LBB5_7: # %atomicrmw.end423; RV32IB-COMMON-NEXT:    mv a0, a4424; RV32IB-COMMON-NEXT:    mv a1, a5425; RV32IB-COMMON-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload426; RV32IB-COMMON-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload427; RV32IB-COMMON-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload428; RV32IB-COMMON-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload429; RV32IB-COMMON-NEXT:    addi sp, sp, 32430; RV32IB-COMMON-NEXT:    ret431;432; RV64IB-ZALRSC-LABEL: atomicrmw_min_i64_seq_cst:433; RV64IB-ZALRSC:       # %bb.0:434; RV64IB-ZALRSC-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=1435; RV64IB-ZALRSC-NEXT:    lr.d.aqrl a2, (a0)436; RV64IB-ZALRSC-NEXT:    mv a3, a2437; RV64IB-ZALRSC-NEXT:    bge a1, a3, .LBB5_3438; RV64IB-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB5_1 Depth=1439; RV64IB-ZALRSC-NEXT:    mv a3, a1440; RV64IB-ZALRSC-NEXT:  .LBB5_3: # in Loop: Header=BB5_1 Depth=1441; RV64IB-ZALRSC-NEXT:    sc.d.rl a3, a3, (a0)442; RV64IB-ZALRSC-NEXT:    bnez a3, .LBB5_1443; RV64IB-ZALRSC-NEXT:  # %bb.4:444; RV64IB-ZALRSC-NEXT:    mv a0, a2445; RV64IB-ZALRSC-NEXT:    ret446;447; RV64IB-ZALRSC-PERM-LABEL: atomicrmw_min_i64_seq_cst:448; RV64IB-ZALRSC-PERM:       # %bb.0:449; RV64IB-ZALRSC-PERM-NEXT:  .LBB5_1: # =>This Inner Loop Header: Depth=1450; RV64IB-ZALRSC-PERM-NEXT:    lr.d.aqrl a2, (a0)451; RV64IB-ZALRSC-PERM-NEXT:    min a3, a2, a1452; RV64IB-ZALRSC-PERM-NEXT:    sc.d.rl a3, a3, (a0)453; RV64IB-ZALRSC-PERM-NEXT:    bnez a3, .LBB5_1454; RV64IB-ZALRSC-PERM-NEXT:  # %bb.2:455; RV64IB-ZALRSC-PERM-NEXT:    mv a0, a2456; RV64IB-ZALRSC-PERM-NEXT:    ret457;458; RV64IAB-LABEL: atomicrmw_min_i64_seq_cst:459; RV64IAB:       # %bb.0:460; RV64IAB-NEXT:    amomin.d.aqrl a0, a1, (a0)461; RV64IAB-NEXT:    ret462  %1 = atomicrmw min ptr %a, i64 %b seq_cst463  ret i64 %1464}465 466define i64 @atomicrmw_umax_i64_seq_cst(ptr %a, i64 %b) nounwind {467; RV32IB-COMMON-LABEL: atomicrmw_umax_i64_seq_cst:468; RV32IB-COMMON:       # %bb.0:469; RV32IB-COMMON-NEXT:    addi sp, sp, -32470; RV32IB-COMMON-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill471; RV32IB-COMMON-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill472; RV32IB-COMMON-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill473; RV32IB-COMMON-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill474; RV32IB-COMMON-NEXT:    mv s0, a2475; RV32IB-COMMON-NEXT:    mv s1, a0476; RV32IB-COMMON-NEXT:    lw a4, 0(a0)477; RV32IB-COMMON-NEXT:    lw a5, 4(a0)478; RV32IB-COMMON-NEXT:    mv s2, a1479; RV32IB-COMMON-NEXT:    j .LBB6_2480; RV32IB-COMMON-NEXT:  .LBB6_1: # %atomicrmw.start481; RV32IB-COMMON-NEXT:    # in Loop: Header=BB6_2 Depth=1482; RV32IB-COMMON-NEXT:    sw a4, 8(sp)483; RV32IB-COMMON-NEXT:    sw a5, 12(sp)484; RV32IB-COMMON-NEXT:    addi a1, sp, 8485; RV32IB-COMMON-NEXT:    li a4, 5486; RV32IB-COMMON-NEXT:    li a5, 5487; RV32IB-COMMON-NEXT:    mv a0, s1488; RV32IB-COMMON-NEXT:    call __atomic_compare_exchange_8489; RV32IB-COMMON-NEXT:    lw a4, 8(sp)490; RV32IB-COMMON-NEXT:    lw a5, 12(sp)491; RV32IB-COMMON-NEXT:    bnez a0, .LBB6_7492; RV32IB-COMMON-NEXT:  .LBB6_2: # %atomicrmw.start493; RV32IB-COMMON-NEXT:    # =>This Inner Loop Header: Depth=1494; RV32IB-COMMON-NEXT:    beq a5, s0, .LBB6_4495; RV32IB-COMMON-NEXT:  # %bb.3: # %atomicrmw.start496; RV32IB-COMMON-NEXT:    # in Loop: Header=BB6_2 Depth=1497; RV32IB-COMMON-NEXT:    sltu a0, s0, a5498; RV32IB-COMMON-NEXT:    j .LBB6_5499; RV32IB-COMMON-NEXT:  .LBB6_4: # in Loop: Header=BB6_2 Depth=1500; RV32IB-COMMON-NEXT:    sltu a0, s2, a4501; RV32IB-COMMON-NEXT:  .LBB6_5: # %atomicrmw.start502; RV32IB-COMMON-NEXT:    # in Loop: Header=BB6_2 Depth=1503; RV32IB-COMMON-NEXT:    mv a2, a4504; RV32IB-COMMON-NEXT:    mv a3, a5505; RV32IB-COMMON-NEXT:    bnez a0, .LBB6_1506; RV32IB-COMMON-NEXT:  # %bb.6: # %atomicrmw.start507; RV32IB-COMMON-NEXT:    # in Loop: Header=BB6_2 Depth=1508; RV32IB-COMMON-NEXT:    mv a2, s2509; RV32IB-COMMON-NEXT:    mv a3, s0510; RV32IB-COMMON-NEXT:    j .LBB6_1511; RV32IB-COMMON-NEXT:  .LBB6_7: # %atomicrmw.end512; RV32IB-COMMON-NEXT:    mv a0, a4513; RV32IB-COMMON-NEXT:    mv a1, a5514; RV32IB-COMMON-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload515; RV32IB-COMMON-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload516; RV32IB-COMMON-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload517; RV32IB-COMMON-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload518; RV32IB-COMMON-NEXT:    addi sp, sp, 32519; RV32IB-COMMON-NEXT:    ret520;521; RV64IB-ZALRSC-LABEL: atomicrmw_umax_i64_seq_cst:522; RV64IB-ZALRSC:       # %bb.0:523; RV64IB-ZALRSC-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=1524; RV64IB-ZALRSC-NEXT:    lr.d.aqrl a2, (a0)525; RV64IB-ZALRSC-NEXT:    mv a3, a2526; RV64IB-ZALRSC-NEXT:    bgeu a3, a1, .LBB6_3527; RV64IB-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB6_1 Depth=1528; RV64IB-ZALRSC-NEXT:    mv a3, a1529; RV64IB-ZALRSC-NEXT:  .LBB6_3: # in Loop: Header=BB6_1 Depth=1530; RV64IB-ZALRSC-NEXT:    sc.d.rl a3, a3, (a0)531; RV64IB-ZALRSC-NEXT:    bnez a3, .LBB6_1532; RV64IB-ZALRSC-NEXT:  # %bb.4:533; RV64IB-ZALRSC-NEXT:    mv a0, a2534; RV64IB-ZALRSC-NEXT:    ret535;536; RV64IB-ZALRSC-PERM-LABEL: atomicrmw_umax_i64_seq_cst:537; RV64IB-ZALRSC-PERM:       # %bb.0:538; RV64IB-ZALRSC-PERM-NEXT:  .LBB6_1: # =>This Inner Loop Header: Depth=1539; RV64IB-ZALRSC-PERM-NEXT:    lr.d.aqrl a2, (a0)540; RV64IB-ZALRSC-PERM-NEXT:    maxu a3, a2, a1541; RV64IB-ZALRSC-PERM-NEXT:    sc.d.rl a3, a3, (a0)542; RV64IB-ZALRSC-PERM-NEXT:    bnez a3, .LBB6_1543; RV64IB-ZALRSC-PERM-NEXT:  # %bb.2:544; RV64IB-ZALRSC-PERM-NEXT:    mv a0, a2545; RV64IB-ZALRSC-PERM-NEXT:    ret546;547; RV64IAB-LABEL: atomicrmw_umax_i64_seq_cst:548; RV64IAB:       # %bb.0:549; RV64IAB-NEXT:    amomaxu.d.aqrl a0, a1, (a0)550; RV64IAB-NEXT:    ret551  %1 = atomicrmw umax ptr %a, i64 %b seq_cst552  ret i64 %1553}554 555define i64 @atomicrmw_umin_i64_seq_cst(ptr %a, i64 %b) nounwind {556; RV32IB-COMMON-LABEL: atomicrmw_umin_i64_seq_cst:557; RV32IB-COMMON:       # %bb.0:558; RV32IB-COMMON-NEXT:    addi sp, sp, -32559; RV32IB-COMMON-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill560; RV32IB-COMMON-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill561; RV32IB-COMMON-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill562; RV32IB-COMMON-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill563; RV32IB-COMMON-NEXT:    mv s0, a2564; RV32IB-COMMON-NEXT:    mv s1, a0565; RV32IB-COMMON-NEXT:    lw a4, 0(a0)566; RV32IB-COMMON-NEXT:    lw a5, 4(a0)567; RV32IB-COMMON-NEXT:    mv s2, a1568; RV32IB-COMMON-NEXT:    j .LBB7_2569; RV32IB-COMMON-NEXT:  .LBB7_1: # %atomicrmw.start570; RV32IB-COMMON-NEXT:    # in Loop: Header=BB7_2 Depth=1571; RV32IB-COMMON-NEXT:    sw a4, 8(sp)572; RV32IB-COMMON-NEXT:    sw a5, 12(sp)573; RV32IB-COMMON-NEXT:    addi a1, sp, 8574; RV32IB-COMMON-NEXT:    li a4, 5575; RV32IB-COMMON-NEXT:    li a5, 5576; RV32IB-COMMON-NEXT:    mv a0, s1577; RV32IB-COMMON-NEXT:    call __atomic_compare_exchange_8578; RV32IB-COMMON-NEXT:    lw a4, 8(sp)579; RV32IB-COMMON-NEXT:    lw a5, 12(sp)580; RV32IB-COMMON-NEXT:    bnez a0, .LBB7_7581; RV32IB-COMMON-NEXT:  .LBB7_2: # %atomicrmw.start582; RV32IB-COMMON-NEXT:    # =>This Inner Loop Header: Depth=1583; RV32IB-COMMON-NEXT:    beq a5, s0, .LBB7_4584; RV32IB-COMMON-NEXT:  # %bb.3: # %atomicrmw.start585; RV32IB-COMMON-NEXT:    # in Loop: Header=BB7_2 Depth=1586; RV32IB-COMMON-NEXT:    sltu a0, a5, s0587; RV32IB-COMMON-NEXT:    j .LBB7_5588; RV32IB-COMMON-NEXT:  .LBB7_4: # in Loop: Header=BB7_2 Depth=1589; RV32IB-COMMON-NEXT:    sltu a0, a4, s2590; RV32IB-COMMON-NEXT:  .LBB7_5: # %atomicrmw.start591; RV32IB-COMMON-NEXT:    # in Loop: Header=BB7_2 Depth=1592; RV32IB-COMMON-NEXT:    mv a2, a4593; RV32IB-COMMON-NEXT:    mv a3, a5594; RV32IB-COMMON-NEXT:    bnez a0, .LBB7_1595; RV32IB-COMMON-NEXT:  # %bb.6: # %atomicrmw.start596; RV32IB-COMMON-NEXT:    # in Loop: Header=BB7_2 Depth=1597; RV32IB-COMMON-NEXT:    mv a2, s2598; RV32IB-COMMON-NEXT:    mv a3, s0599; RV32IB-COMMON-NEXT:    j .LBB7_1600; RV32IB-COMMON-NEXT:  .LBB7_7: # %atomicrmw.end601; RV32IB-COMMON-NEXT:    mv a0, a4602; RV32IB-COMMON-NEXT:    mv a1, a5603; RV32IB-COMMON-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload604; RV32IB-COMMON-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload605; RV32IB-COMMON-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload606; RV32IB-COMMON-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload607; RV32IB-COMMON-NEXT:    addi sp, sp, 32608; RV32IB-COMMON-NEXT:    ret609;610; RV64IB-ZALRSC-LABEL: atomicrmw_umin_i64_seq_cst:611; RV64IB-ZALRSC:       # %bb.0:612; RV64IB-ZALRSC-NEXT:  .LBB7_1: # =>This Inner Loop Header: Depth=1613; RV64IB-ZALRSC-NEXT:    lr.d.aqrl a2, (a0)614; RV64IB-ZALRSC-NEXT:    mv a3, a2615; RV64IB-ZALRSC-NEXT:    bgeu a1, a3, .LBB7_3616; RV64IB-ZALRSC-NEXT:  # %bb.2: # in Loop: Header=BB7_1 Depth=1617; RV64IB-ZALRSC-NEXT:    mv a3, a1618; RV64IB-ZALRSC-NEXT:  .LBB7_3: # in Loop: Header=BB7_1 Depth=1619; RV64IB-ZALRSC-NEXT:    sc.d.rl a3, a3, (a0)620; RV64IB-ZALRSC-NEXT:    bnez a3, .LBB7_1621; RV64IB-ZALRSC-NEXT:  # %bb.4:622; RV64IB-ZALRSC-NEXT:    mv a0, a2623; RV64IB-ZALRSC-NEXT:    ret624;625; RV64IB-ZALRSC-PERM-LABEL: atomicrmw_umin_i64_seq_cst:626; RV64IB-ZALRSC-PERM:       # %bb.0:627; RV64IB-ZALRSC-PERM-NEXT:  .LBB7_1: # =>This Inner Loop Header: Depth=1628; RV64IB-ZALRSC-PERM-NEXT:    lr.d.aqrl a2, (a0)629; RV64IB-ZALRSC-PERM-NEXT:    minu a3, a2, a1630; RV64IB-ZALRSC-PERM-NEXT:    sc.d.rl a3, a3, (a0)631; RV64IB-ZALRSC-PERM-NEXT:    bnez a3, .LBB7_1632; RV64IB-ZALRSC-PERM-NEXT:  # %bb.2:633; RV64IB-ZALRSC-PERM-NEXT:    mv a0, a2634; RV64IB-ZALRSC-PERM-NEXT:    ret635;636; RV64IAB-LABEL: atomicrmw_umin_i64_seq_cst:637; RV64IAB:       # %bb.0:638; RV64IAB-NEXT:    amominu.d.aqrl a0, a1, (a0)639; RV64IAB-NEXT:    ret640  %1 = atomicrmw umin ptr %a, i64 %b seq_cst641  ret i64 %1642}643