1898 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -global-isel -verify-machineinstrs < %s \3; RUN: | FileCheck -check-prefix=RV32I %s4; RUN: llc -mtriple=riscv32 -global-isel -mattr=+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=+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=+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=+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=+a -verify-machineinstrs < %s \17; RUN: | FileCheck -check-prefixes=RV32IA,RV32IA-WMO-TRAILING-FENCE %s18; RUN: llc -mtriple=riscv32 -global-isel -mattr=+a,+ztso -verify-machineinstrs < %s \19; RUN: | FileCheck -check-prefixes=RV32IA,RV32IA-TSO-TRAILING-FENCE %s20 21; RUN: llc -mtriple=riscv64 -global-isel -mattr=+a -verify-machineinstrs < %s \22; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-WMO-TRAILING-FENCE %s23; RUN: llc -mtriple=riscv64 -global-isel -mattr=+a,+ztso -verify-machineinstrs < %s \24; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-TSO-TRAILING-FENCE %s25 26; RUN: llc -mtriple=riscv32 -global-isel -mattr=+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=+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=+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=+a,+experimental-zalasr,+ztso -verify-machineinstrs < %s \34; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-ZALASR,RV64IA-ZALASR-TSO %s35 36define i8 @atomic_load_i8_unordered(ptr %a) nounwind {37; RV32I-LABEL: atomic_load_i8_unordered:38; RV32I: # %bb.0:39; RV32I-NEXT: addi sp, sp, -1640; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill41; RV32I-NEXT: li a1, 042; RV32I-NEXT: call __atomic_load_143; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload44; RV32I-NEXT: addi sp, sp, 1645; RV32I-NEXT: ret46;47; RV32IA-LABEL: atomic_load_i8_unordered:48; RV32IA: # %bb.0:49; RV32IA-NEXT: lbu a0, 0(a0)50; RV32IA-NEXT: ret51;52; RV64I-LABEL: atomic_load_i8_unordered:53; RV64I: # %bb.0:54; RV64I-NEXT: addi sp, sp, -1655; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill56; RV64I-NEXT: li a1, 057; RV64I-NEXT: call __atomic_load_158; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload59; RV64I-NEXT: addi sp, sp, 1660; RV64I-NEXT: ret61;62; RV64IA-LABEL: atomic_load_i8_unordered:63; RV64IA: # %bb.0:64; RV64IA-NEXT: lbu a0, 0(a0)65; RV64IA-NEXT: ret66 %1 = load atomic i8, ptr %a unordered, align 167 ret i8 %168}69 70define i8 @atomic_load_i8_monotonic(ptr %a) nounwind {71; RV32I-LABEL: atomic_load_i8_monotonic:72; RV32I: # %bb.0:73; RV32I-NEXT: addi sp, sp, -1674; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill75; RV32I-NEXT: li a1, 076; RV32I-NEXT: call __atomic_load_177; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload78; RV32I-NEXT: addi sp, sp, 1679; RV32I-NEXT: ret80;81; RV32IA-LABEL: atomic_load_i8_monotonic:82; RV32IA: # %bb.0:83; RV32IA-NEXT: lbu a0, 0(a0)84; RV32IA-NEXT: ret85;86; RV64I-LABEL: atomic_load_i8_monotonic:87; RV64I: # %bb.0:88; RV64I-NEXT: addi sp, sp, -1689; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill90; RV64I-NEXT: li a1, 091; RV64I-NEXT: call __atomic_load_192; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload93; RV64I-NEXT: addi sp, sp, 1694; RV64I-NEXT: ret95;96; RV64IA-LABEL: atomic_load_i8_monotonic:97; RV64IA: # %bb.0:98; RV64IA-NEXT: lbu a0, 0(a0)99; RV64IA-NEXT: ret100 %1 = load atomic i8, ptr %a monotonic, align 1101 ret i8 %1102}103 104define i8 @atomic_load_i8_acquire(ptr %a) nounwind {105; RV32I-LABEL: atomic_load_i8_acquire:106; RV32I: # %bb.0:107; RV32I-NEXT: addi sp, sp, -16108; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill109; RV32I-NEXT: li a1, 2110; RV32I-NEXT: call __atomic_load_1111; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload112; RV32I-NEXT: addi sp, sp, 16113; RV32I-NEXT: ret114;115; RV32IA-WMO-LABEL: atomic_load_i8_acquire:116; RV32IA-WMO: # %bb.0:117; RV32IA-WMO-NEXT: lbu a0, 0(a0)118; RV32IA-WMO-NEXT: fence r, rw119; RV32IA-WMO-NEXT: ret120;121; RV32IA-TSO-LABEL: atomic_load_i8_acquire:122; RV32IA-TSO: # %bb.0:123; RV32IA-TSO-NEXT: lbu a0, 0(a0)124; RV32IA-TSO-NEXT: ret125;126; RV64I-LABEL: atomic_load_i8_acquire:127; RV64I: # %bb.0:128; RV64I-NEXT: addi sp, sp, -16129; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill130; RV64I-NEXT: li a1, 2131; RV64I-NEXT: call __atomic_load_1132; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload133; RV64I-NEXT: addi sp, sp, 16134; RV64I-NEXT: ret135;136; RV64IA-WMO-LABEL: atomic_load_i8_acquire:137; RV64IA-WMO: # %bb.0:138; RV64IA-WMO-NEXT: lbu a0, 0(a0)139; RV64IA-WMO-NEXT: fence r, rw140; RV64IA-WMO-NEXT: ret141;142; RV64IA-TSO-LABEL: atomic_load_i8_acquire:143; RV64IA-TSO: # %bb.0:144; RV64IA-TSO-NEXT: lbu a0, 0(a0)145; RV64IA-TSO-NEXT: ret146;147; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i8_acquire:148; RV32IA-WMO-TRAILING-FENCE: # %bb.0:149; RV32IA-WMO-TRAILING-FENCE-NEXT: lbu a0, 0(a0)150; RV32IA-WMO-TRAILING-FENCE-NEXT: fence r, rw151; RV32IA-WMO-TRAILING-FENCE-NEXT: ret152;153; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i8_acquire:154; RV32IA-TSO-TRAILING-FENCE: # %bb.0:155; RV32IA-TSO-TRAILING-FENCE-NEXT: lbu a0, 0(a0)156; RV32IA-TSO-TRAILING-FENCE-NEXT: ret157;158; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i8_acquire:159; RV64IA-WMO-TRAILING-FENCE: # %bb.0:160; RV64IA-WMO-TRAILING-FENCE-NEXT: lbu a0, 0(a0)161; RV64IA-WMO-TRAILING-FENCE-NEXT: fence r, rw162; RV64IA-WMO-TRAILING-FENCE-NEXT: ret163;164; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i8_acquire:165; RV64IA-TSO-TRAILING-FENCE: # %bb.0:166; RV64IA-TSO-TRAILING-FENCE-NEXT: lbu a0, 0(a0)167; RV64IA-TSO-TRAILING-FENCE-NEXT: ret168;169; RV32IA-ZALASR-WMO-LABEL: atomic_load_i8_acquire:170; RV32IA-ZALASR-WMO: # %bb.0:171; RV32IA-ZALASR-WMO-NEXT: lb.aq a0, (a0)172; RV32IA-ZALASR-WMO-NEXT: ret173;174; RV32IA-ZALASR-TSO-LABEL: atomic_load_i8_acquire:175; RV32IA-ZALASR-TSO: # %bb.0:176; RV32IA-ZALASR-TSO-NEXT: lbu a0, 0(a0)177; RV32IA-ZALASR-TSO-NEXT: ret178;179; RV64IA-ZALASR-WMO-LABEL: atomic_load_i8_acquire:180; RV64IA-ZALASR-WMO: # %bb.0:181; RV64IA-ZALASR-WMO-NEXT: lb.aq a0, (a0)182; RV64IA-ZALASR-WMO-NEXT: ret183;184; RV64IA-ZALASR-TSO-LABEL: atomic_load_i8_acquire:185; RV64IA-ZALASR-TSO: # %bb.0:186; RV64IA-ZALASR-TSO-NEXT: lbu a0, 0(a0)187; RV64IA-ZALASR-TSO-NEXT: ret188 %1 = load atomic i8, ptr %a acquire, align 1189 ret i8 %1190}191 192define i8 @atomic_load_i8_seq_cst(ptr %a) nounwind {193; RV32I-LABEL: atomic_load_i8_seq_cst:194; RV32I: # %bb.0:195; RV32I-NEXT: addi sp, sp, -16196; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill197; RV32I-NEXT: li a1, 5198; RV32I-NEXT: call __atomic_load_1199; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload200; RV32I-NEXT: addi sp, sp, 16201; RV32I-NEXT: ret202;203; RV32IA-WMO-LABEL: atomic_load_i8_seq_cst:204; RV32IA-WMO: # %bb.0:205; RV32IA-WMO-NEXT: fence rw, rw206; RV32IA-WMO-NEXT: lbu a0, 0(a0)207; RV32IA-WMO-NEXT: fence r, rw208; RV32IA-WMO-NEXT: ret209;210; RV32IA-TSO-LABEL: atomic_load_i8_seq_cst:211; RV32IA-TSO: # %bb.0:212; RV32IA-TSO-NEXT: fence rw, rw213; RV32IA-TSO-NEXT: lbu a0, 0(a0)214; RV32IA-TSO-NEXT: ret215;216; RV64I-LABEL: atomic_load_i8_seq_cst:217; RV64I: # %bb.0:218; RV64I-NEXT: addi sp, sp, -16219; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill220; RV64I-NEXT: li a1, 5221; RV64I-NEXT: call __atomic_load_1222; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload223; RV64I-NEXT: addi sp, sp, 16224; RV64I-NEXT: ret225;226; RV64IA-WMO-LABEL: atomic_load_i8_seq_cst:227; RV64IA-WMO: # %bb.0:228; RV64IA-WMO-NEXT: fence rw, rw229; RV64IA-WMO-NEXT: lbu a0, 0(a0)230; RV64IA-WMO-NEXT: fence r, rw231; RV64IA-WMO-NEXT: ret232;233; RV64IA-TSO-LABEL: atomic_load_i8_seq_cst:234; RV64IA-TSO: # %bb.0:235; RV64IA-TSO-NEXT: fence rw, rw236; RV64IA-TSO-NEXT: lbu a0, 0(a0)237; RV64IA-TSO-NEXT: ret238;239; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i8_seq_cst:240; RV32IA-WMO-TRAILING-FENCE: # %bb.0:241; RV32IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw242; RV32IA-WMO-TRAILING-FENCE-NEXT: lbu a0, 0(a0)243; RV32IA-WMO-TRAILING-FENCE-NEXT: fence r, rw244; RV32IA-WMO-TRAILING-FENCE-NEXT: ret245;246; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i8_seq_cst:247; RV32IA-TSO-TRAILING-FENCE: # %bb.0:248; RV32IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw249; RV32IA-TSO-TRAILING-FENCE-NEXT: lbu a0, 0(a0)250; RV32IA-TSO-TRAILING-FENCE-NEXT: ret251;252; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i8_seq_cst:253; RV64IA-WMO-TRAILING-FENCE: # %bb.0:254; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw255; RV64IA-WMO-TRAILING-FENCE-NEXT: lbu a0, 0(a0)256; RV64IA-WMO-TRAILING-FENCE-NEXT: fence r, rw257; RV64IA-WMO-TRAILING-FENCE-NEXT: ret258;259; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i8_seq_cst:260; RV64IA-TSO-TRAILING-FENCE: # %bb.0:261; RV64IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw262; RV64IA-TSO-TRAILING-FENCE-NEXT: lbu a0, 0(a0)263; RV64IA-TSO-TRAILING-FENCE-NEXT: ret264;265; RV32IA-ZALASR-LABEL: atomic_load_i8_seq_cst:266; RV32IA-ZALASR: # %bb.0:267; RV32IA-ZALASR-NEXT: lb.aq a0, (a0)268; RV32IA-ZALASR-NEXT: ret269;270; RV64IA-ZALASR-LABEL: atomic_load_i8_seq_cst:271; RV64IA-ZALASR: # %bb.0:272; RV64IA-ZALASR-NEXT: lb.aq a0, (a0)273; RV64IA-ZALASR-NEXT: ret274 %1 = load atomic i8, ptr %a seq_cst, align 1275 ret i8 %1276}277 278define i16 @atomic_load_i16_unordered(ptr %a) nounwind {279; RV32I-LABEL: atomic_load_i16_unordered:280; RV32I: # %bb.0:281; RV32I-NEXT: addi sp, sp, -16282; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill283; RV32I-NEXT: li a1, 0284; RV32I-NEXT: call __atomic_load_2285; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload286; RV32I-NEXT: addi sp, sp, 16287; RV32I-NEXT: ret288;289; RV32IA-LABEL: atomic_load_i16_unordered:290; RV32IA: # %bb.0:291; RV32IA-NEXT: lh a0, 0(a0)292; RV32IA-NEXT: ret293;294; RV64I-LABEL: atomic_load_i16_unordered:295; RV64I: # %bb.0:296; RV64I-NEXT: addi sp, sp, -16297; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill298; RV64I-NEXT: li a1, 0299; RV64I-NEXT: call __atomic_load_2300; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload301; RV64I-NEXT: addi sp, sp, 16302; RV64I-NEXT: ret303;304; RV64IA-LABEL: atomic_load_i16_unordered:305; RV64IA: # %bb.0:306; RV64IA-NEXT: lh a0, 0(a0)307; RV64IA-NEXT: ret308 %1 = load atomic i16, ptr %a unordered, align 2309 ret i16 %1310}311 312define i16 @atomic_load_i16_monotonic(ptr %a) nounwind {313; RV32I-LABEL: atomic_load_i16_monotonic:314; RV32I: # %bb.0:315; RV32I-NEXT: addi sp, sp, -16316; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill317; RV32I-NEXT: li a1, 0318; RV32I-NEXT: call __atomic_load_2319; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload320; RV32I-NEXT: addi sp, sp, 16321; RV32I-NEXT: ret322;323; RV32IA-LABEL: atomic_load_i16_monotonic:324; RV32IA: # %bb.0:325; RV32IA-NEXT: lh a0, 0(a0)326; RV32IA-NEXT: ret327;328; RV64I-LABEL: atomic_load_i16_monotonic:329; RV64I: # %bb.0:330; RV64I-NEXT: addi sp, sp, -16331; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill332; RV64I-NEXT: li a1, 0333; RV64I-NEXT: call __atomic_load_2334; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload335; RV64I-NEXT: addi sp, sp, 16336; RV64I-NEXT: ret337;338; RV64IA-LABEL: atomic_load_i16_monotonic:339; RV64IA: # %bb.0:340; RV64IA-NEXT: lh a0, 0(a0)341; RV64IA-NEXT: ret342 %1 = load atomic i16, ptr %a monotonic, align 2343 ret i16 %1344}345 346define i16 @atomic_load_i16_acquire(ptr %a) nounwind {347; RV32I-LABEL: atomic_load_i16_acquire:348; RV32I: # %bb.0:349; RV32I-NEXT: addi sp, sp, -16350; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill351; RV32I-NEXT: li a1, 2352; RV32I-NEXT: call __atomic_load_2353; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload354; RV32I-NEXT: addi sp, sp, 16355; RV32I-NEXT: ret356;357; RV32IA-WMO-LABEL: atomic_load_i16_acquire:358; RV32IA-WMO: # %bb.0:359; RV32IA-WMO-NEXT: lh a0, 0(a0)360; RV32IA-WMO-NEXT: fence r, rw361; RV32IA-WMO-NEXT: ret362;363; RV32IA-TSO-LABEL: atomic_load_i16_acquire:364; RV32IA-TSO: # %bb.0:365; RV32IA-TSO-NEXT: lh a0, 0(a0)366; RV32IA-TSO-NEXT: ret367;368; RV64I-LABEL: atomic_load_i16_acquire:369; RV64I: # %bb.0:370; RV64I-NEXT: addi sp, sp, -16371; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill372; RV64I-NEXT: li a1, 2373; RV64I-NEXT: call __atomic_load_2374; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload375; RV64I-NEXT: addi sp, sp, 16376; RV64I-NEXT: ret377;378; RV64IA-WMO-LABEL: atomic_load_i16_acquire:379; RV64IA-WMO: # %bb.0:380; RV64IA-WMO-NEXT: lh a0, 0(a0)381; RV64IA-WMO-NEXT: fence r, rw382; RV64IA-WMO-NEXT: ret383;384; RV64IA-TSO-LABEL: atomic_load_i16_acquire:385; RV64IA-TSO: # %bb.0:386; RV64IA-TSO-NEXT: lh a0, 0(a0)387; RV64IA-TSO-NEXT: ret388;389; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i16_acquire:390; RV32IA-WMO-TRAILING-FENCE: # %bb.0:391; RV32IA-WMO-TRAILING-FENCE-NEXT: lh a0, 0(a0)392; RV32IA-WMO-TRAILING-FENCE-NEXT: fence r, rw393; RV32IA-WMO-TRAILING-FENCE-NEXT: ret394;395; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i16_acquire:396; RV32IA-TSO-TRAILING-FENCE: # %bb.0:397; RV32IA-TSO-TRAILING-FENCE-NEXT: lh a0, 0(a0)398; RV32IA-TSO-TRAILING-FENCE-NEXT: ret399;400; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i16_acquire:401; RV64IA-WMO-TRAILING-FENCE: # %bb.0:402; RV64IA-WMO-TRAILING-FENCE-NEXT: lh a0, 0(a0)403; RV64IA-WMO-TRAILING-FENCE-NEXT: fence r, rw404; RV64IA-WMO-TRAILING-FENCE-NEXT: ret405;406; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i16_acquire:407; RV64IA-TSO-TRAILING-FENCE: # %bb.0:408; RV64IA-TSO-TRAILING-FENCE-NEXT: lh a0, 0(a0)409; RV64IA-TSO-TRAILING-FENCE-NEXT: ret410;411; RV32IA-ZALASR-WMO-LABEL: atomic_load_i16_acquire:412; RV32IA-ZALASR-WMO: # %bb.0:413; RV32IA-ZALASR-WMO-NEXT: lh.aq a0, (a0)414; RV32IA-ZALASR-WMO-NEXT: ret415;416; RV32IA-ZALASR-TSO-LABEL: atomic_load_i16_acquire:417; RV32IA-ZALASR-TSO: # %bb.0:418; RV32IA-ZALASR-TSO-NEXT: lh a0, 0(a0)419; RV32IA-ZALASR-TSO-NEXT: ret420;421; RV64IA-ZALASR-WMO-LABEL: atomic_load_i16_acquire:422; RV64IA-ZALASR-WMO: # %bb.0:423; RV64IA-ZALASR-WMO-NEXT: lh.aq a0, (a0)424; RV64IA-ZALASR-WMO-NEXT: ret425;426; RV64IA-ZALASR-TSO-LABEL: atomic_load_i16_acquire:427; RV64IA-ZALASR-TSO: # %bb.0:428; RV64IA-ZALASR-TSO-NEXT: lh a0, 0(a0)429; RV64IA-ZALASR-TSO-NEXT: ret430 %1 = load atomic i16, ptr %a acquire, align 2431 ret i16 %1432}433 434define i16 @atomic_load_i16_seq_cst(ptr %a) nounwind {435; RV32I-LABEL: atomic_load_i16_seq_cst:436; RV32I: # %bb.0:437; RV32I-NEXT: addi sp, sp, -16438; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill439; RV32I-NEXT: li a1, 5440; RV32I-NEXT: call __atomic_load_2441; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload442; RV32I-NEXT: addi sp, sp, 16443; RV32I-NEXT: ret444;445; RV32IA-WMO-LABEL: atomic_load_i16_seq_cst:446; RV32IA-WMO: # %bb.0:447; RV32IA-WMO-NEXT: fence rw, rw448; RV32IA-WMO-NEXT: lh a0, 0(a0)449; RV32IA-WMO-NEXT: fence r, rw450; RV32IA-WMO-NEXT: ret451;452; RV32IA-TSO-LABEL: atomic_load_i16_seq_cst:453; RV32IA-TSO: # %bb.0:454; RV32IA-TSO-NEXT: fence rw, rw455; RV32IA-TSO-NEXT: lh a0, 0(a0)456; RV32IA-TSO-NEXT: ret457;458; RV64I-LABEL: atomic_load_i16_seq_cst:459; RV64I: # %bb.0:460; RV64I-NEXT: addi sp, sp, -16461; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill462; RV64I-NEXT: li a1, 5463; RV64I-NEXT: call __atomic_load_2464; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload465; RV64I-NEXT: addi sp, sp, 16466; RV64I-NEXT: ret467;468; RV64IA-WMO-LABEL: atomic_load_i16_seq_cst:469; RV64IA-WMO: # %bb.0:470; RV64IA-WMO-NEXT: fence rw, rw471; RV64IA-WMO-NEXT: lh a0, 0(a0)472; RV64IA-WMO-NEXT: fence r, rw473; RV64IA-WMO-NEXT: ret474;475; RV64IA-TSO-LABEL: atomic_load_i16_seq_cst:476; RV64IA-TSO: # %bb.0:477; RV64IA-TSO-NEXT: fence rw, rw478; RV64IA-TSO-NEXT: lh a0, 0(a0)479; RV64IA-TSO-NEXT: ret480;481; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i16_seq_cst:482; RV32IA-WMO-TRAILING-FENCE: # %bb.0:483; RV32IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw484; RV32IA-WMO-TRAILING-FENCE-NEXT: lh a0, 0(a0)485; RV32IA-WMO-TRAILING-FENCE-NEXT: fence r, rw486; RV32IA-WMO-TRAILING-FENCE-NEXT: ret487;488; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i16_seq_cst:489; RV32IA-TSO-TRAILING-FENCE: # %bb.0:490; RV32IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw491; RV32IA-TSO-TRAILING-FENCE-NEXT: lh a0, 0(a0)492; RV32IA-TSO-TRAILING-FENCE-NEXT: ret493;494; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i16_seq_cst:495; RV64IA-WMO-TRAILING-FENCE: # %bb.0:496; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw497; RV64IA-WMO-TRAILING-FENCE-NEXT: lh a0, 0(a0)498; RV64IA-WMO-TRAILING-FENCE-NEXT: fence r, rw499; RV64IA-WMO-TRAILING-FENCE-NEXT: ret500;501; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i16_seq_cst:502; RV64IA-TSO-TRAILING-FENCE: # %bb.0:503; RV64IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw504; RV64IA-TSO-TRAILING-FENCE-NEXT: lh a0, 0(a0)505; RV64IA-TSO-TRAILING-FENCE-NEXT: ret506;507; RV32IA-ZALASR-LABEL: atomic_load_i16_seq_cst:508; RV32IA-ZALASR: # %bb.0:509; RV32IA-ZALASR-NEXT: lh.aq a0, (a0)510; RV32IA-ZALASR-NEXT: ret511;512; RV64IA-ZALASR-LABEL: atomic_load_i16_seq_cst:513; RV64IA-ZALASR: # %bb.0:514; RV64IA-ZALASR-NEXT: lh.aq a0, (a0)515; RV64IA-ZALASR-NEXT: ret516 %1 = load atomic i16, ptr %a seq_cst, align 2517 ret i16 %1518}519 520define i32 @atomic_load_i32_unordered(ptr %a) nounwind {521; RV32I-LABEL: atomic_load_i32_unordered:522; RV32I: # %bb.0:523; RV32I-NEXT: addi sp, sp, -16524; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill525; RV32I-NEXT: li a1, 0526; RV32I-NEXT: call __atomic_load_4527; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload528; RV32I-NEXT: addi sp, sp, 16529; RV32I-NEXT: ret530;531; RV32IA-LABEL: atomic_load_i32_unordered:532; RV32IA: # %bb.0:533; RV32IA-NEXT: lw a0, 0(a0)534; RV32IA-NEXT: ret535;536; RV64I-LABEL: atomic_load_i32_unordered:537; RV64I: # %bb.0:538; RV64I-NEXT: addi sp, sp, -16539; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill540; RV64I-NEXT: li a1, 0541; RV64I-NEXT: call __atomic_load_4542; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload543; RV64I-NEXT: addi sp, sp, 16544; RV64I-NEXT: ret545;546; RV64IA-LABEL: atomic_load_i32_unordered:547; RV64IA: # %bb.0:548; RV64IA-NEXT: lw a0, 0(a0)549; RV64IA-NEXT: ret550 %1 = load atomic i32, ptr %a unordered, align 4551 ret i32 %1552}553 554define i32 @atomic_load_i32_monotonic(ptr %a) nounwind {555; RV32I-LABEL: atomic_load_i32_monotonic:556; RV32I: # %bb.0:557; RV32I-NEXT: addi sp, sp, -16558; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill559; RV32I-NEXT: li a1, 0560; RV32I-NEXT: call __atomic_load_4561; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload562; RV32I-NEXT: addi sp, sp, 16563; RV32I-NEXT: ret564;565; RV32IA-LABEL: atomic_load_i32_monotonic:566; RV32IA: # %bb.0:567; RV32IA-NEXT: lw a0, 0(a0)568; RV32IA-NEXT: ret569;570; RV64I-LABEL: atomic_load_i32_monotonic:571; RV64I: # %bb.0:572; RV64I-NEXT: addi sp, sp, -16573; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill574; RV64I-NEXT: li a1, 0575; RV64I-NEXT: call __atomic_load_4576; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload577; RV64I-NEXT: addi sp, sp, 16578; RV64I-NEXT: ret579;580; RV64IA-LABEL: atomic_load_i32_monotonic:581; RV64IA: # %bb.0:582; RV64IA-NEXT: lw a0, 0(a0)583; RV64IA-NEXT: ret584 %1 = load atomic i32, ptr %a monotonic, align 4585 ret i32 %1586}587 588define i32 @atomic_load_i32_acquire(ptr %a) nounwind {589; RV32I-LABEL: atomic_load_i32_acquire:590; RV32I: # %bb.0:591; RV32I-NEXT: addi sp, sp, -16592; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill593; RV32I-NEXT: li a1, 2594; RV32I-NEXT: call __atomic_load_4595; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload596; RV32I-NEXT: addi sp, sp, 16597; RV32I-NEXT: ret598;599; RV32IA-WMO-LABEL: atomic_load_i32_acquire:600; RV32IA-WMO: # %bb.0:601; RV32IA-WMO-NEXT: lw a0, 0(a0)602; RV32IA-WMO-NEXT: fence r, rw603; RV32IA-WMO-NEXT: ret604;605; RV32IA-TSO-LABEL: atomic_load_i32_acquire:606; RV32IA-TSO: # %bb.0:607; RV32IA-TSO-NEXT: lw a0, 0(a0)608; RV32IA-TSO-NEXT: ret609;610; RV64I-LABEL: atomic_load_i32_acquire:611; RV64I: # %bb.0:612; RV64I-NEXT: addi sp, sp, -16613; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill614; RV64I-NEXT: li a1, 2615; RV64I-NEXT: call __atomic_load_4616; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload617; RV64I-NEXT: addi sp, sp, 16618; RV64I-NEXT: ret619;620; RV64IA-WMO-LABEL: atomic_load_i32_acquire:621; RV64IA-WMO: # %bb.0:622; RV64IA-WMO-NEXT: lw a0, 0(a0)623; RV64IA-WMO-NEXT: fence r, rw624; RV64IA-WMO-NEXT: ret625;626; RV64IA-TSO-LABEL: atomic_load_i32_acquire:627; RV64IA-TSO: # %bb.0:628; RV64IA-TSO-NEXT: lw a0, 0(a0)629; RV64IA-TSO-NEXT: ret630;631; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i32_acquire:632; RV32IA-WMO-TRAILING-FENCE: # %bb.0:633; RV32IA-WMO-TRAILING-FENCE-NEXT: lw a0, 0(a0)634; RV32IA-WMO-TRAILING-FENCE-NEXT: fence r, rw635; RV32IA-WMO-TRAILING-FENCE-NEXT: ret636;637; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i32_acquire:638; RV32IA-TSO-TRAILING-FENCE: # %bb.0:639; RV32IA-TSO-TRAILING-FENCE-NEXT: lw a0, 0(a0)640; RV32IA-TSO-TRAILING-FENCE-NEXT: ret641;642; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i32_acquire:643; RV64IA-WMO-TRAILING-FENCE: # %bb.0:644; RV64IA-WMO-TRAILING-FENCE-NEXT: lw a0, 0(a0)645; RV64IA-WMO-TRAILING-FENCE-NEXT: fence r, rw646; RV64IA-WMO-TRAILING-FENCE-NEXT: ret647;648; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i32_acquire:649; RV64IA-TSO-TRAILING-FENCE: # %bb.0:650; RV64IA-TSO-TRAILING-FENCE-NEXT: lw a0, 0(a0)651; RV64IA-TSO-TRAILING-FENCE-NEXT: ret652;653; RV32IA-ZALASR-WMO-LABEL: atomic_load_i32_acquire:654; RV32IA-ZALASR-WMO: # %bb.0:655; RV32IA-ZALASR-WMO-NEXT: lw.aq a0, (a0)656; RV32IA-ZALASR-WMO-NEXT: ret657;658; RV32IA-ZALASR-TSO-LABEL: atomic_load_i32_acquire:659; RV32IA-ZALASR-TSO: # %bb.0:660; RV32IA-ZALASR-TSO-NEXT: lw a0, 0(a0)661; RV32IA-ZALASR-TSO-NEXT: ret662;663; RV64IA-ZALASR-WMO-LABEL: atomic_load_i32_acquire:664; RV64IA-ZALASR-WMO: # %bb.0:665; RV64IA-ZALASR-WMO-NEXT: lw.aq a0, (a0)666; RV64IA-ZALASR-WMO-NEXT: ret667;668; RV64IA-ZALASR-TSO-LABEL: atomic_load_i32_acquire:669; RV64IA-ZALASR-TSO: # %bb.0:670; RV64IA-ZALASR-TSO-NEXT: lw a0, 0(a0)671; RV64IA-ZALASR-TSO-NEXT: ret672 %1 = load atomic i32, ptr %a acquire, align 4673 ret i32 %1674}675 676define i32 @atomic_load_i32_seq_cst(ptr %a) nounwind {677; RV32I-LABEL: atomic_load_i32_seq_cst:678; RV32I: # %bb.0:679; RV32I-NEXT: addi sp, sp, -16680; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill681; RV32I-NEXT: li a1, 5682; RV32I-NEXT: call __atomic_load_4683; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload684; RV32I-NEXT: addi sp, sp, 16685; RV32I-NEXT: ret686;687; RV32IA-WMO-LABEL: atomic_load_i32_seq_cst:688; RV32IA-WMO: # %bb.0:689; RV32IA-WMO-NEXT: fence rw, rw690; RV32IA-WMO-NEXT: lw a0, 0(a0)691; RV32IA-WMO-NEXT: fence r, rw692; RV32IA-WMO-NEXT: ret693;694; RV32IA-TSO-LABEL: atomic_load_i32_seq_cst:695; RV32IA-TSO: # %bb.0:696; RV32IA-TSO-NEXT: fence rw, rw697; RV32IA-TSO-NEXT: lw a0, 0(a0)698; RV32IA-TSO-NEXT: ret699;700; RV64I-LABEL: atomic_load_i32_seq_cst:701; RV64I: # %bb.0:702; RV64I-NEXT: addi sp, sp, -16703; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill704; RV64I-NEXT: li a1, 5705; RV64I-NEXT: call __atomic_load_4706; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload707; RV64I-NEXT: addi sp, sp, 16708; RV64I-NEXT: ret709;710; RV64IA-WMO-LABEL: atomic_load_i32_seq_cst:711; RV64IA-WMO: # %bb.0:712; RV64IA-WMO-NEXT: fence rw, rw713; RV64IA-WMO-NEXT: lw a0, 0(a0)714; RV64IA-WMO-NEXT: fence r, rw715; RV64IA-WMO-NEXT: ret716;717; RV64IA-TSO-LABEL: atomic_load_i32_seq_cst:718; RV64IA-TSO: # %bb.0:719; RV64IA-TSO-NEXT: fence rw, rw720; RV64IA-TSO-NEXT: lw a0, 0(a0)721; RV64IA-TSO-NEXT: ret722;723; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i32_seq_cst:724; RV32IA-WMO-TRAILING-FENCE: # %bb.0:725; RV32IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw726; RV32IA-WMO-TRAILING-FENCE-NEXT: lw a0, 0(a0)727; RV32IA-WMO-TRAILING-FENCE-NEXT: fence r, rw728; RV32IA-WMO-TRAILING-FENCE-NEXT: ret729;730; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i32_seq_cst:731; RV32IA-TSO-TRAILING-FENCE: # %bb.0:732; RV32IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw733; RV32IA-TSO-TRAILING-FENCE-NEXT: lw a0, 0(a0)734; RV32IA-TSO-TRAILING-FENCE-NEXT: ret735;736; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i32_seq_cst:737; RV64IA-WMO-TRAILING-FENCE: # %bb.0:738; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw739; RV64IA-WMO-TRAILING-FENCE-NEXT: lw a0, 0(a0)740; RV64IA-WMO-TRAILING-FENCE-NEXT: fence r, rw741; RV64IA-WMO-TRAILING-FENCE-NEXT: ret742;743; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i32_seq_cst:744; RV64IA-TSO-TRAILING-FENCE: # %bb.0:745; RV64IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw746; RV64IA-TSO-TRAILING-FENCE-NEXT: lw a0, 0(a0)747; RV64IA-TSO-TRAILING-FENCE-NEXT: ret748;749; RV32IA-ZALASR-LABEL: atomic_load_i32_seq_cst:750; RV32IA-ZALASR: # %bb.0:751; RV32IA-ZALASR-NEXT: lw.aq a0, (a0)752; RV32IA-ZALASR-NEXT: ret753;754; RV64IA-ZALASR-LABEL: atomic_load_i32_seq_cst:755; RV64IA-ZALASR: # %bb.0:756; RV64IA-ZALASR-NEXT: lw.aq a0, (a0)757; RV64IA-ZALASR-NEXT: ret758 %1 = load atomic i32, ptr %a seq_cst, align 4759 ret i32 %1760}761 762define i64 @atomic_load_i64_unordered(ptr %a) nounwind {763; RV32I-LABEL: atomic_load_i64_unordered:764; RV32I: # %bb.0:765; RV32I-NEXT: addi sp, sp, -16766; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill767; RV32I-NEXT: li a1, 0768; RV32I-NEXT: call __atomic_load_8769; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload770; RV32I-NEXT: addi sp, sp, 16771; RV32I-NEXT: ret772;773; RV32IA-LABEL: atomic_load_i64_unordered:774; RV32IA: # %bb.0:775; RV32IA-NEXT: addi sp, sp, -16776; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill777; RV32IA-NEXT: li a1, 0778; RV32IA-NEXT: call __atomic_load_8779; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload780; RV32IA-NEXT: addi sp, sp, 16781; RV32IA-NEXT: ret782;783; RV64I-LABEL: atomic_load_i64_unordered:784; RV64I: # %bb.0:785; RV64I-NEXT: addi sp, sp, -16786; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill787; RV64I-NEXT: li a1, 0788; RV64I-NEXT: call __atomic_load_8789; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload790; RV64I-NEXT: addi sp, sp, 16791; RV64I-NEXT: ret792;793; RV64IA-LABEL: atomic_load_i64_unordered:794; RV64IA: # %bb.0:795; RV64IA-NEXT: ld a0, 0(a0)796; RV64IA-NEXT: ret797 %1 = load atomic i64, ptr %a unordered, align 8798 ret i64 %1799}800 801define i64 @atomic_load_i64_monotonic(ptr %a) nounwind {802; RV32I-LABEL: atomic_load_i64_monotonic:803; RV32I: # %bb.0:804; RV32I-NEXT: addi sp, sp, -16805; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill806; RV32I-NEXT: li a1, 0807; RV32I-NEXT: call __atomic_load_8808; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload809; RV32I-NEXT: addi sp, sp, 16810; RV32I-NEXT: ret811;812; RV32IA-LABEL: atomic_load_i64_monotonic:813; RV32IA: # %bb.0:814; RV32IA-NEXT: addi sp, sp, -16815; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill816; RV32IA-NEXT: li a1, 0817; RV32IA-NEXT: call __atomic_load_8818; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload819; RV32IA-NEXT: addi sp, sp, 16820; RV32IA-NEXT: ret821;822; RV64I-LABEL: atomic_load_i64_monotonic:823; RV64I: # %bb.0:824; RV64I-NEXT: addi sp, sp, -16825; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill826; RV64I-NEXT: li a1, 0827; RV64I-NEXT: call __atomic_load_8828; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload829; RV64I-NEXT: addi sp, sp, 16830; RV64I-NEXT: ret831;832; RV64IA-LABEL: atomic_load_i64_monotonic:833; RV64IA: # %bb.0:834; RV64IA-NEXT: ld a0, 0(a0)835; RV64IA-NEXT: ret836 %1 = load atomic i64, ptr %a monotonic, align 8837 ret i64 %1838}839 840define i64 @atomic_load_i64_acquire(ptr %a) nounwind {841; RV32I-LABEL: atomic_load_i64_acquire:842; RV32I: # %bb.0:843; RV32I-NEXT: addi sp, sp, -16844; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill845; RV32I-NEXT: li a1, 2846; RV32I-NEXT: call __atomic_load_8847; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload848; RV32I-NEXT: addi sp, sp, 16849; RV32I-NEXT: ret850;851; RV32IA-LABEL: atomic_load_i64_acquire:852; RV32IA: # %bb.0:853; RV32IA-NEXT: addi sp, sp, -16854; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill855; RV32IA-NEXT: li a1, 2856; RV32IA-NEXT: call __atomic_load_8857; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload858; RV32IA-NEXT: addi sp, sp, 16859; RV32IA-NEXT: ret860;861; RV64I-LABEL: atomic_load_i64_acquire:862; RV64I: # %bb.0:863; RV64I-NEXT: addi sp, sp, -16864; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill865; RV64I-NEXT: li a1, 2866; RV64I-NEXT: call __atomic_load_8867; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload868; RV64I-NEXT: addi sp, sp, 16869; RV64I-NEXT: ret870;871; RV64IA-WMO-LABEL: atomic_load_i64_acquire:872; RV64IA-WMO: # %bb.0:873; RV64IA-WMO-NEXT: ld a0, 0(a0)874; RV64IA-WMO-NEXT: fence r, rw875; RV64IA-WMO-NEXT: ret876;877; RV64IA-TSO-LABEL: atomic_load_i64_acquire:878; RV64IA-TSO: # %bb.0:879; RV64IA-TSO-NEXT: ld a0, 0(a0)880; RV64IA-TSO-NEXT: ret881;882; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i64_acquire:883; RV64IA-WMO-TRAILING-FENCE: # %bb.0:884; RV64IA-WMO-TRAILING-FENCE-NEXT: ld a0, 0(a0)885; RV64IA-WMO-TRAILING-FENCE-NEXT: fence r, rw886; RV64IA-WMO-TRAILING-FENCE-NEXT: ret887;888; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i64_acquire:889; RV64IA-TSO-TRAILING-FENCE: # %bb.0:890; RV64IA-TSO-TRAILING-FENCE-NEXT: ld a0, 0(a0)891; RV64IA-TSO-TRAILING-FENCE-NEXT: ret892;893; RV64IA-ZALASR-WMO-LABEL: atomic_load_i64_acquire:894; RV64IA-ZALASR-WMO: # %bb.0:895; RV64IA-ZALASR-WMO-NEXT: ld.aq a0, (a0)896; RV64IA-ZALASR-WMO-NEXT: ret897;898; RV64IA-ZALASR-TSO-LABEL: atomic_load_i64_acquire:899; RV64IA-ZALASR-TSO: # %bb.0:900; RV64IA-ZALASR-TSO-NEXT: ld a0, 0(a0)901; RV64IA-ZALASR-TSO-NEXT: ret902 %1 = load atomic i64, ptr %a acquire, align 8903 ret i64 %1904}905 906define i64 @atomic_load_i64_seq_cst(ptr %a) nounwind {907; RV32I-LABEL: atomic_load_i64_seq_cst:908; RV32I: # %bb.0:909; RV32I-NEXT: addi sp, sp, -16910; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill911; RV32I-NEXT: li a1, 5912; RV32I-NEXT: call __atomic_load_8913; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload914; RV32I-NEXT: addi sp, sp, 16915; RV32I-NEXT: ret916;917; RV32IA-LABEL: atomic_load_i64_seq_cst:918; RV32IA: # %bb.0:919; RV32IA-NEXT: addi sp, sp, -16920; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill921; RV32IA-NEXT: li a1, 5922; RV32IA-NEXT: call __atomic_load_8923; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload924; RV32IA-NEXT: addi sp, sp, 16925; RV32IA-NEXT: ret926;927; RV64I-LABEL: atomic_load_i64_seq_cst:928; RV64I: # %bb.0:929; RV64I-NEXT: addi sp, sp, -16930; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill931; RV64I-NEXT: li a1, 5932; RV64I-NEXT: call __atomic_load_8933; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload934; RV64I-NEXT: addi sp, sp, 16935; RV64I-NEXT: ret936;937; RV64IA-WMO-LABEL: atomic_load_i64_seq_cst:938; RV64IA-WMO: # %bb.0:939; RV64IA-WMO-NEXT: fence rw, rw940; RV64IA-WMO-NEXT: ld a0, 0(a0)941; RV64IA-WMO-NEXT: fence r, rw942; RV64IA-WMO-NEXT: ret943;944; RV64IA-TSO-LABEL: atomic_load_i64_seq_cst:945; RV64IA-TSO: # %bb.0:946; RV64IA-TSO-NEXT: fence rw, rw947; RV64IA-TSO-NEXT: ld a0, 0(a0)948; RV64IA-TSO-NEXT: ret949;950; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i64_seq_cst:951; RV64IA-WMO-TRAILING-FENCE: # %bb.0:952; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw953; RV64IA-WMO-TRAILING-FENCE-NEXT: ld a0, 0(a0)954; RV64IA-WMO-TRAILING-FENCE-NEXT: fence r, rw955; RV64IA-WMO-TRAILING-FENCE-NEXT: ret956;957; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i64_seq_cst:958; RV64IA-TSO-TRAILING-FENCE: # %bb.0:959; RV64IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw960; RV64IA-TSO-TRAILING-FENCE-NEXT: ld a0, 0(a0)961; RV64IA-TSO-TRAILING-FENCE-NEXT: ret962;963; RV64IA-ZALASR-LABEL: atomic_load_i64_seq_cst:964; RV64IA-ZALASR: # %bb.0:965; RV64IA-ZALASR-NEXT: ld.aq a0, (a0)966; RV64IA-ZALASR-NEXT: ret967 %1 = load atomic i64, ptr %a seq_cst, align 8968 ret i64 %1969}970 971define void @atomic_store_i8_unordered(ptr %a, i8 %b) nounwind {972; RV32I-LABEL: atomic_store_i8_unordered:973; RV32I: # %bb.0:974; RV32I-NEXT: addi sp, sp, -16975; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill976; RV32I-NEXT: li a2, 0977; RV32I-NEXT: call __atomic_store_1978; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload979; RV32I-NEXT: addi sp, sp, 16980; RV32I-NEXT: ret981;982; RV32IA-LABEL: atomic_store_i8_unordered:983; RV32IA: # %bb.0:984; RV32IA-NEXT: sb a1, 0(a0)985; RV32IA-NEXT: ret986;987; RV64I-LABEL: atomic_store_i8_unordered:988; RV64I: # %bb.0:989; RV64I-NEXT: addi sp, sp, -16990; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill991; RV64I-NEXT: li a2, 0992; RV64I-NEXT: call __atomic_store_1993; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload994; RV64I-NEXT: addi sp, sp, 16995; RV64I-NEXT: ret996;997; RV64IA-LABEL: atomic_store_i8_unordered:998; RV64IA: # %bb.0:999; RV64IA-NEXT: sb a1, 0(a0)1000; RV64IA-NEXT: ret1001 store atomic i8 %b, ptr %a unordered, align 11002 ret void1003}1004 1005define void @atomic_store_i8_monotonic(ptr %a, i8 %b) nounwind {1006; RV32I-LABEL: atomic_store_i8_monotonic:1007; RV32I: # %bb.0:1008; RV32I-NEXT: addi sp, sp, -161009; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1010; RV32I-NEXT: li a2, 01011; RV32I-NEXT: call __atomic_store_11012; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1013; RV32I-NEXT: addi sp, sp, 161014; RV32I-NEXT: ret1015;1016; RV32IA-LABEL: atomic_store_i8_monotonic:1017; RV32IA: # %bb.0:1018; RV32IA-NEXT: sb a1, 0(a0)1019; RV32IA-NEXT: ret1020;1021; RV64I-LABEL: atomic_store_i8_monotonic:1022; RV64I: # %bb.0:1023; RV64I-NEXT: addi sp, sp, -161024; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1025; RV64I-NEXT: li a2, 01026; RV64I-NEXT: call __atomic_store_11027; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1028; RV64I-NEXT: addi sp, sp, 161029; RV64I-NEXT: ret1030;1031; RV64IA-LABEL: atomic_store_i8_monotonic:1032; RV64IA: # %bb.0:1033; RV64IA-NEXT: sb a1, 0(a0)1034; RV64IA-NEXT: ret1035 store atomic i8 %b, ptr %a monotonic, align 11036 ret void1037}1038 1039define void @atomic_store_i8_release(ptr %a, i8 %b) nounwind {1040; RV32I-LABEL: atomic_store_i8_release:1041; RV32I: # %bb.0:1042; RV32I-NEXT: addi sp, sp, -161043; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1044; RV32I-NEXT: li a2, 31045; RV32I-NEXT: call __atomic_store_11046; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1047; RV32I-NEXT: addi sp, sp, 161048; RV32I-NEXT: ret1049;1050; RV32IA-WMO-LABEL: atomic_store_i8_release:1051; RV32IA-WMO: # %bb.0:1052; RV32IA-WMO-NEXT: fence rw, w1053; RV32IA-WMO-NEXT: sb a1, 0(a0)1054; RV32IA-WMO-NEXT: ret1055;1056; RV32IA-TSO-LABEL: atomic_store_i8_release:1057; RV32IA-TSO: # %bb.0:1058; RV32IA-TSO-NEXT: sb a1, 0(a0)1059; RV32IA-TSO-NEXT: ret1060;1061; RV64I-LABEL: atomic_store_i8_release:1062; RV64I: # %bb.0:1063; RV64I-NEXT: addi sp, sp, -161064; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1065; RV64I-NEXT: li a2, 31066; RV64I-NEXT: call __atomic_store_11067; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1068; RV64I-NEXT: addi sp, sp, 161069; RV64I-NEXT: ret1070;1071; RV64IA-WMO-LABEL: atomic_store_i8_release:1072; RV64IA-WMO: # %bb.0:1073; RV64IA-WMO-NEXT: fence rw, w1074; RV64IA-WMO-NEXT: sb a1, 0(a0)1075; RV64IA-WMO-NEXT: ret1076;1077; RV64IA-TSO-LABEL: atomic_store_i8_release:1078; RV64IA-TSO: # %bb.0:1079; RV64IA-TSO-NEXT: sb a1, 0(a0)1080; RV64IA-TSO-NEXT: ret1081;1082; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_store_i8_release:1083; RV32IA-WMO-TRAILING-FENCE: # %bb.0:1084; RV32IA-WMO-TRAILING-FENCE-NEXT: fence rw, w1085; RV32IA-WMO-TRAILING-FENCE-NEXT: sb a1, 0(a0)1086; RV32IA-WMO-TRAILING-FENCE-NEXT: ret1087;1088; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_store_i8_release:1089; RV32IA-TSO-TRAILING-FENCE: # %bb.0:1090; RV32IA-TSO-TRAILING-FENCE-NEXT: sb a1, 0(a0)1091; RV32IA-TSO-TRAILING-FENCE-NEXT: ret1092;1093; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_store_i8_release:1094; RV64IA-WMO-TRAILING-FENCE: # %bb.0:1095; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, w1096; RV64IA-WMO-TRAILING-FENCE-NEXT: sb a1, 0(a0)1097; RV64IA-WMO-TRAILING-FENCE-NEXT: ret1098;1099; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_store_i8_release:1100; RV64IA-TSO-TRAILING-FENCE: # %bb.0:1101; RV64IA-TSO-TRAILING-FENCE-NEXT: sb a1, 0(a0)1102; RV64IA-TSO-TRAILING-FENCE-NEXT: ret1103;1104; RV32IA-ZALASR-WMO-LABEL: atomic_store_i8_release:1105; RV32IA-ZALASR-WMO: # %bb.0:1106; RV32IA-ZALASR-WMO-NEXT: sb.rl a1, (a0)1107; RV32IA-ZALASR-WMO-NEXT: ret1108;1109; RV32IA-ZALASR-TSO-LABEL: atomic_store_i8_release:1110; RV32IA-ZALASR-TSO: # %bb.0:1111; RV32IA-ZALASR-TSO-NEXT: sb a1, 0(a0)1112; RV32IA-ZALASR-TSO-NEXT: ret1113;1114; RV64IA-ZALASR-WMO-LABEL: atomic_store_i8_release:1115; RV64IA-ZALASR-WMO: # %bb.0:1116; RV64IA-ZALASR-WMO-NEXT: sb.rl a1, (a0)1117; RV64IA-ZALASR-WMO-NEXT: ret1118;1119; RV64IA-ZALASR-TSO-LABEL: atomic_store_i8_release:1120; RV64IA-ZALASR-TSO: # %bb.0:1121; RV64IA-ZALASR-TSO-NEXT: sb a1, 0(a0)1122; RV64IA-ZALASR-TSO-NEXT: ret1123 store atomic i8 %b, ptr %a release, align 11124 ret void1125}1126 1127define void @atomic_store_i8_seq_cst(ptr %a, i8 %b) nounwind {1128; RV32I-LABEL: atomic_store_i8_seq_cst:1129; RV32I: # %bb.0:1130; RV32I-NEXT: addi sp, sp, -161131; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1132; RV32I-NEXT: li a2, 51133; RV32I-NEXT: call __atomic_store_11134; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1135; RV32I-NEXT: addi sp, sp, 161136; RV32I-NEXT: ret1137;1138; RV32IA-WMO-LABEL: atomic_store_i8_seq_cst:1139; RV32IA-WMO: # %bb.0:1140; RV32IA-WMO-NEXT: fence rw, w1141; RV32IA-WMO-NEXT: sb a1, 0(a0)1142; RV32IA-WMO-NEXT: ret1143;1144; RV32IA-TSO-LABEL: atomic_store_i8_seq_cst:1145; RV32IA-TSO: # %bb.0:1146; RV32IA-TSO-NEXT: sb a1, 0(a0)1147; RV32IA-TSO-NEXT: fence rw, rw1148; RV32IA-TSO-NEXT: ret1149;1150; RV64I-LABEL: atomic_store_i8_seq_cst:1151; RV64I: # %bb.0:1152; RV64I-NEXT: addi sp, sp, -161153; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1154; RV64I-NEXT: li a2, 51155; RV64I-NEXT: call __atomic_store_11156; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1157; RV64I-NEXT: addi sp, sp, 161158; RV64I-NEXT: ret1159;1160; RV64IA-WMO-LABEL: atomic_store_i8_seq_cst:1161; RV64IA-WMO: # %bb.0:1162; RV64IA-WMO-NEXT: fence rw, w1163; RV64IA-WMO-NEXT: sb a1, 0(a0)1164; RV64IA-WMO-NEXT: ret1165;1166; RV64IA-TSO-LABEL: atomic_store_i8_seq_cst:1167; RV64IA-TSO: # %bb.0:1168; RV64IA-TSO-NEXT: sb a1, 0(a0)1169; RV64IA-TSO-NEXT: fence rw, rw1170; RV64IA-TSO-NEXT: ret1171;1172; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_store_i8_seq_cst:1173; RV32IA-WMO-TRAILING-FENCE: # %bb.0:1174; RV32IA-WMO-TRAILING-FENCE-NEXT: fence rw, w1175; RV32IA-WMO-TRAILING-FENCE-NEXT: sb a1, 0(a0)1176; RV32IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw1177; RV32IA-WMO-TRAILING-FENCE-NEXT: ret1178;1179; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_store_i8_seq_cst:1180; RV32IA-TSO-TRAILING-FENCE: # %bb.0:1181; RV32IA-TSO-TRAILING-FENCE-NEXT: sb a1, 0(a0)1182; RV32IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw1183; RV32IA-TSO-TRAILING-FENCE-NEXT: ret1184;1185; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_store_i8_seq_cst:1186; RV64IA-WMO-TRAILING-FENCE: # %bb.0:1187; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, w1188; RV64IA-WMO-TRAILING-FENCE-NEXT: sb a1, 0(a0)1189; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw1190; RV64IA-WMO-TRAILING-FENCE-NEXT: ret1191;1192; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_store_i8_seq_cst:1193; RV64IA-TSO-TRAILING-FENCE: # %bb.0:1194; RV64IA-TSO-TRAILING-FENCE-NEXT: sb a1, 0(a0)1195; RV64IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw1196; RV64IA-TSO-TRAILING-FENCE-NEXT: ret1197;1198; RV32IA-ZALASR-LABEL: atomic_store_i8_seq_cst:1199; RV32IA-ZALASR: # %bb.0:1200; RV32IA-ZALASR-NEXT: sb.rl a1, (a0)1201; RV32IA-ZALASR-NEXT: ret1202;1203; RV64IA-ZALASR-LABEL: atomic_store_i8_seq_cst:1204; RV64IA-ZALASR: # %bb.0:1205; RV64IA-ZALASR-NEXT: sb.rl a1, (a0)1206; RV64IA-ZALASR-NEXT: ret1207 store atomic i8 %b, ptr %a seq_cst, align 11208 ret void1209}1210 1211define void @atomic_store_i16_unordered(ptr %a, i16 %b) nounwind {1212; RV32I-LABEL: atomic_store_i16_unordered:1213; RV32I: # %bb.0:1214; RV32I-NEXT: addi sp, sp, -161215; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1216; RV32I-NEXT: li a2, 01217; RV32I-NEXT: call __atomic_store_21218; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1219; RV32I-NEXT: addi sp, sp, 161220; RV32I-NEXT: ret1221;1222; RV32IA-LABEL: atomic_store_i16_unordered:1223; RV32IA: # %bb.0:1224; RV32IA-NEXT: sh a1, 0(a0)1225; RV32IA-NEXT: ret1226;1227; RV64I-LABEL: atomic_store_i16_unordered:1228; RV64I: # %bb.0:1229; RV64I-NEXT: addi sp, sp, -161230; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1231; RV64I-NEXT: li a2, 01232; RV64I-NEXT: call __atomic_store_21233; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1234; RV64I-NEXT: addi sp, sp, 161235; RV64I-NEXT: ret1236;1237; RV64IA-LABEL: atomic_store_i16_unordered:1238; RV64IA: # %bb.0:1239; RV64IA-NEXT: sh a1, 0(a0)1240; RV64IA-NEXT: ret1241 store atomic i16 %b, ptr %a unordered, align 21242 ret void1243}1244 1245define void @atomic_store_i16_monotonic(ptr %a, i16 %b) nounwind {1246; RV32I-LABEL: atomic_store_i16_monotonic:1247; RV32I: # %bb.0:1248; RV32I-NEXT: addi sp, sp, -161249; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1250; RV32I-NEXT: li a2, 01251; RV32I-NEXT: call __atomic_store_21252; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1253; RV32I-NEXT: addi sp, sp, 161254; RV32I-NEXT: ret1255;1256; RV32IA-LABEL: atomic_store_i16_monotonic:1257; RV32IA: # %bb.0:1258; RV32IA-NEXT: sh a1, 0(a0)1259; RV32IA-NEXT: ret1260;1261; RV64I-LABEL: atomic_store_i16_monotonic:1262; RV64I: # %bb.0:1263; RV64I-NEXT: addi sp, sp, -161264; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1265; RV64I-NEXT: li a2, 01266; RV64I-NEXT: call __atomic_store_21267; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1268; RV64I-NEXT: addi sp, sp, 161269; RV64I-NEXT: ret1270;1271; RV64IA-LABEL: atomic_store_i16_monotonic:1272; RV64IA: # %bb.0:1273; RV64IA-NEXT: sh a1, 0(a0)1274; RV64IA-NEXT: ret1275 store atomic i16 %b, ptr %a monotonic, align 21276 ret void1277}1278 1279define void @atomic_store_i16_release(ptr %a, i16 %b) nounwind {1280; RV32I-LABEL: atomic_store_i16_release:1281; RV32I: # %bb.0:1282; RV32I-NEXT: addi sp, sp, -161283; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1284; RV32I-NEXT: li a2, 31285; RV32I-NEXT: call __atomic_store_21286; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1287; RV32I-NEXT: addi sp, sp, 161288; RV32I-NEXT: ret1289;1290; RV32IA-WMO-LABEL: atomic_store_i16_release:1291; RV32IA-WMO: # %bb.0:1292; RV32IA-WMO-NEXT: fence rw, w1293; RV32IA-WMO-NEXT: sh a1, 0(a0)1294; RV32IA-WMO-NEXT: ret1295;1296; RV32IA-TSO-LABEL: atomic_store_i16_release:1297; RV32IA-TSO: # %bb.0:1298; RV32IA-TSO-NEXT: sh a1, 0(a0)1299; RV32IA-TSO-NEXT: ret1300;1301; RV64I-LABEL: atomic_store_i16_release:1302; RV64I: # %bb.0:1303; RV64I-NEXT: addi sp, sp, -161304; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1305; RV64I-NEXT: li a2, 31306; RV64I-NEXT: call __atomic_store_21307; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1308; RV64I-NEXT: addi sp, sp, 161309; RV64I-NEXT: ret1310;1311; RV64IA-WMO-LABEL: atomic_store_i16_release:1312; RV64IA-WMO: # %bb.0:1313; RV64IA-WMO-NEXT: fence rw, w1314; RV64IA-WMO-NEXT: sh a1, 0(a0)1315; RV64IA-WMO-NEXT: ret1316;1317; RV64IA-TSO-LABEL: atomic_store_i16_release:1318; RV64IA-TSO: # %bb.0:1319; RV64IA-TSO-NEXT: sh a1, 0(a0)1320; RV64IA-TSO-NEXT: ret1321;1322; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_store_i16_release:1323; RV32IA-WMO-TRAILING-FENCE: # %bb.0:1324; RV32IA-WMO-TRAILING-FENCE-NEXT: fence rw, w1325; RV32IA-WMO-TRAILING-FENCE-NEXT: sh a1, 0(a0)1326; RV32IA-WMO-TRAILING-FENCE-NEXT: ret1327;1328; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_store_i16_release:1329; RV32IA-TSO-TRAILING-FENCE: # %bb.0:1330; RV32IA-TSO-TRAILING-FENCE-NEXT: sh a1, 0(a0)1331; RV32IA-TSO-TRAILING-FENCE-NEXT: ret1332;1333; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_store_i16_release:1334; RV64IA-WMO-TRAILING-FENCE: # %bb.0:1335; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, w1336; RV64IA-WMO-TRAILING-FENCE-NEXT: sh a1, 0(a0)1337; RV64IA-WMO-TRAILING-FENCE-NEXT: ret1338;1339; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_store_i16_release:1340; RV64IA-TSO-TRAILING-FENCE: # %bb.0:1341; RV64IA-TSO-TRAILING-FENCE-NEXT: sh a1, 0(a0)1342; RV64IA-TSO-TRAILING-FENCE-NEXT: ret1343;1344; RV32IA-ZALASR-WMO-LABEL: atomic_store_i16_release:1345; RV32IA-ZALASR-WMO: # %bb.0:1346; RV32IA-ZALASR-WMO-NEXT: sh.rl a1, (a0)1347; RV32IA-ZALASR-WMO-NEXT: ret1348;1349; RV32IA-ZALASR-TSO-LABEL: atomic_store_i16_release:1350; RV32IA-ZALASR-TSO: # %bb.0:1351; RV32IA-ZALASR-TSO-NEXT: sh a1, 0(a0)1352; RV32IA-ZALASR-TSO-NEXT: ret1353;1354; RV64IA-ZALASR-WMO-LABEL: atomic_store_i16_release:1355; RV64IA-ZALASR-WMO: # %bb.0:1356; RV64IA-ZALASR-WMO-NEXT: sh.rl a1, (a0)1357; RV64IA-ZALASR-WMO-NEXT: ret1358;1359; RV64IA-ZALASR-TSO-LABEL: atomic_store_i16_release:1360; RV64IA-ZALASR-TSO: # %bb.0:1361; RV64IA-ZALASR-TSO-NEXT: sh a1, 0(a0)1362; RV64IA-ZALASR-TSO-NEXT: ret1363 store atomic i16 %b, ptr %a release, align 21364 ret void1365}1366 1367define void @atomic_store_i16_seq_cst(ptr %a, i16 %b) nounwind {1368; RV32I-LABEL: atomic_store_i16_seq_cst:1369; RV32I: # %bb.0:1370; RV32I-NEXT: addi sp, sp, -161371; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1372; RV32I-NEXT: li a2, 51373; RV32I-NEXT: call __atomic_store_21374; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1375; RV32I-NEXT: addi sp, sp, 161376; RV32I-NEXT: ret1377;1378; RV32IA-WMO-LABEL: atomic_store_i16_seq_cst:1379; RV32IA-WMO: # %bb.0:1380; RV32IA-WMO-NEXT: fence rw, w1381; RV32IA-WMO-NEXT: sh a1, 0(a0)1382; RV32IA-WMO-NEXT: ret1383;1384; RV32IA-TSO-LABEL: atomic_store_i16_seq_cst:1385; RV32IA-TSO: # %bb.0:1386; RV32IA-TSO-NEXT: sh a1, 0(a0)1387; RV32IA-TSO-NEXT: fence rw, rw1388; RV32IA-TSO-NEXT: ret1389;1390; RV64I-LABEL: atomic_store_i16_seq_cst:1391; RV64I: # %bb.0:1392; RV64I-NEXT: addi sp, sp, -161393; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1394; RV64I-NEXT: li a2, 51395; RV64I-NEXT: call __atomic_store_21396; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1397; RV64I-NEXT: addi sp, sp, 161398; RV64I-NEXT: ret1399;1400; RV64IA-WMO-LABEL: atomic_store_i16_seq_cst:1401; RV64IA-WMO: # %bb.0:1402; RV64IA-WMO-NEXT: fence rw, w1403; RV64IA-WMO-NEXT: sh a1, 0(a0)1404; RV64IA-WMO-NEXT: ret1405;1406; RV64IA-TSO-LABEL: atomic_store_i16_seq_cst:1407; RV64IA-TSO: # %bb.0:1408; RV64IA-TSO-NEXT: sh a1, 0(a0)1409; RV64IA-TSO-NEXT: fence rw, rw1410; RV64IA-TSO-NEXT: ret1411;1412; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_store_i16_seq_cst:1413; RV32IA-WMO-TRAILING-FENCE: # %bb.0:1414; RV32IA-WMO-TRAILING-FENCE-NEXT: fence rw, w1415; RV32IA-WMO-TRAILING-FENCE-NEXT: sh a1, 0(a0)1416; RV32IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw1417; RV32IA-WMO-TRAILING-FENCE-NEXT: ret1418;1419; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_store_i16_seq_cst:1420; RV32IA-TSO-TRAILING-FENCE: # %bb.0:1421; RV32IA-TSO-TRAILING-FENCE-NEXT: sh a1, 0(a0)1422; RV32IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw1423; RV32IA-TSO-TRAILING-FENCE-NEXT: ret1424;1425; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_store_i16_seq_cst:1426; RV64IA-WMO-TRAILING-FENCE: # %bb.0:1427; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, w1428; RV64IA-WMO-TRAILING-FENCE-NEXT: sh a1, 0(a0)1429; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw1430; RV64IA-WMO-TRAILING-FENCE-NEXT: ret1431;1432; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_store_i16_seq_cst:1433; RV64IA-TSO-TRAILING-FENCE: # %bb.0:1434; RV64IA-TSO-TRAILING-FENCE-NEXT: sh a1, 0(a0)1435; RV64IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw1436; RV64IA-TSO-TRAILING-FENCE-NEXT: ret1437;1438; RV32IA-ZALASR-LABEL: atomic_store_i16_seq_cst:1439; RV32IA-ZALASR: # %bb.0:1440; RV32IA-ZALASR-NEXT: sh.rl a1, (a0)1441; RV32IA-ZALASR-NEXT: ret1442;1443; RV64IA-ZALASR-LABEL: atomic_store_i16_seq_cst:1444; RV64IA-ZALASR: # %bb.0:1445; RV64IA-ZALASR-NEXT: sh.rl a1, (a0)1446; RV64IA-ZALASR-NEXT: ret1447 store atomic i16 %b, ptr %a seq_cst, align 21448 ret void1449}1450 1451define void @atomic_store_i32_unordered(ptr %a, i32 %b) nounwind {1452; RV32I-LABEL: atomic_store_i32_unordered:1453; RV32I: # %bb.0:1454; RV32I-NEXT: addi sp, sp, -161455; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1456; RV32I-NEXT: li a2, 01457; RV32I-NEXT: call __atomic_store_41458; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1459; RV32I-NEXT: addi sp, sp, 161460; RV32I-NEXT: ret1461;1462; RV32IA-LABEL: atomic_store_i32_unordered:1463; RV32IA: # %bb.0:1464; RV32IA-NEXT: sw a1, 0(a0)1465; RV32IA-NEXT: ret1466;1467; RV64I-LABEL: atomic_store_i32_unordered:1468; RV64I: # %bb.0:1469; RV64I-NEXT: addi sp, sp, -161470; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1471; RV64I-NEXT: li a2, 01472; RV64I-NEXT: call __atomic_store_41473; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1474; RV64I-NEXT: addi sp, sp, 161475; RV64I-NEXT: ret1476;1477; RV64IA-LABEL: atomic_store_i32_unordered:1478; RV64IA: # %bb.0:1479; RV64IA-NEXT: sw a1, 0(a0)1480; RV64IA-NEXT: ret1481 store atomic i32 %b, ptr %a unordered, align 41482 ret void1483}1484 1485define void @atomic_store_i32_monotonic(ptr %a, i32 %b) nounwind {1486; RV32I-LABEL: atomic_store_i32_monotonic:1487; RV32I: # %bb.0:1488; RV32I-NEXT: addi sp, sp, -161489; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1490; RV32I-NEXT: li a2, 01491; RV32I-NEXT: call __atomic_store_41492; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1493; RV32I-NEXT: addi sp, sp, 161494; RV32I-NEXT: ret1495;1496; RV32IA-LABEL: atomic_store_i32_monotonic:1497; RV32IA: # %bb.0:1498; RV32IA-NEXT: sw a1, 0(a0)1499; RV32IA-NEXT: ret1500;1501; RV64I-LABEL: atomic_store_i32_monotonic:1502; RV64I: # %bb.0:1503; RV64I-NEXT: addi sp, sp, -161504; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1505; RV64I-NEXT: li a2, 01506; RV64I-NEXT: call __atomic_store_41507; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1508; RV64I-NEXT: addi sp, sp, 161509; RV64I-NEXT: ret1510;1511; RV64IA-LABEL: atomic_store_i32_monotonic:1512; RV64IA: # %bb.0:1513; RV64IA-NEXT: sw a1, 0(a0)1514; RV64IA-NEXT: ret1515 store atomic i32 %b, ptr %a monotonic, align 41516 ret void1517}1518 1519define void @atomic_store_i32_release(ptr %a, i32 %b) nounwind {1520; RV32I-LABEL: atomic_store_i32_release:1521; RV32I: # %bb.0:1522; RV32I-NEXT: addi sp, sp, -161523; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1524; RV32I-NEXT: li a2, 31525; RV32I-NEXT: call __atomic_store_41526; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1527; RV32I-NEXT: addi sp, sp, 161528; RV32I-NEXT: ret1529;1530; RV32IA-WMO-LABEL: atomic_store_i32_release:1531; RV32IA-WMO: # %bb.0:1532; RV32IA-WMO-NEXT: fence rw, w1533; RV32IA-WMO-NEXT: sw a1, 0(a0)1534; RV32IA-WMO-NEXT: ret1535;1536; RV32IA-TSO-LABEL: atomic_store_i32_release:1537; RV32IA-TSO: # %bb.0:1538; RV32IA-TSO-NEXT: sw a1, 0(a0)1539; RV32IA-TSO-NEXT: ret1540;1541; RV64I-LABEL: atomic_store_i32_release:1542; RV64I: # %bb.0:1543; RV64I-NEXT: addi sp, sp, -161544; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1545; RV64I-NEXT: li a2, 31546; RV64I-NEXT: call __atomic_store_41547; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1548; RV64I-NEXT: addi sp, sp, 161549; RV64I-NEXT: ret1550;1551; RV64IA-WMO-LABEL: atomic_store_i32_release:1552; RV64IA-WMO: # %bb.0:1553; RV64IA-WMO-NEXT: fence rw, w1554; RV64IA-WMO-NEXT: sw a1, 0(a0)1555; RV64IA-WMO-NEXT: ret1556;1557; RV64IA-TSO-LABEL: atomic_store_i32_release:1558; RV64IA-TSO: # %bb.0:1559; RV64IA-TSO-NEXT: sw a1, 0(a0)1560; RV64IA-TSO-NEXT: ret1561;1562; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_store_i32_release:1563; RV32IA-WMO-TRAILING-FENCE: # %bb.0:1564; RV32IA-WMO-TRAILING-FENCE-NEXT: fence rw, w1565; RV32IA-WMO-TRAILING-FENCE-NEXT: sw a1, 0(a0)1566; RV32IA-WMO-TRAILING-FENCE-NEXT: ret1567;1568; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_store_i32_release:1569; RV32IA-TSO-TRAILING-FENCE: # %bb.0:1570; RV32IA-TSO-TRAILING-FENCE-NEXT: sw a1, 0(a0)1571; RV32IA-TSO-TRAILING-FENCE-NEXT: ret1572;1573; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_store_i32_release:1574; RV64IA-WMO-TRAILING-FENCE: # %bb.0:1575; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, w1576; RV64IA-WMO-TRAILING-FENCE-NEXT: sw a1, 0(a0)1577; RV64IA-WMO-TRAILING-FENCE-NEXT: ret1578;1579; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_store_i32_release:1580; RV64IA-TSO-TRAILING-FENCE: # %bb.0:1581; RV64IA-TSO-TRAILING-FENCE-NEXT: sw a1, 0(a0)1582; RV64IA-TSO-TRAILING-FENCE-NEXT: ret1583;1584; RV32IA-ZALASR-WMO-LABEL: atomic_store_i32_release:1585; RV32IA-ZALASR-WMO: # %bb.0:1586; RV32IA-ZALASR-WMO-NEXT: sw.rl a1, (a0)1587; RV32IA-ZALASR-WMO-NEXT: ret1588;1589; RV32IA-ZALASR-TSO-LABEL: atomic_store_i32_release:1590; RV32IA-ZALASR-TSO: # %bb.0:1591; RV32IA-ZALASR-TSO-NEXT: sw a1, 0(a0)1592; RV32IA-ZALASR-TSO-NEXT: ret1593;1594; RV64IA-ZALASR-WMO-LABEL: atomic_store_i32_release:1595; RV64IA-ZALASR-WMO: # %bb.0:1596; RV64IA-ZALASR-WMO-NEXT: sw.rl a1, (a0)1597; RV64IA-ZALASR-WMO-NEXT: ret1598;1599; RV64IA-ZALASR-TSO-LABEL: atomic_store_i32_release:1600; RV64IA-ZALASR-TSO: # %bb.0:1601; RV64IA-ZALASR-TSO-NEXT: sw a1, 0(a0)1602; RV64IA-ZALASR-TSO-NEXT: ret1603 store atomic i32 %b, ptr %a release, align 41604 ret void1605}1606 1607define void @atomic_store_i32_seq_cst(ptr %a, i32 %b) nounwind {1608; RV32I-LABEL: atomic_store_i32_seq_cst:1609; RV32I: # %bb.0:1610; RV32I-NEXT: addi sp, sp, -161611; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1612; RV32I-NEXT: li a2, 51613; RV32I-NEXT: call __atomic_store_41614; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1615; RV32I-NEXT: addi sp, sp, 161616; RV32I-NEXT: ret1617;1618; RV32IA-WMO-LABEL: atomic_store_i32_seq_cst:1619; RV32IA-WMO: # %bb.0:1620; RV32IA-WMO-NEXT: fence rw, w1621; RV32IA-WMO-NEXT: sw a1, 0(a0)1622; RV32IA-WMO-NEXT: ret1623;1624; RV32IA-TSO-LABEL: atomic_store_i32_seq_cst:1625; RV32IA-TSO: # %bb.0:1626; RV32IA-TSO-NEXT: sw a1, 0(a0)1627; RV32IA-TSO-NEXT: fence rw, rw1628; RV32IA-TSO-NEXT: ret1629;1630; RV64I-LABEL: atomic_store_i32_seq_cst:1631; RV64I: # %bb.0:1632; RV64I-NEXT: addi sp, sp, -161633; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1634; RV64I-NEXT: li a2, 51635; RV64I-NEXT: call __atomic_store_41636; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1637; RV64I-NEXT: addi sp, sp, 161638; RV64I-NEXT: ret1639;1640; RV64IA-WMO-LABEL: atomic_store_i32_seq_cst:1641; RV64IA-WMO: # %bb.0:1642; RV64IA-WMO-NEXT: fence rw, w1643; RV64IA-WMO-NEXT: sw a1, 0(a0)1644; RV64IA-WMO-NEXT: ret1645;1646; RV64IA-TSO-LABEL: atomic_store_i32_seq_cst:1647; RV64IA-TSO: # %bb.0:1648; RV64IA-TSO-NEXT: sw a1, 0(a0)1649; RV64IA-TSO-NEXT: fence rw, rw1650; RV64IA-TSO-NEXT: ret1651;1652; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_store_i32_seq_cst:1653; RV32IA-WMO-TRAILING-FENCE: # %bb.0:1654; RV32IA-WMO-TRAILING-FENCE-NEXT: fence rw, w1655; RV32IA-WMO-TRAILING-FENCE-NEXT: sw a1, 0(a0)1656; RV32IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw1657; RV32IA-WMO-TRAILING-FENCE-NEXT: ret1658;1659; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_store_i32_seq_cst:1660; RV32IA-TSO-TRAILING-FENCE: # %bb.0:1661; RV32IA-TSO-TRAILING-FENCE-NEXT: sw a1, 0(a0)1662; RV32IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw1663; RV32IA-TSO-TRAILING-FENCE-NEXT: ret1664;1665; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_store_i32_seq_cst:1666; RV64IA-WMO-TRAILING-FENCE: # %bb.0:1667; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, w1668; RV64IA-WMO-TRAILING-FENCE-NEXT: sw a1, 0(a0)1669; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw1670; RV64IA-WMO-TRAILING-FENCE-NEXT: ret1671;1672; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_store_i32_seq_cst:1673; RV64IA-TSO-TRAILING-FENCE: # %bb.0:1674; RV64IA-TSO-TRAILING-FENCE-NEXT: sw a1, 0(a0)1675; RV64IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw1676; RV64IA-TSO-TRAILING-FENCE-NEXT: ret1677;1678; RV32IA-ZALASR-LABEL: atomic_store_i32_seq_cst:1679; RV32IA-ZALASR: # %bb.0:1680; RV32IA-ZALASR-NEXT: sw.rl a1, (a0)1681; RV32IA-ZALASR-NEXT: ret1682;1683; RV64IA-ZALASR-LABEL: atomic_store_i32_seq_cst:1684; RV64IA-ZALASR: # %bb.0:1685; RV64IA-ZALASR-NEXT: sw.rl a1, (a0)1686; RV64IA-ZALASR-NEXT: ret1687 store atomic i32 %b, ptr %a seq_cst, align 41688 ret void1689}1690 1691define void @atomic_store_i64_unordered(ptr %a, i64 %b) nounwind {1692; RV32I-LABEL: atomic_store_i64_unordered:1693; RV32I: # %bb.0:1694; RV32I-NEXT: addi sp, sp, -161695; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1696; RV32I-NEXT: li a3, 01697; RV32I-NEXT: call __atomic_store_81698; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1699; RV32I-NEXT: addi sp, sp, 161700; RV32I-NEXT: ret1701;1702; RV32IA-LABEL: atomic_store_i64_unordered:1703; RV32IA: # %bb.0:1704; RV32IA-NEXT: addi sp, sp, -161705; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1706; RV32IA-NEXT: li a3, 01707; RV32IA-NEXT: call __atomic_store_81708; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1709; RV32IA-NEXT: addi sp, sp, 161710; RV32IA-NEXT: ret1711;1712; RV64I-LABEL: atomic_store_i64_unordered:1713; RV64I: # %bb.0:1714; RV64I-NEXT: addi sp, sp, -161715; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1716; RV64I-NEXT: li a2, 01717; RV64I-NEXT: call __atomic_store_81718; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1719; RV64I-NEXT: addi sp, sp, 161720; RV64I-NEXT: ret1721;1722; RV64IA-LABEL: atomic_store_i64_unordered:1723; RV64IA: # %bb.0:1724; RV64IA-NEXT: sd a1, 0(a0)1725; RV64IA-NEXT: ret1726 store atomic i64 %b, ptr %a unordered, align 81727 ret void1728}1729 1730define void @atomic_store_i64_monotonic(ptr %a, i64 %b) nounwind {1731; RV32I-LABEL: atomic_store_i64_monotonic:1732; RV32I: # %bb.0:1733; RV32I-NEXT: addi sp, sp, -161734; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1735; RV32I-NEXT: li a3, 01736; RV32I-NEXT: call __atomic_store_81737; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1738; RV32I-NEXT: addi sp, sp, 161739; RV32I-NEXT: ret1740;1741; RV32IA-LABEL: atomic_store_i64_monotonic:1742; RV32IA: # %bb.0:1743; RV32IA-NEXT: addi sp, sp, -161744; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1745; RV32IA-NEXT: li a3, 01746; RV32IA-NEXT: call __atomic_store_81747; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1748; RV32IA-NEXT: addi sp, sp, 161749; RV32IA-NEXT: ret1750;1751; RV64I-LABEL: atomic_store_i64_monotonic:1752; RV64I: # %bb.0:1753; RV64I-NEXT: addi sp, sp, -161754; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1755; RV64I-NEXT: li a2, 01756; RV64I-NEXT: call __atomic_store_81757; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1758; RV64I-NEXT: addi sp, sp, 161759; RV64I-NEXT: ret1760;1761; RV64IA-LABEL: atomic_store_i64_monotonic:1762; RV64IA: # %bb.0:1763; RV64IA-NEXT: sd a1, 0(a0)1764; RV64IA-NEXT: ret1765 store atomic i64 %b, ptr %a monotonic, align 81766 ret void1767}1768 1769define void @atomic_store_i64_release(ptr %a, i64 %b) nounwind {1770; RV32I-LABEL: atomic_store_i64_release:1771; RV32I: # %bb.0:1772; RV32I-NEXT: addi sp, sp, -161773; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1774; RV32I-NEXT: li a3, 31775; RV32I-NEXT: call __atomic_store_81776; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1777; RV32I-NEXT: addi sp, sp, 161778; RV32I-NEXT: ret1779;1780; RV32IA-LABEL: atomic_store_i64_release:1781; RV32IA: # %bb.0:1782; RV32IA-NEXT: addi sp, sp, -161783; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1784; RV32IA-NEXT: li a3, 31785; RV32IA-NEXT: call __atomic_store_81786; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1787; RV32IA-NEXT: addi sp, sp, 161788; RV32IA-NEXT: ret1789;1790; RV64I-LABEL: atomic_store_i64_release:1791; RV64I: # %bb.0:1792; RV64I-NEXT: addi sp, sp, -161793; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1794; RV64I-NEXT: li a2, 31795; RV64I-NEXT: call __atomic_store_81796; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1797; RV64I-NEXT: addi sp, sp, 161798; RV64I-NEXT: ret1799;1800; RV64IA-WMO-LABEL: atomic_store_i64_release:1801; RV64IA-WMO: # %bb.0:1802; RV64IA-WMO-NEXT: fence rw, w1803; RV64IA-WMO-NEXT: sd a1, 0(a0)1804; RV64IA-WMO-NEXT: ret1805;1806; RV64IA-TSO-LABEL: atomic_store_i64_release:1807; RV64IA-TSO: # %bb.0:1808; RV64IA-TSO-NEXT: sd a1, 0(a0)1809; RV64IA-TSO-NEXT: ret1810;1811; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_store_i64_release:1812; RV64IA-WMO-TRAILING-FENCE: # %bb.0:1813; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, w1814; RV64IA-WMO-TRAILING-FENCE-NEXT: sd a1, 0(a0)1815; RV64IA-WMO-TRAILING-FENCE-NEXT: ret1816;1817; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_store_i64_release:1818; RV64IA-TSO-TRAILING-FENCE: # %bb.0:1819; RV64IA-TSO-TRAILING-FENCE-NEXT: sd a1, 0(a0)1820; RV64IA-TSO-TRAILING-FENCE-NEXT: ret1821;1822; RV64IA-ZALASR-WMO-LABEL: atomic_store_i64_release:1823; RV64IA-ZALASR-WMO: # %bb.0:1824; RV64IA-ZALASR-WMO-NEXT: sd.rl a1, (a0)1825; RV64IA-ZALASR-WMO-NEXT: ret1826;1827; RV64IA-ZALASR-TSO-LABEL: atomic_store_i64_release:1828; RV64IA-ZALASR-TSO: # %bb.0:1829; RV64IA-ZALASR-TSO-NEXT: sd a1, 0(a0)1830; RV64IA-ZALASR-TSO-NEXT: ret1831 store atomic i64 %b, ptr %a release, align 81832 ret void1833}1834 1835define void @atomic_store_i64_seq_cst(ptr %a, i64 %b) nounwind {1836; RV32I-LABEL: atomic_store_i64_seq_cst:1837; RV32I: # %bb.0:1838; RV32I-NEXT: addi sp, sp, -161839; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1840; RV32I-NEXT: li a3, 51841; RV32I-NEXT: call __atomic_store_81842; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1843; RV32I-NEXT: addi sp, sp, 161844; RV32I-NEXT: ret1845;1846; RV32IA-LABEL: atomic_store_i64_seq_cst:1847; RV32IA: # %bb.0:1848; RV32IA-NEXT: addi sp, sp, -161849; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1850; RV32IA-NEXT: li a3, 51851; RV32IA-NEXT: call __atomic_store_81852; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1853; RV32IA-NEXT: addi sp, sp, 161854; RV32IA-NEXT: ret1855;1856; RV64I-LABEL: atomic_store_i64_seq_cst:1857; RV64I: # %bb.0:1858; RV64I-NEXT: addi sp, sp, -161859; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1860; RV64I-NEXT: li a2, 51861; RV64I-NEXT: call __atomic_store_81862; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1863; RV64I-NEXT: addi sp, sp, 161864; RV64I-NEXT: ret1865;1866; RV64IA-WMO-LABEL: atomic_store_i64_seq_cst:1867; RV64IA-WMO: # %bb.0:1868; RV64IA-WMO-NEXT: fence rw, w1869; RV64IA-WMO-NEXT: sd a1, 0(a0)1870; RV64IA-WMO-NEXT: ret1871;1872; RV64IA-TSO-LABEL: atomic_store_i64_seq_cst:1873; RV64IA-TSO: # %bb.0:1874; RV64IA-TSO-NEXT: sd a1, 0(a0)1875; RV64IA-TSO-NEXT: fence rw, rw1876; RV64IA-TSO-NEXT: ret1877;1878; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_store_i64_seq_cst:1879; RV64IA-WMO-TRAILING-FENCE: # %bb.0:1880; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, w1881; RV64IA-WMO-TRAILING-FENCE-NEXT: sd a1, 0(a0)1882; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw1883; RV64IA-WMO-TRAILING-FENCE-NEXT: ret1884;1885; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_store_i64_seq_cst:1886; RV64IA-TSO-TRAILING-FENCE: # %bb.0:1887; RV64IA-TSO-TRAILING-FENCE-NEXT: sd a1, 0(a0)1888; RV64IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw1889; RV64IA-TSO-TRAILING-FENCE-NEXT: ret1890;1891; RV64IA-ZALASR-LABEL: atomic_store_i64_seq_cst:1892; RV64IA-ZALASR: # %bb.0:1893; RV64IA-ZALASR-NEXT: sd.rl a1, (a0)1894; RV64IA-ZALASR-NEXT: ret1895 store atomic i64 %b, ptr %a seq_cst, align 81896 ret void1897}1898