655 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc %s -o - -mtriple=m68k -mcpu=M68000 | FileCheck %s --check-prefix=NO-ATOMIC3; RUN: llc %s -o - -mtriple=m68k -mcpu=M68010 | FileCheck %s --check-prefix=NO-ATOMIC4; RUN: llc %s -o - -mtriple=m68k -mcpu=M68020 | FileCheck %s --check-prefix=ATOMIC5; RUN: llc %s -o - -mtriple=m68k -mcpu=M68030 | FileCheck %s --check-prefix=ATOMIC6; RUN: llc %s -o - -mtriple=m68k -mcpu=M68040 | FileCheck %s --check-prefix=ATOMIC7 8define i8 @atomic_load_i8_unordered(ptr %a) nounwind {9; NO-ATOMIC-LABEL: atomic_load_i8_unordered:10; NO-ATOMIC: ; %bb.0:11; NO-ATOMIC-NEXT: move.l (4,%sp), %a012; NO-ATOMIC-NEXT: move.b (%a0), %d013; NO-ATOMIC-NEXT: rts14;15; ATOMIC-LABEL: atomic_load_i8_unordered:16; ATOMIC: ; %bb.0:17; ATOMIC-NEXT: move.l (4,%sp), %a018; ATOMIC-NEXT: move.b (%a0), %d019; ATOMIC-NEXT: rts20 %1 = load atomic i8, ptr %a unordered, align 121 ret i8 %122}23 24define i8 @atomic_load_i8_monotonic(ptr %a) nounwind {25; NO-ATOMIC-LABEL: atomic_load_i8_monotonic:26; NO-ATOMIC: ; %bb.0:27; NO-ATOMIC-NEXT: move.l (4,%sp), %a028; NO-ATOMIC-NEXT: move.b (%a0), %d029; NO-ATOMIC-NEXT: rts30;31; ATOMIC-LABEL: atomic_load_i8_monotonic:32; ATOMIC: ; %bb.0:33; ATOMIC-NEXT: move.l (4,%sp), %a034; ATOMIC-NEXT: move.b (%a0), %d035; ATOMIC-NEXT: rts36 %1 = load atomic i8, ptr %a monotonic, align 137 ret i8 %138}39 40define i8 @atomic_load_i8_acquire(ptr %a) nounwind {41; NO-ATOMIC-LABEL: atomic_load_i8_acquire:42; NO-ATOMIC: ; %bb.0:43; NO-ATOMIC-NEXT: move.l (4,%sp), %a044; NO-ATOMIC-NEXT: move.b (%a0), %d045; NO-ATOMIC-NEXT: rts46;47; ATOMIC-LABEL: atomic_load_i8_acquire:48; ATOMIC: ; %bb.0:49; ATOMIC-NEXT: move.l (4,%sp), %a050; ATOMIC-NEXT: move.b (%a0), %d051; ATOMIC-NEXT: rts52 %1 = load atomic i8, ptr %a acquire, align 153 ret i8 %154}55 56define i8 @atomic_load_i8_seq_cst(ptr %a) nounwind {57; NO-ATOMIC-LABEL: atomic_load_i8_seq_cst:58; NO-ATOMIC: ; %bb.0:59; NO-ATOMIC-NEXT: move.l (4,%sp), %a060; NO-ATOMIC-NEXT: move.b (%a0), %d061; NO-ATOMIC-NEXT: rts62;63; ATOMIC-LABEL: atomic_load_i8_seq_cst:64; ATOMIC: ; %bb.0:65; ATOMIC-NEXT: move.l (4,%sp), %a066; ATOMIC-NEXT: move.b (%a0), %d067; ATOMIC-NEXT: rts68 %1 = load atomic i8, ptr %a seq_cst, align 169 ret i8 %170}71 72define i16 @atomic_load_i16_unordered(ptr %a) nounwind {73; NO-ATOMIC-LABEL: atomic_load_i16_unordered:74; NO-ATOMIC: ; %bb.0:75; NO-ATOMIC-NEXT: move.l (4,%sp), %a076; NO-ATOMIC-NEXT: move.w (%a0), %d077; NO-ATOMIC-NEXT: rts78;79; ATOMIC-LABEL: atomic_load_i16_unordered:80; ATOMIC: ; %bb.0:81; ATOMIC-NEXT: move.l (4,%sp), %a082; ATOMIC-NEXT: move.w (%a0), %d083; ATOMIC-NEXT: rts84 %1 = load atomic i16, ptr %a unordered, align 285 ret i16 %186}87 88define i16 @atomic_load_i16_monotonic(ptr %a) nounwind {89; NO-ATOMIC-LABEL: atomic_load_i16_monotonic:90; NO-ATOMIC: ; %bb.0:91; NO-ATOMIC-NEXT: move.l (4,%sp), %a092; NO-ATOMIC-NEXT: move.w (%a0), %d093; NO-ATOMIC-NEXT: rts94;95; ATOMIC-LABEL: atomic_load_i16_monotonic:96; ATOMIC: ; %bb.0:97; ATOMIC-NEXT: move.l (4,%sp), %a098; ATOMIC-NEXT: move.w (%a0), %d099; ATOMIC-NEXT: rts100 %1 = load atomic i16, ptr %a monotonic, align 2101 ret i16 %1102}103 104define i16 @atomic_load_i16_acquire(ptr %a) nounwind {105; NO-ATOMIC-LABEL: atomic_load_i16_acquire:106; NO-ATOMIC: ; %bb.0:107; NO-ATOMIC-NEXT: move.l (4,%sp), %a0108; NO-ATOMIC-NEXT: move.w (%a0), %d0109; NO-ATOMIC-NEXT: rts110;111; ATOMIC-LABEL: atomic_load_i16_acquire:112; ATOMIC: ; %bb.0:113; ATOMIC-NEXT: move.l (4,%sp), %a0114; ATOMIC-NEXT: move.w (%a0), %d0115; ATOMIC-NEXT: rts116 %1 = load atomic i16, ptr %a acquire, align 2117 ret i16 %1118}119 120define i16 @atomic_load_i16_seq_cst(ptr %a) nounwind {121; NO-ATOMIC-LABEL: atomic_load_i16_seq_cst:122; NO-ATOMIC: ; %bb.0:123; NO-ATOMIC-NEXT: move.l (4,%sp), %a0124; NO-ATOMIC-NEXT: move.w (%a0), %d0125; NO-ATOMIC-NEXT: rts126;127; ATOMIC-LABEL: atomic_load_i16_seq_cst:128; ATOMIC: ; %bb.0:129; ATOMIC-NEXT: move.l (4,%sp), %a0130; ATOMIC-NEXT: move.w (%a0), %d0131; ATOMIC-NEXT: rts132 %1 = load atomic i16, ptr %a seq_cst, align 2133 ret i16 %1134}135 136define i32 @atomic_load_i32_unordered(ptr %a) nounwind {137; NO-ATOMIC-LABEL: atomic_load_i32_unordered:138; NO-ATOMIC: ; %bb.0:139; NO-ATOMIC-NEXT: move.l (4,%sp), %a0140; NO-ATOMIC-NEXT: move.l (%a0), %d0141; NO-ATOMIC-NEXT: rts142;143; ATOMIC-LABEL: atomic_load_i32_unordered:144; ATOMIC: ; %bb.0:145; ATOMIC-NEXT: move.l (4,%sp), %a0146; ATOMIC-NEXT: move.l (%a0), %d0147; ATOMIC-NEXT: rts148 %1 = load atomic i32, ptr %a unordered, align 4149 ret i32 %1150}151 152define i32 @atomic_load_i32_monotonic(ptr %a) nounwind {153; NO-ATOMIC-LABEL: atomic_load_i32_monotonic:154; NO-ATOMIC: ; %bb.0:155; NO-ATOMIC-NEXT: move.l (4,%sp), %a0156; NO-ATOMIC-NEXT: move.l (%a0), %d0157; NO-ATOMIC-NEXT: rts158;159; ATOMIC-LABEL: atomic_load_i32_monotonic:160; ATOMIC: ; %bb.0:161; ATOMIC-NEXT: move.l (4,%sp), %a0162; ATOMIC-NEXT: move.l (%a0), %d0163; ATOMIC-NEXT: rts164 %1 = load atomic i32, ptr %a monotonic, align 4165 ret i32 %1166}167 168define i32 @atomic_load_i32_acquire(ptr %a) nounwind {169; NO-ATOMIC-LABEL: atomic_load_i32_acquire:170; NO-ATOMIC: ; %bb.0:171; NO-ATOMIC-NEXT: move.l (4,%sp), %a0172; NO-ATOMIC-NEXT: move.l (%a0), %d0173; NO-ATOMIC-NEXT: rts174;175; ATOMIC-LABEL: atomic_load_i32_acquire:176; ATOMIC: ; %bb.0:177; ATOMIC-NEXT: move.l (4,%sp), %a0178; ATOMIC-NEXT: move.l (%a0), %d0179; ATOMIC-NEXT: rts180 %1 = load atomic i32, ptr %a acquire, align 4181 ret i32 %1182}183 184define i32 @atomic_load_i32_seq_cst(ptr %a) nounwind {185; NO-ATOMIC-LABEL: atomic_load_i32_seq_cst:186; NO-ATOMIC: ; %bb.0:187; NO-ATOMIC-NEXT: move.l (4,%sp), %a0188; NO-ATOMIC-NEXT: move.l (%a0), %d0189; NO-ATOMIC-NEXT: rts190;191; ATOMIC-LABEL: atomic_load_i32_seq_cst:192; ATOMIC: ; %bb.0:193; ATOMIC-NEXT: move.l (4,%sp), %a0194; ATOMIC-NEXT: move.l (%a0), %d0195; ATOMIC-NEXT: rts196 %1 = load atomic i32, ptr %a seq_cst, align 4197 ret i32 %1198}199 200define i64 @atomic_load_i64_unordered(ptr %a) nounwind {201; NO-ATOMIC-LABEL: atomic_load_i64_unordered:202; NO-ATOMIC: ; %bb.0:203; NO-ATOMIC-NEXT: suba.l #12, %sp204; NO-ATOMIC-NEXT: move.l #0, (4,%sp)205; NO-ATOMIC-NEXT: move.l (16,%sp), (%sp)206; NO-ATOMIC-NEXT: jsr __atomic_load_8207; NO-ATOMIC-NEXT: adda.l #12, %sp208; NO-ATOMIC-NEXT: rts209;210; ATOMIC-LABEL: atomic_load_i64_unordered:211; ATOMIC: ; %bb.0:212; ATOMIC-NEXT: suba.l #12, %sp213; ATOMIC-NEXT: move.l #0, (4,%sp)214; ATOMIC-NEXT: move.l (16,%sp), (%sp)215; ATOMIC-NEXT: jsr __atomic_load_8216; ATOMIC-NEXT: adda.l #12, %sp217; ATOMIC-NEXT: rts218 %1 = load atomic i64, ptr %a unordered, align 8219 ret i64 %1220}221 222define i64 @atomic_load_i64_monotonic(ptr %a) nounwind {223; NO-ATOMIC-LABEL: atomic_load_i64_monotonic:224; NO-ATOMIC: ; %bb.0:225; NO-ATOMIC-NEXT: suba.l #12, %sp226; NO-ATOMIC-NEXT: move.l #0, (4,%sp)227; NO-ATOMIC-NEXT: move.l (16,%sp), (%sp)228; NO-ATOMIC-NEXT: jsr __atomic_load_8229; NO-ATOMIC-NEXT: adda.l #12, %sp230; NO-ATOMIC-NEXT: rts231;232; ATOMIC-LABEL: atomic_load_i64_monotonic:233; ATOMIC: ; %bb.0:234; ATOMIC-NEXT: suba.l #12, %sp235; ATOMIC-NEXT: move.l #0, (4,%sp)236; ATOMIC-NEXT: move.l (16,%sp), (%sp)237; ATOMIC-NEXT: jsr __atomic_load_8238; ATOMIC-NEXT: adda.l #12, %sp239; ATOMIC-NEXT: rts240 %1 = load atomic i64, ptr %a monotonic, align 8241 ret i64 %1242}243 244define i64 @atomic_load_i64_acquire(ptr %a) nounwind {245; NO-ATOMIC-LABEL: atomic_load_i64_acquire:246; NO-ATOMIC: ; %bb.0:247; NO-ATOMIC-NEXT: suba.l #12, %sp248; NO-ATOMIC-NEXT: move.l #2, (4,%sp)249; NO-ATOMIC-NEXT: move.l (16,%sp), (%sp)250; NO-ATOMIC-NEXT: jsr __atomic_load_8251; NO-ATOMIC-NEXT: adda.l #12, %sp252; NO-ATOMIC-NEXT: rts253;254; ATOMIC-LABEL: atomic_load_i64_acquire:255; ATOMIC: ; %bb.0:256; ATOMIC-NEXT: suba.l #12, %sp257; ATOMIC-NEXT: move.l #2, (4,%sp)258; ATOMIC-NEXT: move.l (16,%sp), (%sp)259; ATOMIC-NEXT: jsr __atomic_load_8260; ATOMIC-NEXT: adda.l #12, %sp261; ATOMIC-NEXT: rts262 %1 = load atomic i64, ptr %a acquire, align 8263 ret i64 %1264}265 266define i64 @atomic_load_i64_seq_cst(ptr %a) nounwind {267; NO-ATOMIC-LABEL: atomic_load_i64_seq_cst:268; NO-ATOMIC: ; %bb.0:269; NO-ATOMIC-NEXT: suba.l #12, %sp270; NO-ATOMIC-NEXT: move.l #5, (4,%sp)271; NO-ATOMIC-NEXT: move.l (16,%sp), (%sp)272; NO-ATOMIC-NEXT: jsr __atomic_load_8273; NO-ATOMIC-NEXT: adda.l #12, %sp274; NO-ATOMIC-NEXT: rts275;276; ATOMIC-LABEL: atomic_load_i64_seq_cst:277; ATOMIC: ; %bb.0:278; ATOMIC-NEXT: suba.l #12, %sp279; ATOMIC-NEXT: move.l #5, (4,%sp)280; ATOMIC-NEXT: move.l (16,%sp), (%sp)281; ATOMIC-NEXT: jsr __atomic_load_8282; ATOMIC-NEXT: adda.l #12, %sp283; ATOMIC-NEXT: rts284 %1 = load atomic i64, ptr %a seq_cst, align 8285 ret i64 %1286}287 288define void @atomic_store_i8_unordered(ptr %a, i8 %val) nounwind {289; NO-ATOMIC-LABEL: atomic_store_i8_unordered:290; NO-ATOMIC: ; %bb.0:291; NO-ATOMIC-NEXT: move.b (11,%sp), %d0292; NO-ATOMIC-NEXT: move.l (4,%sp), %a0293; NO-ATOMIC-NEXT: move.b %d0, (%a0)294; NO-ATOMIC-NEXT: rts295;296; ATOMIC-LABEL: atomic_store_i8_unordered:297; ATOMIC: ; %bb.0:298; ATOMIC-NEXT: move.b (11,%sp), %d0299; ATOMIC-NEXT: move.l (4,%sp), %a0300; ATOMIC-NEXT: move.b %d0, (%a0)301; ATOMIC-NEXT: rts302 store atomic i8 %val, ptr %a unordered, align 1303 ret void304}305 306define void @atomic_store_i8_monotonic(ptr %a, i8 %val) nounwind {307; NO-ATOMIC-LABEL: atomic_store_i8_monotonic:308; NO-ATOMIC: ; %bb.0:309; NO-ATOMIC-NEXT: move.b (11,%sp), %d0310; NO-ATOMIC-NEXT: move.l (4,%sp), %a0311; NO-ATOMIC-NEXT: move.b %d0, (%a0)312; NO-ATOMIC-NEXT: rts313;314; ATOMIC-LABEL: atomic_store_i8_monotonic:315; ATOMIC: ; %bb.0:316; ATOMIC-NEXT: move.b (11,%sp), %d0317; ATOMIC-NEXT: move.l (4,%sp), %a0318; ATOMIC-NEXT: move.b %d0, (%a0)319; ATOMIC-NEXT: rts320 store atomic i8 %val, ptr %a monotonic, align 1321 ret void322}323 324define void @atomic_store_i8_release(ptr %a, i8 %val) nounwind {325; NO-ATOMIC-LABEL: atomic_store_i8_release:326; NO-ATOMIC: ; %bb.0:327; NO-ATOMIC-NEXT: move.b (11,%sp), %d0328; NO-ATOMIC-NEXT: move.l (4,%sp), %a0329; NO-ATOMIC-NEXT: move.b %d0, (%a0)330; NO-ATOMIC-NEXT: rts331;332; ATOMIC-LABEL: atomic_store_i8_release:333; ATOMIC: ; %bb.0:334; ATOMIC-NEXT: move.b (11,%sp), %d0335; ATOMIC-NEXT: move.l (4,%sp), %a0336; ATOMIC-NEXT: move.b %d0, (%a0)337; ATOMIC-NEXT: rts338 store atomic i8 %val, ptr %a release, align 1339 ret void340}341 342define void @atomic_store_i8_seq_cst(ptr %a, i8 %val) nounwind {343; NO-ATOMIC-LABEL: atomic_store_i8_seq_cst:344; NO-ATOMIC: ; %bb.0:345; NO-ATOMIC-NEXT: move.b (11,%sp), %d0346; NO-ATOMIC-NEXT: move.l (4,%sp), %a0347; NO-ATOMIC-NEXT: move.b %d0, (%a0)348; NO-ATOMIC-NEXT: rts349;350; ATOMIC-LABEL: atomic_store_i8_seq_cst:351; ATOMIC: ; %bb.0:352; ATOMIC-NEXT: move.b (11,%sp), %d0353; ATOMIC-NEXT: move.l (4,%sp), %a0354; ATOMIC-NEXT: move.b %d0, (%a0)355; ATOMIC-NEXT: rts356 store atomic i8 %val, ptr %a seq_cst, align 1357 ret void358}359 360define void @atomic_store_i16_unordered(ptr %a, i16 %val) nounwind {361; NO-ATOMIC-LABEL: atomic_store_i16_unordered:362; NO-ATOMIC: ; %bb.0:363; NO-ATOMIC-NEXT: move.w (10,%sp), %d0364; NO-ATOMIC-NEXT: move.l (4,%sp), %a0365; NO-ATOMIC-NEXT: move.w %d0, (%a0)366; NO-ATOMIC-NEXT: rts367;368; ATOMIC-LABEL: atomic_store_i16_unordered:369; ATOMIC: ; %bb.0:370; ATOMIC-NEXT: move.w (10,%sp), %d0371; ATOMIC-NEXT: move.l (4,%sp), %a0372; ATOMIC-NEXT: move.w %d0, (%a0)373; ATOMIC-NEXT: rts374 store atomic i16 %val, ptr %a unordered, align 2375 ret void376}377 378define void @atomic_store_i16_monotonic(ptr %a, i16 %val) nounwind {379; NO-ATOMIC-LABEL: atomic_store_i16_monotonic:380; NO-ATOMIC: ; %bb.0:381; NO-ATOMIC-NEXT: move.w (10,%sp), %d0382; NO-ATOMIC-NEXT: move.l (4,%sp), %a0383; NO-ATOMIC-NEXT: move.w %d0, (%a0)384; NO-ATOMIC-NEXT: rts385;386; ATOMIC-LABEL: atomic_store_i16_monotonic:387; ATOMIC: ; %bb.0:388; ATOMIC-NEXT: move.w (10,%sp), %d0389; ATOMIC-NEXT: move.l (4,%sp), %a0390; ATOMIC-NEXT: move.w %d0, (%a0)391; ATOMIC-NEXT: rts392 store atomic i16 %val, ptr %a monotonic, align 2393 ret void394}395 396define void @atomic_store_i16_release(ptr %a, i16 %val) nounwind {397; NO-ATOMIC-LABEL: atomic_store_i16_release:398; NO-ATOMIC: ; %bb.0:399; NO-ATOMIC-NEXT: move.w (10,%sp), %d0400; NO-ATOMIC-NEXT: move.l (4,%sp), %a0401; NO-ATOMIC-NEXT: move.w %d0, (%a0)402; NO-ATOMIC-NEXT: rts403;404; ATOMIC-LABEL: atomic_store_i16_release:405; ATOMIC: ; %bb.0:406; ATOMIC-NEXT: move.w (10,%sp), %d0407; ATOMIC-NEXT: move.l (4,%sp), %a0408; ATOMIC-NEXT: move.w %d0, (%a0)409; ATOMIC-NEXT: rts410 store atomic i16 %val, ptr %a release, align 2411 ret void412}413 414define void @atomic_store_i16_seq_cst(ptr %a, i16 %val) nounwind {415; NO-ATOMIC-LABEL: atomic_store_i16_seq_cst:416; NO-ATOMIC: ; %bb.0:417; NO-ATOMIC-NEXT: move.w (10,%sp), %d0418; NO-ATOMIC-NEXT: move.l (4,%sp), %a0419; NO-ATOMIC-NEXT: move.w %d0, (%a0)420; NO-ATOMIC-NEXT: rts421;422; ATOMIC-LABEL: atomic_store_i16_seq_cst:423; ATOMIC: ; %bb.0:424; ATOMIC-NEXT: move.w (10,%sp), %d0425; ATOMIC-NEXT: move.l (4,%sp), %a0426; ATOMIC-NEXT: move.w %d0, (%a0)427; ATOMIC-NEXT: rts428 store atomic i16 %val, ptr %a seq_cst, align 2429 ret void430}431 432define void @atomic_store_i32_unordered(ptr %a, i32 %val) nounwind {433; NO-ATOMIC-LABEL: atomic_store_i32_unordered:434; NO-ATOMIC: ; %bb.0:435; NO-ATOMIC-NEXT: move.l (8,%sp), %d0436; NO-ATOMIC-NEXT: move.l (4,%sp), %a0437; NO-ATOMIC-NEXT: move.l %d0, (%a0)438; NO-ATOMIC-NEXT: rts439;440; ATOMIC-LABEL: atomic_store_i32_unordered:441; ATOMIC: ; %bb.0:442; ATOMIC-NEXT: move.l (8,%sp), %d0443; ATOMIC-NEXT: move.l (4,%sp), %a0444; ATOMIC-NEXT: move.l %d0, (%a0)445; ATOMIC-NEXT: rts446 store atomic i32 %val, ptr %a unordered, align 4447 ret void448}449 450define void @atomic_store_i32_monotonic(ptr %a, i32 %val) nounwind {451; NO-ATOMIC-LABEL: atomic_store_i32_monotonic:452; NO-ATOMIC: ; %bb.0:453; NO-ATOMIC-NEXT: move.l (8,%sp), %d0454; NO-ATOMIC-NEXT: move.l (4,%sp), %a0455; NO-ATOMIC-NEXT: move.l %d0, (%a0)456; NO-ATOMIC-NEXT: rts457;458; ATOMIC-LABEL: atomic_store_i32_monotonic:459; ATOMIC: ; %bb.0:460; ATOMIC-NEXT: move.l (8,%sp), %d0461; ATOMIC-NEXT: move.l (4,%sp), %a0462; ATOMIC-NEXT: move.l %d0, (%a0)463; ATOMIC-NEXT: rts464 store atomic i32 %val, ptr %a monotonic, align 4465 ret void466}467 468define void @atomic_store_i32_release(ptr %a, i32 %val) nounwind {469; NO-ATOMIC-LABEL: atomic_store_i32_release:470; NO-ATOMIC: ; %bb.0:471; NO-ATOMIC-NEXT: move.l (8,%sp), %d0472; NO-ATOMIC-NEXT: move.l (4,%sp), %a0473; NO-ATOMIC-NEXT: move.l %d0, (%a0)474; NO-ATOMIC-NEXT: rts475;476; ATOMIC-LABEL: atomic_store_i32_release:477; ATOMIC: ; %bb.0:478; ATOMIC-NEXT: move.l (8,%sp), %d0479; ATOMIC-NEXT: move.l (4,%sp), %a0480; ATOMIC-NEXT: move.l %d0, (%a0)481; ATOMIC-NEXT: rts482 store atomic i32 %val, ptr %a release, align 4483 ret void484}485 486define void @atomic_store_i32_seq_cst(ptr %a, i32 %val) nounwind {487; NO-ATOMIC-LABEL: atomic_store_i32_seq_cst:488; NO-ATOMIC: ; %bb.0:489; NO-ATOMIC-NEXT: move.l (8,%sp), %d0490; NO-ATOMIC-NEXT: move.l (4,%sp), %a0491; NO-ATOMIC-NEXT: move.l %d0, (%a0)492; NO-ATOMIC-NEXT: rts493;494; ATOMIC-LABEL: atomic_store_i32_seq_cst:495; ATOMIC: ; %bb.0:496; ATOMIC-NEXT: move.l (8,%sp), %d0497; ATOMIC-NEXT: move.l (4,%sp), %a0498; ATOMIC-NEXT: move.l %d0, (%a0)499; ATOMIC-NEXT: rts500 store atomic i32 %val, ptr %a seq_cst, align 4501 ret void502}503 504define void @atomic_store_i64_unordered(ptr %a, i64 %val) nounwind {505; NO-ATOMIC-LABEL: atomic_store_i64_unordered:506; NO-ATOMIC: ; %bb.0:507; NO-ATOMIC-NEXT: suba.l #20, %sp508; NO-ATOMIC-NEXT: move.l #0, (12,%sp)509; NO-ATOMIC-NEXT: move.l (32,%sp), (8,%sp)510; NO-ATOMIC-NEXT: move.l (28,%sp), (4,%sp)511; NO-ATOMIC-NEXT: move.l (24,%sp), (%sp)512; NO-ATOMIC-NEXT: jsr __atomic_store_8513; NO-ATOMIC-NEXT: adda.l #20, %sp514; NO-ATOMIC-NEXT: rts515;516; ATOMIC-LABEL: atomic_store_i64_unordered:517; ATOMIC: ; %bb.0:518; ATOMIC-NEXT: suba.l #20, %sp519; ATOMIC-NEXT: move.l #0, (12,%sp)520; ATOMIC-NEXT: move.l (32,%sp), (8,%sp)521; ATOMIC-NEXT: move.l (28,%sp), (4,%sp)522; ATOMIC-NEXT: move.l (24,%sp), (%sp)523; ATOMIC-NEXT: jsr __atomic_store_8524; ATOMIC-NEXT: adda.l #20, %sp525; ATOMIC-NEXT: rts526 store atomic i64 %val, ptr %a unordered, align 8527 ret void528}529 530define void @atomic_store_i64_monotonic(ptr %a, i64 %val) nounwind {531; NO-ATOMIC-LABEL: atomic_store_i64_monotonic:532; NO-ATOMIC: ; %bb.0:533; NO-ATOMIC-NEXT: suba.l #20, %sp534; NO-ATOMIC-NEXT: move.l #0, (12,%sp)535; NO-ATOMIC-NEXT: move.l (32,%sp), (8,%sp)536; NO-ATOMIC-NEXT: move.l (28,%sp), (4,%sp)537; NO-ATOMIC-NEXT: move.l (24,%sp), (%sp)538; NO-ATOMIC-NEXT: jsr __atomic_store_8539; NO-ATOMIC-NEXT: adda.l #20, %sp540; NO-ATOMIC-NEXT: rts541;542; ATOMIC-LABEL: atomic_store_i64_monotonic:543; ATOMIC: ; %bb.0:544; ATOMIC-NEXT: suba.l #20, %sp545; ATOMIC-NEXT: move.l #0, (12,%sp)546; ATOMIC-NEXT: move.l (32,%sp), (8,%sp)547; ATOMIC-NEXT: move.l (28,%sp), (4,%sp)548; ATOMIC-NEXT: move.l (24,%sp), (%sp)549; ATOMIC-NEXT: jsr __atomic_store_8550; ATOMIC-NEXT: adda.l #20, %sp551; ATOMIC-NEXT: rts552 store atomic i64 %val, ptr %a monotonic, align 8553 ret void554}555 556define void @atomic_store_i64_release(ptr %a, i64 %val) nounwind {557; NO-ATOMIC-LABEL: atomic_store_i64_release:558; NO-ATOMIC: ; %bb.0:559; NO-ATOMIC-NEXT: suba.l #20, %sp560; NO-ATOMIC-NEXT: move.l #3, (12,%sp)561; NO-ATOMIC-NEXT: move.l (32,%sp), (8,%sp)562; NO-ATOMIC-NEXT: move.l (28,%sp), (4,%sp)563; NO-ATOMIC-NEXT: move.l (24,%sp), (%sp)564; NO-ATOMIC-NEXT: jsr __atomic_store_8565; NO-ATOMIC-NEXT: adda.l #20, %sp566; NO-ATOMIC-NEXT: rts567;568; ATOMIC-LABEL: atomic_store_i64_release:569; ATOMIC: ; %bb.0:570; ATOMIC-NEXT: suba.l #20, %sp571; ATOMIC-NEXT: move.l #3, (12,%sp)572; ATOMIC-NEXT: move.l (32,%sp), (8,%sp)573; ATOMIC-NEXT: move.l (28,%sp), (4,%sp)574; ATOMIC-NEXT: move.l (24,%sp), (%sp)575; ATOMIC-NEXT: jsr __atomic_store_8576; ATOMIC-NEXT: adda.l #20, %sp577; ATOMIC-NEXT: rts578 store atomic i64 %val, ptr %a release, align 8579 ret void580}581 582define void @atomic_store_i64_seq_cst(ptr %a, i64 %val) nounwind {583; NO-ATOMIC-LABEL: atomic_store_i64_seq_cst:584; NO-ATOMIC: ; %bb.0:585; NO-ATOMIC-NEXT: suba.l #20, %sp586; NO-ATOMIC-NEXT: move.l #5, (12,%sp)587; NO-ATOMIC-NEXT: move.l (32,%sp), (8,%sp)588; NO-ATOMIC-NEXT: move.l (28,%sp), (4,%sp)589; NO-ATOMIC-NEXT: move.l (24,%sp), (%sp)590; NO-ATOMIC-NEXT: jsr __atomic_store_8591; NO-ATOMIC-NEXT: adda.l #20, %sp592; NO-ATOMIC-NEXT: rts593;594; ATOMIC-LABEL: atomic_store_i64_seq_cst:595; ATOMIC: ; %bb.0:596; ATOMIC-NEXT: suba.l #20, %sp597; ATOMIC-NEXT: move.l #5, (12,%sp)598; ATOMIC-NEXT: move.l (32,%sp), (8,%sp)599; ATOMIC-NEXT: move.l (28,%sp), (4,%sp)600; ATOMIC-NEXT: move.l (24,%sp), (%sp)601; ATOMIC-NEXT: jsr __atomic_store_8602; ATOMIC-NEXT: adda.l #20, %sp603; ATOMIC-NEXT: rts604 store atomic i64 %val, ptr %a seq_cst, align 8605 ret void606}607 608define void @store_arid(ptr nonnull align 4 %a) {609; NO-ATOMIC-LABEL: store_arid:610; NO-ATOMIC: .cfi_startproc611; NO-ATOMIC-NEXT: ; %bb.0: ; %start612; NO-ATOMIC-NEXT: moveq #1, %d0613; NO-ATOMIC-NEXT: move.l (4,%sp), %a0614; NO-ATOMIC-NEXT: move.l %d0, (32,%a0)615; NO-ATOMIC-NEXT: rts616;617; ATOMIC-LABEL: store_arid:618; ATOMIC: .cfi_startproc619; ATOMIC-NEXT: ; %bb.0: ; %start620; ATOMIC-NEXT: moveq #1, %d0621; ATOMIC-NEXT: move.l (4,%sp), %a0622; ATOMIC-NEXT: move.l %d0, (32,%a0)623; ATOMIC-NEXT: rts624start:625 %1 = getelementptr inbounds i32, ptr %a, i32 8626 store atomic i32 1, ptr %1 seq_cst, align 4627 br label %exit628 629exit: ; preds = %start630 ret void631}632 633define i32 @load_arid(ptr nonnull align 4 %a) {634; NO-ATOMIC-LABEL: load_arid:635; NO-ATOMIC: .cfi_startproc636; NO-ATOMIC-NEXT: ; %bb.0: ; %start637; NO-ATOMIC-NEXT: move.l (4,%sp), %a0638; NO-ATOMIC-NEXT: move.l (32,%a0), %d0639; NO-ATOMIC-NEXT: rts640;641; ATOMIC-LABEL: load_arid:642; ATOMIC: .cfi_startproc643; ATOMIC-NEXT: ; %bb.0: ; %start644; ATOMIC-NEXT: move.l (4,%sp), %a0645; ATOMIC-NEXT: move.l (32,%a0), %d0646; ATOMIC-NEXT: rts647start:648 %1 = getelementptr inbounds i32, ptr %a, i32 8649 %2 = load atomic i32, ptr %1 seq_cst, align 4650 br label %exit651 652exit: ; preds = %start653 ret i32 %2654}655