xref: /llvm-project/llvm/test/CodeGen/SystemZ/builtin-setjmp.ll (revision dc04d414df9c243bb90d7cfc683a632a2c032c62)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2; Test setjmp store jmp_buf
3; Return address in slot 2.
4; Backchain value is stored in slot 3 for -mbackchain option.
5; Stack Pointer in slot 4.
6; Clobber %r6-%r15, %f8-%f15.
7
8; RUN: llc < %s -verify-machineinstrs -mtriple=s390x-linux-gnu | FileCheck %s
9
10declare i32 @llvm.eh.sjlj.setjmp(ptr)
11@buf = global [20 x ptr] zeroinitializer, align 8
12
13define void @foo() {
14; CHECK-LABEL: foo:
15; CHECK:       # %bb.0: # %entry
16; CHECK-NEXT:    stmg %r6, %r15, 48(%r15)
17; CHECK-NEXT:    .cfi_offset %r6, -112
18; CHECK-NEXT:    .cfi_offset %r7, -104
19; CHECK-NEXT:    .cfi_offset %r8, -96
20; CHECK-NEXT:    .cfi_offset %r9, -88
21; CHECK-NEXT:    .cfi_offset %r10, -80
22; CHECK-NEXT:    .cfi_offset %r11, -72
23; CHECK-NEXT:    .cfi_offset %r12, -64
24; CHECK-NEXT:    .cfi_offset %r13, -56
25; CHECK-NEXT:    .cfi_offset %r14, -48
26; CHECK-NEXT:    .cfi_offset %r15, -40
27; CHECK-NEXT:    aghi %r15, -64
28; CHECK-NEXT:    .cfi_def_cfa_offset 224
29; CHECK-NEXT:    std %f8, 56(%r15) # 8-byte Folded Spill
30; CHECK-NEXT:    std %f9, 48(%r15) # 8-byte Folded Spill
31; CHECK-NEXT:    std %f10, 40(%r15) # 8-byte Folded Spill
32; CHECK-NEXT:    std %f11, 32(%r15) # 8-byte Folded Spill
33; CHECK-NEXT:    std %f12, 24(%r15) # 8-byte Folded Spill
34; CHECK-NEXT:    std %f13, 16(%r15) # 8-byte Folded Spill
35; CHECK-NEXT:    std %f14, 8(%r15) # 8-byte Folded Spill
36; CHECK-NEXT:    std %f15, 0(%r15) # 8-byte Folded Spill
37; CHECK-NEXT:    .cfi_offset %f8, -168
38; CHECK-NEXT:    .cfi_offset %f9, -176
39; CHECK-NEXT:    .cfi_offset %f10, -184
40; CHECK-NEXT:    .cfi_offset %f11, -192
41; CHECK-NEXT:    .cfi_offset %f12, -200
42; CHECK-NEXT:    .cfi_offset %f13, -208
43; CHECK-NEXT:    .cfi_offset %f14, -216
44; CHECK-NEXT:    .cfi_offset %f15, -224
45; CHECK-NEXT:    lgrl %r1, buf@GOT
46; CHECK-NEXT:    larl %r0, .LBB0_1
47; CHECK-NEXT:    stg %r0, 8(%r1)
48; CHECK-NEXT:    stg %r15, 24(%r1)
49; CHECK-NEXT:  .LBB0_1: # Block address taken
50; CHECK-NEXT:    # %entry
51; CHECK-NEXT:  .LBB0_2: # %entry
52; CHECK-NEXT:    ld %f8, 56(%r15) # 8-byte Folded Reload
53; CHECK-NEXT:    ld %f9, 48(%r15) # 8-byte Folded Reload
54; CHECK-NEXT:    ld %f10, 40(%r15) # 8-byte Folded Reload
55; CHECK-NEXT:    ld %f11, 32(%r15) # 8-byte Folded Reload
56; CHECK-NEXT:    ld %f12, 24(%r15) # 8-byte Folded Reload
57; CHECK-NEXT:    ld %f13, 16(%r15) # 8-byte Folded Reload
58; CHECK-NEXT:    ld %f14, 8(%r15) # 8-byte Folded Reload
59; CHECK-NEXT:    ld %f15, 0(%r15) # 8-byte Folded Reload
60; CHECK-NEXT:    lmg %r6, %r15, 112(%r15)
61; CHECK-NEXT:    br %r14
62entry:
63  %0 = tail call i32 @llvm.eh.sjlj.setjmp(ptr nonnull @buf)
64  ret void
65}
66
67define void @foo1() "backchain" {
68; CHECK-LABEL: foo1:
69; CHECK:       # %bb.0: # %entry
70; CHECK-NEXT:    stmg %r6, %r15, 48(%r15)
71; CHECK-NEXT:    .cfi_offset %r6, -112
72; CHECK-NEXT:    .cfi_offset %r7, -104
73; CHECK-NEXT:    .cfi_offset %r8, -96
74; CHECK-NEXT:    .cfi_offset %r9, -88
75; CHECK-NEXT:    .cfi_offset %r10, -80
76; CHECK-NEXT:    .cfi_offset %r11, -72
77; CHECK-NEXT:    .cfi_offset %r12, -64
78; CHECK-NEXT:    .cfi_offset %r13, -56
79; CHECK-NEXT:    .cfi_offset %r14, -48
80; CHECK-NEXT:    .cfi_offset %r15, -40
81; CHECK-NEXT:    lgr %r1, %r15
82; CHECK-NEXT:    aghi %r15, -64
83; CHECK-NEXT:    .cfi_def_cfa_offset 224
84; CHECK-NEXT:    stg %r1, 0(%r15)
85; CHECK-NEXT:    std %f8, 56(%r15) # 8-byte Folded Spill
86; CHECK-NEXT:    std %f9, 48(%r15) # 8-byte Folded Spill
87; CHECK-NEXT:    std %f10, 40(%r15) # 8-byte Folded Spill
88; CHECK-NEXT:    std %f11, 32(%r15) # 8-byte Folded Spill
89; CHECK-NEXT:    std %f12, 24(%r15) # 8-byte Folded Spill
90; CHECK-NEXT:    std %f13, 16(%r15) # 8-byte Folded Spill
91; CHECK-NEXT:    std %f14, 8(%r15) # 8-byte Folded Spill
92; CHECK-NEXT:    std %f15, 0(%r15) # 8-byte Folded Spill
93; CHECK-NEXT:    .cfi_offset %f8, -168
94; CHECK-NEXT:    .cfi_offset %f9, -176
95; CHECK-NEXT:    .cfi_offset %f10, -184
96; CHECK-NEXT:    .cfi_offset %f11, -192
97; CHECK-NEXT:    .cfi_offset %f12, -200
98; CHECK-NEXT:    .cfi_offset %f13, -208
99; CHECK-NEXT:    .cfi_offset %f14, -216
100; CHECK-NEXT:    .cfi_offset %f15, -224
101; CHECK-NEXT:    lgrl %r1, buf@GOT
102; CHECK-NEXT:    larl %r0, .LBB1_1
103; CHECK-NEXT:    stg %r0, 8(%r1)
104; CHECK-NEXT:    stg %r15, 24(%r1)
105; CHECK-NEXT:    lg %r0, 0(%r15)
106; CHECK-NEXT:    stg %r0, 16(%r1)
107; CHECK-NEXT:  .LBB1_1: # Block address taken
108; CHECK-NEXT:    # %entry
109; CHECK-NEXT:  .LBB1_2: # %entry
110; CHECK-NEXT:    ld %f8, 56(%r15) # 8-byte Folded Reload
111; CHECK-NEXT:    ld %f9, 48(%r15) # 8-byte Folded Reload
112; CHECK-NEXT:    ld %f10, 40(%r15) # 8-byte Folded Reload
113; CHECK-NEXT:    ld %f11, 32(%r15) # 8-byte Folded Reload
114; CHECK-NEXT:    ld %f12, 24(%r15) # 8-byte Folded Reload
115; CHECK-NEXT:    ld %f13, 16(%r15) # 8-byte Folded Reload
116; CHECK-NEXT:    ld %f14, 8(%r15) # 8-byte Folded Reload
117; CHECK-NEXT:    ld %f15, 0(%r15) # 8-byte Folded Reload
118; CHECK-NEXT:    lmg %r6, %r15, 112(%r15)
119; CHECK-NEXT:    br %r14
120entry:
121  %0 = tail call i32 @llvm.eh.sjlj.setjmp(ptr nonnull @buf)
122  ret void
123}
124
125