brintos

brintos / llvm-project-archived public Read only

0
0
Text · 42.3 KiB · c739096 Raw
1055 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=aarch64-linux-gnu -O1 -fast-isel=0 -global-isel=false %s -o - | FileCheck -check-prefix=NOLSE %s3; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+lse -O1 -fast-isel=0 -global-isel=false %s -o - | FileCheck -check-prefix=LSE %s4; RUN: llc -mtriple=aarch64-linux-gnu -mattr=-lse,-fp-armv8 -O1 < %s | FileCheck -check-prefix=SOFTFP-NOLSE %s5 6define half @test_atomicrmw_fsub_f16_seq_cst_align2(ptr %ptr, half %value) #0 {7; NOLSE-LABEL: test_atomicrmw_fsub_f16_seq_cst_align2:8; NOLSE:       // %bb.0:9; NOLSE-NEXT:    fcvt s1, h010; NOLSE-NEXT:  .LBB0_1: // %atomicrmw.start11; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=112; NOLSE-NEXT:    ldaxrh w8, [x0]13; NOLSE-NEXT:    fmov s0, w814; NOLSE-NEXT:    fcvt s2, h015; NOLSE-NEXT:    fsub s2, s2, s116; NOLSE-NEXT:    fcvt h2, s217; NOLSE-NEXT:    fmov w8, s218; NOLSE-NEXT:    stlxrh w9, w8, [x0]19; NOLSE-NEXT:    cbnz w9, .LBB0_120; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end21; NOLSE-NEXT:    // kill: def $h0 killed $h0 killed $s022; NOLSE-NEXT:    ret23;24; LSE-LABEL: test_atomicrmw_fsub_f16_seq_cst_align2:25; LSE:       // %bb.0:26; LSE-NEXT:    fcvt s1, h027; LSE-NEXT:    ldr h0, [x0]28; LSE-NEXT:  .LBB0_1: // %atomicrmw.start29; LSE-NEXT:    // =>This Inner Loop Header: Depth=130; LSE-NEXT:    fcvt s2, h031; LSE-NEXT:    fmov w8, s032; LSE-NEXT:    mov w10, w833; LSE-NEXT:    fsub s2, s2, s134; LSE-NEXT:    fcvt h2, s235; LSE-NEXT:    fmov w9, s236; LSE-NEXT:    casalh w10, w9, [x0]37; LSE-NEXT:    fmov s0, w1038; LSE-NEXT:    cmp w10, w8, uxth39; LSE-NEXT:    b.ne .LBB0_140; LSE-NEXT:  // %bb.2: // %atomicrmw.end41; LSE-NEXT:    // kill: def $h0 killed $h0 killed $s042; LSE-NEXT:    ret43;44; SOFTFP-NOLSE-LABEL: test_atomicrmw_fsub_f16_seq_cst_align2:45; SOFTFP-NOLSE:       // %bb.0:46; SOFTFP-NOLSE-NEXT:    str x30, [sp, #-48]! // 8-byte Folded Spill47; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #32] // 16-byte Folded Spill48; SOFTFP-NOLSE-NEXT:    mov x19, x049; SOFTFP-NOLSE-NEXT:    ldrh w0, [x0]50; SOFTFP-NOLSE-NEXT:    mov w20, w151; SOFTFP-NOLSE-NEXT:    stp x22, x21, [sp, #16] // 16-byte Folded Spill52; SOFTFP-NOLSE-NEXT:  .LBB0_1: // %atomicrmw.start53; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=154; SOFTFP-NOLSE-NEXT:    // Child Loop BB0_2 Depth 255; SOFTFP-NOLSE-NEXT:    mov w22, w056; SOFTFP-NOLSE-NEXT:    and w0, w20, #0xffff57; SOFTFP-NOLSE-NEXT:    bl __extendhfsf258; SOFTFP-NOLSE-NEXT:    mov w21, w059; SOFTFP-NOLSE-NEXT:    and w0, w22, #0xffff60; SOFTFP-NOLSE-NEXT:    bl __extendhfsf261; SOFTFP-NOLSE-NEXT:    mov w1, w2162; SOFTFP-NOLSE-NEXT:    bl __subsf363; SOFTFP-NOLSE-NEXT:    bl __truncsfhf264; SOFTFP-NOLSE-NEXT:    mov w8, w065; SOFTFP-NOLSE-NEXT:  .LBB0_2: // %cmpxchg.start66; SOFTFP-NOLSE-NEXT:    // Parent Loop BB0_1 Depth=167; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=268; SOFTFP-NOLSE-NEXT:    ldaxrh w0, [x19]69; SOFTFP-NOLSE-NEXT:    cmp w0, w22, uxth70; SOFTFP-NOLSE-NEXT:    b.ne .LBB0_571; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore72; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB0_2 Depth=273; SOFTFP-NOLSE-NEXT:    stlxrh w9, w8, [x19]74; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB0_275; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB0_1 Depth=176; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x177; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB0_178; SOFTFP-NOLSE-NEXT:    b .LBB0_679; SOFTFP-NOLSE-NEXT:  .LBB0_5: // %cmpxchg.nostore80; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB0_1 Depth=181; SOFTFP-NOLSE-NEXT:    mov w8, wzr82; SOFTFP-NOLSE-NEXT:    clrex83; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB0_184; SOFTFP-NOLSE-NEXT:  .LBB0_6: // %atomicrmw.end85; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #32] // 16-byte Folded Reload86; SOFTFP-NOLSE-NEXT:    // kill: def $w0 killed $w0 killed $x087; SOFTFP-NOLSE-NEXT:    ldp x22, x21, [sp, #16] // 16-byte Folded Reload88; SOFTFP-NOLSE-NEXT:    ldr x30, [sp], #48 // 8-byte Folded Reload89; SOFTFP-NOLSE-NEXT:    ret90  %res = atomicrmw fsub ptr %ptr, half %value seq_cst, align 291  ret half %res92}93 94define half @test_atomicrmw_fsub_f16_seq_cst_align4(ptr %ptr, half %value) #0 {95; NOLSE-LABEL: test_atomicrmw_fsub_f16_seq_cst_align4:96; NOLSE:       // %bb.0:97; NOLSE-NEXT:    fcvt s1, h098; NOLSE-NEXT:  .LBB1_1: // %atomicrmw.start99; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1100; NOLSE-NEXT:    ldaxrh w8, [x0]101; NOLSE-NEXT:    fmov s0, w8102; NOLSE-NEXT:    fcvt s2, h0103; NOLSE-NEXT:    fsub s2, s2, s1104; NOLSE-NEXT:    fcvt h2, s2105; NOLSE-NEXT:    fmov w8, s2106; NOLSE-NEXT:    stlxrh w9, w8, [x0]107; NOLSE-NEXT:    cbnz w9, .LBB1_1108; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end109; NOLSE-NEXT:    // kill: def $h0 killed $h0 killed $s0110; NOLSE-NEXT:    ret111;112; LSE-LABEL: test_atomicrmw_fsub_f16_seq_cst_align4:113; LSE:       // %bb.0:114; LSE-NEXT:    fcvt s1, h0115; LSE-NEXT:    ldr h0, [x0]116; LSE-NEXT:  .LBB1_1: // %atomicrmw.start117; LSE-NEXT:    // =>This Inner Loop Header: Depth=1118; LSE-NEXT:    fcvt s2, h0119; LSE-NEXT:    fmov w8, s0120; LSE-NEXT:    mov w10, w8121; LSE-NEXT:    fsub s2, s2, s1122; LSE-NEXT:    fcvt h2, s2123; LSE-NEXT:    fmov w9, s2124; LSE-NEXT:    casalh w10, w9, [x0]125; LSE-NEXT:    fmov s0, w10126; LSE-NEXT:    cmp w10, w8, uxth127; LSE-NEXT:    b.ne .LBB1_1128; LSE-NEXT:  // %bb.2: // %atomicrmw.end129; LSE-NEXT:    // kill: def $h0 killed $h0 killed $s0130; LSE-NEXT:    ret131;132; SOFTFP-NOLSE-LABEL: test_atomicrmw_fsub_f16_seq_cst_align4:133; SOFTFP-NOLSE:       // %bb.0:134; SOFTFP-NOLSE-NEXT:    str x30, [sp, #-48]! // 8-byte Folded Spill135; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #32] // 16-byte Folded Spill136; SOFTFP-NOLSE-NEXT:    mov x19, x0137; SOFTFP-NOLSE-NEXT:    ldrh w0, [x0]138; SOFTFP-NOLSE-NEXT:    mov w20, w1139; SOFTFP-NOLSE-NEXT:    stp x22, x21, [sp, #16] // 16-byte Folded Spill140; SOFTFP-NOLSE-NEXT:  .LBB1_1: // %atomicrmw.start141; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1142; SOFTFP-NOLSE-NEXT:    // Child Loop BB1_2 Depth 2143; SOFTFP-NOLSE-NEXT:    mov w22, w0144; SOFTFP-NOLSE-NEXT:    and w0, w20, #0xffff145; SOFTFP-NOLSE-NEXT:    bl __extendhfsf2146; SOFTFP-NOLSE-NEXT:    mov w21, w0147; SOFTFP-NOLSE-NEXT:    and w0, w22, #0xffff148; SOFTFP-NOLSE-NEXT:    bl __extendhfsf2149; SOFTFP-NOLSE-NEXT:    mov w1, w21150; SOFTFP-NOLSE-NEXT:    bl __subsf3151; SOFTFP-NOLSE-NEXT:    bl __truncsfhf2152; SOFTFP-NOLSE-NEXT:    mov w8, w0153; SOFTFP-NOLSE-NEXT:  .LBB1_2: // %cmpxchg.start154; SOFTFP-NOLSE-NEXT:    // Parent Loop BB1_1 Depth=1155; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2156; SOFTFP-NOLSE-NEXT:    ldaxrh w0, [x19]157; SOFTFP-NOLSE-NEXT:    cmp w0, w22, uxth158; SOFTFP-NOLSE-NEXT:    b.ne .LBB1_5159; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore160; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB1_2 Depth=2161; SOFTFP-NOLSE-NEXT:    stlxrh w9, w8, [x19]162; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB1_2163; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB1_1 Depth=1164; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1165; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB1_1166; SOFTFP-NOLSE-NEXT:    b .LBB1_6167; SOFTFP-NOLSE-NEXT:  .LBB1_5: // %cmpxchg.nostore168; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB1_1 Depth=1169; SOFTFP-NOLSE-NEXT:    mov w8, wzr170; SOFTFP-NOLSE-NEXT:    clrex171; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB1_1172; SOFTFP-NOLSE-NEXT:  .LBB1_6: // %atomicrmw.end173; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #32] // 16-byte Folded Reload174; SOFTFP-NOLSE-NEXT:    // kill: def $w0 killed $w0 killed $x0175; SOFTFP-NOLSE-NEXT:    ldp x22, x21, [sp, #16] // 16-byte Folded Reload176; SOFTFP-NOLSE-NEXT:    ldr x30, [sp], #48 // 8-byte Folded Reload177; SOFTFP-NOLSE-NEXT:    ret178  %res = atomicrmw fsub ptr %ptr, half %value seq_cst, align 4179  ret half %res180}181 182define bfloat @test_atomicrmw_fsub_bf16_seq_cst_align2(ptr %ptr, bfloat %value) #0 {183; NOLSE-LABEL: test_atomicrmw_fsub_bf16_seq_cst_align2:184; NOLSE:       // %bb.0:185; NOLSE-NEXT:    // kill: def $h0 killed $h0 def $d0186; NOLSE-NEXT:    shll v1.4s, v0.4h, #16187; NOLSE-NEXT:    mov w8, #32767 // =0x7fff188; NOLSE-NEXT:  .LBB2_1: // %atomicrmw.start189; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1190; NOLSE-NEXT:    ldaxrh w9, [x0]191; NOLSE-NEXT:    fmov s0, w9192; NOLSE-NEXT:    shll v2.4s, v0.4h, #16193; NOLSE-NEXT:    fsub s2, s2, s1194; NOLSE-NEXT:    fmov w9, s2195; NOLSE-NEXT:    ubfx w10, w9, #16, #1196; NOLSE-NEXT:    add w9, w9, w8197; NOLSE-NEXT:    add w9, w10, w9198; NOLSE-NEXT:    lsr w9, w9, #16199; NOLSE-NEXT:    stlxrh w10, w9, [x0]200; NOLSE-NEXT:    cbnz w10, .LBB2_1201; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end202; NOLSE-NEXT:    // kill: def $h0 killed $h0 killed $d0203; NOLSE-NEXT:    ret204;205; LSE-LABEL: test_atomicrmw_fsub_bf16_seq_cst_align2:206; LSE:       // %bb.0:207; LSE-NEXT:    // kill: def $h0 killed $h0 def $d0208; LSE-NEXT:    shll v1.4s, v0.4h, #16209; LSE-NEXT:    mov w8, #32767 // =0x7fff210; LSE-NEXT:    ldr h0, [x0]211; LSE-NEXT:  .LBB2_1: // %atomicrmw.start212; LSE-NEXT:    // =>This Inner Loop Header: Depth=1213; LSE-NEXT:    shll v2.4s, v0.4h, #16214; LSE-NEXT:    fsub s2, s2, s1215; LSE-NEXT:    fmov w9, s2216; LSE-NEXT:    ubfx w10, w9, #16, #1217; LSE-NEXT:    add w9, w9, w8218; LSE-NEXT:    add w9, w10, w9219; LSE-NEXT:    lsr w9, w9, #16220; LSE-NEXT:    fmov s2, w9221; LSE-NEXT:    fmov w9, s0222; LSE-NEXT:    fmov w10, s2223; LSE-NEXT:    mov w11, w9224; LSE-NEXT:    casalh w11, w10, [x0]225; LSE-NEXT:    fmov s0, w11226; LSE-NEXT:    cmp w11, w9, uxth227; LSE-NEXT:    b.ne .LBB2_1228; LSE-NEXT:  // %bb.2: // %atomicrmw.end229; LSE-NEXT:    // kill: def $h0 killed $h0 killed $d0230; LSE-NEXT:    ret231;232; SOFTFP-NOLSE-LABEL: test_atomicrmw_fsub_bf16_seq_cst_align2:233; SOFTFP-NOLSE:       // %bb.0:234; SOFTFP-NOLSE-NEXT:    stp x30, x21, [sp, #-32]! // 16-byte Folded Spill235; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #16] // 16-byte Folded Spill236; SOFTFP-NOLSE-NEXT:    mov x19, x0237; SOFTFP-NOLSE-NEXT:    ldrh w0, [x0]238; SOFTFP-NOLSE-NEXT:    lsl w20, w1, #16239; SOFTFP-NOLSE-NEXT:  .LBB2_1: // %atomicrmw.start240; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1241; SOFTFP-NOLSE-NEXT:    // Child Loop BB2_2 Depth 2242; SOFTFP-NOLSE-NEXT:    mov w21, w0243; SOFTFP-NOLSE-NEXT:    lsl w0, w0, #16244; SOFTFP-NOLSE-NEXT:    mov w1, w20245; SOFTFP-NOLSE-NEXT:    bl __subsf3246; SOFTFP-NOLSE-NEXT:    bl __truncsfbf2247; SOFTFP-NOLSE-NEXT:    mov w8, w0248; SOFTFP-NOLSE-NEXT:  .LBB2_2: // %cmpxchg.start249; SOFTFP-NOLSE-NEXT:    // Parent Loop BB2_1 Depth=1250; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2251; SOFTFP-NOLSE-NEXT:    ldaxrh w0, [x19]252; SOFTFP-NOLSE-NEXT:    cmp w0, w21, uxth253; SOFTFP-NOLSE-NEXT:    b.ne .LBB2_5254; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore255; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB2_2 Depth=2256; SOFTFP-NOLSE-NEXT:    stlxrh w9, w8, [x19]257; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB2_2258; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB2_1 Depth=1259; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1260; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB2_1261; SOFTFP-NOLSE-NEXT:    b .LBB2_6262; SOFTFP-NOLSE-NEXT:  .LBB2_5: // %cmpxchg.nostore263; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB2_1 Depth=1264; SOFTFP-NOLSE-NEXT:    mov w8, wzr265; SOFTFP-NOLSE-NEXT:    clrex266; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB2_1267; SOFTFP-NOLSE-NEXT:  .LBB2_6: // %atomicrmw.end268; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #16] // 16-byte Folded Reload269; SOFTFP-NOLSE-NEXT:    // kill: def $w0 killed $w0 killed $x0270; SOFTFP-NOLSE-NEXT:    ldp x30, x21, [sp], #32 // 16-byte Folded Reload271; SOFTFP-NOLSE-NEXT:    ret272  %res = atomicrmw fsub ptr %ptr, bfloat %value seq_cst, align 2273  ret bfloat %res274}275 276define bfloat @test_atomicrmw_fsub_bf16_seq_cst_align4(ptr %ptr, bfloat %value) #0 {277; NOLSE-LABEL: test_atomicrmw_fsub_bf16_seq_cst_align4:278; NOLSE:       // %bb.0:279; NOLSE-NEXT:    // kill: def $h0 killed $h0 def $d0280; NOLSE-NEXT:    shll v1.4s, v0.4h, #16281; NOLSE-NEXT:    mov w8, #32767 // =0x7fff282; NOLSE-NEXT:  .LBB3_1: // %atomicrmw.start283; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1284; NOLSE-NEXT:    ldaxrh w9, [x0]285; NOLSE-NEXT:    fmov s0, w9286; NOLSE-NEXT:    shll v2.4s, v0.4h, #16287; NOLSE-NEXT:    fsub s2, s2, s1288; NOLSE-NEXT:    fmov w9, s2289; NOLSE-NEXT:    ubfx w10, w9, #16, #1290; NOLSE-NEXT:    add w9, w9, w8291; NOLSE-NEXT:    add w9, w10, w9292; NOLSE-NEXT:    lsr w9, w9, #16293; NOLSE-NEXT:    stlxrh w10, w9, [x0]294; NOLSE-NEXT:    cbnz w10, .LBB3_1295; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end296; NOLSE-NEXT:    // kill: def $h0 killed $h0 killed $d0297; NOLSE-NEXT:    ret298;299; LSE-LABEL: test_atomicrmw_fsub_bf16_seq_cst_align4:300; LSE:       // %bb.0:301; LSE-NEXT:    // kill: def $h0 killed $h0 def $d0302; LSE-NEXT:    shll v1.4s, v0.4h, #16303; LSE-NEXT:    mov w8, #32767 // =0x7fff304; LSE-NEXT:    ldr h0, [x0]305; LSE-NEXT:  .LBB3_1: // %atomicrmw.start306; LSE-NEXT:    // =>This Inner Loop Header: Depth=1307; LSE-NEXT:    shll v2.4s, v0.4h, #16308; LSE-NEXT:    fsub s2, s2, s1309; LSE-NEXT:    fmov w9, s2310; LSE-NEXT:    ubfx w10, w9, #16, #1311; LSE-NEXT:    add w9, w9, w8312; LSE-NEXT:    add w9, w10, w9313; LSE-NEXT:    lsr w9, w9, #16314; LSE-NEXT:    fmov s2, w9315; LSE-NEXT:    fmov w9, s0316; LSE-NEXT:    fmov w10, s2317; LSE-NEXT:    mov w11, w9318; LSE-NEXT:    casalh w11, w10, [x0]319; LSE-NEXT:    fmov s0, w11320; LSE-NEXT:    cmp w11, w9, uxth321; LSE-NEXT:    b.ne .LBB3_1322; LSE-NEXT:  // %bb.2: // %atomicrmw.end323; LSE-NEXT:    // kill: def $h0 killed $h0 killed $d0324; LSE-NEXT:    ret325;326; SOFTFP-NOLSE-LABEL: test_atomicrmw_fsub_bf16_seq_cst_align4:327; SOFTFP-NOLSE:       // %bb.0:328; SOFTFP-NOLSE-NEXT:    stp x30, x21, [sp, #-32]! // 16-byte Folded Spill329; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #16] // 16-byte Folded Spill330; SOFTFP-NOLSE-NEXT:    mov x19, x0331; SOFTFP-NOLSE-NEXT:    ldrh w0, [x0]332; SOFTFP-NOLSE-NEXT:    lsl w20, w1, #16333; SOFTFP-NOLSE-NEXT:  .LBB3_1: // %atomicrmw.start334; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1335; SOFTFP-NOLSE-NEXT:    // Child Loop BB3_2 Depth 2336; SOFTFP-NOLSE-NEXT:    mov w21, w0337; SOFTFP-NOLSE-NEXT:    lsl w0, w0, #16338; SOFTFP-NOLSE-NEXT:    mov w1, w20339; SOFTFP-NOLSE-NEXT:    bl __subsf3340; SOFTFP-NOLSE-NEXT:    bl __truncsfbf2341; SOFTFP-NOLSE-NEXT:    mov w8, w0342; SOFTFP-NOLSE-NEXT:  .LBB3_2: // %cmpxchg.start343; SOFTFP-NOLSE-NEXT:    // Parent Loop BB3_1 Depth=1344; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2345; SOFTFP-NOLSE-NEXT:    ldaxrh w0, [x19]346; SOFTFP-NOLSE-NEXT:    cmp w0, w21, uxth347; SOFTFP-NOLSE-NEXT:    b.ne .LBB3_5348; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore349; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB3_2 Depth=2350; SOFTFP-NOLSE-NEXT:    stlxrh w9, w8, [x19]351; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB3_2352; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB3_1 Depth=1353; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1354; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB3_1355; SOFTFP-NOLSE-NEXT:    b .LBB3_6356; SOFTFP-NOLSE-NEXT:  .LBB3_5: // %cmpxchg.nostore357; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB3_1 Depth=1358; SOFTFP-NOLSE-NEXT:    mov w8, wzr359; SOFTFP-NOLSE-NEXT:    clrex360; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB3_1361; SOFTFP-NOLSE-NEXT:  .LBB3_6: // %atomicrmw.end362; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #16] // 16-byte Folded Reload363; SOFTFP-NOLSE-NEXT:    // kill: def $w0 killed $w0 killed $x0364; SOFTFP-NOLSE-NEXT:    ldp x30, x21, [sp], #32 // 16-byte Folded Reload365; SOFTFP-NOLSE-NEXT:    ret366  %res = atomicrmw fsub ptr %ptr, bfloat %value seq_cst, align 4367  ret bfloat %res368}369 370define float @test_atomicrmw_fsub_f32_seq_cst_align4(ptr %ptr, float %value) #0 {371; NOLSE-LABEL: test_atomicrmw_fsub_f32_seq_cst_align4:372; NOLSE:       // %bb.0:373; NOLSE-NEXT:  .LBB4_1: // %atomicrmw.start374; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1375; NOLSE-NEXT:    ldaxr w8, [x0]376; NOLSE-NEXT:    fmov s1, w8377; NOLSE-NEXT:    fsub s2, s1, s0378; NOLSE-NEXT:    fmov w8, s2379; NOLSE-NEXT:    stlxr w9, w8, [x0]380; NOLSE-NEXT:    cbnz w9, .LBB4_1381; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end382; NOLSE-NEXT:    fmov s0, s1383; NOLSE-NEXT:    ret384;385; LSE-LABEL: test_atomicrmw_fsub_f32_seq_cst_align4:386; LSE:       // %bb.0:387; LSE-NEXT:    ldr s1, [x0]388; LSE-NEXT:  .LBB4_1: // %atomicrmw.start389; LSE-NEXT:    // =>This Inner Loop Header: Depth=1390; LSE-NEXT:    fsub s2, s1, s0391; LSE-NEXT:    fmov w8, s1392; LSE-NEXT:    mov w10, w8393; LSE-NEXT:    fmov w9, s2394; LSE-NEXT:    casal w10, w9, [x0]395; LSE-NEXT:    fmov s1, w10396; LSE-NEXT:    cmp w10, w8397; LSE-NEXT:    b.ne .LBB4_1398; LSE-NEXT:  // %bb.2: // %atomicrmw.end399; LSE-NEXT:    fmov s0, s1400; LSE-NEXT:    ret401;402; SOFTFP-NOLSE-LABEL: test_atomicrmw_fsub_f32_seq_cst_align4:403; SOFTFP-NOLSE:       // %bb.0:404; SOFTFP-NOLSE-NEXT:    stp x30, x21, [sp, #-32]! // 16-byte Folded Spill405; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #16] // 16-byte Folded Spill406; SOFTFP-NOLSE-NEXT:    mov x19, x0407; SOFTFP-NOLSE-NEXT:    ldr w0, [x0]408; SOFTFP-NOLSE-NEXT:    mov w20, w1409; SOFTFP-NOLSE-NEXT:  .LBB4_1: // %atomicrmw.start410; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1411; SOFTFP-NOLSE-NEXT:    // Child Loop BB4_2 Depth 2412; SOFTFP-NOLSE-NEXT:    mov w1, w20413; SOFTFP-NOLSE-NEXT:    mov w21, w0414; SOFTFP-NOLSE-NEXT:    bl __subsf3415; SOFTFP-NOLSE-NEXT:    mov w8, w0416; SOFTFP-NOLSE-NEXT:  .LBB4_2: // %cmpxchg.start417; SOFTFP-NOLSE-NEXT:    // Parent Loop BB4_1 Depth=1418; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2419; SOFTFP-NOLSE-NEXT:    ldaxr w0, [x19]420; SOFTFP-NOLSE-NEXT:    cmp w0, w21421; SOFTFP-NOLSE-NEXT:    b.ne .LBB4_5422; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore423; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB4_2 Depth=2424; SOFTFP-NOLSE-NEXT:    stlxr w9, w8, [x19]425; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB4_2426; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB4_1 Depth=1427; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1428; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB4_1429; SOFTFP-NOLSE-NEXT:    b .LBB4_6430; SOFTFP-NOLSE-NEXT:  .LBB4_5: // %cmpxchg.nostore431; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB4_1 Depth=1432; SOFTFP-NOLSE-NEXT:    mov w8, wzr433; SOFTFP-NOLSE-NEXT:    clrex434; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB4_1435; SOFTFP-NOLSE-NEXT:  .LBB4_6: // %atomicrmw.end436; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #16] // 16-byte Folded Reload437; SOFTFP-NOLSE-NEXT:    // kill: def $w0 killed $w0 killed $x0438; SOFTFP-NOLSE-NEXT:    ldp x30, x21, [sp], #32 // 16-byte Folded Reload439; SOFTFP-NOLSE-NEXT:    ret440  %res = atomicrmw fsub ptr %ptr, float %value seq_cst, align 4441  ret float %res442}443 444define double @test_atomicrmw_fsub_f32_seq_cst_align8(ptr %ptr, double %value) #0 {445; NOLSE-LABEL: test_atomicrmw_fsub_f32_seq_cst_align8:446; NOLSE:       // %bb.0:447; NOLSE-NEXT:  .LBB5_1: // %atomicrmw.start448; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1449; NOLSE-NEXT:    ldaxr x8, [x0]450; NOLSE-NEXT:    fmov d1, x8451; NOLSE-NEXT:    fsub d2, d1, d0452; NOLSE-NEXT:    fmov x8, d2453; NOLSE-NEXT:    stlxr w9, x8, [x0]454; NOLSE-NEXT:    cbnz w9, .LBB5_1455; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end456; NOLSE-NEXT:    fmov d0, d1457; NOLSE-NEXT:    ret458;459; LSE-LABEL: test_atomicrmw_fsub_f32_seq_cst_align8:460; LSE:       // %bb.0:461; LSE-NEXT:    ldr d1, [x0]462; LSE-NEXT:  .LBB5_1: // %atomicrmw.start463; LSE-NEXT:    // =>This Inner Loop Header: Depth=1464; LSE-NEXT:    fsub d2, d1, d0465; LSE-NEXT:    fmov x8, d1466; LSE-NEXT:    mov x10, x8467; LSE-NEXT:    fmov x9, d2468; LSE-NEXT:    casal x10, x9, [x0]469; LSE-NEXT:    fmov d1, x10470; LSE-NEXT:    cmp x10, x8471; LSE-NEXT:    b.ne .LBB5_1472; LSE-NEXT:  // %bb.2: // %atomicrmw.end473; LSE-NEXT:    fmov d0, d1474; LSE-NEXT:    ret475;476; SOFTFP-NOLSE-LABEL: test_atomicrmw_fsub_f32_seq_cst_align8:477; SOFTFP-NOLSE:       // %bb.0:478; SOFTFP-NOLSE-NEXT:    stp x30, x21, [sp, #-32]! // 16-byte Folded Spill479; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #16] // 16-byte Folded Spill480; SOFTFP-NOLSE-NEXT:    mov x19, x0481; SOFTFP-NOLSE-NEXT:    ldr x0, [x0]482; SOFTFP-NOLSE-NEXT:    mov x20, x1483; SOFTFP-NOLSE-NEXT:  .LBB5_1: // %atomicrmw.start484; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1485; SOFTFP-NOLSE-NEXT:    // Child Loop BB5_2 Depth 2486; SOFTFP-NOLSE-NEXT:    mov x1, x20487; SOFTFP-NOLSE-NEXT:    mov x21, x0488; SOFTFP-NOLSE-NEXT:    bl __subdf3489; SOFTFP-NOLSE-NEXT:    mov x8, x0490; SOFTFP-NOLSE-NEXT:  .LBB5_2: // %cmpxchg.start491; SOFTFP-NOLSE-NEXT:    // Parent Loop BB5_1 Depth=1492; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2493; SOFTFP-NOLSE-NEXT:    ldaxr x0, [x19]494; SOFTFP-NOLSE-NEXT:    cmp x0, x21495; SOFTFP-NOLSE-NEXT:    b.ne .LBB5_5496; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore497; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB5_2 Depth=2498; SOFTFP-NOLSE-NEXT:    stlxr w9, x8, [x19]499; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB5_2500; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB5_1 Depth=1501; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1502; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB5_1503; SOFTFP-NOLSE-NEXT:    b .LBB5_6504; SOFTFP-NOLSE-NEXT:  .LBB5_5: // %cmpxchg.nostore505; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB5_1 Depth=1506; SOFTFP-NOLSE-NEXT:    mov w8, wzr507; SOFTFP-NOLSE-NEXT:    clrex508; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB5_1509; SOFTFP-NOLSE-NEXT:  .LBB5_6: // %atomicrmw.end510; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #16] // 16-byte Folded Reload511; SOFTFP-NOLSE-NEXT:    ldp x30, x21, [sp], #32 // 16-byte Folded Reload512; SOFTFP-NOLSE-NEXT:    ret513  %res = atomicrmw fsub ptr %ptr, double %value seq_cst, align 8514  ret double %res515}516 517define fp128 @test_atomicrmw_fsub_fp128_seq_cst_align16(ptr %ptr, fp128 %value) #0 {518; NOLSE-LABEL: test_atomicrmw_fsub_fp128_seq_cst_align16:519; NOLSE:       // %bb.0:520; NOLSE-NEXT:    sub sp, sp, #96521; NOLSE-NEXT:    ldr q1, [x0]522; NOLSE-NEXT:    stp x30, x19, [sp, #80] // 16-byte Folded Spill523; NOLSE-NEXT:    mov x19, x0524; NOLSE-NEXT:    str q0, [sp] // 16-byte Spill525; NOLSE-NEXT:    b .LBB6_2526; NOLSE-NEXT:  .LBB6_1: // %atomicrmw.start527; NOLSE-NEXT:    // in Loop: Header=BB6_2 Depth=1528; NOLSE-NEXT:    stp x12, x13, [sp, #32]529; NOLSE-NEXT:    cmp x13, x10530; NOLSE-NEXT:    ldr q1, [sp, #32]531; NOLSE-NEXT:    ccmp x12, x11, #0, eq532; NOLSE-NEXT:    b.eq .LBB6_6533; NOLSE-NEXT:  .LBB6_2: // %atomicrmw.start534; NOLSE-NEXT:    // =>This Loop Header: Depth=1535; NOLSE-NEXT:    // Child Loop BB6_3 Depth 2536; NOLSE-NEXT:    mov v0.16b, v1.16b537; NOLSE-NEXT:    str q1, [sp, #16] // 16-byte Spill538; NOLSE-NEXT:    ldr q1, [sp] // 16-byte Reload539; NOLSE-NEXT:    bl __subtf3540; NOLSE-NEXT:    str q0, [sp, #48]541; NOLSE-NEXT:    ldr q0, [sp, #16] // 16-byte Reload542; NOLSE-NEXT:    ldp x9, x8, [sp, #48]543; NOLSE-NEXT:    str q0, [sp, #64]544; NOLSE-NEXT:    ldp x11, x10, [sp, #64]545; NOLSE-NEXT:  .LBB6_3: // %atomicrmw.start546; NOLSE-NEXT:    // Parent Loop BB6_2 Depth=1547; NOLSE-NEXT:    // => This Inner Loop Header: Depth=2548; NOLSE-NEXT:    ldaxp x12, x13, [x19]549; NOLSE-NEXT:    cmp x12, x11550; NOLSE-NEXT:    cset w14, ne551; NOLSE-NEXT:    cmp x13, x10552; NOLSE-NEXT:    cinc w14, w14, ne553; NOLSE-NEXT:    cbz w14, .LBB6_5554; NOLSE-NEXT:  // %bb.4: // %atomicrmw.start555; NOLSE-NEXT:    // in Loop: Header=BB6_3 Depth=2556; NOLSE-NEXT:    stlxp w14, x12, x13, [x19]557; NOLSE-NEXT:    cbnz w14, .LBB6_3558; NOLSE-NEXT:    b .LBB6_1559; NOLSE-NEXT:  .LBB6_5: // %atomicrmw.start560; NOLSE-NEXT:    // in Loop: Header=BB6_3 Depth=2561; NOLSE-NEXT:    stlxp w14, x9, x8, [x19]562; NOLSE-NEXT:    cbnz w14, .LBB6_3563; NOLSE-NEXT:    b .LBB6_1564; NOLSE-NEXT:  .LBB6_6: // %atomicrmw.end565; NOLSE-NEXT:    ldp x30, x19, [sp, #80] // 16-byte Folded Reload566; NOLSE-NEXT:    mov v0.16b, v1.16b567; NOLSE-NEXT:    add sp, sp, #96568; NOLSE-NEXT:    ret569;570; LSE-LABEL: test_atomicrmw_fsub_fp128_seq_cst_align16:571; LSE:       // %bb.0:572; LSE-NEXT:    sub sp, sp, #96573; LSE-NEXT:    ldr q1, [x0]574; LSE-NEXT:    stp x30, x19, [sp, #80] // 16-byte Folded Spill575; LSE-NEXT:    mov x19, x0576; LSE-NEXT:    str q0, [sp] // 16-byte Spill577; LSE-NEXT:  .LBB6_1: // %atomicrmw.start578; LSE-NEXT:    // =>This Inner Loop Header: Depth=1579; LSE-NEXT:    mov v0.16b, v1.16b580; LSE-NEXT:    str q1, [sp, #16] // 16-byte Spill581; LSE-NEXT:    ldr q1, [sp] // 16-byte Reload582; LSE-NEXT:    bl __subtf3583; LSE-NEXT:    str q0, [sp, #48]584; LSE-NEXT:    ldr q0, [sp, #16] // 16-byte Reload585; LSE-NEXT:    ldp x0, x1, [sp, #48]586; LSE-NEXT:    str q0, [sp, #64]587; LSE-NEXT:    ldp x2, x3, [sp, #64]588; LSE-NEXT:    mov x4, x2589; LSE-NEXT:    mov x5, x3590; LSE-NEXT:    caspal x4, x5, x0, x1, [x19]591; LSE-NEXT:    stp x4, x5, [sp, #32]592; LSE-NEXT:    cmp x5, x3593; LSE-NEXT:    ldr q1, [sp, #32]594; LSE-NEXT:    ccmp x4, x2, #0, eq595; LSE-NEXT:    b.ne .LBB6_1596; LSE-NEXT:  // %bb.2: // %atomicrmw.end597; LSE-NEXT:    ldp x30, x19, [sp, #80] // 16-byte Folded Reload598; LSE-NEXT:    mov v0.16b, v1.16b599; LSE-NEXT:    add sp, sp, #96600; LSE-NEXT:    ret601;602; SOFTFP-NOLSE-LABEL: test_atomicrmw_fsub_fp128_seq_cst_align16:603; SOFTFP-NOLSE:       // %bb.0:604; SOFTFP-NOLSE-NEXT:    stp x30, x23, [sp, #-48]! // 16-byte Folded Spill605; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #32] // 16-byte Folded Spill606; SOFTFP-NOLSE-NEXT:    mov x20, x0607; SOFTFP-NOLSE-NEXT:    mov x19, x3608; SOFTFP-NOLSE-NEXT:    ldp x0, x1, [x0]609; SOFTFP-NOLSE-NEXT:    stp x22, x21, [sp, #16] // 16-byte Folded Spill610; SOFTFP-NOLSE-NEXT:    mov x21, x2611; SOFTFP-NOLSE-NEXT:    b .LBB6_2612; SOFTFP-NOLSE-NEXT:  .LBB6_1: // %atomicrmw.start613; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB6_2 Depth=1614; SOFTFP-NOLSE-NEXT:    cmp x1, x22615; SOFTFP-NOLSE-NEXT:    ccmp x0, x23, #0, eq616; SOFTFP-NOLSE-NEXT:    b.eq .LBB6_6617; SOFTFP-NOLSE-NEXT:  .LBB6_2: // %atomicrmw.start618; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1619; SOFTFP-NOLSE-NEXT:    // Child Loop BB6_3 Depth 2620; SOFTFP-NOLSE-NEXT:    mov x2, x21621; SOFTFP-NOLSE-NEXT:    mov x3, x19622; SOFTFP-NOLSE-NEXT:    mov x22, x1623; SOFTFP-NOLSE-NEXT:    mov x23, x0624; SOFTFP-NOLSE-NEXT:    bl __subtf3625; SOFTFP-NOLSE-NEXT:    mov x8, x0626; SOFTFP-NOLSE-NEXT:    mov x9, x1627; SOFTFP-NOLSE-NEXT:  .LBB6_3: // %atomicrmw.start628; SOFTFP-NOLSE-NEXT:    // Parent Loop BB6_2 Depth=1629; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2630; SOFTFP-NOLSE-NEXT:    ldaxp x0, x1, [x20]631; SOFTFP-NOLSE-NEXT:    cmp x0, x23632; SOFTFP-NOLSE-NEXT:    cset w10, ne633; SOFTFP-NOLSE-NEXT:    cmp x1, x22634; SOFTFP-NOLSE-NEXT:    cinc w10, w10, ne635; SOFTFP-NOLSE-NEXT:    cbz w10, .LBB6_5636; SOFTFP-NOLSE-NEXT:  // %bb.4: // %atomicrmw.start637; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB6_3 Depth=2638; SOFTFP-NOLSE-NEXT:    stlxp w10, x0, x1, [x20]639; SOFTFP-NOLSE-NEXT:    cbnz w10, .LBB6_3640; SOFTFP-NOLSE-NEXT:    b .LBB6_1641; SOFTFP-NOLSE-NEXT:  .LBB6_5: // %atomicrmw.start642; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB6_3 Depth=2643; SOFTFP-NOLSE-NEXT:    stlxp w10, x8, x9, [x20]644; SOFTFP-NOLSE-NEXT:    cbnz w10, .LBB6_3645; SOFTFP-NOLSE-NEXT:    b .LBB6_1646; SOFTFP-NOLSE-NEXT:  .LBB6_6: // %atomicrmw.end647; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #32] // 16-byte Folded Reload648; SOFTFP-NOLSE-NEXT:    ldp x22, x21, [sp, #16] // 16-byte Folded Reload649; SOFTFP-NOLSE-NEXT:    ldp x30, x23, [sp], #48 // 16-byte Folded Reload650; SOFTFP-NOLSE-NEXT:    ret651  %res = atomicrmw fsub ptr %ptr, fp128 %value seq_cst, align 16652  ret fp128 %res653}654 655define <2 x half> @test_atomicrmw_fsub_v2f16_seq_cst_align4(ptr %ptr, <2 x half> %value) #0 {656; NOLSE-LABEL: test_atomicrmw_fsub_v2f16_seq_cst_align4:657; NOLSE:       // %bb.0:658; NOLSE-NEXT:    fcvtl v0.4s, v0.4h659; NOLSE-NEXT:  .LBB7_1: // %atomicrmw.start660; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1661; NOLSE-NEXT:    ldaxr w8, [x0]662; NOLSE-NEXT:    fmov s1, w8663; NOLSE-NEXT:    fcvtl v1.4s, v1.4h664; NOLSE-NEXT:    fsub v1.4s, v1.4s, v0.4s665; NOLSE-NEXT:    fcvtn v1.4h, v1.4s666; NOLSE-NEXT:    fmov w9, s1667; NOLSE-NEXT:    stlxr w10, w9, [x0]668; NOLSE-NEXT:    cbnz w10, .LBB7_1669; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end670; NOLSE-NEXT:    fmov d0, x8671; NOLSE-NEXT:    ret672;673; LSE-LABEL: test_atomicrmw_fsub_v2f16_seq_cst_align4:674; LSE:       // %bb.0:675; LSE-NEXT:    fcvtl v1.4s, v0.4h676; LSE-NEXT:    ldr s0, [x0]677; LSE-NEXT:  .LBB7_1: // %atomicrmw.start678; LSE-NEXT:    // =>This Inner Loop Header: Depth=1679; LSE-NEXT:    fcvtl v2.4s, v0.4h680; LSE-NEXT:    fmov w8, s0681; LSE-NEXT:    mov w10, w8682; LSE-NEXT:    fsub v2.4s, v2.4s, v1.4s683; LSE-NEXT:    fcvtn v2.4h, v2.4s684; LSE-NEXT:    fmov w9, s2685; LSE-NEXT:    casal w10, w9, [x0]686; LSE-NEXT:    fmov s0, w10687; LSE-NEXT:    cmp w10, w8688; LSE-NEXT:    b.ne .LBB7_1689; LSE-NEXT:  // %bb.2: // %atomicrmw.end690; LSE-NEXT:    // kill: def $d0 killed $d0 killed $q0691; LSE-NEXT:    ret692;693; SOFTFP-NOLSE-LABEL: test_atomicrmw_fsub_v2f16_seq_cst_align4:694; SOFTFP-NOLSE:       // %bb.0:695; SOFTFP-NOLSE-NEXT:    stp x30, x25, [sp, #-64]! // 16-byte Folded Spill696; SOFTFP-NOLSE-NEXT:    stp x24, x23, [sp, #16] // 16-byte Folded Spill697; SOFTFP-NOLSE-NEXT:    ldrh w23, [x0, #2]698; SOFTFP-NOLSE-NEXT:    stp x22, x21, [sp, #32] // 16-byte Folded Spill699; SOFTFP-NOLSE-NEXT:    ldrh w22, [x0]700; SOFTFP-NOLSE-NEXT:    mov w21, w1701; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill702; SOFTFP-NOLSE-NEXT:    mov w19, w2703; SOFTFP-NOLSE-NEXT:    mov x20, x0704; SOFTFP-NOLSE-NEXT:  .LBB7_1: // %atomicrmw.start705; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1706; SOFTFP-NOLSE-NEXT:    // Child Loop BB7_2 Depth 2707; SOFTFP-NOLSE-NEXT:    and w0, w19, #0xffff708; SOFTFP-NOLSE-NEXT:    bl __extendhfsf2709; SOFTFP-NOLSE-NEXT:    mov w24, w0710; SOFTFP-NOLSE-NEXT:    and w0, w23, #0xffff711; SOFTFP-NOLSE-NEXT:    bl __extendhfsf2712; SOFTFP-NOLSE-NEXT:    mov w1, w24713; SOFTFP-NOLSE-NEXT:    bl __subsf3714; SOFTFP-NOLSE-NEXT:    bl __truncsfhf2715; SOFTFP-NOLSE-NEXT:    mov w24, w0716; SOFTFP-NOLSE-NEXT:    and w0, w21, #0xffff717; SOFTFP-NOLSE-NEXT:    bl __extendhfsf2718; SOFTFP-NOLSE-NEXT:    mov w25, w0719; SOFTFP-NOLSE-NEXT:    and w0, w22, #0xffff720; SOFTFP-NOLSE-NEXT:    bl __extendhfsf2721; SOFTFP-NOLSE-NEXT:    mov w1, w25722; SOFTFP-NOLSE-NEXT:    bl __subsf3723; SOFTFP-NOLSE-NEXT:    bl __truncsfhf2724; SOFTFP-NOLSE-NEXT:    mov w8, w22725; SOFTFP-NOLSE-NEXT:    bfi w0, w24, #16, #16726; SOFTFP-NOLSE-NEXT:    bfi w8, w23, #16, #16727; SOFTFP-NOLSE-NEXT:  .LBB7_2: // %cmpxchg.start728; SOFTFP-NOLSE-NEXT:    // Parent Loop BB7_1 Depth=1729; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2730; SOFTFP-NOLSE-NEXT:    ldaxr w22, [x20]731; SOFTFP-NOLSE-NEXT:    cmp w22, w8732; SOFTFP-NOLSE-NEXT:    b.ne .LBB7_5733; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore734; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB7_2 Depth=2735; SOFTFP-NOLSE-NEXT:    stlxr w9, w0, [x20]736; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB7_2737; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB7_1 Depth=1738; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1739; SOFTFP-NOLSE-NEXT:    lsr w23, w22, #16740; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB7_1741; SOFTFP-NOLSE-NEXT:    b .LBB7_6742; SOFTFP-NOLSE-NEXT:  .LBB7_5: // %cmpxchg.nostore743; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB7_1 Depth=1744; SOFTFP-NOLSE-NEXT:    mov w8, wzr745; SOFTFP-NOLSE-NEXT:    clrex746; SOFTFP-NOLSE-NEXT:    lsr w23, w22, #16747; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB7_1748; SOFTFP-NOLSE-NEXT:  .LBB7_6: // %atomicrmw.end749; SOFTFP-NOLSE-NEXT:    mov w0, w22750; SOFTFP-NOLSE-NEXT:    mov w1, w23751; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload752; SOFTFP-NOLSE-NEXT:    ldp x22, x21, [sp, #32] // 16-byte Folded Reload753; SOFTFP-NOLSE-NEXT:    ldp x24, x23, [sp, #16] // 16-byte Folded Reload754; SOFTFP-NOLSE-NEXT:    ldp x30, x25, [sp], #64 // 16-byte Folded Reload755; SOFTFP-NOLSE-NEXT:    ret756  %res = atomicrmw fsub ptr %ptr, <2 x half> %value seq_cst, align 4757  ret <2 x half> %res758}759 760define <2 x bfloat> @test_atomicrmw_fsub_v2bf16_seq_cst_align4(ptr %ptr, <2 x bfloat> %value) #0 {761; NOLSE-LABEL: test_atomicrmw_fsub_v2bf16_seq_cst_align4:762; NOLSE:       // %bb.0:763; NOLSE-NEXT:    movi v1.4s, #1764; NOLSE-NEXT:    movi v2.4s, #127, msl #8765; NOLSE-NEXT:    shll v0.4s, v0.4h, #16766; NOLSE-NEXT:  .LBB8_1: // %atomicrmw.start767; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1768; NOLSE-NEXT:    ldaxr w8, [x0]769; NOLSE-NEXT:    fmov s3, w8770; NOLSE-NEXT:    shll v3.4s, v3.4h, #16771; NOLSE-NEXT:    fsub v3.4s, v3.4s, v0.4s772; NOLSE-NEXT:    ushr v4.4s, v3.4s, #16773; NOLSE-NEXT:    and v4.16b, v4.16b, v1.16b774; NOLSE-NEXT:    add v3.4s, v4.4s, v3.4s775; NOLSE-NEXT:    addhn v3.4h, v3.4s, v2.4s776; NOLSE-NEXT:    fmov w9, s3777; NOLSE-NEXT:    stlxr w10, w9, [x0]778; NOLSE-NEXT:    cbnz w10, .LBB8_1779; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end780; NOLSE-NEXT:    fmov d0, x8781; NOLSE-NEXT:    ret782;783; LSE-LABEL: test_atomicrmw_fsub_v2bf16_seq_cst_align4:784; LSE:       // %bb.0:785; LSE-NEXT:    movi v1.4s, #1786; LSE-NEXT:    movi v2.4s, #127, msl #8787; LSE-NEXT:    shll v3.4s, v0.4h, #16788; LSE-NEXT:    ldr s0, [x0]789; LSE-NEXT:  .LBB8_1: // %atomicrmw.start790; LSE-NEXT:    // =>This Inner Loop Header: Depth=1791; LSE-NEXT:    shll v4.4s, v0.4h, #16792; LSE-NEXT:    fmov w8, s0793; LSE-NEXT:    fsub v4.4s, v4.4s, v3.4s794; LSE-NEXT:    mov w10, w8795; LSE-NEXT:    ushr v5.4s, v4.4s, #16796; LSE-NEXT:    and v5.16b, v5.16b, v1.16b797; LSE-NEXT:    add v4.4s, v5.4s, v4.4s798; LSE-NEXT:    addhn v4.4h, v4.4s, v2.4s799; LSE-NEXT:    fmov w9, s4800; LSE-NEXT:    casal w10, w9, [x0]801; LSE-NEXT:    fmov s0, w10802; LSE-NEXT:    cmp w10, w8803; LSE-NEXT:    b.ne .LBB8_1804; LSE-NEXT:  // %bb.2: // %atomicrmw.end805; LSE-NEXT:    // kill: def $d0 killed $d0 killed $q0806; LSE-NEXT:    ret807;808; SOFTFP-NOLSE-LABEL: test_atomicrmw_fsub_v2bf16_seq_cst_align4:809; SOFTFP-NOLSE:       // %bb.0:810; SOFTFP-NOLSE-NEXT:    str x30, [sp, #-64]! // 8-byte Folded Spill811; SOFTFP-NOLSE-NEXT:    mov w8, w1812; SOFTFP-NOLSE-NEXT:    stp x22, x21, [sp, #32] // 16-byte Folded Spill813; SOFTFP-NOLSE-NEXT:    ldrh w1, [x0, #2]814; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill815; SOFTFP-NOLSE-NEXT:    ldrh w22, [x0]816; SOFTFP-NOLSE-NEXT:    lsl w20, w2, #16817; SOFTFP-NOLSE-NEXT:    lsl w21, w8, #16818; SOFTFP-NOLSE-NEXT:    mov x19, x0819; SOFTFP-NOLSE-NEXT:    stp x24, x23, [sp, #16] // 16-byte Folded Spill820; SOFTFP-NOLSE-NEXT:  .LBB8_1: // %atomicrmw.start821; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1822; SOFTFP-NOLSE-NEXT:    // Child Loop BB8_2 Depth 2823; SOFTFP-NOLSE-NEXT:    lsl w23, w1, #16824; SOFTFP-NOLSE-NEXT:    mov w1, w20825; SOFTFP-NOLSE-NEXT:    mov w0, w23826; SOFTFP-NOLSE-NEXT:    bl __subsf3827; SOFTFP-NOLSE-NEXT:    bl __truncsfbf2828; SOFTFP-NOLSE-NEXT:    mov w24, w0829; SOFTFP-NOLSE-NEXT:    lsl w0, w22, #16830; SOFTFP-NOLSE-NEXT:    mov w1, w21831; SOFTFP-NOLSE-NEXT:    bl __subsf3832; SOFTFP-NOLSE-NEXT:    bl __truncsfbf2833; SOFTFP-NOLSE-NEXT:    bfxil w23, w22, #0, #16834; SOFTFP-NOLSE-NEXT:    bfi w0, w24, #16, #16835; SOFTFP-NOLSE-NEXT:  .LBB8_2: // %cmpxchg.start836; SOFTFP-NOLSE-NEXT:    // Parent Loop BB8_1 Depth=1837; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2838; SOFTFP-NOLSE-NEXT:    ldaxr w22, [x19]839; SOFTFP-NOLSE-NEXT:    cmp w22, w23840; SOFTFP-NOLSE-NEXT:    b.ne .LBB8_5841; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore842; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB8_2 Depth=2843; SOFTFP-NOLSE-NEXT:    stlxr w8, w0, [x19]844; SOFTFP-NOLSE-NEXT:    cbnz w8, .LBB8_2845; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB8_1 Depth=1846; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1847; SOFTFP-NOLSE-NEXT:    lsr w1, w22, #16848; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB8_1849; SOFTFP-NOLSE-NEXT:    b .LBB8_6850; SOFTFP-NOLSE-NEXT:  .LBB8_5: // %cmpxchg.nostore851; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB8_1 Depth=1852; SOFTFP-NOLSE-NEXT:    mov w8, wzr853; SOFTFP-NOLSE-NEXT:    clrex854; SOFTFP-NOLSE-NEXT:    lsr w1, w22, #16855; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB8_1856; SOFTFP-NOLSE-NEXT:  .LBB8_6: // %atomicrmw.end857; SOFTFP-NOLSE-NEXT:    mov w0, w22858; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload859; SOFTFP-NOLSE-NEXT:    ldp x22, x21, [sp, #32] // 16-byte Folded Reload860; SOFTFP-NOLSE-NEXT:    ldp x24, x23, [sp, #16] // 16-byte Folded Reload861; SOFTFP-NOLSE-NEXT:    ldr x30, [sp], #64 // 8-byte Folded Reload862; SOFTFP-NOLSE-NEXT:    ret863  %res = atomicrmw fsub ptr %ptr, <2 x bfloat> %value seq_cst, align 4864  ret <2 x bfloat> %res865}866 867define <2 x float> @test_atomicrmw_fsub_v2f32_seq_cst_align8(ptr %ptr, <2 x float> %value) #0 {868; NOLSE-LABEL: test_atomicrmw_fsub_v2f32_seq_cst_align8:869; NOLSE:       // %bb.0:870; NOLSE-NEXT:  .LBB9_1: // %atomicrmw.start871; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1872; NOLSE-NEXT:    ldaxr x8, [x0]873; NOLSE-NEXT:    fmov d1, x8874; NOLSE-NEXT:    fsub v2.2s, v1.2s, v0.2s875; NOLSE-NEXT:    fmov x8, d2876; NOLSE-NEXT:    stlxr w9, x8, [x0]877; NOLSE-NEXT:    cbnz w9, .LBB9_1878; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end879; NOLSE-NEXT:    fmov d0, d1880; NOLSE-NEXT:    ret881;882; LSE-LABEL: test_atomicrmw_fsub_v2f32_seq_cst_align8:883; LSE:       // %bb.0:884; LSE-NEXT:    ldr d1, [x0]885; LSE-NEXT:  .LBB9_1: // %atomicrmw.start886; LSE-NEXT:    // =>This Inner Loop Header: Depth=1887; LSE-NEXT:    fsub v2.2s, v1.2s, v0.2s888; LSE-NEXT:    fmov x8, d1889; LSE-NEXT:    mov x10, x8890; LSE-NEXT:    fmov x9, d2891; LSE-NEXT:    casal x10, x9, [x0]892; LSE-NEXT:    fmov d1, x10893; LSE-NEXT:    cmp x10, x8894; LSE-NEXT:    b.ne .LBB9_1895; LSE-NEXT:  // %bb.2: // %atomicrmw.end896; LSE-NEXT:    fmov d0, d1897; LSE-NEXT:    ret898;899; SOFTFP-NOLSE-LABEL: test_atomicrmw_fsub_v2f32_seq_cst_align8:900; SOFTFP-NOLSE:       // %bb.0:901; SOFTFP-NOLSE-NEXT:    str x30, [sp, #-64]! // 8-byte Folded Spill902; SOFTFP-NOLSE-NEXT:    stp x24, x23, [sp, #16] // 16-byte Folded Spill903; SOFTFP-NOLSE-NEXT:    stp x22, x21, [sp, #32] // 16-byte Folded Spill904; SOFTFP-NOLSE-NEXT:    mov w21, w1905; SOFTFP-NOLSE-NEXT:    ldp w22, w23, [x0]906; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill907; SOFTFP-NOLSE-NEXT:    mov w19, w2908; SOFTFP-NOLSE-NEXT:    mov x20, x0909; SOFTFP-NOLSE-NEXT:  .LBB9_1: // %atomicrmw.start910; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1911; SOFTFP-NOLSE-NEXT:    // Child Loop BB9_2 Depth 2912; SOFTFP-NOLSE-NEXT:    mov w0, w23913; SOFTFP-NOLSE-NEXT:    mov w1, w19914; SOFTFP-NOLSE-NEXT:    bl __subsf3915; SOFTFP-NOLSE-NEXT:    mov w24, w0916; SOFTFP-NOLSE-NEXT:    mov w0, w22917; SOFTFP-NOLSE-NEXT:    mov w1, w21918; SOFTFP-NOLSE-NEXT:    bl __subsf3919; SOFTFP-NOLSE-NEXT:    mov w8, w0920; SOFTFP-NOLSE-NEXT:    mov w9, w22921; SOFTFP-NOLSE-NEXT:    // kill: def $w23 killed $w23 killed $x23 def $x23922; SOFTFP-NOLSE-NEXT:    orr x8, x8, x24, lsl #32923; SOFTFP-NOLSE-NEXT:    orr x9, x9, x23, lsl #32924; SOFTFP-NOLSE-NEXT:  .LBB9_2: // %cmpxchg.start925; SOFTFP-NOLSE-NEXT:    // Parent Loop BB9_1 Depth=1926; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2927; SOFTFP-NOLSE-NEXT:    ldaxr x22, [x20]928; SOFTFP-NOLSE-NEXT:    cmp x22, x9929; SOFTFP-NOLSE-NEXT:    b.ne .LBB9_5930; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore931; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB9_2 Depth=2932; SOFTFP-NOLSE-NEXT:    stlxr w10, x8, [x20]933; SOFTFP-NOLSE-NEXT:    cbnz w10, .LBB9_2934; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB9_1 Depth=1935; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1936; SOFTFP-NOLSE-NEXT:    lsr x23, x22, #32937; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB9_1938; SOFTFP-NOLSE-NEXT:    b .LBB9_6939; SOFTFP-NOLSE-NEXT:  .LBB9_5: // %cmpxchg.nostore940; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB9_1 Depth=1941; SOFTFP-NOLSE-NEXT:    mov w8, wzr942; SOFTFP-NOLSE-NEXT:    clrex943; SOFTFP-NOLSE-NEXT:    lsr x23, x22, #32944; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB9_1945; SOFTFP-NOLSE-NEXT:  .LBB9_6: // %atomicrmw.end946; SOFTFP-NOLSE-NEXT:    mov w0, w22947; SOFTFP-NOLSE-NEXT:    mov w1, w23948; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload949; SOFTFP-NOLSE-NEXT:    ldp x22, x21, [sp, #32] // 16-byte Folded Reload950; SOFTFP-NOLSE-NEXT:    ldp x24, x23, [sp, #16] // 16-byte Folded Reload951; SOFTFP-NOLSE-NEXT:    ldr x30, [sp], #64 // 8-byte Folded Reload952; SOFTFP-NOLSE-NEXT:    ret953  %res = atomicrmw fsub ptr %ptr, <2 x float> %value seq_cst, align 8954  ret <2 x float> %res955}956 957define <2 x double> @test_atomicrmw_fsub_v2f64_seq_cst_align8(ptr %ptr, <2 x double> %value) #0 {958; NOLSE-LABEL: test_atomicrmw_fsub_v2f64_seq_cst_align8:959; NOLSE:       // %bb.0:960; NOLSE-NEXT:  .LBB10_1: // %atomicrmw.start961; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1962; NOLSE-NEXT:    ldaxp x8, x9, [x0]963; NOLSE-NEXT:    fmov d1, x8964; NOLSE-NEXT:    mov v1.d[1], x9965; NOLSE-NEXT:    fsub v2.2d, v1.2d, v0.2d966; NOLSE-NEXT:    mov x8, v2.d[1]967; NOLSE-NEXT:    fmov x9, d2968; NOLSE-NEXT:    stlxp w10, x9, x8, [x0]969; NOLSE-NEXT:    cbnz w10, .LBB10_1970; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end971; NOLSE-NEXT:    mov v0.16b, v1.16b972; NOLSE-NEXT:    ret973;974; LSE-LABEL: test_atomicrmw_fsub_v2f64_seq_cst_align8:975; LSE:       // %bb.0:976; LSE-NEXT:    ldr q1, [x0]977; LSE-NEXT:  .LBB10_1: // %atomicrmw.start978; LSE-NEXT:    // =>This Inner Loop Header: Depth=1979; LSE-NEXT:    fsub v2.2d, v1.2d, v0.2d980; LSE-NEXT:    mov x3, v1.d[1]981; LSE-NEXT:    fmov x2, d1982; LSE-NEXT:    mov x7, x3983; LSE-NEXT:    mov x5, v2.d[1]984; LSE-NEXT:    mov x6, x2985; LSE-NEXT:    fmov x4, d2986; LSE-NEXT:    caspal x6, x7, x4, x5, [x0]987; LSE-NEXT:    fmov d1, x6988; LSE-NEXT:    cmp x7, x3989; LSE-NEXT:    ccmp x6, x2, #0, eq990; LSE-NEXT:    mov v1.d[1], x7991; LSE-NEXT:    b.ne .LBB10_1992; LSE-NEXT:  // %bb.2: // %atomicrmw.end993; LSE-NEXT:    mov v0.16b, v1.16b994; LSE-NEXT:    ret995;996; SOFTFP-NOLSE-LABEL: test_atomicrmw_fsub_v2f64_seq_cst_align8:997; SOFTFP-NOLSE:       // %bb.0:998; SOFTFP-NOLSE-NEXT:    str x30, [sp, #-64]! // 8-byte Folded Spill999; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill1000; SOFTFP-NOLSE-NEXT:    mov x20, x01001; SOFTFP-NOLSE-NEXT:    mov x19, x31002; SOFTFP-NOLSE-NEXT:    ldp x0, x1, [x0]1003; SOFTFP-NOLSE-NEXT:    stp x22, x21, [sp, #32] // 16-byte Folded Spill1004; SOFTFP-NOLSE-NEXT:    mov x21, x21005; SOFTFP-NOLSE-NEXT:    stp x24, x23, [sp, #16] // 16-byte Folded Spill1006; SOFTFP-NOLSE-NEXT:    b .LBB10_21007; SOFTFP-NOLSE-NEXT:  .LBB10_1: // %atomicrmw.start1008; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB10_2 Depth=11009; SOFTFP-NOLSE-NEXT:    cmp x1, x221010; SOFTFP-NOLSE-NEXT:    ccmp x0, x23, #0, eq1011; SOFTFP-NOLSE-NEXT:    b.eq .LBB10_61012; SOFTFP-NOLSE-NEXT:  .LBB10_2: // %atomicrmw.start1013; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=11014; SOFTFP-NOLSE-NEXT:    // Child Loop BB10_3 Depth 21015; SOFTFP-NOLSE-NEXT:    mov x22, x11016; SOFTFP-NOLSE-NEXT:    mov x23, x01017; SOFTFP-NOLSE-NEXT:    mov x0, x11018; SOFTFP-NOLSE-NEXT:    mov x1, x191019; SOFTFP-NOLSE-NEXT:    bl __subdf31020; SOFTFP-NOLSE-NEXT:    mov x24, x01021; SOFTFP-NOLSE-NEXT:    mov x0, x231022; SOFTFP-NOLSE-NEXT:    mov x1, x211023; SOFTFP-NOLSE-NEXT:    bl __subdf31024; SOFTFP-NOLSE-NEXT:    mov x8, x01025; SOFTFP-NOLSE-NEXT:  .LBB10_3: // %atomicrmw.start1026; SOFTFP-NOLSE-NEXT:    // Parent Loop BB10_2 Depth=11027; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=21028; SOFTFP-NOLSE-NEXT:    ldaxp x0, x1, [x20]1029; SOFTFP-NOLSE-NEXT:    cmp x0, x231030; SOFTFP-NOLSE-NEXT:    cset w9, ne1031; SOFTFP-NOLSE-NEXT:    cmp x1, x221032; SOFTFP-NOLSE-NEXT:    cinc w9, w9, ne1033; SOFTFP-NOLSE-NEXT:    cbz w9, .LBB10_51034; SOFTFP-NOLSE-NEXT:  // %bb.4: // %atomicrmw.start1035; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB10_3 Depth=21036; SOFTFP-NOLSE-NEXT:    stlxp w9, x0, x1, [x20]1037; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB10_31038; SOFTFP-NOLSE-NEXT:    b .LBB10_11039; SOFTFP-NOLSE-NEXT:  .LBB10_5: // %atomicrmw.start1040; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB10_3 Depth=21041; SOFTFP-NOLSE-NEXT:    stlxp w9, x8, x24, [x20]1042; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB10_31043; SOFTFP-NOLSE-NEXT:    b .LBB10_11044; SOFTFP-NOLSE-NEXT:  .LBB10_6: // %atomicrmw.end1045; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload1046; SOFTFP-NOLSE-NEXT:    ldp x22, x21, [sp, #32] // 16-byte Folded Reload1047; SOFTFP-NOLSE-NEXT:    ldp x24, x23, [sp, #16] // 16-byte Folded Reload1048; SOFTFP-NOLSE-NEXT:    ldr x30, [sp], #64 // 8-byte Folded Reload1049; SOFTFP-NOLSE-NEXT:    ret1050  %res = atomicrmw fsub ptr %ptr, <2 x double> %value seq_cst, align 161051  ret <2 x double> %res1052}1053 1054attributes #0 = { nounwind }1055