Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / VE / Scalar / builtin_sjlj.ll
blob2713d61d16c2f3ff46fb4bc904084cacafcbc967
1 ; RUN: llc < %s -mtriple=ve | FileCheck %s
2 ; RUN: llc < %s -mtriple=ve -relocation-model=pic | \
3 ; RUN:     FileCheck %s -check-prefix=PIC
5 %struct.__jmp_buf_tag = type { [25 x i64], i64, [16 x i64] }
7 @buf = common global [1 x %struct.__jmp_buf_tag] zeroinitializer, align 8
9 ; Function Attrs: noinline nounwind optnone
10 define signext i32 @t_setjmp() {
11 ; CHECK-LABEL: t_setjmp:
12 ; CHECK:       .LBB{{[0-9]+}}_5:
13 ; CHECK-NEXT:    st %s18, 48(, %s9) # 8-byte Folded Spill
14 ; CHECK-NEXT:    st %s19, 56(, %s9) # 8-byte Folded Spill
15 ; CHECK-NEXT:    st %s20, 64(, %s9) # 8-byte Folded Spill
16 ; CHECK-NEXT:    st %s21, 72(, %s9) # 8-byte Folded Spill
17 ; CHECK-NEXT:    st %s22, 80(, %s9) # 8-byte Folded Spill
18 ; CHECK-NEXT:    st %s23, 88(, %s9) # 8-byte Folded Spill
19 ; CHECK-NEXT:    st %s24, 96(, %s9) # 8-byte Folded Spill
20 ; CHECK-NEXT:    st %s25, 104(, %s9) # 8-byte Folded Spill
21 ; CHECK-NEXT:    st %s26, 112(, %s9) # 8-byte Folded Spill
22 ; CHECK-NEXT:    st %s27, 120(, %s9) # 8-byte Folded Spill
23 ; CHECK-NEXT:    st %s28, 128(, %s9) # 8-byte Folded Spill
24 ; CHECK-NEXT:    st %s29, 136(, %s9) # 8-byte Folded Spill
25 ; CHECK-NEXT:    st %s30, 144(, %s9) # 8-byte Folded Spill
26 ; CHECK-NEXT:    st %s31, 152(, %s9) # 8-byte Folded Spill
27 ; CHECK-NEXT:    st %s32, 160(, %s9) # 8-byte Folded Spill
28 ; CHECK-NEXT:    st %s33, 168(, %s9) # 8-byte Folded Spill
29 ; CHECK-NEXT:    lea %s0, buf@lo
30 ; CHECK-NEXT:    and %s0, %s0, (32)0
31 ; CHECK-NEXT:    lea.sl %s0, buf@hi(, %s0)
32 ; CHECK-NEXT:    st %s9, (, %s0)
33 ; CHECK-NEXT:    st %s11, 16(, %s0)
34 ; CHECK-NEXT:    lea %s1, .LBB{{[0-9]+}}_3@lo
35 ; CHECK-NEXT:    and %s1, %s1, (32)0
36 ; CHECK-NEXT:    lea.sl %s1, .LBB{{[0-9]+}}_3@hi(, %s1)
37 ; CHECK-NEXT:    st %s1, 8(, %s0)
38 ; CHECK-NEXT:    # EH_SJlJ_SETUP .LBB{{[0-9]+}}_3
39 ; CHECK-NEXT:  # %bb.1:
40 ; CHECK-NEXT:    lea %s0, 0
41 ; CHECK-NEXT:    br.l.t .LBB{{[0-9]+}}_2
42 ; CHECK-NEXT:  .LBB{{[0-9]+}}_3: # Block address taken
43 ; CHECK-NEXT:    lea %s0, 1
44 ; CHECK-NEXT:  .LBB{{[0-9]+}}_2:
45 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
46 ; CHECK-NEXT:    ld %s33, 168(, %s9) # 8-byte Folded Reload
47 ; CHECK-NEXT:    ld %s32, 160(, %s9) # 8-byte Folded Reload
48 ; CHECK-NEXT:    ld %s31, 152(, %s9) # 8-byte Folded Reload
49 ; CHECK-NEXT:    ld %s30, 144(, %s9) # 8-byte Folded Reload
50 ; CHECK-NEXT:    ld %s29, 136(, %s9) # 8-byte Folded Reload
51 ; CHECK-NEXT:    ld %s28, 128(, %s9) # 8-byte Folded Reload
52 ; CHECK-NEXT:    ld %s27, 120(, %s9) # 8-byte Folded Reload
53 ; CHECK-NEXT:    ld %s26, 112(, %s9) # 8-byte Folded Reload
54 ; CHECK-NEXT:    ld %s25, 104(, %s9) # 8-byte Folded Reload
55 ; CHECK-NEXT:    ld %s24, 96(, %s9) # 8-byte Folded Reload
56 ; CHECK-NEXT:    ld %s23, 88(, %s9) # 8-byte Folded Reload
57 ; CHECK-NEXT:    ld %s22, 80(, %s9) # 8-byte Folded Reload
58 ; CHECK-NEXT:    ld %s21, 72(, %s9) # 8-byte Folded Reload
59 ; CHECK-NEXT:    ld %s20, 64(, %s9) # 8-byte Folded Reload
60 ; CHECK-NEXT:    ld %s19, 56(, %s9) # 8-byte Folded Reload
61 ; CHECK-NEXT:    ld %s18, 48(, %s9) # 8-byte Folded Reload
62 ; CHECK-NEXT:    or %s11, 0, %s9
64 ; PIC-LABEL: t_setjmp:
65 ; PIC:       # %bb.0:
66 ; PIC-NEXT:    st %s9, (, %s11)
67 ; PIC-NEXT:    st %s10, 8(, %s11)
68 ; PIC-NEXT:    st %s15, 24(, %s11)
69 ; PIC-NEXT:    st %s16, 32(, %s11)
70 ; PIC-NEXT:    or %s9, 0, %s11
71 ; PIC-NEXT:    lea %s11, -176(, %s11)
72 ; PIC-NEXT:    brge.l %s11, %s8, .LBB0_5
73 ; PIC-NEXT:  # %bb.4:
74 ; PIC-NEXT:    ld %s61, 24(, %s14)
75 ; PIC-NEXT:    or %s62, 0, %s0
76 ; PIC-NEXT:    lea %s63, 315
77 ; PIC-NEXT:    shm.l %s63, (%s61)
78 ; PIC-NEXT:    shm.l %s8, 8(%s61)
79 ; PIC-NEXT:    shm.l %s11, 16(%s61)
80 ; PIC-NEXT:    monc
81 ; PIC-NEXT:    or %s0, 0, %s62
82 ; PIC-NEXT:  .LBB0_5:
83 ; PIC-NEXT:    st %s18, 48(, %s9) # 8-byte Folded Spill
84 ; PIC-NEXT:    st %s19, 56(, %s9) # 8-byte Folded Spill
85 ; PIC-NEXT:    st %s20, 64(, %s9) # 8-byte Folded Spill
86 ; PIC-NEXT:    st %s21, 72(, %s9) # 8-byte Folded Spill
87 ; PIC-NEXT:    st %s22, 80(, %s9) # 8-byte Folded Spill
88 ; PIC-NEXT:    st %s23, 88(, %s9) # 8-byte Folded Spill
89 ; PIC-NEXT:    st %s24, 96(, %s9) # 8-byte Folded Spill
90 ; PIC-NEXT:    st %s25, 104(, %s9) # 8-byte Folded Spill
91 ; PIC-NEXT:    st %s26, 112(, %s9) # 8-byte Folded Spill
92 ; PIC-NEXT:    st %s27, 120(, %s9) # 8-byte Folded Spill
93 ; PIC-NEXT:    st %s28, 128(, %s9) # 8-byte Folded Spill
94 ; PIC-NEXT:    st %s29, 136(, %s9) # 8-byte Folded Spill
95 ; PIC-NEXT:    st %s30, 144(, %s9) # 8-byte Folded Spill
96 ; PIC-NEXT:    st %s31, 152(, %s9) # 8-byte Folded Spill
97 ; PIC-NEXT:    st %s32, 160(, %s9) # 8-byte Folded Spill
98 ; PIC-NEXT:    st %s33, 168(, %s9) # 8-byte Folded Spill
99 ; PIC-NEXT:    lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)
100 ; PIC-NEXT:    and %s15, %s15, (32)0
101 ; PIC-NEXT:    sic %s16
102 ; PIC-NEXT:    lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)
103 ; PIC-NEXT:    lea %s0, buf@got_lo
104 ; PIC-NEXT:    and %s0, %s0, (32)0
105 ; PIC-NEXT:    lea.sl %s0, buf@got_hi(, %s0)
106 ; PIC-NEXT:    ld %s0, (%s0, %s15)
107 ; PIC-NEXT:    st %s9, (, %s0)
108 ; PIC-NEXT:    st %s11, 16(, %s0)
109 ; PIC-NEXT:    lea %s1, .LBB0_3@gotoff_lo
110 ; PIC-NEXT:    and %s1, %s1, (32)0
111 ; PIC-NEXT:    lea.sl %s1, .LBB0_3@gotoff_hi(%s1, %s15)
112 ; PIC-NEXT:    st %s1, 8(, %s0)
113 ; PIC-NEXT:    # EH_SJlJ_SETUP .LBB0_3
114 ; PIC-NEXT:  # %bb.1:
115 ; PIC-NEXT:    lea %s0, 0
116 ; PIC-NEXT:    br.l.t .LBB0_2
117 ; PIC-NEXT:  .LBB0_3: # Block address taken
118 ; PIC-NEXT:    lea %s0, 1
119 ; PIC-NEXT:  .LBB0_2:
120 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
121 ; PIC-NEXT:    ld %s33, 168(, %s9) # 8-byte Folded Reload
122 ; PIC-NEXT:    ld %s32, 160(, %s9) # 8-byte Folded Reload
123 ; PIC-NEXT:    ld %s31, 152(, %s9) # 8-byte Folded Reload
124 ; PIC-NEXT:    ld %s30, 144(, %s9) # 8-byte Folded Reload
125 ; PIC-NEXT:    ld %s29, 136(, %s9) # 8-byte Folded Reload
126 ; PIC-NEXT:    ld %s28, 128(, %s9) # 8-byte Folded Reload
127 ; PIC-NEXT:    ld %s27, 120(, %s9) # 8-byte Folded Reload
128 ; PIC-NEXT:    ld %s26, 112(, %s9) # 8-byte Folded Reload
129 ; PIC-NEXT:    ld %s25, 104(, %s9) # 8-byte Folded Reload
130 ; PIC-NEXT:    ld %s24, 96(, %s9) # 8-byte Folded Reload
131 ; PIC-NEXT:    ld %s23, 88(, %s9) # 8-byte Folded Reload
132 ; PIC-NEXT:    ld %s22, 80(, %s9) # 8-byte Folded Reload
133 ; PIC-NEXT:    ld %s21, 72(, %s9) # 8-byte Folded Reload
134 ; PIC-NEXT:    ld %s20, 64(, %s9) # 8-byte Folded Reload
135 ; PIC-NEXT:    ld %s19, 56(, %s9) # 8-byte Folded Reload
136 ; PIC-NEXT:    ld %s18, 48(, %s9) # 8-byte Folded Reload
137 ; PIC-NEXT:    or %s11, 0, %s9
138 ; PIC-NEXT:    ld %s16, 32(, %s11)
139 ; PIC-NEXT:    ld %s15, 24(, %s11)
140 ; PIC-NEXT:    ld %s10, 8(, %s11)
141 ; PIC-NEXT:    ld %s9, (, %s11)
142 ; PIC-NEXT:    b.l.t (, %s10)
143   %1 = call ptr @llvm.frameaddress(i32 0)
144   store ptr %1, ptr @buf, align 8
145   %2 = call ptr @llvm.stacksave()
146   store ptr %2, ptr getelementptr inbounds (ptr, ptr @buf, i64 2), align 8
147   %3 = call i32 @llvm.eh.sjlj.setjmp(ptr @buf)
148   ret i32 %3
151 ; Function Attrs: nounwind readnone
152 declare ptr @llvm.frameaddress(i32)
154 ; Function Attrs: nounwind
155 declare ptr @llvm.stacksave()
157 ; Function Attrs: nounwind
158 declare i32 @llvm.eh.sjlj.setjmp(ptr)
160 ; Function Attrs: noinline nounwind optnone
161 define void @t_longjmp() {
162 ; CHECK-LABEL: t_longjmp:
163 ; CHECK:       .LBB{{[0-9]+}}_2:
164 ; CHECK-NEXT:    lea %s0, buf@lo
165 ; CHECK-NEXT:    and %s0, %s0, (32)0
166 ; CHECK-NEXT:    lea.sl %s0, buf@hi(, %s0)
167 ; CHECK-NEXT:    ld %s9, (, %s0)
168 ; CHECK-NEXT:    ld %s1, 8(, %s0)
169 ; CHECK-NEXT:    or %s10, 0, %s0
170 ; CHECK-NEXT:    ld %s11, 16(, %s0)
171 ; CHECK-NEXT:    b.l.t (, %s1)
173 ; PIC-LABEL: t_longjmp:
174 ; PIC:       # %bb.0:
175 ; PIC-NEXT:    st %s9, (, %s11)
176 ; PIC-NEXT:    st %s10, 8(, %s11)
177 ; PIC-NEXT:    st %s15, 24(, %s11)
178 ; PIC-NEXT:    st %s16, 32(, %s11)
179 ; PIC-NEXT:    or %s9, 0, %s11
180 ; PIC-NEXT:    lea %s11, -176(, %s11)
181 ; PIC-NEXT:    brge.l.t %s11, %s8, .LBB1_2
182 ; PIC-NEXT:  # %bb.1:
183 ; PIC-NEXT:    ld %s61, 24(, %s14)
184 ; PIC-NEXT:    or %s62, 0, %s0
185 ; PIC-NEXT:    lea %s63, 315
186 ; PIC-NEXT:    shm.l %s63, (%s61)
187 ; PIC-NEXT:    shm.l %s8, 8(%s61)
188 ; PIC-NEXT:    shm.l %s11, 16(%s61)
189 ; PIC-NEXT:    monc
190 ; PIC-NEXT:    or %s0, 0, %s62
191 ; PIC-NEXT:  .LBB1_2:
192 ; PIC-NEXT:    lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)
193 ; PIC-NEXT:    and %s15, %s15, (32)0
194 ; PIC-NEXT:    sic %s16
195 ; PIC-NEXT:    lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)
196 ; PIC-NEXT:    lea %s0, buf@got_lo
197 ; PIC-NEXT:    and %s0, %s0, (32)0
198 ; PIC-NEXT:    lea.sl %s0, buf@got_hi(, %s0)
199 ; PIC-NEXT:    ld %s0, (%s0, %s15)
200 ; PIC-NEXT:    ld %s9, (, %s0)
201 ; PIC-NEXT:    ld %s1, 8(, %s0)
202 ; PIC-NEXT:    or %s10, 0, %s0
203 ; PIC-NEXT:    ld %s11, 16(, %s0)
204 ; PIC-NEXT:    b.l.t (, %s1)
205   call void @llvm.eh.sjlj.longjmp(ptr @buf)
206   unreachable
207                                                   ; No predecessors!
208   ret void
211 ; Function Attrs: noreturn nounwind
212 declare void @llvm.eh.sjlj.longjmp(ptr)