brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · a0869e1 Raw
77 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; Test atomic half addition. Expect a compare-and-swap loop.3;4; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s5 6define half @f1(ptr %src, half %b) {7; CHECK-LABEL: f1:8; CHECK:       # %bb.0:9; CHECK-NEXT:    stmg %r11, %r15, 88(%r15)10; CHECK-NEXT:    .cfi_offset %r11, -7211; CHECK-NEXT:    .cfi_offset %r12, -6412; CHECK-NEXT:    .cfi_offset %r13, -5613; CHECK-NEXT:    .cfi_offset %r14, -4814; CHECK-NEXT:    .cfi_offset %r15, -4015; CHECK-NEXT:    aghi %r15, -18416; CHECK-NEXT:    .cfi_def_cfa_offset 34417; CHECK-NEXT:    std %f8, 176(%r15) # 8-byte Spill18; CHECK-NEXT:    std %f9, 168(%r15) # 8-byte Spill19; CHECK-NEXT:    std %f10, 160(%r15) # 8-byte Spill20; CHECK-NEXT:    .cfi_offset %f8, -16821; CHECK-NEXT:    .cfi_offset %f9, -17622; CHECK-NEXT:    .cfi_offset %f10, -18423; CHECK-NEXT:    lgr %r13, %r224; CHECK-NEXT:    lgh %r0, 0(%r2)25; CHECK-NEXT:    ler %f8, %f026; CHECK-NEXT:    sllg %r0, %r0, 4827; CHECK-NEXT:    ldgr %f9, %r028; CHECK-NEXT:    risbg %r12, %r2, 0, 189, 029; CHECK-NEXT:    sll %r13, 330; CHECK-NEXT:    lcr %r11, %r1331; CHECK-NEXT:    j .LBB0_232; CHECK-NEXT:  .LBB0_1: # %atomicrmw.start33; CHECK-NEXT:    # in Loop: Header=BB0_2 Depth=134; CHECK-NEXT:    sllg %r0, %r3, 4835; CHECK-NEXT:    ldgr %f9, %r036; CHECK-NEXT:    je .LBB0_537; CHECK-NEXT:  .LBB0_2: # %atomicrmw.start38; CHECK-NEXT:    # =>This Loop Header: Depth=139; CHECK-NEXT:    # Child Loop BB0_3 Depth 240; CHECK-NEXT:    ler %f0, %f841; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT42; CHECK-NEXT:    ler %f10, %f043; CHECK-NEXT:    ler %f0, %f944; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT45; CHECK-NEXT:    aebr %f0, %f1046; CHECK-NEXT:    brasl %r14, __truncsfhf2@PLT47; CHECK-NEXT:    # kill: def $f0h killed $f0h def $f0d48; CHECK-NEXT:    lgdr %r1, %f049; CHECK-NEXT:    l %r0, 0(%r12)50; CHECK-NEXT:    srlg %r1, %r1, 4851; CHECK-NEXT:    lgdr %r2, %f952; CHECK-NEXT:    srlg %r2, %r2, 4853; CHECK-NEXT:  .LBB0_3: # %atomicrmw.start54; CHECK-NEXT:    # Parent Loop BB0_2 Depth=155; CHECK-NEXT:    # => This Inner Loop Header: Depth=256; CHECK-NEXT:    rll %r3, %r0, 16(%r13)57; CHECK-NEXT:    risbg %r1, %r3, 32, 47, 058; CHECK-NEXT:    llhr %r3, %r359; CHECK-NEXT:    cr %r3, %r260; CHECK-NEXT:    jlh .LBB0_161; CHECK-NEXT:  # %bb.4: # %atomicrmw.start62; CHECK-NEXT:    # in Loop: Header=BB0_3 Depth=263; CHECK-NEXT:    rll %r4, %r1, -16(%r11)64; CHECK-NEXT:    cs %r0, %r4, 0(%r12)65; CHECK-NEXT:    jl .LBB0_366; CHECK-NEXT:    j .LBB0_167; CHECK-NEXT:  .LBB0_5: # %atomicrmw.end68; CHECK-NEXT:    ler %f0, %f969; CHECK-NEXT:    ld %f8, 176(%r15) # 8-byte Reload70; CHECK-NEXT:    ld %f9, 168(%r15) # 8-byte Reload71; CHECK-NEXT:    ld %f10, 160(%r15) # 8-byte Reload72; CHECK-NEXT:    lmg %r11, %r15, 272(%r15)73; CHECK-NEXT:    br %r1474  %res = atomicrmw fadd ptr %src, half %b seq_cst75  ret half %res76}77