| ; RUN: llc < %s -mtriple=x86_64-scei-ps4 | FileCheck %s |
| |
| declare i32 @personality(...) |
| |
| ; Check that after the (implicitly noreturn) unwind call, there is |
| ; another instruction. It was easy to produce 'ud2' so we check for that. |
| define void @foo1() personality i32 (...)* @personality { |
| ; CHECK-LABEL: foo1: |
| ; CHECK: .cfi_startproc |
| ; CHECK: callq bar |
| ; CHECK: retq |
| ; Check for 'ud2' between noreturn call and function end. |
| ; CHECK: callq _Unwind_Resume |
| ; CHECK-NEXT: ud2 |
| ; CHECK-NEXT: .Lfunc_end0: |
| invoke void @bar() |
| to label %normal |
| unwind label %catch |
| normal: |
| ret void |
| catch: |
| %1 = landingpad { i8*, i32 } cleanup |
| resume { i8*, i32 } %1 |
| } |
| |
| declare void @bar() #0 |
| |
| ; Similar check after an explicit noreturn call. |
| define void @foo2() { |
| ; CHECK-LABEL: foo2: |
| ; CHECK: callq bar |
| ; CHECK-NEXT: ud2 |
| ; CHECK-NEXT: .Lfunc_end1: |
| tail call void @bar() |
| unreachable |
| } |
| |
| attributes #0 = { noreturn } |