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