@@ -96,90 +96,6 @@ continuebb:
96
96
ret i32 %tmp0
97
97
}
98
98
99
- ; DARWIN-LABEL: _test_invoke_ia_0_direct:
100
- ; DARWIN-NEXT: [[FNBEGIN:L.*]]:
101
- ; DARWIN-NEXT: .cfi_startproc
102
- ; DARWIN-NEXT: .cfi_personality 155, ___gxx_personality_v0
103
- ; DARWIN-NEXT: .cfi_lsda 16, [[EXCEPT:Lexception[0-9]+]]
104
- ; DARWIN-NEXT: ; %bb.0:
105
- ; DARWIN-NEXT: stp x20, x19, [sp, #-32]!
106
- ; DARWIN-NEXT: stp x29, x30, [sp, #16]
107
- ; DARWIN-NEXT: .cfi_def_cfa_offset 32
108
- ; DARWIN-NEXT: .cfi_offset w30, -8
109
- ; DARWIN-NEXT: .cfi_offset w29, -16
110
- ; DARWIN-NEXT: .cfi_offset w19, -24
111
- ; DARWIN-NEXT: .cfi_offset w20, -32
112
- ; DARWIN-NEXT: [[PRECALL:L.*]]:
113
- ; DARWIN-NEXT: bl _baz
114
-
115
- ; DARWIN-SDAG-NEXT: [[POSTCALL:L.*]]:
116
- ; DARWIN-SDAG-NEXT: ; %bb.1:
117
- ; DARWIN-SDAG-NEXT: mov x19, x0
118
-
119
- ; DARWIN-GISEL-NEXT: mov x19, x0
120
- ; DARWIN-GISEL-NEXT: [[POSTCALL:L.*]]:
121
-
122
- ; DARWIN-NEXT: [[CALLBB:L.*]]:
123
- ; DARWIN-NEXT: bl _foo
124
- ; DARWIN-NEXT: mov x0, x19
125
- ; DARWIN-NEXT: ldp x29, x30, [sp, #16]
126
- ; DARWIN-NEXT: ldp x20, x19, [sp], #32
127
- ; DARWIN-NEXT: ret
128
- ; DARWIN-NEXT: [[LPADBB:LBB[0-9_]+]]:
129
- ; DARWIN-NEXT: [[LPAD:L.*]]:
130
- ; DARWIN-NEXT: mov w19, #-1
131
- ; DARWIN-NEXT: b [[CALLBB]]
132
-
133
- ; ELF-LABEL: test_invoke_ia_0_direct:
134
- ; ELF-NEXT: [[FNBEGIN:.L.*]]:
135
- ; ELF-NEXT: .cfi_startproc
136
- ; ELF-NEXT: .cfi_personality 156, DW.ref.__gxx_personality_v0
137
- ; ELF-NEXT: .cfi_lsda 28, [[EXCEPT:.Lexception[0-9]+]]
138
- ; ELF-NEXT: // %bb.0:
139
- ; ELF-NEXT: stp x30, x19, [sp, #-16]!
140
- ; ELF-NEXT: .cfi_def_cfa_offset 16
141
- ; ELF-NEXT: .cfi_offset w19, -8
142
- ; ELF-NEXT: .cfi_offset w30, -16
143
- ; ELF-NEXT: [[PRECALL:.L.*]]:
144
- ; ELF-NEXT: bl baz
145
-
146
- ; ELF-SDAG-NEXT: [[POSTCALL:.L.*]]:
147
- ; ELF-SDAG-NEXT: // %bb.1:
148
- ; ELF-SDAG-NEXT: mov w19, w0
149
-
150
- ; ELF-GISEL-NEXT: mov w19, w0
151
- ; ELF-GISEL-NEXT: [[POSTCALL:.L.*]]:
152
-
153
- ; ELF-NEXT: [[CALLBB:.L.*]]:
154
- ; ELF-NEXT: bl foo
155
- ; ELF-NEXT: mov w0, w19
156
- ; ELF-NEXT: ldp x30, x19, [sp], #16
157
- ; ELF-NEXT: ret
158
- ; ELF-NEXT: [[LPADBB:.LBB[0-9_]+]]:
159
- ; ELF-NEXT: [[LPAD:.L.*]]:
160
- ; ELF-NEXT: mov w19, #-1
161
- ; ELF-NEXT: b [[CALLBB]]
162
-
163
- ; CHECK-LABEL: GCC_except_table{{.*}}:
164
- ; CHECK-NEXT: [[EXCEPT]]:
165
- ; CHECK: .uleb128 [[POSTCALL]]-[[PRECALL]] {{.*}} Call between [[PRECALL]] and [[POSTCALL]]
166
- ; CHECK-NEXT: .uleb128 [[LPAD]]-[[FNBEGIN]] {{.*}} jumps to [[LPAD]]
167
- ; CHECK-NEXT: .byte 0 {{.*}} On action: cleanup
168
-
169
- define i32 @test_invoke_ia_0_direct () #0 personality ptr @__gxx_personality_v0 {
170
- %tmp0 = invoke i32 ptr auth (ptr @baz , i32 0 )() [ "ptrauth" (i32 0 , i64 0 ) ] to label %continuebb
171
- unwind label %unwindbb
172
-
173
- unwindbb:
174
- %tmp1 = landingpad { ptr , i32 } cleanup
175
- call void @foo ()
176
- ret i32 -1
177
-
178
- continuebb:
179
- call void @foo ()
180
- ret i32 %tmp0
181
- }
182
-
183
99
@_ZTIPKc = external constant ptr
184
100
@hello_str = private unnamed_addr constant [6 x i8 ] c "hello\00 " , align 1
185
101
@@ -314,9 +230,6 @@ continuebb:
314
230
315
231
; CHECK-NEXT: [[TT]]:
316
232
317
- ; ELF-LABEL: .L_ZTIPKc.DW.stub:
318
- ; ELF-NEXT: .xword _ZTIPKc
319
-
320
233
define void @test_invoke_ib_42_catch (ptr %fptr ) #0 personality ptr @__gxx_personality_v0 {
321
234
%tmp0 = call ptr @__cxa_allocate_exception (i64 8 )
322
235
store ptr getelementptr inbounds ([6 x i8 ], ptr @hello_str , i64 0 , i64 0 ), ptr %tmp0 , align 8
@@ -347,6 +260,205 @@ continuebb:
347
260
unreachable
348
261
}
349
262
263
+ ; DARWIN-LABEL: _test_invoke_ia_0_direct:
264
+ ; DARWIN-NEXT: [[FNBEGIN:L.*]]:
265
+ ; DARWIN-NEXT: .cfi_startproc
266
+ ; DARWIN-NEXT: .cfi_personality 155, ___gxx_personality_v0
267
+ ; DARWIN-NEXT: .cfi_lsda 16, [[EXCEPT:Lexception[0-9]+]]
268
+ ; DARWIN-NEXT: ; %bb.0:
269
+ ; DARWIN-NEXT: stp x20, x19, [sp, #-32]!
270
+ ; DARWIN-NEXT: stp x29, x30, [sp, #16]
271
+ ; DARWIN-NEXT: .cfi_def_cfa_offset 32
272
+ ; DARWIN-NEXT: .cfi_offset w30, -8
273
+ ; DARWIN-NEXT: .cfi_offset w29, -16
274
+ ; DARWIN-NEXT: .cfi_offset w19, -24
275
+ ; DARWIN-NEXT: .cfi_offset w20, -32
276
+ ; DARWIN-NEXT: [[PRECALL:L.*]]:
277
+ ; DARWIN-NEXT: bl _baz
278
+
279
+ ; DARWIN-SDAG-NEXT: [[POSTCALL:L.*]]:
280
+ ; DARWIN-SDAG-NEXT: ; %bb.1:
281
+ ; DARWIN-SDAG-NEXT: mov x19, x0
282
+
283
+ ; DARWIN-GISEL-NEXT: mov x19, x0
284
+ ; DARWIN-GISEL-NEXT: [[POSTCALL:L.*]]:
285
+
286
+ ; DARWIN-NEXT: [[CALLBB:L.*]]:
287
+ ; DARWIN-NEXT: bl _foo
288
+ ; DARWIN-NEXT: mov x0, x19
289
+ ; DARWIN-NEXT: ldp x29, x30, [sp, #16]
290
+ ; DARWIN-NEXT: ldp x20, x19, [sp], #32
291
+ ; DARWIN-NEXT: ret
292
+ ; DARWIN-NEXT: [[LPADBB:LBB[0-9_]+]]:
293
+ ; DARWIN-NEXT: [[LPAD:L.*]]:
294
+ ; DARWIN-NEXT: mov w19, #-1
295
+ ; DARWIN-NEXT: b [[CALLBB]]
296
+
297
+ ; ELF-LABEL: test_invoke_ia_0_direct:
298
+ ; ELF-NEXT: [[FNBEGIN:.L.*]]:
299
+ ; ELF-NEXT: .cfi_startproc
300
+ ; ELF-NEXT: .cfi_personality 156, DW.ref.__gxx_personality_v0
301
+ ; ELF-NEXT: .cfi_lsda 28, [[EXCEPT:.Lexception[0-9]+]]
302
+ ; ELF-NEXT: // %bb.0:
303
+ ; ELF-NEXT: stp x30, x19, [sp, #-16]!
304
+ ; ELF-NEXT: .cfi_def_cfa_offset 16
305
+ ; ELF-NEXT: .cfi_offset w19, -8
306
+ ; ELF-NEXT: .cfi_offset w30, -16
307
+ ; ELF-NEXT: [[PRECALL:.L.*]]:
308
+ ; ELF-NEXT: bl baz
309
+
310
+ ; ELF-SDAG-NEXT: [[POSTCALL:.L.*]]:
311
+ ; ELF-SDAG-NEXT: // %bb.1:
312
+ ; ELF-SDAG-NEXT: mov w19, w0
313
+
314
+ ; ELF-GISEL-NEXT: mov w19, w0
315
+ ; ELF-GISEL-NEXT: [[POSTCALL:.L.*]]:
316
+
317
+ ; ELF-NEXT: [[CALLBB:.L.*]]:
318
+ ; ELF-NEXT: bl foo
319
+ ; ELF-NEXT: mov w0, w19
320
+ ; ELF-NEXT: ldp x30, x19, [sp], #16
321
+ ; ELF-NEXT: ret
322
+ ; ELF-NEXT: [[LPADBB:.LBB[0-9_]+]]:
323
+ ; ELF-NEXT: [[LPAD:.L.*]]:
324
+ ; ELF-NEXT: mov w19, #-1
325
+ ; ELF-NEXT: b [[CALLBB]]
326
+
327
+ ; CHECK-LABEL: GCC_except_table{{.*}}:
328
+ ; CHECK-NEXT: [[EXCEPT]]:
329
+ ; CHECK: .uleb128 [[POSTCALL]]-[[PRECALL]] {{.*}} Call between [[PRECALL]] and [[POSTCALL]]
330
+ ; CHECK-NEXT: .uleb128 [[LPAD]]-[[FNBEGIN]] {{.*}} jumps to [[LPAD]]
331
+ ; CHECK-NEXT: .byte 0 {{.*}} On action: cleanup
332
+
333
+ define i32 @test_invoke_ia_0_direct () #0 personality ptr @__gxx_personality_v0 {
334
+ %tmp0 = invoke i32 ptr auth (ptr @baz , i32 0 )() [ "ptrauth" (i32 0 , i64 0 ) ] to label %continuebb
335
+ unwind label %unwindbb
336
+
337
+ unwindbb:
338
+ %tmp1 = landingpad { ptr , i32 } cleanup
339
+ call void @foo ()
340
+ ret i32 -1
341
+
342
+ continuebb:
343
+ call void @foo ()
344
+ ret i32 %tmp0
345
+ }
346
+
347
+ ; DARWIN-LABEL: _test_invoke_ib_2_direct_mismatch:
348
+ ; DARWIN-NEXT: [[FNBEGIN:L.*]]:
349
+ ; DARWIN-NEXT: .cfi_startproc
350
+ ; DARWIN-NEXT: .cfi_personality 155, ___gxx_personality_v0
351
+ ; DARWIN-NEXT: .cfi_lsda 16, [[EXCEPT:Lexception[0-9]+]]
352
+ ; DARWIN-NEXT: ; %bb.0:
353
+ ; DARWIN-NEXT: stp x20, x19, [sp, #-32]!
354
+ ; DARWIN-NEXT: stp x29, x30, [sp, #16]
355
+ ; DARWIN-NEXT: .cfi_def_cfa_offset 32
356
+ ; DARWIN-NEXT: .cfi_offset w30, -8
357
+ ; DARWIN-NEXT: .cfi_offset w29, -16
358
+ ; DARWIN-NEXT: .cfi_offset w19, -24
359
+ ; DARWIN-NEXT: .cfi_offset w20, -32
360
+
361
+ ; DARWIN-SDAG-NEXT: [[PRECALL:L.*]]:
362
+ ; DARWIN-SDAG-NEXT: adrp x16, _baz@GOTPAGE
363
+ ; DARWIN-SDAG-NEXT: ldr x16, [x16, _baz@GOTPAGEOFF]
364
+ ; DARWIN-SDAG-NEXT: mov x17, #1234
365
+ ; DARWIN-SDAG-NEXT: pacia x16, x17
366
+ ; DARWIN-SDAG-NEXT: mov x8, x16
367
+ ; DARWIN-SDAG-NEXT: mov x17, #2
368
+ ; DARWIN-SDAG-NEXT: blrab x8, x17
369
+ ; DARWIN-SDAG-NEXT: [[POSTCALL:L.*]]:
370
+ ; DARWIN-SDAG-NEXT: ; %bb.1:
371
+ ; DARWIN-SDAG-NEXT: mov x19, x0
372
+
373
+ ; DARWIN-GISEL-NEXT: adrp x16, _baz@GOTPAGE
374
+ ; DARWIN-GISEL-NEXT: ldr x16, [x16, _baz@GOTPAGEOFF]
375
+ ; DARWIN-GISEL-NEXT: mov x17, #1234
376
+ ; DARWIN-GISEL-NEXT: pacia x16, x17
377
+ ; DARWIN-GISEL-NEXT: mov x8, x16
378
+ ; DARWIN-GISEL-NEXT: [[PRECALL:L.*]]:
379
+ ; DARWIN-GISEL-NEXT: mov x17, #2
380
+ ; DARWIN-GISEL-NEXT: blrab x8, x17
381
+ ; DARWIN-GISEL-NEXT: mov x19, x0
382
+ ; DARWIN-GISEL-NEXT: [[POSTCALL:L.*]]:
383
+
384
+ ; DARWIN-NEXT: [[CALLBB:L.*]]:
385
+ ; DARWIN-NEXT: bl _foo
386
+ ; DARWIN-NEXT: mov x0, x19
387
+ ; DARWIN-NEXT: ldp x29, x30, [sp, #16]
388
+ ; DARWIN-NEXT: ldp x20, x19, [sp], #32
389
+ ; DARWIN-NEXT: ret
390
+ ; DARWIN-NEXT: [[LPADBB:LBB[0-9_]+]]:
391
+ ; DARWIN-NEXT: [[LPAD:L.*]]:
392
+ ; DARWIN-NEXT: mov w19, #-1
393
+ ; DARWIN-NEXT: b [[CALLBB]]
394
+
395
+ ; ELF-LABEL: test_invoke_ib_2_direct_mismatch:
396
+ ; ELF-NEXT: [[FNBEGIN:.L.*]]:
397
+ ; ELF-NEXT: .cfi_startproc
398
+ ; ELF-NEXT: .cfi_personality 156, DW.ref.__gxx_personality_v0
399
+ ; ELF-NEXT: .cfi_lsda 28, [[EXCEPT:.Lexception[0-9]+]]
400
+ ; ELF-NEXT: // %bb.0:
401
+ ; ELF-NEXT: stp x30, x19, [sp, #-16]!
402
+ ; ELF-NEXT: .cfi_def_cfa_offset 16
403
+ ; ELF-NEXT: .cfi_offset w19, -8
404
+ ; ELF-NEXT: .cfi_offset w30, -16
405
+
406
+ ; ELF-SDAG-NEXT: [[PRECALL:.L.*]]:
407
+ ; ELF-SDAG-NEXT: adrp x16, :got:baz
408
+ ; ELF-SDAG-NEXT: ldr x16, [x16, :got_lo12:baz]
409
+ ; ELF-SDAG-NEXT: mov x17, #1234
410
+ ; ELF-SDAG-NEXT: pacia x16, x17
411
+ ; ELF-SDAG-NEXT: mov x8, x16
412
+ ; ELF-SDAG-NEXT: mov x17, #2
413
+ ; ELF-SDAG-NEXT: blrab x8, x17
414
+ ; ELF-SDAG-NEXT: [[POSTCALL:.L.*]]:
415
+ ; ELF-SDAG-NEXT: // %bb.1:
416
+ ; ELF-SDAG-NEXT: mov w19, w0
417
+
418
+ ; ELF-GISEL-NEXT: adrp x16, :got:baz
419
+ ; ELF-GISEL-NEXT: ldr x16, [x16, :got_lo12:baz]
420
+ ; ELF-GISEL-NEXT: mov x17, #1234
421
+ ; ELF-GISEL-NEXT: pacia x16, x17
422
+ ; ELF-GISEL-NEXT: mov x8, x16
423
+ ; ELF-GISEL-NEXT: [[PRECALL:.L.*]]:
424
+ ; ELF-GISEL-NEXT: mov x17, #2
425
+ ; ELF-GISEL-NEXT: blrab x8, x17
426
+ ; ELF-GISEL-NEXT: mov w19, w0
427
+ ; ELF-GISEL-NEXT: [[POSTCALL:.L.*]]:
428
+
429
+ ; ELF-NEXT: [[CALLBB:.L.*]]:
430
+ ; ELF-NEXT: bl foo
431
+ ; ELF-NEXT: mov w0, w19
432
+ ; ELF-NEXT: ldp x30, x19, [sp], #16
433
+ ; ELF-NEXT: ret
434
+ ; ELF-NEXT: [[LPADBB:.LBB[0-9_]+]]:
435
+ ; ELF-NEXT: [[LPAD:.L.*]]:
436
+ ; ELF-NEXT: mov w19, #-1
437
+ ; ELF-NEXT: b [[CALLBB]]
438
+
439
+ ; CHECK-LABEL: GCC_except_table{{.*}}:
440
+ ; CHECK-NEXT: [[EXCEPT]]:
441
+ ; CHECK: .uleb128 [[POSTCALL]]-[[PRECALL]] {{.*}} Call between [[PRECALL]] and [[POSTCALL]]
442
+ ; CHECK-NEXT: .uleb128 [[LPAD]]-[[FNBEGIN]] {{.*}} jumps to [[LPAD]]
443
+ ; CHECK-NEXT: .byte 0 {{.*}} On action: cleanup
444
+
445
+ define i32 @test_invoke_ib_2_direct_mismatch () #0 personality ptr @__gxx_personality_v0 {
446
+ %tmp0 = invoke i32 ptr auth (ptr @baz , i32 0 , i64 1234 )() [ "ptrauth" (i32 1 , i64 2 ) ] to label %continuebb
447
+ unwind label %unwindbb
448
+
449
+ unwindbb:
450
+ %tmp1 = landingpad { ptr , i32 } cleanup
451
+ call void @foo ()
452
+ ret i32 -1
453
+
454
+ continuebb:
455
+ call void @foo ()
456
+ ret i32 %tmp0
457
+ }
458
+
459
+ ; ELF-LABEL: .L_ZTIPKc.DW.stub:
460
+ ; ELF-NEXT: .xword _ZTIPKc
461
+
350
462
declare void @foo ()
351
463
declare void @bar (ptr )
352
464
declare i32 @baz ()
0 commit comments