brintos

brintos / llvm-project-archived public Read only

0
0
Text · 180.2 KiB · 1a69106 Raw
4651 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+no-trailing-seq-cst-fence < %s | FileCheck %s --check-prefixes=RV32,RV32-NO-ATOMIC3; RUN: llc -mtriple=riscv32 < %s | FileCheck %s --check-prefixes=RV32,RV32-NO-ATOMIC4; RUN: llc -mtriple=riscv32 -mattr=+forced-atomics,+no-trailing-seq-cst-fence < %s | FileCheck %s --check-prefixes=RV32,RV32-ATOMIC5; RUN: llc -mtriple=riscv32 -mattr=+forced-atomics < %s | FileCheck %s --check-prefixes=RV32,RV32-ATOMIC-TRAILING6; RUN: llc -mtriple=riscv64 -mattr=+no-trailing-seq-cst-fence < %s | FileCheck %s --check-prefixes=RV64,RV64-NO-ATOMIC7; RUN: llc -mtriple=riscv64 < %s | FileCheck %s --check-prefixes=RV64,RV64-NO-ATOMIC8; RUN: llc -mtriple=riscv64 -mattr=+forced-atomics,+no-trailing-seq-cst-fence < %s | FileCheck %s --check-prefixes=RV64,RV64-ATOMIC9; RUN: llc -mtriple=riscv64 -mattr=+forced-atomics < %s | FileCheck %s --check-prefixes=RV64,RV64-ATOMIC-TRAILING10 11define i8 @load8(ptr %p) nounwind {12; RV32-NO-ATOMIC-LABEL: load8:13; RV32-NO-ATOMIC:       # %bb.0:14; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -1615; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill16; RV32-NO-ATOMIC-NEXT:    li a1, 517; RV32-NO-ATOMIC-NEXT:    call __atomic_load_118; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload19; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 1620; RV32-NO-ATOMIC-NEXT:    ret21;22; RV32-ATOMIC-LABEL: load8:23; RV32-ATOMIC:       # %bb.0:24; RV32-ATOMIC-NEXT:    fence rw, rw25; RV32-ATOMIC-NEXT:    lb a0, 0(a0)26; RV32-ATOMIC-NEXT:    fence r, rw27; RV32-ATOMIC-NEXT:    ret28;29; RV32-ATOMIC-TRAILING-LABEL: load8:30; RV32-ATOMIC-TRAILING:       # %bb.0:31; RV32-ATOMIC-TRAILING-NEXT:    fence rw, rw32; RV32-ATOMIC-TRAILING-NEXT:    lb a0, 0(a0)33; RV32-ATOMIC-TRAILING-NEXT:    fence r, rw34; RV32-ATOMIC-TRAILING-NEXT:    ret35;36; RV64-NO-ATOMIC-LABEL: load8:37; RV64-NO-ATOMIC:       # %bb.0:38; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -1639; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill40; RV64-NO-ATOMIC-NEXT:    li a1, 541; RV64-NO-ATOMIC-NEXT:    call __atomic_load_142; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload43; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 1644; RV64-NO-ATOMIC-NEXT:    ret45;46; RV64-ATOMIC-LABEL: load8:47; RV64-ATOMIC:       # %bb.0:48; RV64-ATOMIC-NEXT:    fence rw, rw49; RV64-ATOMIC-NEXT:    lb a0, 0(a0)50; RV64-ATOMIC-NEXT:    fence r, rw51; RV64-ATOMIC-NEXT:    ret52;53; RV64-ATOMIC-TRAILING-LABEL: load8:54; RV64-ATOMIC-TRAILING:       # %bb.0:55; RV64-ATOMIC-TRAILING-NEXT:    fence rw, rw56; RV64-ATOMIC-TRAILING-NEXT:    lb a0, 0(a0)57; RV64-ATOMIC-TRAILING-NEXT:    fence r, rw58; RV64-ATOMIC-TRAILING-NEXT:    ret59  %v = load atomic i8, ptr %p seq_cst, align 160  ret i8 %v61}62 63define void @store8(ptr %p) nounwind {64; RV32-NO-ATOMIC-LABEL: store8:65; RV32-NO-ATOMIC:       # %bb.0:66; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -1667; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill68; RV32-NO-ATOMIC-NEXT:    li a2, 569; RV32-NO-ATOMIC-NEXT:    li a1, 070; RV32-NO-ATOMIC-NEXT:    call __atomic_store_171; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload72; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 1673; RV32-NO-ATOMIC-NEXT:    ret74;75; RV32-ATOMIC-LABEL: store8:76; RV32-ATOMIC:       # %bb.0:77; RV32-ATOMIC-NEXT:    fence rw, w78; RV32-ATOMIC-NEXT:    sb zero, 0(a0)79; RV32-ATOMIC-NEXT:    ret80;81; RV32-ATOMIC-TRAILING-LABEL: store8:82; RV32-ATOMIC-TRAILING:       # %bb.0:83; RV32-ATOMIC-TRAILING-NEXT:    fence rw, w84; RV32-ATOMIC-TRAILING-NEXT:    sb zero, 0(a0)85; RV32-ATOMIC-TRAILING-NEXT:    fence rw, rw86; RV32-ATOMIC-TRAILING-NEXT:    ret87;88; RV64-NO-ATOMIC-LABEL: store8:89; RV64-NO-ATOMIC:       # %bb.0:90; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -1691; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill92; RV64-NO-ATOMIC-NEXT:    li a2, 593; RV64-NO-ATOMIC-NEXT:    li a1, 094; RV64-NO-ATOMIC-NEXT:    call __atomic_store_195; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload96; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 1697; RV64-NO-ATOMIC-NEXT:    ret98;99; RV64-ATOMIC-LABEL: store8:100; RV64-ATOMIC:       # %bb.0:101; RV64-ATOMIC-NEXT:    fence rw, w102; RV64-ATOMIC-NEXT:    sb zero, 0(a0)103; RV64-ATOMIC-NEXT:    ret104;105; RV64-ATOMIC-TRAILING-LABEL: store8:106; RV64-ATOMIC-TRAILING:       # %bb.0:107; RV64-ATOMIC-TRAILING-NEXT:    fence rw, w108; RV64-ATOMIC-TRAILING-NEXT:    sb zero, 0(a0)109; RV64-ATOMIC-TRAILING-NEXT:    fence rw, rw110; RV64-ATOMIC-TRAILING-NEXT:    ret111  store atomic i8 0, ptr %p seq_cst, align 1112  ret void113}114 115define i8 @rmw8(ptr %p) nounwind {116; RV32-NO-ATOMIC-LABEL: rmw8:117; RV32-NO-ATOMIC:       # %bb.0:118; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16119; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill120; RV32-NO-ATOMIC-NEXT:    li a1, 1121; RV32-NO-ATOMIC-NEXT:    li a2, 5122; RV32-NO-ATOMIC-NEXT:    call __atomic_fetch_add_1123; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload124; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16125; RV32-NO-ATOMIC-NEXT:    ret126;127; RV32-ATOMIC-LABEL: rmw8:128; RV32-ATOMIC:       # %bb.0:129; RV32-ATOMIC-NEXT:    addi sp, sp, -16130; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill131; RV32-ATOMIC-NEXT:    li a1, 1132; RV32-ATOMIC-NEXT:    call __sync_fetch_and_add_1133; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload134; RV32-ATOMIC-NEXT:    addi sp, sp, 16135; RV32-ATOMIC-NEXT:    ret136;137; RV32-ATOMIC-TRAILING-LABEL: rmw8:138; RV32-ATOMIC-TRAILING:       # %bb.0:139; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -16140; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill141; RV32-ATOMIC-TRAILING-NEXT:    li a1, 1142; RV32-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_add_1143; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload144; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 16145; RV32-ATOMIC-TRAILING-NEXT:    ret146;147; RV64-NO-ATOMIC-LABEL: rmw8:148; RV64-NO-ATOMIC:       # %bb.0:149; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16150; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill151; RV64-NO-ATOMIC-NEXT:    li a1, 1152; RV64-NO-ATOMIC-NEXT:    li a2, 5153; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_add_1154; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload155; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16156; RV64-NO-ATOMIC-NEXT:    ret157;158; RV64-ATOMIC-LABEL: rmw8:159; RV64-ATOMIC:       # %bb.0:160; RV64-ATOMIC-NEXT:    addi sp, sp, -16161; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill162; RV64-ATOMIC-NEXT:    li a1, 1163; RV64-ATOMIC-NEXT:    call __sync_fetch_and_add_1164; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload165; RV64-ATOMIC-NEXT:    addi sp, sp, 16166; RV64-ATOMIC-NEXT:    ret167;168; RV64-ATOMIC-TRAILING-LABEL: rmw8:169; RV64-ATOMIC-TRAILING:       # %bb.0:170; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -16171; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill172; RV64-ATOMIC-TRAILING-NEXT:    li a1, 1173; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_add_1174; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload175; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 16176; RV64-ATOMIC-TRAILING-NEXT:    ret177  %v = atomicrmw add ptr %p, i8 1 seq_cst, align 1178  ret i8 %v179}180 181define i8 @cmpxchg8(ptr %p) nounwind {182; RV32-NO-ATOMIC-LABEL: cmpxchg8:183; RV32-NO-ATOMIC:       # %bb.0:184; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16185; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill186; RV32-NO-ATOMIC-NEXT:    sb zero, 11(sp)187; RV32-NO-ATOMIC-NEXT:    addi a1, sp, 11188; RV32-NO-ATOMIC-NEXT:    li a2, 1189; RV32-NO-ATOMIC-NEXT:    li a3, 5190; RV32-NO-ATOMIC-NEXT:    li a4, 5191; RV32-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_1192; RV32-NO-ATOMIC-NEXT:    lbu a0, 11(sp)193; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload194; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16195; RV32-NO-ATOMIC-NEXT:    ret196;197; RV32-ATOMIC-LABEL: cmpxchg8:198; RV32-ATOMIC:       # %bb.0:199; RV32-ATOMIC-NEXT:    addi sp, sp, -16200; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill201; RV32-ATOMIC-NEXT:    li a2, 1202; RV32-ATOMIC-NEXT:    li a1, 0203; RV32-ATOMIC-NEXT:    call __sync_val_compare_and_swap_1204; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload205; RV32-ATOMIC-NEXT:    addi sp, sp, 16206; RV32-ATOMIC-NEXT:    ret207;208; RV32-ATOMIC-TRAILING-LABEL: cmpxchg8:209; RV32-ATOMIC-TRAILING:       # %bb.0:210; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -16211; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill212; RV32-ATOMIC-TRAILING-NEXT:    li a2, 1213; RV32-ATOMIC-TRAILING-NEXT:    li a1, 0214; RV32-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_1215; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload216; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 16217; RV32-ATOMIC-TRAILING-NEXT:    ret218;219; RV64-NO-ATOMIC-LABEL: cmpxchg8:220; RV64-NO-ATOMIC:       # %bb.0:221; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16222; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill223; RV64-NO-ATOMIC-NEXT:    sb zero, 7(sp)224; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 7225; RV64-NO-ATOMIC-NEXT:    li a2, 1226; RV64-NO-ATOMIC-NEXT:    li a3, 5227; RV64-NO-ATOMIC-NEXT:    li a4, 5228; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_1229; RV64-NO-ATOMIC-NEXT:    lbu a0, 7(sp)230; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload231; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16232; RV64-NO-ATOMIC-NEXT:    ret233;234; RV64-ATOMIC-LABEL: cmpxchg8:235; RV64-ATOMIC:       # %bb.0:236; RV64-ATOMIC-NEXT:    addi sp, sp, -16237; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill238; RV64-ATOMIC-NEXT:    li a2, 1239; RV64-ATOMIC-NEXT:    li a1, 0240; RV64-ATOMIC-NEXT:    call __sync_val_compare_and_swap_1241; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload242; RV64-ATOMIC-NEXT:    addi sp, sp, 16243; RV64-ATOMIC-NEXT:    ret244;245; RV64-ATOMIC-TRAILING-LABEL: cmpxchg8:246; RV64-ATOMIC-TRAILING:       # %bb.0:247; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -16248; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill249; RV64-ATOMIC-TRAILING-NEXT:    li a2, 1250; RV64-ATOMIC-TRAILING-NEXT:    li a1, 0251; RV64-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_1252; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload253; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 16254; RV64-ATOMIC-TRAILING-NEXT:    ret255  %res = cmpxchg ptr %p, i8 0, i8 1 seq_cst seq_cst256  %res.0 = extractvalue { i8, i1 } %res, 0257  ret i8 %res.0258}259 260define i16 @load16(ptr %p) nounwind {261; RV32-NO-ATOMIC-LABEL: load16:262; RV32-NO-ATOMIC:       # %bb.0:263; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16264; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill265; RV32-NO-ATOMIC-NEXT:    li a1, 5266; RV32-NO-ATOMIC-NEXT:    call __atomic_load_2267; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload268; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16269; RV32-NO-ATOMIC-NEXT:    ret270;271; RV32-ATOMIC-LABEL: load16:272; RV32-ATOMIC:       # %bb.0:273; RV32-ATOMIC-NEXT:    fence rw, rw274; RV32-ATOMIC-NEXT:    lh a0, 0(a0)275; RV32-ATOMIC-NEXT:    fence r, rw276; RV32-ATOMIC-NEXT:    ret277;278; RV32-ATOMIC-TRAILING-LABEL: load16:279; RV32-ATOMIC-TRAILING:       # %bb.0:280; RV32-ATOMIC-TRAILING-NEXT:    fence rw, rw281; RV32-ATOMIC-TRAILING-NEXT:    lh a0, 0(a0)282; RV32-ATOMIC-TRAILING-NEXT:    fence r, rw283; RV32-ATOMIC-TRAILING-NEXT:    ret284;285; RV64-NO-ATOMIC-LABEL: load16:286; RV64-NO-ATOMIC:       # %bb.0:287; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16288; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill289; RV64-NO-ATOMIC-NEXT:    li a1, 5290; RV64-NO-ATOMIC-NEXT:    call __atomic_load_2291; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload292; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16293; RV64-NO-ATOMIC-NEXT:    ret294;295; RV64-ATOMIC-LABEL: load16:296; RV64-ATOMIC:       # %bb.0:297; RV64-ATOMIC-NEXT:    fence rw, rw298; RV64-ATOMIC-NEXT:    lh a0, 0(a0)299; RV64-ATOMIC-NEXT:    fence r, rw300; RV64-ATOMIC-NEXT:    ret301;302; RV64-ATOMIC-TRAILING-LABEL: load16:303; RV64-ATOMIC-TRAILING:       # %bb.0:304; RV64-ATOMIC-TRAILING-NEXT:    fence rw, rw305; RV64-ATOMIC-TRAILING-NEXT:    lh a0, 0(a0)306; RV64-ATOMIC-TRAILING-NEXT:    fence r, rw307; RV64-ATOMIC-TRAILING-NEXT:    ret308  %v = load atomic i16, ptr %p seq_cst, align 2309  ret i16 %v310}311 312define void @store16(ptr %p) nounwind {313; RV32-NO-ATOMIC-LABEL: store16:314; RV32-NO-ATOMIC:       # %bb.0:315; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16316; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill317; RV32-NO-ATOMIC-NEXT:    li a2, 5318; RV32-NO-ATOMIC-NEXT:    li a1, 0319; RV32-NO-ATOMIC-NEXT:    call __atomic_store_2320; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload321; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16322; RV32-NO-ATOMIC-NEXT:    ret323;324; RV32-ATOMIC-LABEL: store16:325; RV32-ATOMIC:       # %bb.0:326; RV32-ATOMIC-NEXT:    fence rw, w327; RV32-ATOMIC-NEXT:    sh zero, 0(a0)328; RV32-ATOMIC-NEXT:    ret329;330; RV32-ATOMIC-TRAILING-LABEL: store16:331; RV32-ATOMIC-TRAILING:       # %bb.0:332; RV32-ATOMIC-TRAILING-NEXT:    fence rw, w333; RV32-ATOMIC-TRAILING-NEXT:    sh zero, 0(a0)334; RV32-ATOMIC-TRAILING-NEXT:    fence rw, rw335; RV32-ATOMIC-TRAILING-NEXT:    ret336;337; RV64-NO-ATOMIC-LABEL: store16:338; RV64-NO-ATOMIC:       # %bb.0:339; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16340; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill341; RV64-NO-ATOMIC-NEXT:    li a2, 5342; RV64-NO-ATOMIC-NEXT:    li a1, 0343; RV64-NO-ATOMIC-NEXT:    call __atomic_store_2344; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload345; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16346; RV64-NO-ATOMIC-NEXT:    ret347;348; RV64-ATOMIC-LABEL: store16:349; RV64-ATOMIC:       # %bb.0:350; RV64-ATOMIC-NEXT:    fence rw, w351; RV64-ATOMIC-NEXT:    sh zero, 0(a0)352; RV64-ATOMIC-NEXT:    ret353;354; RV64-ATOMIC-TRAILING-LABEL: store16:355; RV64-ATOMIC-TRAILING:       # %bb.0:356; RV64-ATOMIC-TRAILING-NEXT:    fence rw, w357; RV64-ATOMIC-TRAILING-NEXT:    sh zero, 0(a0)358; RV64-ATOMIC-TRAILING-NEXT:    fence rw, rw359; RV64-ATOMIC-TRAILING-NEXT:    ret360  store atomic i16 0, ptr %p seq_cst, align 2361  ret void362}363 364define i16 @rmw16(ptr %p) nounwind {365; RV32-NO-ATOMIC-LABEL: rmw16:366; RV32-NO-ATOMIC:       # %bb.0:367; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16368; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill369; RV32-NO-ATOMIC-NEXT:    li a1, 1370; RV32-NO-ATOMIC-NEXT:    li a2, 5371; RV32-NO-ATOMIC-NEXT:    call __atomic_fetch_add_2372; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload373; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16374; RV32-NO-ATOMIC-NEXT:    ret375;376; RV32-ATOMIC-LABEL: rmw16:377; RV32-ATOMIC:       # %bb.0:378; RV32-ATOMIC-NEXT:    addi sp, sp, -16379; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill380; RV32-ATOMIC-NEXT:    li a1, 1381; RV32-ATOMIC-NEXT:    call __sync_fetch_and_add_2382; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload383; RV32-ATOMIC-NEXT:    addi sp, sp, 16384; RV32-ATOMIC-NEXT:    ret385;386; RV32-ATOMIC-TRAILING-LABEL: rmw16:387; RV32-ATOMIC-TRAILING:       # %bb.0:388; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -16389; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill390; RV32-ATOMIC-TRAILING-NEXT:    li a1, 1391; RV32-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_add_2392; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload393; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 16394; RV32-ATOMIC-TRAILING-NEXT:    ret395;396; RV64-NO-ATOMIC-LABEL: rmw16:397; RV64-NO-ATOMIC:       # %bb.0:398; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16399; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill400; RV64-NO-ATOMIC-NEXT:    li a1, 1401; RV64-NO-ATOMIC-NEXT:    li a2, 5402; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_add_2403; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload404; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16405; RV64-NO-ATOMIC-NEXT:    ret406;407; RV64-ATOMIC-LABEL: rmw16:408; RV64-ATOMIC:       # %bb.0:409; RV64-ATOMIC-NEXT:    addi sp, sp, -16410; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill411; RV64-ATOMIC-NEXT:    li a1, 1412; RV64-ATOMIC-NEXT:    call __sync_fetch_and_add_2413; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload414; RV64-ATOMIC-NEXT:    addi sp, sp, 16415; RV64-ATOMIC-NEXT:    ret416;417; RV64-ATOMIC-TRAILING-LABEL: rmw16:418; RV64-ATOMIC-TRAILING:       # %bb.0:419; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -16420; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill421; RV64-ATOMIC-TRAILING-NEXT:    li a1, 1422; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_add_2423; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload424; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 16425; RV64-ATOMIC-TRAILING-NEXT:    ret426  %v = atomicrmw add ptr %p, i16 1 seq_cst, align 2427  ret i16 %v428}429 430define i16 @cmpxchg16(ptr %p) nounwind {431; RV32-NO-ATOMIC-LABEL: cmpxchg16:432; RV32-NO-ATOMIC:       # %bb.0:433; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16434; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill435; RV32-NO-ATOMIC-NEXT:    sh zero, 10(sp)436; RV32-NO-ATOMIC-NEXT:    addi a1, sp, 10437; RV32-NO-ATOMIC-NEXT:    li a2, 1438; RV32-NO-ATOMIC-NEXT:    li a3, 5439; RV32-NO-ATOMIC-NEXT:    li a4, 5440; RV32-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_2441; RV32-NO-ATOMIC-NEXT:    lh a0, 10(sp)442; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload443; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16444; RV32-NO-ATOMIC-NEXT:    ret445;446; RV32-ATOMIC-LABEL: cmpxchg16:447; RV32-ATOMIC:       # %bb.0:448; RV32-ATOMIC-NEXT:    addi sp, sp, -16449; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill450; RV32-ATOMIC-NEXT:    li a2, 1451; RV32-ATOMIC-NEXT:    li a1, 0452; RV32-ATOMIC-NEXT:    call __sync_val_compare_and_swap_2453; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload454; RV32-ATOMIC-NEXT:    addi sp, sp, 16455; RV32-ATOMIC-NEXT:    ret456;457; RV32-ATOMIC-TRAILING-LABEL: cmpxchg16:458; RV32-ATOMIC-TRAILING:       # %bb.0:459; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -16460; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill461; RV32-ATOMIC-TRAILING-NEXT:    li a2, 1462; RV32-ATOMIC-TRAILING-NEXT:    li a1, 0463; RV32-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_2464; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload465; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 16466; RV32-ATOMIC-TRAILING-NEXT:    ret467;468; RV64-NO-ATOMIC-LABEL: cmpxchg16:469; RV64-NO-ATOMIC:       # %bb.0:470; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16471; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill472; RV64-NO-ATOMIC-NEXT:    sh zero, 6(sp)473; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 6474; RV64-NO-ATOMIC-NEXT:    li a2, 1475; RV64-NO-ATOMIC-NEXT:    li a3, 5476; RV64-NO-ATOMIC-NEXT:    li a4, 5477; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_2478; RV64-NO-ATOMIC-NEXT:    lh a0, 6(sp)479; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload480; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16481; RV64-NO-ATOMIC-NEXT:    ret482;483; RV64-ATOMIC-LABEL: cmpxchg16:484; RV64-ATOMIC:       # %bb.0:485; RV64-ATOMIC-NEXT:    addi sp, sp, -16486; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill487; RV64-ATOMIC-NEXT:    li a2, 1488; RV64-ATOMIC-NEXT:    li a1, 0489; RV64-ATOMIC-NEXT:    call __sync_val_compare_and_swap_2490; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload491; RV64-ATOMIC-NEXT:    addi sp, sp, 16492; RV64-ATOMIC-NEXT:    ret493;494; RV64-ATOMIC-TRAILING-LABEL: cmpxchg16:495; RV64-ATOMIC-TRAILING:       # %bb.0:496; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -16497; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill498; RV64-ATOMIC-TRAILING-NEXT:    li a2, 1499; RV64-ATOMIC-TRAILING-NEXT:    li a1, 0500; RV64-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_2501; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload502; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 16503; RV64-ATOMIC-TRAILING-NEXT:    ret504  %res = cmpxchg ptr %p, i16 0, i16 1 seq_cst seq_cst505  %res.0 = extractvalue { i16, i1 } %res, 0506  ret i16 %res.0507}508 509define i32 @load32_unordered(ptr %p) nounwind {510; RV32-NO-ATOMIC-LABEL: load32_unordered:511; RV32-NO-ATOMIC:       # %bb.0:512; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16513; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill514; RV32-NO-ATOMIC-NEXT:    li a1, 0515; RV32-NO-ATOMIC-NEXT:    call __atomic_load_4516; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload517; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16518; RV32-NO-ATOMIC-NEXT:    ret519;520; RV32-ATOMIC-LABEL: load32_unordered:521; RV32-ATOMIC:       # %bb.0:522; RV32-ATOMIC-NEXT:    lw a0, 0(a0)523; RV32-ATOMIC-NEXT:    ret524;525; RV32-ATOMIC-TRAILING-LABEL: load32_unordered:526; RV32-ATOMIC-TRAILING:       # %bb.0:527; RV32-ATOMIC-TRAILING-NEXT:    lw a0, 0(a0)528; RV32-ATOMIC-TRAILING-NEXT:    ret529;530; RV64-NO-ATOMIC-LABEL: load32_unordered:531; RV64-NO-ATOMIC:       # %bb.0:532; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16533; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill534; RV64-NO-ATOMIC-NEXT:    li a1, 0535; RV64-NO-ATOMIC-NEXT:    call __atomic_load_4536; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload537; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16538; RV64-NO-ATOMIC-NEXT:    ret539;540; RV64-ATOMIC-LABEL: load32_unordered:541; RV64-ATOMIC:       # %bb.0:542; RV64-ATOMIC-NEXT:    lw a0, 0(a0)543; RV64-ATOMIC-NEXT:    ret544;545; RV64-ATOMIC-TRAILING-LABEL: load32_unordered:546; RV64-ATOMIC-TRAILING:       # %bb.0:547; RV64-ATOMIC-TRAILING-NEXT:    lw a0, 0(a0)548; RV64-ATOMIC-TRAILING-NEXT:    ret549  %v = load atomic i32, ptr %p unordered, align 4550  ret i32 %v551}552 553define i32 @load32_monotonic(ptr %p) nounwind {554; RV32-NO-ATOMIC-LABEL: load32_monotonic:555; RV32-NO-ATOMIC:       # %bb.0:556; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16557; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill558; RV32-NO-ATOMIC-NEXT:    li a1, 0559; RV32-NO-ATOMIC-NEXT:    call __atomic_load_4560; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload561; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16562; RV32-NO-ATOMIC-NEXT:    ret563;564; RV32-ATOMIC-LABEL: load32_monotonic:565; RV32-ATOMIC:       # %bb.0:566; RV32-ATOMIC-NEXT:    lw a0, 0(a0)567; RV32-ATOMIC-NEXT:    ret568;569; RV32-ATOMIC-TRAILING-LABEL: load32_monotonic:570; RV32-ATOMIC-TRAILING:       # %bb.0:571; RV32-ATOMIC-TRAILING-NEXT:    lw a0, 0(a0)572; RV32-ATOMIC-TRAILING-NEXT:    ret573;574; RV64-NO-ATOMIC-LABEL: load32_monotonic:575; RV64-NO-ATOMIC:       # %bb.0:576; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16577; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill578; RV64-NO-ATOMIC-NEXT:    li a1, 0579; RV64-NO-ATOMIC-NEXT:    call __atomic_load_4580; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload581; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16582; RV64-NO-ATOMIC-NEXT:    ret583;584; RV64-ATOMIC-LABEL: load32_monotonic:585; RV64-ATOMIC:       # %bb.0:586; RV64-ATOMIC-NEXT:    lw a0, 0(a0)587; RV64-ATOMIC-NEXT:    ret588;589; RV64-ATOMIC-TRAILING-LABEL: load32_monotonic:590; RV64-ATOMIC-TRAILING:       # %bb.0:591; RV64-ATOMIC-TRAILING-NEXT:    lw a0, 0(a0)592; RV64-ATOMIC-TRAILING-NEXT:    ret593  %v = load atomic i32, ptr %p monotonic, align 4594  ret i32 %v595}596 597define i32 @load32_acquire(ptr %p) nounwind {598; RV32-NO-ATOMIC-LABEL: load32_acquire:599; RV32-NO-ATOMIC:       # %bb.0:600; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16601; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill602; RV32-NO-ATOMIC-NEXT:    li a1, 2603; RV32-NO-ATOMIC-NEXT:    call __atomic_load_4604; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload605; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16606; RV32-NO-ATOMIC-NEXT:    ret607;608; RV32-ATOMIC-LABEL: load32_acquire:609; RV32-ATOMIC:       # %bb.0:610; RV32-ATOMIC-NEXT:    lw a0, 0(a0)611; RV32-ATOMIC-NEXT:    fence r, rw612; RV32-ATOMIC-NEXT:    ret613;614; RV32-ATOMIC-TRAILING-LABEL: load32_acquire:615; RV32-ATOMIC-TRAILING:       # %bb.0:616; RV32-ATOMIC-TRAILING-NEXT:    lw a0, 0(a0)617; RV32-ATOMIC-TRAILING-NEXT:    fence r, rw618; RV32-ATOMIC-TRAILING-NEXT:    ret619;620; RV64-NO-ATOMIC-LABEL: load32_acquire:621; RV64-NO-ATOMIC:       # %bb.0:622; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16623; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill624; RV64-NO-ATOMIC-NEXT:    li a1, 2625; RV64-NO-ATOMIC-NEXT:    call __atomic_load_4626; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload627; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16628; RV64-NO-ATOMIC-NEXT:    ret629;630; RV64-ATOMIC-LABEL: load32_acquire:631; RV64-ATOMIC:       # %bb.0:632; RV64-ATOMIC-NEXT:    lw a0, 0(a0)633; RV64-ATOMIC-NEXT:    fence r, rw634; RV64-ATOMIC-NEXT:    ret635;636; RV64-ATOMIC-TRAILING-LABEL: load32_acquire:637; RV64-ATOMIC-TRAILING:       # %bb.0:638; RV64-ATOMIC-TRAILING-NEXT:    lw a0, 0(a0)639; RV64-ATOMIC-TRAILING-NEXT:    fence r, rw640; RV64-ATOMIC-TRAILING-NEXT:    ret641  %v = load atomic i32, ptr %p acquire, align 4642  ret i32 %v643}644 645define i32 @load32_seq_cst(ptr %p) nounwind {646; RV32-NO-ATOMIC-LABEL: load32_seq_cst:647; RV32-NO-ATOMIC:       # %bb.0:648; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16649; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill650; RV32-NO-ATOMIC-NEXT:    li a1, 5651; RV32-NO-ATOMIC-NEXT:    call __atomic_load_4652; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload653; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16654; RV32-NO-ATOMIC-NEXT:    ret655;656; RV32-ATOMIC-LABEL: load32_seq_cst:657; RV32-ATOMIC:       # %bb.0:658; RV32-ATOMIC-NEXT:    fence rw, rw659; RV32-ATOMIC-NEXT:    lw a0, 0(a0)660; RV32-ATOMIC-NEXT:    fence r, rw661; RV32-ATOMIC-NEXT:    ret662;663; RV32-ATOMIC-TRAILING-LABEL: load32_seq_cst:664; RV32-ATOMIC-TRAILING:       # %bb.0:665; RV32-ATOMIC-TRAILING-NEXT:    fence rw, rw666; RV32-ATOMIC-TRAILING-NEXT:    lw a0, 0(a0)667; RV32-ATOMIC-TRAILING-NEXT:    fence r, rw668; RV32-ATOMIC-TRAILING-NEXT:    ret669;670; RV64-NO-ATOMIC-LABEL: load32_seq_cst:671; RV64-NO-ATOMIC:       # %bb.0:672; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16673; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill674; RV64-NO-ATOMIC-NEXT:    li a1, 5675; RV64-NO-ATOMIC-NEXT:    call __atomic_load_4676; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload677; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16678; RV64-NO-ATOMIC-NEXT:    ret679;680; RV64-ATOMIC-LABEL: load32_seq_cst:681; RV64-ATOMIC:       # %bb.0:682; RV64-ATOMIC-NEXT:    fence rw, rw683; RV64-ATOMIC-NEXT:    lw a0, 0(a0)684; RV64-ATOMIC-NEXT:    fence r, rw685; RV64-ATOMIC-NEXT:    ret686;687; RV64-ATOMIC-TRAILING-LABEL: load32_seq_cst:688; RV64-ATOMIC-TRAILING:       # %bb.0:689; RV64-ATOMIC-TRAILING-NEXT:    fence rw, rw690; RV64-ATOMIC-TRAILING-NEXT:    lw a0, 0(a0)691; RV64-ATOMIC-TRAILING-NEXT:    fence r, rw692; RV64-ATOMIC-TRAILING-NEXT:    ret693  %v = load atomic i32, ptr %p seq_cst, align 4694  ret i32 %v695}696 697define void @store32_unordered(ptr %p) nounwind {698; RV32-NO-ATOMIC-LABEL: store32_unordered:699; RV32-NO-ATOMIC:       # %bb.0:700; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16701; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill702; RV32-NO-ATOMIC-NEXT:    li a1, 0703; RV32-NO-ATOMIC-NEXT:    li a2, 0704; RV32-NO-ATOMIC-NEXT:    call __atomic_store_4705; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload706; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16707; RV32-NO-ATOMIC-NEXT:    ret708;709; RV32-ATOMIC-LABEL: store32_unordered:710; RV32-ATOMIC:       # %bb.0:711; RV32-ATOMIC-NEXT:    sw zero, 0(a0)712; RV32-ATOMIC-NEXT:    ret713;714; RV32-ATOMIC-TRAILING-LABEL: store32_unordered:715; RV32-ATOMIC-TRAILING:       # %bb.0:716; RV32-ATOMIC-TRAILING-NEXT:    sw zero, 0(a0)717; RV32-ATOMIC-TRAILING-NEXT:    ret718;719; RV64-NO-ATOMIC-LABEL: store32_unordered:720; RV64-NO-ATOMIC:       # %bb.0:721; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16722; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill723; RV64-NO-ATOMIC-NEXT:    li a1, 0724; RV64-NO-ATOMIC-NEXT:    li a2, 0725; RV64-NO-ATOMIC-NEXT:    call __atomic_store_4726; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload727; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16728; RV64-NO-ATOMIC-NEXT:    ret729;730; RV64-ATOMIC-LABEL: store32_unordered:731; RV64-ATOMIC:       # %bb.0:732; RV64-ATOMIC-NEXT:    sw zero, 0(a0)733; RV64-ATOMIC-NEXT:    ret734;735; RV64-ATOMIC-TRAILING-LABEL: store32_unordered:736; RV64-ATOMIC-TRAILING:       # %bb.0:737; RV64-ATOMIC-TRAILING-NEXT:    sw zero, 0(a0)738; RV64-ATOMIC-TRAILING-NEXT:    ret739  store atomic i32 0, ptr %p unordered, align 4740  ret void741}742 743define void @store32_monotonic(ptr %p) nounwind {744; RV32-NO-ATOMIC-LABEL: store32_monotonic:745; RV32-NO-ATOMIC:       # %bb.0:746; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16747; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill748; RV32-NO-ATOMIC-NEXT:    li a1, 0749; RV32-NO-ATOMIC-NEXT:    li a2, 0750; RV32-NO-ATOMIC-NEXT:    call __atomic_store_4751; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload752; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16753; RV32-NO-ATOMIC-NEXT:    ret754;755; RV32-ATOMIC-LABEL: store32_monotonic:756; RV32-ATOMIC:       # %bb.0:757; RV32-ATOMIC-NEXT:    sw zero, 0(a0)758; RV32-ATOMIC-NEXT:    ret759;760; RV32-ATOMIC-TRAILING-LABEL: store32_monotonic:761; RV32-ATOMIC-TRAILING:       # %bb.0:762; RV32-ATOMIC-TRAILING-NEXT:    sw zero, 0(a0)763; RV32-ATOMIC-TRAILING-NEXT:    ret764;765; RV64-NO-ATOMIC-LABEL: store32_monotonic:766; RV64-NO-ATOMIC:       # %bb.0:767; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16768; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill769; RV64-NO-ATOMIC-NEXT:    li a1, 0770; RV64-NO-ATOMIC-NEXT:    li a2, 0771; RV64-NO-ATOMIC-NEXT:    call __atomic_store_4772; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload773; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16774; RV64-NO-ATOMIC-NEXT:    ret775;776; RV64-ATOMIC-LABEL: store32_monotonic:777; RV64-ATOMIC:       # %bb.0:778; RV64-ATOMIC-NEXT:    sw zero, 0(a0)779; RV64-ATOMIC-NEXT:    ret780;781; RV64-ATOMIC-TRAILING-LABEL: store32_monotonic:782; RV64-ATOMIC-TRAILING:       # %bb.0:783; RV64-ATOMIC-TRAILING-NEXT:    sw zero, 0(a0)784; RV64-ATOMIC-TRAILING-NEXT:    ret785  store atomic i32 0, ptr %p monotonic, align 4786  ret void787}788 789define void @store32_release(ptr %p) nounwind {790; RV32-NO-ATOMIC-LABEL: store32_release:791; RV32-NO-ATOMIC:       # %bb.0:792; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16793; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill794; RV32-NO-ATOMIC-NEXT:    li a2, 3795; RV32-NO-ATOMIC-NEXT:    li a1, 0796; RV32-NO-ATOMIC-NEXT:    call __atomic_store_4797; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload798; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16799; RV32-NO-ATOMIC-NEXT:    ret800;801; RV32-ATOMIC-LABEL: store32_release:802; RV32-ATOMIC:       # %bb.0:803; RV32-ATOMIC-NEXT:    fence rw, w804; RV32-ATOMIC-NEXT:    sw zero, 0(a0)805; RV32-ATOMIC-NEXT:    ret806;807; RV32-ATOMIC-TRAILING-LABEL: store32_release:808; RV32-ATOMIC-TRAILING:       # %bb.0:809; RV32-ATOMIC-TRAILING-NEXT:    fence rw, w810; RV32-ATOMIC-TRAILING-NEXT:    sw zero, 0(a0)811; RV32-ATOMIC-TRAILING-NEXT:    ret812;813; RV64-NO-ATOMIC-LABEL: store32_release:814; RV64-NO-ATOMIC:       # %bb.0:815; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16816; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill817; RV64-NO-ATOMIC-NEXT:    li a2, 3818; RV64-NO-ATOMIC-NEXT:    li a1, 0819; RV64-NO-ATOMIC-NEXT:    call __atomic_store_4820; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload821; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16822; RV64-NO-ATOMIC-NEXT:    ret823;824; RV64-ATOMIC-LABEL: store32_release:825; RV64-ATOMIC:       # %bb.0:826; RV64-ATOMIC-NEXT:    fence rw, w827; RV64-ATOMIC-NEXT:    sw zero, 0(a0)828; RV64-ATOMIC-NEXT:    ret829;830; RV64-ATOMIC-TRAILING-LABEL: store32_release:831; RV64-ATOMIC-TRAILING:       # %bb.0:832; RV64-ATOMIC-TRAILING-NEXT:    fence rw, w833; RV64-ATOMIC-TRAILING-NEXT:    sw zero, 0(a0)834; RV64-ATOMIC-TRAILING-NEXT:    ret835  store atomic i32 0, ptr %p release, align 4836  ret void837}838 839define void @store32_seq_cst(ptr %p) nounwind {840; RV32-NO-ATOMIC-LABEL: store32_seq_cst:841; RV32-NO-ATOMIC:       # %bb.0:842; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16843; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill844; RV32-NO-ATOMIC-NEXT:    li a2, 5845; RV32-NO-ATOMIC-NEXT:    li a1, 0846; RV32-NO-ATOMIC-NEXT:    call __atomic_store_4847; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload848; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16849; RV32-NO-ATOMIC-NEXT:    ret850;851; RV32-ATOMIC-LABEL: store32_seq_cst:852; RV32-ATOMIC:       # %bb.0:853; RV32-ATOMIC-NEXT:    fence rw, w854; RV32-ATOMIC-NEXT:    sw zero, 0(a0)855; RV32-ATOMIC-NEXT:    ret856;857; RV32-ATOMIC-TRAILING-LABEL: store32_seq_cst:858; RV32-ATOMIC-TRAILING:       # %bb.0:859; RV32-ATOMIC-TRAILING-NEXT:    fence rw, w860; RV32-ATOMIC-TRAILING-NEXT:    sw zero, 0(a0)861; RV32-ATOMIC-TRAILING-NEXT:    fence rw, rw862; RV32-ATOMIC-TRAILING-NEXT:    ret863;864; RV64-NO-ATOMIC-LABEL: store32_seq_cst:865; RV64-NO-ATOMIC:       # %bb.0:866; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16867; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill868; RV64-NO-ATOMIC-NEXT:    li a2, 5869; RV64-NO-ATOMIC-NEXT:    li a1, 0870; RV64-NO-ATOMIC-NEXT:    call __atomic_store_4871; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload872; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16873; RV64-NO-ATOMIC-NEXT:    ret874;875; RV64-ATOMIC-LABEL: store32_seq_cst:876; RV64-ATOMIC:       # %bb.0:877; RV64-ATOMIC-NEXT:    fence rw, w878; RV64-ATOMIC-NEXT:    sw zero, 0(a0)879; RV64-ATOMIC-NEXT:    ret880;881; RV64-ATOMIC-TRAILING-LABEL: store32_seq_cst:882; RV64-ATOMIC-TRAILING:       # %bb.0:883; RV64-ATOMIC-TRAILING-NEXT:    fence rw, w884; RV64-ATOMIC-TRAILING-NEXT:    sw zero, 0(a0)885; RV64-ATOMIC-TRAILING-NEXT:    fence rw, rw886; RV64-ATOMIC-TRAILING-NEXT:    ret887  store atomic i32 0, ptr %p seq_cst, align 4888  ret void889}890 891define i32 @rmw32_add_monotonic(ptr %p) nounwind {892; RV32-NO-ATOMIC-LABEL: rmw32_add_monotonic:893; RV32-NO-ATOMIC:       # %bb.0:894; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16895; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill896; RV32-NO-ATOMIC-NEXT:    li a1, 1897; RV32-NO-ATOMIC-NEXT:    li a2, 0898; RV32-NO-ATOMIC-NEXT:    call __atomic_fetch_add_4899; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload900; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16901; RV32-NO-ATOMIC-NEXT:    ret902;903; RV32-ATOMIC-LABEL: rmw32_add_monotonic:904; RV32-ATOMIC:       # %bb.0:905; RV32-ATOMIC-NEXT:    addi sp, sp, -16906; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill907; RV32-ATOMIC-NEXT:    li a1, 1908; RV32-ATOMIC-NEXT:    call __sync_fetch_and_add_4909; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload910; RV32-ATOMIC-NEXT:    addi sp, sp, 16911; RV32-ATOMIC-NEXT:    ret912;913; RV32-ATOMIC-TRAILING-LABEL: rmw32_add_monotonic:914; RV32-ATOMIC-TRAILING:       # %bb.0:915; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -16916; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill917; RV32-ATOMIC-TRAILING-NEXT:    li a1, 1918; RV32-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_add_4919; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload920; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 16921; RV32-ATOMIC-TRAILING-NEXT:    ret922;923; RV64-NO-ATOMIC-LABEL: rmw32_add_monotonic:924; RV64-NO-ATOMIC:       # %bb.0:925; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16926; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill927; RV64-NO-ATOMIC-NEXT:    li a1, 1928; RV64-NO-ATOMIC-NEXT:    li a2, 0929; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_add_4930; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload931; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16932; RV64-NO-ATOMIC-NEXT:    ret933;934; RV64-ATOMIC-LABEL: rmw32_add_monotonic:935; RV64-ATOMIC:       # %bb.0:936; RV64-ATOMIC-NEXT:    addi sp, sp, -16937; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill938; RV64-ATOMIC-NEXT:    li a1, 1939; RV64-ATOMIC-NEXT:    call __sync_fetch_and_add_4940; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload941; RV64-ATOMIC-NEXT:    addi sp, sp, 16942; RV64-ATOMIC-NEXT:    ret943;944; RV64-ATOMIC-TRAILING-LABEL: rmw32_add_monotonic:945; RV64-ATOMIC-TRAILING:       # %bb.0:946; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -16947; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill948; RV64-ATOMIC-TRAILING-NEXT:    li a1, 1949; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_add_4950; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload951; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 16952; RV64-ATOMIC-TRAILING-NEXT:    ret953  %v = atomicrmw add ptr %p, i32 1 monotonic, align 4954  ret i32 %v955}956 957define i32 @rmw32_add_seq_cst(ptr %p) nounwind {958; RV32-NO-ATOMIC-LABEL: rmw32_add_seq_cst:959; RV32-NO-ATOMIC:       # %bb.0:960; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -16961; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill962; RV32-NO-ATOMIC-NEXT:    li a1, 1963; RV32-NO-ATOMIC-NEXT:    li a2, 5964; RV32-NO-ATOMIC-NEXT:    call __atomic_fetch_add_4965; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload966; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 16967; RV32-NO-ATOMIC-NEXT:    ret968;969; RV32-ATOMIC-LABEL: rmw32_add_seq_cst:970; RV32-ATOMIC:       # %bb.0:971; RV32-ATOMIC-NEXT:    addi sp, sp, -16972; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill973; RV32-ATOMIC-NEXT:    li a1, 1974; RV32-ATOMIC-NEXT:    call __sync_fetch_and_add_4975; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload976; RV32-ATOMIC-NEXT:    addi sp, sp, 16977; RV32-ATOMIC-NEXT:    ret978;979; RV32-ATOMIC-TRAILING-LABEL: rmw32_add_seq_cst:980; RV32-ATOMIC-TRAILING:       # %bb.0:981; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -16982; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill983; RV32-ATOMIC-TRAILING-NEXT:    li a1, 1984; RV32-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_add_4985; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload986; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 16987; RV32-ATOMIC-TRAILING-NEXT:    ret988;989; RV64-NO-ATOMIC-LABEL: rmw32_add_seq_cst:990; RV64-NO-ATOMIC:       # %bb.0:991; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -16992; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill993; RV64-NO-ATOMIC-NEXT:    li a1, 1994; RV64-NO-ATOMIC-NEXT:    li a2, 5995; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_add_4996; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload997; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 16998; RV64-NO-ATOMIC-NEXT:    ret999;1000; RV64-ATOMIC-LABEL: rmw32_add_seq_cst:1001; RV64-ATOMIC:       # %bb.0:1002; RV64-ATOMIC-NEXT:    addi sp, sp, -161003; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1004; RV64-ATOMIC-NEXT:    li a1, 11005; RV64-ATOMIC-NEXT:    call __sync_fetch_and_add_41006; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1007; RV64-ATOMIC-NEXT:    addi sp, sp, 161008; RV64-ATOMIC-NEXT:    ret1009;1010; RV64-ATOMIC-TRAILING-LABEL: rmw32_add_seq_cst:1011; RV64-ATOMIC-TRAILING:       # %bb.0:1012; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161013; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1014; RV64-ATOMIC-TRAILING-NEXT:    li a1, 11015; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_add_41016; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1017; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161018; RV64-ATOMIC-TRAILING-NEXT:    ret1019  %v = atomicrmw add ptr %p, i32 1 seq_cst, align 41020  ret i32 %v1021}1022 1023define i32 @rmw32_sub_seq_cst(ptr %p) nounwind {1024; RV32-NO-ATOMIC-LABEL: rmw32_sub_seq_cst:1025; RV32-NO-ATOMIC:       # %bb.0:1026; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -161027; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1028; RV32-NO-ATOMIC-NEXT:    li a1, 11029; RV32-NO-ATOMIC-NEXT:    li a2, 51030; RV32-NO-ATOMIC-NEXT:    call __atomic_fetch_sub_41031; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1032; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 161033; RV32-NO-ATOMIC-NEXT:    ret1034;1035; RV32-ATOMIC-LABEL: rmw32_sub_seq_cst:1036; RV32-ATOMIC:       # %bb.0:1037; RV32-ATOMIC-NEXT:    addi sp, sp, -161038; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1039; RV32-ATOMIC-NEXT:    li a1, 11040; RV32-ATOMIC-NEXT:    call __sync_fetch_and_sub_41041; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1042; RV32-ATOMIC-NEXT:    addi sp, sp, 161043; RV32-ATOMIC-NEXT:    ret1044;1045; RV32-ATOMIC-TRAILING-LABEL: rmw32_sub_seq_cst:1046; RV32-ATOMIC-TRAILING:       # %bb.0:1047; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161048; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1049; RV32-ATOMIC-TRAILING-NEXT:    li a1, 11050; RV32-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_sub_41051; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1052; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161053; RV32-ATOMIC-TRAILING-NEXT:    ret1054;1055; RV64-NO-ATOMIC-LABEL: rmw32_sub_seq_cst:1056; RV64-NO-ATOMIC:       # %bb.0:1057; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -161058; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1059; RV64-NO-ATOMIC-NEXT:    li a1, 11060; RV64-NO-ATOMIC-NEXT:    li a2, 51061; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_sub_41062; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1063; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 161064; RV64-NO-ATOMIC-NEXT:    ret1065;1066; RV64-ATOMIC-LABEL: rmw32_sub_seq_cst:1067; RV64-ATOMIC:       # %bb.0:1068; RV64-ATOMIC-NEXT:    addi sp, sp, -161069; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1070; RV64-ATOMIC-NEXT:    li a1, 11071; RV64-ATOMIC-NEXT:    call __sync_fetch_and_sub_41072; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1073; RV64-ATOMIC-NEXT:    addi sp, sp, 161074; RV64-ATOMIC-NEXT:    ret1075;1076; RV64-ATOMIC-TRAILING-LABEL: rmw32_sub_seq_cst:1077; RV64-ATOMIC-TRAILING:       # %bb.0:1078; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161079; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1080; RV64-ATOMIC-TRAILING-NEXT:    li a1, 11081; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_sub_41082; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1083; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161084; RV64-ATOMIC-TRAILING-NEXT:    ret1085  %v = atomicrmw sub ptr %p, i32 1 seq_cst, align 41086  ret i32 %v1087}1088 1089define i32 @rmw32_and_seq_cst(ptr %p) nounwind {1090; RV32-NO-ATOMIC-LABEL: rmw32_and_seq_cst:1091; RV32-NO-ATOMIC:       # %bb.0:1092; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -161093; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1094; RV32-NO-ATOMIC-NEXT:    li a1, 11095; RV32-NO-ATOMIC-NEXT:    li a2, 51096; RV32-NO-ATOMIC-NEXT:    call __atomic_fetch_and_41097; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1098; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 161099; RV32-NO-ATOMIC-NEXT:    ret1100;1101; RV32-ATOMIC-LABEL: rmw32_and_seq_cst:1102; RV32-ATOMIC:       # %bb.0:1103; RV32-ATOMIC-NEXT:    addi sp, sp, -161104; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1105; RV32-ATOMIC-NEXT:    li a1, 11106; RV32-ATOMIC-NEXT:    call __sync_fetch_and_and_41107; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1108; RV32-ATOMIC-NEXT:    addi sp, sp, 161109; RV32-ATOMIC-NEXT:    ret1110;1111; RV32-ATOMIC-TRAILING-LABEL: rmw32_and_seq_cst:1112; RV32-ATOMIC-TRAILING:       # %bb.0:1113; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161114; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1115; RV32-ATOMIC-TRAILING-NEXT:    li a1, 11116; RV32-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_and_41117; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1118; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161119; RV32-ATOMIC-TRAILING-NEXT:    ret1120;1121; RV64-NO-ATOMIC-LABEL: rmw32_and_seq_cst:1122; RV64-NO-ATOMIC:       # %bb.0:1123; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -161124; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1125; RV64-NO-ATOMIC-NEXT:    li a1, 11126; RV64-NO-ATOMIC-NEXT:    li a2, 51127; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_and_41128; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1129; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 161130; RV64-NO-ATOMIC-NEXT:    ret1131;1132; RV64-ATOMIC-LABEL: rmw32_and_seq_cst:1133; RV64-ATOMIC:       # %bb.0:1134; RV64-ATOMIC-NEXT:    addi sp, sp, -161135; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1136; RV64-ATOMIC-NEXT:    li a1, 11137; RV64-ATOMIC-NEXT:    call __sync_fetch_and_and_41138; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1139; RV64-ATOMIC-NEXT:    addi sp, sp, 161140; RV64-ATOMIC-NEXT:    ret1141;1142; RV64-ATOMIC-TRAILING-LABEL: rmw32_and_seq_cst:1143; RV64-ATOMIC-TRAILING:       # %bb.0:1144; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161145; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1146; RV64-ATOMIC-TRAILING-NEXT:    li a1, 11147; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_and_41148; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1149; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161150; RV64-ATOMIC-TRAILING-NEXT:    ret1151  %v = atomicrmw and ptr %p, i32 1 seq_cst, align 41152  ret i32 %v1153}1154 1155define i32 @rmw32_nand_seq_cst(ptr %p) nounwind {1156; RV32-NO-ATOMIC-LABEL: rmw32_nand_seq_cst:1157; RV32-NO-ATOMIC:       # %bb.0:1158; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -161159; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1160; RV32-NO-ATOMIC-NEXT:    li a1, 11161; RV32-NO-ATOMIC-NEXT:    li a2, 51162; RV32-NO-ATOMIC-NEXT:    call __atomic_fetch_nand_41163; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1164; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 161165; RV32-NO-ATOMIC-NEXT:    ret1166;1167; RV32-ATOMIC-LABEL: rmw32_nand_seq_cst:1168; RV32-ATOMIC:       # %bb.0:1169; RV32-ATOMIC-NEXT:    addi sp, sp, -161170; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1171; RV32-ATOMIC-NEXT:    li a1, 11172; RV32-ATOMIC-NEXT:    call __sync_fetch_and_nand_41173; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1174; RV32-ATOMIC-NEXT:    addi sp, sp, 161175; RV32-ATOMIC-NEXT:    ret1176;1177; RV32-ATOMIC-TRAILING-LABEL: rmw32_nand_seq_cst:1178; RV32-ATOMIC-TRAILING:       # %bb.0:1179; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161180; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1181; RV32-ATOMIC-TRAILING-NEXT:    li a1, 11182; RV32-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_nand_41183; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1184; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161185; RV32-ATOMIC-TRAILING-NEXT:    ret1186;1187; RV64-NO-ATOMIC-LABEL: rmw32_nand_seq_cst:1188; RV64-NO-ATOMIC:       # %bb.0:1189; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -161190; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1191; RV64-NO-ATOMIC-NEXT:    li a1, 11192; RV64-NO-ATOMIC-NEXT:    li a2, 51193; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_nand_41194; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1195; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 161196; RV64-NO-ATOMIC-NEXT:    ret1197;1198; RV64-ATOMIC-LABEL: rmw32_nand_seq_cst:1199; RV64-ATOMIC:       # %bb.0:1200; RV64-ATOMIC-NEXT:    addi sp, sp, -161201; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1202; RV64-ATOMIC-NEXT:    li a1, 11203; RV64-ATOMIC-NEXT:    call __sync_fetch_and_nand_41204; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1205; RV64-ATOMIC-NEXT:    addi sp, sp, 161206; RV64-ATOMIC-NEXT:    ret1207;1208; RV64-ATOMIC-TRAILING-LABEL: rmw32_nand_seq_cst:1209; RV64-ATOMIC-TRAILING:       # %bb.0:1210; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161211; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1212; RV64-ATOMIC-TRAILING-NEXT:    li a1, 11213; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_nand_41214; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1215; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161216; RV64-ATOMIC-TRAILING-NEXT:    ret1217  %v = atomicrmw nand ptr %p, i32 1 seq_cst, align 41218  ret i32 %v1219}1220 1221define i32 @rmw32_or_seq_cst(ptr %p) nounwind {1222; RV32-NO-ATOMIC-LABEL: rmw32_or_seq_cst:1223; RV32-NO-ATOMIC:       # %bb.0:1224; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -161225; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1226; RV32-NO-ATOMIC-NEXT:    li a1, 11227; RV32-NO-ATOMIC-NEXT:    li a2, 51228; RV32-NO-ATOMIC-NEXT:    call __atomic_fetch_or_41229; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1230; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 161231; RV32-NO-ATOMIC-NEXT:    ret1232;1233; RV32-ATOMIC-LABEL: rmw32_or_seq_cst:1234; RV32-ATOMIC:       # %bb.0:1235; RV32-ATOMIC-NEXT:    addi sp, sp, -161236; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1237; RV32-ATOMIC-NEXT:    li a1, 11238; RV32-ATOMIC-NEXT:    call __sync_fetch_and_or_41239; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1240; RV32-ATOMIC-NEXT:    addi sp, sp, 161241; RV32-ATOMIC-NEXT:    ret1242;1243; RV32-ATOMIC-TRAILING-LABEL: rmw32_or_seq_cst:1244; RV32-ATOMIC-TRAILING:       # %bb.0:1245; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161246; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1247; RV32-ATOMIC-TRAILING-NEXT:    li a1, 11248; RV32-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_or_41249; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1250; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161251; RV32-ATOMIC-TRAILING-NEXT:    ret1252;1253; RV64-NO-ATOMIC-LABEL: rmw32_or_seq_cst:1254; RV64-NO-ATOMIC:       # %bb.0:1255; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -161256; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1257; RV64-NO-ATOMIC-NEXT:    li a1, 11258; RV64-NO-ATOMIC-NEXT:    li a2, 51259; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_or_41260; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1261; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 161262; RV64-NO-ATOMIC-NEXT:    ret1263;1264; RV64-ATOMIC-LABEL: rmw32_or_seq_cst:1265; RV64-ATOMIC:       # %bb.0:1266; RV64-ATOMIC-NEXT:    addi sp, sp, -161267; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1268; RV64-ATOMIC-NEXT:    li a1, 11269; RV64-ATOMIC-NEXT:    call __sync_fetch_and_or_41270; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1271; RV64-ATOMIC-NEXT:    addi sp, sp, 161272; RV64-ATOMIC-NEXT:    ret1273;1274; RV64-ATOMIC-TRAILING-LABEL: rmw32_or_seq_cst:1275; RV64-ATOMIC-TRAILING:       # %bb.0:1276; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161277; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1278; RV64-ATOMIC-TRAILING-NEXT:    li a1, 11279; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_or_41280; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1281; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161282; RV64-ATOMIC-TRAILING-NEXT:    ret1283  %v = atomicrmw or ptr %p, i32 1 seq_cst, align 41284  ret i32 %v1285}1286 1287define i32 @rmw32_xor_seq_cst(ptr %p) nounwind {1288; RV32-NO-ATOMIC-LABEL: rmw32_xor_seq_cst:1289; RV32-NO-ATOMIC:       # %bb.0:1290; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -161291; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1292; RV32-NO-ATOMIC-NEXT:    li a1, 11293; RV32-NO-ATOMIC-NEXT:    li a2, 51294; RV32-NO-ATOMIC-NEXT:    call __atomic_fetch_xor_41295; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1296; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 161297; RV32-NO-ATOMIC-NEXT:    ret1298;1299; RV32-ATOMIC-LABEL: rmw32_xor_seq_cst:1300; RV32-ATOMIC:       # %bb.0:1301; RV32-ATOMIC-NEXT:    addi sp, sp, -161302; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1303; RV32-ATOMIC-NEXT:    li a1, 11304; RV32-ATOMIC-NEXT:    call __sync_fetch_and_xor_41305; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1306; RV32-ATOMIC-NEXT:    addi sp, sp, 161307; RV32-ATOMIC-NEXT:    ret1308;1309; RV32-ATOMIC-TRAILING-LABEL: rmw32_xor_seq_cst:1310; RV32-ATOMIC-TRAILING:       # %bb.0:1311; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161312; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1313; RV32-ATOMIC-TRAILING-NEXT:    li a1, 11314; RV32-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_xor_41315; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1316; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161317; RV32-ATOMIC-TRAILING-NEXT:    ret1318;1319; RV64-NO-ATOMIC-LABEL: rmw32_xor_seq_cst:1320; RV64-NO-ATOMIC:       # %bb.0:1321; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -161322; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1323; RV64-NO-ATOMIC-NEXT:    li a1, 11324; RV64-NO-ATOMIC-NEXT:    li a2, 51325; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_xor_41326; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1327; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 161328; RV64-NO-ATOMIC-NEXT:    ret1329;1330; RV64-ATOMIC-LABEL: rmw32_xor_seq_cst:1331; RV64-ATOMIC:       # %bb.0:1332; RV64-ATOMIC-NEXT:    addi sp, sp, -161333; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1334; RV64-ATOMIC-NEXT:    li a1, 11335; RV64-ATOMIC-NEXT:    call __sync_fetch_and_xor_41336; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1337; RV64-ATOMIC-NEXT:    addi sp, sp, 161338; RV64-ATOMIC-NEXT:    ret1339;1340; RV64-ATOMIC-TRAILING-LABEL: rmw32_xor_seq_cst:1341; RV64-ATOMIC-TRAILING:       # %bb.0:1342; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161343; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1344; RV64-ATOMIC-TRAILING-NEXT:    li a1, 11345; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_xor_41346; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1347; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161348; RV64-ATOMIC-TRAILING-NEXT:    ret1349  %v = atomicrmw xor ptr %p, i32 1 seq_cst, align 41350  ret i32 %v1351}1352 1353define i32 @rmw32_max_seq_cst(ptr %p) nounwind {1354; RV32-NO-ATOMIC-LABEL: rmw32_max_seq_cst:1355; RV32-NO-ATOMIC:       # %bb.0:1356; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -161357; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1358; RV32-NO-ATOMIC-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1359; RV32-NO-ATOMIC-NEXT:    mv s0, a01360; RV32-NO-ATOMIC-NEXT:    lw a1, 0(a0)1361; RV32-NO-ATOMIC-NEXT:    j .LBB23_21362; RV32-NO-ATOMIC-NEXT:  .LBB23_1: # %atomicrmw.start1363; RV32-NO-ATOMIC-NEXT:    # in Loop: Header=BB23_2 Depth=11364; RV32-NO-ATOMIC-NEXT:    sw a1, 4(sp)1365; RV32-NO-ATOMIC-NEXT:    addi a1, sp, 41366; RV32-NO-ATOMIC-NEXT:    li a3, 51367; RV32-NO-ATOMIC-NEXT:    li a4, 51368; RV32-NO-ATOMIC-NEXT:    mv a0, s01369; RV32-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_41370; RV32-NO-ATOMIC-NEXT:    lw a1, 4(sp)1371; RV32-NO-ATOMIC-NEXT:    bnez a0, .LBB23_41372; RV32-NO-ATOMIC-NEXT:  .LBB23_2: # %atomicrmw.start1373; RV32-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=11374; RV32-NO-ATOMIC-NEXT:    mv a2, a11375; RV32-NO-ATOMIC-NEXT:    bgtz a1, .LBB23_11376; RV32-NO-ATOMIC-NEXT:  # %bb.3: # %atomicrmw.start1377; RV32-NO-ATOMIC-NEXT:    # in Loop: Header=BB23_2 Depth=11378; RV32-NO-ATOMIC-NEXT:    li a2, 11379; RV32-NO-ATOMIC-NEXT:    j .LBB23_11380; RV32-NO-ATOMIC-NEXT:  .LBB23_4: # %atomicrmw.end1381; RV32-NO-ATOMIC-NEXT:    mv a0, a11382; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1383; RV32-NO-ATOMIC-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1384; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 161385; RV32-NO-ATOMIC-NEXT:    ret1386;1387; RV32-ATOMIC-LABEL: rmw32_max_seq_cst:1388; RV32-ATOMIC:       # %bb.0:1389; RV32-ATOMIC-NEXT:    addi sp, sp, -161390; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1391; RV32-ATOMIC-NEXT:    li a1, 11392; RV32-ATOMIC-NEXT:    call __sync_fetch_and_max_41393; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1394; RV32-ATOMIC-NEXT:    addi sp, sp, 161395; RV32-ATOMIC-NEXT:    ret1396;1397; RV32-ATOMIC-TRAILING-LABEL: rmw32_max_seq_cst:1398; RV32-ATOMIC-TRAILING:       # %bb.0:1399; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161400; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1401; RV32-ATOMIC-TRAILING-NEXT:    li a1, 11402; RV32-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_max_41403; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1404; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161405; RV32-ATOMIC-TRAILING-NEXT:    ret1406;1407; RV64-NO-ATOMIC-LABEL: rmw32_max_seq_cst:1408; RV64-NO-ATOMIC:       # %bb.0:1409; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -321410; RV64-NO-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill1411; RV64-NO-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill1412; RV64-NO-ATOMIC-NEXT:    mv s0, a01413; RV64-NO-ATOMIC-NEXT:    lw a1, 0(a0)1414; RV64-NO-ATOMIC-NEXT:    j .LBB23_21415; RV64-NO-ATOMIC-NEXT:  .LBB23_1: # %atomicrmw.start1416; RV64-NO-ATOMIC-NEXT:    # in Loop: Header=BB23_2 Depth=11417; RV64-NO-ATOMIC-NEXT:    sw a1, 12(sp)1418; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 121419; RV64-NO-ATOMIC-NEXT:    li a3, 51420; RV64-NO-ATOMIC-NEXT:    li a4, 51421; RV64-NO-ATOMIC-NEXT:    mv a0, s01422; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_41423; RV64-NO-ATOMIC-NEXT:    lw a1, 12(sp)1424; RV64-NO-ATOMIC-NEXT:    bnez a0, .LBB23_41425; RV64-NO-ATOMIC-NEXT:  .LBB23_2: # %atomicrmw.start1426; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=11427; RV64-NO-ATOMIC-NEXT:    li a0, 11428; RV64-NO-ATOMIC-NEXT:    mv a2, a11429; RV64-NO-ATOMIC-NEXT:    blt a0, a1, .LBB23_11430; RV64-NO-ATOMIC-NEXT:  # %bb.3: # %atomicrmw.start1431; RV64-NO-ATOMIC-NEXT:    # in Loop: Header=BB23_2 Depth=11432; RV64-NO-ATOMIC-NEXT:    li a2, 11433; RV64-NO-ATOMIC-NEXT:    j .LBB23_11434; RV64-NO-ATOMIC-NEXT:  .LBB23_4: # %atomicrmw.end1435; RV64-NO-ATOMIC-NEXT:    mv a0, a11436; RV64-NO-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload1437; RV64-NO-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload1438; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 321439; RV64-NO-ATOMIC-NEXT:    ret1440;1441; RV64-ATOMIC-LABEL: rmw32_max_seq_cst:1442; RV64-ATOMIC:       # %bb.0:1443; RV64-ATOMIC-NEXT:    addi sp, sp, -161444; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1445; RV64-ATOMIC-NEXT:    li a1, 11446; RV64-ATOMIC-NEXT:    call __sync_fetch_and_max_41447; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1448; RV64-ATOMIC-NEXT:    addi sp, sp, 161449; RV64-ATOMIC-NEXT:    ret1450;1451; RV64-ATOMIC-TRAILING-LABEL: rmw32_max_seq_cst:1452; RV64-ATOMIC-TRAILING:       # %bb.0:1453; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161454; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1455; RV64-ATOMIC-TRAILING-NEXT:    li a1, 11456; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_max_41457; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1458; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161459; RV64-ATOMIC-TRAILING-NEXT:    ret1460  %v = atomicrmw max ptr %p, i32 1 seq_cst, align 41461  ret i32 %v1462}1463 1464define i32 @rmw32_min_seq_cst(ptr %p) nounwind {1465; RV32-NO-ATOMIC-LABEL: rmw32_min_seq_cst:1466; RV32-NO-ATOMIC:       # %bb.0:1467; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -161468; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1469; RV32-NO-ATOMIC-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1470; RV32-NO-ATOMIC-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill1471; RV32-NO-ATOMIC-NEXT:    mv s0, a01472; RV32-NO-ATOMIC-NEXT:    lw a1, 0(a0)1473; RV32-NO-ATOMIC-NEXT:    li s1, 21474; RV32-NO-ATOMIC-NEXT:    j .LBB24_21475; RV32-NO-ATOMIC-NEXT:  .LBB24_1: # %atomicrmw.start1476; RV32-NO-ATOMIC-NEXT:    # in Loop: Header=BB24_2 Depth=11477; RV32-NO-ATOMIC-NEXT:    sw a1, 0(sp)1478; RV32-NO-ATOMIC-NEXT:    mv a1, sp1479; RV32-NO-ATOMIC-NEXT:    li a3, 51480; RV32-NO-ATOMIC-NEXT:    li a4, 51481; RV32-NO-ATOMIC-NEXT:    mv a0, s01482; RV32-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_41483; RV32-NO-ATOMIC-NEXT:    lw a1, 0(sp)1484; RV32-NO-ATOMIC-NEXT:    bnez a0, .LBB24_41485; RV32-NO-ATOMIC-NEXT:  .LBB24_2: # %atomicrmw.start1486; RV32-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=11487; RV32-NO-ATOMIC-NEXT:    mv a2, a11488; RV32-NO-ATOMIC-NEXT:    blt a1, s1, .LBB24_11489; RV32-NO-ATOMIC-NEXT:  # %bb.3: # %atomicrmw.start1490; RV32-NO-ATOMIC-NEXT:    # in Loop: Header=BB24_2 Depth=11491; RV32-NO-ATOMIC-NEXT:    li a2, 11492; RV32-NO-ATOMIC-NEXT:    j .LBB24_11493; RV32-NO-ATOMIC-NEXT:  .LBB24_4: # %atomicrmw.end1494; RV32-NO-ATOMIC-NEXT:    mv a0, a11495; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1496; RV32-NO-ATOMIC-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1497; RV32-NO-ATOMIC-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload1498; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 161499; RV32-NO-ATOMIC-NEXT:    ret1500;1501; RV32-ATOMIC-LABEL: rmw32_min_seq_cst:1502; RV32-ATOMIC:       # %bb.0:1503; RV32-ATOMIC-NEXT:    addi sp, sp, -161504; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1505; RV32-ATOMIC-NEXT:    li a1, 11506; RV32-ATOMIC-NEXT:    call __sync_fetch_and_min_41507; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1508; RV32-ATOMIC-NEXT:    addi sp, sp, 161509; RV32-ATOMIC-NEXT:    ret1510;1511; RV32-ATOMIC-TRAILING-LABEL: rmw32_min_seq_cst:1512; RV32-ATOMIC-TRAILING:       # %bb.0:1513; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161514; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1515; RV32-ATOMIC-TRAILING-NEXT:    li a1, 11516; RV32-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_min_41517; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1518; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161519; RV32-ATOMIC-TRAILING-NEXT:    ret1520;1521; RV64-NO-ATOMIC-LABEL: rmw32_min_seq_cst:1522; RV64-NO-ATOMIC:       # %bb.0:1523; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -321524; RV64-NO-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill1525; RV64-NO-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill1526; RV64-NO-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill1527; RV64-NO-ATOMIC-NEXT:    mv s0, a01528; RV64-NO-ATOMIC-NEXT:    lw a1, 0(a0)1529; RV64-NO-ATOMIC-NEXT:    li s1, 21530; RV64-NO-ATOMIC-NEXT:    j .LBB24_21531; RV64-NO-ATOMIC-NEXT:  .LBB24_1: # %atomicrmw.start1532; RV64-NO-ATOMIC-NEXT:    # in Loop: Header=BB24_2 Depth=11533; RV64-NO-ATOMIC-NEXT:    sw a1, 4(sp)1534; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 41535; RV64-NO-ATOMIC-NEXT:    li a3, 51536; RV64-NO-ATOMIC-NEXT:    li a4, 51537; RV64-NO-ATOMIC-NEXT:    mv a0, s01538; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_41539; RV64-NO-ATOMIC-NEXT:    lw a1, 4(sp)1540; RV64-NO-ATOMIC-NEXT:    bnez a0, .LBB24_41541; RV64-NO-ATOMIC-NEXT:  .LBB24_2: # %atomicrmw.start1542; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=11543; RV64-NO-ATOMIC-NEXT:    mv a2, a11544; RV64-NO-ATOMIC-NEXT:    blt a1, s1, .LBB24_11545; RV64-NO-ATOMIC-NEXT:  # %bb.3: # %atomicrmw.start1546; RV64-NO-ATOMIC-NEXT:    # in Loop: Header=BB24_2 Depth=11547; RV64-NO-ATOMIC-NEXT:    li a2, 11548; RV64-NO-ATOMIC-NEXT:    j .LBB24_11549; RV64-NO-ATOMIC-NEXT:  .LBB24_4: # %atomicrmw.end1550; RV64-NO-ATOMIC-NEXT:    mv a0, a11551; RV64-NO-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload1552; RV64-NO-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload1553; RV64-NO-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload1554; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 321555; RV64-NO-ATOMIC-NEXT:    ret1556;1557; RV64-ATOMIC-LABEL: rmw32_min_seq_cst:1558; RV64-ATOMIC:       # %bb.0:1559; RV64-ATOMIC-NEXT:    addi sp, sp, -161560; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1561; RV64-ATOMIC-NEXT:    li a1, 11562; RV64-ATOMIC-NEXT:    call __sync_fetch_and_min_41563; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1564; RV64-ATOMIC-NEXT:    addi sp, sp, 161565; RV64-ATOMIC-NEXT:    ret1566;1567; RV64-ATOMIC-TRAILING-LABEL: rmw32_min_seq_cst:1568; RV64-ATOMIC-TRAILING:       # %bb.0:1569; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161570; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1571; RV64-ATOMIC-TRAILING-NEXT:    li a1, 11572; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_min_41573; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1574; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161575; RV64-ATOMIC-TRAILING-NEXT:    ret1576  %v = atomicrmw min ptr %p, i32 1 seq_cst, align 41577  ret i32 %v1578}1579 1580define i32 @rmw32_umax_seq_cst(ptr %p) nounwind {1581; RV32-NO-ATOMIC-LABEL: rmw32_umax_seq_cst:1582; RV32-NO-ATOMIC:       # %bb.0:1583; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -161584; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1585; RV32-NO-ATOMIC-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1586; RV32-NO-ATOMIC-NEXT:    mv s0, a01587; RV32-NO-ATOMIC-NEXT:    lw a1, 0(a0)1588; RV32-NO-ATOMIC-NEXT:  .LBB25_1: # %atomicrmw.start1589; RV32-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=11590; RV32-NO-ATOMIC-NEXT:    seqz a2, a11591; RV32-NO-ATOMIC-NEXT:    add a2, a1, a21592; RV32-NO-ATOMIC-NEXT:    sw a1, 4(sp)1593; RV32-NO-ATOMIC-NEXT:    addi a1, sp, 41594; RV32-NO-ATOMIC-NEXT:    li a3, 51595; RV32-NO-ATOMIC-NEXT:    li a4, 51596; RV32-NO-ATOMIC-NEXT:    mv a0, s01597; RV32-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_41598; RV32-NO-ATOMIC-NEXT:    lw a1, 4(sp)1599; RV32-NO-ATOMIC-NEXT:    beqz a0, .LBB25_11600; RV32-NO-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end1601; RV32-NO-ATOMIC-NEXT:    mv a0, a11602; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1603; RV32-NO-ATOMIC-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1604; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 161605; RV32-NO-ATOMIC-NEXT:    ret1606;1607; RV32-ATOMIC-LABEL: rmw32_umax_seq_cst:1608; RV32-ATOMIC:       # %bb.0:1609; RV32-ATOMIC-NEXT:    addi sp, sp, -161610; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1611; RV32-ATOMIC-NEXT:    li a1, 11612; RV32-ATOMIC-NEXT:    call __sync_fetch_and_umax_41613; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1614; RV32-ATOMIC-NEXT:    addi sp, sp, 161615; RV32-ATOMIC-NEXT:    ret1616;1617; RV32-ATOMIC-TRAILING-LABEL: rmw32_umax_seq_cst:1618; RV32-ATOMIC-TRAILING:       # %bb.0:1619; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161620; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1621; RV32-ATOMIC-TRAILING-NEXT:    li a1, 11622; RV32-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_umax_41623; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1624; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161625; RV32-ATOMIC-TRAILING-NEXT:    ret1626;1627; RV64-NO-ATOMIC-LABEL: rmw32_umax_seq_cst:1628; RV64-NO-ATOMIC:       # %bb.0:1629; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -321630; RV64-NO-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill1631; RV64-NO-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill1632; RV64-NO-ATOMIC-NEXT:    mv s0, a01633; RV64-NO-ATOMIC-NEXT:    lw a1, 0(a0)1634; RV64-NO-ATOMIC-NEXT:    j .LBB25_21635; RV64-NO-ATOMIC-NEXT:  .LBB25_1: # %atomicrmw.start1636; RV64-NO-ATOMIC-NEXT:    # in Loop: Header=BB25_2 Depth=11637; RV64-NO-ATOMIC-NEXT:    sw a1, 12(sp)1638; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 121639; RV64-NO-ATOMIC-NEXT:    li a3, 51640; RV64-NO-ATOMIC-NEXT:    li a4, 51641; RV64-NO-ATOMIC-NEXT:    mv a0, s01642; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_41643; RV64-NO-ATOMIC-NEXT:    lw a1, 12(sp)1644; RV64-NO-ATOMIC-NEXT:    bnez a0, .LBB25_41645; RV64-NO-ATOMIC-NEXT:  .LBB25_2: # %atomicrmw.start1646; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=11647; RV64-NO-ATOMIC-NEXT:    li a0, 11648; RV64-NO-ATOMIC-NEXT:    mv a2, a11649; RV64-NO-ATOMIC-NEXT:    bltu a0, a1, .LBB25_11650; RV64-NO-ATOMIC-NEXT:  # %bb.3: # %atomicrmw.start1651; RV64-NO-ATOMIC-NEXT:    # in Loop: Header=BB25_2 Depth=11652; RV64-NO-ATOMIC-NEXT:    li a2, 11653; RV64-NO-ATOMIC-NEXT:    j .LBB25_11654; RV64-NO-ATOMIC-NEXT:  .LBB25_4: # %atomicrmw.end1655; RV64-NO-ATOMIC-NEXT:    mv a0, a11656; RV64-NO-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload1657; RV64-NO-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload1658; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 321659; RV64-NO-ATOMIC-NEXT:    ret1660;1661; RV64-ATOMIC-LABEL: rmw32_umax_seq_cst:1662; RV64-ATOMIC:       # %bb.0:1663; RV64-ATOMIC-NEXT:    addi sp, sp, -161664; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1665; RV64-ATOMIC-NEXT:    li a1, 11666; RV64-ATOMIC-NEXT:    call __sync_fetch_and_umax_41667; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1668; RV64-ATOMIC-NEXT:    addi sp, sp, 161669; RV64-ATOMIC-NEXT:    ret1670;1671; RV64-ATOMIC-TRAILING-LABEL: rmw32_umax_seq_cst:1672; RV64-ATOMIC-TRAILING:       # %bb.0:1673; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161674; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1675; RV64-ATOMIC-TRAILING-NEXT:    li a1, 11676; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_umax_41677; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1678; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161679; RV64-ATOMIC-TRAILING-NEXT:    ret1680  %v = atomicrmw umax ptr %p, i32 1 seq_cst, align 41681  ret i32 %v1682}1683 1684define i32 @rmw32_umin_seq_cst(ptr %p) nounwind {1685; RV32-NO-ATOMIC-LABEL: rmw32_umin_seq_cst:1686; RV32-NO-ATOMIC:       # %bb.0:1687; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -161688; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1689; RV32-NO-ATOMIC-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1690; RV32-NO-ATOMIC-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill1691; RV32-NO-ATOMIC-NEXT:    mv s0, a01692; RV32-NO-ATOMIC-NEXT:    lw a1, 0(a0)1693; RV32-NO-ATOMIC-NEXT:    li s1, 21694; RV32-NO-ATOMIC-NEXT:    j .LBB26_21695; RV32-NO-ATOMIC-NEXT:  .LBB26_1: # %atomicrmw.start1696; RV32-NO-ATOMIC-NEXT:    # in Loop: Header=BB26_2 Depth=11697; RV32-NO-ATOMIC-NEXT:    sw a1, 0(sp)1698; RV32-NO-ATOMIC-NEXT:    mv a1, sp1699; RV32-NO-ATOMIC-NEXT:    li a3, 51700; RV32-NO-ATOMIC-NEXT:    li a4, 51701; RV32-NO-ATOMIC-NEXT:    mv a0, s01702; RV32-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_41703; RV32-NO-ATOMIC-NEXT:    lw a1, 0(sp)1704; RV32-NO-ATOMIC-NEXT:    bnez a0, .LBB26_41705; RV32-NO-ATOMIC-NEXT:  .LBB26_2: # %atomicrmw.start1706; RV32-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=11707; RV32-NO-ATOMIC-NEXT:    mv a2, a11708; RV32-NO-ATOMIC-NEXT:    bltu a1, s1, .LBB26_11709; RV32-NO-ATOMIC-NEXT:  # %bb.3: # %atomicrmw.start1710; RV32-NO-ATOMIC-NEXT:    # in Loop: Header=BB26_2 Depth=11711; RV32-NO-ATOMIC-NEXT:    li a2, 11712; RV32-NO-ATOMIC-NEXT:    j .LBB26_11713; RV32-NO-ATOMIC-NEXT:  .LBB26_4: # %atomicrmw.end1714; RV32-NO-ATOMIC-NEXT:    mv a0, a11715; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1716; RV32-NO-ATOMIC-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1717; RV32-NO-ATOMIC-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload1718; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 161719; RV32-NO-ATOMIC-NEXT:    ret1720;1721; RV32-ATOMIC-LABEL: rmw32_umin_seq_cst:1722; RV32-ATOMIC:       # %bb.0:1723; RV32-ATOMIC-NEXT:    addi sp, sp, -161724; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1725; RV32-ATOMIC-NEXT:    li a1, 11726; RV32-ATOMIC-NEXT:    call __sync_fetch_and_umin_41727; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1728; RV32-ATOMIC-NEXT:    addi sp, sp, 161729; RV32-ATOMIC-NEXT:    ret1730;1731; RV32-ATOMIC-TRAILING-LABEL: rmw32_umin_seq_cst:1732; RV32-ATOMIC-TRAILING:       # %bb.0:1733; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161734; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1735; RV32-ATOMIC-TRAILING-NEXT:    li a1, 11736; RV32-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_umin_41737; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1738; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161739; RV32-ATOMIC-TRAILING-NEXT:    ret1740;1741; RV64-NO-ATOMIC-LABEL: rmw32_umin_seq_cst:1742; RV64-NO-ATOMIC:       # %bb.0:1743; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -321744; RV64-NO-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill1745; RV64-NO-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill1746; RV64-NO-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill1747; RV64-NO-ATOMIC-NEXT:    mv s0, a01748; RV64-NO-ATOMIC-NEXT:    lw a1, 0(a0)1749; RV64-NO-ATOMIC-NEXT:    li s1, 21750; RV64-NO-ATOMIC-NEXT:    j .LBB26_21751; RV64-NO-ATOMIC-NEXT:  .LBB26_1: # %atomicrmw.start1752; RV64-NO-ATOMIC-NEXT:    # in Loop: Header=BB26_2 Depth=11753; RV64-NO-ATOMIC-NEXT:    sw a1, 4(sp)1754; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 41755; RV64-NO-ATOMIC-NEXT:    li a3, 51756; RV64-NO-ATOMIC-NEXT:    li a4, 51757; RV64-NO-ATOMIC-NEXT:    mv a0, s01758; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_41759; RV64-NO-ATOMIC-NEXT:    lw a1, 4(sp)1760; RV64-NO-ATOMIC-NEXT:    bnez a0, .LBB26_41761; RV64-NO-ATOMIC-NEXT:  .LBB26_2: # %atomicrmw.start1762; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=11763; RV64-NO-ATOMIC-NEXT:    mv a2, a11764; RV64-NO-ATOMIC-NEXT:    bltu a1, s1, .LBB26_11765; RV64-NO-ATOMIC-NEXT:  # %bb.3: # %atomicrmw.start1766; RV64-NO-ATOMIC-NEXT:    # in Loop: Header=BB26_2 Depth=11767; RV64-NO-ATOMIC-NEXT:    li a2, 11768; RV64-NO-ATOMIC-NEXT:    j .LBB26_11769; RV64-NO-ATOMIC-NEXT:  .LBB26_4: # %atomicrmw.end1770; RV64-NO-ATOMIC-NEXT:    mv a0, a11771; RV64-NO-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload1772; RV64-NO-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload1773; RV64-NO-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload1774; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 321775; RV64-NO-ATOMIC-NEXT:    ret1776;1777; RV64-ATOMIC-LABEL: rmw32_umin_seq_cst:1778; RV64-ATOMIC:       # %bb.0:1779; RV64-ATOMIC-NEXT:    addi sp, sp, -161780; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1781; RV64-ATOMIC-NEXT:    li a1, 11782; RV64-ATOMIC-NEXT:    call __sync_fetch_and_umin_41783; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1784; RV64-ATOMIC-NEXT:    addi sp, sp, 161785; RV64-ATOMIC-NEXT:    ret1786;1787; RV64-ATOMIC-TRAILING-LABEL: rmw32_umin_seq_cst:1788; RV64-ATOMIC-TRAILING:       # %bb.0:1789; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161790; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1791; RV64-ATOMIC-TRAILING-NEXT:    li a1, 11792; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_umin_41793; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1794; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161795; RV64-ATOMIC-TRAILING-NEXT:    ret1796  %v = atomicrmw umin ptr %p, i32 1 seq_cst, align 41797  ret i32 %v1798}1799 1800define i32 @rmw32_xchg_seq_cst(ptr %p) nounwind {1801; RV32-NO-ATOMIC-LABEL: rmw32_xchg_seq_cst:1802; RV32-NO-ATOMIC:       # %bb.0:1803; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -161804; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1805; RV32-NO-ATOMIC-NEXT:    li a1, 11806; RV32-NO-ATOMIC-NEXT:    li a2, 51807; RV32-NO-ATOMIC-NEXT:    call __atomic_exchange_41808; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1809; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 161810; RV32-NO-ATOMIC-NEXT:    ret1811;1812; RV32-ATOMIC-LABEL: rmw32_xchg_seq_cst:1813; RV32-ATOMIC:       # %bb.0:1814; RV32-ATOMIC-NEXT:    addi sp, sp, -161815; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1816; RV32-ATOMIC-NEXT:    li a1, 11817; RV32-ATOMIC-NEXT:    call __sync_lock_test_and_set_41818; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1819; RV32-ATOMIC-NEXT:    addi sp, sp, 161820; RV32-ATOMIC-NEXT:    ret1821;1822; RV32-ATOMIC-TRAILING-LABEL: rmw32_xchg_seq_cst:1823; RV32-ATOMIC-TRAILING:       # %bb.0:1824; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161825; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1826; RV32-ATOMIC-TRAILING-NEXT:    li a1, 11827; RV32-ATOMIC-TRAILING-NEXT:    call __sync_lock_test_and_set_41828; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1829; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161830; RV32-ATOMIC-TRAILING-NEXT:    ret1831;1832; RV64-NO-ATOMIC-LABEL: rmw32_xchg_seq_cst:1833; RV64-NO-ATOMIC:       # %bb.0:1834; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -161835; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1836; RV64-NO-ATOMIC-NEXT:    li a1, 11837; RV64-NO-ATOMIC-NEXT:    li a2, 51838; RV64-NO-ATOMIC-NEXT:    call __atomic_exchange_41839; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1840; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 161841; RV64-NO-ATOMIC-NEXT:    ret1842;1843; RV64-ATOMIC-LABEL: rmw32_xchg_seq_cst:1844; RV64-ATOMIC:       # %bb.0:1845; RV64-ATOMIC-NEXT:    addi sp, sp, -161846; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1847; RV64-ATOMIC-NEXT:    li a1, 11848; RV64-ATOMIC-NEXT:    call __sync_lock_test_and_set_41849; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1850; RV64-ATOMIC-NEXT:    addi sp, sp, 161851; RV64-ATOMIC-NEXT:    ret1852;1853; RV64-ATOMIC-TRAILING-LABEL: rmw32_xchg_seq_cst:1854; RV64-ATOMIC-TRAILING:       # %bb.0:1855; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161856; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1857; RV64-ATOMIC-TRAILING-NEXT:    li a1, 11858; RV64-ATOMIC-TRAILING-NEXT:    call __sync_lock_test_and_set_41859; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1860; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161861; RV64-ATOMIC-TRAILING-NEXT:    ret1862  %v = atomicrmw xchg ptr %p, i32 1 seq_cst, align 41863  ret i32 %v1864}1865 1866define float @rmw32_fadd_seq_cst(ptr %p) nounwind {1867; RV32-NO-ATOMIC-LABEL: rmw32_fadd_seq_cst:1868; RV32-NO-ATOMIC:       # %bb.0:1869; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -161870; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1871; RV32-NO-ATOMIC-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1872; RV32-NO-ATOMIC-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill1873; RV32-NO-ATOMIC-NEXT:    mv s0, a01874; RV32-NO-ATOMIC-NEXT:    lw s1, 0(a0)1875; RV32-NO-ATOMIC-NEXT:  .LBB28_1: # %atomicrmw.start1876; RV32-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=11877; RV32-NO-ATOMIC-NEXT:    lui a1, 2600961878; RV32-NO-ATOMIC-NEXT:    mv a0, s11879; RV32-NO-ATOMIC-NEXT:    call __addsf31880; RV32-NO-ATOMIC-NEXT:    mv a2, a01881; RV32-NO-ATOMIC-NEXT:    sw s1, 0(sp)1882; RV32-NO-ATOMIC-NEXT:    mv a1, sp1883; RV32-NO-ATOMIC-NEXT:    li a3, 51884; RV32-NO-ATOMIC-NEXT:    li a4, 51885; RV32-NO-ATOMIC-NEXT:    mv a0, s01886; RV32-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_41887; RV32-NO-ATOMIC-NEXT:    lw s1, 0(sp)1888; RV32-NO-ATOMIC-NEXT:    beqz a0, .LBB28_11889; RV32-NO-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end1890; RV32-NO-ATOMIC-NEXT:    mv a0, s11891; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1892; RV32-NO-ATOMIC-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1893; RV32-NO-ATOMIC-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload1894; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 161895; RV32-NO-ATOMIC-NEXT:    ret1896;1897; RV32-ATOMIC-LABEL: rmw32_fadd_seq_cst:1898; RV32-ATOMIC:       # %bb.0:1899; RV32-ATOMIC-NEXT:    addi sp, sp, -161900; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1901; RV32-ATOMIC-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1902; RV32-ATOMIC-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill1903; RV32-ATOMIC-NEXT:    mv s0, a01904; RV32-ATOMIC-NEXT:    lw a0, 0(a0)1905; RV32-ATOMIC-NEXT:  .LBB28_1: # %atomicrmw.start1906; RV32-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=11907; RV32-ATOMIC-NEXT:    mv s1, a01908; RV32-ATOMIC-NEXT:    lui a1, 2600961909; RV32-ATOMIC-NEXT:    call __addsf31910; RV32-ATOMIC-NEXT:    mv a2, a01911; RV32-ATOMIC-NEXT:    mv a0, s01912; RV32-ATOMIC-NEXT:    mv a1, s11913; RV32-ATOMIC-NEXT:    call __sync_val_compare_and_swap_41914; RV32-ATOMIC-NEXT:    bne a0, s1, .LBB28_11915; RV32-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end1916; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1917; RV32-ATOMIC-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1918; RV32-ATOMIC-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload1919; RV32-ATOMIC-NEXT:    addi sp, sp, 161920; RV32-ATOMIC-NEXT:    ret1921;1922; RV32-ATOMIC-TRAILING-LABEL: rmw32_fadd_seq_cst:1923; RV32-ATOMIC-TRAILING:       # %bb.0:1924; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -161925; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1926; RV32-ATOMIC-TRAILING-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1927; RV32-ATOMIC-TRAILING-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill1928; RV32-ATOMIC-TRAILING-NEXT:    mv s0, a01929; RV32-ATOMIC-TRAILING-NEXT:    lw a0, 0(a0)1930; RV32-ATOMIC-TRAILING-NEXT:  .LBB28_1: # %atomicrmw.start1931; RV32-ATOMIC-TRAILING-NEXT:    # =>This Inner Loop Header: Depth=11932; RV32-ATOMIC-TRAILING-NEXT:    mv s1, a01933; RV32-ATOMIC-TRAILING-NEXT:    lui a1, 2600961934; RV32-ATOMIC-TRAILING-NEXT:    call __addsf31935; RV32-ATOMIC-TRAILING-NEXT:    mv a2, a01936; RV32-ATOMIC-TRAILING-NEXT:    mv a0, s01937; RV32-ATOMIC-TRAILING-NEXT:    mv a1, s11938; RV32-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_41939; RV32-ATOMIC-TRAILING-NEXT:    bne a0, s1, .LBB28_11940; RV32-ATOMIC-TRAILING-NEXT:  # %bb.2: # %atomicrmw.end1941; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1942; RV32-ATOMIC-TRAILING-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1943; RV32-ATOMIC-TRAILING-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload1944; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 161945; RV32-ATOMIC-TRAILING-NEXT:    ret1946;1947; RV64-NO-ATOMIC-LABEL: rmw32_fadd_seq_cst:1948; RV64-NO-ATOMIC:       # %bb.0:1949; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -321950; RV64-NO-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill1951; RV64-NO-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill1952; RV64-NO-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill1953; RV64-NO-ATOMIC-NEXT:    mv s0, a01954; RV64-NO-ATOMIC-NEXT:    lw s1, 0(a0)1955; RV64-NO-ATOMIC-NEXT:  .LBB28_1: # %atomicrmw.start1956; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=11957; RV64-NO-ATOMIC-NEXT:    lui a1, 2600961958; RV64-NO-ATOMIC-NEXT:    mv a0, s11959; RV64-NO-ATOMIC-NEXT:    call __addsf31960; RV64-NO-ATOMIC-NEXT:    mv a2, a01961; RV64-NO-ATOMIC-NEXT:    sw s1, 4(sp)1962; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 41963; RV64-NO-ATOMIC-NEXT:    li a3, 51964; RV64-NO-ATOMIC-NEXT:    li a4, 51965; RV64-NO-ATOMIC-NEXT:    mv a0, s01966; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_41967; RV64-NO-ATOMIC-NEXT:    lw s1, 4(sp)1968; RV64-NO-ATOMIC-NEXT:    beqz a0, .LBB28_11969; RV64-NO-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end1970; RV64-NO-ATOMIC-NEXT:    mv a0, s11971; RV64-NO-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload1972; RV64-NO-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload1973; RV64-NO-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload1974; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 321975; RV64-NO-ATOMIC-NEXT:    ret1976;1977; RV64-ATOMIC-LABEL: rmw32_fadd_seq_cst:1978; RV64-ATOMIC:       # %bb.0:1979; RV64-ATOMIC-NEXT:    addi sp, sp, -321980; RV64-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill1981; RV64-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill1982; RV64-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill1983; RV64-ATOMIC-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill1984; RV64-ATOMIC-NEXT:    mv s0, a01985; RV64-ATOMIC-NEXT:    lw s1, 0(a0)1986; RV64-ATOMIC-NEXT:  .LBB28_1: # %atomicrmw.start1987; RV64-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=11988; RV64-ATOMIC-NEXT:    lui a1, 2600961989; RV64-ATOMIC-NEXT:    mv a0, s11990; RV64-ATOMIC-NEXT:    call __addsf31991; RV64-ATOMIC-NEXT:    mv a2, a01992; RV64-ATOMIC-NEXT:    sext.w s2, s11993; RV64-ATOMIC-NEXT:    mv a0, s01994; RV64-ATOMIC-NEXT:    mv a1, s21995; RV64-ATOMIC-NEXT:    call __sync_val_compare_and_swap_41996; RV64-ATOMIC-NEXT:    mv s1, a01997; RV64-ATOMIC-NEXT:    bne a0, s2, .LBB28_11998; RV64-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end1999; RV64-ATOMIC-NEXT:    mv a0, s12000; RV64-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload2001; RV64-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload2002; RV64-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload2003; RV64-ATOMIC-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload2004; RV64-ATOMIC-NEXT:    addi sp, sp, 322005; RV64-ATOMIC-NEXT:    ret2006;2007; RV64-ATOMIC-TRAILING-LABEL: rmw32_fadd_seq_cst:2008; RV64-ATOMIC-TRAILING:       # %bb.0:2009; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -322010; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill2011; RV64-ATOMIC-TRAILING-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill2012; RV64-ATOMIC-TRAILING-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill2013; RV64-ATOMIC-TRAILING-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill2014; RV64-ATOMIC-TRAILING-NEXT:    mv s0, a02015; RV64-ATOMIC-TRAILING-NEXT:    lw s1, 0(a0)2016; RV64-ATOMIC-TRAILING-NEXT:  .LBB28_1: # %atomicrmw.start2017; RV64-ATOMIC-TRAILING-NEXT:    # =>This Inner Loop Header: Depth=12018; RV64-ATOMIC-TRAILING-NEXT:    lui a1, 2600962019; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s12020; RV64-ATOMIC-TRAILING-NEXT:    call __addsf32021; RV64-ATOMIC-TRAILING-NEXT:    mv a2, a02022; RV64-ATOMIC-TRAILING-NEXT:    sext.w s2, s12023; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s02024; RV64-ATOMIC-TRAILING-NEXT:    mv a1, s22025; RV64-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_42026; RV64-ATOMIC-TRAILING-NEXT:    mv s1, a02027; RV64-ATOMIC-TRAILING-NEXT:    bne a0, s2, .LBB28_12028; RV64-ATOMIC-TRAILING-NEXT:  # %bb.2: # %atomicrmw.end2029; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s12030; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload2031; RV64-ATOMIC-TRAILING-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload2032; RV64-ATOMIC-TRAILING-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload2033; RV64-ATOMIC-TRAILING-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload2034; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 322035; RV64-ATOMIC-TRAILING-NEXT:    ret2036  %v = atomicrmw fadd ptr %p, float 1.0 seq_cst, align 42037  ret float %v2038}2039 2040define float @rmw32_fsub_seq_cst(ptr %p) nounwind {2041; RV32-NO-ATOMIC-LABEL: rmw32_fsub_seq_cst:2042; RV32-NO-ATOMIC:       # %bb.0:2043; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -162044; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2045; RV32-NO-ATOMIC-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2046; RV32-NO-ATOMIC-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill2047; RV32-NO-ATOMIC-NEXT:    mv s0, a02048; RV32-NO-ATOMIC-NEXT:    lw s1, 0(a0)2049; RV32-NO-ATOMIC-NEXT:  .LBB29_1: # %atomicrmw.start2050; RV32-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=12051; RV32-NO-ATOMIC-NEXT:    lui a1, 7843842052; RV32-NO-ATOMIC-NEXT:    mv a0, s12053; RV32-NO-ATOMIC-NEXT:    call __addsf32054; RV32-NO-ATOMIC-NEXT:    mv a2, a02055; RV32-NO-ATOMIC-NEXT:    sw s1, 0(sp)2056; RV32-NO-ATOMIC-NEXT:    mv a1, sp2057; RV32-NO-ATOMIC-NEXT:    li a3, 52058; RV32-NO-ATOMIC-NEXT:    li a4, 52059; RV32-NO-ATOMIC-NEXT:    mv a0, s02060; RV32-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_42061; RV32-NO-ATOMIC-NEXT:    lw s1, 0(sp)2062; RV32-NO-ATOMIC-NEXT:    beqz a0, .LBB29_12063; RV32-NO-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end2064; RV32-NO-ATOMIC-NEXT:    mv a0, s12065; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2066; RV32-NO-ATOMIC-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2067; RV32-NO-ATOMIC-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload2068; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 162069; RV32-NO-ATOMIC-NEXT:    ret2070;2071; RV32-ATOMIC-LABEL: rmw32_fsub_seq_cst:2072; RV32-ATOMIC:       # %bb.0:2073; RV32-ATOMIC-NEXT:    addi sp, sp, -162074; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2075; RV32-ATOMIC-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2076; RV32-ATOMIC-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill2077; RV32-ATOMIC-NEXT:    mv s0, a02078; RV32-ATOMIC-NEXT:    lw a0, 0(a0)2079; RV32-ATOMIC-NEXT:  .LBB29_1: # %atomicrmw.start2080; RV32-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=12081; RV32-ATOMIC-NEXT:    mv s1, a02082; RV32-ATOMIC-NEXT:    lui a1, 7843842083; RV32-ATOMIC-NEXT:    call __addsf32084; RV32-ATOMIC-NEXT:    mv a2, a02085; RV32-ATOMIC-NEXT:    mv a0, s02086; RV32-ATOMIC-NEXT:    mv a1, s12087; RV32-ATOMIC-NEXT:    call __sync_val_compare_and_swap_42088; RV32-ATOMIC-NEXT:    bne a0, s1, .LBB29_12089; RV32-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end2090; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2091; RV32-ATOMIC-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2092; RV32-ATOMIC-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload2093; RV32-ATOMIC-NEXT:    addi sp, sp, 162094; RV32-ATOMIC-NEXT:    ret2095;2096; RV32-ATOMIC-TRAILING-LABEL: rmw32_fsub_seq_cst:2097; RV32-ATOMIC-TRAILING:       # %bb.0:2098; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -162099; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2100; RV32-ATOMIC-TRAILING-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2101; RV32-ATOMIC-TRAILING-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill2102; RV32-ATOMIC-TRAILING-NEXT:    mv s0, a02103; RV32-ATOMIC-TRAILING-NEXT:    lw a0, 0(a0)2104; RV32-ATOMIC-TRAILING-NEXT:  .LBB29_1: # %atomicrmw.start2105; RV32-ATOMIC-TRAILING-NEXT:    # =>This Inner Loop Header: Depth=12106; RV32-ATOMIC-TRAILING-NEXT:    mv s1, a02107; RV32-ATOMIC-TRAILING-NEXT:    lui a1, 7843842108; RV32-ATOMIC-TRAILING-NEXT:    call __addsf32109; RV32-ATOMIC-TRAILING-NEXT:    mv a2, a02110; RV32-ATOMIC-TRAILING-NEXT:    mv a0, s02111; RV32-ATOMIC-TRAILING-NEXT:    mv a1, s12112; RV32-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_42113; RV32-ATOMIC-TRAILING-NEXT:    bne a0, s1, .LBB29_12114; RV32-ATOMIC-TRAILING-NEXT:  # %bb.2: # %atomicrmw.end2115; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2116; RV32-ATOMIC-TRAILING-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2117; RV32-ATOMIC-TRAILING-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload2118; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 162119; RV32-ATOMIC-TRAILING-NEXT:    ret2120;2121; RV64-NO-ATOMIC-LABEL: rmw32_fsub_seq_cst:2122; RV64-NO-ATOMIC:       # %bb.0:2123; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -322124; RV64-NO-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill2125; RV64-NO-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill2126; RV64-NO-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill2127; RV64-NO-ATOMIC-NEXT:    mv s0, a02128; RV64-NO-ATOMIC-NEXT:    lw s1, 0(a0)2129; RV64-NO-ATOMIC-NEXT:  .LBB29_1: # %atomicrmw.start2130; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=12131; RV64-NO-ATOMIC-NEXT:    lui a1, 7843842132; RV64-NO-ATOMIC-NEXT:    mv a0, s12133; RV64-NO-ATOMIC-NEXT:    call __addsf32134; RV64-NO-ATOMIC-NEXT:    mv a2, a02135; RV64-NO-ATOMIC-NEXT:    sw s1, 4(sp)2136; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 42137; RV64-NO-ATOMIC-NEXT:    li a3, 52138; RV64-NO-ATOMIC-NEXT:    li a4, 52139; RV64-NO-ATOMIC-NEXT:    mv a0, s02140; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_42141; RV64-NO-ATOMIC-NEXT:    lw s1, 4(sp)2142; RV64-NO-ATOMIC-NEXT:    beqz a0, .LBB29_12143; RV64-NO-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end2144; RV64-NO-ATOMIC-NEXT:    mv a0, s12145; RV64-NO-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload2146; RV64-NO-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload2147; RV64-NO-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload2148; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 322149; RV64-NO-ATOMIC-NEXT:    ret2150;2151; RV64-ATOMIC-LABEL: rmw32_fsub_seq_cst:2152; RV64-ATOMIC:       # %bb.0:2153; RV64-ATOMIC-NEXT:    addi sp, sp, -322154; RV64-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill2155; RV64-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill2156; RV64-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill2157; RV64-ATOMIC-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill2158; RV64-ATOMIC-NEXT:    mv s0, a02159; RV64-ATOMIC-NEXT:    lw s1, 0(a0)2160; RV64-ATOMIC-NEXT:  .LBB29_1: # %atomicrmw.start2161; RV64-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=12162; RV64-ATOMIC-NEXT:    lui a1, 7843842163; RV64-ATOMIC-NEXT:    mv a0, s12164; RV64-ATOMIC-NEXT:    call __addsf32165; RV64-ATOMIC-NEXT:    mv a2, a02166; RV64-ATOMIC-NEXT:    sext.w s2, s12167; RV64-ATOMIC-NEXT:    mv a0, s02168; RV64-ATOMIC-NEXT:    mv a1, s22169; RV64-ATOMIC-NEXT:    call __sync_val_compare_and_swap_42170; RV64-ATOMIC-NEXT:    mv s1, a02171; RV64-ATOMIC-NEXT:    bne a0, s2, .LBB29_12172; RV64-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end2173; RV64-ATOMIC-NEXT:    mv a0, s12174; RV64-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload2175; RV64-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload2176; RV64-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload2177; RV64-ATOMIC-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload2178; RV64-ATOMIC-NEXT:    addi sp, sp, 322179; RV64-ATOMIC-NEXT:    ret2180;2181; RV64-ATOMIC-TRAILING-LABEL: rmw32_fsub_seq_cst:2182; RV64-ATOMIC-TRAILING:       # %bb.0:2183; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -322184; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill2185; RV64-ATOMIC-TRAILING-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill2186; RV64-ATOMIC-TRAILING-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill2187; RV64-ATOMIC-TRAILING-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill2188; RV64-ATOMIC-TRAILING-NEXT:    mv s0, a02189; RV64-ATOMIC-TRAILING-NEXT:    lw s1, 0(a0)2190; RV64-ATOMIC-TRAILING-NEXT:  .LBB29_1: # %atomicrmw.start2191; RV64-ATOMIC-TRAILING-NEXT:    # =>This Inner Loop Header: Depth=12192; RV64-ATOMIC-TRAILING-NEXT:    lui a1, 7843842193; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s12194; RV64-ATOMIC-TRAILING-NEXT:    call __addsf32195; RV64-ATOMIC-TRAILING-NEXT:    mv a2, a02196; RV64-ATOMIC-TRAILING-NEXT:    sext.w s2, s12197; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s02198; RV64-ATOMIC-TRAILING-NEXT:    mv a1, s22199; RV64-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_42200; RV64-ATOMIC-TRAILING-NEXT:    mv s1, a02201; RV64-ATOMIC-TRAILING-NEXT:    bne a0, s2, .LBB29_12202; RV64-ATOMIC-TRAILING-NEXT:  # %bb.2: # %atomicrmw.end2203; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s12204; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload2205; RV64-ATOMIC-TRAILING-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload2206; RV64-ATOMIC-TRAILING-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload2207; RV64-ATOMIC-TRAILING-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload2208; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 322209; RV64-ATOMIC-TRAILING-NEXT:    ret2210  %v = atomicrmw fsub ptr %p, float 1.0 seq_cst, align 42211  ret float %v2212}2213 2214define float @rmw32_fmin_seq_cst(ptr %p) nounwind {2215; RV32-NO-ATOMIC-LABEL: rmw32_fmin_seq_cst:2216; RV32-NO-ATOMIC:       # %bb.0:2217; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -162218; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2219; RV32-NO-ATOMIC-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2220; RV32-NO-ATOMIC-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill2221; RV32-NO-ATOMIC-NEXT:    mv s0, a02222; RV32-NO-ATOMIC-NEXT:    lw s1, 0(a0)2223; RV32-NO-ATOMIC-NEXT:  .LBB30_1: # %atomicrmw.start2224; RV32-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=12225; RV32-NO-ATOMIC-NEXT:    lui a1, 2600962226; RV32-NO-ATOMIC-NEXT:    mv a0, s12227; RV32-NO-ATOMIC-NEXT:    call fminf2228; RV32-NO-ATOMIC-NEXT:    mv a2, a02229; RV32-NO-ATOMIC-NEXT:    sw s1, 0(sp)2230; RV32-NO-ATOMIC-NEXT:    mv a1, sp2231; RV32-NO-ATOMIC-NEXT:    li a3, 52232; RV32-NO-ATOMIC-NEXT:    li a4, 52233; RV32-NO-ATOMIC-NEXT:    mv a0, s02234; RV32-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_42235; RV32-NO-ATOMIC-NEXT:    lw s1, 0(sp)2236; RV32-NO-ATOMIC-NEXT:    beqz a0, .LBB30_12237; RV32-NO-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end2238; RV32-NO-ATOMIC-NEXT:    mv a0, s12239; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2240; RV32-NO-ATOMIC-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2241; RV32-NO-ATOMIC-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload2242; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 162243; RV32-NO-ATOMIC-NEXT:    ret2244;2245; RV32-ATOMIC-LABEL: rmw32_fmin_seq_cst:2246; RV32-ATOMIC:       # %bb.0:2247; RV32-ATOMIC-NEXT:    addi sp, sp, -162248; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2249; RV32-ATOMIC-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2250; RV32-ATOMIC-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill2251; RV32-ATOMIC-NEXT:    mv s0, a02252; RV32-ATOMIC-NEXT:    lw a0, 0(a0)2253; RV32-ATOMIC-NEXT:  .LBB30_1: # %atomicrmw.start2254; RV32-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=12255; RV32-ATOMIC-NEXT:    mv s1, a02256; RV32-ATOMIC-NEXT:    lui a1, 2600962257; RV32-ATOMIC-NEXT:    call fminf2258; RV32-ATOMIC-NEXT:    mv a2, a02259; RV32-ATOMIC-NEXT:    mv a0, s02260; RV32-ATOMIC-NEXT:    mv a1, s12261; RV32-ATOMIC-NEXT:    call __sync_val_compare_and_swap_42262; RV32-ATOMIC-NEXT:    bne a0, s1, .LBB30_12263; RV32-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end2264; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2265; RV32-ATOMIC-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2266; RV32-ATOMIC-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload2267; RV32-ATOMIC-NEXT:    addi sp, sp, 162268; RV32-ATOMIC-NEXT:    ret2269;2270; RV32-ATOMIC-TRAILING-LABEL: rmw32_fmin_seq_cst:2271; RV32-ATOMIC-TRAILING:       # %bb.0:2272; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -162273; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2274; RV32-ATOMIC-TRAILING-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2275; RV32-ATOMIC-TRAILING-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill2276; RV32-ATOMIC-TRAILING-NEXT:    mv s0, a02277; RV32-ATOMIC-TRAILING-NEXT:    lw a0, 0(a0)2278; RV32-ATOMIC-TRAILING-NEXT:  .LBB30_1: # %atomicrmw.start2279; RV32-ATOMIC-TRAILING-NEXT:    # =>This Inner Loop Header: Depth=12280; RV32-ATOMIC-TRAILING-NEXT:    mv s1, a02281; RV32-ATOMIC-TRAILING-NEXT:    lui a1, 2600962282; RV32-ATOMIC-TRAILING-NEXT:    call fminf2283; RV32-ATOMIC-TRAILING-NEXT:    mv a2, a02284; RV32-ATOMIC-TRAILING-NEXT:    mv a0, s02285; RV32-ATOMIC-TRAILING-NEXT:    mv a1, s12286; RV32-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_42287; RV32-ATOMIC-TRAILING-NEXT:    bne a0, s1, .LBB30_12288; RV32-ATOMIC-TRAILING-NEXT:  # %bb.2: # %atomicrmw.end2289; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2290; RV32-ATOMIC-TRAILING-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2291; RV32-ATOMIC-TRAILING-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload2292; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 162293; RV32-ATOMIC-TRAILING-NEXT:    ret2294;2295; RV64-NO-ATOMIC-LABEL: rmw32_fmin_seq_cst:2296; RV64-NO-ATOMIC:       # %bb.0:2297; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -322298; RV64-NO-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill2299; RV64-NO-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill2300; RV64-NO-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill2301; RV64-NO-ATOMIC-NEXT:    mv s0, a02302; RV64-NO-ATOMIC-NEXT:    lw s1, 0(a0)2303; RV64-NO-ATOMIC-NEXT:  .LBB30_1: # %atomicrmw.start2304; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=12305; RV64-NO-ATOMIC-NEXT:    lui a1, 2600962306; RV64-NO-ATOMIC-NEXT:    mv a0, s12307; RV64-NO-ATOMIC-NEXT:    call fminf2308; RV64-NO-ATOMIC-NEXT:    mv a2, a02309; RV64-NO-ATOMIC-NEXT:    sw s1, 4(sp)2310; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 42311; RV64-NO-ATOMIC-NEXT:    li a3, 52312; RV64-NO-ATOMIC-NEXT:    li a4, 52313; RV64-NO-ATOMIC-NEXT:    mv a0, s02314; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_42315; RV64-NO-ATOMIC-NEXT:    lw s1, 4(sp)2316; RV64-NO-ATOMIC-NEXT:    beqz a0, .LBB30_12317; RV64-NO-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end2318; RV64-NO-ATOMIC-NEXT:    mv a0, s12319; RV64-NO-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload2320; RV64-NO-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload2321; RV64-NO-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload2322; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 322323; RV64-NO-ATOMIC-NEXT:    ret2324;2325; RV64-ATOMIC-LABEL: rmw32_fmin_seq_cst:2326; RV64-ATOMIC:       # %bb.0:2327; RV64-ATOMIC-NEXT:    addi sp, sp, -322328; RV64-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill2329; RV64-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill2330; RV64-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill2331; RV64-ATOMIC-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill2332; RV64-ATOMIC-NEXT:    mv s0, a02333; RV64-ATOMIC-NEXT:    lw s1, 0(a0)2334; RV64-ATOMIC-NEXT:  .LBB30_1: # %atomicrmw.start2335; RV64-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=12336; RV64-ATOMIC-NEXT:    lui a1, 2600962337; RV64-ATOMIC-NEXT:    mv a0, s12338; RV64-ATOMIC-NEXT:    call fminf2339; RV64-ATOMIC-NEXT:    mv a2, a02340; RV64-ATOMIC-NEXT:    sext.w s2, s12341; RV64-ATOMIC-NEXT:    mv a0, s02342; RV64-ATOMIC-NEXT:    mv a1, s22343; RV64-ATOMIC-NEXT:    call __sync_val_compare_and_swap_42344; RV64-ATOMIC-NEXT:    mv s1, a02345; RV64-ATOMIC-NEXT:    bne a0, s2, .LBB30_12346; RV64-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end2347; RV64-ATOMIC-NEXT:    mv a0, s12348; RV64-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload2349; RV64-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload2350; RV64-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload2351; RV64-ATOMIC-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload2352; RV64-ATOMIC-NEXT:    addi sp, sp, 322353; RV64-ATOMIC-NEXT:    ret2354;2355; RV64-ATOMIC-TRAILING-LABEL: rmw32_fmin_seq_cst:2356; RV64-ATOMIC-TRAILING:       # %bb.0:2357; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -322358; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill2359; RV64-ATOMIC-TRAILING-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill2360; RV64-ATOMIC-TRAILING-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill2361; RV64-ATOMIC-TRAILING-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill2362; RV64-ATOMIC-TRAILING-NEXT:    mv s0, a02363; RV64-ATOMIC-TRAILING-NEXT:    lw s1, 0(a0)2364; RV64-ATOMIC-TRAILING-NEXT:  .LBB30_1: # %atomicrmw.start2365; RV64-ATOMIC-TRAILING-NEXT:    # =>This Inner Loop Header: Depth=12366; RV64-ATOMIC-TRAILING-NEXT:    lui a1, 2600962367; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s12368; RV64-ATOMIC-TRAILING-NEXT:    call fminf2369; RV64-ATOMIC-TRAILING-NEXT:    mv a2, a02370; RV64-ATOMIC-TRAILING-NEXT:    sext.w s2, s12371; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s02372; RV64-ATOMIC-TRAILING-NEXT:    mv a1, s22373; RV64-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_42374; RV64-ATOMIC-TRAILING-NEXT:    mv s1, a02375; RV64-ATOMIC-TRAILING-NEXT:    bne a0, s2, .LBB30_12376; RV64-ATOMIC-TRAILING-NEXT:  # %bb.2: # %atomicrmw.end2377; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s12378; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload2379; RV64-ATOMIC-TRAILING-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload2380; RV64-ATOMIC-TRAILING-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload2381; RV64-ATOMIC-TRAILING-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload2382; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 322383; RV64-ATOMIC-TRAILING-NEXT:    ret2384  %v = atomicrmw fmin ptr %p, float 1.0 seq_cst, align 42385  ret float %v2386}2387 2388define float @rmw32_fmax_seq_cst(ptr %p) nounwind {2389; RV32-NO-ATOMIC-LABEL: rmw32_fmax_seq_cst:2390; RV32-NO-ATOMIC:       # %bb.0:2391; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -162392; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2393; RV32-NO-ATOMIC-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2394; RV32-NO-ATOMIC-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill2395; RV32-NO-ATOMIC-NEXT:    mv s0, a02396; RV32-NO-ATOMIC-NEXT:    lw s1, 0(a0)2397; RV32-NO-ATOMIC-NEXT:  .LBB31_1: # %atomicrmw.start2398; RV32-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=12399; RV32-NO-ATOMIC-NEXT:    lui a1, 2600962400; RV32-NO-ATOMIC-NEXT:    mv a0, s12401; RV32-NO-ATOMIC-NEXT:    call fmaxf2402; RV32-NO-ATOMIC-NEXT:    mv a2, a02403; RV32-NO-ATOMIC-NEXT:    sw s1, 0(sp)2404; RV32-NO-ATOMIC-NEXT:    mv a1, sp2405; RV32-NO-ATOMIC-NEXT:    li a3, 52406; RV32-NO-ATOMIC-NEXT:    li a4, 52407; RV32-NO-ATOMIC-NEXT:    mv a0, s02408; RV32-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_42409; RV32-NO-ATOMIC-NEXT:    lw s1, 0(sp)2410; RV32-NO-ATOMIC-NEXT:    beqz a0, .LBB31_12411; RV32-NO-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end2412; RV32-NO-ATOMIC-NEXT:    mv a0, s12413; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2414; RV32-NO-ATOMIC-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2415; RV32-NO-ATOMIC-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload2416; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 162417; RV32-NO-ATOMIC-NEXT:    ret2418;2419; RV32-ATOMIC-LABEL: rmw32_fmax_seq_cst:2420; RV32-ATOMIC:       # %bb.0:2421; RV32-ATOMIC-NEXT:    addi sp, sp, -162422; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2423; RV32-ATOMIC-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2424; RV32-ATOMIC-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill2425; RV32-ATOMIC-NEXT:    mv s0, a02426; RV32-ATOMIC-NEXT:    lw a0, 0(a0)2427; RV32-ATOMIC-NEXT:  .LBB31_1: # %atomicrmw.start2428; RV32-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=12429; RV32-ATOMIC-NEXT:    mv s1, a02430; RV32-ATOMIC-NEXT:    lui a1, 2600962431; RV32-ATOMIC-NEXT:    call fmaxf2432; RV32-ATOMIC-NEXT:    mv a2, a02433; RV32-ATOMIC-NEXT:    mv a0, s02434; RV32-ATOMIC-NEXT:    mv a1, s12435; RV32-ATOMIC-NEXT:    call __sync_val_compare_and_swap_42436; RV32-ATOMIC-NEXT:    bne a0, s1, .LBB31_12437; RV32-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end2438; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2439; RV32-ATOMIC-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2440; RV32-ATOMIC-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload2441; RV32-ATOMIC-NEXT:    addi sp, sp, 162442; RV32-ATOMIC-NEXT:    ret2443;2444; RV32-ATOMIC-TRAILING-LABEL: rmw32_fmax_seq_cst:2445; RV32-ATOMIC-TRAILING:       # %bb.0:2446; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -162447; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2448; RV32-ATOMIC-TRAILING-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2449; RV32-ATOMIC-TRAILING-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill2450; RV32-ATOMIC-TRAILING-NEXT:    mv s0, a02451; RV32-ATOMIC-TRAILING-NEXT:    lw a0, 0(a0)2452; RV32-ATOMIC-TRAILING-NEXT:  .LBB31_1: # %atomicrmw.start2453; RV32-ATOMIC-TRAILING-NEXT:    # =>This Inner Loop Header: Depth=12454; RV32-ATOMIC-TRAILING-NEXT:    mv s1, a02455; RV32-ATOMIC-TRAILING-NEXT:    lui a1, 2600962456; RV32-ATOMIC-TRAILING-NEXT:    call fmaxf2457; RV32-ATOMIC-TRAILING-NEXT:    mv a2, a02458; RV32-ATOMIC-TRAILING-NEXT:    mv a0, s02459; RV32-ATOMIC-TRAILING-NEXT:    mv a1, s12460; RV32-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_42461; RV32-ATOMIC-TRAILING-NEXT:    bne a0, s1, .LBB31_12462; RV32-ATOMIC-TRAILING-NEXT:  # %bb.2: # %atomicrmw.end2463; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2464; RV32-ATOMIC-TRAILING-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2465; RV32-ATOMIC-TRAILING-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload2466; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 162467; RV32-ATOMIC-TRAILING-NEXT:    ret2468;2469; RV64-NO-ATOMIC-LABEL: rmw32_fmax_seq_cst:2470; RV64-NO-ATOMIC:       # %bb.0:2471; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -322472; RV64-NO-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill2473; RV64-NO-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill2474; RV64-NO-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill2475; RV64-NO-ATOMIC-NEXT:    mv s0, a02476; RV64-NO-ATOMIC-NEXT:    lw s1, 0(a0)2477; RV64-NO-ATOMIC-NEXT:  .LBB31_1: # %atomicrmw.start2478; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=12479; RV64-NO-ATOMIC-NEXT:    lui a1, 2600962480; RV64-NO-ATOMIC-NEXT:    mv a0, s12481; RV64-NO-ATOMIC-NEXT:    call fmaxf2482; RV64-NO-ATOMIC-NEXT:    mv a2, a02483; RV64-NO-ATOMIC-NEXT:    sw s1, 4(sp)2484; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 42485; RV64-NO-ATOMIC-NEXT:    li a3, 52486; RV64-NO-ATOMIC-NEXT:    li a4, 52487; RV64-NO-ATOMIC-NEXT:    mv a0, s02488; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_42489; RV64-NO-ATOMIC-NEXT:    lw s1, 4(sp)2490; RV64-NO-ATOMIC-NEXT:    beqz a0, .LBB31_12491; RV64-NO-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end2492; RV64-NO-ATOMIC-NEXT:    mv a0, s12493; RV64-NO-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload2494; RV64-NO-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload2495; RV64-NO-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload2496; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 322497; RV64-NO-ATOMIC-NEXT:    ret2498;2499; RV64-ATOMIC-LABEL: rmw32_fmax_seq_cst:2500; RV64-ATOMIC:       # %bb.0:2501; RV64-ATOMIC-NEXT:    addi sp, sp, -322502; RV64-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill2503; RV64-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill2504; RV64-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill2505; RV64-ATOMIC-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill2506; RV64-ATOMIC-NEXT:    mv s0, a02507; RV64-ATOMIC-NEXT:    lw s1, 0(a0)2508; RV64-ATOMIC-NEXT:  .LBB31_1: # %atomicrmw.start2509; RV64-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=12510; RV64-ATOMIC-NEXT:    lui a1, 2600962511; RV64-ATOMIC-NEXT:    mv a0, s12512; RV64-ATOMIC-NEXT:    call fmaxf2513; RV64-ATOMIC-NEXT:    mv a2, a02514; RV64-ATOMIC-NEXT:    sext.w s2, s12515; RV64-ATOMIC-NEXT:    mv a0, s02516; RV64-ATOMIC-NEXT:    mv a1, s22517; RV64-ATOMIC-NEXT:    call __sync_val_compare_and_swap_42518; RV64-ATOMIC-NEXT:    mv s1, a02519; RV64-ATOMIC-NEXT:    bne a0, s2, .LBB31_12520; RV64-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end2521; RV64-ATOMIC-NEXT:    mv a0, s12522; RV64-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload2523; RV64-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload2524; RV64-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload2525; RV64-ATOMIC-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload2526; RV64-ATOMIC-NEXT:    addi sp, sp, 322527; RV64-ATOMIC-NEXT:    ret2528;2529; RV64-ATOMIC-TRAILING-LABEL: rmw32_fmax_seq_cst:2530; RV64-ATOMIC-TRAILING:       # %bb.0:2531; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -322532; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill2533; RV64-ATOMIC-TRAILING-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill2534; RV64-ATOMIC-TRAILING-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill2535; RV64-ATOMIC-TRAILING-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill2536; RV64-ATOMIC-TRAILING-NEXT:    mv s0, a02537; RV64-ATOMIC-TRAILING-NEXT:    lw s1, 0(a0)2538; RV64-ATOMIC-TRAILING-NEXT:  .LBB31_1: # %atomicrmw.start2539; RV64-ATOMIC-TRAILING-NEXT:    # =>This Inner Loop Header: Depth=12540; RV64-ATOMIC-TRAILING-NEXT:    lui a1, 2600962541; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s12542; RV64-ATOMIC-TRAILING-NEXT:    call fmaxf2543; RV64-ATOMIC-TRAILING-NEXT:    mv a2, a02544; RV64-ATOMIC-TRAILING-NEXT:    sext.w s2, s12545; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s02546; RV64-ATOMIC-TRAILING-NEXT:    mv a1, s22547; RV64-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_42548; RV64-ATOMIC-TRAILING-NEXT:    mv s1, a02549; RV64-ATOMIC-TRAILING-NEXT:    bne a0, s2, .LBB31_12550; RV64-ATOMIC-TRAILING-NEXT:  # %bb.2: # %atomicrmw.end2551; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s12552; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload2553; RV64-ATOMIC-TRAILING-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload2554; RV64-ATOMIC-TRAILING-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload2555; RV64-ATOMIC-TRAILING-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload2556; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 322557; RV64-ATOMIC-TRAILING-NEXT:    ret2558  %v = atomicrmw fmax ptr %p, float 1.0 seq_cst, align 42559  ret float %v2560}2561 2562define i32 @cmpxchg32_monotonic(ptr %p) nounwind {2563; RV32-NO-ATOMIC-LABEL: cmpxchg32_monotonic:2564; RV32-NO-ATOMIC:       # %bb.0:2565; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -162566; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2567; RV32-NO-ATOMIC-NEXT:    sw zero, 8(sp)2568; RV32-NO-ATOMIC-NEXT:    addi a1, sp, 82569; RV32-NO-ATOMIC-NEXT:    li a2, 12570; RV32-NO-ATOMIC-NEXT:    li a3, 02571; RV32-NO-ATOMIC-NEXT:    li a4, 02572; RV32-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_42573; RV32-NO-ATOMIC-NEXT:    lw a0, 8(sp)2574; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2575; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 162576; RV32-NO-ATOMIC-NEXT:    ret2577;2578; RV32-ATOMIC-LABEL: cmpxchg32_monotonic:2579; RV32-ATOMIC:       # %bb.0:2580; RV32-ATOMIC-NEXT:    addi sp, sp, -162581; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2582; RV32-ATOMIC-NEXT:    li a2, 12583; RV32-ATOMIC-NEXT:    li a1, 02584; RV32-ATOMIC-NEXT:    call __sync_val_compare_and_swap_42585; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2586; RV32-ATOMIC-NEXT:    addi sp, sp, 162587; RV32-ATOMIC-NEXT:    ret2588;2589; RV32-ATOMIC-TRAILING-LABEL: cmpxchg32_monotonic:2590; RV32-ATOMIC-TRAILING:       # %bb.0:2591; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -162592; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2593; RV32-ATOMIC-TRAILING-NEXT:    li a2, 12594; RV32-ATOMIC-TRAILING-NEXT:    li a1, 02595; RV32-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_42596; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2597; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 162598; RV32-ATOMIC-TRAILING-NEXT:    ret2599;2600; RV64-NO-ATOMIC-LABEL: cmpxchg32_monotonic:2601; RV64-NO-ATOMIC:       # %bb.0:2602; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -162603; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2604; RV64-NO-ATOMIC-NEXT:    sw zero, 4(sp)2605; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 42606; RV64-NO-ATOMIC-NEXT:    li a2, 12607; RV64-NO-ATOMIC-NEXT:    li a3, 02608; RV64-NO-ATOMIC-NEXT:    li a4, 02609; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_42610; RV64-NO-ATOMIC-NEXT:    lw a0, 4(sp)2611; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2612; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 162613; RV64-NO-ATOMIC-NEXT:    ret2614;2615; RV64-ATOMIC-LABEL: cmpxchg32_monotonic:2616; RV64-ATOMIC:       # %bb.0:2617; RV64-ATOMIC-NEXT:    addi sp, sp, -162618; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2619; RV64-ATOMIC-NEXT:    li a2, 12620; RV64-ATOMIC-NEXT:    li a1, 02621; RV64-ATOMIC-NEXT:    call __sync_val_compare_and_swap_42622; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2623; RV64-ATOMIC-NEXT:    addi sp, sp, 162624; RV64-ATOMIC-NEXT:    ret2625;2626; RV64-ATOMIC-TRAILING-LABEL: cmpxchg32_monotonic:2627; RV64-ATOMIC-TRAILING:       # %bb.0:2628; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -162629; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2630; RV64-ATOMIC-TRAILING-NEXT:    li a2, 12631; RV64-ATOMIC-TRAILING-NEXT:    li a1, 02632; RV64-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_42633; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2634; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 162635; RV64-ATOMIC-TRAILING-NEXT:    ret2636  %res = cmpxchg ptr %p, i32 0, i32 1 monotonic monotonic2637  %res.0 = extractvalue { i32, i1 } %res, 02638  ret i32 %res.02639}2640 2641define i32 @cmpxchg32_seq_cst(ptr %p) nounwind {2642; RV32-NO-ATOMIC-LABEL: cmpxchg32_seq_cst:2643; RV32-NO-ATOMIC:       # %bb.0:2644; RV32-NO-ATOMIC-NEXT:    addi sp, sp, -162645; RV32-NO-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2646; RV32-NO-ATOMIC-NEXT:    sw zero, 8(sp)2647; RV32-NO-ATOMIC-NEXT:    addi a1, sp, 82648; RV32-NO-ATOMIC-NEXT:    li a2, 12649; RV32-NO-ATOMIC-NEXT:    li a3, 52650; RV32-NO-ATOMIC-NEXT:    li a4, 52651; RV32-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_42652; RV32-NO-ATOMIC-NEXT:    lw a0, 8(sp)2653; RV32-NO-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2654; RV32-NO-ATOMIC-NEXT:    addi sp, sp, 162655; RV32-NO-ATOMIC-NEXT:    ret2656;2657; RV32-ATOMIC-LABEL: cmpxchg32_seq_cst:2658; RV32-ATOMIC:       # %bb.0:2659; RV32-ATOMIC-NEXT:    addi sp, sp, -162660; RV32-ATOMIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2661; RV32-ATOMIC-NEXT:    li a2, 12662; RV32-ATOMIC-NEXT:    li a1, 02663; RV32-ATOMIC-NEXT:    call __sync_val_compare_and_swap_42664; RV32-ATOMIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2665; RV32-ATOMIC-NEXT:    addi sp, sp, 162666; RV32-ATOMIC-NEXT:    ret2667;2668; RV32-ATOMIC-TRAILING-LABEL: cmpxchg32_seq_cst:2669; RV32-ATOMIC-TRAILING:       # %bb.0:2670; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, -162671; RV32-ATOMIC-TRAILING-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2672; RV32-ATOMIC-TRAILING-NEXT:    li a2, 12673; RV32-ATOMIC-TRAILING-NEXT:    li a1, 02674; RV32-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_42675; RV32-ATOMIC-TRAILING-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2676; RV32-ATOMIC-TRAILING-NEXT:    addi sp, sp, 162677; RV32-ATOMIC-TRAILING-NEXT:    ret2678;2679; RV64-NO-ATOMIC-LABEL: cmpxchg32_seq_cst:2680; RV64-NO-ATOMIC:       # %bb.0:2681; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -162682; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2683; RV64-NO-ATOMIC-NEXT:    sw zero, 4(sp)2684; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 42685; RV64-NO-ATOMIC-NEXT:    li a2, 12686; RV64-NO-ATOMIC-NEXT:    li a3, 52687; RV64-NO-ATOMIC-NEXT:    li a4, 52688; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_42689; RV64-NO-ATOMIC-NEXT:    lw a0, 4(sp)2690; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2691; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 162692; RV64-NO-ATOMIC-NEXT:    ret2693;2694; RV64-ATOMIC-LABEL: cmpxchg32_seq_cst:2695; RV64-ATOMIC:       # %bb.0:2696; RV64-ATOMIC-NEXT:    addi sp, sp, -162697; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2698; RV64-ATOMIC-NEXT:    li a2, 12699; RV64-ATOMIC-NEXT:    li a1, 02700; RV64-ATOMIC-NEXT:    call __sync_val_compare_and_swap_42701; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2702; RV64-ATOMIC-NEXT:    addi sp, sp, 162703; RV64-ATOMIC-NEXT:    ret2704;2705; RV64-ATOMIC-TRAILING-LABEL: cmpxchg32_seq_cst:2706; RV64-ATOMIC-TRAILING:       # %bb.0:2707; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -162708; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2709; RV64-ATOMIC-TRAILING-NEXT:    li a2, 12710; RV64-ATOMIC-TRAILING-NEXT:    li a1, 02711; RV64-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_42712; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2713; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 162714; RV64-ATOMIC-TRAILING-NEXT:    ret2715  %res = cmpxchg ptr %p, i32 0, i32 1 seq_cst seq_cst2716  %res.0 = extractvalue { i32, i1 } %res, 02717  ret i32 %res.02718}2719 2720define i64 @load64_unordered(ptr %p) nounwind {2721; RV32-LABEL: load64_unordered:2722; RV32:       # %bb.0:2723; RV32-NEXT:    addi sp, sp, -162724; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2725; RV32-NEXT:    li a1, 02726; RV32-NEXT:    call __atomic_load_82727; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2728; RV32-NEXT:    addi sp, sp, 162729; RV32-NEXT:    ret2730;2731; RV64-NO-ATOMIC-LABEL: load64_unordered:2732; RV64-NO-ATOMIC:       # %bb.0:2733; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -162734; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2735; RV64-NO-ATOMIC-NEXT:    li a1, 02736; RV64-NO-ATOMIC-NEXT:    call __atomic_load_82737; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2738; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 162739; RV64-NO-ATOMIC-NEXT:    ret2740;2741; RV64-ATOMIC-LABEL: load64_unordered:2742; RV64-ATOMIC:       # %bb.0:2743; RV64-ATOMIC-NEXT:    ld a0, 0(a0)2744; RV64-ATOMIC-NEXT:    ret2745;2746; RV64-ATOMIC-TRAILING-LABEL: load64_unordered:2747; RV64-ATOMIC-TRAILING:       # %bb.0:2748; RV64-ATOMIC-TRAILING-NEXT:    ld a0, 0(a0)2749; RV64-ATOMIC-TRAILING-NEXT:    ret2750  %v = load atomic i64, ptr %p unordered, align 82751  ret i64 %v2752}2753 2754define i64 @load64_monotonic(ptr %p) nounwind {2755; RV32-LABEL: load64_monotonic:2756; RV32:       # %bb.0:2757; RV32-NEXT:    addi sp, sp, -162758; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2759; RV32-NEXT:    li a1, 02760; RV32-NEXT:    call __atomic_load_82761; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2762; RV32-NEXT:    addi sp, sp, 162763; RV32-NEXT:    ret2764;2765; RV64-NO-ATOMIC-LABEL: load64_monotonic:2766; RV64-NO-ATOMIC:       # %bb.0:2767; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -162768; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2769; RV64-NO-ATOMIC-NEXT:    li a1, 02770; RV64-NO-ATOMIC-NEXT:    call __atomic_load_82771; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2772; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 162773; RV64-NO-ATOMIC-NEXT:    ret2774;2775; RV64-ATOMIC-LABEL: load64_monotonic:2776; RV64-ATOMIC:       # %bb.0:2777; RV64-ATOMIC-NEXT:    ld a0, 0(a0)2778; RV64-ATOMIC-NEXT:    ret2779;2780; RV64-ATOMIC-TRAILING-LABEL: load64_monotonic:2781; RV64-ATOMIC-TRAILING:       # %bb.0:2782; RV64-ATOMIC-TRAILING-NEXT:    ld a0, 0(a0)2783; RV64-ATOMIC-TRAILING-NEXT:    ret2784  %v = load atomic i64, ptr %p monotonic, align 82785  ret i64 %v2786}2787 2788define i64 @load64_acquire(ptr %p) nounwind {2789; RV32-LABEL: load64_acquire:2790; RV32:       # %bb.0:2791; RV32-NEXT:    addi sp, sp, -162792; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2793; RV32-NEXT:    li a1, 22794; RV32-NEXT:    call __atomic_load_82795; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2796; RV32-NEXT:    addi sp, sp, 162797; RV32-NEXT:    ret2798;2799; RV64-NO-ATOMIC-LABEL: load64_acquire:2800; RV64-NO-ATOMIC:       # %bb.0:2801; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -162802; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2803; RV64-NO-ATOMIC-NEXT:    li a1, 22804; RV64-NO-ATOMIC-NEXT:    call __atomic_load_82805; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2806; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 162807; RV64-NO-ATOMIC-NEXT:    ret2808;2809; RV64-ATOMIC-LABEL: load64_acquire:2810; RV64-ATOMIC:       # %bb.0:2811; RV64-ATOMIC-NEXT:    ld a0, 0(a0)2812; RV64-ATOMIC-NEXT:    fence r, rw2813; RV64-ATOMIC-NEXT:    ret2814;2815; RV64-ATOMIC-TRAILING-LABEL: load64_acquire:2816; RV64-ATOMIC-TRAILING:       # %bb.0:2817; RV64-ATOMIC-TRAILING-NEXT:    ld a0, 0(a0)2818; RV64-ATOMIC-TRAILING-NEXT:    fence r, rw2819; RV64-ATOMIC-TRAILING-NEXT:    ret2820  %v = load atomic i64, ptr %p acquire, align 82821  ret i64 %v2822}2823 2824define i64 @load64_seq_cst(ptr %p) nounwind {2825; RV32-LABEL: load64_seq_cst:2826; RV32:       # %bb.0:2827; RV32-NEXT:    addi sp, sp, -162828; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2829; RV32-NEXT:    li a1, 52830; RV32-NEXT:    call __atomic_load_82831; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2832; RV32-NEXT:    addi sp, sp, 162833; RV32-NEXT:    ret2834;2835; RV64-NO-ATOMIC-LABEL: load64_seq_cst:2836; RV64-NO-ATOMIC:       # %bb.0:2837; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -162838; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2839; RV64-NO-ATOMIC-NEXT:    li a1, 52840; RV64-NO-ATOMIC-NEXT:    call __atomic_load_82841; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2842; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 162843; RV64-NO-ATOMIC-NEXT:    ret2844;2845; RV64-ATOMIC-LABEL: load64_seq_cst:2846; RV64-ATOMIC:       # %bb.0:2847; RV64-ATOMIC-NEXT:    fence rw, rw2848; RV64-ATOMIC-NEXT:    ld a0, 0(a0)2849; RV64-ATOMIC-NEXT:    fence r, rw2850; RV64-ATOMIC-NEXT:    ret2851;2852; RV64-ATOMIC-TRAILING-LABEL: load64_seq_cst:2853; RV64-ATOMIC-TRAILING:       # %bb.0:2854; RV64-ATOMIC-TRAILING-NEXT:    fence rw, rw2855; RV64-ATOMIC-TRAILING-NEXT:    ld a0, 0(a0)2856; RV64-ATOMIC-TRAILING-NEXT:    fence r, rw2857; RV64-ATOMIC-TRAILING-NEXT:    ret2858  %v = load atomic i64, ptr %p seq_cst, align 82859  ret i64 %v2860}2861 2862define void @store64_unordered(ptr %p) nounwind {2863; RV32-LABEL: store64_unordered:2864; RV32:       # %bb.0:2865; RV32-NEXT:    addi sp, sp, -162866; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2867; RV32-NEXT:    li a1, 02868; RV32-NEXT:    li a2, 02869; RV32-NEXT:    li a3, 02870; RV32-NEXT:    call __atomic_store_82871; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2872; RV32-NEXT:    addi sp, sp, 162873; RV32-NEXT:    ret2874;2875; RV64-NO-ATOMIC-LABEL: store64_unordered:2876; RV64-NO-ATOMIC:       # %bb.0:2877; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -162878; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2879; RV64-NO-ATOMIC-NEXT:    li a1, 02880; RV64-NO-ATOMIC-NEXT:    li a2, 02881; RV64-NO-ATOMIC-NEXT:    call __atomic_store_82882; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2883; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 162884; RV64-NO-ATOMIC-NEXT:    ret2885;2886; RV64-ATOMIC-LABEL: store64_unordered:2887; RV64-ATOMIC:       # %bb.0:2888; RV64-ATOMIC-NEXT:    sd zero, 0(a0)2889; RV64-ATOMIC-NEXT:    ret2890;2891; RV64-ATOMIC-TRAILING-LABEL: store64_unordered:2892; RV64-ATOMIC-TRAILING:       # %bb.0:2893; RV64-ATOMIC-TRAILING-NEXT:    sd zero, 0(a0)2894; RV64-ATOMIC-TRAILING-NEXT:    ret2895  store atomic i64 0, ptr %p unordered, align 82896  ret void2897}2898 2899define void @store64_monotonic(ptr %p) nounwind {2900; RV32-LABEL: store64_monotonic:2901; RV32:       # %bb.0:2902; RV32-NEXT:    addi sp, sp, -162903; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2904; RV32-NEXT:    li a1, 02905; RV32-NEXT:    li a2, 02906; RV32-NEXT:    li a3, 02907; RV32-NEXT:    call __atomic_store_82908; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2909; RV32-NEXT:    addi sp, sp, 162910; RV32-NEXT:    ret2911;2912; RV64-NO-ATOMIC-LABEL: store64_monotonic:2913; RV64-NO-ATOMIC:       # %bb.0:2914; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -162915; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2916; RV64-NO-ATOMIC-NEXT:    li a1, 02917; RV64-NO-ATOMIC-NEXT:    li a2, 02918; RV64-NO-ATOMIC-NEXT:    call __atomic_store_82919; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2920; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 162921; RV64-NO-ATOMIC-NEXT:    ret2922;2923; RV64-ATOMIC-LABEL: store64_monotonic:2924; RV64-ATOMIC:       # %bb.0:2925; RV64-ATOMIC-NEXT:    sd zero, 0(a0)2926; RV64-ATOMIC-NEXT:    ret2927;2928; RV64-ATOMIC-TRAILING-LABEL: store64_monotonic:2929; RV64-ATOMIC-TRAILING:       # %bb.0:2930; RV64-ATOMIC-TRAILING-NEXT:    sd zero, 0(a0)2931; RV64-ATOMIC-TRAILING-NEXT:    ret2932  store atomic i64 0, ptr %p monotonic, align 82933  ret void2934}2935 2936define void @store64_release(ptr %p) nounwind {2937; RV32-LABEL: store64_release:2938; RV32:       # %bb.0:2939; RV32-NEXT:    addi sp, sp, -162940; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2941; RV32-NEXT:    li a3, 32942; RV32-NEXT:    li a1, 02943; RV32-NEXT:    li a2, 02944; RV32-NEXT:    call __atomic_store_82945; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2946; RV32-NEXT:    addi sp, sp, 162947; RV32-NEXT:    ret2948;2949; RV64-NO-ATOMIC-LABEL: store64_release:2950; RV64-NO-ATOMIC:       # %bb.0:2951; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -162952; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2953; RV64-NO-ATOMIC-NEXT:    li a2, 32954; RV64-NO-ATOMIC-NEXT:    li a1, 02955; RV64-NO-ATOMIC-NEXT:    call __atomic_store_82956; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2957; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 162958; RV64-NO-ATOMIC-NEXT:    ret2959;2960; RV64-ATOMIC-LABEL: store64_release:2961; RV64-ATOMIC:       # %bb.0:2962; RV64-ATOMIC-NEXT:    fence rw, w2963; RV64-ATOMIC-NEXT:    sd zero, 0(a0)2964; RV64-ATOMIC-NEXT:    ret2965;2966; RV64-ATOMIC-TRAILING-LABEL: store64_release:2967; RV64-ATOMIC-TRAILING:       # %bb.0:2968; RV64-ATOMIC-TRAILING-NEXT:    fence rw, w2969; RV64-ATOMIC-TRAILING-NEXT:    sd zero, 0(a0)2970; RV64-ATOMIC-TRAILING-NEXT:    ret2971  store atomic i64 0, ptr %p release, align 82972  ret void2973}2974 2975define void @store64(ptr %p) nounwind {2976; RV32-LABEL: store64:2977; RV32:       # %bb.0:2978; RV32-NEXT:    addi sp, sp, -162979; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2980; RV32-NEXT:    li a3, 52981; RV32-NEXT:    li a1, 02982; RV32-NEXT:    li a2, 02983; RV32-NEXT:    call __atomic_store_82984; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2985; RV32-NEXT:    addi sp, sp, 162986; RV32-NEXT:    ret2987;2988; RV64-NO-ATOMIC-LABEL: store64:2989; RV64-NO-ATOMIC:       # %bb.0:2990; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -162991; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2992; RV64-NO-ATOMIC-NEXT:    li a2, 52993; RV64-NO-ATOMIC-NEXT:    li a1, 02994; RV64-NO-ATOMIC-NEXT:    call __atomic_store_82995; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2996; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 162997; RV64-NO-ATOMIC-NEXT:    ret2998;2999; RV64-ATOMIC-LABEL: store64:3000; RV64-ATOMIC:       # %bb.0:3001; RV64-ATOMIC-NEXT:    fence rw, w3002; RV64-ATOMIC-NEXT:    sd zero, 0(a0)3003; RV64-ATOMIC-NEXT:    ret3004;3005; RV64-ATOMIC-TRAILING-LABEL: store64:3006; RV64-ATOMIC-TRAILING:       # %bb.0:3007; RV64-ATOMIC-TRAILING-NEXT:    fence rw, w3008; RV64-ATOMIC-TRAILING-NEXT:    sd zero, 0(a0)3009; RV64-ATOMIC-TRAILING-NEXT:    fence rw, rw3010; RV64-ATOMIC-TRAILING-NEXT:    ret3011  store atomic i64 0, ptr %p seq_cst, align 83012  ret void3013}3014 3015define i64 @rmw64_monotonic(ptr %p) nounwind {3016; RV32-LABEL: rmw64_monotonic:3017; RV32:       # %bb.0:3018; RV32-NEXT:    addi sp, sp, -163019; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3020; RV32-NEXT:    li a1, 13021; RV32-NEXT:    li a2, 03022; RV32-NEXT:    li a3, 03023; RV32-NEXT:    call __atomic_fetch_add_83024; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3025; RV32-NEXT:    addi sp, sp, 163026; RV32-NEXT:    ret3027;3028; RV64-NO-ATOMIC-LABEL: rmw64_monotonic:3029; RV64-NO-ATOMIC:       # %bb.0:3030; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -163031; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3032; RV64-NO-ATOMIC-NEXT:    li a1, 13033; RV64-NO-ATOMIC-NEXT:    li a2, 03034; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_add_83035; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3036; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 163037; RV64-NO-ATOMIC-NEXT:    ret3038;3039; RV64-ATOMIC-LABEL: rmw64_monotonic:3040; RV64-ATOMIC:       # %bb.0:3041; RV64-ATOMIC-NEXT:    addi sp, sp, -163042; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3043; RV64-ATOMIC-NEXT:    li a1, 13044; RV64-ATOMIC-NEXT:    call __sync_fetch_and_add_83045; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3046; RV64-ATOMIC-NEXT:    addi sp, sp, 163047; RV64-ATOMIC-NEXT:    ret3048;3049; RV64-ATOMIC-TRAILING-LABEL: rmw64_monotonic:3050; RV64-ATOMIC-TRAILING:       # %bb.0:3051; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -163052; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3053; RV64-ATOMIC-TRAILING-NEXT:    li a1, 13054; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_add_83055; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3056; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 163057; RV64-ATOMIC-TRAILING-NEXT:    ret3058  %v = atomicrmw add ptr %p, i64 1 monotonic, align 83059  ret i64 %v3060}3061 3062define i64 @rmw64_add_seq_cst(ptr %p) nounwind {3063; RV32-LABEL: rmw64_add_seq_cst:3064; RV32:       # %bb.0:3065; RV32-NEXT:    addi sp, sp, -163066; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3067; RV32-NEXT:    li a1, 13068; RV32-NEXT:    li a3, 53069; RV32-NEXT:    li a2, 03070; RV32-NEXT:    call __atomic_fetch_add_83071; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3072; RV32-NEXT:    addi sp, sp, 163073; RV32-NEXT:    ret3074;3075; RV64-NO-ATOMIC-LABEL: rmw64_add_seq_cst:3076; RV64-NO-ATOMIC:       # %bb.0:3077; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -163078; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3079; RV64-NO-ATOMIC-NEXT:    li a1, 13080; RV64-NO-ATOMIC-NEXT:    li a2, 53081; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_add_83082; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3083; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 163084; RV64-NO-ATOMIC-NEXT:    ret3085;3086; RV64-ATOMIC-LABEL: rmw64_add_seq_cst:3087; RV64-ATOMIC:       # %bb.0:3088; RV64-ATOMIC-NEXT:    addi sp, sp, -163089; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3090; RV64-ATOMIC-NEXT:    li a1, 13091; RV64-ATOMIC-NEXT:    call __sync_fetch_and_add_83092; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3093; RV64-ATOMIC-NEXT:    addi sp, sp, 163094; RV64-ATOMIC-NEXT:    ret3095;3096; RV64-ATOMIC-TRAILING-LABEL: rmw64_add_seq_cst:3097; RV64-ATOMIC-TRAILING:       # %bb.0:3098; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -163099; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3100; RV64-ATOMIC-TRAILING-NEXT:    li a1, 13101; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_add_83102; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3103; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 163104; RV64-ATOMIC-TRAILING-NEXT:    ret3105  %v = atomicrmw add ptr %p, i64 1 seq_cst, align 83106  ret i64 %v3107}3108 3109define i64 @rmw64_sub_seq_cst(ptr %p) nounwind {3110; RV32-LABEL: rmw64_sub_seq_cst:3111; RV32:       # %bb.0:3112; RV32-NEXT:    addi sp, sp, -163113; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3114; RV32-NEXT:    li a1, 13115; RV32-NEXT:    li a3, 53116; RV32-NEXT:    li a2, 03117; RV32-NEXT:    call __atomic_fetch_sub_83118; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3119; RV32-NEXT:    addi sp, sp, 163120; RV32-NEXT:    ret3121;3122; RV64-NO-ATOMIC-LABEL: rmw64_sub_seq_cst:3123; RV64-NO-ATOMIC:       # %bb.0:3124; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -163125; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3126; RV64-NO-ATOMIC-NEXT:    li a1, 13127; RV64-NO-ATOMIC-NEXT:    li a2, 53128; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_sub_83129; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3130; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 163131; RV64-NO-ATOMIC-NEXT:    ret3132;3133; RV64-ATOMIC-LABEL: rmw64_sub_seq_cst:3134; RV64-ATOMIC:       # %bb.0:3135; RV64-ATOMIC-NEXT:    addi sp, sp, -163136; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3137; RV64-ATOMIC-NEXT:    li a1, 13138; RV64-ATOMIC-NEXT:    call __sync_fetch_and_sub_83139; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3140; RV64-ATOMIC-NEXT:    addi sp, sp, 163141; RV64-ATOMIC-NEXT:    ret3142;3143; RV64-ATOMIC-TRAILING-LABEL: rmw64_sub_seq_cst:3144; RV64-ATOMIC-TRAILING:       # %bb.0:3145; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -163146; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3147; RV64-ATOMIC-TRAILING-NEXT:    li a1, 13148; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_sub_83149; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3150; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 163151; RV64-ATOMIC-TRAILING-NEXT:    ret3152  %v = atomicrmw sub ptr %p, i64 1 seq_cst, align 83153  ret i64 %v3154}3155 3156define i64 @rmw64_and_seq_cst(ptr %p) nounwind {3157; RV32-LABEL: rmw64_and_seq_cst:3158; RV32:       # %bb.0:3159; RV32-NEXT:    addi sp, sp, -163160; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3161; RV32-NEXT:    li a1, 13162; RV32-NEXT:    li a3, 53163; RV32-NEXT:    li a2, 03164; RV32-NEXT:    call __atomic_fetch_and_83165; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3166; RV32-NEXT:    addi sp, sp, 163167; RV32-NEXT:    ret3168;3169; RV64-NO-ATOMIC-LABEL: rmw64_and_seq_cst:3170; RV64-NO-ATOMIC:       # %bb.0:3171; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -163172; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3173; RV64-NO-ATOMIC-NEXT:    li a1, 13174; RV64-NO-ATOMIC-NEXT:    li a2, 53175; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_and_83176; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3177; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 163178; RV64-NO-ATOMIC-NEXT:    ret3179;3180; RV64-ATOMIC-LABEL: rmw64_and_seq_cst:3181; RV64-ATOMIC:       # %bb.0:3182; RV64-ATOMIC-NEXT:    addi sp, sp, -163183; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3184; RV64-ATOMIC-NEXT:    li a1, 13185; RV64-ATOMIC-NEXT:    call __sync_fetch_and_and_83186; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3187; RV64-ATOMIC-NEXT:    addi sp, sp, 163188; RV64-ATOMIC-NEXT:    ret3189;3190; RV64-ATOMIC-TRAILING-LABEL: rmw64_and_seq_cst:3191; RV64-ATOMIC-TRAILING:       # %bb.0:3192; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -163193; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3194; RV64-ATOMIC-TRAILING-NEXT:    li a1, 13195; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_and_83196; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3197; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 163198; RV64-ATOMIC-TRAILING-NEXT:    ret3199  %v = atomicrmw and ptr %p, i64 1 seq_cst, align 83200  ret i64 %v3201}3202 3203define i64 @rmw64_nand_seq_cst(ptr %p) nounwind {3204; RV32-LABEL: rmw64_nand_seq_cst:3205; RV32:       # %bb.0:3206; RV32-NEXT:    addi sp, sp, -163207; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3208; RV32-NEXT:    li a1, 13209; RV32-NEXT:    li a3, 53210; RV32-NEXT:    li a2, 03211; RV32-NEXT:    call __atomic_fetch_nand_83212; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3213; RV32-NEXT:    addi sp, sp, 163214; RV32-NEXT:    ret3215;3216; RV64-NO-ATOMIC-LABEL: rmw64_nand_seq_cst:3217; RV64-NO-ATOMIC:       # %bb.0:3218; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -163219; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3220; RV64-NO-ATOMIC-NEXT:    li a1, 13221; RV64-NO-ATOMIC-NEXT:    li a2, 53222; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_nand_83223; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3224; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 163225; RV64-NO-ATOMIC-NEXT:    ret3226;3227; RV64-ATOMIC-LABEL: rmw64_nand_seq_cst:3228; RV64-ATOMIC:       # %bb.0:3229; RV64-ATOMIC-NEXT:    addi sp, sp, -163230; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3231; RV64-ATOMIC-NEXT:    li a1, 13232; RV64-ATOMIC-NEXT:    call __sync_fetch_and_nand_83233; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3234; RV64-ATOMIC-NEXT:    addi sp, sp, 163235; RV64-ATOMIC-NEXT:    ret3236;3237; RV64-ATOMIC-TRAILING-LABEL: rmw64_nand_seq_cst:3238; RV64-ATOMIC-TRAILING:       # %bb.0:3239; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -163240; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3241; RV64-ATOMIC-TRAILING-NEXT:    li a1, 13242; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_nand_83243; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3244; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 163245; RV64-ATOMIC-TRAILING-NEXT:    ret3246  %v = atomicrmw nand ptr %p, i64 1 seq_cst, align 83247  ret i64 %v3248}3249 3250define i64 @rmw64_or_seq_cst(ptr %p) nounwind {3251; RV32-LABEL: rmw64_or_seq_cst:3252; RV32:       # %bb.0:3253; RV32-NEXT:    addi sp, sp, -163254; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3255; RV32-NEXT:    li a1, 13256; RV32-NEXT:    li a3, 53257; RV32-NEXT:    li a2, 03258; RV32-NEXT:    call __atomic_fetch_or_83259; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3260; RV32-NEXT:    addi sp, sp, 163261; RV32-NEXT:    ret3262;3263; RV64-NO-ATOMIC-LABEL: rmw64_or_seq_cst:3264; RV64-NO-ATOMIC:       # %bb.0:3265; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -163266; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3267; RV64-NO-ATOMIC-NEXT:    li a1, 13268; RV64-NO-ATOMIC-NEXT:    li a2, 53269; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_or_83270; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3271; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 163272; RV64-NO-ATOMIC-NEXT:    ret3273;3274; RV64-ATOMIC-LABEL: rmw64_or_seq_cst:3275; RV64-ATOMIC:       # %bb.0:3276; RV64-ATOMIC-NEXT:    addi sp, sp, -163277; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3278; RV64-ATOMIC-NEXT:    li a1, 13279; RV64-ATOMIC-NEXT:    call __sync_fetch_and_or_83280; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3281; RV64-ATOMIC-NEXT:    addi sp, sp, 163282; RV64-ATOMIC-NEXT:    ret3283;3284; RV64-ATOMIC-TRAILING-LABEL: rmw64_or_seq_cst:3285; RV64-ATOMIC-TRAILING:       # %bb.0:3286; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -163287; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3288; RV64-ATOMIC-TRAILING-NEXT:    li a1, 13289; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_or_83290; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3291; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 163292; RV64-ATOMIC-TRAILING-NEXT:    ret3293  %v = atomicrmw or ptr %p, i64 1 seq_cst, align 83294  ret i64 %v3295}3296 3297define i64 @rmw64_xor_seq_cst(ptr %p) nounwind {3298; RV32-LABEL: rmw64_xor_seq_cst:3299; RV32:       # %bb.0:3300; RV32-NEXT:    addi sp, sp, -163301; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3302; RV32-NEXT:    li a1, 13303; RV32-NEXT:    li a3, 53304; RV32-NEXT:    li a2, 03305; RV32-NEXT:    call __atomic_fetch_xor_83306; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3307; RV32-NEXT:    addi sp, sp, 163308; RV32-NEXT:    ret3309;3310; RV64-NO-ATOMIC-LABEL: rmw64_xor_seq_cst:3311; RV64-NO-ATOMIC:       # %bb.0:3312; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -163313; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3314; RV64-NO-ATOMIC-NEXT:    li a1, 13315; RV64-NO-ATOMIC-NEXT:    li a2, 53316; RV64-NO-ATOMIC-NEXT:    call __atomic_fetch_xor_83317; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3318; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 163319; RV64-NO-ATOMIC-NEXT:    ret3320;3321; RV64-ATOMIC-LABEL: rmw64_xor_seq_cst:3322; RV64-ATOMIC:       # %bb.0:3323; RV64-ATOMIC-NEXT:    addi sp, sp, -163324; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3325; RV64-ATOMIC-NEXT:    li a1, 13326; RV64-ATOMIC-NEXT:    call __sync_fetch_and_xor_83327; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3328; RV64-ATOMIC-NEXT:    addi sp, sp, 163329; RV64-ATOMIC-NEXT:    ret3330;3331; RV64-ATOMIC-TRAILING-LABEL: rmw64_xor_seq_cst:3332; RV64-ATOMIC-TRAILING:       # %bb.0:3333; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -163334; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3335; RV64-ATOMIC-TRAILING-NEXT:    li a1, 13336; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_xor_83337; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3338; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 163339; RV64-ATOMIC-TRAILING-NEXT:    ret3340  %v = atomicrmw xor ptr %p, i64 1 seq_cst, align 83341  ret i64 %v3342}3343 3344define i64 @rmw64_max_seq_cst(ptr %p) nounwind {3345; RV32-LABEL: rmw64_max_seq_cst:3346; RV32:       # %bb.0:3347; RV32-NEXT:    addi sp, sp, -163348; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3349; RV32-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3350; RV32-NEXT:    mv s0, a03351; RV32-NEXT:    lw a4, 0(a0)3352; RV32-NEXT:    lw a1, 4(a0)3353; RV32-NEXT:    j .LBB49_23354; RV32-NEXT:  .LBB49_1: # %atomicrmw.start3355; RV32-NEXT:    # in Loop: Header=BB49_2 Depth=13356; RV32-NEXT:    neg a3, a03357; RV32-NEXT:    and a3, a3, a13358; RV32-NEXT:    sw a4, 0(sp)3359; RV32-NEXT:    sw a1, 4(sp)3360; RV32-NEXT:    mv a1, sp3361; RV32-NEXT:    li a4, 53362; RV32-NEXT:    li a5, 53363; RV32-NEXT:    mv a0, s03364; RV32-NEXT:    call __atomic_compare_exchange_83365; RV32-NEXT:    lw a4, 0(sp)3366; RV32-NEXT:    lw a1, 4(sp)3367; RV32-NEXT:    bnez a0, .LBB49_63368; RV32-NEXT:  .LBB49_2: # %atomicrmw.start3369; RV32-NEXT:    # =>This Inner Loop Header: Depth=13370; RV32-NEXT:    beqz a1, .LBB49_43371; RV32-NEXT:  # %bb.3: # %atomicrmw.start3372; RV32-NEXT:    # in Loop: Header=BB49_2 Depth=13373; RV32-NEXT:    sgtz a0, a13374; RV32-NEXT:    mv a2, a43375; RV32-NEXT:    bnez a0, .LBB49_13376; RV32-NEXT:    j .LBB49_53377; RV32-NEXT:  .LBB49_4: # in Loop: Header=BB49_2 Depth=13378; RV32-NEXT:    sltiu a0, a4, 23379; RV32-NEXT:    xori a0, a0, 13380; RV32-NEXT:    mv a2, a43381; RV32-NEXT:    bnez a0, .LBB49_13382; RV32-NEXT:  .LBB49_5: # %atomicrmw.start3383; RV32-NEXT:    # in Loop: Header=BB49_2 Depth=13384; RV32-NEXT:    li a2, 13385; RV32-NEXT:    j .LBB49_13386; RV32-NEXT:  .LBB49_6: # %atomicrmw.end3387; RV32-NEXT:    mv a0, a43388; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3389; RV32-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3390; RV32-NEXT:    addi sp, sp, 163391; RV32-NEXT:    ret3392;3393; RV64-NO-ATOMIC-LABEL: rmw64_max_seq_cst:3394; RV64-NO-ATOMIC:       # %bb.0:3395; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -323396; RV64-NO-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill3397; RV64-NO-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill3398; RV64-NO-ATOMIC-NEXT:    mv s0, a03399; RV64-NO-ATOMIC-NEXT:    ld a1, 0(a0)3400; RV64-NO-ATOMIC-NEXT:    j .LBB49_23401; RV64-NO-ATOMIC-NEXT:  .LBB49_1: # %atomicrmw.start3402; RV64-NO-ATOMIC-NEXT:    # in Loop: Header=BB49_2 Depth=13403; RV64-NO-ATOMIC-NEXT:    sd a1, 8(sp)3404; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 83405; RV64-NO-ATOMIC-NEXT:    li a3, 53406; RV64-NO-ATOMIC-NEXT:    li a4, 53407; RV64-NO-ATOMIC-NEXT:    mv a0, s03408; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_83409; RV64-NO-ATOMIC-NEXT:    ld a1, 8(sp)3410; RV64-NO-ATOMIC-NEXT:    bnez a0, .LBB49_43411; RV64-NO-ATOMIC-NEXT:  .LBB49_2: # %atomicrmw.start3412; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=13413; RV64-NO-ATOMIC-NEXT:    mv a2, a13414; RV64-NO-ATOMIC-NEXT:    bgtz a1, .LBB49_13415; RV64-NO-ATOMIC-NEXT:  # %bb.3: # %atomicrmw.start3416; RV64-NO-ATOMIC-NEXT:    # in Loop: Header=BB49_2 Depth=13417; RV64-NO-ATOMIC-NEXT:    li a2, 13418; RV64-NO-ATOMIC-NEXT:    j .LBB49_13419; RV64-NO-ATOMIC-NEXT:  .LBB49_4: # %atomicrmw.end3420; RV64-NO-ATOMIC-NEXT:    mv a0, a13421; RV64-NO-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload3422; RV64-NO-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload3423; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 323424; RV64-NO-ATOMIC-NEXT:    ret3425;3426; RV64-ATOMIC-LABEL: rmw64_max_seq_cst:3427; RV64-ATOMIC:       # %bb.0:3428; RV64-ATOMIC-NEXT:    addi sp, sp, -163429; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3430; RV64-ATOMIC-NEXT:    li a1, 13431; RV64-ATOMIC-NEXT:    call __sync_fetch_and_max_83432; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3433; RV64-ATOMIC-NEXT:    addi sp, sp, 163434; RV64-ATOMIC-NEXT:    ret3435;3436; RV64-ATOMIC-TRAILING-LABEL: rmw64_max_seq_cst:3437; RV64-ATOMIC-TRAILING:       # %bb.0:3438; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -163439; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3440; RV64-ATOMIC-TRAILING-NEXT:    li a1, 13441; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_max_83442; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3443; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 163444; RV64-ATOMIC-TRAILING-NEXT:    ret3445  %v = atomicrmw max ptr %p, i64 1 seq_cst, align 83446  ret i64 %v3447}3448 3449define i64 @rmw64_min_seq_cst(ptr %p) nounwind {3450; RV32-LABEL: rmw64_min_seq_cst:3451; RV32:       # %bb.0:3452; RV32-NEXT:    addi sp, sp, -163453; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3454; RV32-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3455; RV32-NEXT:    mv s0, a03456; RV32-NEXT:    lw a4, 0(a0)3457; RV32-NEXT:    lw a1, 4(a0)3458; RV32-NEXT:    j .LBB50_23459; RV32-NEXT:  .LBB50_1: # %atomicrmw.start3460; RV32-NEXT:    # in Loop: Header=BB50_2 Depth=13461; RV32-NEXT:    neg a3, a03462; RV32-NEXT:    and a3, a3, a13463; RV32-NEXT:    sw a4, 0(sp)3464; RV32-NEXT:    sw a1, 4(sp)3465; RV32-NEXT:    mv a1, sp3466; RV32-NEXT:    li a4, 53467; RV32-NEXT:    li a5, 53468; RV32-NEXT:    mv a0, s03469; RV32-NEXT:    call __atomic_compare_exchange_83470; RV32-NEXT:    lw a4, 0(sp)3471; RV32-NEXT:    lw a1, 4(sp)3472; RV32-NEXT:    bnez a0, .LBB50_63473; RV32-NEXT:  .LBB50_2: # %atomicrmw.start3474; RV32-NEXT:    # =>This Inner Loop Header: Depth=13475; RV32-NEXT:    beqz a1, .LBB50_43476; RV32-NEXT:  # %bb.3: # %atomicrmw.start3477; RV32-NEXT:    # in Loop: Header=BB50_2 Depth=13478; RV32-NEXT:    srli a0, a1, 313479; RV32-NEXT:    mv a2, a43480; RV32-NEXT:    bnez a0, .LBB50_13481; RV32-NEXT:    j .LBB50_53482; RV32-NEXT:  .LBB50_4: # in Loop: Header=BB50_2 Depth=13483; RV32-NEXT:    sltiu a0, a4, 23484; RV32-NEXT:    mv a2, a43485; RV32-NEXT:    bnez a0, .LBB50_13486; RV32-NEXT:  .LBB50_5: # %atomicrmw.start3487; RV32-NEXT:    # in Loop: Header=BB50_2 Depth=13488; RV32-NEXT:    li a2, 13489; RV32-NEXT:    j .LBB50_13490; RV32-NEXT:  .LBB50_6: # %atomicrmw.end3491; RV32-NEXT:    mv a0, a43492; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3493; RV32-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3494; RV32-NEXT:    addi sp, sp, 163495; RV32-NEXT:    ret3496;3497; RV64-NO-ATOMIC-LABEL: rmw64_min_seq_cst:3498; RV64-NO-ATOMIC:       # %bb.0:3499; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -323500; RV64-NO-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill3501; RV64-NO-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill3502; RV64-NO-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill3503; RV64-NO-ATOMIC-NEXT:    mv s0, a03504; RV64-NO-ATOMIC-NEXT:    ld a1, 0(a0)3505; RV64-NO-ATOMIC-NEXT:    li s1, 23506; RV64-NO-ATOMIC-NEXT:    j .LBB50_23507; RV64-NO-ATOMIC-NEXT:  .LBB50_1: # %atomicrmw.start3508; RV64-NO-ATOMIC-NEXT:    # in Loop: Header=BB50_2 Depth=13509; RV64-NO-ATOMIC-NEXT:    sd a1, 0(sp)3510; RV64-NO-ATOMIC-NEXT:    mv a1, sp3511; RV64-NO-ATOMIC-NEXT:    li a3, 53512; RV64-NO-ATOMIC-NEXT:    li a4, 53513; RV64-NO-ATOMIC-NEXT:    mv a0, s03514; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_83515; RV64-NO-ATOMIC-NEXT:    ld a1, 0(sp)3516; RV64-NO-ATOMIC-NEXT:    bnez a0, .LBB50_43517; RV64-NO-ATOMIC-NEXT:  .LBB50_2: # %atomicrmw.start3518; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=13519; RV64-NO-ATOMIC-NEXT:    mv a2, a13520; RV64-NO-ATOMIC-NEXT:    blt a1, s1, .LBB50_13521; RV64-NO-ATOMIC-NEXT:  # %bb.3: # %atomicrmw.start3522; RV64-NO-ATOMIC-NEXT:    # in Loop: Header=BB50_2 Depth=13523; RV64-NO-ATOMIC-NEXT:    li a2, 13524; RV64-NO-ATOMIC-NEXT:    j .LBB50_13525; RV64-NO-ATOMIC-NEXT:  .LBB50_4: # %atomicrmw.end3526; RV64-NO-ATOMIC-NEXT:    mv a0, a13527; RV64-NO-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload3528; RV64-NO-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload3529; RV64-NO-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload3530; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 323531; RV64-NO-ATOMIC-NEXT:    ret3532;3533; RV64-ATOMIC-LABEL: rmw64_min_seq_cst:3534; RV64-ATOMIC:       # %bb.0:3535; RV64-ATOMIC-NEXT:    addi sp, sp, -163536; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3537; RV64-ATOMIC-NEXT:    li a1, 13538; RV64-ATOMIC-NEXT:    call __sync_fetch_and_min_83539; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3540; RV64-ATOMIC-NEXT:    addi sp, sp, 163541; RV64-ATOMIC-NEXT:    ret3542;3543; RV64-ATOMIC-TRAILING-LABEL: rmw64_min_seq_cst:3544; RV64-ATOMIC-TRAILING:       # %bb.0:3545; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -163546; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3547; RV64-ATOMIC-TRAILING-NEXT:    li a1, 13548; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_min_83549; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3550; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 163551; RV64-ATOMIC-TRAILING-NEXT:    ret3552  %v = atomicrmw min ptr %p, i64 1 seq_cst, align 83553  ret i64 %v3554}3555 3556define i64 @rmw64_umax_seq_cst(ptr %p) nounwind {3557; RV32-LABEL: rmw64_umax_seq_cst:3558; RV32:       # %bb.0:3559; RV32-NEXT:    addi sp, sp, -163560; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3561; RV32-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3562; RV32-NEXT:    mv s0, a03563; RV32-NEXT:    lw a4, 0(a0)3564; RV32-NEXT:    lw a1, 4(a0)3565; RV32-NEXT:    j .LBB51_23566; RV32-NEXT:  .LBB51_1: # %atomicrmw.start3567; RV32-NEXT:    # in Loop: Header=BB51_2 Depth=13568; RV32-NEXT:    neg a3, a03569; RV32-NEXT:    and a3, a3, a13570; RV32-NEXT:    sw a4, 0(sp)3571; RV32-NEXT:    sw a1, 4(sp)3572; RV32-NEXT:    mv a1, sp3573; RV32-NEXT:    li a4, 53574; RV32-NEXT:    li a5, 53575; RV32-NEXT:    mv a0, s03576; RV32-NEXT:    call __atomic_compare_exchange_83577; RV32-NEXT:    lw a4, 0(sp)3578; RV32-NEXT:    lw a1, 4(sp)3579; RV32-NEXT:    bnez a0, .LBB51_43580; RV32-NEXT:  .LBB51_2: # %atomicrmw.start3581; RV32-NEXT:    # =>This Inner Loop Header: Depth=13582; RV32-NEXT:    snez a0, a13583; RV32-NEXT:    sltiu a2, a4, 23584; RV32-NEXT:    xori a2, a2, 13585; RV32-NEXT:    or a0, a2, a03586; RV32-NEXT:    mv a2, a43587; RV32-NEXT:    bnez a0, .LBB51_13588; RV32-NEXT:  # %bb.3: # %atomicrmw.start3589; RV32-NEXT:    # in Loop: Header=BB51_2 Depth=13590; RV32-NEXT:    li a2, 13591; RV32-NEXT:    j .LBB51_13592; RV32-NEXT:  .LBB51_4: # %atomicrmw.end3593; RV32-NEXT:    mv a0, a43594; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3595; RV32-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3596; RV32-NEXT:    addi sp, sp, 163597; RV32-NEXT:    ret3598;3599; RV64-NO-ATOMIC-LABEL: rmw64_umax_seq_cst:3600; RV64-NO-ATOMIC:       # %bb.0:3601; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -323602; RV64-NO-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill3603; RV64-NO-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill3604; RV64-NO-ATOMIC-NEXT:    mv s0, a03605; RV64-NO-ATOMIC-NEXT:    ld a1, 0(a0)3606; RV64-NO-ATOMIC-NEXT:  .LBB51_1: # %atomicrmw.start3607; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=13608; RV64-NO-ATOMIC-NEXT:    seqz a2, a13609; RV64-NO-ATOMIC-NEXT:    add a2, a1, a23610; RV64-NO-ATOMIC-NEXT:    sd a1, 8(sp)3611; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 83612; RV64-NO-ATOMIC-NEXT:    li a3, 53613; RV64-NO-ATOMIC-NEXT:    li a4, 53614; RV64-NO-ATOMIC-NEXT:    mv a0, s03615; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_83616; RV64-NO-ATOMIC-NEXT:    ld a1, 8(sp)3617; RV64-NO-ATOMIC-NEXT:    beqz a0, .LBB51_13618; RV64-NO-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end3619; RV64-NO-ATOMIC-NEXT:    mv a0, a13620; RV64-NO-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload3621; RV64-NO-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload3622; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 323623; RV64-NO-ATOMIC-NEXT:    ret3624;3625; RV64-ATOMIC-LABEL: rmw64_umax_seq_cst:3626; RV64-ATOMIC:       # %bb.0:3627; RV64-ATOMIC-NEXT:    addi sp, sp, -163628; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3629; RV64-ATOMIC-NEXT:    li a1, 13630; RV64-ATOMIC-NEXT:    call __sync_fetch_and_umax_83631; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3632; RV64-ATOMIC-NEXT:    addi sp, sp, 163633; RV64-ATOMIC-NEXT:    ret3634;3635; RV64-ATOMIC-TRAILING-LABEL: rmw64_umax_seq_cst:3636; RV64-ATOMIC-TRAILING:       # %bb.0:3637; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -163638; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3639; RV64-ATOMIC-TRAILING-NEXT:    li a1, 13640; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_umax_83641; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3642; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 163643; RV64-ATOMIC-TRAILING-NEXT:    ret3644  %v = atomicrmw umax ptr %p, i64 1 seq_cst, align 83645  ret i64 %v3646}3647 3648define i64 @rmw64_umin_seq_cst(ptr %p) nounwind {3649; RV32-LABEL: rmw64_umin_seq_cst:3650; RV32:       # %bb.0:3651; RV32-NEXT:    addi sp, sp, -163652; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3653; RV32-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3654; RV32-NEXT:    mv s0, a03655; RV32-NEXT:    lw a4, 0(a0)3656; RV32-NEXT:    lw a1, 4(a0)3657; RV32-NEXT:    j .LBB52_23658; RV32-NEXT:  .LBB52_1: # %atomicrmw.start3659; RV32-NEXT:    # in Loop: Header=BB52_2 Depth=13660; RV32-NEXT:    neg a3, a03661; RV32-NEXT:    and a3, a3, a13662; RV32-NEXT:    sw a4, 0(sp)3663; RV32-NEXT:    sw a1, 4(sp)3664; RV32-NEXT:    mv a1, sp3665; RV32-NEXT:    li a4, 53666; RV32-NEXT:    li a5, 53667; RV32-NEXT:    mv a0, s03668; RV32-NEXT:    call __atomic_compare_exchange_83669; RV32-NEXT:    lw a4, 0(sp)3670; RV32-NEXT:    lw a1, 4(sp)3671; RV32-NEXT:    bnez a0, .LBB52_43672; RV32-NEXT:  .LBB52_2: # %atomicrmw.start3673; RV32-NEXT:    # =>This Inner Loop Header: Depth=13674; RV32-NEXT:    sltiu a0, a4, 23675; RV32-NEXT:    seqz a2, a13676; RV32-NEXT:    and a0, a2, a03677; RV32-NEXT:    mv a2, a43678; RV32-NEXT:    bnez a0, .LBB52_13679; RV32-NEXT:  # %bb.3: # %atomicrmw.start3680; RV32-NEXT:    # in Loop: Header=BB52_2 Depth=13681; RV32-NEXT:    li a2, 13682; RV32-NEXT:    j .LBB52_13683; RV32-NEXT:  .LBB52_4: # %atomicrmw.end3684; RV32-NEXT:    mv a0, a43685; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3686; RV32-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3687; RV32-NEXT:    addi sp, sp, 163688; RV32-NEXT:    ret3689;3690; RV64-NO-ATOMIC-LABEL: rmw64_umin_seq_cst:3691; RV64-NO-ATOMIC:       # %bb.0:3692; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -323693; RV64-NO-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill3694; RV64-NO-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill3695; RV64-NO-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill3696; RV64-NO-ATOMIC-NEXT:    mv s0, a03697; RV64-NO-ATOMIC-NEXT:    ld a1, 0(a0)3698; RV64-NO-ATOMIC-NEXT:    li s1, 23699; RV64-NO-ATOMIC-NEXT:    j .LBB52_23700; RV64-NO-ATOMIC-NEXT:  .LBB52_1: # %atomicrmw.start3701; RV64-NO-ATOMIC-NEXT:    # in Loop: Header=BB52_2 Depth=13702; RV64-NO-ATOMIC-NEXT:    sd a1, 0(sp)3703; RV64-NO-ATOMIC-NEXT:    mv a1, sp3704; RV64-NO-ATOMIC-NEXT:    li a3, 53705; RV64-NO-ATOMIC-NEXT:    li a4, 53706; RV64-NO-ATOMIC-NEXT:    mv a0, s03707; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_83708; RV64-NO-ATOMIC-NEXT:    ld a1, 0(sp)3709; RV64-NO-ATOMIC-NEXT:    bnez a0, .LBB52_43710; RV64-NO-ATOMIC-NEXT:  .LBB52_2: # %atomicrmw.start3711; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=13712; RV64-NO-ATOMIC-NEXT:    mv a2, a13713; RV64-NO-ATOMIC-NEXT:    bltu a1, s1, .LBB52_13714; RV64-NO-ATOMIC-NEXT:  # %bb.3: # %atomicrmw.start3715; RV64-NO-ATOMIC-NEXT:    # in Loop: Header=BB52_2 Depth=13716; RV64-NO-ATOMIC-NEXT:    li a2, 13717; RV64-NO-ATOMIC-NEXT:    j .LBB52_13718; RV64-NO-ATOMIC-NEXT:  .LBB52_4: # %atomicrmw.end3719; RV64-NO-ATOMIC-NEXT:    mv a0, a13720; RV64-NO-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload3721; RV64-NO-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload3722; RV64-NO-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload3723; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 323724; RV64-NO-ATOMIC-NEXT:    ret3725;3726; RV64-ATOMIC-LABEL: rmw64_umin_seq_cst:3727; RV64-ATOMIC:       # %bb.0:3728; RV64-ATOMIC-NEXT:    addi sp, sp, -163729; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3730; RV64-ATOMIC-NEXT:    li a1, 13731; RV64-ATOMIC-NEXT:    call __sync_fetch_and_umin_83732; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3733; RV64-ATOMIC-NEXT:    addi sp, sp, 163734; RV64-ATOMIC-NEXT:    ret3735;3736; RV64-ATOMIC-TRAILING-LABEL: rmw64_umin_seq_cst:3737; RV64-ATOMIC-TRAILING:       # %bb.0:3738; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -163739; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3740; RV64-ATOMIC-TRAILING-NEXT:    li a1, 13741; RV64-ATOMIC-TRAILING-NEXT:    call __sync_fetch_and_umin_83742; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3743; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 163744; RV64-ATOMIC-TRAILING-NEXT:    ret3745  %v = atomicrmw umin ptr %p, i64 1 seq_cst, align 83746  ret i64 %v3747}3748 3749define i64 @rmw64_xchg_seq_cst(ptr %p) nounwind {3750; RV32-LABEL: rmw64_xchg_seq_cst:3751; RV32:       # %bb.0:3752; RV32-NEXT:    addi sp, sp, -163753; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3754; RV32-NEXT:    li a1, 13755; RV32-NEXT:    li a3, 53756; RV32-NEXT:    li a2, 03757; RV32-NEXT:    call __atomic_exchange_83758; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3759; RV32-NEXT:    addi sp, sp, 163760; RV32-NEXT:    ret3761;3762; RV64-NO-ATOMIC-LABEL: rmw64_xchg_seq_cst:3763; RV64-NO-ATOMIC:       # %bb.0:3764; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -163765; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3766; RV64-NO-ATOMIC-NEXT:    li a1, 13767; RV64-NO-ATOMIC-NEXT:    li a2, 53768; RV64-NO-ATOMIC-NEXT:    call __atomic_exchange_83769; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3770; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 163771; RV64-NO-ATOMIC-NEXT:    ret3772;3773; RV64-ATOMIC-LABEL: rmw64_xchg_seq_cst:3774; RV64-ATOMIC:       # %bb.0:3775; RV64-ATOMIC-NEXT:    addi sp, sp, -163776; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3777; RV64-ATOMIC-NEXT:    li a1, 13778; RV64-ATOMIC-NEXT:    call __sync_lock_test_and_set_83779; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3780; RV64-ATOMIC-NEXT:    addi sp, sp, 163781; RV64-ATOMIC-NEXT:    ret3782;3783; RV64-ATOMIC-TRAILING-LABEL: rmw64_xchg_seq_cst:3784; RV64-ATOMIC-TRAILING:       # %bb.0:3785; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -163786; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill3787; RV64-ATOMIC-TRAILING-NEXT:    li a1, 13788; RV64-ATOMIC-TRAILING-NEXT:    call __sync_lock_test_and_set_83789; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload3790; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 163791; RV64-ATOMIC-TRAILING-NEXT:    ret3792  %v = atomicrmw xchg ptr %p, i64 1 seq_cst, align 83793  ret i64 %v3794}3795 3796define double @rmw64_fadd_seq_cst(ptr %p) nounwind {3797; RV32-LABEL: rmw64_fadd_seq_cst:3798; RV32:       # %bb.0:3799; RV32-NEXT:    addi sp, sp, -323800; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill3801; RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill3802; RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill3803; RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill3804; RV32-NEXT:    mv s0, a03805; RV32-NEXT:    lw s1, 0(a0)3806; RV32-NEXT:    lw s2, 4(a0)3807; RV32-NEXT:  .LBB54_1: # %atomicrmw.start3808; RV32-NEXT:    # =>This Inner Loop Header: Depth=13809; RV32-NEXT:    lui a3, 2618883810; RV32-NEXT:    mv a0, s13811; RV32-NEXT:    mv a1, s23812; RV32-NEXT:    li a2, 03813; RV32-NEXT:    call __adddf33814; RV32-NEXT:    mv a2, a03815; RV32-NEXT:    mv a3, a13816; RV32-NEXT:    sw s1, 8(sp)3817; RV32-NEXT:    sw s2, 12(sp)3818; RV32-NEXT:    addi a1, sp, 83819; RV32-NEXT:    li a4, 53820; RV32-NEXT:    li a5, 53821; RV32-NEXT:    mv a0, s03822; RV32-NEXT:    call __atomic_compare_exchange_83823; RV32-NEXT:    lw s1, 8(sp)3824; RV32-NEXT:    lw s2, 12(sp)3825; RV32-NEXT:    beqz a0, .LBB54_13826; RV32-NEXT:  # %bb.2: # %atomicrmw.end3827; RV32-NEXT:    mv a0, s13828; RV32-NEXT:    mv a1, s23829; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload3830; RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload3831; RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload3832; RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload3833; RV32-NEXT:    addi sp, sp, 323834; RV32-NEXT:    ret3835;3836; RV64-NO-ATOMIC-LABEL: rmw64_fadd_seq_cst:3837; RV64-NO-ATOMIC:       # %bb.0:3838; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -483839; RV64-NO-ATOMIC-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill3840; RV64-NO-ATOMIC-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill3841; RV64-NO-ATOMIC-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill3842; RV64-NO-ATOMIC-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill3843; RV64-NO-ATOMIC-NEXT:    mv s0, a03844; RV64-NO-ATOMIC-NEXT:    ld s2, 0(a0)3845; RV64-NO-ATOMIC-NEXT:    li s1, 10233846; RV64-NO-ATOMIC-NEXT:    slli s1, s1, 523847; RV64-NO-ATOMIC-NEXT:  .LBB54_1: # %atomicrmw.start3848; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=13849; RV64-NO-ATOMIC-NEXT:    mv a0, s23850; RV64-NO-ATOMIC-NEXT:    mv a1, s13851; RV64-NO-ATOMIC-NEXT:    call __adddf33852; RV64-NO-ATOMIC-NEXT:    mv a2, a03853; RV64-NO-ATOMIC-NEXT:    sd s2, 8(sp)3854; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 83855; RV64-NO-ATOMIC-NEXT:    li a3, 53856; RV64-NO-ATOMIC-NEXT:    li a4, 53857; RV64-NO-ATOMIC-NEXT:    mv a0, s03858; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_83859; RV64-NO-ATOMIC-NEXT:    ld s2, 8(sp)3860; RV64-NO-ATOMIC-NEXT:    beqz a0, .LBB54_13861; RV64-NO-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end3862; RV64-NO-ATOMIC-NEXT:    mv a0, s23863; RV64-NO-ATOMIC-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload3864; RV64-NO-ATOMIC-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload3865; RV64-NO-ATOMIC-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload3866; RV64-NO-ATOMIC-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload3867; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 483868; RV64-NO-ATOMIC-NEXT:    ret3869;3870; RV64-ATOMIC-LABEL: rmw64_fadd_seq_cst:3871; RV64-ATOMIC:       # %bb.0:3872; RV64-ATOMIC-NEXT:    addi sp, sp, -323873; RV64-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill3874; RV64-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill3875; RV64-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill3876; RV64-ATOMIC-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill3877; RV64-ATOMIC-NEXT:    mv s0, a03878; RV64-ATOMIC-NEXT:    ld a0, 0(a0)3879; RV64-ATOMIC-NEXT:    li s1, 10233880; RV64-ATOMIC-NEXT:    slli s1, s1, 523881; RV64-ATOMIC-NEXT:  .LBB54_1: # %atomicrmw.start3882; RV64-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=13883; RV64-ATOMIC-NEXT:    mv s2, a03884; RV64-ATOMIC-NEXT:    mv a1, s13885; RV64-ATOMIC-NEXT:    call __adddf33886; RV64-ATOMIC-NEXT:    mv a2, a03887; RV64-ATOMIC-NEXT:    mv a0, s03888; RV64-ATOMIC-NEXT:    mv a1, s23889; RV64-ATOMIC-NEXT:    call __sync_val_compare_and_swap_83890; RV64-ATOMIC-NEXT:    bne a0, s2, .LBB54_13891; RV64-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end3892; RV64-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload3893; RV64-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload3894; RV64-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload3895; RV64-ATOMIC-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload3896; RV64-ATOMIC-NEXT:    addi sp, sp, 323897; RV64-ATOMIC-NEXT:    ret3898;3899; RV64-ATOMIC-TRAILING-LABEL: rmw64_fadd_seq_cst:3900; RV64-ATOMIC-TRAILING:       # %bb.0:3901; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -323902; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill3903; RV64-ATOMIC-TRAILING-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill3904; RV64-ATOMIC-TRAILING-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill3905; RV64-ATOMIC-TRAILING-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill3906; RV64-ATOMIC-TRAILING-NEXT:    mv s0, a03907; RV64-ATOMIC-TRAILING-NEXT:    ld a0, 0(a0)3908; RV64-ATOMIC-TRAILING-NEXT:    li s1, 10233909; RV64-ATOMIC-TRAILING-NEXT:    slli s1, s1, 523910; RV64-ATOMIC-TRAILING-NEXT:  .LBB54_1: # %atomicrmw.start3911; RV64-ATOMIC-TRAILING-NEXT:    # =>This Inner Loop Header: Depth=13912; RV64-ATOMIC-TRAILING-NEXT:    mv s2, a03913; RV64-ATOMIC-TRAILING-NEXT:    mv a1, s13914; RV64-ATOMIC-TRAILING-NEXT:    call __adddf33915; RV64-ATOMIC-TRAILING-NEXT:    mv a2, a03916; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s03917; RV64-ATOMIC-TRAILING-NEXT:    mv a1, s23918; RV64-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_83919; RV64-ATOMIC-TRAILING-NEXT:    bne a0, s2, .LBB54_13920; RV64-ATOMIC-TRAILING-NEXT:  # %bb.2: # %atomicrmw.end3921; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload3922; RV64-ATOMIC-TRAILING-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload3923; RV64-ATOMIC-TRAILING-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload3924; RV64-ATOMIC-TRAILING-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload3925; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 323926; RV64-ATOMIC-TRAILING-NEXT:    ret3927  %v = atomicrmw fadd ptr %p, double 1.0 seq_cst, align 83928  ret double %v3929}3930 3931define double @rmw64_fsub_seq_cst(ptr %p) nounwind {3932; RV32-LABEL: rmw64_fsub_seq_cst:3933; RV32:       # %bb.0:3934; RV32-NEXT:    addi sp, sp, -323935; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill3936; RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill3937; RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill3938; RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill3939; RV32-NEXT:    mv s0, a03940; RV32-NEXT:    lw s1, 0(a0)3941; RV32-NEXT:    lw s2, 4(a0)3942; RV32-NEXT:  .LBB55_1: # %atomicrmw.start3943; RV32-NEXT:    # =>This Inner Loop Header: Depth=13944; RV32-NEXT:    lui a3, 7861763945; RV32-NEXT:    mv a0, s13946; RV32-NEXT:    mv a1, s23947; RV32-NEXT:    li a2, 03948; RV32-NEXT:    call __adddf33949; RV32-NEXT:    mv a2, a03950; RV32-NEXT:    mv a3, a13951; RV32-NEXT:    sw s1, 8(sp)3952; RV32-NEXT:    sw s2, 12(sp)3953; RV32-NEXT:    addi a1, sp, 83954; RV32-NEXT:    li a4, 53955; RV32-NEXT:    li a5, 53956; RV32-NEXT:    mv a0, s03957; RV32-NEXT:    call __atomic_compare_exchange_83958; RV32-NEXT:    lw s1, 8(sp)3959; RV32-NEXT:    lw s2, 12(sp)3960; RV32-NEXT:    beqz a0, .LBB55_13961; RV32-NEXT:  # %bb.2: # %atomicrmw.end3962; RV32-NEXT:    mv a0, s13963; RV32-NEXT:    mv a1, s23964; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload3965; RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload3966; RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload3967; RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload3968; RV32-NEXT:    addi sp, sp, 323969; RV32-NEXT:    ret3970;3971; RV64-NO-ATOMIC-LABEL: rmw64_fsub_seq_cst:3972; RV64-NO-ATOMIC:       # %bb.0:3973; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -483974; RV64-NO-ATOMIC-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill3975; RV64-NO-ATOMIC-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill3976; RV64-NO-ATOMIC-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill3977; RV64-NO-ATOMIC-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill3978; RV64-NO-ATOMIC-NEXT:    mv s0, a03979; RV64-NO-ATOMIC-NEXT:    ld s2, 0(a0)3980; RV64-NO-ATOMIC-NEXT:    li s1, -10253981; RV64-NO-ATOMIC-NEXT:    slli s1, s1, 523982; RV64-NO-ATOMIC-NEXT:  .LBB55_1: # %atomicrmw.start3983; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=13984; RV64-NO-ATOMIC-NEXT:    mv a0, s23985; RV64-NO-ATOMIC-NEXT:    mv a1, s13986; RV64-NO-ATOMIC-NEXT:    call __adddf33987; RV64-NO-ATOMIC-NEXT:    mv a2, a03988; RV64-NO-ATOMIC-NEXT:    sd s2, 8(sp)3989; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 83990; RV64-NO-ATOMIC-NEXT:    li a3, 53991; RV64-NO-ATOMIC-NEXT:    li a4, 53992; RV64-NO-ATOMIC-NEXT:    mv a0, s03993; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_83994; RV64-NO-ATOMIC-NEXT:    ld s2, 8(sp)3995; RV64-NO-ATOMIC-NEXT:    beqz a0, .LBB55_13996; RV64-NO-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end3997; RV64-NO-ATOMIC-NEXT:    mv a0, s23998; RV64-NO-ATOMIC-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload3999; RV64-NO-ATOMIC-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload4000; RV64-NO-ATOMIC-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload4001; RV64-NO-ATOMIC-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload4002; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 484003; RV64-NO-ATOMIC-NEXT:    ret4004;4005; RV64-ATOMIC-LABEL: rmw64_fsub_seq_cst:4006; RV64-ATOMIC:       # %bb.0:4007; RV64-ATOMIC-NEXT:    addi sp, sp, -324008; RV64-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill4009; RV64-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill4010; RV64-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill4011; RV64-ATOMIC-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill4012; RV64-ATOMIC-NEXT:    mv s0, a04013; RV64-ATOMIC-NEXT:    ld a0, 0(a0)4014; RV64-ATOMIC-NEXT:    li s1, -10254015; RV64-ATOMIC-NEXT:    slli s1, s1, 524016; RV64-ATOMIC-NEXT:  .LBB55_1: # %atomicrmw.start4017; RV64-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=14018; RV64-ATOMIC-NEXT:    mv s2, a04019; RV64-ATOMIC-NEXT:    mv a1, s14020; RV64-ATOMIC-NEXT:    call __adddf34021; RV64-ATOMIC-NEXT:    mv a2, a04022; RV64-ATOMIC-NEXT:    mv a0, s04023; RV64-ATOMIC-NEXT:    mv a1, s24024; RV64-ATOMIC-NEXT:    call __sync_val_compare_and_swap_84025; RV64-ATOMIC-NEXT:    bne a0, s2, .LBB55_14026; RV64-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end4027; RV64-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload4028; RV64-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload4029; RV64-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload4030; RV64-ATOMIC-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload4031; RV64-ATOMIC-NEXT:    addi sp, sp, 324032; RV64-ATOMIC-NEXT:    ret4033;4034; RV64-ATOMIC-TRAILING-LABEL: rmw64_fsub_seq_cst:4035; RV64-ATOMIC-TRAILING:       # %bb.0:4036; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -324037; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill4038; RV64-ATOMIC-TRAILING-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill4039; RV64-ATOMIC-TRAILING-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill4040; RV64-ATOMIC-TRAILING-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill4041; RV64-ATOMIC-TRAILING-NEXT:    mv s0, a04042; RV64-ATOMIC-TRAILING-NEXT:    ld a0, 0(a0)4043; RV64-ATOMIC-TRAILING-NEXT:    li s1, -10254044; RV64-ATOMIC-TRAILING-NEXT:    slli s1, s1, 524045; RV64-ATOMIC-TRAILING-NEXT:  .LBB55_1: # %atomicrmw.start4046; RV64-ATOMIC-TRAILING-NEXT:    # =>This Inner Loop Header: Depth=14047; RV64-ATOMIC-TRAILING-NEXT:    mv s2, a04048; RV64-ATOMIC-TRAILING-NEXT:    mv a1, s14049; RV64-ATOMIC-TRAILING-NEXT:    call __adddf34050; RV64-ATOMIC-TRAILING-NEXT:    mv a2, a04051; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s04052; RV64-ATOMIC-TRAILING-NEXT:    mv a1, s24053; RV64-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_84054; RV64-ATOMIC-TRAILING-NEXT:    bne a0, s2, .LBB55_14055; RV64-ATOMIC-TRAILING-NEXT:  # %bb.2: # %atomicrmw.end4056; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload4057; RV64-ATOMIC-TRAILING-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload4058; RV64-ATOMIC-TRAILING-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload4059; RV64-ATOMIC-TRAILING-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload4060; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 324061; RV64-ATOMIC-TRAILING-NEXT:    ret4062  %v = atomicrmw fsub ptr %p, double 1.0 seq_cst, align 84063  ret double %v4064}4065 4066define double @rmw64_fmin_seq_cst(ptr %p) nounwind {4067; RV32-LABEL: rmw64_fmin_seq_cst:4068; RV32:       # %bb.0:4069; RV32-NEXT:    addi sp, sp, -324070; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill4071; RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill4072; RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill4073; RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill4074; RV32-NEXT:    mv s0, a04075; RV32-NEXT:    lw s1, 0(a0)4076; RV32-NEXT:    lw s2, 4(a0)4077; RV32-NEXT:  .LBB56_1: # %atomicrmw.start4078; RV32-NEXT:    # =>This Inner Loop Header: Depth=14079; RV32-NEXT:    lui a3, 2618884080; RV32-NEXT:    mv a0, s14081; RV32-NEXT:    mv a1, s24082; RV32-NEXT:    li a2, 04083; RV32-NEXT:    call fmin4084; RV32-NEXT:    mv a2, a04085; RV32-NEXT:    mv a3, a14086; RV32-NEXT:    sw s1, 8(sp)4087; RV32-NEXT:    sw s2, 12(sp)4088; RV32-NEXT:    addi a1, sp, 84089; RV32-NEXT:    li a4, 54090; RV32-NEXT:    li a5, 54091; RV32-NEXT:    mv a0, s04092; RV32-NEXT:    call __atomic_compare_exchange_84093; RV32-NEXT:    lw s1, 8(sp)4094; RV32-NEXT:    lw s2, 12(sp)4095; RV32-NEXT:    beqz a0, .LBB56_14096; RV32-NEXT:  # %bb.2: # %atomicrmw.end4097; RV32-NEXT:    mv a0, s14098; RV32-NEXT:    mv a1, s24099; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload4100; RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload4101; RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload4102; RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload4103; RV32-NEXT:    addi sp, sp, 324104; RV32-NEXT:    ret4105;4106; RV64-NO-ATOMIC-LABEL: rmw64_fmin_seq_cst:4107; RV64-NO-ATOMIC:       # %bb.0:4108; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -484109; RV64-NO-ATOMIC-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill4110; RV64-NO-ATOMIC-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill4111; RV64-NO-ATOMIC-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill4112; RV64-NO-ATOMIC-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill4113; RV64-NO-ATOMIC-NEXT:    mv s0, a04114; RV64-NO-ATOMIC-NEXT:    ld s2, 0(a0)4115; RV64-NO-ATOMIC-NEXT:    li s1, 10234116; RV64-NO-ATOMIC-NEXT:    slli s1, s1, 524117; RV64-NO-ATOMIC-NEXT:  .LBB56_1: # %atomicrmw.start4118; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=14119; RV64-NO-ATOMIC-NEXT:    mv a0, s24120; RV64-NO-ATOMIC-NEXT:    mv a1, s14121; RV64-NO-ATOMIC-NEXT:    call fmin4122; RV64-NO-ATOMIC-NEXT:    mv a2, a04123; RV64-NO-ATOMIC-NEXT:    sd s2, 8(sp)4124; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 84125; RV64-NO-ATOMIC-NEXT:    li a3, 54126; RV64-NO-ATOMIC-NEXT:    li a4, 54127; RV64-NO-ATOMIC-NEXT:    mv a0, s04128; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_84129; RV64-NO-ATOMIC-NEXT:    ld s2, 8(sp)4130; RV64-NO-ATOMIC-NEXT:    beqz a0, .LBB56_14131; RV64-NO-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end4132; RV64-NO-ATOMIC-NEXT:    mv a0, s24133; RV64-NO-ATOMIC-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload4134; RV64-NO-ATOMIC-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload4135; RV64-NO-ATOMIC-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload4136; RV64-NO-ATOMIC-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload4137; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 484138; RV64-NO-ATOMIC-NEXT:    ret4139;4140; RV64-ATOMIC-LABEL: rmw64_fmin_seq_cst:4141; RV64-ATOMIC:       # %bb.0:4142; RV64-ATOMIC-NEXT:    addi sp, sp, -324143; RV64-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill4144; RV64-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill4145; RV64-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill4146; RV64-ATOMIC-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill4147; RV64-ATOMIC-NEXT:    mv s0, a04148; RV64-ATOMIC-NEXT:    ld a0, 0(a0)4149; RV64-ATOMIC-NEXT:    li s1, 10234150; RV64-ATOMIC-NEXT:    slli s1, s1, 524151; RV64-ATOMIC-NEXT:  .LBB56_1: # %atomicrmw.start4152; RV64-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=14153; RV64-ATOMIC-NEXT:    mv s2, a04154; RV64-ATOMIC-NEXT:    mv a1, s14155; RV64-ATOMIC-NEXT:    call fmin4156; RV64-ATOMIC-NEXT:    mv a2, a04157; RV64-ATOMIC-NEXT:    mv a0, s04158; RV64-ATOMIC-NEXT:    mv a1, s24159; RV64-ATOMIC-NEXT:    call __sync_val_compare_and_swap_84160; RV64-ATOMIC-NEXT:    bne a0, s2, .LBB56_14161; RV64-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end4162; RV64-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload4163; RV64-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload4164; RV64-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload4165; RV64-ATOMIC-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload4166; RV64-ATOMIC-NEXT:    addi sp, sp, 324167; RV64-ATOMIC-NEXT:    ret4168;4169; RV64-ATOMIC-TRAILING-LABEL: rmw64_fmin_seq_cst:4170; RV64-ATOMIC-TRAILING:       # %bb.0:4171; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -324172; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill4173; RV64-ATOMIC-TRAILING-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill4174; RV64-ATOMIC-TRAILING-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill4175; RV64-ATOMIC-TRAILING-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill4176; RV64-ATOMIC-TRAILING-NEXT:    mv s0, a04177; RV64-ATOMIC-TRAILING-NEXT:    ld a0, 0(a0)4178; RV64-ATOMIC-TRAILING-NEXT:    li s1, 10234179; RV64-ATOMIC-TRAILING-NEXT:    slli s1, s1, 524180; RV64-ATOMIC-TRAILING-NEXT:  .LBB56_1: # %atomicrmw.start4181; RV64-ATOMIC-TRAILING-NEXT:    # =>This Inner Loop Header: Depth=14182; RV64-ATOMIC-TRAILING-NEXT:    mv s2, a04183; RV64-ATOMIC-TRAILING-NEXT:    mv a1, s14184; RV64-ATOMIC-TRAILING-NEXT:    call fmin4185; RV64-ATOMIC-TRAILING-NEXT:    mv a2, a04186; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s04187; RV64-ATOMIC-TRAILING-NEXT:    mv a1, s24188; RV64-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_84189; RV64-ATOMIC-TRAILING-NEXT:    bne a0, s2, .LBB56_14190; RV64-ATOMIC-TRAILING-NEXT:  # %bb.2: # %atomicrmw.end4191; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload4192; RV64-ATOMIC-TRAILING-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload4193; RV64-ATOMIC-TRAILING-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload4194; RV64-ATOMIC-TRAILING-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload4195; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 324196; RV64-ATOMIC-TRAILING-NEXT:    ret4197  %v = atomicrmw fmin ptr %p, double 1.0 seq_cst, align 84198  ret double %v4199}4200 4201define double @rmw64_fmax_seq_cst(ptr %p) nounwind {4202; RV32-LABEL: rmw64_fmax_seq_cst:4203; RV32:       # %bb.0:4204; RV32-NEXT:    addi sp, sp, -324205; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill4206; RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill4207; RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill4208; RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill4209; RV32-NEXT:    mv s0, a04210; RV32-NEXT:    lw s1, 0(a0)4211; RV32-NEXT:    lw s2, 4(a0)4212; RV32-NEXT:  .LBB57_1: # %atomicrmw.start4213; RV32-NEXT:    # =>This Inner Loop Header: Depth=14214; RV32-NEXT:    lui a3, 2618884215; RV32-NEXT:    mv a0, s14216; RV32-NEXT:    mv a1, s24217; RV32-NEXT:    li a2, 04218; RV32-NEXT:    call fmax4219; RV32-NEXT:    mv a2, a04220; RV32-NEXT:    mv a3, a14221; RV32-NEXT:    sw s1, 8(sp)4222; RV32-NEXT:    sw s2, 12(sp)4223; RV32-NEXT:    addi a1, sp, 84224; RV32-NEXT:    li a4, 54225; RV32-NEXT:    li a5, 54226; RV32-NEXT:    mv a0, s04227; RV32-NEXT:    call __atomic_compare_exchange_84228; RV32-NEXT:    lw s1, 8(sp)4229; RV32-NEXT:    lw s2, 12(sp)4230; RV32-NEXT:    beqz a0, .LBB57_14231; RV32-NEXT:  # %bb.2: # %atomicrmw.end4232; RV32-NEXT:    mv a0, s14233; RV32-NEXT:    mv a1, s24234; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload4235; RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload4236; RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload4237; RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload4238; RV32-NEXT:    addi sp, sp, 324239; RV32-NEXT:    ret4240;4241; RV64-NO-ATOMIC-LABEL: rmw64_fmax_seq_cst:4242; RV64-NO-ATOMIC:       # %bb.0:4243; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -484244; RV64-NO-ATOMIC-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill4245; RV64-NO-ATOMIC-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill4246; RV64-NO-ATOMIC-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill4247; RV64-NO-ATOMIC-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill4248; RV64-NO-ATOMIC-NEXT:    mv s0, a04249; RV64-NO-ATOMIC-NEXT:    ld s2, 0(a0)4250; RV64-NO-ATOMIC-NEXT:    li s1, 10234251; RV64-NO-ATOMIC-NEXT:    slli s1, s1, 524252; RV64-NO-ATOMIC-NEXT:  .LBB57_1: # %atomicrmw.start4253; RV64-NO-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=14254; RV64-NO-ATOMIC-NEXT:    mv a0, s24255; RV64-NO-ATOMIC-NEXT:    mv a1, s14256; RV64-NO-ATOMIC-NEXT:    call fmax4257; RV64-NO-ATOMIC-NEXT:    mv a2, a04258; RV64-NO-ATOMIC-NEXT:    sd s2, 8(sp)4259; RV64-NO-ATOMIC-NEXT:    addi a1, sp, 84260; RV64-NO-ATOMIC-NEXT:    li a3, 54261; RV64-NO-ATOMIC-NEXT:    li a4, 54262; RV64-NO-ATOMIC-NEXT:    mv a0, s04263; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_84264; RV64-NO-ATOMIC-NEXT:    ld s2, 8(sp)4265; RV64-NO-ATOMIC-NEXT:    beqz a0, .LBB57_14266; RV64-NO-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end4267; RV64-NO-ATOMIC-NEXT:    mv a0, s24268; RV64-NO-ATOMIC-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload4269; RV64-NO-ATOMIC-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload4270; RV64-NO-ATOMIC-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload4271; RV64-NO-ATOMIC-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload4272; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 484273; RV64-NO-ATOMIC-NEXT:    ret4274;4275; RV64-ATOMIC-LABEL: rmw64_fmax_seq_cst:4276; RV64-ATOMIC:       # %bb.0:4277; RV64-ATOMIC-NEXT:    addi sp, sp, -324278; RV64-ATOMIC-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill4279; RV64-ATOMIC-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill4280; RV64-ATOMIC-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill4281; RV64-ATOMIC-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill4282; RV64-ATOMIC-NEXT:    mv s0, a04283; RV64-ATOMIC-NEXT:    ld a0, 0(a0)4284; RV64-ATOMIC-NEXT:    li s1, 10234285; RV64-ATOMIC-NEXT:    slli s1, s1, 524286; RV64-ATOMIC-NEXT:  .LBB57_1: # %atomicrmw.start4287; RV64-ATOMIC-NEXT:    # =>This Inner Loop Header: Depth=14288; RV64-ATOMIC-NEXT:    mv s2, a04289; RV64-ATOMIC-NEXT:    mv a1, s14290; RV64-ATOMIC-NEXT:    call fmax4291; RV64-ATOMIC-NEXT:    mv a2, a04292; RV64-ATOMIC-NEXT:    mv a0, s04293; RV64-ATOMIC-NEXT:    mv a1, s24294; RV64-ATOMIC-NEXT:    call __sync_val_compare_and_swap_84295; RV64-ATOMIC-NEXT:    bne a0, s2, .LBB57_14296; RV64-ATOMIC-NEXT:  # %bb.2: # %atomicrmw.end4297; RV64-ATOMIC-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload4298; RV64-ATOMIC-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload4299; RV64-ATOMIC-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload4300; RV64-ATOMIC-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload4301; RV64-ATOMIC-NEXT:    addi sp, sp, 324302; RV64-ATOMIC-NEXT:    ret4303;4304; RV64-ATOMIC-TRAILING-LABEL: rmw64_fmax_seq_cst:4305; RV64-ATOMIC-TRAILING:       # %bb.0:4306; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -324307; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill4308; RV64-ATOMIC-TRAILING-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill4309; RV64-ATOMIC-TRAILING-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill4310; RV64-ATOMIC-TRAILING-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill4311; RV64-ATOMIC-TRAILING-NEXT:    mv s0, a04312; RV64-ATOMIC-TRAILING-NEXT:    ld a0, 0(a0)4313; RV64-ATOMIC-TRAILING-NEXT:    li s1, 10234314; RV64-ATOMIC-TRAILING-NEXT:    slli s1, s1, 524315; RV64-ATOMIC-TRAILING-NEXT:  .LBB57_1: # %atomicrmw.start4316; RV64-ATOMIC-TRAILING-NEXT:    # =>This Inner Loop Header: Depth=14317; RV64-ATOMIC-TRAILING-NEXT:    mv s2, a04318; RV64-ATOMIC-TRAILING-NEXT:    mv a1, s14319; RV64-ATOMIC-TRAILING-NEXT:    call fmax4320; RV64-ATOMIC-TRAILING-NEXT:    mv a2, a04321; RV64-ATOMIC-TRAILING-NEXT:    mv a0, s04322; RV64-ATOMIC-TRAILING-NEXT:    mv a1, s24323; RV64-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_84324; RV64-ATOMIC-TRAILING-NEXT:    bne a0, s2, .LBB57_14325; RV64-ATOMIC-TRAILING-NEXT:  # %bb.2: # %atomicrmw.end4326; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload4327; RV64-ATOMIC-TRAILING-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload4328; RV64-ATOMIC-TRAILING-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload4329; RV64-ATOMIC-TRAILING-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload4330; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 324331; RV64-ATOMIC-TRAILING-NEXT:    ret4332  %v = atomicrmw fmax ptr %p, double 1.0 seq_cst, align 84333  ret double %v4334}4335 4336define i64 @cmpxchg64_monotonic(ptr %p) nounwind {4337; RV32-LABEL: cmpxchg64_monotonic:4338; RV32:       # %bb.0:4339; RV32-NEXT:    addi sp, sp, -164340; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4341; RV32-NEXT:    sw zero, 0(sp)4342; RV32-NEXT:    sw zero, 4(sp)4343; RV32-NEXT:    mv a1, sp4344; RV32-NEXT:    li a2, 14345; RV32-NEXT:    li a3, 04346; RV32-NEXT:    li a4, 04347; RV32-NEXT:    li a5, 04348; RV32-NEXT:    call __atomic_compare_exchange_84349; RV32-NEXT:    lw a0, 0(sp)4350; RV32-NEXT:    lw a1, 4(sp)4351; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4352; RV32-NEXT:    addi sp, sp, 164353; RV32-NEXT:    ret4354;4355; RV64-NO-ATOMIC-LABEL: cmpxchg64_monotonic:4356; RV64-NO-ATOMIC:       # %bb.0:4357; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -164358; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4359; RV64-NO-ATOMIC-NEXT:    sd zero, 0(sp)4360; RV64-NO-ATOMIC-NEXT:    mv a1, sp4361; RV64-NO-ATOMIC-NEXT:    li a2, 14362; RV64-NO-ATOMIC-NEXT:    li a3, 04363; RV64-NO-ATOMIC-NEXT:    li a4, 04364; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_84365; RV64-NO-ATOMIC-NEXT:    ld a0, 0(sp)4366; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4367; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 164368; RV64-NO-ATOMIC-NEXT:    ret4369;4370; RV64-ATOMIC-LABEL: cmpxchg64_monotonic:4371; RV64-ATOMIC:       # %bb.0:4372; RV64-ATOMIC-NEXT:    addi sp, sp, -164373; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4374; RV64-ATOMIC-NEXT:    li a2, 14375; RV64-ATOMIC-NEXT:    li a1, 04376; RV64-ATOMIC-NEXT:    call __sync_val_compare_and_swap_84377; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4378; RV64-ATOMIC-NEXT:    addi sp, sp, 164379; RV64-ATOMIC-NEXT:    ret4380;4381; RV64-ATOMIC-TRAILING-LABEL: cmpxchg64_monotonic:4382; RV64-ATOMIC-TRAILING:       # %bb.0:4383; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -164384; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4385; RV64-ATOMIC-TRAILING-NEXT:    li a2, 14386; RV64-ATOMIC-TRAILING-NEXT:    li a1, 04387; RV64-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_84388; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4389; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 164390; RV64-ATOMIC-TRAILING-NEXT:    ret4391  %res = cmpxchg ptr %p, i64 0, i64 1 monotonic monotonic4392  %res.0 = extractvalue { i64, i1 } %res, 04393  ret i64 %res.04394}4395 4396define i64 @cmpxchg64_seq_cst(ptr %p) nounwind {4397; RV32-LABEL: cmpxchg64_seq_cst:4398; RV32:       # %bb.0:4399; RV32-NEXT:    addi sp, sp, -164400; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4401; RV32-NEXT:    sw zero, 0(sp)4402; RV32-NEXT:    sw zero, 4(sp)4403; RV32-NEXT:    mv a1, sp4404; RV32-NEXT:    li a2, 14405; RV32-NEXT:    li a4, 54406; RV32-NEXT:    li a5, 54407; RV32-NEXT:    li a3, 04408; RV32-NEXT:    call __atomic_compare_exchange_84409; RV32-NEXT:    lw a0, 0(sp)4410; RV32-NEXT:    lw a1, 4(sp)4411; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4412; RV32-NEXT:    addi sp, sp, 164413; RV32-NEXT:    ret4414;4415; RV64-NO-ATOMIC-LABEL: cmpxchg64_seq_cst:4416; RV64-NO-ATOMIC:       # %bb.0:4417; RV64-NO-ATOMIC-NEXT:    addi sp, sp, -164418; RV64-NO-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4419; RV64-NO-ATOMIC-NEXT:    sd zero, 0(sp)4420; RV64-NO-ATOMIC-NEXT:    mv a1, sp4421; RV64-NO-ATOMIC-NEXT:    li a2, 14422; RV64-NO-ATOMIC-NEXT:    li a3, 54423; RV64-NO-ATOMIC-NEXT:    li a4, 54424; RV64-NO-ATOMIC-NEXT:    call __atomic_compare_exchange_84425; RV64-NO-ATOMIC-NEXT:    ld a0, 0(sp)4426; RV64-NO-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4427; RV64-NO-ATOMIC-NEXT:    addi sp, sp, 164428; RV64-NO-ATOMIC-NEXT:    ret4429;4430; RV64-ATOMIC-LABEL: cmpxchg64_seq_cst:4431; RV64-ATOMIC:       # %bb.0:4432; RV64-ATOMIC-NEXT:    addi sp, sp, -164433; RV64-ATOMIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4434; RV64-ATOMIC-NEXT:    li a2, 14435; RV64-ATOMIC-NEXT:    li a1, 04436; RV64-ATOMIC-NEXT:    call __sync_val_compare_and_swap_84437; RV64-ATOMIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4438; RV64-ATOMIC-NEXT:    addi sp, sp, 164439; RV64-ATOMIC-NEXT:    ret4440;4441; RV64-ATOMIC-TRAILING-LABEL: cmpxchg64_seq_cst:4442; RV64-ATOMIC-TRAILING:       # %bb.0:4443; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, -164444; RV64-ATOMIC-TRAILING-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4445; RV64-ATOMIC-TRAILING-NEXT:    li a2, 14446; RV64-ATOMIC-TRAILING-NEXT:    li a1, 04447; RV64-ATOMIC-TRAILING-NEXT:    call __sync_val_compare_and_swap_84448; RV64-ATOMIC-TRAILING-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4449; RV64-ATOMIC-TRAILING-NEXT:    addi sp, sp, 164450; RV64-ATOMIC-TRAILING-NEXT:    ret4451  %res = cmpxchg ptr %p, i64 0, i64 1 seq_cst seq_cst4452  %res.0 = extractvalue { i64, i1 } %res, 04453  ret i64 %res.04454}4455 4456define i128 @load128(ptr %p) nounwind {4457; RV32-LABEL: load128:4458; RV32:       # %bb.0:4459; RV32-NEXT:    addi sp, sp, -324460; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill4461; RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill4462; RV32-NEXT:    mv s0, a04463; RV32-NEXT:    li a0, 164464; RV32-NEXT:    addi a2, sp, 84465; RV32-NEXT:    li a3, 54466; RV32-NEXT:    call __atomic_load4467; RV32-NEXT:    lw a0, 8(sp)4468; RV32-NEXT:    lw a1, 12(sp)4469; RV32-NEXT:    lw a2, 16(sp)4470; RV32-NEXT:    lw a3, 20(sp)4471; RV32-NEXT:    sw a0, 0(s0)4472; RV32-NEXT:    sw a1, 4(s0)4473; RV32-NEXT:    sw a2, 8(s0)4474; RV32-NEXT:    sw a3, 12(s0)4475; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload4476; RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload4477; RV32-NEXT:    addi sp, sp, 324478; RV32-NEXT:    ret4479;4480; RV64-LABEL: load128:4481; RV64:       # %bb.0:4482; RV64-NEXT:    addi sp, sp, -164483; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4484; RV64-NEXT:    li a1, 54485; RV64-NEXT:    call __atomic_load_164486; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4487; RV64-NEXT:    addi sp, sp, 164488; RV64-NEXT:    ret4489  %v = load atomic i128, ptr %p seq_cst, align 164490  ret i128 %v4491}4492 4493define void @store128(ptr %p) nounwind {4494; RV32-LABEL: store128:4495; RV32:       # %bb.0:4496; RV32-NEXT:    addi sp, sp, -324497; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill4498; RV32-NEXT:    mv a1, a04499; RV32-NEXT:    sw zero, 8(sp)4500; RV32-NEXT:    sw zero, 12(sp)4501; RV32-NEXT:    sw zero, 16(sp)4502; RV32-NEXT:    sw zero, 20(sp)4503; RV32-NEXT:    li a0, 164504; RV32-NEXT:    addi a2, sp, 84505; RV32-NEXT:    li a3, 54506; RV32-NEXT:    call __atomic_store4507; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload4508; RV32-NEXT:    addi sp, sp, 324509; RV32-NEXT:    ret4510;4511; RV64-LABEL: store128:4512; RV64:       # %bb.0:4513; RV64-NEXT:    addi sp, sp, -164514; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4515; RV64-NEXT:    li a3, 54516; RV64-NEXT:    li a1, 04517; RV64-NEXT:    li a2, 04518; RV64-NEXT:    call __atomic_store_164519; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4520; RV64-NEXT:    addi sp, sp, 164521; RV64-NEXT:    ret4522  store atomic i128 0, ptr %p seq_cst, align 164523  ret void4524}4525 4526define i128 @rmw128(ptr %p) nounwind {4527; RV32-LABEL: rmw128:4528; RV32:       # %bb.0:4529; RV32-NEXT:    addi sp, sp, -484530; RV32-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill4531; RV32-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill4532; RV32-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill4533; RV32-NEXT:    mv s0, a14534; RV32-NEXT:    lw a4, 0(a1)4535; RV32-NEXT:    lw a3, 4(a1)4536; RV32-NEXT:    lw a1, 8(a1)4537; RV32-NEXT:    lw a2, 12(s0)4538; RV32-NEXT:    mv s1, a04539; RV32-NEXT:  .LBB62_1: # %atomicrmw.start4540; RV32-NEXT:    # =>This Inner Loop Header: Depth=14541; RV32-NEXT:    addi a0, a4, 14542; RV32-NEXT:    sw a4, 16(sp)4543; RV32-NEXT:    sw a3, 20(sp)4544; RV32-NEXT:    sw a1, 24(sp)4545; RV32-NEXT:    sw a2, 28(sp)4546; RV32-NEXT:    seqz a4, a04547; RV32-NEXT:    add a3, a3, a44548; RV32-NEXT:    or a4, a0, a34549; RV32-NEXT:    seqz a4, a44550; RV32-NEXT:    add a4, a1, a44551; RV32-NEXT:    sltu a1, a4, a14552; RV32-NEXT:    add a1, a2, a14553; RV32-NEXT:    sw a0, 0(sp)4554; RV32-NEXT:    sw a3, 4(sp)4555; RV32-NEXT:    sw a4, 8(sp)4556; RV32-NEXT:    sw a1, 12(sp)4557; RV32-NEXT:    li a0, 164558; RV32-NEXT:    addi a2, sp, 164559; RV32-NEXT:    mv a3, sp4560; RV32-NEXT:    li a4, 54561; RV32-NEXT:    li a5, 54562; RV32-NEXT:    mv a1, s04563; RV32-NEXT:    call __atomic_compare_exchange4564; RV32-NEXT:    lw a4, 16(sp)4565; RV32-NEXT:    lw a3, 20(sp)4566; RV32-NEXT:    lw a1, 24(sp)4567; RV32-NEXT:    lw a2, 28(sp)4568; RV32-NEXT:    beqz a0, .LBB62_14569; RV32-NEXT:  # %bb.2: # %atomicrmw.end4570; RV32-NEXT:    sw a4, 0(s1)4571; RV32-NEXT:    sw a3, 4(s1)4572; RV32-NEXT:    sw a1, 8(s1)4573; RV32-NEXT:    sw a2, 12(s1)4574; RV32-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload4575; RV32-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload4576; RV32-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload4577; RV32-NEXT:    addi sp, sp, 484578; RV32-NEXT:    ret4579;4580; RV64-LABEL: rmw128:4581; RV64:       # %bb.0:4582; RV64-NEXT:    addi sp, sp, -164583; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill4584; RV64-NEXT:    li a1, 14585; RV64-NEXT:    li a3, 54586; RV64-NEXT:    li a2, 04587; RV64-NEXT:    call __atomic_fetch_add_164588; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload4589; RV64-NEXT:    addi sp, sp, 164590; RV64-NEXT:    ret4591  %v = atomicrmw add ptr %p, i128 1 seq_cst, align 164592  ret i128 %v4593}4594 4595define i128 @cmpxchg128(ptr %p) nounwind {4596; RV32-LABEL: cmpxchg128:4597; RV32:       # %bb.0:4598; RV32-NEXT:    addi sp, sp, -484599; RV32-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill4600; RV32-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill4601; RV32-NEXT:    mv s0, a04602; RV32-NEXT:    sw zero, 24(sp)4603; RV32-NEXT:    sw zero, 28(sp)4604; RV32-NEXT:    sw zero, 32(sp)4605; RV32-NEXT:    sw zero, 36(sp)4606; RV32-NEXT:    li a0, 14607; RV32-NEXT:    sw a0, 8(sp)4608; RV32-NEXT:    sw zero, 12(sp)4609; RV32-NEXT:    sw zero, 16(sp)4610; RV32-NEXT:    sw zero, 20(sp)4611; RV32-NEXT:    li a0, 164612; RV32-NEXT:    addi a2, sp, 244613; RV32-NEXT:    addi a3, sp, 84614; RV32-NEXT:    li a4, 54615; RV32-NEXT:    li a5, 54616; RV32-NEXT:    call __atomic_compare_exchange4617; RV32-NEXT:    lw a0, 24(sp)4618; RV32-NEXT:    lw a1, 28(sp)4619; RV32-NEXT:    lw a2, 32(sp)4620; RV32-NEXT:    lw a3, 36(sp)4621; RV32-NEXT:    sw a0, 0(s0)4622; RV32-NEXT:    sw a1, 4(s0)4623; RV32-NEXT:    sw a2, 8(s0)4624; RV32-NEXT:    sw a3, 12(s0)4625; RV32-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload4626; RV32-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload4627; RV32-NEXT:    addi sp, sp, 484628; RV32-NEXT:    ret4629;4630; RV64-LABEL: cmpxchg128:4631; RV64:       # %bb.0:4632; RV64-NEXT:    addi sp, sp, -324633; RV64-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill4634; RV64-NEXT:    sd zero, 0(sp)4635; RV64-NEXT:    sd zero, 8(sp)4636; RV64-NEXT:    mv a1, sp4637; RV64-NEXT:    li a2, 14638; RV64-NEXT:    li a4, 54639; RV64-NEXT:    li a5, 54640; RV64-NEXT:    li a3, 04641; RV64-NEXT:    call __atomic_compare_exchange_164642; RV64-NEXT:    ld a0, 0(sp)4643; RV64-NEXT:    ld a1, 8(sp)4644; RV64-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload4645; RV64-NEXT:    addi sp, sp, 324646; RV64-NEXT:    ret4647  %res = cmpxchg ptr %p, i128 0, i128 1 seq_cst seq_cst4648  %res.0 = extractvalue { i128, i1 } %res, 04649  ret i128 %res.04650}4651