brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · ad675ab Raw
118 lines · plain
1; RUN: llc -mtriple=x86_64-pc-windows-msvc -mattr=+avx < %s | FileCheck %s2 3; void bar(int a, int b, int c, int d, int e);4; void baz(int x);5; 6; void foo(int a, int b, int c, int d, int e)7; {8;   __asm("nop" ::: "bx", "cx", "xmm5", "xmm6", "ymm7");9;   try {10;     bar(a, b, c, d, e);11;   }12;   catch (...) {13;     baz(a);14;     if (a)15;       __asm("nop" ::: "xmm8");16;   }17; }18 19%rtti.TypeDescriptor2 = type { ptr, ptr, [3 x i8] }20 21$"??_R0H@8" = comdat any22 23@"??_7type_info@@6B@" = external constant ptr24@"??_R0H@8" = linkonce_odr global %rtti.TypeDescriptor2 { ptr @"??_7type_info@@6B@", ptr null, [3 x i8] c".H\00" }, comdat25 26declare dso_local i32 @__CxxFrameHandler3(...)27declare dso_local void @"?bar@@YAXHHHHH@Z"(i32, i32, i32, i32, i32)28declare dso_local void @"?baz@@YAXH@Z"(i32)29 30define dso_local void @"?foo@@YAXHHHHH@Z"(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e) personality ptr @__CxxFrameHandler3 {31entry:32  %e.addr = alloca i32, align 433  %d.addr = alloca i32, align 434  %c.addr = alloca i32, align 435  %b.addr = alloca i32, align 436  %a.addr = alloca i32, align 437  store i32 %e, ptr %e.addr, align 438  store i32 %d, ptr %d.addr, align 439  store i32 %c, ptr %c.addr, align 440  store i32 %b, ptr %b.addr, align 441  store i32 %a, ptr %a.addr, align 442  call void asm sideeffect "nop", "~{bx},~{cx},~{xmm5},~{xmm6},~{ymm7}"()43  %0 = load i32, ptr %e.addr, align 444  %1 = load i32, ptr %d.addr, align 445  %2 = load i32, ptr %c.addr, align 446  %3 = load i32, ptr %b.addr, align 447  %4 = load i32, ptr %a.addr, align 448  invoke void @"?bar@@YAXHHHHH@Z"(i32 %4, i32 %3, i32 %2, i32 %1, i32 %0)49          to label %invoke.cont unwind label %catch.dispatch50 51catch.dispatch:                                   ; preds = %entry52  %5 = catchswitch within none [label %catch] unwind to caller53 54catch:                                            ; preds = %catch.dispatch55  %6 = catchpad within %5 [ptr null, i32 64, ptr null]56  %7 = load i32, ptr %a.addr, align 457  call void @"?baz@@YAXH@Z"(i32 %7) [ "funclet"(token %6) ]58  %8 = load i32, ptr %a.addr, align 459  %tobool = icmp ne i32 %8, 060  br i1 %tobool, label %if.then, label %if.end61 62if.then:                                          ; preds = %catch63  call void asm sideeffect "nop", "~{xmm8}"() [ "funclet"(token %6) ]64  br label %if.end65 66invoke.cont:                                      ; preds = %entry67  br label %try.cont68 69if.end:                                           ; preds = %if.then, %catch70  catchret from %6 to label %catchret.dest71 72catchret.dest:                                    ; preds = %if.end73  br label %try.cont74 75try.cont:                                         ; preds = %catchret.dest, %invoke.cont76  ret void77}78 79; CHECK: # %catch80; CHECK: movq    %rdx, 16(%rsp)81; CHECK: pushq   %rbp82; CHECK: .seh_pushreg %rbp83; CHECK: pushq   %rbx84; CHECK: .seh_pushreg %rbx85; CHECK: subq    $88, %rsp86; CHECK: .seh_stackalloc 8887; CHECK: leaq    112(%rdx), %rbp88; CHECK: vmovaps %xmm8, 32(%rsp)89; CHECK: .seh_savexmm %xmm8, 3290; CHECK: vmovaps %xmm7, 48(%rsp)91; CHECK: .seh_savexmm %xmm7, 4892; CHECK: vmovaps %xmm6, 64(%rsp)93; CHECK: .seh_savexmm %xmm6, 6494; CHECK: .seh_endprologue95; CHECK: movl   -{{[0-9]+}}(%rbp), %ecx96; CHECK: vmovaps 64(%rsp), %xmm697; CHECK: vmovaps 48(%rsp), %xmm798; CHECK: vmovaps 32(%rsp), %xmm899; CHECK: leaq    .LBB0_1(%rip), %rax100; CHECK: .seh_startepilogue101; CHECK: addq    $88, %rsp102; CHECK: popq    %rbx103; CHECK: popq    %rbp104; CHECK: .seh_endepilogue105; CHECK: retq # CATCHRET106 107; CHECK-LABEL: "$handlerMap$0$?foo@@YAXHHHHH@Z":108; CHECK-NEXT: .long   64                      # Adjectives109; CHECK-NEXT: .long   0                       # Type110; CHECK-NEXT: .long   0                       # CatchObjOffset111; CHECK-NEXT: .long   "?catch$2@?0??foo@@YAXHHHHH@Z@4HA"@IMGREL # Handler112; Sum of:113;   16 RDX store offset114;   16 two pushes115;   72 stack alloc116; CHECK-NEXT: .long   120                     # ParentFrameOffset117 118