1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=x86_64-pc-windows-msvc -verify-machineinstrs < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; We should store -2 into UnwindHelp in a slot immediately after the last XMM 4*9880d681SAndroid Build Coastguard Worker; CSR save. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdeclare void @g() 7*9880d681SAndroid Build Coastguard Workerdeclare i32 @__CxxFrameHandler3(...) 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker@fp_global = global double 0.0 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine void @f() personality i32 (...)* @__CxxFrameHandler3 { 12*9880d681SAndroid Build Coastguard Worker %v = load double, double* @fp_global 13*9880d681SAndroid Build Coastguard Worker call void @g() 14*9880d681SAndroid Build Coastguard Worker %v1 = fadd double %v, 1.0 15*9880d681SAndroid Build Coastguard Worker store double %v1, double* @fp_global 16*9880d681SAndroid Build Coastguard Worker invoke void @g() 17*9880d681SAndroid Build Coastguard Worker to label %return unwind label %catch.dispatch 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerreturn: 20*9880d681SAndroid Build Coastguard Worker ret void 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workercatch.dispatch: 23*9880d681SAndroid Build Coastguard Worker %cs1 = catchswitch within none [label %catch] unwind to caller 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workercatch: 26*9880d681SAndroid Build Coastguard Worker %p = catchpad within %cs1 [i8* null, i32 64, i8* null] 27*9880d681SAndroid Build Coastguard Worker catchret from %p to label %return 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; CHECK: f: # @f 31*9880d681SAndroid Build Coastguard Worker; CHECK: pushq %rbp 32*9880d681SAndroid Build Coastguard Worker; CHECK: .seh_pushreg 5 33*9880d681SAndroid Build Coastguard Worker; CHECK: subq $64, %rsp 34*9880d681SAndroid Build Coastguard Worker; CHECK: .seh_stackalloc 64 35*9880d681SAndroid Build Coastguard Worker; CHECK: leaq 64(%rsp), %rbp 36*9880d681SAndroid Build Coastguard Worker; CHECK: .seh_setframe 5, 64 37*9880d681SAndroid Build Coastguard Worker; CHECK: movaps %xmm6, -16(%rbp) # 16-byte Spill 38*9880d681SAndroid Build Coastguard Worker; CHECK: .seh_savexmm 6, 48 39*9880d681SAndroid Build Coastguard Worker; CHECK: .seh_endprologue 40*9880d681SAndroid Build Coastguard Worker; CHECK: movq $-2, -24(%rbp) 41*9880d681SAndroid Build Coastguard Worker; CHECK: movsd fp_global(%rip), %xmm6 # xmm6 = mem[0],zero 42*9880d681SAndroid Build Coastguard Worker; CHECK: callq g 43*9880d681SAndroid Build Coastguard Worker; CHECK: addsd __real@3ff0000000000000(%rip), %xmm6 44*9880d681SAndroid Build Coastguard Worker; CHECK: movsd %xmm6, fp_global(%rip) 45*9880d681SAndroid Build Coastguard Worker; CHECK: .Ltmp{{.*}} 46*9880d681SAndroid Build Coastguard Worker; CHECK: callq g 47*9880d681SAndroid Build Coastguard Worker; CHECK: .Ltmp{{.*}} 48*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB{{.*}} # Block address taken 49*9880d681SAndroid Build Coastguard Worker; CHECK: movaps -16(%rbp), %xmm6 50*9880d681SAndroid Build Coastguard Worker; CHECK: addq $64, %rsp 51*9880d681SAndroid Build Coastguard Worker; CHECK: popq %rbp 52*9880d681SAndroid Build Coastguard Worker; CHECK: retq 53*9880d681SAndroid Build Coastguard Worker; CHECK: .seh_handlerdata 54