brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 4f4f984 Raw
80 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=aarch64-windows -mattr=+bti -o - %s | FileCheck %s3 4declare i32 @__CxxFrameHandler3(...)5declare void @may_throw()6 7; Purpose: For WinEH funclets, entry is call-like: accept `bti c` / `hint #34` or a PAC prologue.8 9define dso_local void @wineh_funclet() #0 personality ptr @__CxxFrameHandler3 {10; CHECK-LABEL: wineh_funclet:11; CHECK:       .Lfunc_begin0:12; CHECK-NEXT:  .seh_proc wineh_funclet13; CHECK-NEXT:    .seh_handler __CxxFrameHandler3, @unwind, @except14; CHECK-NEXT:  // %bb.0: // %entry15; CHECK-NEXT:    bti c16; CHECK-NEXT:    .seh_nop17; CHECK-NEXT:    stp x29, x30, [sp, #-32]! // 16-byte Folded Spill18; CHECK-NEXT:    .seh_save_fplr_x 3219; CHECK-NEXT:    mov x29, sp20; CHECK-NEXT:    .seh_set_fp21; CHECK-NEXT:    .seh_endprologue22; CHECK-NEXT:    mov x0, #-2 // =0xfffffffffffffffe23; CHECK-NEXT:    stur x0, [x29, #16]24; CHECK-NEXT:  .Ltmp0: // EH_LABEL25; CHECK-NEXT:    bl may_throw26; CHECK-NEXT:  .Ltmp1: // EH_LABEL27; CHECK-NEXT:  .LBB0_1: // Block address taken28; CHECK-NEXT:    // %try.cont29; CHECK-NEXT:  $ehgcr_0_1:30; CHECK-NEXT:    bti j31; CHECK-NEXT:    .seh_startepilogue32; CHECK-NEXT:    ldp x29, x30, [sp], #32 // 16-byte Folded Reload33; CHECK-NEXT:    .seh_save_fplr_x 3234; CHECK-NEXT:    .seh_endepilogue35; CHECK-NEXT:    ret36; CHECK-NEXT:    .seh_endfunclet37; CHECK-NEXT:    .seh_handlerdata38; CHECK-NEXT:    .word $cppxdata$wineh_funclet@IMGREL39; CHECK-NEXT:    .text40; CHECK-NEXT:    .seh_endproc41; CHECK-NEXT:    .def "?catch$2@?0?wineh_funclet@4HA";42; CHECK-NEXT:    .scl 3;43; CHECK-NEXT:    .type 32;44; CHECK-NEXT:    .endef45; CHECK-NEXT:    .p2align 246; CHECK-NEXT:  "?catch$2@?0?wineh_funclet@4HA":47; CHECK-NEXT:  .seh_proc "?catch$2@?0?wineh_funclet@4HA"48; CHECK-NEXT:    .seh_handler __CxxFrameHandler3, @unwind, @except49; CHECK-NEXT:  .LBB0_2: // %catch50; CHECK-NEXT:    bti c51; CHECK-NEXT:    .seh_nop52; CHECK-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill53; CHECK-NEXT:    .seh_save_fplr_x 1654; CHECK-NEXT:    .seh_endprologue55; CHECK-NEXT:    bl may_throw56; CHECK-NEXT:    adrp x0, .LBB0_157; CHECK-NEXT:    add x0, x0, .LBB0_158; CHECK-NEXT:    .seh_startepilogue59; CHECK-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload60; CHECK-NEXT:    .seh_save_fplr_x 1661; CHECK-NEXT:    .seh_endepilogue62; CHECK-NEXT:    ret63entry:64  invoke void @may_throw()65          to label %try.cont unwind label %catch.dispatch66 67catch.dispatch:68  %cs = catchswitch within none [label %catch] unwind to caller69 70catch:71  %cp = catchpad within %cs [ptr null, i32 0, ptr null]72  call void @may_throw() ["funclet"(token %cp)]73  catchret from %cp to label %try.cont74 75try.cont:76  ret void77}78 79attributes #0 = { noinline "branch-target-enforcement"="true" }80