[lldb] Make sure Blocks always have a parent (#117683)
[llvm-project.git] / llvm / test / CodeGen / SystemZ / zos-landingpad.ll
blob63c332eb423e3f710ccfb9e71106f550e0d54d57
1 ; RUN: llc < %s -mtriple=s390x-none-zos -mcpu=z10 | FileCheck %s
3 ; Ensures that landingpad instructions use the right Exception Pointer
4 ; and Exception Selector registers, and that the exception table is emitted.
6 declare void @callee()
7 declare void @passeh(ptr, i32) noreturn
8 declare i32 @__zos_cxx_personality_v2(...)
10 define void @test1() uwtable personality ptr @__zos_cxx_personality_v2 {
11 entry:
12   %ehptr = alloca ptr, align 8
13   %ehsel = alloca i32, align 8
14   invoke void @callee() to label %done unwind label %lpad
15 done:
16   ret void
17 ; Match the return instruction.
18 ; CHECK: b 2(7)
19 lpad:
20   %0 = landingpad { ptr, i32 } cleanup
21 ; The Exception Pointer is %r1; the Exception Selector, %r2.
22 ; CHECK: L#BB{{[^%]*}} %lpad
23 ; CHECK-DAG: stg 1,{{.*}}
24 ; CHECK-DAG: st 2,{{.*}}
25   %1 = extractvalue { ptr, i32 } %0, 0
26   %2 = extractvalue { ptr, i32 } %0, 1
27   store ptr %1, ptr %ehptr, align 8
28   store i32 %2, ptr %ehsel, align 8
29   call void @passeh(ptr %1, i32 %2)
30   unreachable
33 ; Check that offsets to the FD of the personality routine and LSDA are emitted in PPA1
34 ; CHECK: .byte 145 {{.*PPA1 Flags}}
35 ; CHECK: Bit 3: 1 = C++ EH block
36 ; TODO: Emit the value instead of a dummy value.
37 ; CHECK: Personality routine
38 ; CHECK: LSDA location
39 ; Check that the exception table is emitted into .lsda section.
40 ; CHECK: .section ".gcc_exception_table.test1"
41 ; CHECK: GCC_except_table0: