xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/x32-landingpad.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-none-none-gnux32 -mcpu=generic | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-none-none-gnux32 -mcpu=generic -fast-isel | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker;
4*9880d681SAndroid Build Coastguard Worker; Ensures that landingpad instructions in x32 use the right Exception Pointer
5*9880d681SAndroid Build Coastguard Worker; and Exception Selector registers.
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdeclare void @foo()
8*9880d681SAndroid Build Coastguard Workerdeclare void @bar(i8*, i32) noreturn
9*9880d681SAndroid Build Coastguard Workerdeclare i32 @__gxx_personality_v0(...)
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerdefine void @test1() uwtable personality i32 (...)* @__gxx_personality_v0 {
12*9880d681SAndroid Build Coastguard Workerentry:
13*9880d681SAndroid Build Coastguard Worker  invoke void @foo() to label %done unwind label %lpad
14*9880d681SAndroid Build Coastguard Workerdone:
15*9880d681SAndroid Build Coastguard Worker  ret void
16*9880d681SAndroid Build Coastguard Workerlpad:
17*9880d681SAndroid Build Coastguard Worker  %0 = landingpad { i8*, i32 } cleanup
18*9880d681SAndroid Build Coastguard Worker; The Exception Pointer is %eax; the Exception Selector, %edx.
19*9880d681SAndroid Build Coastguard Worker; CHECK: LBB{{[^%]*}} %lpad
20*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: movl %eax, {{.*}}
21*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: movl %edx, {{.*}}
22*9880d681SAndroid Build Coastguard Worker; CHECK: callq bar
23*9880d681SAndroid Build Coastguard Worker  %1 = extractvalue { i8*, i32 } %0, 0
24*9880d681SAndroid Build Coastguard Worker  %2 = extractvalue { i8*, i32 } %0, 1
25*9880d681SAndroid Build Coastguard Worker  call void @bar(i8* %1, i32 %2)
26*9880d681SAndroid Build Coastguard Worker  unreachable
27*9880d681SAndroid Build Coastguard Worker}
28