brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.6 KiB · 74fe07e Raw
197 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc -mtriple=i686-windows-msvc < %s | FileCheck %s --check-prefix=I6863; RUN: llc -mtriple=x86_64-windows-msvc < %s | FileCheck %s --check-prefix=X86_644 5@type_info = external global ptr6 7; Make sure %a1 and %a2 don't share the same stack offset.8define void @pr66984(ptr %arg) personality ptr @__CxxFrameHandler3 {9; I686-LABEL: pr66984:10; I686:       # %bb.0: # %bb11; I686-NEXT:    pushl %ebp12; I686-NEXT:    movl %esp, %ebp13; I686-NEXT:    pushl %ebx14; I686-NEXT:    pushl %edi15; I686-NEXT:    pushl %esi16; I686-NEXT:    subl $24, %esp17; I686-NEXT:    movl %esp, -28(%ebp)18; I686-NEXT:    movl $-1, -16(%ebp)19; I686-NEXT:    leal -24(%ebp), %eax20; I686-NEXT:    movl $___ehhandler$pr66984, -20(%ebp)21; I686-NEXT:    movl %fs:0, %ecx22; I686-NEXT:    movl %ecx, -24(%ebp)23; I686-NEXT:    movl %eax, %fs:024; I686-NEXT:    movl $1, -16(%ebp)25; I686-NEXT:    calll _throw26; I686-NEXT:  # %bb.1: # %bb1427; I686-NEXT:  LBB0_3: # Block address taken28; I686-NEXT:    # %bb1729; I686-NEXT:    addl $12, %ebp30; I686-NEXT:    jmp LBB0_431; I686-NEXT:  LBB0_4: # %exit32; I686-NEXT:  $ehgcr_0_4:33; I686-NEXT:    movl -24(%ebp), %eax34; I686-NEXT:    movl %eax, %fs:035; I686-NEXT:    addl $24, %esp36; I686-NEXT:    popl %esi37; I686-NEXT:    popl %edi38; I686-NEXT:    popl %ebx39; I686-NEXT:    popl %ebp40; I686-NEXT:    retl41; I686-NEXT:    .def "?catch$2@?0?pr66984@4HA";42; I686-NEXT:    .scl 3;43; I686-NEXT:    .type 32;44; I686-NEXT:    .endef45; I686-NEXT:    .p2align 446; I686-NEXT:  "?catch$2@?0?pr66984@4HA":47; I686-NEXT:  LBB0_2: # %bb1748; I686-NEXT:    pushl %ebp49; I686-NEXT:    addl $12, %ebp50; I686-NEXT:    movl %esp, -28(%ebp)51; I686-NEXT:    movl -36(%ebp), %ecx52; I686-NEXT:    movl $2, -16(%ebp)53; I686-NEXT:    calll _cleanup54; I686-NEXT:    movl $LBB0_3, %eax55; I686-NEXT:    popl %ebp56; I686-NEXT:    retl # CATCHRET57; I686-NEXT:    .def "?dtor$5@?0?pr66984@4HA";58; I686-NEXT:    .scl 3;59; I686-NEXT:    .type 32;60; I686-NEXT:    .endef61; I686-NEXT:    .p2align 462; I686-NEXT:  "?dtor$5@?0?pr66984@4HA":63; I686-NEXT:  LBB0_5: # %bb864; I686-NEXT:    pushl %ebp65; I686-NEXT:    addl $12, %ebp66; I686-NEXT:    movl 8(%ebp), %eax67; I686-NEXT:    movl %eax, -32(%ebp)68; I686-NEXT:    leal -32(%ebp), %ecx69; I686-NEXT:    calll _foo70; I686-NEXT:    popl %ebp71; I686-NEXT:    retl # CLEANUPRET72; I686-NEXT:  Lfunc_end0:73;74; X86_64-LABEL: pr66984:75; X86_64:       # %bb.0: # %bb76; X86_64-NEXT:    pushq %rbp77; X86_64-NEXT:    .seh_pushreg %rbp78; X86_64-NEXT:    subq $64, %rsp79; X86_64-NEXT:    .seh_stackalloc 6480; X86_64-NEXT:    leaq {{[0-9]+}}(%rsp), %rbp81; X86_64-NEXT:    .seh_setframe %rbp, 6482; X86_64-NEXT:    .seh_endprologue83; X86_64-NEXT:    movq $-2, -16(%rbp)84; X86_64-NEXT:    movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill85; X86_64-NEXT:  .Ltmp0:86; X86_64-NEXT:    callq throw87; X86_64-NEXT:    nop88; X86_64-NEXT:  .Ltmp1:89; X86_64-NEXT:  # %bb.1: # %bb1490; X86_64-NEXT:  .LBB0_3: # Block address taken91; X86_64-NEXT:    # %exit92; X86_64-NEXT:  $ehgcr_0_3:93; X86_64-NEXT:    .seh_startepilogue94; X86_64-NEXT:    addq $64, %rsp95; X86_64-NEXT:    popq %rbp96; X86_64-NEXT:    .seh_endepilogue97; X86_64-NEXT:    retq98; X86_64-NEXT:    .seh_handlerdata99; X86_64-NEXT:    .long $cppxdata$pr66984@IMGREL100; X86_64-NEXT:    .text101; X86_64-NEXT:    .seh_endproc102; X86_64-NEXT:    .def "?catch$2@?0?pr66984@4HA";103; X86_64-NEXT:    .scl 3;104; X86_64-NEXT:    .type 32;105; X86_64-NEXT:    .endef106; X86_64-NEXT:    .p2align 4107; X86_64-NEXT:  "?catch$2@?0?pr66984@4HA":108; X86_64-NEXT:  .seh_proc "?catch$2@?0?pr66984@4HA"109; X86_64-NEXT:    .seh_handler __CxxFrameHandler3, @unwind, @except110; X86_64-NEXT:  .LBB0_2: # %bb17111; X86_64-NEXT:    movq %rdx, {{[0-9]+}}(%rsp)112; X86_64-NEXT:    pushq %rbp113; X86_64-NEXT:    .seh_pushreg %rbp114; X86_64-NEXT:    subq $32, %rsp115; X86_64-NEXT:    .seh_stackalloc 32116; X86_64-NEXT:    leaq 64(%rdx), %rbp117; X86_64-NEXT:    .seh_endprologue118; X86_64-NEXT:    movq -8(%rbp), %rcx119; X86_64-NEXT:    callq cleanup120; X86_64-NEXT:    leaq .LBB0_3(%rip), %rax121; X86_64-NEXT:    .seh_startepilogue122; X86_64-NEXT:    addq $32, %rsp123; X86_64-NEXT:    popq %rbp124; X86_64-NEXT:    .seh_endepilogue125; X86_64-NEXT:    retq # CATCHRET126; X86_64-NEXT:    .seh_handlerdata127; X86_64-NEXT:    .long $cppxdata$pr66984@IMGREL128; X86_64-NEXT:    .text129; X86_64-NEXT:    .seh_endproc130; X86_64-NEXT:    .def "?dtor$4@?0?pr66984@4HA";131; X86_64-NEXT:    .scl 3;132; X86_64-NEXT:    .type 32;133; X86_64-NEXT:    .endef134; X86_64-NEXT:    .p2align 4135; X86_64-NEXT:  "?dtor$4@?0?pr66984@4HA":136; X86_64-NEXT:  .seh_proc "?dtor$4@?0?pr66984@4HA"137; X86_64-NEXT:  .LBB0_4: # %bb8138; X86_64-NEXT:    movq %rdx, {{[0-9]+}}(%rsp)139; X86_64-NEXT:    pushq %rbp140; X86_64-NEXT:    .seh_pushreg %rbp141; X86_64-NEXT:    subq $32, %rsp142; X86_64-NEXT:    .seh_stackalloc 32143; X86_64-NEXT:    leaq 64(%rdx), %rbp144; X86_64-NEXT:    .seh_endprologue145; X86_64-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload146; X86_64-NEXT:    movq %rax, -32(%rbp)147; X86_64-NEXT:    leaq -32(%rbp), %rcx148; X86_64-NEXT:    callq foo149; X86_64-NEXT:    nop150; X86_64-NEXT:    .seh_startepilogue151; X86_64-NEXT:    addq $32, %rsp152; X86_64-NEXT:    popq %rbp153; X86_64-NEXT:    .seh_endepilogue154; X86_64-NEXT:    retq # CLEANUPRET155; X86_64-NEXT:  .Lfunc_end0:156; X86_64-NEXT:    .seh_handlerdata157; X86_64-NEXT:    .text158; X86_64-NEXT:    .seh_endproc159bb:160  %a1 = alloca ptr, align 4161  %a2 = alloca ptr, align 4162  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %a2)163  invoke void @throw()164          to label %bb14 unwind label %bb8165 166bb8:                                              ; preds = %bb7167  %i9 = cleanuppad within none []168  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %a1)169  store ptr %arg, ptr %a1, align 4170  call fastcc void @foo(ptr %a1) [ "funclet"(token %i9) ]171  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %a1)172  cleanupret from %i9 unwind label %bb15173 174bb14:                                             ; preds = %bb7175  unreachable176 177bb15:                                             ; preds = %bb13, %bb5178  %cs = catchswitch within none [label %bb17] unwind to caller179 180bb17:                                             ; preds = %bb15181  %cp = catchpad within %cs [ptr @type_info, i32 8, ptr %a2]182  %p = load ptr, ptr %a2, align 4183  call fastcc void @cleanup(ptr %p) [ "funclet"(token %cp) ]184  catchret from %cp to label %exit185 186exit:187  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %a2)188  ret void189}190 191declare i32 @__CxxFrameHandler3(...)192declare void @throw()193declare void @cleanup(ptr)194declare void @foo(ptr)195declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)196declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)197