1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \ 3; RUN: | FileCheck -check-prefix=RV32I %s 4; RUN: llc -mtriple=riscv32 -mattr=+a,+no-trailing-seq-cst-fence -verify-machineinstrs < %s \ 5; RUN: | FileCheck -check-prefixes=RV32IA,RV32IA-WMO %s 6; RUN: llc -mtriple=riscv32 -mattr=+a,+ztso,+no-trailing-seq-cst-fence -verify-machineinstrs < %s \ 7; RUN: | FileCheck -check-prefixes=RV32IA,RV32IA-TSO %s 8; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \ 9; RUN: | FileCheck -check-prefix=RV64I %s 10; RUN: llc -mtriple=riscv64 -mattr=+a,+no-trailing-seq-cst-fence -verify-machineinstrs < %s \ 11; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-WMO %s 12; RUN: llc -mtriple=riscv64 -mattr=+a,+ztso,+no-trailing-seq-cst-fence -verify-machineinstrs < %s \ 13; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-TSO %s 14 15 16; RUN: llc -mtriple=riscv32 -mattr=+a -verify-machineinstrs < %s \ 17; RUN: | FileCheck -check-prefixes=RV32IA,RV32IA-WMO-TRAILING-FENCE %s 18; RUN: llc -mtriple=riscv32 -mattr=+a,+ztso -verify-machineinstrs < %s \ 19; RUN: | FileCheck -check-prefixes=RV32IA,RV32IA-TSO-TRAILING-FENCE %s 20 21; RUN: llc -mtriple=riscv64 -mattr=+a -verify-machineinstrs < %s \ 22; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-WMO-TRAILING-FENCE %s 23; RUN: llc -mtriple=riscv64 -mattr=+a,+ztso -verify-machineinstrs < %s \ 24; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-TSO-TRAILING-FENCE %s 25 26; RUN: llc -mtriple=riscv32 -mattr=+a,+experimental-zalasr -verify-machineinstrs < %s \ 27; RUN: | FileCheck -check-prefixes=RV32IA,RV32IA-ZALASR,RV32IA-ZALASR-WMO %s 28; RUN: llc -mtriple=riscv32 -mattr=+a,+experimental-zalasr,+ztso -verify-machineinstrs < %s \ 29; RUN: | FileCheck -check-prefixes=RV32IA,RV32IA-ZALASR,RV32IA-ZALASR-TSO %s 30 31; RUN: llc -mtriple=riscv64 -mattr=+a,+experimental-zalasr -verify-machineinstrs < %s \ 32; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-ZALASR,RV64IA-ZALASR-WMO %s 33; RUN: llc -mtriple=riscv64 -mattr=+a,+experimental-zalasr,+ztso -verify-machineinstrs < %s \ 34; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-ZALASR,RV64IA-ZALASR-TSO %s 35 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, -16 40; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 41; RV32I-NEXT: li a1, 0 42; RV32I-NEXT: call __atomic_load_1 43; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 44; RV32I-NEXT: addi sp, sp, 16 45; RV32I-NEXT: ret 46; 47; RV32IA-LABEL: atomic_load_i8_unordered: 48; RV32IA: # %bb.0: 49; RV32IA-NEXT: lb a0, 0(a0) 50; RV32IA-NEXT: ret 51; 52; RV64I-LABEL: atomic_load_i8_unordered: 53; RV64I: # %bb.0: 54; RV64I-NEXT: addi sp, sp, -16 55; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 56; RV64I-NEXT: li a1, 0 57; RV64I-NEXT: call __atomic_load_1 58; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 59; RV64I-NEXT: addi sp, sp, 16 60; RV64I-NEXT: ret 61; 62; RV64IA-LABEL: atomic_load_i8_unordered: 63; RV64IA: # %bb.0: 64; RV64IA-NEXT: lb a0, 0(a0) 65; RV64IA-NEXT: ret 66 %1 = load atomic i8, ptr %a unordered, align 1 67 ret i8 %1 68} 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, -16 74; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 75; RV32I-NEXT: li a1, 0 76; RV32I-NEXT: call __atomic_load_1 77; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 78; RV32I-NEXT: addi sp, sp, 16 79; RV32I-NEXT: ret 80; 81; RV32IA-LABEL: atomic_load_i8_monotonic: 82; RV32IA: # %bb.0: 83; RV32IA-NEXT: lb a0, 0(a0) 84; RV32IA-NEXT: ret 85; 86; RV64I-LABEL: atomic_load_i8_monotonic: 87; RV64I: # %bb.0: 88; RV64I-NEXT: addi sp, sp, -16 89; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 90; RV64I-NEXT: li a1, 0 91; RV64I-NEXT: call __atomic_load_1 92; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 93; RV64I-NEXT: addi sp, sp, 16 94; RV64I-NEXT: ret 95; 96; RV64IA-LABEL: atomic_load_i8_monotonic: 97; RV64IA: # %bb.0: 98; RV64IA-NEXT: lb a0, 0(a0) 99; RV64IA-NEXT: ret 100 %1 = load atomic i8, ptr %a monotonic, align 1 101 ret i8 %1 102} 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, -16 108; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 109; RV32I-NEXT: li a1, 2 110; RV32I-NEXT: call __atomic_load_1 111; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 112; RV32I-NEXT: addi sp, sp, 16 113; RV32I-NEXT: ret 114; 115; RV32IA-WMO-LABEL: atomic_load_i8_acquire: 116; RV32IA-WMO: # %bb.0: 117; RV32IA-WMO-NEXT: lb a0, 0(a0) 118; RV32IA-WMO-NEXT: fence r, rw 119; RV32IA-WMO-NEXT: ret 120; 121; RV32IA-TSO-LABEL: atomic_load_i8_acquire: 122; RV32IA-TSO: # %bb.0: 123; RV32IA-TSO-NEXT: lb a0, 0(a0) 124; RV32IA-TSO-NEXT: ret 125; 126; RV64I-LABEL: atomic_load_i8_acquire: 127; RV64I: # %bb.0: 128; RV64I-NEXT: addi sp, sp, -16 129; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 130; RV64I-NEXT: li a1, 2 131; RV64I-NEXT: call __atomic_load_1 132; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 133; RV64I-NEXT: addi sp, sp, 16 134; RV64I-NEXT: ret 135; 136; RV64IA-WMO-LABEL: atomic_load_i8_acquire: 137; RV64IA-WMO: # %bb.0: 138; RV64IA-WMO-NEXT: lb a0, 0(a0) 139; RV64IA-WMO-NEXT: fence r, rw 140; RV64IA-WMO-NEXT: ret 141; 142; RV64IA-TSO-LABEL: atomic_load_i8_acquire: 143; RV64IA-TSO: # %bb.0: 144; RV64IA-TSO-NEXT: lb a0, 0(a0) 145; RV64IA-TSO-NEXT: ret 146; 147; RV32IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i8_acquire: 148; RV32IA-WMO-TRAILING-FENCE: # %bb.0: 149; RV32IA-WMO-TRAILING-FENCE-NEXT: lb a0, 0(a0) 150; RV32IA-WMO-TRAILING-FENCE-NEXT: fence r, rw 151; RV32IA-WMO-TRAILING-FENCE-NEXT: ret 152; 153; RV32IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i8_acquire: 154; RV32IA-TSO-TRAILING-FENCE: # %bb.0: 155; RV32IA-TSO-TRAILING-FENCE-NEXT: lb a0, 0(a0) 156; RV32IA-TSO-TRAILING-FENCE-NEXT: ret 157; 158; RV64IA-WMO-TRAILING-FENCE-LABEL: atomic_load_i8_acquire: 159; RV64IA-WMO-TRAILING-FENCE: # %bb.0: 160; RV64IA-WMO-TRAILING-FENCE-NEXT: lb a0, 0(a0) 161; RV64IA-WMO-TRAILING-FENCE-NEXT: fence r, rw 162; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 163; 164; RV64IA-TSO-TRAILING-FENCE-LABEL: atomic_load_i8_acquire: 165; RV64IA-TSO-TRAILING-FENCE: # %bb.0: 166; RV64IA-TSO-TRAILING-FENCE-NEXT: lb a0, 0(a0) 167; RV64IA-TSO-TRAILING-FENCE-NEXT: ret 168; 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: ret 173; 174; RV32IA-ZALASR-TSO-LABEL: atomic_load_i8_acquire: 175; RV32IA-ZALASR-TSO: # %bb.0: 176; RV32IA-ZALASR-TSO-NEXT: lb a0, 0(a0) 177; RV32IA-ZALASR-TSO-NEXT: ret 178; 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: ret 183; 184; RV64IA-ZALASR-TSO-LABEL: atomic_load_i8_acquire: 185; RV64IA-ZALASR-TSO: # %bb.0: 186; RV64IA-ZALASR-TSO-NEXT: lb a0, 0(a0) 187; RV64IA-ZALASR-TSO-NEXT: ret 188 %1 = load atomic i8, ptr %a acquire, align 1 189 ret i8 %1 190} 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, -16 196; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 197; RV32I-NEXT: li a1, 5 198; RV32I-NEXT: call __atomic_load_1 199; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 200; RV32I-NEXT: addi sp, sp, 16 201; RV32I-NEXT: ret 202; 203; RV32IA-WMO-LABEL: atomic_load_i8_seq_cst: 204; RV32IA-WMO: # %bb.0: 205; RV32IA-WMO-NEXT: fence rw, rw 206; RV32IA-WMO-NEXT: lb a0, 0(a0) 207; RV32IA-WMO-NEXT: fence r, rw 208; RV32IA-WMO-NEXT: ret 209; 210; RV32IA-TSO-LABEL: atomic_load_i8_seq_cst: 211; RV32IA-TSO: # %bb.0: 212; RV32IA-TSO-NEXT: fence rw, rw 213; RV32IA-TSO-NEXT: lb a0, 0(a0) 214; RV32IA-TSO-NEXT: ret 215; 216; RV64I-LABEL: atomic_load_i8_seq_cst: 217; RV64I: # %bb.0: 218; RV64I-NEXT: addi sp, sp, -16 219; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 220; RV64I-NEXT: li a1, 5 221; RV64I-NEXT: call __atomic_load_1 222; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 223; RV64I-NEXT: addi sp, sp, 16 224; RV64I-NEXT: ret 225; 226; RV64IA-WMO-LABEL: atomic_load_i8_seq_cst: 227; RV64IA-WMO: # %bb.0: 228; RV64IA-WMO-NEXT: fence rw, rw 229; RV64IA-WMO-NEXT: lb a0, 0(a0) 230; RV64IA-WMO-NEXT: fence r, rw 231; RV64IA-WMO-NEXT: ret 232; 233; RV64IA-TSO-LABEL: atomic_load_i8_seq_cst: 234; RV64IA-TSO: # %bb.0: 235; RV64IA-TSO-NEXT: fence rw, rw 236; RV64IA-TSO-NEXT: lb a0, 0(a0) 237; RV64IA-TSO-NEXT: ret 238; 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, rw 242; RV32IA-WMO-TRAILING-FENCE-NEXT: lb a0, 0(a0) 243; RV32IA-WMO-TRAILING-FENCE-NEXT: fence r, rw 244; RV32IA-WMO-TRAILING-FENCE-NEXT: ret 245; 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, rw 249; RV32IA-TSO-TRAILING-FENCE-NEXT: lb a0, 0(a0) 250; RV32IA-TSO-TRAILING-FENCE-NEXT: ret 251; 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, rw 255; RV64IA-WMO-TRAILING-FENCE-NEXT: lb a0, 0(a0) 256; RV64IA-WMO-TRAILING-FENCE-NEXT: fence r, rw 257; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 258; 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, rw 262; RV64IA-TSO-TRAILING-FENCE-NEXT: lb a0, 0(a0) 263; RV64IA-TSO-TRAILING-FENCE-NEXT: ret 264; 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: ret 269; 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: ret 274 %1 = load atomic i8, ptr %a seq_cst, align 1 275 ret i8 %1 276} 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, -16 282; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 283; RV32I-NEXT: li a1, 0 284; RV32I-NEXT: call __atomic_load_2 285; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 286; RV32I-NEXT: addi sp, sp, 16 287; RV32I-NEXT: ret 288; 289; RV32IA-LABEL: atomic_load_i16_unordered: 290; RV32IA: # %bb.0: 291; RV32IA-NEXT: lh a0, 0(a0) 292; RV32IA-NEXT: ret 293; 294; RV64I-LABEL: atomic_load_i16_unordered: 295; RV64I: # %bb.0: 296; RV64I-NEXT: addi sp, sp, -16 297; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 298; RV64I-NEXT: li a1, 0 299; RV64I-NEXT: call __atomic_load_2 300; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 301; RV64I-NEXT: addi sp, sp, 16 302; RV64I-NEXT: ret 303; 304; RV64IA-LABEL: atomic_load_i16_unordered: 305; RV64IA: # %bb.0: 306; RV64IA-NEXT: lh a0, 0(a0) 307; RV64IA-NEXT: ret 308 %1 = load atomic i16, ptr %a unordered, align 2 309 ret i16 %1 310} 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, -16 316; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 317; RV32I-NEXT: li a1, 0 318; RV32I-NEXT: call __atomic_load_2 319; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 320; RV32I-NEXT: addi sp, sp, 16 321; RV32I-NEXT: ret 322; 323; RV32IA-LABEL: atomic_load_i16_monotonic: 324; RV32IA: # %bb.0: 325; RV32IA-NEXT: lh a0, 0(a0) 326; RV32IA-NEXT: ret 327; 328; RV64I-LABEL: atomic_load_i16_monotonic: 329; RV64I: # %bb.0: 330; RV64I-NEXT: addi sp, sp, -16 331; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 332; RV64I-NEXT: li a1, 0 333; RV64I-NEXT: call __atomic_load_2 334; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 335; RV64I-NEXT: addi sp, sp, 16 336; RV64I-NEXT: ret 337; 338; RV64IA-LABEL: atomic_load_i16_monotonic: 339; RV64IA: # %bb.0: 340; RV64IA-NEXT: lh a0, 0(a0) 341; RV64IA-NEXT: ret 342 %1 = load atomic i16, ptr %a monotonic, align 2 343 ret i16 %1 344} 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, -16 350; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 351; RV32I-NEXT: li a1, 2 352; RV32I-NEXT: call __atomic_load_2 353; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 354; RV32I-NEXT: addi sp, sp, 16 355; RV32I-NEXT: ret 356; 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, rw 361; RV32IA-WMO-NEXT: ret 362; 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: ret 367; 368; RV64I-LABEL: atomic_load_i16_acquire: 369; RV64I: # %bb.0: 370; RV64I-NEXT: addi sp, sp, -16 371; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 372; RV64I-NEXT: li a1, 2 373; RV64I-NEXT: call __atomic_load_2 374; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 375; RV64I-NEXT: addi sp, sp, 16 376; RV64I-NEXT: ret 377; 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, rw 382; RV64IA-WMO-NEXT: ret 383; 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: ret 388; 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, rw 393; RV32IA-WMO-TRAILING-FENCE-NEXT: ret 394; 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: ret 399; 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, rw 404; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 405; 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: ret 410; 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: ret 415; 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: ret 420; 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: ret 425; 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: ret 430 %1 = load atomic i16, ptr %a acquire, align 2 431 ret i16 %1 432} 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, -16 438; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 439; RV32I-NEXT: li a1, 5 440; RV32I-NEXT: call __atomic_load_2 441; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 442; RV32I-NEXT: addi sp, sp, 16 443; RV32I-NEXT: ret 444; 445; RV32IA-WMO-LABEL: atomic_load_i16_seq_cst: 446; RV32IA-WMO: # %bb.0: 447; RV32IA-WMO-NEXT: fence rw, rw 448; RV32IA-WMO-NEXT: lh a0, 0(a0) 449; RV32IA-WMO-NEXT: fence r, rw 450; RV32IA-WMO-NEXT: ret 451; 452; RV32IA-TSO-LABEL: atomic_load_i16_seq_cst: 453; RV32IA-TSO: # %bb.0: 454; RV32IA-TSO-NEXT: fence rw, rw 455; RV32IA-TSO-NEXT: lh a0, 0(a0) 456; RV32IA-TSO-NEXT: ret 457; 458; RV64I-LABEL: atomic_load_i16_seq_cst: 459; RV64I: # %bb.0: 460; RV64I-NEXT: addi sp, sp, -16 461; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 462; RV64I-NEXT: li a1, 5 463; RV64I-NEXT: call __atomic_load_2 464; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 465; RV64I-NEXT: addi sp, sp, 16 466; RV64I-NEXT: ret 467; 468; RV64IA-WMO-LABEL: atomic_load_i16_seq_cst: 469; RV64IA-WMO: # %bb.0: 470; RV64IA-WMO-NEXT: fence rw, rw 471; RV64IA-WMO-NEXT: lh a0, 0(a0) 472; RV64IA-WMO-NEXT: fence r, rw 473; RV64IA-WMO-NEXT: ret 474; 475; RV64IA-TSO-LABEL: atomic_load_i16_seq_cst: 476; RV64IA-TSO: # %bb.0: 477; RV64IA-TSO-NEXT: fence rw, rw 478; RV64IA-TSO-NEXT: lh a0, 0(a0) 479; RV64IA-TSO-NEXT: ret 480; 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, rw 484; RV32IA-WMO-TRAILING-FENCE-NEXT: lh a0, 0(a0) 485; RV32IA-WMO-TRAILING-FENCE-NEXT: fence r, rw 486; RV32IA-WMO-TRAILING-FENCE-NEXT: ret 487; 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, rw 491; RV32IA-TSO-TRAILING-FENCE-NEXT: lh a0, 0(a0) 492; RV32IA-TSO-TRAILING-FENCE-NEXT: ret 493; 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, rw 497; RV64IA-WMO-TRAILING-FENCE-NEXT: lh a0, 0(a0) 498; RV64IA-WMO-TRAILING-FENCE-NEXT: fence r, rw 499; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 500; 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, rw 504; RV64IA-TSO-TRAILING-FENCE-NEXT: lh a0, 0(a0) 505; RV64IA-TSO-TRAILING-FENCE-NEXT: ret 506; 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: ret 511; 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: ret 516 %1 = load atomic i16, ptr %a seq_cst, align 2 517 ret i16 %1 518} 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, -16 524; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 525; RV32I-NEXT: li a1, 0 526; RV32I-NEXT: call __atomic_load_4 527; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 528; RV32I-NEXT: addi sp, sp, 16 529; RV32I-NEXT: ret 530; 531; RV32IA-LABEL: atomic_load_i32_unordered: 532; RV32IA: # %bb.0: 533; RV32IA-NEXT: lw a0, 0(a0) 534; RV32IA-NEXT: ret 535; 536; RV64I-LABEL: atomic_load_i32_unordered: 537; RV64I: # %bb.0: 538; RV64I-NEXT: addi sp, sp, -16 539; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 540; RV64I-NEXT: li a1, 0 541; RV64I-NEXT: call __atomic_load_4 542; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 543; RV64I-NEXT: addi sp, sp, 16 544; RV64I-NEXT: ret 545; 546; RV64IA-LABEL: atomic_load_i32_unordered: 547; RV64IA: # %bb.0: 548; RV64IA-NEXT: lw a0, 0(a0) 549; RV64IA-NEXT: ret 550 %1 = load atomic i32, ptr %a unordered, align 4 551 ret i32 %1 552} 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, -16 558; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 559; RV32I-NEXT: li a1, 0 560; RV32I-NEXT: call __atomic_load_4 561; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 562; RV32I-NEXT: addi sp, sp, 16 563; RV32I-NEXT: ret 564; 565; RV32IA-LABEL: atomic_load_i32_monotonic: 566; RV32IA: # %bb.0: 567; RV32IA-NEXT: lw a0, 0(a0) 568; RV32IA-NEXT: ret 569; 570; RV64I-LABEL: atomic_load_i32_monotonic: 571; RV64I: # %bb.0: 572; RV64I-NEXT: addi sp, sp, -16 573; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 574; RV64I-NEXT: li a1, 0 575; RV64I-NEXT: call __atomic_load_4 576; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 577; RV64I-NEXT: addi sp, sp, 16 578; RV64I-NEXT: ret 579; 580; RV64IA-LABEL: atomic_load_i32_monotonic: 581; RV64IA: # %bb.0: 582; RV64IA-NEXT: lw a0, 0(a0) 583; RV64IA-NEXT: ret 584 %1 = load atomic i32, ptr %a monotonic, align 4 585 ret i32 %1 586} 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, -16 592; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 593; RV32I-NEXT: li a1, 2 594; RV32I-NEXT: call __atomic_load_4 595; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 596; RV32I-NEXT: addi sp, sp, 16 597; RV32I-NEXT: ret 598; 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, rw 603; RV32IA-WMO-NEXT: ret 604; 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: ret 609; 610; RV64I-LABEL: atomic_load_i32_acquire: 611; RV64I: # %bb.0: 612; RV64I-NEXT: addi sp, sp, -16 613; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 614; RV64I-NEXT: li a1, 2 615; RV64I-NEXT: call __atomic_load_4 616; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 617; RV64I-NEXT: addi sp, sp, 16 618; RV64I-NEXT: ret 619; 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, rw 624; RV64IA-WMO-NEXT: ret 625; 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: ret 630; 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, rw 635; RV32IA-WMO-TRAILING-FENCE-NEXT: ret 636; 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: ret 641; 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, rw 646; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 647; 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: ret 652; 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: ret 657; 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: ret 662; 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: ret 667; 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: ret 672 %1 = load atomic i32, ptr %a acquire, align 4 673 ret i32 %1 674} 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, -16 680; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 681; RV32I-NEXT: li a1, 5 682; RV32I-NEXT: call __atomic_load_4 683; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 684; RV32I-NEXT: addi sp, sp, 16 685; RV32I-NEXT: ret 686; 687; RV32IA-WMO-LABEL: atomic_load_i32_seq_cst: 688; RV32IA-WMO: # %bb.0: 689; RV32IA-WMO-NEXT: fence rw, rw 690; RV32IA-WMO-NEXT: lw a0, 0(a0) 691; RV32IA-WMO-NEXT: fence r, rw 692; RV32IA-WMO-NEXT: ret 693; 694; RV32IA-TSO-LABEL: atomic_load_i32_seq_cst: 695; RV32IA-TSO: # %bb.0: 696; RV32IA-TSO-NEXT: fence rw, rw 697; RV32IA-TSO-NEXT: lw a0, 0(a0) 698; RV32IA-TSO-NEXT: ret 699; 700; RV64I-LABEL: atomic_load_i32_seq_cst: 701; RV64I: # %bb.0: 702; RV64I-NEXT: addi sp, sp, -16 703; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 704; RV64I-NEXT: li a1, 5 705; RV64I-NEXT: call __atomic_load_4 706; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 707; RV64I-NEXT: addi sp, sp, 16 708; RV64I-NEXT: ret 709; 710; RV64IA-WMO-LABEL: atomic_load_i32_seq_cst: 711; RV64IA-WMO: # %bb.0: 712; RV64IA-WMO-NEXT: fence rw, rw 713; RV64IA-WMO-NEXT: lw a0, 0(a0) 714; RV64IA-WMO-NEXT: fence r, rw 715; RV64IA-WMO-NEXT: ret 716; 717; RV64IA-TSO-LABEL: atomic_load_i32_seq_cst: 718; RV64IA-TSO: # %bb.0: 719; RV64IA-TSO-NEXT: fence rw, rw 720; RV64IA-TSO-NEXT: lw a0, 0(a0) 721; RV64IA-TSO-NEXT: ret 722; 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, rw 726; RV32IA-WMO-TRAILING-FENCE-NEXT: lw a0, 0(a0) 727; RV32IA-WMO-TRAILING-FENCE-NEXT: fence r, rw 728; RV32IA-WMO-TRAILING-FENCE-NEXT: ret 729; 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, rw 733; RV32IA-TSO-TRAILING-FENCE-NEXT: lw a0, 0(a0) 734; RV32IA-TSO-TRAILING-FENCE-NEXT: ret 735; 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, rw 739; RV64IA-WMO-TRAILING-FENCE-NEXT: lw a0, 0(a0) 740; RV64IA-WMO-TRAILING-FENCE-NEXT: fence r, rw 741; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 742; 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, rw 746; RV64IA-TSO-TRAILING-FENCE-NEXT: lw a0, 0(a0) 747; RV64IA-TSO-TRAILING-FENCE-NEXT: ret 748; 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: ret 753; 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: ret 758 %1 = load atomic i32, ptr %a seq_cst, align 4 759 ret i32 %1 760} 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, -16 766; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 767; RV32I-NEXT: li a1, 0 768; RV32I-NEXT: call __atomic_load_8 769; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 770; RV32I-NEXT: addi sp, sp, 16 771; RV32I-NEXT: ret 772; 773; RV32IA-LABEL: atomic_load_i64_unordered: 774; RV32IA: # %bb.0: 775; RV32IA-NEXT: addi sp, sp, -16 776; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 777; RV32IA-NEXT: li a1, 0 778; RV32IA-NEXT: call __atomic_load_8 779; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 780; RV32IA-NEXT: addi sp, sp, 16 781; RV32IA-NEXT: ret 782; 783; RV64I-LABEL: atomic_load_i64_unordered: 784; RV64I: # %bb.0: 785; RV64I-NEXT: addi sp, sp, -16 786; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 787; RV64I-NEXT: li a1, 0 788; RV64I-NEXT: call __atomic_load_8 789; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 790; RV64I-NEXT: addi sp, sp, 16 791; RV64I-NEXT: ret 792; 793; RV64IA-LABEL: atomic_load_i64_unordered: 794; RV64IA: # %bb.0: 795; RV64IA-NEXT: ld a0, 0(a0) 796; RV64IA-NEXT: ret 797 %1 = load atomic i64, ptr %a unordered, align 8 798 ret i64 %1 799} 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, -16 805; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 806; RV32I-NEXT: li a1, 0 807; RV32I-NEXT: call __atomic_load_8 808; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 809; RV32I-NEXT: addi sp, sp, 16 810; RV32I-NEXT: ret 811; 812; RV32IA-LABEL: atomic_load_i64_monotonic: 813; RV32IA: # %bb.0: 814; RV32IA-NEXT: addi sp, sp, -16 815; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 816; RV32IA-NEXT: li a1, 0 817; RV32IA-NEXT: call __atomic_load_8 818; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 819; RV32IA-NEXT: addi sp, sp, 16 820; RV32IA-NEXT: ret 821; 822; RV64I-LABEL: atomic_load_i64_monotonic: 823; RV64I: # %bb.0: 824; RV64I-NEXT: addi sp, sp, -16 825; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 826; RV64I-NEXT: li a1, 0 827; RV64I-NEXT: call __atomic_load_8 828; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 829; RV64I-NEXT: addi sp, sp, 16 830; RV64I-NEXT: ret 831; 832; RV64IA-LABEL: atomic_load_i64_monotonic: 833; RV64IA: # %bb.0: 834; RV64IA-NEXT: ld a0, 0(a0) 835; RV64IA-NEXT: ret 836 %1 = load atomic i64, ptr %a monotonic, align 8 837 ret i64 %1 838} 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, -16 844; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 845; RV32I-NEXT: li a1, 2 846; RV32I-NEXT: call __atomic_load_8 847; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 848; RV32I-NEXT: addi sp, sp, 16 849; RV32I-NEXT: ret 850; 851; RV32IA-LABEL: atomic_load_i64_acquire: 852; RV32IA: # %bb.0: 853; RV32IA-NEXT: addi sp, sp, -16 854; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 855; RV32IA-NEXT: li a1, 2 856; RV32IA-NEXT: call __atomic_load_8 857; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 858; RV32IA-NEXT: addi sp, sp, 16 859; RV32IA-NEXT: ret 860; 861; RV64I-LABEL: atomic_load_i64_acquire: 862; RV64I: # %bb.0: 863; RV64I-NEXT: addi sp, sp, -16 864; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 865; RV64I-NEXT: li a1, 2 866; RV64I-NEXT: call __atomic_load_8 867; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 868; RV64I-NEXT: addi sp, sp, 16 869; RV64I-NEXT: ret 870; 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, rw 875; RV64IA-WMO-NEXT: ret 876; 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: ret 881; 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, rw 886; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 887; 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: ret 892; 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: ret 897; 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: ret 902 %1 = load atomic i64, ptr %a acquire, align 8 903 ret i64 %1 904} 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, -16 910; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 911; RV32I-NEXT: li a1, 5 912; RV32I-NEXT: call __atomic_load_8 913; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 914; RV32I-NEXT: addi sp, sp, 16 915; RV32I-NEXT: ret 916; 917; RV32IA-LABEL: atomic_load_i64_seq_cst: 918; RV32IA: # %bb.0: 919; RV32IA-NEXT: addi sp, sp, -16 920; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 921; RV32IA-NEXT: li a1, 5 922; RV32IA-NEXT: call __atomic_load_8 923; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 924; RV32IA-NEXT: addi sp, sp, 16 925; RV32IA-NEXT: ret 926; 927; RV64I-LABEL: atomic_load_i64_seq_cst: 928; RV64I: # %bb.0: 929; RV64I-NEXT: addi sp, sp, -16 930; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 931; RV64I-NEXT: li a1, 5 932; RV64I-NEXT: call __atomic_load_8 933; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 934; RV64I-NEXT: addi sp, sp, 16 935; RV64I-NEXT: ret 936; 937; RV64IA-WMO-LABEL: atomic_load_i64_seq_cst: 938; RV64IA-WMO: # %bb.0: 939; RV64IA-WMO-NEXT: fence rw, rw 940; RV64IA-WMO-NEXT: ld a0, 0(a0) 941; RV64IA-WMO-NEXT: fence r, rw 942; RV64IA-WMO-NEXT: ret 943; 944; RV64IA-TSO-LABEL: atomic_load_i64_seq_cst: 945; RV64IA-TSO: # %bb.0: 946; RV64IA-TSO-NEXT: fence rw, rw 947; RV64IA-TSO-NEXT: ld a0, 0(a0) 948; RV64IA-TSO-NEXT: ret 949; 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, rw 953; RV64IA-WMO-TRAILING-FENCE-NEXT: ld a0, 0(a0) 954; RV64IA-WMO-TRAILING-FENCE-NEXT: fence r, rw 955; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 956; 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, rw 960; RV64IA-TSO-TRAILING-FENCE-NEXT: ld a0, 0(a0) 961; RV64IA-TSO-TRAILING-FENCE-NEXT: ret 962; 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: ret 967 %1 = load atomic i64, ptr %a seq_cst, align 8 968 ret i64 %1 969} 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, -16 975; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 976; RV32I-NEXT: li a2, 0 977; RV32I-NEXT: call __atomic_store_1 978; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 979; RV32I-NEXT: addi sp, sp, 16 980; RV32I-NEXT: ret 981; 982; RV32IA-LABEL: atomic_store_i8_unordered: 983; RV32IA: # %bb.0: 984; RV32IA-NEXT: sb a1, 0(a0) 985; RV32IA-NEXT: ret 986; 987; RV64I-LABEL: atomic_store_i8_unordered: 988; RV64I: # %bb.0: 989; RV64I-NEXT: addi sp, sp, -16 990; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 991; RV64I-NEXT: li a2, 0 992; RV64I-NEXT: call __atomic_store_1 993; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 994; RV64I-NEXT: addi sp, sp, 16 995; RV64I-NEXT: ret 996; 997; RV64IA-LABEL: atomic_store_i8_unordered: 998; RV64IA: # %bb.0: 999; RV64IA-NEXT: sb a1, 0(a0) 1000; RV64IA-NEXT: ret 1001 store atomic i8 %b, ptr %a unordered, align 1 1002 ret void 1003} 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, -16 1009; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1010; RV32I-NEXT: li a2, 0 1011; RV32I-NEXT: call __atomic_store_1 1012; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1013; RV32I-NEXT: addi sp, sp, 16 1014; RV32I-NEXT: ret 1015; 1016; RV32IA-LABEL: atomic_store_i8_monotonic: 1017; RV32IA: # %bb.0: 1018; RV32IA-NEXT: sb a1, 0(a0) 1019; RV32IA-NEXT: ret 1020; 1021; RV64I-LABEL: atomic_store_i8_monotonic: 1022; RV64I: # %bb.0: 1023; RV64I-NEXT: addi sp, sp, -16 1024; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1025; RV64I-NEXT: li a2, 0 1026; RV64I-NEXT: call __atomic_store_1 1027; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1028; RV64I-NEXT: addi sp, sp, 16 1029; RV64I-NEXT: ret 1030; 1031; RV64IA-LABEL: atomic_store_i8_monotonic: 1032; RV64IA: # %bb.0: 1033; RV64IA-NEXT: sb a1, 0(a0) 1034; RV64IA-NEXT: ret 1035 store atomic i8 %b, ptr %a monotonic, align 1 1036 ret void 1037} 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, -16 1043; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1044; RV32I-NEXT: li a2, 3 1045; RV32I-NEXT: call __atomic_store_1 1046; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1047; RV32I-NEXT: addi sp, sp, 16 1048; RV32I-NEXT: ret 1049; 1050; RV32IA-WMO-LABEL: atomic_store_i8_release: 1051; RV32IA-WMO: # %bb.0: 1052; RV32IA-WMO-NEXT: fence rw, w 1053; RV32IA-WMO-NEXT: sb a1, 0(a0) 1054; RV32IA-WMO-NEXT: ret 1055; 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: ret 1060; 1061; RV64I-LABEL: atomic_store_i8_release: 1062; RV64I: # %bb.0: 1063; RV64I-NEXT: addi sp, sp, -16 1064; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1065; RV64I-NEXT: li a2, 3 1066; RV64I-NEXT: call __atomic_store_1 1067; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1068; RV64I-NEXT: addi sp, sp, 16 1069; RV64I-NEXT: ret 1070; 1071; RV64IA-WMO-LABEL: atomic_store_i8_release: 1072; RV64IA-WMO: # %bb.0: 1073; RV64IA-WMO-NEXT: fence rw, w 1074; RV64IA-WMO-NEXT: sb a1, 0(a0) 1075; RV64IA-WMO-NEXT: ret 1076; 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: ret 1081; 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, w 1085; RV32IA-WMO-TRAILING-FENCE-NEXT: sb a1, 0(a0) 1086; RV32IA-WMO-TRAILING-FENCE-NEXT: ret 1087; 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: ret 1092; 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, w 1096; RV64IA-WMO-TRAILING-FENCE-NEXT: sb a1, 0(a0) 1097; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 1098; 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: ret 1103; 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: ret 1108; 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: ret 1113; 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: ret 1118; 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: ret 1123 store atomic i8 %b, ptr %a release, align 1 1124 ret void 1125} 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, -16 1131; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1132; RV32I-NEXT: li a2, 5 1133; RV32I-NEXT: call __atomic_store_1 1134; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1135; RV32I-NEXT: addi sp, sp, 16 1136; RV32I-NEXT: ret 1137; 1138; RV32IA-WMO-LABEL: atomic_store_i8_seq_cst: 1139; RV32IA-WMO: # %bb.0: 1140; RV32IA-WMO-NEXT: fence rw, w 1141; RV32IA-WMO-NEXT: sb a1, 0(a0) 1142; RV32IA-WMO-NEXT: ret 1143; 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, rw 1148; RV32IA-TSO-NEXT: ret 1149; 1150; RV64I-LABEL: atomic_store_i8_seq_cst: 1151; RV64I: # %bb.0: 1152; RV64I-NEXT: addi sp, sp, -16 1153; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1154; RV64I-NEXT: li a2, 5 1155; RV64I-NEXT: call __atomic_store_1 1156; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1157; RV64I-NEXT: addi sp, sp, 16 1158; RV64I-NEXT: ret 1159; 1160; RV64IA-WMO-LABEL: atomic_store_i8_seq_cst: 1161; RV64IA-WMO: # %bb.0: 1162; RV64IA-WMO-NEXT: fence rw, w 1163; RV64IA-WMO-NEXT: sb a1, 0(a0) 1164; RV64IA-WMO-NEXT: ret 1165; 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, rw 1170; RV64IA-TSO-NEXT: ret 1171; 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, w 1175; RV32IA-WMO-TRAILING-FENCE-NEXT: sb a1, 0(a0) 1176; RV32IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw 1177; RV32IA-WMO-TRAILING-FENCE-NEXT: ret 1178; 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, rw 1183; RV32IA-TSO-TRAILING-FENCE-NEXT: ret 1184; 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, w 1188; RV64IA-WMO-TRAILING-FENCE-NEXT: sb a1, 0(a0) 1189; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw 1190; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 1191; 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, rw 1196; RV64IA-TSO-TRAILING-FENCE-NEXT: ret 1197; 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: ret 1202; 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: ret 1207 store atomic i8 %b, ptr %a seq_cst, align 1 1208 ret void 1209} 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, -16 1215; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1216; RV32I-NEXT: li a2, 0 1217; RV32I-NEXT: call __atomic_store_2 1218; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1219; RV32I-NEXT: addi sp, sp, 16 1220; RV32I-NEXT: ret 1221; 1222; RV32IA-LABEL: atomic_store_i16_unordered: 1223; RV32IA: # %bb.0: 1224; RV32IA-NEXT: sh a1, 0(a0) 1225; RV32IA-NEXT: ret 1226; 1227; RV64I-LABEL: atomic_store_i16_unordered: 1228; RV64I: # %bb.0: 1229; RV64I-NEXT: addi sp, sp, -16 1230; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1231; RV64I-NEXT: li a2, 0 1232; RV64I-NEXT: call __atomic_store_2 1233; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1234; RV64I-NEXT: addi sp, sp, 16 1235; RV64I-NEXT: ret 1236; 1237; RV64IA-LABEL: atomic_store_i16_unordered: 1238; RV64IA: # %bb.0: 1239; RV64IA-NEXT: sh a1, 0(a0) 1240; RV64IA-NEXT: ret 1241 store atomic i16 %b, ptr %a unordered, align 2 1242 ret void 1243} 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, -16 1249; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1250; RV32I-NEXT: li a2, 0 1251; RV32I-NEXT: call __atomic_store_2 1252; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1253; RV32I-NEXT: addi sp, sp, 16 1254; RV32I-NEXT: ret 1255; 1256; RV32IA-LABEL: atomic_store_i16_monotonic: 1257; RV32IA: # %bb.0: 1258; RV32IA-NEXT: sh a1, 0(a0) 1259; RV32IA-NEXT: ret 1260; 1261; RV64I-LABEL: atomic_store_i16_monotonic: 1262; RV64I: # %bb.0: 1263; RV64I-NEXT: addi sp, sp, -16 1264; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1265; RV64I-NEXT: li a2, 0 1266; RV64I-NEXT: call __atomic_store_2 1267; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1268; RV64I-NEXT: addi sp, sp, 16 1269; RV64I-NEXT: ret 1270; 1271; RV64IA-LABEL: atomic_store_i16_monotonic: 1272; RV64IA: # %bb.0: 1273; RV64IA-NEXT: sh a1, 0(a0) 1274; RV64IA-NEXT: ret 1275 store atomic i16 %b, ptr %a monotonic, align 2 1276 ret void 1277} 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, -16 1283; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1284; RV32I-NEXT: li a2, 3 1285; RV32I-NEXT: call __atomic_store_2 1286; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1287; RV32I-NEXT: addi sp, sp, 16 1288; RV32I-NEXT: ret 1289; 1290; RV32IA-WMO-LABEL: atomic_store_i16_release: 1291; RV32IA-WMO: # %bb.0: 1292; RV32IA-WMO-NEXT: fence rw, w 1293; RV32IA-WMO-NEXT: sh a1, 0(a0) 1294; RV32IA-WMO-NEXT: ret 1295; 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: ret 1300; 1301; RV64I-LABEL: atomic_store_i16_release: 1302; RV64I: # %bb.0: 1303; RV64I-NEXT: addi sp, sp, -16 1304; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1305; RV64I-NEXT: li a2, 3 1306; RV64I-NEXT: call __atomic_store_2 1307; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1308; RV64I-NEXT: addi sp, sp, 16 1309; RV64I-NEXT: ret 1310; 1311; RV64IA-WMO-LABEL: atomic_store_i16_release: 1312; RV64IA-WMO: # %bb.0: 1313; RV64IA-WMO-NEXT: fence rw, w 1314; RV64IA-WMO-NEXT: sh a1, 0(a0) 1315; RV64IA-WMO-NEXT: ret 1316; 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: ret 1321; 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, w 1325; RV32IA-WMO-TRAILING-FENCE-NEXT: sh a1, 0(a0) 1326; RV32IA-WMO-TRAILING-FENCE-NEXT: ret 1327; 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: ret 1332; 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, w 1336; RV64IA-WMO-TRAILING-FENCE-NEXT: sh a1, 0(a0) 1337; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 1338; 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: ret 1343; 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: ret 1348; 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: ret 1353; 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: ret 1358; 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: ret 1363 store atomic i16 %b, ptr %a release, align 2 1364 ret void 1365} 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, -16 1371; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1372; RV32I-NEXT: li a2, 5 1373; RV32I-NEXT: call __atomic_store_2 1374; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1375; RV32I-NEXT: addi sp, sp, 16 1376; RV32I-NEXT: ret 1377; 1378; RV32IA-WMO-LABEL: atomic_store_i16_seq_cst: 1379; RV32IA-WMO: # %bb.0: 1380; RV32IA-WMO-NEXT: fence rw, w 1381; RV32IA-WMO-NEXT: sh a1, 0(a0) 1382; RV32IA-WMO-NEXT: ret 1383; 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, rw 1388; RV32IA-TSO-NEXT: ret 1389; 1390; RV64I-LABEL: atomic_store_i16_seq_cst: 1391; RV64I: # %bb.0: 1392; RV64I-NEXT: addi sp, sp, -16 1393; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1394; RV64I-NEXT: li a2, 5 1395; RV64I-NEXT: call __atomic_store_2 1396; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1397; RV64I-NEXT: addi sp, sp, 16 1398; RV64I-NEXT: ret 1399; 1400; RV64IA-WMO-LABEL: atomic_store_i16_seq_cst: 1401; RV64IA-WMO: # %bb.0: 1402; RV64IA-WMO-NEXT: fence rw, w 1403; RV64IA-WMO-NEXT: sh a1, 0(a0) 1404; RV64IA-WMO-NEXT: ret 1405; 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, rw 1410; RV64IA-TSO-NEXT: ret 1411; 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, w 1415; RV32IA-WMO-TRAILING-FENCE-NEXT: sh a1, 0(a0) 1416; RV32IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw 1417; RV32IA-WMO-TRAILING-FENCE-NEXT: ret 1418; 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, rw 1423; RV32IA-TSO-TRAILING-FENCE-NEXT: ret 1424; 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, w 1428; RV64IA-WMO-TRAILING-FENCE-NEXT: sh a1, 0(a0) 1429; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw 1430; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 1431; 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, rw 1436; RV64IA-TSO-TRAILING-FENCE-NEXT: ret 1437; 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: ret 1442; 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: ret 1447 store atomic i16 %b, ptr %a seq_cst, align 2 1448 ret void 1449} 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, -16 1455; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1456; RV32I-NEXT: li a2, 0 1457; RV32I-NEXT: call __atomic_store_4 1458; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1459; RV32I-NEXT: addi sp, sp, 16 1460; RV32I-NEXT: ret 1461; 1462; RV32IA-LABEL: atomic_store_i32_unordered: 1463; RV32IA: # %bb.0: 1464; RV32IA-NEXT: sw a1, 0(a0) 1465; RV32IA-NEXT: ret 1466; 1467; RV64I-LABEL: atomic_store_i32_unordered: 1468; RV64I: # %bb.0: 1469; RV64I-NEXT: addi sp, sp, -16 1470; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1471; RV64I-NEXT: li a2, 0 1472; RV64I-NEXT: call __atomic_store_4 1473; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1474; RV64I-NEXT: addi sp, sp, 16 1475; RV64I-NEXT: ret 1476; 1477; RV64IA-LABEL: atomic_store_i32_unordered: 1478; RV64IA: # %bb.0: 1479; RV64IA-NEXT: sw a1, 0(a0) 1480; RV64IA-NEXT: ret 1481 store atomic i32 %b, ptr %a unordered, align 4 1482 ret void 1483} 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, -16 1489; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1490; RV32I-NEXT: li a2, 0 1491; RV32I-NEXT: call __atomic_store_4 1492; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1493; RV32I-NEXT: addi sp, sp, 16 1494; RV32I-NEXT: ret 1495; 1496; RV32IA-LABEL: atomic_store_i32_monotonic: 1497; RV32IA: # %bb.0: 1498; RV32IA-NEXT: sw a1, 0(a0) 1499; RV32IA-NEXT: ret 1500; 1501; RV64I-LABEL: atomic_store_i32_monotonic: 1502; RV64I: # %bb.0: 1503; RV64I-NEXT: addi sp, sp, -16 1504; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1505; RV64I-NEXT: li a2, 0 1506; RV64I-NEXT: call __atomic_store_4 1507; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1508; RV64I-NEXT: addi sp, sp, 16 1509; RV64I-NEXT: ret 1510; 1511; RV64IA-LABEL: atomic_store_i32_monotonic: 1512; RV64IA: # %bb.0: 1513; RV64IA-NEXT: sw a1, 0(a0) 1514; RV64IA-NEXT: ret 1515 store atomic i32 %b, ptr %a monotonic, align 4 1516 ret void 1517} 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, -16 1523; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1524; RV32I-NEXT: li a2, 3 1525; RV32I-NEXT: call __atomic_store_4 1526; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1527; RV32I-NEXT: addi sp, sp, 16 1528; RV32I-NEXT: ret 1529; 1530; RV32IA-WMO-LABEL: atomic_store_i32_release: 1531; RV32IA-WMO: # %bb.0: 1532; RV32IA-WMO-NEXT: fence rw, w 1533; RV32IA-WMO-NEXT: sw a1, 0(a0) 1534; RV32IA-WMO-NEXT: ret 1535; 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: ret 1540; 1541; RV64I-LABEL: atomic_store_i32_release: 1542; RV64I: # %bb.0: 1543; RV64I-NEXT: addi sp, sp, -16 1544; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1545; RV64I-NEXT: li a2, 3 1546; RV64I-NEXT: call __atomic_store_4 1547; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1548; RV64I-NEXT: addi sp, sp, 16 1549; RV64I-NEXT: ret 1550; 1551; RV64IA-WMO-LABEL: atomic_store_i32_release: 1552; RV64IA-WMO: # %bb.0: 1553; RV64IA-WMO-NEXT: fence rw, w 1554; RV64IA-WMO-NEXT: sw a1, 0(a0) 1555; RV64IA-WMO-NEXT: ret 1556; 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: ret 1561; 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, w 1565; RV32IA-WMO-TRAILING-FENCE-NEXT: sw a1, 0(a0) 1566; RV32IA-WMO-TRAILING-FENCE-NEXT: ret 1567; 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: ret 1572; 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, w 1576; RV64IA-WMO-TRAILING-FENCE-NEXT: sw a1, 0(a0) 1577; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 1578; 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: ret 1583; 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: ret 1588; 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: ret 1593; 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: ret 1598; 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: ret 1603 store atomic i32 %b, ptr %a release, align 4 1604 ret void 1605} 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, -16 1611; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1612; RV32I-NEXT: li a2, 5 1613; RV32I-NEXT: call __atomic_store_4 1614; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1615; RV32I-NEXT: addi sp, sp, 16 1616; RV32I-NEXT: ret 1617; 1618; RV32IA-WMO-LABEL: atomic_store_i32_seq_cst: 1619; RV32IA-WMO: # %bb.0: 1620; RV32IA-WMO-NEXT: fence rw, w 1621; RV32IA-WMO-NEXT: sw a1, 0(a0) 1622; RV32IA-WMO-NEXT: ret 1623; 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, rw 1628; RV32IA-TSO-NEXT: ret 1629; 1630; RV64I-LABEL: atomic_store_i32_seq_cst: 1631; RV64I: # %bb.0: 1632; RV64I-NEXT: addi sp, sp, -16 1633; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1634; RV64I-NEXT: li a2, 5 1635; RV64I-NEXT: call __atomic_store_4 1636; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1637; RV64I-NEXT: addi sp, sp, 16 1638; RV64I-NEXT: ret 1639; 1640; RV64IA-WMO-LABEL: atomic_store_i32_seq_cst: 1641; RV64IA-WMO: # %bb.0: 1642; RV64IA-WMO-NEXT: fence rw, w 1643; RV64IA-WMO-NEXT: sw a1, 0(a0) 1644; RV64IA-WMO-NEXT: ret 1645; 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, rw 1650; RV64IA-TSO-NEXT: ret 1651; 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, w 1655; RV32IA-WMO-TRAILING-FENCE-NEXT: sw a1, 0(a0) 1656; RV32IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw 1657; RV32IA-WMO-TRAILING-FENCE-NEXT: ret 1658; 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, rw 1663; RV32IA-TSO-TRAILING-FENCE-NEXT: ret 1664; 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, w 1668; RV64IA-WMO-TRAILING-FENCE-NEXT: sw a1, 0(a0) 1669; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw 1670; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 1671; 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, rw 1676; RV64IA-TSO-TRAILING-FENCE-NEXT: ret 1677; 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: ret 1682; 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: ret 1687 store atomic i32 %b, ptr %a seq_cst, align 4 1688 ret void 1689} 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, -16 1695; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1696; RV32I-NEXT: li a3, 0 1697; RV32I-NEXT: call __atomic_store_8 1698; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1699; RV32I-NEXT: addi sp, sp, 16 1700; RV32I-NEXT: ret 1701; 1702; RV32IA-LABEL: atomic_store_i64_unordered: 1703; RV32IA: # %bb.0: 1704; RV32IA-NEXT: addi sp, sp, -16 1705; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1706; RV32IA-NEXT: li a3, 0 1707; RV32IA-NEXT: call __atomic_store_8 1708; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1709; RV32IA-NEXT: addi sp, sp, 16 1710; RV32IA-NEXT: ret 1711; 1712; RV64I-LABEL: atomic_store_i64_unordered: 1713; RV64I: # %bb.0: 1714; RV64I-NEXT: addi sp, sp, -16 1715; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1716; RV64I-NEXT: li a2, 0 1717; RV64I-NEXT: call __atomic_store_8 1718; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1719; RV64I-NEXT: addi sp, sp, 16 1720; RV64I-NEXT: ret 1721; 1722; RV64IA-LABEL: atomic_store_i64_unordered: 1723; RV64IA: # %bb.0: 1724; RV64IA-NEXT: sd a1, 0(a0) 1725; RV64IA-NEXT: ret 1726 store atomic i64 %b, ptr %a unordered, align 8 1727 ret void 1728} 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, -16 1734; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1735; RV32I-NEXT: li a3, 0 1736; RV32I-NEXT: call __atomic_store_8 1737; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1738; RV32I-NEXT: addi sp, sp, 16 1739; RV32I-NEXT: ret 1740; 1741; RV32IA-LABEL: atomic_store_i64_monotonic: 1742; RV32IA: # %bb.0: 1743; RV32IA-NEXT: addi sp, sp, -16 1744; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1745; RV32IA-NEXT: li a3, 0 1746; RV32IA-NEXT: call __atomic_store_8 1747; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1748; RV32IA-NEXT: addi sp, sp, 16 1749; RV32IA-NEXT: ret 1750; 1751; RV64I-LABEL: atomic_store_i64_monotonic: 1752; RV64I: # %bb.0: 1753; RV64I-NEXT: addi sp, sp, -16 1754; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1755; RV64I-NEXT: li a2, 0 1756; RV64I-NEXT: call __atomic_store_8 1757; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1758; RV64I-NEXT: addi sp, sp, 16 1759; RV64I-NEXT: ret 1760; 1761; RV64IA-LABEL: atomic_store_i64_monotonic: 1762; RV64IA: # %bb.0: 1763; RV64IA-NEXT: sd a1, 0(a0) 1764; RV64IA-NEXT: ret 1765 store atomic i64 %b, ptr %a monotonic, align 8 1766 ret void 1767} 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, -16 1773; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1774; RV32I-NEXT: li a3, 3 1775; RV32I-NEXT: call __atomic_store_8 1776; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1777; RV32I-NEXT: addi sp, sp, 16 1778; RV32I-NEXT: ret 1779; 1780; RV32IA-LABEL: atomic_store_i64_release: 1781; RV32IA: # %bb.0: 1782; RV32IA-NEXT: addi sp, sp, -16 1783; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1784; RV32IA-NEXT: li a3, 3 1785; RV32IA-NEXT: call __atomic_store_8 1786; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1787; RV32IA-NEXT: addi sp, sp, 16 1788; RV32IA-NEXT: ret 1789; 1790; RV64I-LABEL: atomic_store_i64_release: 1791; RV64I: # %bb.0: 1792; RV64I-NEXT: addi sp, sp, -16 1793; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1794; RV64I-NEXT: li a2, 3 1795; RV64I-NEXT: call __atomic_store_8 1796; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1797; RV64I-NEXT: addi sp, sp, 16 1798; RV64I-NEXT: ret 1799; 1800; RV64IA-WMO-LABEL: atomic_store_i64_release: 1801; RV64IA-WMO: # %bb.0: 1802; RV64IA-WMO-NEXT: fence rw, w 1803; RV64IA-WMO-NEXT: sd a1, 0(a0) 1804; RV64IA-WMO-NEXT: ret 1805; 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: ret 1810; 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, w 1814; RV64IA-WMO-TRAILING-FENCE-NEXT: sd a1, 0(a0) 1815; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 1816; 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: ret 1821; 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: ret 1826; 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: ret 1831 store atomic i64 %b, ptr %a release, align 8 1832 ret void 1833} 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, -16 1839; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1840; RV32I-NEXT: li a3, 5 1841; RV32I-NEXT: call __atomic_store_8 1842; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1843; RV32I-NEXT: addi sp, sp, 16 1844; RV32I-NEXT: ret 1845; 1846; RV32IA-LABEL: atomic_store_i64_seq_cst: 1847; RV32IA: # %bb.0: 1848; RV32IA-NEXT: addi sp, sp, -16 1849; RV32IA-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1850; RV32IA-NEXT: li a3, 5 1851; RV32IA-NEXT: call __atomic_store_8 1852; RV32IA-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1853; RV32IA-NEXT: addi sp, sp, 16 1854; RV32IA-NEXT: ret 1855; 1856; RV64I-LABEL: atomic_store_i64_seq_cst: 1857; RV64I: # %bb.0: 1858; RV64I-NEXT: addi sp, sp, -16 1859; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1860; RV64I-NEXT: li a2, 5 1861; RV64I-NEXT: call __atomic_store_8 1862; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1863; RV64I-NEXT: addi sp, sp, 16 1864; RV64I-NEXT: ret 1865; 1866; RV64IA-WMO-LABEL: atomic_store_i64_seq_cst: 1867; RV64IA-WMO: # %bb.0: 1868; RV64IA-WMO-NEXT: fence rw, w 1869; RV64IA-WMO-NEXT: sd a1, 0(a0) 1870; RV64IA-WMO-NEXT: ret 1871; 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, rw 1876; RV64IA-TSO-NEXT: ret 1877; 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, w 1881; RV64IA-WMO-TRAILING-FENCE-NEXT: sd a1, 0(a0) 1882; RV64IA-WMO-TRAILING-FENCE-NEXT: fence rw, rw 1883; RV64IA-WMO-TRAILING-FENCE-NEXT: ret 1884; 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, rw 1889; RV64IA-TSO-TRAILING-FENCE-NEXT: ret 1890; 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: ret 1895 store atomic i64 %b, ptr %a seq_cst, align 8 1896 ret void 1897} 1898