brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.8 KiB · 857df98 Raw
227 lines · plain
1; RUN: llc -mtriple=i686-pc-windows-msvc < %s | FileCheck %s2; RUN: llc -mtriple=i686-pc-windows-msvc -filetype=obj < %s -o %t3 4declare void @may_throw_or_crash()5declare i32 @_except_handler3(...)6declare i32 @_except_handler4(...)7declare i32 @__CxxFrameHandler3(...)8declare i32 @llvm.eh.typeid.for(ptr)9 10define internal i32 @catchall_filt() {11  ret i32 112}13 14define void @use_except_handler3() personality ptr @_except_handler3 {15entry:16  invoke void @may_throw_or_crash()17      to label %cont unwind label %lpad18cont:19  ret void20lpad:21  %cs = catchswitch within none [label %catch] unwind to caller22catch:23  %p = catchpad within %cs [ptr @catchall_filt]24  catchret from %p to label %cont25}26 27; CHECK-LABEL: _use_except_handler3:28; CHECK: pushl %ebp29; CHECK-NEXT: movl %esp, %ebp30; CHECK-NEXT: pushl %ebx31; CHECK-NEXT: pushl %edi32; CHECK-NEXT: pushl %esi33; CHECK-NEXT: subl ${{[0-9]+}}, %esp34; CHECK-NEXT: movl %esp, -36(%ebp)35; CHECK-NEXT: movl $-1, -16(%ebp)36; CHECK-NEXT: movl $L__ehtable$use_except_handler3, -20(%ebp)37; CHECK-NEXT: leal -28(%ebp), %[[node:[^ ,]*]]38; CHECK-NEXT: movl $__except_handler3, -24(%ebp)39; CHECK-NEXT: movl %fs:0, %[[next:[^ ,]*]]40; CHECK-NEXT: movl %[[next]], -28(%ebp)41; CHECK-NEXT: movl %[[node]], %fs:042; CHECK-NEXT: movl $0, -16(%ebp)43; CHECK-NEXT: calll _may_throw_or_crash44 45; CHECK: movl -28(%ebp), %[[next:[^ ,]*]]46; CHECK-NEXT: movl %[[next]], %fs:047; CHECK: retl48; CHECK-NEXT: LBB1_2: # %catch{{$}}49 50; CHECK: .section .xdata,"dr"51; CHECK-LABEL: L__ehtable$use_except_handler3:52; CHECK-NEXT:  .long   -153; CHECK-NEXT:  .long   _catchall_filt54; CHECK-NEXT:  .long   LBB1_255 56define void @use_except_handler4() personality ptr @_except_handler4 {57entry:58  invoke void @may_throw_or_crash()59      to label %cont unwind label %lpad60cont:61  ret void62lpad:63  %cs = catchswitch within none [label %catch] unwind to caller64catch:65  %p = catchpad within %cs [ptr @catchall_filt]66  catchret from %p to label %cont67}68 69; CHECK-LABEL: _use_except_handler4:70; CHECK: pushl %ebp71; CHECK-NEXT: movl %esp, %ebp72; CHECK-NEXT: pushl %ebx73; CHECK-NEXT: pushl %edi74; CHECK-NEXT: pushl %esi75; CHECK-NEXT: subl ${{[0-9]+}}, %esp76; CHECK-NEXT: movl %ebp, %eax77; CHECK-NEXT: movl %esp, -36(%ebp)78; CHECK-NEXT: movl $-2, -16(%ebp)79; CHECK-NEXT: movl $L__ehtable$use_except_handler4, %[[lsda:[^ ,]*]]80; CHECK-NEXT: movl ___security_cookie, %[[seccookie:[^ ,]*]]81; CHECK-NEXT: xorl %[[seccookie]], %[[lsda]]82; CHECK-NEXT: movl %[[lsda]], -20(%ebp)83; CHECK-NEXT: xorl %[[seccookie]], %[[tmp1:[^ ,]*]]84; CHECK-NEXT: movl %[[tmp1]], -40(%ebp)85; CHECK-NEXT: leal -28(%ebp), %[[node:[^ ,]*]]86; CHECK-NEXT: movl $__except_handler4, -24(%ebp)87; CHECK-NEXT: movl %fs:0, %[[next:[^ ,]*]]88; CHECK-NEXT: movl %[[next]], -28(%ebp)89; CHECK-NEXT: movl %[[node]], %fs:090; CHECK-NEXT: movl $0, -16(%ebp)91; CHECK-NEXT: calll _may_throw_or_crash92 93; CHECK: movl -28(%ebp), %[[next:[^ ,]*]]94; CHECK-NEXT: movl %[[next]], %fs:095; CHECK-NEXT: addl $28, %esp96; CHECK-NEXT: popl %esi97; CHECK-NEXT: popl %edi98; CHECK-NEXT: popl %ebx99; CHECK-NEXT: popl %ebp100; CHECK-NEXT: retl101; CHECK-NEXT: LBB2_2: # %catch{{$}}102 103; CHECK: .section .xdata,"dr"104; CHECK-LABEL: L__ehtable$use_except_handler4:105; CHECK-NEXT:  .long   -2106; CHECK-NEXT:  .long   0107; CHECK-NEXT:  .long   -40108; CHECK-NEXT:  .long   0109; CHECK-NEXT:  .long   -2110; CHECK-NEXT:  .long   _catchall_filt111; CHECK-NEXT:  .long   LBB2_2112 113define void @use_except_handler4_ssp() sspstrong personality ptr @_except_handler4 {114entry:115  invoke void @may_throw_or_crash()116      to label %cont unwind label %lpad117cont:118  ret void119lpad:120  %cs = catchswitch within none [label %catch] unwind to caller121catch:122  %p = catchpad within %cs [ptr @catchall_filt]123  catchret from %p to label %cont124}125 126; CHECK-LABEL: _use_except_handler4_ssp:127; CHECK: pushl %ebp128; CHECK-NEXT: movl %esp, %ebp129; CHECK-NEXT: pushl %ebx130; CHECK-NEXT: pushl %edi131; CHECK-NEXT: pushl %esi132; CHECK-NEXT: subl ${{[0-9]+}}, %esp133; CHECK-NEXT: movl %ebp, %[[ehguard:[^ ,]*]]134; CHECK-NEXT: movl %esp, -36(%ebp)135; CHECK-NEXT: movl $-2, -16(%ebp)136; CHECK-NEXT: movl $L__ehtable$use_except_handler4_ssp, %[[lsda:[^ ,]*]]137; CHECK-NEXT: movl ___security_cookie, %[[seccookie:[^ ,]*]]138; CHECK-NEXT: xorl %[[seccookie]], %[[lsda]]139; CHECK-NEXT: movl %[[lsda]], -20(%ebp)140; CHECK-NEXT: xorl %[[seccookie]], %[[ehguard]]141; CHECK-NEXT: movl %[[ehguard]], -40(%ebp)142; CHECK-NEXT: leal -28(%ebp), %[[node:[^ ,]*]]143; CHECK-NEXT: movl $__except_handler4, -24(%ebp)144; CHECK-NEXT: movl %fs:0, %[[next:[^ ,]*]]145; CHECK-NEXT: movl %[[next]], -28(%ebp)146; CHECK-NEXT: movl %[[node]], %fs:0147; CHECK-NEXT: movl $0, -16(%ebp)148; CHECK-NEXT: calll _may_throw_or_crash149; CHECK: movl -28(%ebp), %[[next:[^ ,]*]]150; CHECK-NEXT: movl %[[next]], %fs:0   151; CHECK: retl152; CHECK-NEXT: [[catch:[^ ,]*]]: # %catch{{$}}153 154 155 156; CHECK: .section .xdata,"dr"157; CHECK-LABEL: L__ehtable$use_except_handler4_ssp:158; CHECK-NEXT:  .long   -2159; CHECK-NEXT:  .long   0160; CHECK-NEXT:  .long   -40  161; CHECK-NEXT:  .long   0162; CHECK-NEXT:  .long   -2163; CHECK-NEXT:  .long   _catchall_filt164; CHECK-NEXT:  .long   [[catch]]165 166define void @use_CxxFrameHandler3() personality ptr @__CxxFrameHandler3 {167  invoke void @may_throw_or_crash()168      to label %cont unwind label %catchall169cont:170  ret void171 172catchall:173  %cs = catchswitch within none [label %catch] unwind to caller174catch:175  %p = catchpad within %cs [ptr null, i32 64, ptr null]176  catchret from %p to label %cont177}178 179; CHECK-LABEL: _use_CxxFrameHandler3:180; CHECK: pushl %ebp181; CHECK-NEXT: movl %esp, %ebp182; CHECK-NEXT: pushl %ebx183; CHECK-NEXT: pushl %edi184; CHECK-NEXT: pushl %esi185; CHECK-NEXT: subl ${{[0-9]+}}, %esp186; CHECK-NEXT: movl %esp, -28(%ebp)187; CHECK-NEXT: movl $-1, -16(%ebp)188; CHECK-NEXT: leal -24(%ebp), %[[node:[^ ,]*]]189; CHECK-NEXT: movl $___ehhandler$use_CxxFrameHandler3, -20(%ebp)190; CHECK-NEXT: movl %fs:0, %[[next:[^ ,]*]]191; CHECK-NEXT: movl %[[next]], -24(%ebp)192; CHECK-NEXT: movl %[[node]], %fs:0193; CHECK-NEXT: movl $0, -16(%ebp)194; CHECK-NEXT: calll _may_throw_or_crash195; CHECK: movl -24(%ebp), %[[next:[^ ,]*]]196; CHECK-NEXT: movl %[[next]], %fs:0197; CHECK: retl198 199; CHECK: .section .xdata,"dr"200; CHECK-NEXT: .p2align 2201; CHECK-LABEL: L__ehtable$use_CxxFrameHandler3:202; CHECK-NEXT:  .long   429065506203; CHECK-NEXT:  .long   2204; CHECK-NEXT:  .long   $stateUnwindMap$use_CxxFrameHandler3205; CHECK-NEXT:  .long   1206; CHECK-NEXT:  .long   $tryMap$use_CxxFrameHandler3207; CHECK-NEXT:  .long   0208; CHECK-NEXT:  .long   0209; CHECK-NEXT:  .long   0210; CHECK-NEXT:  .long   1211 212; CHECK-LABEL: inlineasm:213; CHECK: .safeseh my_handler214define i32 @inlineasm() {215entry:216  call void asm sideeffect ".safeseh my_handler", "~{dirflag},~{fpsr},~{flags}"()217  ret i32 0218}219 220; CHECK-LABEL: ___ehhandler$use_CxxFrameHandler3:221; CHECK: movl $L__ehtable$use_CxxFrameHandler3, %eax222; CHECK-NEXT: jmp  ___CxxFrameHandler3 # TAILCALL223 224; CHECK: .safeseh __except_handler3225; CHECK-NEXT: .safeseh __except_handler4226; CHECK-NEXT: .safeseh ___ehhandler$use_CxxFrameHandler3227