73 lines · plain
1; RUN: llc -mtriple=x86_64-pc-windows-msvc -verify-machineinstrs < %s | FileCheck %s2 3; We should store -2 into UnwindHelp in a slot immediately after the last XMM4; CSR save.5 6declare void @g()7declare i32 @__CxxFrameHandler3(...)8 9@fp_global = global double 0.010 11define void @f() personality ptr @__CxxFrameHandler3 {12 %v = load double, ptr @fp_global13 call void @g()14 %v1 = fadd double %v, 1.015 store double %v1, ptr @fp_global16 invoke void @g()17 to label %return unwind label %catch.dispatch18 19return:20 ret void21 22catch.dispatch:23 %cs1 = catchswitch within none [label %catch] unwind to caller24 25catch:26 %p = catchpad within %cs1 [ptr null, i32 64, ptr null]27 catchret from %p to label %return28}29 30; CHECK: f: # @f31; CHECK: pushq %rbp32; CHECK: .seh_pushreg %rbp33; CHECK: subq $64, %rsp34; CHECK: .seh_stackalloc 6435; CHECK: leaq 64(%rsp), %rbp36; CHECK: .seh_setframe %rbp, 6437; CHECK: movaps %xmm6, -16(%rbp) # 16-byte Spill38; CHECK: .seh_savexmm %xmm6, 4839; CHECK: .seh_endprologue40; CHECK: movq $-2, -24(%rbp)41; CHECK: movsd fp_global(%rip), %xmm6 # xmm6 = mem[0],zero42; CHECK: callq g43; CHECK: addsd __real@3ff0000000000000(%rip), %xmm644; CHECK: movsd %xmm6, fp_global(%rip)45; CHECK: .Ltmp{{.*}}46; CHECK: callq g47; CHECK: .Ltmp{{.*}}48; CHECK: .LBB{{.*}} # Block address taken49; CHECK: movaps -16(%rbp), %xmm650; CHECK: .seh_startepilogue51; CHECK: addq $64, %rsp52; CHECK: popq %rbp53; CHECK: .seh_endepilogue54; CHECK: retq55; CHECK: .seh_handlerdata56; CHECK: # %catch57; CHECK: movq %rdx, 16(%rsp)58; CHECK: pushq %rbp59; CHECK: .seh_pushreg %rbp60; CHECK: subq $48, %rsp61; CHECK: .seh_stackalloc 4862; CHECK: leaq 64(%rdx), %rbp63; CHECK: movapd %xmm6, 32(%rsp)64; CHECK: .seh_savexmm %xmm6, 3265; CHECK: .seh_endprologue66; CHECK: movapd 32(%rsp), %xmm667; CHECK: leaq .LBB0_1(%rip), %rax68; CHECK: .seh_startepilogue69; CHECK: addq $48, %rsp70; CHECK: popq %rbp71; CHECK: .seh_endepilogue72; CHECK: retq # CATCHRET73