xref: /llvm-project/llvm/test/CodeGen/X86/ps4-noreturn.ll (revision 2f448bf509432c1a19ec46ab8cbc7353c03c6280)
1; RUN: llc < %s -mtriple=x86_64-scei-ps4 | FileCheck %s
2; RUN: llc < %s -mtriple=x86_64-sie-ps5  | FileCheck %s
3
4declare i32 @personality(...)
5
6; Check that after the (implicitly noreturn) unwind call, there is
7; another instruction. It was easy to produce 'ud2' so we check for that.
8define void @foo1() personality ptr @personality {
9; CHECK-LABEL: foo1:
10; CHECK: .cfi_startproc
11; CHECK: callq bar
12; CHECK: retq
13; Check for 'ud2' between noreturn call and function end.
14; CHECK: callq _Unwind_Resume
15; CHECK-NEXT: ud2
16; CHECK-NEXT: .Lfunc_end0:
17    invoke void @bar()
18        to label %normal
19        unwind label %catch
20normal:
21    ret void
22catch:
23    %1 = landingpad { ptr, i32 } cleanup
24    resume { ptr, i32 } %1
25}
26
27declare void @bar() #0
28
29; Similar check after an explicit noreturn call.
30define void @foo2() {
31; CHECK-LABEL: foo2:
32; CHECK: callq bar
33; CHECK-NEXT: ud2
34; CHECK-NEXT: .Lfunc_end1:
35    tail call void @bar()
36    unreachable
37}
38
39attributes #0 = { noreturn }
40