brintos

brintos / llvm-project-archived public Read only

0
0
Text · 26.1 KiB · b6507e8 Raw
985 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA323; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA644 5define i8 @load_acquire_i8(ptr %ptr) {6; LA32-LABEL: load_acquire_i8:7; LA32:       # %bb.0:8; LA32-NEXT:    ld.b $a0, $a0, 09; LA32-NEXT:    dbar 2010; LA32-NEXT:    ret11;12; LA64-LABEL: load_acquire_i8:13; LA64:       # %bb.0:14; LA64-NEXT:    ld.b $a0, $a0, 015; LA64-NEXT:    dbar 2016; LA64-NEXT:    ret17  %val = load atomic i8, ptr %ptr acquire, align 118  ret i8 %val19}20 21define i16 @load_acquire_i16(ptr %ptr) {22; LA32-LABEL: load_acquire_i16:23; LA32:       # %bb.0:24; LA32-NEXT:    ld.h $a0, $a0, 025; LA32-NEXT:    dbar 2026; LA32-NEXT:    ret27;28; LA64-LABEL: load_acquire_i16:29; LA64:       # %bb.0:30; LA64-NEXT:    ld.h $a0, $a0, 031; LA64-NEXT:    dbar 2032; LA64-NEXT:    ret33  %val = load atomic i16, ptr %ptr acquire, align 234  ret i16 %val35}36 37define i32 @load_acquire_i32(ptr %ptr) {38; LA32-LABEL: load_acquire_i32:39; LA32:       # %bb.0:40; LA32-NEXT:    ld.w $a0, $a0, 041; LA32-NEXT:    dbar 2042; LA32-NEXT:    ret43;44; LA64-LABEL: load_acquire_i32:45; LA64:       # %bb.0:46; LA64-NEXT:    ld.w $a0, $a0, 047; LA64-NEXT:    dbar 2048; LA64-NEXT:    ret49  %val = load atomic i32, ptr %ptr acquire, align 450  ret i32 %val51}52 53define i64 @load_acquire_i64(ptr %ptr) {54; LA32-LABEL: load_acquire_i64:55; LA32:       # %bb.0:56; LA32-NEXT:    addi.w $sp, $sp, -1657; LA32-NEXT:    .cfi_def_cfa_offset 1658; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill59; LA32-NEXT:    .cfi_offset 1, -460; LA32-NEXT:    ori $a1, $zero, 261; LA32-NEXT:    bl __atomic_load_862; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload63; LA32-NEXT:    addi.w $sp, $sp, 1664; LA32-NEXT:    ret65;66; LA64-LABEL: load_acquire_i64:67; LA64:       # %bb.0:68; LA64-NEXT:    ld.d $a0, $a0, 069; LA64-NEXT:    dbar 2070; LA64-NEXT:    ret71  %val = load atomic i64, ptr %ptr acquire, align 872  ret i64 %val73}74 75define ptr @load_acquire_ptr(ptr %ptr) {76; LA32-LABEL: load_acquire_ptr:77; LA32:       # %bb.0:78; LA32-NEXT:    ld.w $a0, $a0, 079; LA32-NEXT:    dbar 2080; LA32-NEXT:    ret81;82; LA64-LABEL: load_acquire_ptr:83; LA64:       # %bb.0:84; LA64-NEXT:    ld.d $a0, $a0, 085; LA64-NEXT:    dbar 2086; LA64-NEXT:    ret87  %val = load atomic ptr, ptr %ptr acquire, align 888  ret ptr %val89}90 91define float @load_acquire_float(ptr %ptr) {92; LA32-LABEL: load_acquire_float:93; LA32:       # %bb.0:94; LA32-NEXT:    ld.w $a0, $a0, 095; LA32-NEXT:    movgr2fr.w $fa0, $a096; LA32-NEXT:    dbar 2097; LA32-NEXT:    ret98;99; LA64-LABEL: load_acquire_float:100; LA64:       # %bb.0:101; LA64-NEXT:    ld.w $a0, $a0, 0102; LA64-NEXT:    movgr2fr.w $fa0, $a0103; LA64-NEXT:    dbar 20104; LA64-NEXT:    ret105  %val = load atomic float, ptr %ptr acquire, align 8106  ret float %val107}108 109define double @load_acquire_double(ptr %ptr) {110; LA32-LABEL: load_acquire_double:111; LA32:       # %bb.0:112; LA32-NEXT:    addi.w $sp, $sp, -16113; LA32-NEXT:    .cfi_def_cfa_offset 16114; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill115; LA32-NEXT:    .cfi_offset 1, -4116; LA32-NEXT:    ori $a1, $zero, 2117; LA32-NEXT:    bl __atomic_load_8118; LA32-NEXT:    movgr2fr.w $fa0, $a0119; LA32-NEXT:    movgr2frh.w $fa0, $a1120; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload121; LA32-NEXT:    addi.w $sp, $sp, 16122; LA32-NEXT:    ret123;124; LA64-LABEL: load_acquire_double:125; LA64:       # %bb.0:126; LA64-NEXT:    ld.d $a0, $a0, 0127; LA64-NEXT:    movgr2fr.d $fa0, $a0128; LA64-NEXT:    dbar 20129; LA64-NEXT:    ret130  %val = load atomic double, ptr %ptr acquire, align 8131  ret double %val132}133 134define i8 @load_unordered_i8(ptr %ptr) {135; LA32-LABEL: load_unordered_i8:136; LA32:       # %bb.0:137; LA32-NEXT:    ld.b $a0, $a0, 0138; LA32-NEXT:    ret139;140; LA64-LABEL: load_unordered_i8:141; LA64:       # %bb.0:142; LA64-NEXT:    ld.b $a0, $a0, 0143; LA64-NEXT:    ret144  %val = load atomic i8, ptr %ptr unordered, align 1145  ret i8 %val146}147 148define i16 @load_unordered_i16(ptr %ptr) {149; LA32-LABEL: load_unordered_i16:150; LA32:       # %bb.0:151; LA32-NEXT:    ld.h $a0, $a0, 0152; LA32-NEXT:    ret153;154; LA64-LABEL: load_unordered_i16:155; LA64:       # %bb.0:156; LA64-NEXT:    ld.h $a0, $a0, 0157; LA64-NEXT:    ret158  %val = load atomic i16, ptr %ptr unordered, align 2159  ret i16 %val160}161 162define i32 @load_unordered_i32(ptr %ptr) {163; LA32-LABEL: load_unordered_i32:164; LA32:       # %bb.0:165; LA32-NEXT:    ld.w $a0, $a0, 0166; LA32-NEXT:    ret167;168; LA64-LABEL: load_unordered_i32:169; LA64:       # %bb.0:170; LA64-NEXT:    ld.w $a0, $a0, 0171; LA64-NEXT:    ret172  %val = load atomic i32, ptr %ptr unordered, align 4173  ret i32 %val174}175 176define i64 @load_unordered_i64(ptr %ptr) {177; LA32-LABEL: load_unordered_i64:178; LA32:       # %bb.0:179; LA32-NEXT:    addi.w $sp, $sp, -16180; LA32-NEXT:    .cfi_def_cfa_offset 16181; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill182; LA32-NEXT:    .cfi_offset 1, -4183; LA32-NEXT:    move $a1, $zero184; LA32-NEXT:    bl __atomic_load_8185; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload186; LA32-NEXT:    addi.w $sp, $sp, 16187; LA32-NEXT:    ret188;189; LA64-LABEL: load_unordered_i64:190; LA64:       # %bb.0:191; LA64-NEXT:    ld.d $a0, $a0, 0192; LA64-NEXT:    ret193  %val = load atomic i64, ptr %ptr unordered, align 8194  ret i64 %val195}196 197define ptr @load_unordered_ptr(ptr %ptr) {198; LA32-LABEL: load_unordered_ptr:199; LA32:       # %bb.0:200; LA32-NEXT:    ld.w $a0, $a0, 0201; LA32-NEXT:    ret202;203; LA64-LABEL: load_unordered_ptr:204; LA64:       # %bb.0:205; LA64-NEXT:    ld.d $a0, $a0, 0206; LA64-NEXT:    ret207  %val = load atomic ptr, ptr %ptr unordered, align 8208  ret ptr %val209}210 211define float @load_unordered_float(ptr %ptr) {212; LA32-LABEL: load_unordered_float:213; LA32:       # %bb.0:214; LA32-NEXT:    ld.w $a0, $a0, 0215; LA32-NEXT:    movgr2fr.w $fa0, $a0216; LA32-NEXT:    ret217;218; LA64-LABEL: load_unordered_float:219; LA64:       # %bb.0:220; LA64-NEXT:    ld.w $a0, $a0, 0221; LA64-NEXT:    movgr2fr.w $fa0, $a0222; LA64-NEXT:    ret223  %val = load atomic float, ptr %ptr unordered, align 8224  ret float %val225}226 227define double @load_unordered_double(ptr %ptr) {228; LA32-LABEL: load_unordered_double:229; LA32:       # %bb.0:230; LA32-NEXT:    addi.w $sp, $sp, -16231; LA32-NEXT:    .cfi_def_cfa_offset 16232; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill233; LA32-NEXT:    .cfi_offset 1, -4234; LA32-NEXT:    move $a1, $zero235; LA32-NEXT:    bl __atomic_load_8236; LA32-NEXT:    movgr2fr.w $fa0, $a0237; LA32-NEXT:    movgr2frh.w $fa0, $a1238; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload239; LA32-NEXT:    addi.w $sp, $sp, 16240; LA32-NEXT:    ret241;242; LA64-LABEL: load_unordered_double:243; LA64:       # %bb.0:244; LA64-NEXT:    ld.d $a0, $a0, 0245; LA64-NEXT:    movgr2fr.d $fa0, $a0246; LA64-NEXT:    ret247  %val = load atomic double, ptr %ptr unordered, align 8248  ret double %val249}250 251define i8 @load_monotonic_i8(ptr %ptr) {252; LA32-LABEL: load_monotonic_i8:253; LA32:       # %bb.0:254; LA32-NEXT:    ld.b $a0, $a0, 0255; LA32-NEXT:    ret256;257; LA64-LABEL: load_monotonic_i8:258; LA64:       # %bb.0:259; LA64-NEXT:    ld.b $a0, $a0, 0260; LA64-NEXT:    ret261  %val = load atomic i8, ptr %ptr monotonic, align 1262  ret i8 %val263}264 265define i16 @load_monotonic_i16(ptr %ptr) {266; LA32-LABEL: load_monotonic_i16:267; LA32:       # %bb.0:268; LA32-NEXT:    ld.h $a0, $a0, 0269; LA32-NEXT:    ret270;271; LA64-LABEL: load_monotonic_i16:272; LA64:       # %bb.0:273; LA64-NEXT:    ld.h $a0, $a0, 0274; LA64-NEXT:    ret275  %val = load atomic i16, ptr %ptr monotonic, align 2276  ret i16 %val277}278 279define i32 @load_monotonic_i32(ptr %ptr) {280; LA32-LABEL: load_monotonic_i32:281; LA32:       # %bb.0:282; LA32-NEXT:    ld.w $a0, $a0, 0283; LA32-NEXT:    ret284;285; LA64-LABEL: load_monotonic_i32:286; LA64:       # %bb.0:287; LA64-NEXT:    ld.w $a0, $a0, 0288; LA64-NEXT:    ret289  %val = load atomic i32, ptr %ptr monotonic, align 4290  ret i32 %val291}292 293define i64 @load_monotonic_i64(ptr %ptr) {294; LA32-LABEL: load_monotonic_i64:295; LA32:       # %bb.0:296; LA32-NEXT:    addi.w $sp, $sp, -16297; LA32-NEXT:    .cfi_def_cfa_offset 16298; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill299; LA32-NEXT:    .cfi_offset 1, -4300; LA32-NEXT:    move $a1, $zero301; LA32-NEXT:    bl __atomic_load_8302; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload303; LA32-NEXT:    addi.w $sp, $sp, 16304; LA32-NEXT:    ret305;306; LA64-LABEL: load_monotonic_i64:307; LA64:       # %bb.0:308; LA64-NEXT:    ld.d $a0, $a0, 0309; LA64-NEXT:    ret310  %val = load atomic i64, ptr %ptr monotonic, align 8311  ret i64 %val312}313 314define ptr @load_monotonic_ptr(ptr %ptr) {315; LA32-LABEL: load_monotonic_ptr:316; LA32:       # %bb.0:317; LA32-NEXT:    ld.w $a0, $a0, 0318; LA32-NEXT:    ret319;320; LA64-LABEL: load_monotonic_ptr:321; LA64:       # %bb.0:322; LA64-NEXT:    ld.d $a0, $a0, 0323; LA64-NEXT:    ret324  %val = load atomic ptr, ptr %ptr monotonic, align 8325  ret ptr %val326}327 328define float @load_monotonic_float(ptr %ptr) {329; LA32-LABEL: load_monotonic_float:330; LA32:       # %bb.0:331; LA32-NEXT:    ld.w $a0, $a0, 0332; LA32-NEXT:    movgr2fr.w $fa0, $a0333; LA32-NEXT:    ret334;335; LA64-LABEL: load_monotonic_float:336; LA64:       # %bb.0:337; LA64-NEXT:    ld.w $a0, $a0, 0338; LA64-NEXT:    movgr2fr.w $fa0, $a0339; LA64-NEXT:    ret340  %val = load atomic float, ptr %ptr monotonic, align 8341  ret float %val342}343 344define double @load_monotonic_double(ptr %ptr) {345; LA32-LABEL: load_monotonic_double:346; LA32:       # %bb.0:347; LA32-NEXT:    addi.w $sp, $sp, -16348; LA32-NEXT:    .cfi_def_cfa_offset 16349; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill350; LA32-NEXT:    .cfi_offset 1, -4351; LA32-NEXT:    move $a1, $zero352; LA32-NEXT:    bl __atomic_load_8353; LA32-NEXT:    movgr2fr.w $fa0, $a0354; LA32-NEXT:    movgr2frh.w $fa0, $a1355; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload356; LA32-NEXT:    addi.w $sp, $sp, 16357; LA32-NEXT:    ret358;359; LA64-LABEL: load_monotonic_double:360; LA64:       # %bb.0:361; LA64-NEXT:    ld.d $a0, $a0, 0362; LA64-NEXT:    movgr2fr.d $fa0, $a0363; LA64-NEXT:    ret364  %val = load atomic double, ptr %ptr monotonic, align 8365  ret double %val366}367 368define i8 @load_seq_cst_i8(ptr %ptr) {369; LA32-LABEL: load_seq_cst_i8:370; LA32:       # %bb.0:371; LA32-NEXT:    ld.b $a0, $a0, 0372; LA32-NEXT:    dbar 16373; LA32-NEXT:    ret374;375; LA64-LABEL: load_seq_cst_i8:376; LA64:       # %bb.0:377; LA64-NEXT:    ld.b $a0, $a0, 0378; LA64-NEXT:    dbar 16379; LA64-NEXT:    ret380  %val = load atomic i8, ptr %ptr seq_cst, align 1381  ret i8 %val382}383 384define i16 @load_seq_cst_i16(ptr %ptr) {385; LA32-LABEL: load_seq_cst_i16:386; LA32:       # %bb.0:387; LA32-NEXT:    ld.h $a0, $a0, 0388; LA32-NEXT:    dbar 16389; LA32-NEXT:    ret390;391; LA64-LABEL: load_seq_cst_i16:392; LA64:       # %bb.0:393; LA64-NEXT:    ld.h $a0, $a0, 0394; LA64-NEXT:    dbar 16395; LA64-NEXT:    ret396  %val = load atomic i16, ptr %ptr seq_cst, align 2397  ret i16 %val398}399 400define i32 @load_seq_cst_i32(ptr %ptr) {401; LA32-LABEL: load_seq_cst_i32:402; LA32:       # %bb.0:403; LA32-NEXT:    ld.w $a0, $a0, 0404; LA32-NEXT:    dbar 16405; LA32-NEXT:    ret406;407; LA64-LABEL: load_seq_cst_i32:408; LA64:       # %bb.0:409; LA64-NEXT:    ld.w $a0, $a0, 0410; LA64-NEXT:    dbar 16411; LA64-NEXT:    ret412  %val = load atomic i32, ptr %ptr seq_cst, align 4413  ret i32 %val414}415 416define i64 @load_seq_cst_i64(ptr %ptr) {417; LA32-LABEL: load_seq_cst_i64:418; LA32:       # %bb.0:419; LA32-NEXT:    addi.w $sp, $sp, -16420; LA32-NEXT:    .cfi_def_cfa_offset 16421; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill422; LA32-NEXT:    .cfi_offset 1, -4423; LA32-NEXT:    ori $a1, $zero, 5424; LA32-NEXT:    bl __atomic_load_8425; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload426; LA32-NEXT:    addi.w $sp, $sp, 16427; LA32-NEXT:    ret428;429; LA64-LABEL: load_seq_cst_i64:430; LA64:       # %bb.0:431; LA64-NEXT:    ld.d $a0, $a0, 0432; LA64-NEXT:    dbar 16433; LA64-NEXT:    ret434  %val = load atomic i64, ptr %ptr seq_cst, align 8435  ret i64 %val436}437 438define ptr @load_seq_cst_ptr(ptr %ptr) {439; LA32-LABEL: load_seq_cst_ptr:440; LA32:       # %bb.0:441; LA32-NEXT:    ld.w $a0, $a0, 0442; LA32-NEXT:    dbar 16443; LA32-NEXT:    ret444;445; LA64-LABEL: load_seq_cst_ptr:446; LA64:       # %bb.0:447; LA64-NEXT:    ld.d $a0, $a0, 0448; LA64-NEXT:    dbar 16449; LA64-NEXT:    ret450  %val = load atomic ptr, ptr %ptr seq_cst, align 8451  ret ptr %val452}453 454define float @load_seq_cst_float(ptr %ptr) {455; LA32-LABEL: load_seq_cst_float:456; LA32:       # %bb.0:457; LA32-NEXT:    ld.w $a0, $a0, 0458; LA32-NEXT:    movgr2fr.w $fa0, $a0459; LA32-NEXT:    dbar 16460; LA32-NEXT:    ret461;462; LA64-LABEL: load_seq_cst_float:463; LA64:       # %bb.0:464; LA64-NEXT:    ld.w $a0, $a0, 0465; LA64-NEXT:    movgr2fr.w $fa0, $a0466; LA64-NEXT:    dbar 16467; LA64-NEXT:    ret468  %val = load atomic float, ptr %ptr seq_cst, align 8469  ret float %val470}471 472define double @load_seq_cst_double(ptr %ptr) {473; LA32-LABEL: load_seq_cst_double:474; LA32:       # %bb.0:475; LA32-NEXT:    addi.w $sp, $sp, -16476; LA32-NEXT:    .cfi_def_cfa_offset 16477; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill478; LA32-NEXT:    .cfi_offset 1, -4479; LA32-NEXT:    ori $a1, $zero, 5480; LA32-NEXT:    bl __atomic_load_8481; LA32-NEXT:    movgr2fr.w $fa0, $a0482; LA32-NEXT:    movgr2frh.w $fa0, $a1483; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload484; LA32-NEXT:    addi.w $sp, $sp, 16485; LA32-NEXT:    ret486;487; LA64-LABEL: load_seq_cst_double:488; LA64:       # %bb.0:489; LA64-NEXT:    ld.d $a0, $a0, 0490; LA64-NEXT:    movgr2fr.d $fa0, $a0491; LA64-NEXT:    dbar 16492; LA64-NEXT:    ret493  %val = load atomic double, ptr %ptr seq_cst, align 8494  ret double %val495}496 497define void @store_release_i8(ptr %ptr, i8 signext %v) {498; LA32-LABEL: store_release_i8:499; LA32:       # %bb.0:500; LA32-NEXT:    dbar 18501; LA32-NEXT:    st.b $a1, $a0, 0502; LA32-NEXT:    ret503;504; LA64-LABEL: store_release_i8:505; LA64:       # %bb.0:506; LA64-NEXT:    dbar 18507; LA64-NEXT:    st.b $a1, $a0, 0508; LA64-NEXT:    ret509  store atomic i8 %v, ptr %ptr release, align 1510  ret void511}512 513define void @store_release_i16(ptr %ptr, i16 signext %v) {514; LA32-LABEL: store_release_i16:515; LA32:       # %bb.0:516; LA32-NEXT:    dbar 18517; LA32-NEXT:    st.h $a1, $a0, 0518; LA32-NEXT:    ret519;520; LA64-LABEL: store_release_i16:521; LA64:       # %bb.0:522; LA64-NEXT:    dbar 18523; LA64-NEXT:    st.h $a1, $a0, 0524; LA64-NEXT:    ret525  store atomic i16 %v, ptr %ptr release, align 2526  ret void527}528 529define void @store_release_i32(ptr %ptr, i32 signext %v) {530; LA32-LABEL: store_release_i32:531; LA32:       # %bb.0:532; LA32-NEXT:    dbar 18533; LA32-NEXT:    st.w $a1, $a0, 0534; LA32-NEXT:    ret535;536; LA64-LABEL: store_release_i32:537; LA64:       # %bb.0:538; LA64-NEXT:    amswap_db.w $zero, $a1, $a0539; LA64-NEXT:    ret540  store atomic i32 %v, ptr %ptr release, align 4541  ret void542}543 544define void @store_release_i64(ptr %ptr, i64 %v) {545; LA32-LABEL: store_release_i64:546; LA32:       # %bb.0:547; LA32-NEXT:    addi.w $sp, $sp, -16548; LA32-NEXT:    .cfi_def_cfa_offset 16549; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill550; LA32-NEXT:    .cfi_offset 1, -4551; LA32-NEXT:    ori $a3, $zero, 3552; LA32-NEXT:    bl __atomic_store_8553; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload554; LA32-NEXT:    addi.w $sp, $sp, 16555; LA32-NEXT:    ret556;557; LA64-LABEL: store_release_i64:558; LA64:       # %bb.0:559; LA64-NEXT:    amswap_db.d $zero, $a1, $a0560; LA64-NEXT:    ret561  store atomic i64 %v, ptr %ptr release, align 8562  ret void563}564 565define void @store_release_ptr(ptr %ptr, ptr %v) {566; LA32-LABEL: store_release_ptr:567; LA32:       # %bb.0:568; LA32-NEXT:    dbar 18569; LA32-NEXT:    st.w $a1, $a0, 0570; LA32-NEXT:    ret571;572; LA64-LABEL: store_release_ptr:573; LA64:       # %bb.0:574; LA64-NEXT:    amswap_db.d $zero, $a1, $a0575; LA64-NEXT:    ret576  store atomic ptr %v, ptr %ptr release, align 8577  ret void578}579 580define void @store_release_float(ptr %ptr, float %v) {581; LA32-LABEL: store_release_float:582; LA32:       # %bb.0:583; LA32-NEXT:    movfr2gr.s $a1, $fa0584; LA32-NEXT:    dbar 18585; LA32-NEXT:    st.w $a1, $a0, 0586; LA32-NEXT:    ret587;588; LA64-LABEL: store_release_float:589; LA64:       # %bb.0:590; LA64-NEXT:    movfr2gr.s $a1, $fa0591; LA64-NEXT:    amswap_db.w $zero, $a1, $a0592; LA64-NEXT:    ret593  store atomic float %v, ptr %ptr release, align 8594  ret void595}596 597define void @store_release_double(ptr %ptr, double %v) {598; LA32-LABEL: store_release_double:599; LA32:       # %bb.0:600; LA32-NEXT:    addi.w $sp, $sp, -16601; LA32-NEXT:    .cfi_def_cfa_offset 16602; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill603; LA32-NEXT:    .cfi_offset 1, -4604; LA32-NEXT:    movfr2gr.s $a1, $fa0605; LA32-NEXT:    movfrh2gr.s $a2, $fa0606; LA32-NEXT:    ori $a3, $zero, 3607; LA32-NEXT:    bl __atomic_store_8608; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload609; LA32-NEXT:    addi.w $sp, $sp, 16610; LA32-NEXT:    ret611;612; LA64-LABEL: store_release_double:613; LA64:       # %bb.0:614; LA64-NEXT:    movfr2gr.d $a1, $fa0615; LA64-NEXT:    amswap_db.d $zero, $a1, $a0616; LA64-NEXT:    ret617  store atomic double %v, ptr %ptr release, align 8618  ret void619}620 621define void @store_unordered_i8(ptr %ptr, i8 signext %v) {622; LA32-LABEL: store_unordered_i8:623; LA32:       # %bb.0:624; LA32-NEXT:    st.b $a1, $a0, 0625; LA32-NEXT:    ret626;627; LA64-LABEL: store_unordered_i8:628; LA64:       # %bb.0:629; LA64-NEXT:    st.b $a1, $a0, 0630; LA64-NEXT:    ret631  store atomic i8 %v, ptr %ptr unordered, align 1632  ret void633}634 635define void @store_unordered_i16(ptr %ptr, i16 signext %v) {636; LA32-LABEL: store_unordered_i16:637; LA32:       # %bb.0:638; LA32-NEXT:    st.h $a1, $a0, 0639; LA32-NEXT:    ret640;641; LA64-LABEL: store_unordered_i16:642; LA64:       # %bb.0:643; LA64-NEXT:    st.h $a1, $a0, 0644; LA64-NEXT:    ret645  store atomic i16 %v, ptr %ptr unordered, align 2646  ret void647}648 649define void @store_unordered_i32(ptr %ptr, i32 signext %v) {650; LA32-LABEL: store_unordered_i32:651; LA32:       # %bb.0:652; LA32-NEXT:    st.w $a1, $a0, 0653; LA32-NEXT:    ret654;655; LA64-LABEL: store_unordered_i32:656; LA64:       # %bb.0:657; LA64-NEXT:    st.w $a1, $a0, 0658; LA64-NEXT:    ret659  store atomic i32 %v, ptr %ptr unordered, align 4660  ret void661}662 663define void @store_unordered_i64(ptr %ptr, i64 %v) {664; LA32-LABEL: store_unordered_i64:665; LA32:       # %bb.0:666; LA32-NEXT:    addi.w $sp, $sp, -16667; LA32-NEXT:    .cfi_def_cfa_offset 16668; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill669; LA32-NEXT:    .cfi_offset 1, -4670; LA32-NEXT:    move $a3, $zero671; LA32-NEXT:    bl __atomic_store_8672; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload673; LA32-NEXT:    addi.w $sp, $sp, 16674; LA32-NEXT:    ret675;676; LA64-LABEL: store_unordered_i64:677; LA64:       # %bb.0:678; LA64-NEXT:    st.d $a1, $a0, 0679; LA64-NEXT:    ret680  store atomic i64 %v, ptr %ptr unordered, align 8681  ret void682}683 684define void @store_unordered_ptr(ptr %ptr, ptr %v) {685; LA32-LABEL: store_unordered_ptr:686; LA32:       # %bb.0:687; LA32-NEXT:    st.w $a1, $a0, 0688; LA32-NEXT:    ret689;690; LA64-LABEL: store_unordered_ptr:691; LA64:       # %bb.0:692; LA64-NEXT:    st.d $a1, $a0, 0693; LA64-NEXT:    ret694  store atomic ptr %v, ptr %ptr unordered, align 8695  ret void696}697 698define void @store_unordered_float(ptr %ptr, float %v) {699; LA32-LABEL: store_unordered_float:700; LA32:       # %bb.0:701; LA32-NEXT:    movfr2gr.s $a1, $fa0702; LA32-NEXT:    st.w $a1, $a0, 0703; LA32-NEXT:    ret704;705; LA64-LABEL: store_unordered_float:706; LA64:       # %bb.0:707; LA64-NEXT:    movfr2gr.s $a1, $fa0708; LA64-NEXT:    st.w $a1, $a0, 0709; LA64-NEXT:    ret710  store atomic float %v, ptr %ptr unordered, align 8711  ret void712}713 714define void @store_unordered_double(ptr %ptr, double %v) {715; LA32-LABEL: store_unordered_double:716; LA32:       # %bb.0:717; LA32-NEXT:    addi.w $sp, $sp, -16718; LA32-NEXT:    .cfi_def_cfa_offset 16719; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill720; LA32-NEXT:    .cfi_offset 1, -4721; LA32-NEXT:    movfr2gr.s $a1, $fa0722; LA32-NEXT:    movfrh2gr.s $a2, $fa0723; LA32-NEXT:    move $a3, $zero724; LA32-NEXT:    bl __atomic_store_8725; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload726; LA32-NEXT:    addi.w $sp, $sp, 16727; LA32-NEXT:    ret728;729; LA64-LABEL: store_unordered_double:730; LA64:       # %bb.0:731; LA64-NEXT:    movfr2gr.d $a1, $fa0732; LA64-NEXT:    st.d $a1, $a0, 0733; LA64-NEXT:    ret734  store atomic double %v, ptr %ptr unordered, align 8735  ret void736}737 738define void @store_monotonic_i8(ptr %ptr, i8 signext %v) {739; LA32-LABEL: store_monotonic_i8:740; LA32:       # %bb.0:741; LA32-NEXT:    st.b $a1, $a0, 0742; LA32-NEXT:    ret743;744; LA64-LABEL: store_monotonic_i8:745; LA64:       # %bb.0:746; LA64-NEXT:    st.b $a1, $a0, 0747; LA64-NEXT:    ret748  store atomic i8 %v, ptr %ptr monotonic, align 1749  ret void750}751 752define void @store_monotonic_i16(ptr %ptr, i16 signext %v) {753; LA32-LABEL: store_monotonic_i16:754; LA32:       # %bb.0:755; LA32-NEXT:    st.h $a1, $a0, 0756; LA32-NEXT:    ret757;758; LA64-LABEL: store_monotonic_i16:759; LA64:       # %bb.0:760; LA64-NEXT:    st.h $a1, $a0, 0761; LA64-NEXT:    ret762  store atomic i16 %v, ptr %ptr monotonic, align 2763  ret void764}765 766define void @store_monotonic_i32(ptr %ptr, i32 signext %v) {767; LA32-LABEL: store_monotonic_i32:768; LA32:       # %bb.0:769; LA32-NEXT:    st.w $a1, $a0, 0770; LA32-NEXT:    ret771;772; LA64-LABEL: store_monotonic_i32:773; LA64:       # %bb.0:774; LA64-NEXT:    st.w $a1, $a0, 0775; LA64-NEXT:    ret776  store atomic i32 %v, ptr %ptr monotonic, align 4777  ret void778}779 780define void @store_monotonic_i64(ptr %ptr, i64 %v) {781; LA32-LABEL: store_monotonic_i64:782; LA32:       # %bb.0:783; LA32-NEXT:    addi.w $sp, $sp, -16784; LA32-NEXT:    .cfi_def_cfa_offset 16785; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill786; LA32-NEXT:    .cfi_offset 1, -4787; LA32-NEXT:    move $a3, $zero788; LA32-NEXT:    bl __atomic_store_8789; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload790; LA32-NEXT:    addi.w $sp, $sp, 16791; LA32-NEXT:    ret792;793; LA64-LABEL: store_monotonic_i64:794; LA64:       # %bb.0:795; LA64-NEXT:    st.d $a1, $a0, 0796; LA64-NEXT:    ret797  store atomic i64 %v, ptr %ptr monotonic, align 8798  ret void799}800 801define void @store_monotonic_ptr(ptr %ptr, ptr %v) {802; LA32-LABEL: store_monotonic_ptr:803; LA32:       # %bb.0:804; LA32-NEXT:    st.w $a1, $a0, 0805; LA32-NEXT:    ret806;807; LA64-LABEL: store_monotonic_ptr:808; LA64:       # %bb.0:809; LA64-NEXT:    st.d $a1, $a0, 0810; LA64-NEXT:    ret811  store atomic ptr %v, ptr %ptr monotonic, align 8812  ret void813}814 815define void @store_monotonic_float(ptr %ptr, float %v) {816; LA32-LABEL: store_monotonic_float:817; LA32:       # %bb.0:818; LA32-NEXT:    movfr2gr.s $a1, $fa0819; LA32-NEXT:    st.w $a1, $a0, 0820; LA32-NEXT:    ret821;822; LA64-LABEL: store_monotonic_float:823; LA64:       # %bb.0:824; LA64-NEXT:    movfr2gr.s $a1, $fa0825; LA64-NEXT:    st.w $a1, $a0, 0826; LA64-NEXT:    ret827  store atomic float %v, ptr %ptr monotonic, align 8828  ret void829}830 831define void @store_monotonic_double(ptr %ptr, double %v) {832; LA32-LABEL: store_monotonic_double:833; LA32:       # %bb.0:834; LA32-NEXT:    addi.w $sp, $sp, -16835; LA32-NEXT:    .cfi_def_cfa_offset 16836; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill837; LA32-NEXT:    .cfi_offset 1, -4838; LA32-NEXT:    movfr2gr.s $a1, $fa0839; LA32-NEXT:    movfrh2gr.s $a2, $fa0840; LA32-NEXT:    move $a3, $zero841; LA32-NEXT:    bl __atomic_store_8842; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload843; LA32-NEXT:    addi.w $sp, $sp, 16844; LA32-NEXT:    ret845;846; LA64-LABEL: store_monotonic_double:847; LA64:       # %bb.0:848; LA64-NEXT:    movfr2gr.d $a1, $fa0849; LA64-NEXT:    st.d $a1, $a0, 0850; LA64-NEXT:    ret851  store atomic double %v, ptr %ptr monotonic, align 8852  ret void853}854 855define void @store_seq_cst_i8(ptr %ptr, i8 signext %v) {856; LA32-LABEL: store_seq_cst_i8:857; LA32:       # %bb.0:858; LA32-NEXT:    dbar 16859; LA32-NEXT:    st.b $a1, $a0, 0860; LA32-NEXT:    dbar 16861; LA32-NEXT:    ret862;863; LA64-LABEL: store_seq_cst_i8:864; LA64:       # %bb.0:865; LA64-NEXT:    dbar 16866; LA64-NEXT:    st.b $a1, $a0, 0867; LA64-NEXT:    dbar 16868; LA64-NEXT:    ret869  store atomic i8 %v, ptr %ptr seq_cst, align 1870  ret void871}872 873define void @store_seq_cst_i16(ptr %ptr, i16 signext %v) {874; LA32-LABEL: store_seq_cst_i16:875; LA32:       # %bb.0:876; LA32-NEXT:    dbar 16877; LA32-NEXT:    st.h $a1, $a0, 0878; LA32-NEXT:    dbar 16879; LA32-NEXT:    ret880;881; LA64-LABEL: store_seq_cst_i16:882; LA64:       # %bb.0:883; LA64-NEXT:    dbar 16884; LA64-NEXT:    st.h $a1, $a0, 0885; LA64-NEXT:    dbar 16886; LA64-NEXT:    ret887  store atomic i16 %v, ptr %ptr seq_cst, align 2888  ret void889}890 891define void @store_seq_cst_i32(ptr %ptr, i32 signext %v) {892; LA32-LABEL: store_seq_cst_i32:893; LA32:       # %bb.0:894; LA32-NEXT:    dbar 16895; LA32-NEXT:    st.w $a1, $a0, 0896; LA32-NEXT:    dbar 16897; LA32-NEXT:    ret898;899; LA64-LABEL: store_seq_cst_i32:900; LA64:       # %bb.0:901; LA64-NEXT:    amswap_db.w $zero, $a1, $a0902; LA64-NEXT:    ret903  store atomic i32 %v, ptr %ptr seq_cst, align 4904  ret void905}906 907define void @store_seq_cst_i64(ptr %ptr, i64 %v) {908; LA32-LABEL: store_seq_cst_i64:909; LA32:       # %bb.0:910; LA32-NEXT:    addi.w $sp, $sp, -16911; LA32-NEXT:    .cfi_def_cfa_offset 16912; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill913; LA32-NEXT:    .cfi_offset 1, -4914; LA32-NEXT:    ori $a3, $zero, 5915; LA32-NEXT:    bl __atomic_store_8916; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload917; LA32-NEXT:    addi.w $sp, $sp, 16918; LA32-NEXT:    ret919;920; LA64-LABEL: store_seq_cst_i64:921; LA64:       # %bb.0:922; LA64-NEXT:    amswap_db.d $zero, $a1, $a0923; LA64-NEXT:    ret924  store atomic i64 %v, ptr %ptr seq_cst, align 8925  ret void926}927 928define void @store_seq_cst_ptr(ptr %ptr, ptr %v) {929; LA32-LABEL: store_seq_cst_ptr:930; LA32:       # %bb.0:931; LA32-NEXT:    dbar 16932; LA32-NEXT:    st.w $a1, $a0, 0933; LA32-NEXT:    dbar 16934; LA32-NEXT:    ret935;936; LA64-LABEL: store_seq_cst_ptr:937; LA64:       # %bb.0:938; LA64-NEXT:    amswap_db.d $zero, $a1, $a0939; LA64-NEXT:    ret940  store atomic ptr %v, ptr %ptr seq_cst, align 8941  ret void942}943 944define void @store_seq_cst_float(ptr %ptr, float %v) {945; LA32-LABEL: store_seq_cst_float:946; LA32:       # %bb.0:947; LA32-NEXT:    movfr2gr.s $a1, $fa0948; LA32-NEXT:    dbar 16949; LA32-NEXT:    st.w $a1, $a0, 0950; LA32-NEXT:    dbar 16951; LA32-NEXT:    ret952;953; LA64-LABEL: store_seq_cst_float:954; LA64:       # %bb.0:955; LA64-NEXT:    movfr2gr.s $a1, $fa0956; LA64-NEXT:    amswap_db.w $zero, $a1, $a0957; LA64-NEXT:    ret958  store atomic float %v, ptr %ptr seq_cst, align 8959  ret void960}961 962define void @store_seq_cst_double(ptr %ptr, double %v) {963; LA32-LABEL: store_seq_cst_double:964; LA32:       # %bb.0:965; LA32-NEXT:    addi.w $sp, $sp, -16966; LA32-NEXT:    .cfi_def_cfa_offset 16967; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill968; LA32-NEXT:    .cfi_offset 1, -4969; LA32-NEXT:    movfr2gr.s $a1, $fa0970; LA32-NEXT:    movfrh2gr.s $a2, $fa0971; LA32-NEXT:    ori $a3, $zero, 5972; LA32-NEXT:    bl __atomic_store_8973; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload974; LA32-NEXT:    addi.w $sp, $sp, 16975; LA32-NEXT:    ret976;977; LA64-LABEL: store_seq_cst_double:978; LA64:       # %bb.0:979; LA64-NEXT:    movfr2gr.d $a1, $fa0980; LA64-NEXT:    amswap_db.d $zero, $a1, $a0981; LA64-NEXT:    ret982  store atomic double %v, ptr %ptr seq_cst, align 8983  ret void984}985