brintos

brintos / llvm-project-archived public Read only

0
0
Text · 36.2 KiB · 4914357 Raw
1069 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -global-isel -mattr=+d -verify-machineinstrs < %s \3; RUN:   | FileCheck -check-prefix=RV32I %s4; RUN: llc -mtriple=riscv32 -global-isel -mattr=+d,+a,+no-trailing-seq-cst-fence \5; RUN:   -verify-machineinstrs < %s | FileCheck -check-prefixes=RV32IA,RV32IA-WMO %s6; RUN: llc -mtriple=riscv32 -global-isel -mattr=+d,+a,+ztso,+no-trailing-seq-cst-fence \7; RUN:     -verify-machineinstrs < %s | FileCheck -check-prefixes=RV32IA,RV32IA-TSO %s8; RUN: llc -mtriple=riscv64 -global-isel -verify-machineinstrs < %s \9; RUN:   | FileCheck -check-prefix=RV64I %s10; RUN: llc -mtriple=riscv64 -global-isel -mattr=+d,+a,+no-trailing-seq-cst-fence \11; RUN:   -verify-machineinstrs < %s | FileCheck -check-prefixes=RV64IA,RV64IA-WMO %s12; RUN: llc -mtriple=riscv64 -global-isel -mattr=+d,+a,+ztso,+no-trailing-seq-cst-fence \13; RUN:   -verify-machineinstrs < %s | FileCheck -check-prefixes=RV64IA,RV64IA-TSO %s14 15 16; RUN: llc -mtriple=riscv32 -global-isel -mattr=+d,+a -verify-machineinstrs < %s \17; RUN:   | FileCheck -check-prefixes=RV32IA,RV32IA-WMO-TRAILING-FENCE %s18; RUN: llc -mtriple=riscv32 -global-isel -mattr=+d,+a,+ztso -verify-machineinstrs < %s \19; RUN:   | FileCheck -check-prefixes=RV32IA,RV32IA-TSO-TRAILING-FENCE %s20 21; RUN: llc -mtriple=riscv64 -global-isel -mattr=+d,+a -verify-machineinstrs < %s \22; RUN:   | FileCheck -check-prefixes=RV64IA,RV64IA-WMO-TRAILING-FENCE %s23; RUN: llc -mtriple=riscv64 -global-isel -mattr=+d,+a,+ztso -verify-machineinstrs < %s \24; RUN:   | FileCheck -check-prefixes=RV64IA,RV64IA-TSO-TRAILING-FENCE %s25 26; RUN: llc -mtriple=riscv32 -global-isel -mattr=+d,+a,+experimental-zalasr -verify-machineinstrs < %s \27; RUN:   | FileCheck -check-prefixes=RV32IA,RV32IA-ZALASR,RV32IA-ZALASR-WMO %s28; RUN: llc -mtriple=riscv32 -global-isel -mattr=+d,+a,+experimental-zalasr,+ztso -verify-machineinstrs < %s \29; RUN:   | FileCheck -check-prefixes=RV32IA,RV32IA-ZALASR,RV32IA-ZALASR-TSO %s30 31; RUN: llc -mtriple=riscv64 -global-isel -mattr=+d,+a,+experimental-zalasr -verify-machineinstrs < %s \32; RUN:   | FileCheck -check-prefixes=RV64IA,RV64IA-ZALASR,RV64IA-ZALASR-WMO %s33; RUN: llc -mtriple=riscv64 -global-isel -mattr=+d,+a,+experimental-zalasr,+ztso -verify-machineinstrs < %s \34; RUN:   | FileCheck -check-prefixes=RV64IA,RV64IA-ZALASR,RV64IA-ZALASR-TSO %s35 36 37define float @atomic_load_f32_unordered(ptr %a) nounwind {38; RV32I-LABEL: atomic_load_f32_unordered:39; RV32I:       # %bb.0:40; RV32I-NEXT:    addi sp, sp, -1641; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill42; RV32I-NEXT:    li a1, 043; RV32I-NEXT:    call __atomic_load_444; RV32I-NEXT:    fmv.w.x fa0, a045; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload46; RV32I-NEXT:    addi sp, sp, 1647; RV32I-NEXT:    ret48;49; RV32IA-LABEL: atomic_load_f32_unordered:50; RV32IA:       # %bb.0:51; RV32IA-NEXT:    lw a0, 0(a0)52; RV32IA-NEXT:    fmv.w.x fa0, a053; RV32IA-NEXT:    ret54;55; RV64I-LABEL: atomic_load_f32_unordered:56; RV64I:       # %bb.0:57; RV64I-NEXT:    addi sp, sp, -1658; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill59; RV64I-NEXT:    li a1, 060; RV64I-NEXT:    call __atomic_load_461; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload62; RV64I-NEXT:    addi sp, sp, 1663; RV64I-NEXT:    ret64;65; RV64IA-LABEL: atomic_load_f32_unordered:66; RV64IA:       # %bb.0:67; RV64IA-NEXT:    lw a0, 0(a0)68; RV64IA-NEXT:    fmv.w.x fa0, a069; RV64IA-NEXT:    ret70  %1 = load atomic float, ptr %a unordered, align 471  ret float %172}73 74define float @atomic_load_f32_monotonic(ptr %a) nounwind {75; RV32I-LABEL: atomic_load_f32_monotonic:76; RV32I:       # %bb.0:77; RV32I-NEXT:    addi sp, sp, -1678; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill79; RV32I-NEXT:    li a1, 080; RV32I-NEXT:    call __atomic_load_481; RV32I-NEXT:    fmv.w.x fa0, a082; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload83; RV32I-NEXT:    addi sp, sp, 1684; RV32I-NEXT:    ret85;86; RV32IA-LABEL: atomic_load_f32_monotonic:87; RV32IA:       # %bb.0:88; RV32IA-NEXT:    lw a0, 0(a0)89; RV32IA-NEXT:    fmv.w.x fa0, a090; RV32IA-NEXT:    ret91;92; RV64I-LABEL: atomic_load_f32_monotonic:93; RV64I:       # %bb.0:94; RV64I-NEXT:    addi sp, sp, -1695; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill96; RV64I-NEXT:    li a1, 097; RV64I-NEXT:    call __atomic_load_498; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload99; RV64I-NEXT:    addi sp, sp, 16100; RV64I-NEXT:    ret101;102; RV64IA-LABEL: atomic_load_f32_monotonic:103; RV64IA:       # %bb.0:104; RV64IA-NEXT:    lw a0, 0(a0)105; RV64IA-NEXT:    fmv.w.x fa0, a0106; RV64IA-NEXT:    ret107  %1 = load atomic float, ptr %a monotonic, align 4108  ret float %1109}110 111define float @atomic_load_f32_acquire(ptr %a) nounwind {112; RV32I-LABEL: atomic_load_f32_acquire:113; RV32I:       # %bb.0:114; RV32I-NEXT:    addi sp, sp, -16115; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill116; RV32I-NEXT:    li a1, 2117; RV32I-NEXT:    call __atomic_load_4118; RV32I-NEXT:    fmv.w.x fa0, a0119; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload120; RV32I-NEXT:    addi sp, sp, 16121; RV32I-NEXT:    ret122;123; RV32IA-WMO-LABEL: atomic_load_f32_acquire:124; RV32IA-WMO:       # %bb.0:125; RV32IA-WMO-NEXT:    lw a0, 0(a0)126; RV32IA-WMO-NEXT:    fence r, rw127; RV32IA-WMO-NEXT:    fmv.w.x fa0, a0128; RV32IA-WMO-NEXT:    ret129;130; RV32IA-TSO-LABEL: atomic_load_f32_acquire:131; RV32IA-TSO:       # %bb.0:132; RV32IA-TSO-NEXT:    lw a0, 0(a0)133; RV32IA-TSO-NEXT:    fmv.w.x fa0, a0134; RV32IA-TSO-NEXT:    ret135;136; RV64I-LABEL: atomic_load_f32_acquire:137; RV64I:       # %bb.0:138; RV64I-NEXT:    addi sp, sp, -16139; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill140; RV64I-NEXT:    li a1, 2141; RV64I-NEXT:    call __atomic_load_4142; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload143; RV64I-NEXT:    addi sp, sp, 16144; RV64I-NEXT:    ret145;146; RV64IA-WMO-LABEL: atomic_load_f32_acquire:147; RV64IA-WMO:       # %bb.0:148; RV64IA-WMO-NEXT:    lw a0, 0(a0)149; RV64IA-WMO-NEXT:    fence r, rw150; RV64IA-WMO-NEXT:    fmv.w.x fa0, a0151; RV64IA-WMO-NEXT:    ret152;153; RV64IA-TSO-LABEL: atomic_load_f32_acquire:154; RV64IA-TSO:       # %bb.0:155; RV64IA-TSO-NEXT:    lw a0, 0(a0)156; RV64IA-TSO-NEXT:    fmv.w.x fa0, a0157; RV64IA-TSO-NEXT:    ret158;159; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_load_f32_acquire:160; RV32IA-WMO-TRAILING-FENCE:       # %bb.0:161; RV32IA-WMO-TRAILING-FENCE-NEXT:    lw a0, 0(a0)162; RV32IA-WMO-TRAILING-FENCE-NEXT:    fence r, rw163; RV32IA-WMO-TRAILING-FENCE-NEXT:    fmv.w.x fa0, a0164; RV32IA-WMO-TRAILING-FENCE-NEXT:    ret165;166; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_load_f32_acquire:167; RV32IA-TSO-TRAILING-FENCE:       # %bb.0:168; RV32IA-TSO-TRAILING-FENCE-NEXT:    lw a0, 0(a0)169; RV32IA-TSO-TRAILING-FENCE-NEXT:    fmv.w.x fa0, a0170; RV32IA-TSO-TRAILING-FENCE-NEXT:    ret171;172; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_load_f32_acquire:173; RV64IA-WMO-TRAILING-FENCE:       # %bb.0:174; RV64IA-WMO-TRAILING-FENCE-NEXT:    lw a0, 0(a0)175; RV64IA-WMO-TRAILING-FENCE-NEXT:    fence r, rw176; RV64IA-WMO-TRAILING-FENCE-NEXT:    fmv.w.x fa0, a0177; RV64IA-WMO-TRAILING-FENCE-NEXT:    ret178;179; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_load_f32_acquire:180; RV64IA-TSO-TRAILING-FENCE:       # %bb.0:181; RV64IA-TSO-TRAILING-FENCE-NEXT:    lw a0, 0(a0)182; RV64IA-TSO-TRAILING-FENCE-NEXT:    fmv.w.x fa0, a0183; RV64IA-TSO-TRAILING-FENCE-NEXT:    ret184;185; RV32IA-ZALASR-WMO-LABEL: atomic_load_f32_acquire:186; RV32IA-ZALASR-WMO:       # %bb.0:187; RV32IA-ZALASR-WMO-NEXT:    lw.aq a0, (a0)188; RV32IA-ZALASR-WMO-NEXT:    fmv.w.x fa0, a0189; RV32IA-ZALASR-WMO-NEXT:    ret190;191; RV32IA-ZALASR-TSO-LABEL: atomic_load_f32_acquire:192; RV32IA-ZALASR-TSO:       # %bb.0:193; RV32IA-ZALASR-TSO-NEXT:    lw a0, 0(a0)194; RV32IA-ZALASR-TSO-NEXT:    fmv.w.x fa0, a0195; RV32IA-ZALASR-TSO-NEXT:    ret196;197; RV64IA-ZALASR-WMO-LABEL: atomic_load_f32_acquire:198; RV64IA-ZALASR-WMO:       # %bb.0:199; RV64IA-ZALASR-WMO-NEXT:    lw.aq a0, (a0)200; RV64IA-ZALASR-WMO-NEXT:    fmv.w.x fa0, a0201; RV64IA-ZALASR-WMO-NEXT:    ret202;203; RV64IA-ZALASR-TSO-LABEL: atomic_load_f32_acquire:204; RV64IA-ZALASR-TSO:       # %bb.0:205; RV64IA-ZALASR-TSO-NEXT:    lw a0, 0(a0)206; RV64IA-ZALASR-TSO-NEXT:    fmv.w.x fa0, a0207; RV64IA-ZALASR-TSO-NEXT:    ret208  %1 = load atomic float, ptr %a acquire, align 4209  ret float %1210}211 212define float @atomic_load_f32_seq_cst(ptr %a) nounwind {213; RV32I-LABEL: atomic_load_f32_seq_cst:214; RV32I:       # %bb.0:215; RV32I-NEXT:    addi sp, sp, -16216; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill217; RV32I-NEXT:    li a1, 5218; RV32I-NEXT:    call __atomic_load_4219; RV32I-NEXT:    fmv.w.x fa0, a0220; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload221; RV32I-NEXT:    addi sp, sp, 16222; RV32I-NEXT:    ret223;224; RV32IA-WMO-LABEL: atomic_load_f32_seq_cst:225; RV32IA-WMO:       # %bb.0:226; RV32IA-WMO-NEXT:    fence rw, rw227; RV32IA-WMO-NEXT:    lw a0, 0(a0)228; RV32IA-WMO-NEXT:    fence r, rw229; RV32IA-WMO-NEXT:    fmv.w.x fa0, a0230; RV32IA-WMO-NEXT:    ret231;232; RV32IA-TSO-LABEL: atomic_load_f32_seq_cst:233; RV32IA-TSO:       # %bb.0:234; RV32IA-TSO-NEXT:    fence rw, rw235; RV32IA-TSO-NEXT:    lw a0, 0(a0)236; RV32IA-TSO-NEXT:    fmv.w.x fa0, a0237; RV32IA-TSO-NEXT:    ret238;239; RV64I-LABEL: atomic_load_f32_seq_cst:240; RV64I:       # %bb.0:241; RV64I-NEXT:    addi sp, sp, -16242; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill243; RV64I-NEXT:    li a1, 5244; RV64I-NEXT:    call __atomic_load_4245; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload246; RV64I-NEXT:    addi sp, sp, 16247; RV64I-NEXT:    ret248;249; RV64IA-WMO-LABEL: atomic_load_f32_seq_cst:250; RV64IA-WMO:       # %bb.0:251; RV64IA-WMO-NEXT:    fence rw, rw252; RV64IA-WMO-NEXT:    lw a0, 0(a0)253; RV64IA-WMO-NEXT:    fence r, rw254; RV64IA-WMO-NEXT:    fmv.w.x fa0, a0255; RV64IA-WMO-NEXT:    ret256;257; RV64IA-TSO-LABEL: atomic_load_f32_seq_cst:258; RV64IA-TSO:       # %bb.0:259; RV64IA-TSO-NEXT:    fence rw, rw260; RV64IA-TSO-NEXT:    lw a0, 0(a0)261; RV64IA-TSO-NEXT:    fmv.w.x fa0, a0262; RV64IA-TSO-NEXT:    ret263;264; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_load_f32_seq_cst:265; RV32IA-WMO-TRAILING-FENCE:       # %bb.0:266; RV32IA-WMO-TRAILING-FENCE-NEXT:    fence rw, rw267; RV32IA-WMO-TRAILING-FENCE-NEXT:    lw a0, 0(a0)268; RV32IA-WMO-TRAILING-FENCE-NEXT:    fence r, rw269; RV32IA-WMO-TRAILING-FENCE-NEXT:    fmv.w.x fa0, a0270; RV32IA-WMO-TRAILING-FENCE-NEXT:    ret271;272; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_load_f32_seq_cst:273; RV32IA-TSO-TRAILING-FENCE:       # %bb.0:274; RV32IA-TSO-TRAILING-FENCE-NEXT:    fence rw, rw275; RV32IA-TSO-TRAILING-FENCE-NEXT:    lw a0, 0(a0)276; RV32IA-TSO-TRAILING-FENCE-NEXT:    fmv.w.x fa0, a0277; RV32IA-TSO-TRAILING-FENCE-NEXT:    ret278;279; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_load_f32_seq_cst:280; RV64IA-WMO-TRAILING-FENCE:       # %bb.0:281; RV64IA-WMO-TRAILING-FENCE-NEXT:    fence rw, rw282; RV64IA-WMO-TRAILING-FENCE-NEXT:    lw a0, 0(a0)283; RV64IA-WMO-TRAILING-FENCE-NEXT:    fence r, rw284; RV64IA-WMO-TRAILING-FENCE-NEXT:    fmv.w.x fa0, a0285; RV64IA-WMO-TRAILING-FENCE-NEXT:    ret286;287; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_load_f32_seq_cst:288; RV64IA-TSO-TRAILING-FENCE:       # %bb.0:289; RV64IA-TSO-TRAILING-FENCE-NEXT:    fence rw, rw290; RV64IA-TSO-TRAILING-FENCE-NEXT:    lw a0, 0(a0)291; RV64IA-TSO-TRAILING-FENCE-NEXT:    fmv.w.x fa0, a0292; RV64IA-TSO-TRAILING-FENCE-NEXT:    ret293;294; RV32IA-ZALASR-LABEL: atomic_load_f32_seq_cst:295; RV32IA-ZALASR:       # %bb.0:296; RV32IA-ZALASR-NEXT:    lw.aq a0, (a0)297; RV32IA-ZALASR-NEXT:    fmv.w.x fa0, a0298; RV32IA-ZALASR-NEXT:    ret299;300; RV64IA-ZALASR-LABEL: atomic_load_f32_seq_cst:301; RV64IA-ZALASR:       # %bb.0:302; RV64IA-ZALASR-NEXT:    lw.aq a0, (a0)303; RV64IA-ZALASR-NEXT:    fmv.w.x fa0, a0304; RV64IA-ZALASR-NEXT:    ret305  %1 = load atomic float, ptr %a seq_cst, align 4306  ret float %1307}308 309define double @atomic_load_f64_unordered(ptr %a) nounwind {310; RV32I-LABEL: atomic_load_f64_unordered:311; RV32I:       # %bb.0:312; RV32I-NEXT:    addi sp, sp, -16313; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill314; RV32I-NEXT:    li a1, 0315; RV32I-NEXT:    call __atomic_load_8316; RV32I-NEXT:    sw a0, 0(sp)317; RV32I-NEXT:    sw a1, 4(sp)318; RV32I-NEXT:    fld fa0, 0(sp)319; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload320; RV32I-NEXT:    addi sp, sp, 16321; RV32I-NEXT:    ret322;323; RV32IA-LABEL: atomic_load_f64_unordered:324; RV32IA:       # %bb.0:325; RV32IA-NEXT:    addi sp, sp, -16326; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill327; RV32IA-NEXT:    li a1, 0328; RV32IA-NEXT:    call __atomic_load_8329; RV32IA-NEXT:    sw a0, 0(sp)330; RV32IA-NEXT:    sw a1, 4(sp)331; RV32IA-NEXT:    fld fa0, 0(sp)332; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload333; RV32IA-NEXT:    addi sp, sp, 16334; RV32IA-NEXT:    ret335;336; RV64I-LABEL: atomic_load_f64_unordered:337; RV64I:       # %bb.0:338; RV64I-NEXT:    addi sp, sp, -16339; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill340; RV64I-NEXT:    li a1, 0341; RV64I-NEXT:    call __atomic_load_8342; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload343; RV64I-NEXT:    addi sp, sp, 16344; RV64I-NEXT:    ret345;346; RV64IA-LABEL: atomic_load_f64_unordered:347; RV64IA:       # %bb.0:348; RV64IA-NEXT:    ld a0, 0(a0)349; RV64IA-NEXT:    fmv.d.x fa0, a0350; RV64IA-NEXT:    ret351  %1 = load atomic double, ptr %a unordered, align 8352  ret double %1353}354 355define double @atomic_load_f64_monotonic(ptr %a) nounwind {356; RV32I-LABEL: atomic_load_f64_monotonic:357; RV32I:       # %bb.0:358; RV32I-NEXT:    addi sp, sp, -16359; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill360; RV32I-NEXT:    li a1, 0361; RV32I-NEXT:    call __atomic_load_8362; RV32I-NEXT:    sw a0, 0(sp)363; RV32I-NEXT:    sw a1, 4(sp)364; RV32I-NEXT:    fld fa0, 0(sp)365; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload366; RV32I-NEXT:    addi sp, sp, 16367; RV32I-NEXT:    ret368;369; RV32IA-LABEL: atomic_load_f64_monotonic:370; RV32IA:       # %bb.0:371; RV32IA-NEXT:    addi sp, sp, -16372; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill373; RV32IA-NEXT:    li a1, 0374; RV32IA-NEXT:    call __atomic_load_8375; RV32IA-NEXT:    sw a0, 0(sp)376; RV32IA-NEXT:    sw a1, 4(sp)377; RV32IA-NEXT:    fld fa0, 0(sp)378; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload379; RV32IA-NEXT:    addi sp, sp, 16380; RV32IA-NEXT:    ret381;382; RV64I-LABEL: atomic_load_f64_monotonic:383; RV64I:       # %bb.0:384; RV64I-NEXT:    addi sp, sp, -16385; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill386; RV64I-NEXT:    li a1, 0387; RV64I-NEXT:    call __atomic_load_8388; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload389; RV64I-NEXT:    addi sp, sp, 16390; RV64I-NEXT:    ret391;392; RV64IA-LABEL: atomic_load_f64_monotonic:393; RV64IA:       # %bb.0:394; RV64IA-NEXT:    ld a0, 0(a0)395; RV64IA-NEXT:    fmv.d.x fa0, a0396; RV64IA-NEXT:    ret397  %1 = load atomic double, ptr %a monotonic, align 8398  ret double %1399}400 401define double @atomic_load_f64_acquire(ptr %a) nounwind {402; RV32I-LABEL: atomic_load_f64_acquire:403; RV32I:       # %bb.0:404; RV32I-NEXT:    addi sp, sp, -16405; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill406; RV32I-NEXT:    li a1, 2407; RV32I-NEXT:    call __atomic_load_8408; RV32I-NEXT:    sw a0, 0(sp)409; RV32I-NEXT:    sw a1, 4(sp)410; RV32I-NEXT:    fld fa0, 0(sp)411; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload412; RV32I-NEXT:    addi sp, sp, 16413; RV32I-NEXT:    ret414;415; RV32IA-LABEL: atomic_load_f64_acquire:416; RV32IA:       # %bb.0:417; RV32IA-NEXT:    addi sp, sp, -16418; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill419; RV32IA-NEXT:    li a1, 2420; RV32IA-NEXT:    call __atomic_load_8421; RV32IA-NEXT:    sw a0, 0(sp)422; RV32IA-NEXT:    sw a1, 4(sp)423; RV32IA-NEXT:    fld fa0, 0(sp)424; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload425; RV32IA-NEXT:    addi sp, sp, 16426; RV32IA-NEXT:    ret427;428; RV64I-LABEL: atomic_load_f64_acquire:429; RV64I:       # %bb.0:430; RV64I-NEXT:    addi sp, sp, -16431; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill432; RV64I-NEXT:    li a1, 2433; RV64I-NEXT:    call __atomic_load_8434; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload435; RV64I-NEXT:    addi sp, sp, 16436; RV64I-NEXT:    ret437;438; RV64IA-WMO-LABEL: atomic_load_f64_acquire:439; RV64IA-WMO:       # %bb.0:440; RV64IA-WMO-NEXT:    ld a0, 0(a0)441; RV64IA-WMO-NEXT:    fence r, rw442; RV64IA-WMO-NEXT:    fmv.d.x fa0, a0443; RV64IA-WMO-NEXT:    ret444;445; RV64IA-TSO-LABEL: atomic_load_f64_acquire:446; RV64IA-TSO:       # %bb.0:447; RV64IA-TSO-NEXT:    ld a0, 0(a0)448; RV64IA-TSO-NEXT:    fmv.d.x fa0, a0449; RV64IA-TSO-NEXT:    ret450;451; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_load_f64_acquire:452; RV64IA-WMO-TRAILING-FENCE:       # %bb.0:453; RV64IA-WMO-TRAILING-FENCE-NEXT:    ld a0, 0(a0)454; RV64IA-WMO-TRAILING-FENCE-NEXT:    fence r, rw455; RV64IA-WMO-TRAILING-FENCE-NEXT:    fmv.d.x fa0, a0456; RV64IA-WMO-TRAILING-FENCE-NEXT:    ret457;458; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_load_f64_acquire:459; RV64IA-TSO-TRAILING-FENCE:       # %bb.0:460; RV64IA-TSO-TRAILING-FENCE-NEXT:    ld a0, 0(a0)461; RV64IA-TSO-TRAILING-FENCE-NEXT:    fmv.d.x fa0, a0462; RV64IA-TSO-TRAILING-FENCE-NEXT:    ret463;464; RV64IA-ZALASR-WMO-LABEL: atomic_load_f64_acquire:465; RV64IA-ZALASR-WMO:       # %bb.0:466; RV64IA-ZALASR-WMO-NEXT:    ld.aq a0, (a0)467; RV64IA-ZALASR-WMO-NEXT:    fmv.d.x fa0, a0468; RV64IA-ZALASR-WMO-NEXT:    ret469;470; RV64IA-ZALASR-TSO-LABEL: atomic_load_f64_acquire:471; RV64IA-ZALASR-TSO:       # %bb.0:472; RV64IA-ZALASR-TSO-NEXT:    ld a0, 0(a0)473; RV64IA-ZALASR-TSO-NEXT:    fmv.d.x fa0, a0474; RV64IA-ZALASR-TSO-NEXT:    ret475  %1 = load atomic double, ptr %a acquire, align 8476  ret double %1477}478 479define double @atomic_load_f64_seq_cst(ptr %a) nounwind {480; RV32I-LABEL: atomic_load_f64_seq_cst:481; RV32I:       # %bb.0:482; RV32I-NEXT:    addi sp, sp, -16483; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill484; RV32I-NEXT:    li a1, 5485; RV32I-NEXT:    call __atomic_load_8486; RV32I-NEXT:    sw a0, 0(sp)487; RV32I-NEXT:    sw a1, 4(sp)488; RV32I-NEXT:    fld fa0, 0(sp)489; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload490; RV32I-NEXT:    addi sp, sp, 16491; RV32I-NEXT:    ret492;493; RV32IA-LABEL: atomic_load_f64_seq_cst:494; RV32IA:       # %bb.0:495; RV32IA-NEXT:    addi sp, sp, -16496; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill497; RV32IA-NEXT:    li a1, 5498; RV32IA-NEXT:    call __atomic_load_8499; RV32IA-NEXT:    sw a0, 0(sp)500; RV32IA-NEXT:    sw a1, 4(sp)501; RV32IA-NEXT:    fld fa0, 0(sp)502; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload503; RV32IA-NEXT:    addi sp, sp, 16504; RV32IA-NEXT:    ret505;506; RV64I-LABEL: atomic_load_f64_seq_cst:507; RV64I:       # %bb.0:508; RV64I-NEXT:    addi sp, sp, -16509; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill510; RV64I-NEXT:    li a1, 5511; RV64I-NEXT:    call __atomic_load_8512; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload513; RV64I-NEXT:    addi sp, sp, 16514; RV64I-NEXT:    ret515;516; RV64IA-WMO-LABEL: atomic_load_f64_seq_cst:517; RV64IA-WMO:       # %bb.0:518; RV64IA-WMO-NEXT:    fence rw, rw519; RV64IA-WMO-NEXT:    ld a0, 0(a0)520; RV64IA-WMO-NEXT:    fence r, rw521; RV64IA-WMO-NEXT:    fmv.d.x fa0, a0522; RV64IA-WMO-NEXT:    ret523;524; RV64IA-TSO-LABEL: atomic_load_f64_seq_cst:525; RV64IA-TSO:       # %bb.0:526; RV64IA-TSO-NEXT:    fence rw, rw527; RV64IA-TSO-NEXT:    ld a0, 0(a0)528; RV64IA-TSO-NEXT:    fmv.d.x fa0, a0529; RV64IA-TSO-NEXT:    ret530;531; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_load_f64_seq_cst:532; RV64IA-WMO-TRAILING-FENCE:       # %bb.0:533; RV64IA-WMO-TRAILING-FENCE-NEXT:    fence rw, rw534; RV64IA-WMO-TRAILING-FENCE-NEXT:    ld a0, 0(a0)535; RV64IA-WMO-TRAILING-FENCE-NEXT:    fence r, rw536; RV64IA-WMO-TRAILING-FENCE-NEXT:    fmv.d.x fa0, a0537; RV64IA-WMO-TRAILING-FENCE-NEXT:    ret538;539; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_load_f64_seq_cst:540; RV64IA-TSO-TRAILING-FENCE:       # %bb.0:541; RV64IA-TSO-TRAILING-FENCE-NEXT:    fence rw, rw542; RV64IA-TSO-TRAILING-FENCE-NEXT:    ld a0, 0(a0)543; RV64IA-TSO-TRAILING-FENCE-NEXT:    fmv.d.x fa0, a0544; RV64IA-TSO-TRAILING-FENCE-NEXT:    ret545;546; RV64IA-ZALASR-LABEL: atomic_load_f64_seq_cst:547; RV64IA-ZALASR:       # %bb.0:548; RV64IA-ZALASR-NEXT:    ld.aq a0, (a0)549; RV64IA-ZALASR-NEXT:    fmv.d.x fa0, a0550; RV64IA-ZALASR-NEXT:    ret551  %1 = load atomic double, ptr %a seq_cst, align 8552  ret double %1553}554 555define void @atomic_store_f32_unordered(ptr %a, float %b) nounwind {556; RV32I-LABEL: atomic_store_f32_unordered:557; RV32I:       # %bb.0:558; RV32I-NEXT:    addi sp, sp, -16559; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill560; RV32I-NEXT:    fmv.x.w a1, fa0561; RV32I-NEXT:    li a2, 0562; RV32I-NEXT:    call __atomic_store_4563; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload564; RV32I-NEXT:    addi sp, sp, 16565; RV32I-NEXT:    ret566;567; RV32IA-LABEL: atomic_store_f32_unordered:568; RV32IA:       # %bb.0:569; RV32IA-NEXT:    fmv.x.w a1, fa0570; RV32IA-NEXT:    sw a1, 0(a0)571; RV32IA-NEXT:    ret572;573; RV64I-LABEL: atomic_store_f32_unordered:574; RV64I:       # %bb.0:575; RV64I-NEXT:    addi sp, sp, -16576; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill577; RV64I-NEXT:    li a2, 0578; RV64I-NEXT:    call __atomic_store_4579; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload580; RV64I-NEXT:    addi sp, sp, 16581; RV64I-NEXT:    ret582;583; RV64IA-LABEL: atomic_store_f32_unordered:584; RV64IA:       # %bb.0:585; RV64IA-NEXT:    fmv.x.w a1, fa0586; RV64IA-NEXT:    sw a1, 0(a0)587; RV64IA-NEXT:    ret588  store atomic float %b, ptr %a unordered, align 4589  ret void590}591 592define void @atomic_store_f32_monotonic(ptr %a, float %b) nounwind {593; RV32I-LABEL: atomic_store_f32_monotonic:594; RV32I:       # %bb.0:595; RV32I-NEXT:    addi sp, sp, -16596; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill597; RV32I-NEXT:    fmv.x.w a1, fa0598; RV32I-NEXT:    li a2, 0599; RV32I-NEXT:    call __atomic_store_4600; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload601; RV32I-NEXT:    addi sp, sp, 16602; RV32I-NEXT:    ret603;604; RV32IA-LABEL: atomic_store_f32_monotonic:605; RV32IA:       # %bb.0:606; RV32IA-NEXT:    fmv.x.w a1, fa0607; RV32IA-NEXT:    sw a1, 0(a0)608; RV32IA-NEXT:    ret609;610; RV64I-LABEL: atomic_store_f32_monotonic:611; RV64I:       # %bb.0:612; RV64I-NEXT:    addi sp, sp, -16613; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill614; RV64I-NEXT:    li a2, 0615; RV64I-NEXT:    call __atomic_store_4616; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload617; RV64I-NEXT:    addi sp, sp, 16618; RV64I-NEXT:    ret619;620; RV64IA-LABEL: atomic_store_f32_monotonic:621; RV64IA:       # %bb.0:622; RV64IA-NEXT:    fmv.x.w a1, fa0623; RV64IA-NEXT:    sw a1, 0(a0)624; RV64IA-NEXT:    ret625  store atomic float %b, ptr %a monotonic, align 4626  ret void627}628 629define void @atomic_store_f32_release(ptr %a, float %b) nounwind {630; RV32I-LABEL: atomic_store_f32_release:631; RV32I:       # %bb.0:632; RV32I-NEXT:    addi sp, sp, -16633; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill634; RV32I-NEXT:    li a2, 3635; RV32I-NEXT:    fmv.x.w a1, fa0636; RV32I-NEXT:    call __atomic_store_4637; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload638; RV32I-NEXT:    addi sp, sp, 16639; RV32I-NEXT:    ret640;641; RV32IA-WMO-LABEL: atomic_store_f32_release:642; RV32IA-WMO:       # %bb.0:643; RV32IA-WMO-NEXT:    fence rw, w644; RV32IA-WMO-NEXT:    fmv.x.w a1, fa0645; RV32IA-WMO-NEXT:    sw a1, 0(a0)646; RV32IA-WMO-NEXT:    ret647;648; RV32IA-TSO-LABEL: atomic_store_f32_release:649; RV32IA-TSO:       # %bb.0:650; RV32IA-TSO-NEXT:    fmv.x.w a1, fa0651; RV32IA-TSO-NEXT:    sw a1, 0(a0)652; RV32IA-TSO-NEXT:    ret653;654; RV64I-LABEL: atomic_store_f32_release:655; RV64I:       # %bb.0:656; RV64I-NEXT:    addi sp, sp, -16657; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill658; RV64I-NEXT:    li a2, 3659; RV64I-NEXT:    call __atomic_store_4660; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload661; RV64I-NEXT:    addi sp, sp, 16662; RV64I-NEXT:    ret663;664; RV64IA-WMO-LABEL: atomic_store_f32_release:665; RV64IA-WMO:       # %bb.0:666; RV64IA-WMO-NEXT:    fence rw, w667; RV64IA-WMO-NEXT:    fmv.x.w a1, fa0668; RV64IA-WMO-NEXT:    sw a1, 0(a0)669; RV64IA-WMO-NEXT:    ret670;671; RV64IA-TSO-LABEL: atomic_store_f32_release:672; RV64IA-TSO:       # %bb.0:673; RV64IA-TSO-NEXT:    fmv.x.w a1, fa0674; RV64IA-TSO-NEXT:    sw a1, 0(a0)675; RV64IA-TSO-NEXT:    ret676;677; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_store_f32_release:678; RV32IA-WMO-TRAILING-FENCE:       # %bb.0:679; RV32IA-WMO-TRAILING-FENCE-NEXT:    fence rw, w680; RV32IA-WMO-TRAILING-FENCE-NEXT:    fmv.x.w a1, fa0681; RV32IA-WMO-TRAILING-FENCE-NEXT:    sw a1, 0(a0)682; RV32IA-WMO-TRAILING-FENCE-NEXT:    ret683;684; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_store_f32_release:685; RV32IA-TSO-TRAILING-FENCE:       # %bb.0:686; RV32IA-TSO-TRAILING-FENCE-NEXT:    fmv.x.w a1, fa0687; RV32IA-TSO-TRAILING-FENCE-NEXT:    sw a1, 0(a0)688; RV32IA-TSO-TRAILING-FENCE-NEXT:    ret689;690; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_store_f32_release:691; RV64IA-WMO-TRAILING-FENCE:       # %bb.0:692; RV64IA-WMO-TRAILING-FENCE-NEXT:    fence rw, w693; RV64IA-WMO-TRAILING-FENCE-NEXT:    fmv.x.w a1, fa0694; RV64IA-WMO-TRAILING-FENCE-NEXT:    sw a1, 0(a0)695; RV64IA-WMO-TRAILING-FENCE-NEXT:    ret696;697; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_store_f32_release:698; RV64IA-TSO-TRAILING-FENCE:       # %bb.0:699; RV64IA-TSO-TRAILING-FENCE-NEXT:    fmv.x.w a1, fa0700; RV64IA-TSO-TRAILING-FENCE-NEXT:    sw a1, 0(a0)701; RV64IA-TSO-TRAILING-FENCE-NEXT:    ret702;703; RV32IA-ZALASR-WMO-LABEL: atomic_store_f32_release:704; RV32IA-ZALASR-WMO:       # %bb.0:705; RV32IA-ZALASR-WMO-NEXT:    fmv.x.w a1, fa0706; RV32IA-ZALASR-WMO-NEXT:    sw.rl a1, (a0)707; RV32IA-ZALASR-WMO-NEXT:    ret708;709; RV32IA-ZALASR-TSO-LABEL: atomic_store_f32_release:710; RV32IA-ZALASR-TSO:       # %bb.0:711; RV32IA-ZALASR-TSO-NEXT:    fmv.x.w a1, fa0712; RV32IA-ZALASR-TSO-NEXT:    sw a1, 0(a0)713; RV32IA-ZALASR-TSO-NEXT:    ret714;715; RV64IA-ZALASR-WMO-LABEL: atomic_store_f32_release:716; RV64IA-ZALASR-WMO:       # %bb.0:717; RV64IA-ZALASR-WMO-NEXT:    fmv.x.w a1, fa0718; RV64IA-ZALASR-WMO-NEXT:    sw.rl a1, (a0)719; RV64IA-ZALASR-WMO-NEXT:    ret720;721; RV64IA-ZALASR-TSO-LABEL: atomic_store_f32_release:722; RV64IA-ZALASR-TSO:       # %bb.0:723; RV64IA-ZALASR-TSO-NEXT:    fmv.x.w a1, fa0724; RV64IA-ZALASR-TSO-NEXT:    sw a1, 0(a0)725; RV64IA-ZALASR-TSO-NEXT:    ret726  store atomic float %b, ptr %a release, align 4727  ret void728}729 730define void @atomic_store_f32_seq_cst(ptr %a, float %b) nounwind {731; RV32I-LABEL: atomic_store_f32_seq_cst:732; RV32I:       # %bb.0:733; RV32I-NEXT:    addi sp, sp, -16734; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill735; RV32I-NEXT:    li a2, 5736; RV32I-NEXT:    fmv.x.w a1, fa0737; RV32I-NEXT:    call __atomic_store_4738; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload739; RV32I-NEXT:    addi sp, sp, 16740; RV32I-NEXT:    ret741;742; RV32IA-WMO-LABEL: atomic_store_f32_seq_cst:743; RV32IA-WMO:       # %bb.0:744; RV32IA-WMO-NEXT:    fence rw, w745; RV32IA-WMO-NEXT:    fmv.x.w a1, fa0746; RV32IA-WMO-NEXT:    sw a1, 0(a0)747; RV32IA-WMO-NEXT:    ret748;749; RV32IA-TSO-LABEL: atomic_store_f32_seq_cst:750; RV32IA-TSO:       # %bb.0:751; RV32IA-TSO-NEXT:    fmv.x.w a1, fa0752; RV32IA-TSO-NEXT:    sw a1, 0(a0)753; RV32IA-TSO-NEXT:    fence rw, rw754; RV32IA-TSO-NEXT:    ret755;756; RV64I-LABEL: atomic_store_f32_seq_cst:757; RV64I:       # %bb.0:758; RV64I-NEXT:    addi sp, sp, -16759; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill760; RV64I-NEXT:    li a2, 5761; RV64I-NEXT:    call __atomic_store_4762; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload763; RV64I-NEXT:    addi sp, sp, 16764; RV64I-NEXT:    ret765;766; RV64IA-WMO-LABEL: atomic_store_f32_seq_cst:767; RV64IA-WMO:       # %bb.0:768; RV64IA-WMO-NEXT:    fence rw, w769; RV64IA-WMO-NEXT:    fmv.x.w a1, fa0770; RV64IA-WMO-NEXT:    sw a1, 0(a0)771; RV64IA-WMO-NEXT:    ret772;773; RV64IA-TSO-LABEL: atomic_store_f32_seq_cst:774; RV64IA-TSO:       # %bb.0:775; RV64IA-TSO-NEXT:    fmv.x.w a1, fa0776; RV64IA-TSO-NEXT:    sw a1, 0(a0)777; RV64IA-TSO-NEXT:    fence rw, rw778; RV64IA-TSO-NEXT:    ret779;780; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_store_f32_seq_cst:781; RV32IA-WMO-TRAILING-FENCE:       # %bb.0:782; RV32IA-WMO-TRAILING-FENCE-NEXT:    fence rw, w783; RV32IA-WMO-TRAILING-FENCE-NEXT:    fmv.x.w a1, fa0784; RV32IA-WMO-TRAILING-FENCE-NEXT:    sw a1, 0(a0)785; RV32IA-WMO-TRAILING-FENCE-NEXT:    fence rw, rw786; RV32IA-WMO-TRAILING-FENCE-NEXT:    ret787;788; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_store_f32_seq_cst:789; RV32IA-TSO-TRAILING-FENCE:       # %bb.0:790; RV32IA-TSO-TRAILING-FENCE-NEXT:    fmv.x.w a1, fa0791; RV32IA-TSO-TRAILING-FENCE-NEXT:    sw a1, 0(a0)792; RV32IA-TSO-TRAILING-FENCE-NEXT:    fence rw, rw793; RV32IA-TSO-TRAILING-FENCE-NEXT:    ret794;795; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_store_f32_seq_cst:796; RV64IA-WMO-TRAILING-FENCE:       # %bb.0:797; RV64IA-WMO-TRAILING-FENCE-NEXT:    fence rw, w798; RV64IA-WMO-TRAILING-FENCE-NEXT:    fmv.x.w a1, fa0799; RV64IA-WMO-TRAILING-FENCE-NEXT:    sw a1, 0(a0)800; RV64IA-WMO-TRAILING-FENCE-NEXT:    fence rw, rw801; RV64IA-WMO-TRAILING-FENCE-NEXT:    ret802;803; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_store_f32_seq_cst:804; RV64IA-TSO-TRAILING-FENCE:       # %bb.0:805; RV64IA-TSO-TRAILING-FENCE-NEXT:    fmv.x.w a1, fa0806; RV64IA-TSO-TRAILING-FENCE-NEXT:    sw a1, 0(a0)807; RV64IA-TSO-TRAILING-FENCE-NEXT:    fence rw, rw808; RV64IA-TSO-TRAILING-FENCE-NEXT:    ret809;810; RV32IA-ZALASR-LABEL: atomic_store_f32_seq_cst:811; RV32IA-ZALASR:       # %bb.0:812; RV32IA-ZALASR-NEXT:    fmv.x.w a1, fa0813; RV32IA-ZALASR-NEXT:    sw.rl a1, (a0)814; RV32IA-ZALASR-NEXT:    ret815;816; RV64IA-ZALASR-LABEL: atomic_store_f32_seq_cst:817; RV64IA-ZALASR:       # %bb.0:818; RV64IA-ZALASR-NEXT:    fmv.x.w a1, fa0819; RV64IA-ZALASR-NEXT:    sw.rl a1, (a0)820; RV64IA-ZALASR-NEXT:    ret821  store atomic float %b, ptr %a seq_cst, align 4822  ret void823}824 825define void @atomic_store_f64_unordered(ptr %a, double %b) nounwind {826; RV32I-LABEL: atomic_store_f64_unordered:827; RV32I:       # %bb.0:828; RV32I-NEXT:    addi sp, sp, -16829; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill830; RV32I-NEXT:    fsd fa0, 0(sp)831; RV32I-NEXT:    lw a1, 0(sp)832; RV32I-NEXT:    lw a2, 4(sp)833; RV32I-NEXT:    li a3, 0834; RV32I-NEXT:    call __atomic_store_8835; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload836; RV32I-NEXT:    addi sp, sp, 16837; RV32I-NEXT:    ret838;839; RV32IA-LABEL: atomic_store_f64_unordered:840; RV32IA:       # %bb.0:841; RV32IA-NEXT:    addi sp, sp, -16842; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill843; RV32IA-NEXT:    fsd fa0, 0(sp)844; RV32IA-NEXT:    lw a1, 0(sp)845; RV32IA-NEXT:    lw a2, 4(sp)846; RV32IA-NEXT:    li a3, 0847; RV32IA-NEXT:    call __atomic_store_8848; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload849; RV32IA-NEXT:    addi sp, sp, 16850; RV32IA-NEXT:    ret851;852; RV64I-LABEL: atomic_store_f64_unordered:853; RV64I:       # %bb.0:854; RV64I-NEXT:    addi sp, sp, -16855; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill856; RV64I-NEXT:    li a2, 0857; RV64I-NEXT:    call __atomic_store_8858; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload859; RV64I-NEXT:    addi sp, sp, 16860; RV64I-NEXT:    ret861;862; RV64IA-LABEL: atomic_store_f64_unordered:863; RV64IA:       # %bb.0:864; RV64IA-NEXT:    fmv.x.d a1, fa0865; RV64IA-NEXT:    sd a1, 0(a0)866; RV64IA-NEXT:    ret867  store atomic double %b, ptr %a unordered, align 8868  ret void869}870 871define void @atomic_store_f64_monotonic(ptr %a, double %b) nounwind {872; RV32I-LABEL: atomic_store_f64_monotonic:873; RV32I:       # %bb.0:874; RV32I-NEXT:    addi sp, sp, -16875; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill876; RV32I-NEXT:    fsd fa0, 0(sp)877; RV32I-NEXT:    lw a1, 0(sp)878; RV32I-NEXT:    lw a2, 4(sp)879; RV32I-NEXT:    li a3, 0880; RV32I-NEXT:    call __atomic_store_8881; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload882; RV32I-NEXT:    addi sp, sp, 16883; RV32I-NEXT:    ret884;885; RV32IA-LABEL: atomic_store_f64_monotonic:886; RV32IA:       # %bb.0:887; RV32IA-NEXT:    addi sp, sp, -16888; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill889; RV32IA-NEXT:    fsd fa0, 0(sp)890; RV32IA-NEXT:    lw a1, 0(sp)891; RV32IA-NEXT:    lw a2, 4(sp)892; RV32IA-NEXT:    li a3, 0893; RV32IA-NEXT:    call __atomic_store_8894; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload895; RV32IA-NEXT:    addi sp, sp, 16896; RV32IA-NEXT:    ret897;898; RV64I-LABEL: atomic_store_f64_monotonic:899; RV64I:       # %bb.0:900; RV64I-NEXT:    addi sp, sp, -16901; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill902; RV64I-NEXT:    li a2, 0903; RV64I-NEXT:    call __atomic_store_8904; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload905; RV64I-NEXT:    addi sp, sp, 16906; RV64I-NEXT:    ret907;908; RV64IA-LABEL: atomic_store_f64_monotonic:909; RV64IA:       # %bb.0:910; RV64IA-NEXT:    fmv.x.d a1, fa0911; RV64IA-NEXT:    sd a1, 0(a0)912; RV64IA-NEXT:    ret913  store atomic double %b, ptr %a monotonic, align 8914  ret void915}916 917define void @atomic_store_f64_release(ptr %a, double %b) nounwind {918; RV32I-LABEL: atomic_store_f64_release:919; RV32I:       # %bb.0:920; RV32I-NEXT:    addi sp, sp, -16921; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill922; RV32I-NEXT:    fsd fa0, 0(sp)923; RV32I-NEXT:    lw a1, 0(sp)924; RV32I-NEXT:    lw a2, 4(sp)925; RV32I-NEXT:    li a3, 3926; RV32I-NEXT:    call __atomic_store_8927; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload928; RV32I-NEXT:    addi sp, sp, 16929; RV32I-NEXT:    ret930;931; RV32IA-LABEL: atomic_store_f64_release:932; RV32IA:       # %bb.0:933; RV32IA-NEXT:    addi sp, sp, -16934; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill935; RV32IA-NEXT:    fsd fa0, 0(sp)936; RV32IA-NEXT:    lw a1, 0(sp)937; RV32IA-NEXT:    lw a2, 4(sp)938; RV32IA-NEXT:    li a3, 3939; RV32IA-NEXT:    call __atomic_store_8940; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload941; RV32IA-NEXT:    addi sp, sp, 16942; RV32IA-NEXT:    ret943;944; RV64I-LABEL: atomic_store_f64_release:945; RV64I:       # %bb.0:946; RV64I-NEXT:    addi sp, sp, -16947; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill948; RV64I-NEXT:    li a2, 3949; RV64I-NEXT:    call __atomic_store_8950; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload951; RV64I-NEXT:    addi sp, sp, 16952; RV64I-NEXT:    ret953;954; RV64IA-WMO-LABEL: atomic_store_f64_release:955; RV64IA-WMO:       # %bb.0:956; RV64IA-WMO-NEXT:    fence rw, w957; RV64IA-WMO-NEXT:    fmv.x.d a1, fa0958; RV64IA-WMO-NEXT:    sd a1, 0(a0)959; RV64IA-WMO-NEXT:    ret960;961; RV64IA-TSO-LABEL: atomic_store_f64_release:962; RV64IA-TSO:       # %bb.0:963; RV64IA-TSO-NEXT:    fmv.x.d a1, fa0964; RV64IA-TSO-NEXT:    sd a1, 0(a0)965; RV64IA-TSO-NEXT:    ret966;967; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_store_f64_release:968; RV64IA-WMO-TRAILING-FENCE:       # %bb.0:969; RV64IA-WMO-TRAILING-FENCE-NEXT:    fence rw, w970; RV64IA-WMO-TRAILING-FENCE-NEXT:    fmv.x.d a1, fa0971; RV64IA-WMO-TRAILING-FENCE-NEXT:    sd a1, 0(a0)972; RV64IA-WMO-TRAILING-FENCE-NEXT:    ret973;974; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_store_f64_release:975; RV64IA-TSO-TRAILING-FENCE:       # %bb.0:976; RV64IA-TSO-TRAILING-FENCE-NEXT:    fmv.x.d a1, fa0977; RV64IA-TSO-TRAILING-FENCE-NEXT:    sd a1, 0(a0)978; RV64IA-TSO-TRAILING-FENCE-NEXT:    ret979;980; RV64IA-ZALASR-WMO-LABEL: atomic_store_f64_release:981; RV64IA-ZALASR-WMO:       # %bb.0:982; RV64IA-ZALASR-WMO-NEXT:    fmv.x.d a1, fa0983; RV64IA-ZALASR-WMO-NEXT:    sd.rl a1, (a0)984; RV64IA-ZALASR-WMO-NEXT:    ret985;986; RV64IA-ZALASR-TSO-LABEL: atomic_store_f64_release:987; RV64IA-ZALASR-TSO:       # %bb.0:988; RV64IA-ZALASR-TSO-NEXT:    fmv.x.d a1, fa0989; RV64IA-ZALASR-TSO-NEXT:    sd a1, 0(a0)990; RV64IA-ZALASR-TSO-NEXT:    ret991  store atomic double %b, ptr %a release, align 8992  ret void993}994 995define void @atomic_store_f64_seq_cst(ptr %a, double %b) nounwind {996; RV32I-LABEL: atomic_store_f64_seq_cst:997; RV32I:       # %bb.0:998; RV32I-NEXT:    addi sp, sp, -16999; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1000; RV32I-NEXT:    fsd fa0, 0(sp)1001; RV32I-NEXT:    lw a1, 0(sp)1002; RV32I-NEXT:    lw a2, 4(sp)1003; RV32I-NEXT:    li a3, 51004; RV32I-NEXT:    call __atomic_store_81005; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1006; RV32I-NEXT:    addi sp, sp, 161007; RV32I-NEXT:    ret1008;1009; RV32IA-LABEL: atomic_store_f64_seq_cst:1010; RV32IA:       # %bb.0:1011; RV32IA-NEXT:    addi sp, sp, -161012; RV32IA-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1013; RV32IA-NEXT:    fsd fa0, 0(sp)1014; RV32IA-NEXT:    lw a1, 0(sp)1015; RV32IA-NEXT:    lw a2, 4(sp)1016; RV32IA-NEXT:    li a3, 51017; RV32IA-NEXT:    call __atomic_store_81018; RV32IA-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1019; RV32IA-NEXT:    addi sp, sp, 161020; RV32IA-NEXT:    ret1021;1022; RV64I-LABEL: atomic_store_f64_seq_cst:1023; RV64I:       # %bb.0:1024; RV64I-NEXT:    addi sp, sp, -161025; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1026; RV64I-NEXT:    li a2, 51027; RV64I-NEXT:    call __atomic_store_81028; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1029; RV64I-NEXT:    addi sp, sp, 161030; RV64I-NEXT:    ret1031;1032; RV64IA-WMO-LABEL: atomic_store_f64_seq_cst:1033; RV64IA-WMO:       # %bb.0:1034; RV64IA-WMO-NEXT:    fence rw, w1035; RV64IA-WMO-NEXT:    fmv.x.d a1, fa01036; RV64IA-WMO-NEXT:    sd a1, 0(a0)1037; RV64IA-WMO-NEXT:    ret1038;1039; RV64IA-TSO-LABEL: atomic_store_f64_seq_cst:1040; RV64IA-TSO:       # %bb.0:1041; RV64IA-TSO-NEXT:    fmv.x.d a1, fa01042; RV64IA-TSO-NEXT:    sd a1, 0(a0)1043; RV64IA-TSO-NEXT:    fence rw, rw1044; RV64IA-TSO-NEXT:    ret1045;1046; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_store_f64_seq_cst:1047; RV64IA-WMO-TRAILING-FENCE:       # %bb.0:1048; RV64IA-WMO-TRAILING-FENCE-NEXT:    fence rw, w1049; RV64IA-WMO-TRAILING-FENCE-NEXT:    fmv.x.d a1, fa01050; RV64IA-WMO-TRAILING-FENCE-NEXT:    sd a1, 0(a0)1051; RV64IA-WMO-TRAILING-FENCE-NEXT:    fence rw, rw1052; RV64IA-WMO-TRAILING-FENCE-NEXT:    ret1053;1054; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_store_f64_seq_cst:1055; RV64IA-TSO-TRAILING-FENCE:       # %bb.0:1056; RV64IA-TSO-TRAILING-FENCE-NEXT:    fmv.x.d a1, fa01057; RV64IA-TSO-TRAILING-FENCE-NEXT:    sd a1, 0(a0)1058; RV64IA-TSO-TRAILING-FENCE-NEXT:    fence rw, rw1059; RV64IA-TSO-TRAILING-FENCE-NEXT:    ret1060;1061; RV64IA-ZALASR-LABEL: atomic_store_f64_seq_cst:1062; RV64IA-ZALASR:       # %bb.0:1063; RV64IA-ZALASR-NEXT:    fmv.x.d a1, fa01064; RV64IA-ZALASR-NEXT:    sd.rl a1, (a0)1065; RV64IA-ZALASR-NEXT:    ret1066  store atomic double %b, ptr %a seq_cst, align 81067  ret void1068}1069