brintos

brintos / llvm-project-archived public Read only

0
0
Text · 38.1 KiB · 16825c9 Raw
963 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 6; FIXME: Restore test of fp128 case7 8define half @test_atomicrmw_fmax_f16_seq_cst_align2(ptr %ptr, half %value) #0 {9; NOLSE-LABEL: test_atomicrmw_fmax_f16_seq_cst_align2:10; NOLSE:       // %bb.0:11; NOLSE-NEXT:    fcvt s1, h012; NOLSE-NEXT:  .LBB0_1: // %atomicrmw.start13; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=114; NOLSE-NEXT:    ldaxrh w8, [x0]15; NOLSE-NEXT:    fmov s0, w816; NOLSE-NEXT:    fcvt s2, h017; NOLSE-NEXT:    fmaxnm s2, s2, s118; NOLSE-NEXT:    fcvt h2, s219; NOLSE-NEXT:    fmov w8, s220; NOLSE-NEXT:    stlxrh w9, w8, [x0]21; NOLSE-NEXT:    cbnz w9, .LBB0_122; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end23; NOLSE-NEXT:    // kill: def $h0 killed $h0 killed $s024; NOLSE-NEXT:    ret25;26; LSE-LABEL: test_atomicrmw_fmax_f16_seq_cst_align2:27; LSE:       // %bb.0:28; LSE-NEXT:    fcvt s1, h029; LSE-NEXT:    ldr h0, [x0]30; LSE-NEXT:  .LBB0_1: // %atomicrmw.start31; LSE-NEXT:    // =>This Inner Loop Header: Depth=132; LSE-NEXT:    fcvt s2, h033; LSE-NEXT:    fmov w8, s034; LSE-NEXT:    mov w10, w835; LSE-NEXT:    fmaxnm s2, s2, s136; LSE-NEXT:    fcvt h2, s237; LSE-NEXT:    fmov w9, s238; LSE-NEXT:    casalh w10, w9, [x0]39; LSE-NEXT:    fmov s0, w1040; LSE-NEXT:    cmp w10, w8, uxth41; LSE-NEXT:    b.ne .LBB0_142; LSE-NEXT:  // %bb.2: // %atomicrmw.end43; LSE-NEXT:    // kill: def $h0 killed $h0 killed $s044; LSE-NEXT:    ret45;46; SOFTFP-NOLSE-LABEL: test_atomicrmw_fmax_f16_seq_cst_align2:47; SOFTFP-NOLSE:       // %bb.0:48; SOFTFP-NOLSE-NEXT:    str x30, [sp, #-48]! // 8-byte Folded Spill49; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #32] // 16-byte Folded Spill50; SOFTFP-NOLSE-NEXT:    mov x19, x051; SOFTFP-NOLSE-NEXT:    ldrh w0, [x0]52; SOFTFP-NOLSE-NEXT:    mov w20, w153; SOFTFP-NOLSE-NEXT:    stp x22, x21, [sp, #16] // 16-byte Folded Spill54; SOFTFP-NOLSE-NEXT:  .LBB0_1: // %atomicrmw.start55; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=156; SOFTFP-NOLSE-NEXT:    // Child Loop BB0_2 Depth 257; SOFTFP-NOLSE-NEXT:    mov w22, w058; SOFTFP-NOLSE-NEXT:    and w0, w20, #0xffff59; SOFTFP-NOLSE-NEXT:    bl __extendhfsf260; SOFTFP-NOLSE-NEXT:    mov w21, w061; SOFTFP-NOLSE-NEXT:    and w0, w22, #0xffff62; SOFTFP-NOLSE-NEXT:    bl __extendhfsf263; SOFTFP-NOLSE-NEXT:    mov w1, w2164; SOFTFP-NOLSE-NEXT:    bl fmaxf65; SOFTFP-NOLSE-NEXT:    bl __truncsfhf266; SOFTFP-NOLSE-NEXT:    mov w8, w067; SOFTFP-NOLSE-NEXT:  .LBB0_2: // %cmpxchg.start68; SOFTFP-NOLSE-NEXT:    // Parent Loop BB0_1 Depth=169; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=270; SOFTFP-NOLSE-NEXT:    ldaxrh w0, [x19]71; SOFTFP-NOLSE-NEXT:    cmp w0, w22, uxth72; SOFTFP-NOLSE-NEXT:    b.ne .LBB0_573; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore74; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB0_2 Depth=275; SOFTFP-NOLSE-NEXT:    stlxrh w9, w8, [x19]76; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB0_277; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB0_1 Depth=178; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x179; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB0_180; SOFTFP-NOLSE-NEXT:    b .LBB0_681; SOFTFP-NOLSE-NEXT:  .LBB0_5: // %cmpxchg.nostore82; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB0_1 Depth=183; SOFTFP-NOLSE-NEXT:    mov w8, wzr84; SOFTFP-NOLSE-NEXT:    clrex85; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB0_186; SOFTFP-NOLSE-NEXT:  .LBB0_6: // %atomicrmw.end87; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #32] // 16-byte Folded Reload88; SOFTFP-NOLSE-NEXT:    // kill: def $w0 killed $w0 killed $x089; SOFTFP-NOLSE-NEXT:    ldp x22, x21, [sp, #16] // 16-byte Folded Reload90; SOFTFP-NOLSE-NEXT:    ldr x30, [sp], #48 // 8-byte Folded Reload91; SOFTFP-NOLSE-NEXT:    ret92  %res = atomicrmw fmax ptr %ptr, half %value seq_cst, align 293  ret half %res94}95 96define half @test_atomicrmw_fmax_f16_seq_cst_align4(ptr %ptr, half %value) #0 {97; NOLSE-LABEL: test_atomicrmw_fmax_f16_seq_cst_align4:98; NOLSE:       // %bb.0:99; NOLSE-NEXT:    fcvt s1, h0100; NOLSE-NEXT:  .LBB1_1: // %atomicrmw.start101; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1102; NOLSE-NEXT:    ldaxrh w8, [x0]103; NOLSE-NEXT:    fmov s0, w8104; NOLSE-NEXT:    fcvt s2, h0105; NOLSE-NEXT:    fmaxnm s2, s2, s1106; NOLSE-NEXT:    fcvt h2, s2107; NOLSE-NEXT:    fmov w8, s2108; NOLSE-NEXT:    stlxrh w9, w8, [x0]109; NOLSE-NEXT:    cbnz w9, .LBB1_1110; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end111; NOLSE-NEXT:    // kill: def $h0 killed $h0 killed $s0112; NOLSE-NEXT:    ret113;114; LSE-LABEL: test_atomicrmw_fmax_f16_seq_cst_align4:115; LSE:       // %bb.0:116; LSE-NEXT:    fcvt s1, h0117; LSE-NEXT:    ldr h0, [x0]118; LSE-NEXT:  .LBB1_1: // %atomicrmw.start119; LSE-NEXT:    // =>This Inner Loop Header: Depth=1120; LSE-NEXT:    fcvt s2, h0121; LSE-NEXT:    fmov w8, s0122; LSE-NEXT:    mov w10, w8123; LSE-NEXT:    fmaxnm s2, s2, s1124; LSE-NEXT:    fcvt h2, s2125; LSE-NEXT:    fmov w9, s2126; LSE-NEXT:    casalh w10, w9, [x0]127; LSE-NEXT:    fmov s0, w10128; LSE-NEXT:    cmp w10, w8, uxth129; LSE-NEXT:    b.ne .LBB1_1130; LSE-NEXT:  // %bb.2: // %atomicrmw.end131; LSE-NEXT:    // kill: def $h0 killed $h0 killed $s0132; LSE-NEXT:    ret133;134; SOFTFP-NOLSE-LABEL: test_atomicrmw_fmax_f16_seq_cst_align4:135; SOFTFP-NOLSE:       // %bb.0:136; SOFTFP-NOLSE-NEXT:    str x30, [sp, #-48]! // 8-byte Folded Spill137; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #32] // 16-byte Folded Spill138; SOFTFP-NOLSE-NEXT:    mov x19, x0139; SOFTFP-NOLSE-NEXT:    ldrh w0, [x0]140; SOFTFP-NOLSE-NEXT:    mov w20, w1141; SOFTFP-NOLSE-NEXT:    stp x22, x21, [sp, #16] // 16-byte Folded Spill142; SOFTFP-NOLSE-NEXT:  .LBB1_1: // %atomicrmw.start143; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1144; SOFTFP-NOLSE-NEXT:    // Child Loop BB1_2 Depth 2145; SOFTFP-NOLSE-NEXT:    mov w22, w0146; SOFTFP-NOLSE-NEXT:    and w0, w20, #0xffff147; SOFTFP-NOLSE-NEXT:    bl __extendhfsf2148; SOFTFP-NOLSE-NEXT:    mov w21, w0149; SOFTFP-NOLSE-NEXT:    and w0, w22, #0xffff150; SOFTFP-NOLSE-NEXT:    bl __extendhfsf2151; SOFTFP-NOLSE-NEXT:    mov w1, w21152; SOFTFP-NOLSE-NEXT:    bl fmaxf153; SOFTFP-NOLSE-NEXT:    bl __truncsfhf2154; SOFTFP-NOLSE-NEXT:    mov w8, w0155; SOFTFP-NOLSE-NEXT:  .LBB1_2: // %cmpxchg.start156; SOFTFP-NOLSE-NEXT:    // Parent Loop BB1_1 Depth=1157; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2158; SOFTFP-NOLSE-NEXT:    ldaxrh w0, [x19]159; SOFTFP-NOLSE-NEXT:    cmp w0, w22, uxth160; SOFTFP-NOLSE-NEXT:    b.ne .LBB1_5161; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore162; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB1_2 Depth=2163; SOFTFP-NOLSE-NEXT:    stlxrh w9, w8, [x19]164; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB1_2165; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB1_1 Depth=1166; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1167; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB1_1168; SOFTFP-NOLSE-NEXT:    b .LBB1_6169; SOFTFP-NOLSE-NEXT:  .LBB1_5: // %cmpxchg.nostore170; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB1_1 Depth=1171; SOFTFP-NOLSE-NEXT:    mov w8, wzr172; SOFTFP-NOLSE-NEXT:    clrex173; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB1_1174; SOFTFP-NOLSE-NEXT:  .LBB1_6: // %atomicrmw.end175; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #32] // 16-byte Folded Reload176; SOFTFP-NOLSE-NEXT:    // kill: def $w0 killed $w0 killed $x0177; SOFTFP-NOLSE-NEXT:    ldp x22, x21, [sp, #16] // 16-byte Folded Reload178; SOFTFP-NOLSE-NEXT:    ldr x30, [sp], #48 // 8-byte Folded Reload179; SOFTFP-NOLSE-NEXT:    ret180  %res = atomicrmw fmax ptr %ptr, half %value seq_cst, align 4181  ret half %res182}183 184define bfloat @test_atomicrmw_fmax_bf16_seq_cst_align2(ptr %ptr, bfloat %value) #0 {185; NOLSE-LABEL: test_atomicrmw_fmax_bf16_seq_cst_align2:186; NOLSE:       // %bb.0:187; NOLSE-NEXT:    // kill: def $h0 killed $h0 def $d0188; NOLSE-NEXT:    shll v1.4s, v0.4h, #16189; NOLSE-NEXT:    mov w8, #32767 // =0x7fff190; NOLSE-NEXT:  .LBB2_1: // %atomicrmw.start191; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1192; NOLSE-NEXT:    ldaxrh w9, [x0]193; NOLSE-NEXT:    fmov s0, w9194; NOLSE-NEXT:    shll v2.4s, v0.4h, #16195; NOLSE-NEXT:    fmaxnm s2, s2, s1196; NOLSE-NEXT:    fmov w9, s2197; NOLSE-NEXT:    ubfx w10, w9, #16, #1198; NOLSE-NEXT:    add w9, w9, w8199; NOLSE-NEXT:    add w9, w10, w9200; NOLSE-NEXT:    lsr w9, w9, #16201; NOLSE-NEXT:    stlxrh w10, w9, [x0]202; NOLSE-NEXT:    cbnz w10, .LBB2_1203; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end204; NOLSE-NEXT:    // kill: def $h0 killed $h0 killed $d0205; NOLSE-NEXT:    ret206;207; LSE-LABEL: test_atomicrmw_fmax_bf16_seq_cst_align2:208; LSE:       // %bb.0:209; LSE-NEXT:    // kill: def $h0 killed $h0 def $d0210; LSE-NEXT:    shll v1.4s, v0.4h, #16211; LSE-NEXT:    mov w8, #32767 // =0x7fff212; LSE-NEXT:    ldr h0, [x0]213; LSE-NEXT:  .LBB2_1: // %atomicrmw.start214; LSE-NEXT:    // =>This Inner Loop Header: Depth=1215; LSE-NEXT:    shll v2.4s, v0.4h, #16216; LSE-NEXT:    fmaxnm s2, s2, s1217; LSE-NEXT:    fmov w9, s2218; LSE-NEXT:    ubfx w10, w9, #16, #1219; LSE-NEXT:    add w9, w9, w8220; LSE-NEXT:    add w9, w10, w9221; LSE-NEXT:    lsr w9, w9, #16222; LSE-NEXT:    fmov s2, w9223; LSE-NEXT:    fmov w9, s0224; LSE-NEXT:    fmov w10, s2225; LSE-NEXT:    mov w11, w9226; LSE-NEXT:    casalh w11, w10, [x0]227; LSE-NEXT:    fmov s0, w11228; LSE-NEXT:    cmp w11, w9, uxth229; LSE-NEXT:    b.ne .LBB2_1230; LSE-NEXT:  // %bb.2: // %atomicrmw.end231; LSE-NEXT:    // kill: def $h0 killed $h0 killed $d0232; LSE-NEXT:    ret233;234; SOFTFP-NOLSE-LABEL: test_atomicrmw_fmax_bf16_seq_cst_align2:235; SOFTFP-NOLSE:       // %bb.0:236; SOFTFP-NOLSE-NEXT:    stp x30, x21, [sp, #-32]! // 16-byte Folded Spill237; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #16] // 16-byte Folded Spill238; SOFTFP-NOLSE-NEXT:    mov x19, x0239; SOFTFP-NOLSE-NEXT:    ldrh w0, [x0]240; SOFTFP-NOLSE-NEXT:    lsl w20, w1, #16241; SOFTFP-NOLSE-NEXT:  .LBB2_1: // %atomicrmw.start242; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1243; SOFTFP-NOLSE-NEXT:    // Child Loop BB2_2 Depth 2244; SOFTFP-NOLSE-NEXT:    mov w21, w0245; SOFTFP-NOLSE-NEXT:    lsl w0, w0, #16246; SOFTFP-NOLSE-NEXT:    mov w1, w20247; SOFTFP-NOLSE-NEXT:    bl fmaxf248; SOFTFP-NOLSE-NEXT:    bl __truncsfbf2249; SOFTFP-NOLSE-NEXT:    mov w8, w0250; SOFTFP-NOLSE-NEXT:  .LBB2_2: // %cmpxchg.start251; SOFTFP-NOLSE-NEXT:    // Parent Loop BB2_1 Depth=1252; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2253; SOFTFP-NOLSE-NEXT:    ldaxrh w0, [x19]254; SOFTFP-NOLSE-NEXT:    cmp w0, w21, uxth255; SOFTFP-NOLSE-NEXT:    b.ne .LBB2_5256; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore257; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB2_2 Depth=2258; SOFTFP-NOLSE-NEXT:    stlxrh w9, w8, [x19]259; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB2_2260; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB2_1 Depth=1261; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1262; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB2_1263; SOFTFP-NOLSE-NEXT:    b .LBB2_6264; SOFTFP-NOLSE-NEXT:  .LBB2_5: // %cmpxchg.nostore265; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB2_1 Depth=1266; SOFTFP-NOLSE-NEXT:    mov w8, wzr267; SOFTFP-NOLSE-NEXT:    clrex268; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB2_1269; SOFTFP-NOLSE-NEXT:  .LBB2_6: // %atomicrmw.end270; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #16] // 16-byte Folded Reload271; SOFTFP-NOLSE-NEXT:    // kill: def $w0 killed $w0 killed $x0272; SOFTFP-NOLSE-NEXT:    ldp x30, x21, [sp], #32 // 16-byte Folded Reload273; SOFTFP-NOLSE-NEXT:    ret274  %res = atomicrmw fmax ptr %ptr, bfloat %value seq_cst, align 2275  ret bfloat %res276}277 278define bfloat @test_atomicrmw_fmax_bf16_seq_cst_align4(ptr %ptr, bfloat %value) #0 {279; NOLSE-LABEL: test_atomicrmw_fmax_bf16_seq_cst_align4:280; NOLSE:       // %bb.0:281; NOLSE-NEXT:    // kill: def $h0 killed $h0 def $d0282; NOLSE-NEXT:    shll v1.4s, v0.4h, #16283; NOLSE-NEXT:    mov w8, #32767 // =0x7fff284; NOLSE-NEXT:  .LBB3_1: // %atomicrmw.start285; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1286; NOLSE-NEXT:    ldaxrh w9, [x0]287; NOLSE-NEXT:    fmov s0, w9288; NOLSE-NEXT:    shll v2.4s, v0.4h, #16289; NOLSE-NEXT:    fmaxnm s2, s2, s1290; NOLSE-NEXT:    fmov w9, s2291; NOLSE-NEXT:    ubfx w10, w9, #16, #1292; NOLSE-NEXT:    add w9, w9, w8293; NOLSE-NEXT:    add w9, w10, w9294; NOLSE-NEXT:    lsr w9, w9, #16295; NOLSE-NEXT:    stlxrh w10, w9, [x0]296; NOLSE-NEXT:    cbnz w10, .LBB3_1297; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end298; NOLSE-NEXT:    // kill: def $h0 killed $h0 killed $d0299; NOLSE-NEXT:    ret300;301; LSE-LABEL: test_atomicrmw_fmax_bf16_seq_cst_align4:302; LSE:       // %bb.0:303; LSE-NEXT:    // kill: def $h0 killed $h0 def $d0304; LSE-NEXT:    shll v1.4s, v0.4h, #16305; LSE-NEXT:    mov w8, #32767 // =0x7fff306; LSE-NEXT:    ldr h0, [x0]307; LSE-NEXT:  .LBB3_1: // %atomicrmw.start308; LSE-NEXT:    // =>This Inner Loop Header: Depth=1309; LSE-NEXT:    shll v2.4s, v0.4h, #16310; LSE-NEXT:    fmaxnm s2, s2, s1311; LSE-NEXT:    fmov w9, s2312; LSE-NEXT:    ubfx w10, w9, #16, #1313; LSE-NEXT:    add w9, w9, w8314; LSE-NEXT:    add w9, w10, w9315; LSE-NEXT:    lsr w9, w9, #16316; LSE-NEXT:    fmov s2, w9317; LSE-NEXT:    fmov w9, s0318; LSE-NEXT:    fmov w10, s2319; LSE-NEXT:    mov w11, w9320; LSE-NEXT:    casalh w11, w10, [x0]321; LSE-NEXT:    fmov s0, w11322; LSE-NEXT:    cmp w11, w9, uxth323; LSE-NEXT:    b.ne .LBB3_1324; LSE-NEXT:  // %bb.2: // %atomicrmw.end325; LSE-NEXT:    // kill: def $h0 killed $h0 killed $d0326; LSE-NEXT:    ret327;328; SOFTFP-NOLSE-LABEL: test_atomicrmw_fmax_bf16_seq_cst_align4:329; SOFTFP-NOLSE:       // %bb.0:330; SOFTFP-NOLSE-NEXT:    stp x30, x21, [sp, #-32]! // 16-byte Folded Spill331; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #16] // 16-byte Folded Spill332; SOFTFP-NOLSE-NEXT:    mov x19, x0333; SOFTFP-NOLSE-NEXT:    ldrh w0, [x0]334; SOFTFP-NOLSE-NEXT:    lsl w20, w1, #16335; SOFTFP-NOLSE-NEXT:  .LBB3_1: // %atomicrmw.start336; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1337; SOFTFP-NOLSE-NEXT:    // Child Loop BB3_2 Depth 2338; SOFTFP-NOLSE-NEXT:    mov w21, w0339; SOFTFP-NOLSE-NEXT:    lsl w0, w0, #16340; SOFTFP-NOLSE-NEXT:    mov w1, w20341; SOFTFP-NOLSE-NEXT:    bl fmaxf342; SOFTFP-NOLSE-NEXT:    bl __truncsfbf2343; SOFTFP-NOLSE-NEXT:    mov w8, w0344; SOFTFP-NOLSE-NEXT:  .LBB3_2: // %cmpxchg.start345; SOFTFP-NOLSE-NEXT:    // Parent Loop BB3_1 Depth=1346; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2347; SOFTFP-NOLSE-NEXT:    ldaxrh w0, [x19]348; SOFTFP-NOLSE-NEXT:    cmp w0, w21, uxth349; SOFTFP-NOLSE-NEXT:    b.ne .LBB3_5350; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore351; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB3_2 Depth=2352; SOFTFP-NOLSE-NEXT:    stlxrh w9, w8, [x19]353; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB3_2354; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB3_1 Depth=1355; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1356; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB3_1357; SOFTFP-NOLSE-NEXT:    b .LBB3_6358; SOFTFP-NOLSE-NEXT:  .LBB3_5: // %cmpxchg.nostore359; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB3_1 Depth=1360; SOFTFP-NOLSE-NEXT:    mov w8, wzr361; SOFTFP-NOLSE-NEXT:    clrex362; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB3_1363; SOFTFP-NOLSE-NEXT:  .LBB3_6: // %atomicrmw.end364; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #16] // 16-byte Folded Reload365; SOFTFP-NOLSE-NEXT:    // kill: def $w0 killed $w0 killed $x0366; SOFTFP-NOLSE-NEXT:    ldp x30, x21, [sp], #32 // 16-byte Folded Reload367; SOFTFP-NOLSE-NEXT:    ret368  %res = atomicrmw fmax ptr %ptr, bfloat %value seq_cst, align 4369  ret bfloat %res370}371 372define float @test_atomicrmw_fmax_f32_seq_cst_align4(ptr %ptr, float %value) #0 {373; NOLSE-LABEL: test_atomicrmw_fmax_f32_seq_cst_align4:374; NOLSE:       // %bb.0:375; NOLSE-NEXT:  .LBB4_1: // %atomicrmw.start376; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1377; NOLSE-NEXT:    ldaxr w8, [x0]378; NOLSE-NEXT:    fmov s1, w8379; NOLSE-NEXT:    fmaxnm s2, s1, s0380; NOLSE-NEXT:    fmov w8, s2381; NOLSE-NEXT:    stlxr w9, w8, [x0]382; NOLSE-NEXT:    cbnz w9, .LBB4_1383; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end384; NOLSE-NEXT:    fmov s0, s1385; NOLSE-NEXT:    ret386;387; LSE-LABEL: test_atomicrmw_fmax_f32_seq_cst_align4:388; LSE:       // %bb.0:389; LSE-NEXT:    ldr s1, [x0]390; LSE-NEXT:  .LBB4_1: // %atomicrmw.start391; LSE-NEXT:    // =>This Inner Loop Header: Depth=1392; LSE-NEXT:    fmaxnm s2, s1, s0393; LSE-NEXT:    fmov w8, s1394; LSE-NEXT:    mov w10, w8395; LSE-NEXT:    fmov w9, s2396; LSE-NEXT:    casal w10, w9, [x0]397; LSE-NEXT:    fmov s1, w10398; LSE-NEXT:    cmp w10, w8399; LSE-NEXT:    b.ne .LBB4_1400; LSE-NEXT:  // %bb.2: // %atomicrmw.end401; LSE-NEXT:    fmov s0, s1402; LSE-NEXT:    ret403;404; SOFTFP-NOLSE-LABEL: test_atomicrmw_fmax_f32_seq_cst_align4:405; SOFTFP-NOLSE:       // %bb.0:406; SOFTFP-NOLSE-NEXT:    stp x30, x21, [sp, #-32]! // 16-byte Folded Spill407; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #16] // 16-byte Folded Spill408; SOFTFP-NOLSE-NEXT:    mov x19, x0409; SOFTFP-NOLSE-NEXT:    ldr w0, [x0]410; SOFTFP-NOLSE-NEXT:    mov w20, w1411; SOFTFP-NOLSE-NEXT:  .LBB4_1: // %atomicrmw.start412; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1413; SOFTFP-NOLSE-NEXT:    // Child Loop BB4_2 Depth 2414; SOFTFP-NOLSE-NEXT:    mov w1, w20415; SOFTFP-NOLSE-NEXT:    mov w21, w0416; SOFTFP-NOLSE-NEXT:    bl fmaxf417; SOFTFP-NOLSE-NEXT:    mov w8, w0418; SOFTFP-NOLSE-NEXT:  .LBB4_2: // %cmpxchg.start419; SOFTFP-NOLSE-NEXT:    // Parent Loop BB4_1 Depth=1420; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2421; SOFTFP-NOLSE-NEXT:    ldaxr w0, [x19]422; SOFTFP-NOLSE-NEXT:    cmp w0, w21423; SOFTFP-NOLSE-NEXT:    b.ne .LBB4_5424; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore425; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB4_2 Depth=2426; SOFTFP-NOLSE-NEXT:    stlxr w9, w8, [x19]427; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB4_2428; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB4_1 Depth=1429; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1430; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB4_1431; SOFTFP-NOLSE-NEXT:    b .LBB4_6432; SOFTFP-NOLSE-NEXT:  .LBB4_5: // %cmpxchg.nostore433; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB4_1 Depth=1434; SOFTFP-NOLSE-NEXT:    mov w8, wzr435; SOFTFP-NOLSE-NEXT:    clrex436; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB4_1437; SOFTFP-NOLSE-NEXT:  .LBB4_6: // %atomicrmw.end438; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #16] // 16-byte Folded Reload439; SOFTFP-NOLSE-NEXT:    // kill: def $w0 killed $w0 killed $x0440; SOFTFP-NOLSE-NEXT:    ldp x30, x21, [sp], #32 // 16-byte Folded Reload441; SOFTFP-NOLSE-NEXT:    ret442  %res = atomicrmw fmax ptr %ptr, float %value seq_cst, align 4443  ret float %res444}445 446define double @test_atomicrmw_fmax_f32_seq_cst_align8(ptr %ptr, double %value) #0 {447; NOLSE-LABEL: test_atomicrmw_fmax_f32_seq_cst_align8:448; NOLSE:       // %bb.0:449; NOLSE-NEXT:  .LBB5_1: // %atomicrmw.start450; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1451; NOLSE-NEXT:    ldaxr x8, [x0]452; NOLSE-NEXT:    fmov d1, x8453; NOLSE-NEXT:    fmaxnm d2, d1, d0454; NOLSE-NEXT:    fmov x8, d2455; NOLSE-NEXT:    stlxr w9, x8, [x0]456; NOLSE-NEXT:    cbnz w9, .LBB5_1457; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end458; NOLSE-NEXT:    fmov d0, d1459; NOLSE-NEXT:    ret460;461; LSE-LABEL: test_atomicrmw_fmax_f32_seq_cst_align8:462; LSE:       // %bb.0:463; LSE-NEXT:    ldr d1, [x0]464; LSE-NEXT:  .LBB5_1: // %atomicrmw.start465; LSE-NEXT:    // =>This Inner Loop Header: Depth=1466; LSE-NEXT:    fmaxnm d2, d1, d0467; LSE-NEXT:    fmov x8, d1468; LSE-NEXT:    mov x10, x8469; LSE-NEXT:    fmov x9, d2470; LSE-NEXT:    casal x10, x9, [x0]471; LSE-NEXT:    fmov d1, x10472; LSE-NEXT:    cmp x10, x8473; LSE-NEXT:    b.ne .LBB5_1474; LSE-NEXT:  // %bb.2: // %atomicrmw.end475; LSE-NEXT:    fmov d0, d1476; LSE-NEXT:    ret477;478; SOFTFP-NOLSE-LABEL: test_atomicrmw_fmax_f32_seq_cst_align8:479; SOFTFP-NOLSE:       // %bb.0:480; SOFTFP-NOLSE-NEXT:    stp x30, x21, [sp, #-32]! // 16-byte Folded Spill481; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #16] // 16-byte Folded Spill482; SOFTFP-NOLSE-NEXT:    mov x19, x0483; SOFTFP-NOLSE-NEXT:    ldr x0, [x0]484; SOFTFP-NOLSE-NEXT:    mov x20, x1485; SOFTFP-NOLSE-NEXT:  .LBB5_1: // %atomicrmw.start486; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1487; SOFTFP-NOLSE-NEXT:    // Child Loop BB5_2 Depth 2488; SOFTFP-NOLSE-NEXT:    mov x1, x20489; SOFTFP-NOLSE-NEXT:    mov x21, x0490; SOFTFP-NOLSE-NEXT:    bl fmax491; SOFTFP-NOLSE-NEXT:    mov x8, x0492; SOFTFP-NOLSE-NEXT:  .LBB5_2: // %cmpxchg.start493; SOFTFP-NOLSE-NEXT:    // Parent Loop BB5_1 Depth=1494; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2495; SOFTFP-NOLSE-NEXT:    ldaxr x0, [x19]496; SOFTFP-NOLSE-NEXT:    cmp x0, x21497; SOFTFP-NOLSE-NEXT:    b.ne .LBB5_5498; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore499; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB5_2 Depth=2500; SOFTFP-NOLSE-NEXT:    stlxr w9, x8, [x19]501; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB5_2502; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB5_1 Depth=1503; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1504; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB5_1505; SOFTFP-NOLSE-NEXT:    b .LBB5_6506; SOFTFP-NOLSE-NEXT:  .LBB5_5: // %cmpxchg.nostore507; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB5_1 Depth=1508; SOFTFP-NOLSE-NEXT:    mov w8, wzr509; SOFTFP-NOLSE-NEXT:    clrex510; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB5_1511; SOFTFP-NOLSE-NEXT:  .LBB5_6: // %atomicrmw.end512; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #16] // 16-byte Folded Reload513; SOFTFP-NOLSE-NEXT:    ldp x30, x21, [sp], #32 // 16-byte Folded Reload514; SOFTFP-NOLSE-NEXT:    ret515  %res = atomicrmw fmax ptr %ptr, double %value seq_cst, align 8516  ret double %res517}518 519define <2 x half> @test_atomicrmw_fmax_v2f16_seq_cst_align4(ptr %ptr, <2 x half> %value) #0 {520; NOLSE-LABEL: test_atomicrmw_fmax_v2f16_seq_cst_align4:521; NOLSE:       // %bb.0:522; NOLSE-NEXT:    // kill: def $d0 killed $d0 def $q0523; NOLSE-NEXT:    mov h1, v0.h[1]524; NOLSE-NEXT:    fcvt s0, h0525; NOLSE-NEXT:    fcvt s1, h1526; NOLSE-NEXT:  .LBB6_1: // %atomicrmw.start527; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1528; NOLSE-NEXT:    ldaxr w8, [x0]529; NOLSE-NEXT:    fmov s2, w8530; NOLSE-NEXT:    mov h3, v2.h[1]531; NOLSE-NEXT:    fcvt s2, h2532; NOLSE-NEXT:    fcvt s3, h3533; NOLSE-NEXT:    fmaxnm s2, s2, s0534; NOLSE-NEXT:    fmaxnm s3, s3, s1535; NOLSE-NEXT:    fcvt h2, s2536; NOLSE-NEXT:    fcvt h3, s3537; NOLSE-NEXT:    mov v2.h[1], v3.h[0]538; NOLSE-NEXT:    fmov w9, s2539; NOLSE-NEXT:    stlxr w10, w9, [x0]540; NOLSE-NEXT:    cbnz w10, .LBB6_1541; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end542; NOLSE-NEXT:    fmov d0, x8543; NOLSE-NEXT:    ret544;545; LSE-LABEL: test_atomicrmw_fmax_v2f16_seq_cst_align4:546; LSE:       // %bb.0:547; LSE-NEXT:    // kill: def $d0 killed $d0 def $q0548; LSE-NEXT:    mov h1, v0.h[1]549; LSE-NEXT:    fcvt s2, h0550; LSE-NEXT:    ldr s0, [x0]551; LSE-NEXT:    fcvt s1, h1552; LSE-NEXT:  .LBB6_1: // %atomicrmw.start553; LSE-NEXT:    // =>This Inner Loop Header: Depth=1554; LSE-NEXT:    mov h3, v0.h[1]555; LSE-NEXT:    fcvt s4, h0556; LSE-NEXT:    fmov w8, s0557; LSE-NEXT:    mov w10, w8558; LSE-NEXT:    fcvt s3, h3559; LSE-NEXT:    fmaxnm s4, s4, s2560; LSE-NEXT:    fmaxnm s3, s3, s1561; LSE-NEXT:    fcvt h4, s4562; LSE-NEXT:    fcvt h3, s3563; LSE-NEXT:    mov v4.h[1], v3.h[0]564; LSE-NEXT:    fmov w9, s4565; LSE-NEXT:    casal w10, w9, [x0]566; LSE-NEXT:    fmov s0, w10567; LSE-NEXT:    cmp w10, w8568; LSE-NEXT:    b.ne .LBB6_1569; LSE-NEXT:  // %bb.2: // %atomicrmw.end570; LSE-NEXT:    // kill: def $d0 killed $d0 killed $q0571; LSE-NEXT:    ret572;573; SOFTFP-NOLSE-LABEL: test_atomicrmw_fmax_v2f16_seq_cst_align4:574; SOFTFP-NOLSE:       // %bb.0:575; SOFTFP-NOLSE-NEXT:    stp x30, x25, [sp, #-64]! // 16-byte Folded Spill576; SOFTFP-NOLSE-NEXT:    stp x24, x23, [sp, #16] // 16-byte Folded Spill577; SOFTFP-NOLSE-NEXT:    ldrh w23, [x0, #2]578; SOFTFP-NOLSE-NEXT:    stp x22, x21, [sp, #32] // 16-byte Folded Spill579; SOFTFP-NOLSE-NEXT:    ldrh w22, [x0]580; SOFTFP-NOLSE-NEXT:    mov w21, w1581; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill582; SOFTFP-NOLSE-NEXT:    mov w19, w2583; SOFTFP-NOLSE-NEXT:    mov x20, x0584; SOFTFP-NOLSE-NEXT:  .LBB6_1: // %atomicrmw.start585; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1586; SOFTFP-NOLSE-NEXT:    // Child Loop BB6_2 Depth 2587; SOFTFP-NOLSE-NEXT:    and w0, w19, #0xffff588; SOFTFP-NOLSE-NEXT:    bl __extendhfsf2589; SOFTFP-NOLSE-NEXT:    mov w24, w0590; SOFTFP-NOLSE-NEXT:    and w0, w23, #0xffff591; SOFTFP-NOLSE-NEXT:    bl __extendhfsf2592; SOFTFP-NOLSE-NEXT:    mov w1, w24593; SOFTFP-NOLSE-NEXT:    bl fmaxf594; SOFTFP-NOLSE-NEXT:    bl __truncsfhf2595; SOFTFP-NOLSE-NEXT:    mov w24, w0596; SOFTFP-NOLSE-NEXT:    and w0, w21, #0xffff597; SOFTFP-NOLSE-NEXT:    bl __extendhfsf2598; SOFTFP-NOLSE-NEXT:    mov w25, w0599; SOFTFP-NOLSE-NEXT:    and w0, w22, #0xffff600; SOFTFP-NOLSE-NEXT:    bl __extendhfsf2601; SOFTFP-NOLSE-NEXT:    mov w1, w25602; SOFTFP-NOLSE-NEXT:    bl fmaxf603; SOFTFP-NOLSE-NEXT:    bl __truncsfhf2604; SOFTFP-NOLSE-NEXT:    mov w8, w22605; SOFTFP-NOLSE-NEXT:    bfi w0, w24, #16, #16606; SOFTFP-NOLSE-NEXT:    bfi w8, w23, #16, #16607; SOFTFP-NOLSE-NEXT:  .LBB6_2: // %cmpxchg.start608; SOFTFP-NOLSE-NEXT:    // Parent Loop BB6_1 Depth=1609; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2610; SOFTFP-NOLSE-NEXT:    ldaxr w22, [x20]611; SOFTFP-NOLSE-NEXT:    cmp w22, w8612; SOFTFP-NOLSE-NEXT:    b.ne .LBB6_5613; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore614; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB6_2 Depth=2615; SOFTFP-NOLSE-NEXT:    stlxr w9, w0, [x20]616; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB6_2617; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB6_1 Depth=1618; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1619; SOFTFP-NOLSE-NEXT:    lsr w23, w22, #16620; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB6_1621; SOFTFP-NOLSE-NEXT:    b .LBB6_6622; SOFTFP-NOLSE-NEXT:  .LBB6_5: // %cmpxchg.nostore623; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB6_1 Depth=1624; SOFTFP-NOLSE-NEXT:    mov w8, wzr625; SOFTFP-NOLSE-NEXT:    clrex626; SOFTFP-NOLSE-NEXT:    lsr w23, w22, #16627; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB6_1628; SOFTFP-NOLSE-NEXT:  .LBB6_6: // %atomicrmw.end629; SOFTFP-NOLSE-NEXT:    mov w0, w22630; SOFTFP-NOLSE-NEXT:    mov w1, w23631; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload632; SOFTFP-NOLSE-NEXT:    ldp x22, x21, [sp, #32] // 16-byte Folded Reload633; SOFTFP-NOLSE-NEXT:    ldp x24, x23, [sp, #16] // 16-byte Folded Reload634; SOFTFP-NOLSE-NEXT:    ldp x30, x25, [sp], #64 // 16-byte Folded Reload635; SOFTFP-NOLSE-NEXT:    ret636  %res = atomicrmw fmax ptr %ptr, <2 x half> %value seq_cst, align 4637  ret <2 x half> %res638}639 640define <2 x bfloat> @test_atomicrmw_fmax_v2bf16_seq_cst_align4(ptr %ptr, <2 x bfloat> %value) #0 {641; NOLSE-LABEL: test_atomicrmw_fmax_v2bf16_seq_cst_align4:642; NOLSE:       // %bb.0:643; NOLSE-NEXT:    // kill: def $d0 killed $d0 def $q0644; NOLSE-NEXT:    mov h1, v0.h[1]645; NOLSE-NEXT:    mov w8, #32767 // =0x7fff646; NOLSE-NEXT:    shll v0.4s, v0.4h, #16647; NOLSE-NEXT:    shll v1.4s, v1.4h, #16648; NOLSE-NEXT:  .LBB7_1: // %atomicrmw.start649; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1650; NOLSE-NEXT:    ldaxr w9, [x0]651; NOLSE-NEXT:    fmov s2, w9652; NOLSE-NEXT:    mov h3, v2.h[1]653; NOLSE-NEXT:    shll v2.4s, v2.4h, #16654; NOLSE-NEXT:    fmaxnm s2, s2, s0655; NOLSE-NEXT:    shll v3.4s, v3.4h, #16656; NOLSE-NEXT:    fmaxnm s3, s3, s1657; NOLSE-NEXT:    fmov w11, s2658; NOLSE-NEXT:    ubfx w13, w11, #16, #1659; NOLSE-NEXT:    add w11, w11, w8660; NOLSE-NEXT:    fmov w10, s3661; NOLSE-NEXT:    add w11, w13, w11662; NOLSE-NEXT:    lsr w11, w11, #16663; NOLSE-NEXT:    ubfx w12, w10, #16, #1664; NOLSE-NEXT:    add w10, w10, w8665; NOLSE-NEXT:    fmov s3, w11666; NOLSE-NEXT:    add w10, w12, w10667; NOLSE-NEXT:    lsr w10, w10, #16668; NOLSE-NEXT:    fmov s2, w10669; NOLSE-NEXT:    mov v3.h[1], v2.h[0]670; NOLSE-NEXT:    fmov w10, s3671; NOLSE-NEXT:    stlxr w11, w10, [x0]672; NOLSE-NEXT:    cbnz w11, .LBB7_1673; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end674; NOLSE-NEXT:    fmov d0, x9675; NOLSE-NEXT:    ret676;677; LSE-LABEL: test_atomicrmw_fmax_v2bf16_seq_cst_align4:678; LSE:       // %bb.0:679; LSE-NEXT:    // kill: def $d0 killed $d0 def $q0680; LSE-NEXT:    mov h1, v0.h[1]681; LSE-NEXT:    shll v2.4s, v0.4h, #16682; LSE-NEXT:    mov w8, #32767 // =0x7fff683; LSE-NEXT:    ldr s0, [x0]684; LSE-NEXT:    shll v1.4s, v1.4h, #16685; LSE-NEXT:  .LBB7_1: // %atomicrmw.start686; LSE-NEXT:    // =>This Inner Loop Header: Depth=1687; LSE-NEXT:    mov h3, v0.h[1]688; LSE-NEXT:    shll v4.4s, v0.4h, #16689; LSE-NEXT:    fmaxnm s4, s4, s2690; LSE-NEXT:    shll v3.4s, v3.4h, #16691; LSE-NEXT:    fmaxnm s3, s3, s1692; LSE-NEXT:    fmov w10, s4693; LSE-NEXT:    ubfx w12, w10, #16, #1694; LSE-NEXT:    add w10, w10, w8695; LSE-NEXT:    fmov w9, s3696; LSE-NEXT:    add w10, w12, w10697; LSE-NEXT:    lsr w10, w10, #16698; LSE-NEXT:    ubfx w11, w9, #16, #1699; LSE-NEXT:    add w9, w9, w8700; LSE-NEXT:    fmov s4, w10701; LSE-NEXT:    add w9, w11, w9702; LSE-NEXT:    lsr w9, w9, #16703; LSE-NEXT:    fmov s3, w9704; LSE-NEXT:    fmov w9, s0705; LSE-NEXT:    mov v4.h[1], v3.h[0]706; LSE-NEXT:    mov w11, w9707; LSE-NEXT:    fmov w10, s4708; LSE-NEXT:    casal w11, w10, [x0]709; LSE-NEXT:    fmov s0, w11710; LSE-NEXT:    cmp w11, w9711; LSE-NEXT:    b.ne .LBB7_1712; LSE-NEXT:  // %bb.2: // %atomicrmw.end713; LSE-NEXT:    // kill: def $d0 killed $d0 killed $q0714; LSE-NEXT:    ret715;716; SOFTFP-NOLSE-LABEL: test_atomicrmw_fmax_v2bf16_seq_cst_align4:717; SOFTFP-NOLSE:       // %bb.0:718; SOFTFP-NOLSE-NEXT:    str x30, [sp, #-64]! // 8-byte Folded Spill719; SOFTFP-NOLSE-NEXT:    mov w8, w1720; SOFTFP-NOLSE-NEXT:    stp x22, x21, [sp, #32] // 16-byte Folded Spill721; SOFTFP-NOLSE-NEXT:    ldrh w1, [x0, #2]722; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill723; SOFTFP-NOLSE-NEXT:    ldrh w22, [x0]724; SOFTFP-NOLSE-NEXT:    lsl w20, w2, #16725; SOFTFP-NOLSE-NEXT:    lsl w21, w8, #16726; SOFTFP-NOLSE-NEXT:    mov x19, x0727; SOFTFP-NOLSE-NEXT:    stp x24, x23, [sp, #16] // 16-byte Folded Spill728; SOFTFP-NOLSE-NEXT:  .LBB7_1: // %atomicrmw.start729; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1730; SOFTFP-NOLSE-NEXT:    // Child Loop BB7_2 Depth 2731; SOFTFP-NOLSE-NEXT:    lsl w23, w1, #16732; SOFTFP-NOLSE-NEXT:    mov w1, w20733; SOFTFP-NOLSE-NEXT:    mov w0, w23734; SOFTFP-NOLSE-NEXT:    bl fmaxf735; SOFTFP-NOLSE-NEXT:    bl __truncsfbf2736; SOFTFP-NOLSE-NEXT:    mov w24, w0737; SOFTFP-NOLSE-NEXT:    lsl w0, w22, #16738; SOFTFP-NOLSE-NEXT:    mov w1, w21739; SOFTFP-NOLSE-NEXT:    bl fmaxf740; SOFTFP-NOLSE-NEXT:    bl __truncsfbf2741; SOFTFP-NOLSE-NEXT:    bfxil w23, w22, #0, #16742; SOFTFP-NOLSE-NEXT:    bfi w0, w24, #16, #16743; SOFTFP-NOLSE-NEXT:  .LBB7_2: // %cmpxchg.start744; SOFTFP-NOLSE-NEXT:    // Parent Loop BB7_1 Depth=1745; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2746; SOFTFP-NOLSE-NEXT:    ldaxr w22, [x19]747; SOFTFP-NOLSE-NEXT:    cmp w22, w23748; SOFTFP-NOLSE-NEXT:    b.ne .LBB7_5749; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore750; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB7_2 Depth=2751; SOFTFP-NOLSE-NEXT:    stlxr w8, w0, [x19]752; SOFTFP-NOLSE-NEXT:    cbnz w8, .LBB7_2753; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB7_1 Depth=1754; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1755; SOFTFP-NOLSE-NEXT:    lsr w1, w22, #16756; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB7_1757; SOFTFP-NOLSE-NEXT:    b .LBB7_6758; SOFTFP-NOLSE-NEXT:  .LBB7_5: // %cmpxchg.nostore759; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB7_1 Depth=1760; SOFTFP-NOLSE-NEXT:    mov w8, wzr761; SOFTFP-NOLSE-NEXT:    clrex762; SOFTFP-NOLSE-NEXT:    lsr w1, w22, #16763; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB7_1764; SOFTFP-NOLSE-NEXT:  .LBB7_6: // %atomicrmw.end765; SOFTFP-NOLSE-NEXT:    mov w0, w22766; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload767; SOFTFP-NOLSE-NEXT:    ldp x22, x21, [sp, #32] // 16-byte Folded Reload768; SOFTFP-NOLSE-NEXT:    ldp x24, x23, [sp, #16] // 16-byte Folded Reload769; SOFTFP-NOLSE-NEXT:    ldr x30, [sp], #64 // 8-byte Folded Reload770; SOFTFP-NOLSE-NEXT:    ret771  %res = atomicrmw fmax ptr %ptr, <2 x bfloat> %value seq_cst, align 4772  ret <2 x bfloat> %res773}774 775define <2 x float> @test_atomicrmw_fmax_v2f32_seq_cst_align8(ptr %ptr, <2 x float> %value) #0 {776; NOLSE-LABEL: test_atomicrmw_fmax_v2f32_seq_cst_align8:777; NOLSE:       // %bb.0:778; NOLSE-NEXT:  .LBB8_1: // %atomicrmw.start779; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1780; NOLSE-NEXT:    ldaxr x8, [x0]781; NOLSE-NEXT:    fmov d1, x8782; NOLSE-NEXT:    fmaxnm v2.2s, v1.2s, v0.2s783; NOLSE-NEXT:    fmov x8, d2784; NOLSE-NEXT:    stlxr w9, x8, [x0]785; NOLSE-NEXT:    cbnz w9, .LBB8_1786; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end787; NOLSE-NEXT:    fmov d0, d1788; NOLSE-NEXT:    ret789;790; LSE-LABEL: test_atomicrmw_fmax_v2f32_seq_cst_align8:791; LSE:       // %bb.0:792; LSE-NEXT:    ldr d1, [x0]793; LSE-NEXT:  .LBB8_1: // %atomicrmw.start794; LSE-NEXT:    // =>This Inner Loop Header: Depth=1795; LSE-NEXT:    fmaxnm v2.2s, v1.2s, v0.2s796; LSE-NEXT:    fmov x8, d1797; LSE-NEXT:    mov x10, x8798; LSE-NEXT:    fmov x9, d2799; LSE-NEXT:    casal x10, x9, [x0]800; LSE-NEXT:    fmov d1, x10801; LSE-NEXT:    cmp x10, x8802; LSE-NEXT:    b.ne .LBB8_1803; LSE-NEXT:  // %bb.2: // %atomicrmw.end804; LSE-NEXT:    fmov d0, d1805; LSE-NEXT:    ret806;807; SOFTFP-NOLSE-LABEL: test_atomicrmw_fmax_v2f32_seq_cst_align8:808; SOFTFP-NOLSE:       // %bb.0:809; SOFTFP-NOLSE-NEXT:    str x30, [sp, #-64]! // 8-byte Folded Spill810; SOFTFP-NOLSE-NEXT:    stp x24, x23, [sp, #16] // 16-byte Folded Spill811; SOFTFP-NOLSE-NEXT:    stp x22, x21, [sp, #32] // 16-byte Folded Spill812; SOFTFP-NOLSE-NEXT:    mov w21, w1813; SOFTFP-NOLSE-NEXT:    ldp w22, w23, [x0]814; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill815; SOFTFP-NOLSE-NEXT:    mov w19, w2816; SOFTFP-NOLSE-NEXT:    mov x20, x0817; SOFTFP-NOLSE-NEXT:  .LBB8_1: // %atomicrmw.start818; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1819; SOFTFP-NOLSE-NEXT:    // Child Loop BB8_2 Depth 2820; SOFTFP-NOLSE-NEXT:    mov w0, w23821; SOFTFP-NOLSE-NEXT:    mov w1, w19822; SOFTFP-NOLSE-NEXT:    bl fmaxf823; SOFTFP-NOLSE-NEXT:    mov w24, w0824; SOFTFP-NOLSE-NEXT:    mov w0, w22825; SOFTFP-NOLSE-NEXT:    mov w1, w21826; SOFTFP-NOLSE-NEXT:    bl fmaxf827; SOFTFP-NOLSE-NEXT:    mov w8, w0828; SOFTFP-NOLSE-NEXT:    mov w9, w22829; SOFTFP-NOLSE-NEXT:    // kill: def $w23 killed $w23 killed $x23 def $x23830; SOFTFP-NOLSE-NEXT:    orr x8, x8, x24, lsl #32831; SOFTFP-NOLSE-NEXT:    orr x9, x9, x23, lsl #32832; SOFTFP-NOLSE-NEXT:  .LBB8_2: // %cmpxchg.start833; SOFTFP-NOLSE-NEXT:    // Parent Loop BB8_1 Depth=1834; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2835; SOFTFP-NOLSE-NEXT:    ldaxr x22, [x20]836; SOFTFP-NOLSE-NEXT:    cmp x22, x9837; SOFTFP-NOLSE-NEXT:    b.ne .LBB8_5838; SOFTFP-NOLSE-NEXT:  // %bb.3: // %cmpxchg.trystore839; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB8_2 Depth=2840; SOFTFP-NOLSE-NEXT:    stlxr w10, x8, [x20]841; SOFTFP-NOLSE-NEXT:    cbnz w10, .LBB8_2842; SOFTFP-NOLSE-NEXT:  // %bb.4: // in Loop: Header=BB8_1 Depth=1843; SOFTFP-NOLSE-NEXT:    mov w8, #1 // =0x1844; SOFTFP-NOLSE-NEXT:    lsr x23, x22, #32845; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB8_1846; SOFTFP-NOLSE-NEXT:    b .LBB8_6847; SOFTFP-NOLSE-NEXT:  .LBB8_5: // %cmpxchg.nostore848; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB8_1 Depth=1849; SOFTFP-NOLSE-NEXT:    mov w8, wzr850; SOFTFP-NOLSE-NEXT:    clrex851; SOFTFP-NOLSE-NEXT:    lsr x23, x22, #32852; SOFTFP-NOLSE-NEXT:    cbz w8, .LBB8_1853; SOFTFP-NOLSE-NEXT:  .LBB8_6: // %atomicrmw.end854; SOFTFP-NOLSE-NEXT:    mov w0, w22855; SOFTFP-NOLSE-NEXT:    mov w1, w23856; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload857; SOFTFP-NOLSE-NEXT:    ldp x22, x21, [sp, #32] // 16-byte Folded Reload858; SOFTFP-NOLSE-NEXT:    ldp x24, x23, [sp, #16] // 16-byte Folded Reload859; SOFTFP-NOLSE-NEXT:    ldr x30, [sp], #64 // 8-byte Folded Reload860; SOFTFP-NOLSE-NEXT:    ret861  %res = atomicrmw fmax ptr %ptr, <2 x float> %value seq_cst, align 8862  ret <2 x float> %res863}864 865define <2 x double> @test_atomicrmw_fmax_v2f64_seq_cst_align8(ptr %ptr, <2 x double> %value) #0 {866; NOLSE-LABEL: test_atomicrmw_fmax_v2f64_seq_cst_align8:867; NOLSE:       // %bb.0:868; NOLSE-NEXT:  .LBB9_1: // %atomicrmw.start869; NOLSE-NEXT:    // =>This Inner Loop Header: Depth=1870; NOLSE-NEXT:    ldaxp x8, x9, [x0]871; NOLSE-NEXT:    fmov d1, x8872; NOLSE-NEXT:    mov v1.d[1], x9873; NOLSE-NEXT:    fmaxnm v2.2d, v1.2d, v0.2d874; NOLSE-NEXT:    mov x8, v2.d[1]875; NOLSE-NEXT:    fmov x9, d2876; NOLSE-NEXT:    stlxp w10, x9, x8, [x0]877; NOLSE-NEXT:    cbnz w10, .LBB9_1878; NOLSE-NEXT:  // %bb.2: // %atomicrmw.end879; NOLSE-NEXT:    mov v0.16b, v1.16b880; NOLSE-NEXT:    ret881;882; LSE-LABEL: test_atomicrmw_fmax_v2f64_seq_cst_align8:883; LSE:       // %bb.0:884; LSE-NEXT:    ldr q1, [x0]885; LSE-NEXT:  .LBB9_1: // %atomicrmw.start886; LSE-NEXT:    // =>This Inner Loop Header: Depth=1887; LSE-NEXT:    fmaxnm v2.2d, v1.2d, v0.2d888; LSE-NEXT:    mov x3, v1.d[1]889; LSE-NEXT:    fmov x2, d1890; LSE-NEXT:    mov x7, x3891; LSE-NEXT:    mov x5, v2.d[1]892; LSE-NEXT:    mov x6, x2893; LSE-NEXT:    fmov x4, d2894; LSE-NEXT:    caspal x6, x7, x4, x5, [x0]895; LSE-NEXT:    fmov d1, x6896; LSE-NEXT:    cmp x7, x3897; LSE-NEXT:    ccmp x6, x2, #0, eq898; LSE-NEXT:    mov v1.d[1], x7899; LSE-NEXT:    b.ne .LBB9_1900; LSE-NEXT:  // %bb.2: // %atomicrmw.end901; LSE-NEXT:    mov v0.16b, v1.16b902; LSE-NEXT:    ret903;904; SOFTFP-NOLSE-LABEL: test_atomicrmw_fmax_v2f64_seq_cst_align8:905; SOFTFP-NOLSE:       // %bb.0:906; SOFTFP-NOLSE-NEXT:    str x30, [sp, #-64]! // 8-byte Folded Spill907; SOFTFP-NOLSE-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill908; SOFTFP-NOLSE-NEXT:    mov x20, x0909; SOFTFP-NOLSE-NEXT:    mov x19, x3910; SOFTFP-NOLSE-NEXT:    ldp x0, x1, [x0]911; SOFTFP-NOLSE-NEXT:    stp x22, x21, [sp, #32] // 16-byte Folded Spill912; SOFTFP-NOLSE-NEXT:    mov x21, x2913; SOFTFP-NOLSE-NEXT:    stp x24, x23, [sp, #16] // 16-byte Folded Spill914; SOFTFP-NOLSE-NEXT:    b .LBB9_2915; SOFTFP-NOLSE-NEXT:  .LBB9_1: // %atomicrmw.start916; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB9_2 Depth=1917; SOFTFP-NOLSE-NEXT:    cmp x1, x22918; SOFTFP-NOLSE-NEXT:    ccmp x0, x23, #0, eq919; SOFTFP-NOLSE-NEXT:    b.eq .LBB9_6920; SOFTFP-NOLSE-NEXT:  .LBB9_2: // %atomicrmw.start921; SOFTFP-NOLSE-NEXT:    // =>This Loop Header: Depth=1922; SOFTFP-NOLSE-NEXT:    // Child Loop BB9_3 Depth 2923; SOFTFP-NOLSE-NEXT:    mov x22, x1924; SOFTFP-NOLSE-NEXT:    mov x23, x0925; SOFTFP-NOLSE-NEXT:    mov x0, x1926; SOFTFP-NOLSE-NEXT:    mov x1, x19927; SOFTFP-NOLSE-NEXT:    bl fmax928; SOFTFP-NOLSE-NEXT:    mov x24, x0929; SOFTFP-NOLSE-NEXT:    mov x0, x23930; SOFTFP-NOLSE-NEXT:    mov x1, x21931; SOFTFP-NOLSE-NEXT:    bl fmax932; SOFTFP-NOLSE-NEXT:    mov x8, x0933; SOFTFP-NOLSE-NEXT:  .LBB9_3: // %atomicrmw.start934; SOFTFP-NOLSE-NEXT:    // Parent Loop BB9_2 Depth=1935; SOFTFP-NOLSE-NEXT:    // => This Inner Loop Header: Depth=2936; SOFTFP-NOLSE-NEXT:    ldaxp x0, x1, [x20]937; SOFTFP-NOLSE-NEXT:    cmp x0, x23938; SOFTFP-NOLSE-NEXT:    cset w9, ne939; SOFTFP-NOLSE-NEXT:    cmp x1, x22940; SOFTFP-NOLSE-NEXT:    cinc w9, w9, ne941; SOFTFP-NOLSE-NEXT:    cbz w9, .LBB9_5942; SOFTFP-NOLSE-NEXT:  // %bb.4: // %atomicrmw.start943; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB9_3 Depth=2944; SOFTFP-NOLSE-NEXT:    stlxp w9, x0, x1, [x20]945; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB9_3946; SOFTFP-NOLSE-NEXT:    b .LBB9_1947; SOFTFP-NOLSE-NEXT:  .LBB9_5: // %atomicrmw.start948; SOFTFP-NOLSE-NEXT:    // in Loop: Header=BB9_3 Depth=2949; SOFTFP-NOLSE-NEXT:    stlxp w9, x8, x24, [x20]950; SOFTFP-NOLSE-NEXT:    cbnz w9, .LBB9_3951; SOFTFP-NOLSE-NEXT:    b .LBB9_1952; SOFTFP-NOLSE-NEXT:  .LBB9_6: // %atomicrmw.end953; SOFTFP-NOLSE-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload954; SOFTFP-NOLSE-NEXT:    ldp x22, x21, [sp, #32] // 16-byte Folded Reload955; SOFTFP-NOLSE-NEXT:    ldp x24, x23, [sp, #16] // 16-byte Folded Reload956; SOFTFP-NOLSE-NEXT:    ldr x30, [sp], #64 // 8-byte Folded Reload957; SOFTFP-NOLSE-NEXT:    ret958  %res = atomicrmw fmax ptr %ptr, <2 x double> %value seq_cst, align 16959  ret <2 x double> %res960}961 962attributes #0 = { nounwind }963