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