brintos

brintos / llvm-project-archived public Read only

0
0
Text · 29.6 KiB · 560dfde Raw
986 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=armv7-apple-ios -verify-machineinstrs | FileCheck %s -check-prefixes=ARM3; RUN: llc < %s -mtriple=armv7-apple-ios -O0 | FileCheck %s -check-prefix=ARMOPTNONE4; RUN: llc < %s -mtriple=thumbv7-apple-ios -verify-machineinstrs | FileCheck %s -check-prefix=THUMBTWO5; RUN: llc < %s -mtriple=thumbv6 | FileCheck %s -check-prefix=THUMBONE6; RUN: llc < %s -mtriple=armv4 | FileCheck %s -check-prefix=ARMV47; RUN: llc < %s -mtriple=armv6 | FileCheck %s -check-prefix=ARMV68; RUN: llc < %s -mtriple=thumbv7m | FileCheck %s -check-prefix=THUMBM9 10define void @test1(ptr %ptr, i32 %val1) {11; ARM-LABEL: test1:12; ARM:       @ %bb.0:13; ARM-NEXT:    dmb ish14; ARM-NEXT:    str r1, [r0]15; ARM-NEXT:    dmb ish16; ARM-NEXT:    bx lr17;18; ARMOPTNONE-LABEL: test1:19; ARMOPTNONE:       @ %bb.0:20; ARMOPTNONE-NEXT:    dmb ish21; ARMOPTNONE-NEXT:    str r1, [r0]22; ARMOPTNONE-NEXT:    dmb ish23; ARMOPTNONE-NEXT:    bx lr24;25; THUMBTWO-LABEL: test1:26; THUMBTWO:       @ %bb.0:27; THUMBTWO-NEXT:    dmb ish28; THUMBTWO-NEXT:    str r1, [r0]29; THUMBTWO-NEXT:    dmb ish30; THUMBTWO-NEXT:    bx lr31;32; THUMBONE-LABEL: test1:33; THUMBONE:       @ %bb.0:34; THUMBONE-NEXT:    push {r7, lr}35; THUMBONE-NEXT:    bl __sync_lock_test_and_set_436; THUMBONE-NEXT:    pop {r7, pc}37;38; ARMV4-LABEL: test1:39; ARMV4:       @ %bb.0:40; ARMV4-NEXT:    push {r11, lr}41; ARMV4-NEXT:    mov r2, #542; ARMV4-NEXT:    bl __atomic_store_443; ARMV4-NEXT:    pop {r11, lr}44; ARMV4-NEXT:    mov pc, lr45;46; ARMV6-LABEL: test1:47; ARMV6:       @ %bb.0:48; ARMV6-NEXT:    mov r2, #049; ARMV6-NEXT:    mcr p15, #0, r2, c7, c10, #550; ARMV6-NEXT:    str r1, [r0]51; ARMV6-NEXT:    mcr p15, #0, r2, c7, c10, #552; ARMV6-NEXT:    bx lr53;54; THUMBM-LABEL: test1:55; THUMBM:       @ %bb.0:56; THUMBM-NEXT:    dmb sy57; THUMBM-NEXT:    str r1, [r0]58; THUMBM-NEXT:    dmb sy59; THUMBM-NEXT:    bx lr60  store atomic i32 %val1, ptr %ptr seq_cst, align 461  ret void62}63 64define i32 @test2(ptr %ptr) {65; ARM-LABEL: test2:66; ARM:       @ %bb.0:67; ARM-NEXT:    ldr r0, [r0]68; ARM-NEXT:    dmb ish69; ARM-NEXT:    bx lr70;71; ARMOPTNONE-LABEL: test2:72; ARMOPTNONE:       @ %bb.0:73; ARMOPTNONE-NEXT:    ldr r0, [r0]74; ARMOPTNONE-NEXT:    dmb ish75; ARMOPTNONE-NEXT:    bx lr76;77; THUMBTWO-LABEL: test2:78; THUMBTWO:       @ %bb.0:79; THUMBTWO-NEXT:    ldr r0, [r0]80; THUMBTWO-NEXT:    dmb ish81; THUMBTWO-NEXT:    bx lr82;83; THUMBONE-LABEL: test2:84; THUMBONE:       @ %bb.0:85; THUMBONE-NEXT:    push {r7, lr}86; THUMBONE-NEXT:    movs r1, #087; THUMBONE-NEXT:    mov r2, r188; THUMBONE-NEXT:    bl __sync_val_compare_and_swap_489; THUMBONE-NEXT:    pop {r7, pc}90;91; ARMV4-LABEL: test2:92; ARMV4:       @ %bb.0:93; ARMV4-NEXT:    push {r11, lr}94; ARMV4-NEXT:    mov r1, #595; ARMV4-NEXT:    bl __atomic_load_496; ARMV4-NEXT:    pop {r11, lr}97; ARMV4-NEXT:    mov pc, lr98;99; ARMV6-LABEL: test2:100; ARMV6:       @ %bb.0:101; ARMV6-NEXT:    ldr r0, [r0]102; ARMV6-NEXT:    mov r1, #0103; ARMV6-NEXT:    mcr p15, #0, r1, c7, c10, #5104; ARMV6-NEXT:    bx lr105;106; THUMBM-LABEL: test2:107; THUMBM:       @ %bb.0:108; THUMBM-NEXT:    ldr r0, [r0]109; THUMBM-NEXT:    dmb sy110; THUMBM-NEXT:    bx lr111  %val = load atomic i32, ptr %ptr seq_cst, align 4112  ret i32 %val113}114 115define void @test3(ptr %ptr1, ptr %ptr2) {116; ARM-LABEL: test3:117; ARM:       @ %bb.0:118; ARM-NEXT:    ldrb r0, [r0]119; ARM-NEXT:    strb r0, [r1]120; ARM-NEXT:    bx lr121;122; ARMOPTNONE-LABEL: test3:123; ARMOPTNONE:       @ %bb.0:124; ARMOPTNONE-NEXT:    ldrb r0, [r0]125; ARMOPTNONE-NEXT:    strb r0, [r1]126; ARMOPTNONE-NEXT:    bx lr127;128; THUMBTWO-LABEL: test3:129; THUMBTWO:       @ %bb.0:130; THUMBTWO-NEXT:    ldrb r0, [r0]131; THUMBTWO-NEXT:    strb r0, [r1]132; THUMBTWO-NEXT:    bx lr133;134; THUMBONE-LABEL: test3:135; THUMBONE:       @ %bb.0:136; THUMBONE-NEXT:    ldrb r0, [r0]137; THUMBONE-NEXT:    strb r0, [r1]138; THUMBONE-NEXT:    bx lr139;140; ARMV4-LABEL: test3:141; ARMV4:       @ %bb.0:142; ARMV4-NEXT:    push {r4, lr}143; ARMV4-NEXT:    mov r4, r1144; ARMV4-NEXT:    mov r1, #0145; ARMV4-NEXT:    bl __atomic_load_1146; ARMV4-NEXT:    mov r1, r0147; ARMV4-NEXT:    mov r0, r4148; ARMV4-NEXT:    mov r2, #0149; ARMV4-NEXT:    bl __atomic_store_1150; ARMV4-NEXT:    pop {r4, lr}151; ARMV4-NEXT:    mov pc, lr152;153; ARMV6-LABEL: test3:154; ARMV6:       @ %bb.0:155; ARMV6-NEXT:    ldrb r0, [r0]156; ARMV6-NEXT:    strb r0, [r1]157; ARMV6-NEXT:    bx lr158;159; THUMBM-LABEL: test3:160; THUMBM:       @ %bb.0:161; THUMBM-NEXT:    ldrb r0, [r0]162; THUMBM-NEXT:    strb r0, [r1]163; THUMBM-NEXT:    bx lr164 165 166 167  %val = load atomic i8, ptr %ptr1 unordered, align 1168  store atomic i8 %val, ptr %ptr2 unordered, align 1169  ret void170}171 172define void @test4(ptr %ptr1, ptr %ptr2) {173; ARM-LABEL: test4:174; ARM:       @ %bb.0:175; ARM-NEXT:    ldrb r0, [r0]176; ARM-NEXT:    dmb ish177; ARM-NEXT:    strb r0, [r1]178; ARM-NEXT:    dmb ish179; ARM-NEXT:    bx lr180;181; ARMOPTNONE-LABEL: test4:182; ARMOPTNONE:       @ %bb.0:183; ARMOPTNONE-NEXT:    ldrb r0, [r0]184; ARMOPTNONE-NEXT:    dmb ish185; ARMOPTNONE-NEXT:    dmb ish186; ARMOPTNONE-NEXT:    strb r0, [r1]187; ARMOPTNONE-NEXT:    dmb ish188; ARMOPTNONE-NEXT:    bx lr189;190; THUMBTWO-LABEL: test4:191; THUMBTWO:       @ %bb.0:192; THUMBTWO-NEXT:    ldrb r0, [r0]193; THUMBTWO-NEXT:    dmb ish194; THUMBTWO-NEXT:    dmb ish195; THUMBTWO-NEXT:    strb r0, [r1]196; THUMBTWO-NEXT:    dmb ish197; THUMBTWO-NEXT:    bx lr198;199; THUMBONE-LABEL: test4:200; THUMBONE:       @ %bb.0:201; THUMBONE-NEXT:    push {r4, lr}202; THUMBONE-NEXT:    mov r4, r1203; THUMBONE-NEXT:    movs r1, #0204; THUMBONE-NEXT:    mov r2, r1205; THUMBONE-NEXT:    bl __sync_val_compare_and_swap_1206; THUMBONE-NEXT:    mov r1, r0207; THUMBONE-NEXT:    mov r0, r4208; THUMBONE-NEXT:    bl __sync_lock_test_and_set_1209; THUMBONE-NEXT:    pop {r4, pc}210;211; ARMV4-LABEL: test4:212; ARMV4:       @ %bb.0:213; ARMV4-NEXT:    push {r4, lr}214; ARMV4-NEXT:    mov r4, r1215; ARMV4-NEXT:    mov r1, #5216; ARMV4-NEXT:    bl __atomic_load_1217; ARMV4-NEXT:    mov r1, r0218; ARMV4-NEXT:    mov r0, r4219; ARMV4-NEXT:    mov r2, #5220; ARMV4-NEXT:    bl __atomic_store_1221; ARMV4-NEXT:    pop {r4, lr}222; ARMV4-NEXT:    mov pc, lr223;224; ARMV6-LABEL: test4:225; ARMV6:       @ %bb.0:226; ARMV6-NEXT:    mov r2, #0227; ARMV6-NEXT:    ldrb r0, [r0]228; ARMV6-NEXT:    mcr p15, #0, r2, c7, c10, #5229; ARMV6-NEXT:    mcr p15, #0, r2, c7, c10, #5230; ARMV6-NEXT:    strb r0, [r1]231; ARMV6-NEXT:    mcr p15, #0, r2, c7, c10, #5232; ARMV6-NEXT:    bx lr233;234; THUMBM-LABEL: test4:235; THUMBM:       @ %bb.0:236; THUMBM-NEXT:    ldrb r0, [r0]237; THUMBM-NEXT:    dmb sy238; THUMBM-NEXT:    dmb sy239; THUMBM-NEXT:    strb r0, [r1]240; THUMBM-NEXT:    dmb sy241; THUMBM-NEXT:    bx lr242  %val = load atomic i8, ptr %ptr1 seq_cst, align 1243  store atomic i8 %val, ptr %ptr2 seq_cst, align 1244  ret void245}246 247define i64 @test_old_load_64bit(ptr %p) {248; ARM-LABEL: test_old_load_64bit:249; ARM:       @ %bb.0:250; ARM-NEXT:    ldrexd r0, r1, [r0]251; ARM-NEXT:    clrex252; ARM-NEXT:    dmb ish253; ARM-NEXT:    bx lr254;255; ARMOPTNONE-LABEL: test_old_load_64bit:256; ARMOPTNONE:       @ %bb.0:257; ARMOPTNONE-NEXT:    ldrexd r2, r3, [r0]258; ARMOPTNONE-NEXT:    mov r0, r2259; ARMOPTNONE-NEXT:    mov r1, r3260; ARMOPTNONE-NEXT:    clrex261; ARMOPTNONE-NEXT:    dmb ish262; ARMOPTNONE-NEXT:    bx lr263;264; THUMBTWO-LABEL: test_old_load_64bit:265; THUMBTWO:       @ %bb.0:266; THUMBTWO-NEXT:    ldrexd r0, r1, [r0]267; THUMBTWO-NEXT:    clrex268; THUMBTWO-NEXT:    dmb ish269; THUMBTWO-NEXT:    bx lr270;271; THUMBONE-LABEL: test_old_load_64bit:272; THUMBONE:       @ %bb.0:273; THUMBONE-NEXT:    push {r7, lr}274; THUMBONE-NEXT:    sub sp, #8275; THUMBONE-NEXT:    movs r2, #0276; THUMBONE-NEXT:    str r2, [sp]277; THUMBONE-NEXT:    str r2, [sp, #4]278; THUMBONE-NEXT:    mov r3, r2279; THUMBONE-NEXT:    bl __sync_val_compare_and_swap_8280; THUMBONE-NEXT:    add sp, #8281; THUMBONE-NEXT:    pop {r7, pc}282;283; ARMV4-LABEL: test_old_load_64bit:284; ARMV4:       @ %bb.0:285; ARMV4-NEXT:    push {r11, lr}286; ARMV4-NEXT:    mov r1, #5287; ARMV4-NEXT:    bl __atomic_load_8288; ARMV4-NEXT:    pop {r11, lr}289; ARMV4-NEXT:    mov pc, lr290;291; ARMV6-LABEL: test_old_load_64bit:292; ARMV6:       @ %bb.0:293; ARMV6-NEXT:    ldrexd r0, r1, [r0]294; ARMV6-NEXT:    mov r2, #0295; ARMV6-NEXT:    mcr p15, #0, r2, c7, c10, #5296; ARMV6-NEXT:    bx lr297;298; THUMBM-LABEL: test_old_load_64bit:299; THUMBM:       @ %bb.0:300; THUMBM-NEXT:    push {r7, lr}301; THUMBM-NEXT:    movs r1, #5302; THUMBM-NEXT:    bl __atomic_load_8303; THUMBM-NEXT:    pop {r7, pc}304  %1 = load atomic i64, ptr %p seq_cst, align 8305  ret i64 %1306}307 308define void @test_old_store_64bit(ptr %p, i64 %v) {309; ARM-LABEL: test_old_store_64bit:310; ARM:       @ %bb.0:311; ARM-NEXT:    push {r4, r5, lr}312; ARM-NEXT:    mov r3, r2313; ARM-NEXT:    dmb ish314; ARM-NEXT:    mov r2, r1315; ARM-NEXT:  LBB5_1: @ %atomicrmw.start316; ARM-NEXT:    @ =>This Inner Loop Header: Depth=1317; ARM-NEXT:    ldrexd r4, r5, [r0]318; ARM-NEXT:    strexd r1, r2, r3, [r0]319; ARM-NEXT:    cmp r1, #0320; ARM-NEXT:    bne LBB5_1321; ARM-NEXT:  @ %bb.2: @ %atomicrmw.end322; ARM-NEXT:    dmb ish323; ARM-NEXT:    pop {r4, r5, pc}324;325; ARMOPTNONE-LABEL: test_old_store_64bit:326; ARMOPTNONE:       @ %bb.0:327; ARMOPTNONE-NEXT:    push	{r4, r5, r7, r8, r10, r11, lr}328; ARMOPTNONE-NEXT:    add	r7, sp, #20329; ARMOPTNONE-NEXT:    sub	sp, sp, #24330; ARMOPTNONE-NEXT:    str	r0, [sp, #4] @ 4-byte Spill331; ARMOPTNONE-NEXT:    str	r2, [sp, #8] @ 4-byte Spill332; ARMOPTNONE-NEXT:    str	r1, [sp, #12] @ 4-byte Spill333; ARMOPTNONE-NEXT:    dmb	ish334; ARMOPTNONE-NEXT:    ldr	r1, [r0]335; ARMOPTNONE-NEXT:    ldr	r0, [r0, #4]336; ARMOPTNONE-NEXT:    str	r1, [sp, #16] @ 4-byte Spill337; ARMOPTNONE-NEXT:    str	r0, [sp, #20] @ 4-byte Spill338; ARMOPTNONE-NEXT:    b LBB5_1339; ARMOPTNONE-NEXT:  LBB5_1: @ %atomicrmw.start340; ARMOPTNONE-NEXT:    @ =>This Loop Header: Depth=1341; ARMOPTNONE-NEXT:    @ Child Loop BB5_2 Depth 2342; ARMOPTNONE-NEXT:    ldr r3, [sp, #20] @ 4-byte Reload343; ARMOPTNONE-NEXT:    ldr r2, [sp, #16] @ 4-byte Reload344; ARMOPTNONE-NEXT:    ldr r12, [sp, #8] @ 4-byte Reload345; ARMOPTNONE-NEXT:    ldr r0, [sp, #12] @ 4-byte Reload346; ARMOPTNONE-NEXT:    ldr r8, [sp, #4] @ 4-byte Reload347; ARMOPTNONE-NEXT:    str r3, [sp] @ 4-byte Spill348; ARMOPTNONE-NEXT:    @ implicit-def: $r1349; ARMOPTNONE-NEXT:    @ implicit-def: $r9350; ARMOPTNONE-NEXT:    @ kill: def $r8 killed $r8 def $r8_r9351; ARMOPTNONE-NEXT:    mov r9, r1352; ARMOPTNONE-NEXT:    @ kill: def $r0 killed $r0 def $r0_r1353; ARMOPTNONE-NEXT:    mov r1, r12354; ARMOPTNONE-NEXT:    mov r10, r2355; ARMOPTNONE-NEXT:    mov r11, r3356; ARMOPTNONE-NEXT:  LBB5_2: @ %atomicrmw.start357; ARMOPTNONE-NEXT:    @ Parent Loop BB5_1 Depth=1358; ARMOPTNONE-NEXT:    @ => This Inner Loop Header: Depth=2359; ARMOPTNONE-NEXT:    ldrexd r4, r5, [r8]360; ARMOPTNONE-NEXT:    cmp r4, r10361; ARMOPTNONE-NEXT:    cmpeq r5, r11362; ARMOPTNONE-NEXT:    bne LBB5_4363; ARMOPTNONE-NEXT:  @ %bb.3: @ %atomicrmw.start364; ARMOPTNONE-NEXT:    @ in Loop: Header=BB5_2 Depth=2365; ARMOPTNONE-NEXT:    strexd r9, r0, r1, [r8]366; ARMOPTNONE-NEXT:    cmp r9, #0367; ARMOPTNONE-NEXT:    bne LBB5_2368; ARMOPTNONE-NEXT:  LBB5_4: @ %atomicrmw.start369; ARMOPTNONE-NEXT:    @ in Loop: Header=BB5_1 Depth=1370; ARMOPTNONE-NEXT:    ldr r1, [sp] @ 4-byte Reload371; ARMOPTNONE-NEXT:    mov r0, r5372; ARMOPTNONE-NEXT:    eor r3, r0, r1373; ARMOPTNONE-NEXT:    mov r1, r4374; ARMOPTNONE-NEXT:    eor r2, r1, r2375; ARMOPTNONE-NEXT:    orr r2, r2, r3376; ARMOPTNONE-NEXT:    cmp r2, #0377; ARMOPTNONE-NEXT:    str r1, [sp, #16] @ 4-byte Spill378; ARMOPTNONE-NEXT:    str r0, [sp, #20] @ 4-byte Spill379; ARMOPTNONE-NEXT:    bne LBB5_1380; ARMOPTNONE-NEXT:    b LBB5_5381; ARMOPTNONE-NEXT:  LBB5_5: @ %atomicrmw.end382; ARMOPTNONE-NEXT:    dmb ish383; ARMOPTNONE-NEXT:    sub sp, r7, #20384; ARMOPTNONE-NEXT:    pop	{r4, r5, r7, r8, r10, r11, pc}385;386; THUMBTWO-LABEL: test_old_store_64bit:387; THUMBTWO:       @ %bb.0:388; THUMBTWO-NEXT:    dmb ish389; THUMBTWO-NEXT:  LBB5_1: @ %atomicrmw.start390; THUMBTWO-NEXT:    @ =>This Inner Loop Header: Depth=1391; THUMBTWO-NEXT:    ldrexd r3, r9, [r0]392; THUMBTWO-NEXT:    strexd r3, r1, r2, [r0]393; THUMBTWO-NEXT:    cmp r3, #0394; THUMBTWO-NEXT:    bne LBB5_1395; THUMBTWO-NEXT:  @ %bb.2: @ %atomicrmw.end396; THUMBTWO-NEXT:    dmb ish397; THUMBTWO-NEXT:    bx lr398;399; THUMBONE-LABEL: test_old_store_64bit:400; THUMBONE:       @ %bb.0:401; THUMBONE-NEXT:    push {r7, lr}402; THUMBONE-NEXT:    bl __sync_lock_test_and_set_8403; THUMBONE-NEXT:    pop {r7, pc}404;405; ARMV4-LABEL: test_old_store_64bit:406; ARMV4:       @ %bb.0:407; ARMV4-NEXT:    push {r11, lr}408; ARMV4-NEXT:    sub sp, sp, #8409; ARMV4-NEXT:    mov r1, #5410; ARMV4-NEXT:    str r1, [sp]411; ARMV4-NEXT:    bl __atomic_store_8412; ARMV4-NEXT:    add sp, sp, #8413; ARMV4-NEXT:    pop {r11, lr}414; ARMV4-NEXT:    mov pc, lr415;416; ARMV6-LABEL: test_old_store_64bit:417; ARMV6:       @ %bb.0:418; ARMV6-NEXT:    push {r4, r5, r11, lr}419; ARMV6-NEXT:    @ kill: def $r3 killed $r3 killed $r2_r3 def $r2_r3420; ARMV6-NEXT:    mov r1, #0421; ARMV6-NEXT:    @ kill: def $r2 killed $r2 killed $r2_r3 def $r2_r3422; ARMV6-NEXT:    mcr p15, #0, r1, c7, c10, #5423; ARMV6-NEXT:  .LBB5_1: @ %atomicrmw.start424; ARMV6-NEXT:    @ =>This Inner Loop Header: Depth=1425; ARMV6-NEXT:    ldrexd r4, r5, [r0]426; ARMV6-NEXT:    strexd r1, r2, r3, [r0]427; ARMV6-NEXT:    cmp r1, #0428; ARMV6-NEXT:    bne .LBB5_1429; ARMV6-NEXT:  @ %bb.2: @ %atomicrmw.end430; ARMV6-NEXT:    mov r0, #0431; ARMV6-NEXT:    mcr p15, #0, r0, c7, c10, #5432; ARMV6-NEXT:    pop {r4, r5, r11, pc}433;434; THUMBM-LABEL: test_old_store_64bit:435; THUMBM:       @ %bb.0:436; THUMBM-NEXT:    push {r7, lr}437; THUMBM-NEXT:    sub sp, #8438; THUMBM-NEXT:    movs r1, #5439; THUMBM-NEXT:    str r1, [sp]440; THUMBM-NEXT:    bl __atomic_store_8441; THUMBM-NEXT:    add sp, #8442; THUMBM-NEXT:    pop {r7, pc}443  store atomic i64 %v, ptr %p seq_cst, align 8444  ret void445}446 447define half @load_atomic_f16__seq_cst(ptr %ptr) {448; ARM-LABEL: load_atomic_f16__seq_cst:449; ARM:       @ %bb.0:450; ARM-NEXT:    ldrh r0, [r0]451; ARM-NEXT:    dmb ish452; ARM-NEXT:    bx lr453;454; ARMOPTNONE-LABEL: load_atomic_f16__seq_cst:455; ARMOPTNONE:       @ %bb.0:456; ARMOPTNONE-NEXT:    ldrh r0, [r0]457; ARMOPTNONE-NEXT:    dmb ish458; ARMOPTNONE-NEXT:    bx lr459;460; THUMBTWO-LABEL: load_atomic_f16__seq_cst:461; THUMBTWO:       @ %bb.0:462; THUMBTWO-NEXT:    ldrh r0, [r0]463; THUMBTWO-NEXT:    dmb ish464; THUMBTWO-NEXT:    bx lr465;466; THUMBONE-LABEL: load_atomic_f16__seq_cst:467; THUMBONE:       @ %bb.0:468; THUMBONE-NEXT:    push {r7, lr}469; THUMBONE-NEXT:    movs r1, #0470; THUMBONE-NEXT:    mov r2, r1471; THUMBONE-NEXT:    bl __sync_val_compare_and_swap_2472; THUMBONE-NEXT:    pop {r7, pc}473;474; ARMV4-LABEL: load_atomic_f16__seq_cst:475; ARMV4:       @ %bb.0:476; ARMV4-NEXT:    push {r11, lr}477; ARMV4-NEXT:    mov r1, #5478; ARMV4-NEXT:    bl __atomic_load_2479; ARMV4-NEXT:    pop {r11, lr}480; ARMV4-NEXT:    mov pc, lr481;482; ARMV6-LABEL: load_atomic_f16__seq_cst:483; ARMV6:       @ %bb.0:484; ARMV6-NEXT:    ldrh r0, [r0]485; ARMV6-NEXT:    mov r1, #0486; ARMV6-NEXT:    mcr p15, #0, r1, c7, c10, #5487; ARMV6-NEXT:    bx lr488;489; THUMBM-LABEL: load_atomic_f16__seq_cst:490; THUMBM:       @ %bb.0:491; THUMBM-NEXT:    ldrh r0, [r0]492; THUMBM-NEXT:    dmb sy493; THUMBM-NEXT:    bx lr494  %val = load atomic half, ptr %ptr seq_cst, align 2495  ret half %val496}497 498define bfloat @load_atomic_bf16__seq_cst(ptr %ptr) {499; ARM-LABEL: load_atomic_bf16__seq_cst:500; ARM:       @ %bb.0:501; ARM-NEXT:    ldrh r0, [r0]502; ARM-NEXT:    dmb ish503; ARM-NEXT:    bx lr504;505; ARMOPTNONE-LABEL: load_atomic_bf16__seq_cst:506; ARMOPTNONE:       @ %bb.0:507; ARMOPTNONE-NEXT:    ldrh r0, [r0]508; ARMOPTNONE-NEXT:    dmb ish509; ARMOPTNONE-NEXT:    bx lr510;511; THUMBTWO-LABEL: load_atomic_bf16__seq_cst:512; THUMBTWO:       @ %bb.0:513; THUMBTWO-NEXT:    ldrh r0, [r0]514; THUMBTWO-NEXT:    dmb ish515; THUMBTWO-NEXT:    bx lr516;517; THUMBONE-LABEL: load_atomic_bf16__seq_cst:518; THUMBONE:       @ %bb.0:519; THUMBONE-NEXT:    push {r7, lr}520; THUMBONE-NEXT:    movs r1, #0521; THUMBONE-NEXT:    mov r2, r1522; THUMBONE-NEXT:    bl __sync_val_compare_and_swap_2523; THUMBONE-NEXT:    pop {r7, pc}524;525; ARMV4-LABEL: load_atomic_bf16__seq_cst:526; ARMV4:       @ %bb.0:527; ARMV4-NEXT:    push {r11, lr}528; ARMV4-NEXT:    mov r1, #5529; ARMV4-NEXT:    bl __atomic_load_2530; ARMV4-NEXT:    pop {r11, lr}531; ARMV4-NEXT:    mov pc, lr532;533; ARMV6-LABEL: load_atomic_bf16__seq_cst:534; ARMV6:       @ %bb.0:535; ARMV6-NEXT:    ldrh r0, [r0]536; ARMV6-NEXT:    mov r1, #0537; ARMV6-NEXT:    mcr p15, #0, r1, c7, c10, #5538; ARMV6-NEXT:    bx lr539;540; THUMBM-LABEL: load_atomic_bf16__seq_cst:541; THUMBM:       @ %bb.0:542; THUMBM-NEXT:    ldrh r0, [r0]543; THUMBM-NEXT:    dmb sy544; THUMBM-NEXT:    bx lr545  %val = load atomic bfloat, ptr %ptr seq_cst, align 2546  ret bfloat %val547}548 549define float @load_atomic_f32__seq_cst(ptr %ptr) {550; ARM-LABEL: load_atomic_f32__seq_cst:551; ARM:       @ %bb.0:552; ARM-NEXT:    ldr r0, [r0]553; ARM-NEXT:    dmb ish554; ARM-NEXT:    bx lr555;556; ARMOPTNONE-LABEL: load_atomic_f32__seq_cst:557; ARMOPTNONE:       @ %bb.0:558; ARMOPTNONE-NEXT:    ldr r0, [r0]559; ARMOPTNONE-NEXT:    dmb ish560; ARMOPTNONE-NEXT:    vmov s0, r0561; ARMOPTNONE-NEXT:    bx lr562;563; THUMBTWO-LABEL: load_atomic_f32__seq_cst:564; THUMBTWO:       @ %bb.0:565; THUMBTWO-NEXT:    ldr r0, [r0]566; THUMBTWO-NEXT:    dmb ish567; THUMBTWO-NEXT:    bx lr568;569; THUMBONE-LABEL: load_atomic_f32__seq_cst:570; THUMBONE:       @ %bb.0:571; THUMBONE-NEXT:    push {r7, lr}572; THUMBONE-NEXT:    movs r1, #0573; THUMBONE-NEXT:    mov r2, r1574; THUMBONE-NEXT:    bl __sync_val_compare_and_swap_4575; THUMBONE-NEXT:    pop {r7, pc}576;577; ARMV4-LABEL: load_atomic_f32__seq_cst:578; ARMV4:       @ %bb.0:579; ARMV4-NEXT:    push {r11, lr}580; ARMV4-NEXT:    mov r1, #5581; ARMV4-NEXT:    bl __atomic_load_4582; ARMV4-NEXT:    pop {r11, lr}583; ARMV4-NEXT:    mov pc, lr584;585; ARMV6-LABEL: load_atomic_f32__seq_cst:586; ARMV6:       @ %bb.0:587; ARMV6-NEXT:    ldr r0, [r0]588; ARMV6-NEXT:    mov r1, #0589; ARMV6-NEXT:    mcr p15, #0, r1, c7, c10, #5590; ARMV6-NEXT:    bx lr591;592; THUMBM-LABEL: load_atomic_f32__seq_cst:593; THUMBM:       @ %bb.0:594; THUMBM-NEXT:    ldr r0, [r0]595; THUMBM-NEXT:    dmb sy596; THUMBM-NEXT:    bx lr597  %val = load atomic float, ptr %ptr seq_cst, align 4598  ret float %val599}600 601define double @load_atomic_f64__seq_cst(ptr %ptr) {602; ARM-LABEL: load_atomic_f64__seq_cst:603; ARM:       @ %bb.0:604; ARM-NEXT:    ldrexd r0, r1, [r0]605; ARM-NEXT:    clrex606; ARM-NEXT:    dmb ish607; ARM-NEXT:    bx lr608;609; ARMOPTNONE-LABEL: load_atomic_f64__seq_cst:610; ARMOPTNONE:       @ %bb.0:611; ARMOPTNONE-NEXT:    ldrexd r2, r3, [r0]612; ARMOPTNONE-NEXT:    mov r1, r3613; ARMOPTNONE-NEXT:    mov r0, r2614; ARMOPTNONE-NEXT:    clrex615; ARMOPTNONE-NEXT:    dmb ish616; ARMOPTNONE-NEXT:    vmov d16, r0, r1617; ARMOPTNONE-NEXT:    bx lr618;619; THUMBTWO-LABEL: load_atomic_f64__seq_cst:620; THUMBTWO:       @ %bb.0:621; THUMBTWO-NEXT:    ldrexd r0, r1, [r0]622; THUMBTWO-NEXT:    clrex623; THUMBTWO-NEXT:    dmb ish624; THUMBTWO-NEXT:    bx lr625;626; THUMBONE-LABEL: load_atomic_f64__seq_cst:627; THUMBONE:       @ %bb.0:628; THUMBONE-NEXT:    push {r7, lr}629; THUMBONE-NEXT:    sub sp, #8630; THUMBONE-NEXT:    movs r2, #0631; THUMBONE-NEXT:    str r2, [sp]632; THUMBONE-NEXT:    str r2, [sp, #4]633; THUMBONE-NEXT:    mov r3, r2634; THUMBONE-NEXT:    bl __sync_val_compare_and_swap_8635; THUMBONE-NEXT:    add sp, #8636; THUMBONE-NEXT:    pop {r7, pc}637;638; ARMV4-LABEL: load_atomic_f64__seq_cst:639; ARMV4:       @ %bb.0:640; ARMV4-NEXT:    push {r11, lr}641; ARMV4-NEXT:    mov r1, #5642; ARMV4-NEXT:    bl __atomic_load_8643; ARMV4-NEXT:    pop {r11, lr}644; ARMV4-NEXT:    mov pc, lr645;646; ARMV6-LABEL: load_atomic_f64__seq_cst:647; ARMV6:       @ %bb.0:648; ARMV6-NEXT:    ldrexd r0, r1, [r0]649; ARMV6-NEXT:    mov r2, #0650; ARMV6-NEXT:    mcr p15, #0, r2, c7, c10, #5651; ARMV6-NEXT:    bx lr652;653; THUMBM-LABEL: load_atomic_f64__seq_cst:654; THUMBM:       @ %bb.0:655; THUMBM-NEXT:    push {r7, lr}656; THUMBM-NEXT:    movs r1, #5657; THUMBM-NEXT:    bl __atomic_load_8658; THUMBM-NEXT:    pop {r7, pc}659  %val = load atomic double, ptr %ptr seq_cst, align 8660  ret double %val661}662 663define void @store_atomic_f16__seq_cst(ptr %ptr, half %val1) {664; ARM-LABEL: store_atomic_f16__seq_cst:665; ARM:       @ %bb.0:666; ARM-NEXT:    dmb ish667; ARM-NEXT:    strh r1, [r0]668; ARM-NEXT:    dmb ish669; ARM-NEXT:    bx lr670;671; ARMOPTNONE-LABEL: store_atomic_f16__seq_cst:672; ARMOPTNONE:       @ %bb.0:673; ARMOPTNONE-NEXT:    sub sp, sp, #4674; ARMOPTNONE-NEXT:    str r1, [sp] @ 4-byte Spill675; ARMOPTNONE-NEXT:    mov r1, r0676; ARMOPTNONE-NEXT:    ldr r0, [sp] @ 4-byte Reload677; ARMOPTNONE-NEXT:    vmov s0, r0678; ARMOPTNONE-NEXT:    vmov r0, s0679; ARMOPTNONE-NEXT:    dmb ish680; ARMOPTNONE-NEXT:    strh r0, [r1]681; ARMOPTNONE-NEXT:    dmb ish682; ARMOPTNONE-NEXT:    add sp, sp, #4683; ARMOPTNONE-NEXT:    bx lr684;685; THUMBTWO-LABEL: store_atomic_f16__seq_cst:686; THUMBTWO:       @ %bb.0:687; THUMBTWO-NEXT:    dmb ish688; THUMBTWO-NEXT:    strh r1, [r0]689; THUMBTWO-NEXT:    dmb ish690; THUMBTWO-NEXT:    bx lr691;692; THUMBONE-LABEL: store_atomic_f16__seq_cst:693; THUMBONE:       @ %bb.0:694; THUMBONE-NEXT:    push {r7, lr}695; THUMBONE-NEXT:    bl __sync_lock_test_and_set_2696; THUMBONE-NEXT:    pop {r7, pc}697;698; ARMV4-LABEL: store_atomic_f16__seq_cst:699; ARMV4:       @ %bb.0:700; ARMV4-NEXT:    push {r11, lr}701; ARMV4-NEXT:    mov r2, #5702; ARMV4-NEXT:    bl __atomic_store_2703; ARMV4-NEXT:    pop {r11, lr}704; ARMV4-NEXT:    mov pc, lr705;706; ARMV6-LABEL: store_atomic_f16__seq_cst:707; ARMV6:       @ %bb.0:708; ARMV6-NEXT:    mov r2, #0709; ARMV6-NEXT:    mcr p15, #0, r2, c7, c10, #5710; ARMV6-NEXT:    strh r1, [r0]711; ARMV6-NEXT:    mcr p15, #0, r2, c7, c10, #5712; ARMV6-NEXT:    bx lr713;714; THUMBM-LABEL: store_atomic_f16__seq_cst:715; THUMBM:       @ %bb.0:716; THUMBM-NEXT:    dmb sy717; THUMBM-NEXT:    strh r1, [r0]718; THUMBM-NEXT:    dmb sy719; THUMBM-NEXT:    bx lr720  store atomic half %val1, ptr %ptr seq_cst, align 2721  ret void722}723 724define void @store_atomic_bf16__seq_cst(ptr %ptr, bfloat %val1) {725; ARM-LABEL: store_atomic_bf16__seq_cst:726; ARM:       @ %bb.0:727; ARM-NEXT:    dmb ish728; ARM-NEXT:    strh r1, [r0]729; ARM-NEXT:    dmb ish730; ARM-NEXT:    bx lr731;732; ARMOPTNONE-LABEL: store_atomic_bf16__seq_cst:733; ARMOPTNONE:       @ %bb.0:734; ARMOPTNONE-NEXT:    sub sp, sp, #4735; ARMOPTNONE-NEXT:    str r1, [sp] @ 4-byte Spill736; ARMOPTNONE-NEXT:    mov r1, r0737; ARMOPTNONE-NEXT:    ldr r0, [sp] @ 4-byte Reload738; ARMOPTNONE-NEXT:    vmov s0, r0739; ARMOPTNONE-NEXT:    vmov r0, s0740; ARMOPTNONE-NEXT:    dmb ish741; ARMOPTNONE-NEXT:    strh r0, [r1]742; ARMOPTNONE-NEXT:    dmb ish743; ARMOPTNONE-NEXT:    add sp, sp, #4744; ARMOPTNONE-NEXT:    bx lr745;746; THUMBTWO-LABEL: store_atomic_bf16__seq_cst:747; THUMBTWO:       @ %bb.0:748; THUMBTWO-NEXT:    dmb ish749; THUMBTWO-NEXT:    strh r1, [r0]750; THUMBTWO-NEXT:    dmb ish751; THUMBTWO-NEXT:    bx lr752;753; THUMBONE-LABEL: store_atomic_bf16__seq_cst:754; THUMBONE:       @ %bb.0:755; THUMBONE-NEXT:    push {r7, lr}756; THUMBONE-NEXT:    bl __sync_lock_test_and_set_2757; THUMBONE-NEXT:    pop {r7, pc}758;759; ARMV4-LABEL: store_atomic_bf16__seq_cst:760; ARMV4:       @ %bb.0:761; ARMV4-NEXT:    push {r11, lr}762; ARMV4-NEXT:    mov r2, #5763; ARMV4-NEXT:    bl __atomic_store_2764; ARMV4-NEXT:    pop {r11, lr}765; ARMV4-NEXT:    mov pc, lr766;767; ARMV6-LABEL: store_atomic_bf16__seq_cst:768; ARMV6:       @ %bb.0:769; ARMV6-NEXT:    mov r2, #0770; ARMV6-NEXT:    mcr p15, #0, r2, c7, c10, #5771; ARMV6-NEXT:    strh r1, [r0]772; ARMV6-NEXT:    mcr p15, #0, r2, c7, c10, #5773; ARMV6-NEXT:    bx lr774;775; THUMBM-LABEL: store_atomic_bf16__seq_cst:776; THUMBM:       @ %bb.0:777; THUMBM-NEXT:    dmb sy778; THUMBM-NEXT:    strh r1, [r0]779; THUMBM-NEXT:    dmb sy780; THUMBM-NEXT:    bx lr781  store atomic bfloat %val1, ptr %ptr seq_cst, align 2782  ret void783}784 785define void @store_atomic_f32__seq_cst(ptr %ptr, float %val1) {786; ARM-LABEL: store_atomic_f32__seq_cst:787; ARM:       @ %bb.0:788; ARM-NEXT:    dmb ish789; ARM-NEXT:    str r1, [r0]790; ARM-NEXT:    dmb ish791; ARM-NEXT:    bx lr792;793; ARMOPTNONE-LABEL: store_atomic_f32__seq_cst:794; ARMOPTNONE:       @ %bb.0:795; ARMOPTNONE-NEXT:    sub sp, sp, #4796; ARMOPTNONE-NEXT:    str r1, [sp] @ 4-byte Spill797; ARMOPTNONE-NEXT:    mov r1, r0798; ARMOPTNONE-NEXT:    ldr r0, [sp] @ 4-byte Reload799; ARMOPTNONE-NEXT:    vmov s0, r0800; ARMOPTNONE-NEXT:    vmov r0, s0801; ARMOPTNONE-NEXT:    dmb ish802; ARMOPTNONE-NEXT:    str r0, [r1]803; ARMOPTNONE-NEXT:    dmb ish804; ARMOPTNONE-NEXT:    add sp, sp, #4805; ARMOPTNONE-NEXT:    bx lr806;807; THUMBTWO-LABEL: store_atomic_f32__seq_cst:808; THUMBTWO:       @ %bb.0:809; THUMBTWO-NEXT:    dmb ish810; THUMBTWO-NEXT:    str r1, [r0]811; THUMBTWO-NEXT:    dmb ish812; THUMBTWO-NEXT:    bx lr813;814; THUMBONE-LABEL: store_atomic_f32__seq_cst:815; THUMBONE:       @ %bb.0:816; THUMBONE-NEXT:    push {r7, lr}817; THUMBONE-NEXT:    bl __sync_lock_test_and_set_4818; THUMBONE-NEXT:    pop {r7, pc}819;820; ARMV4-LABEL: store_atomic_f32__seq_cst:821; ARMV4:       @ %bb.0:822; ARMV4-NEXT:    push {r11, lr}823; ARMV4-NEXT:    mov r2, #5824; ARMV4-NEXT:    bl __atomic_store_4825; ARMV4-NEXT:    pop {r11, lr}826; ARMV4-NEXT:    mov pc, lr827;828; ARMV6-LABEL: store_atomic_f32__seq_cst:829; ARMV6:       @ %bb.0:830; ARMV6-NEXT:    mov r2, #0831; ARMV6-NEXT:    mcr p15, #0, r2, c7, c10, #5832; ARMV6-NEXT:    str r1, [r0]833; ARMV6-NEXT:    mcr p15, #0, r2, c7, c10, #5834; ARMV6-NEXT:    bx lr835;836; THUMBM-LABEL: store_atomic_f32__seq_cst:837; THUMBM:       @ %bb.0:838; THUMBM-NEXT:    dmb sy839; THUMBM-NEXT:    str r1, [r0]840; THUMBM-NEXT:    dmb sy841; THUMBM-NEXT:    bx lr842  store atomic float %val1, ptr %ptr seq_cst, align 4843  ret void844}845 846define void @store_atomic_f64__seq_cst(ptr %ptr, double %val1) {847; ARM-LABEL: store_atomic_f64__seq_cst:848; ARM:       @ %bb.0:849; ARM-NEXT:    push {r4, r5, lr}850; ARM-NEXT:    mov r3, r2851; ARM-NEXT:    dmb ish852; ARM-NEXT:    mov r2, r1853; ARM-NEXT:  LBB13_1: @ %atomicrmw.start854; ARM-NEXT:    @ =>This Inner Loop Header: Depth=1855; ARM-NEXT:    ldrexd r4, r5, [r0]856; ARM-NEXT:    strexd r1, r2, r3, [r0]857; ARM-NEXT:    cmp r1, #0858; ARM-NEXT:    bne LBB13_1859; ARM-NEXT:  @ %bb.2: @ %atomicrmw.end860; ARM-NEXT:    dmb ish861; ARM-NEXT:    pop {r4, r5, pc}862;863; ARMOPTNONE-LABEL: store_atomic_f64__seq_cst:864; ARMOPTNONE:       @ %bb.0:865; ARMOPTNONE-NEXT:    push	{r4, r5, r7, r8, r10, r11, lr}866; ARMOPTNONE-NEXT:    add	r7, sp, #20867; ARMOPTNONE-NEXT:    sub	sp, sp, #24868; ARMOPTNONE-NEXT:    str	r0, [sp, #4] @ 4-byte Spill869; ARMOPTNONE-NEXT:    vmov	d16, r1, r2870; ARMOPTNONE-NEXT:    vmov	r1, r2, d16871; ARMOPTNONE-NEXT:    str	r2, [sp, #8] @ 4-byte Spill872; ARMOPTNONE-NEXT:    str	r1, [sp, #12] @ 4-byte Spill873; ARMOPTNONE-NEXT:    dmb	ish874; ARMOPTNONE-NEXT:    ldr	r1, [r0]875; ARMOPTNONE-NEXT:    ldr	r0, [r0, #4]876; ARMOPTNONE-NEXT:    str	r1, [sp, #16] @ 4-byte Spill877; ARMOPTNONE-NEXT:    str	r0, [sp, #20] @ 4-byte Spill878; ARMOPTNONE-NEXT:    b LBB13_1879; ARMOPTNONE-NEXT:  LBB13_1: @ %atomicrmw.start880; ARMOPTNONE-NEXT:    @ =>This Loop Header: Depth=1881; ARMOPTNONE-NEXT:    @ Child Loop BB13_2 Depth 2882; ARMOPTNONE-NEXT:    ldr r3, [sp, #20] @ 4-byte Reload883; ARMOPTNONE-NEXT:    ldr r2, [sp, #16] @ 4-byte Reload884; ARMOPTNONE-NEXT:    ldr r12, [sp, #8] @ 4-byte Reload885; ARMOPTNONE-NEXT:    ldr r0, [sp, #12] @ 4-byte Reload886; ARMOPTNONE-NEXT:    ldr r8, [sp, #4] @ 4-byte Reload887; ARMOPTNONE-NEXT:    str r3, [sp] @ 4-byte Spill888; ARMOPTNONE-NEXT:    @ implicit-def: $r1889; ARMOPTNONE-NEXT:    @ implicit-def: $r9890; ARMOPTNONE-NEXT:    @ kill: def $r8 killed $r8 def $r8_r9891; ARMOPTNONE-NEXT:    mov r9, r1892; ARMOPTNONE-NEXT:    @ kill: def $r0 killed $r0 def $r0_r1893; ARMOPTNONE-NEXT:    mov r1, r12894; ARMOPTNONE-NEXT:    mov r10, r2895; ARMOPTNONE-NEXT:    mov r11, r3896; ARMOPTNONE-NEXT:  LBB13_2: @ %atomicrmw.start897; ARMOPTNONE-NEXT:    @ Parent Loop BB13_1 Depth=1898; ARMOPTNONE-NEXT:    @ => This Inner Loop Header: Depth=2899; ARMOPTNONE-NEXT:    ldrexd r4, r5, [r8]900; ARMOPTNONE-NEXT:    cmp r4, r10901; ARMOPTNONE-NEXT:    cmpeq r5, r11902; ARMOPTNONE-NEXT:    bne LBB13_4903; ARMOPTNONE-NEXT:  @ %bb.3: @ %atomicrmw.start904; ARMOPTNONE-NEXT:    @ in Loop: Header=BB13_2 Depth=2905; ARMOPTNONE-NEXT:    strexd r9, r0, r1, [r8]906; ARMOPTNONE-NEXT:    cmp r9, #0907; ARMOPTNONE-NEXT:    bne LBB13_2908; ARMOPTNONE-NEXT:  LBB13_4: @ %atomicrmw.start909; ARMOPTNONE-NEXT:    @ in Loop: Header=BB13_1 Depth=1910; ARMOPTNONE-NEXT:    ldr r1, [sp] @ 4-byte Reload911; ARMOPTNONE-NEXT:    mov r0, r5912; ARMOPTNONE-NEXT:    eor r3, r0, r1913; ARMOPTNONE-NEXT:    mov r1, r4914; ARMOPTNONE-NEXT:    eor r2, r1, r2915; ARMOPTNONE-NEXT:    orr r2, r2, r3916; ARMOPTNONE-NEXT:    cmp r2, #0917; ARMOPTNONE-NEXT:    str r1, [sp, #16] @ 4-byte Spill918; ARMOPTNONE-NEXT:    str r0, [sp, #20] @ 4-byte Spill919; ARMOPTNONE-NEXT:    bne LBB13_1920; ARMOPTNONE-NEXT:    b LBB13_5921; ARMOPTNONE-NEXT:  LBB13_5: @ %atomicrmw.end922; ARMOPTNONE-NEXT:    dmb ish923; ARMOPTNONE-NEXT:    sub sp, r7, #20924; ARMOPTNONE-NEXT:    pop	{r4, r5, r7, r8, r10, r11, pc}925;926; THUMBTWO-LABEL: store_atomic_f64__seq_cst:927; THUMBTWO:       @ %bb.0:928; THUMBTWO-NEXT:    dmb ish929; THUMBTWO-NEXT:  LBB13_1: @ %atomicrmw.start930; THUMBTWO-NEXT:    @ =>This Inner Loop Header: Depth=1931; THUMBTWO-NEXT:    ldrexd r3, r9, [r0]932; THUMBTWO-NEXT:    strexd r3, r1, r2, [r0]933; THUMBTWO-NEXT:    cmp r3, #0934; THUMBTWO-NEXT:    bne LBB13_1935; THUMBTWO-NEXT:  @ %bb.2: @ %atomicrmw.end936; THUMBTWO-NEXT:    dmb ish937; THUMBTWO-NEXT:    bx lr938;939; THUMBONE-LABEL: store_atomic_f64__seq_cst:940; THUMBONE:       @ %bb.0:941; THUMBONE-NEXT:    push {r7, lr}942; THUMBONE-NEXT:    bl __sync_lock_test_and_set_8943; THUMBONE-NEXT:    pop {r7, pc}944;945; ARMV4-LABEL: store_atomic_f64__seq_cst:946; ARMV4:       @ %bb.0:947; ARMV4-NEXT:    push {r11, lr}948; ARMV4-NEXT:    sub sp, sp, #8949; ARMV4-NEXT:    mov r1, #5950; ARMV4-NEXT:    str r1, [sp]951; ARMV4-NEXT:    bl __atomic_store_8952; ARMV4-NEXT:    add sp, sp, #8953; ARMV4-NEXT:    pop {r11, lr}954; ARMV4-NEXT:    mov pc, lr955;956; ARMV6-LABEL: store_atomic_f64__seq_cst:957; ARMV6:       @ %bb.0:958; ARMV6-NEXT:    push {r4, r5, r11, lr}959; ARMV6-NEXT:    @ kill: def $r3 killed $r3 killed $r2_r3 def $r2_r3960; ARMV6-NEXT:    mov r1, #0961; ARMV6-NEXT:    @ kill: def $r2 killed $r2 killed $r2_r3 def $r2_r3962; ARMV6-NEXT:    mcr p15, #0, r1, c7, c10, #5963; ARMV6-NEXT:  .LBB13_1: @ %atomicrmw.start964; ARMV6-NEXT:    @ =>This Inner Loop Header: Depth=1965; ARMV6-NEXT:    ldrexd r4, r5, [r0]966; ARMV6-NEXT:    strexd r1, r2, r3, [r0]967; ARMV6-NEXT:    cmp r1, #0968; ARMV6-NEXT:    bne .LBB13_1969; ARMV6-NEXT:  @ %bb.2: @ %atomicrmw.end970; ARMV6-NEXT:    mov r0, #0971; ARMV6-NEXT:    mcr p15, #0, r0, c7, c10, #5972; ARMV6-NEXT:    pop {r4, r5, r11, pc}973;974; THUMBM-LABEL: store_atomic_f64__seq_cst:975; THUMBM:       @ %bb.0:976; THUMBM-NEXT:    push {r7, lr}977; THUMBM-NEXT:    sub sp, #8978; THUMBM-NEXT:    movs r1, #5979; THUMBM-NEXT:    str r1, [sp]980; THUMBM-NEXT:    bl __atomic_store_8981; THUMBM-NEXT:    add sp, #8982; THUMBM-NEXT:    pop {r7, pc}983  store atomic double %val1, ptr %ptr seq_cst, align 8984  ret void985}986