aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/CodeGen/X86/indirect-branch-tracking-eh2.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/X86/indirect-branch-tracking-eh2.ll')
-rw-r--r--llvm/test/CodeGen/X86/indirect-branch-tracking-eh2.ll220
1 files changed, 172 insertions, 48 deletions
diff --git a/llvm/test/CodeGen/X86/indirect-branch-tracking-eh2.ll b/llvm/test/CodeGen/X86/indirect-branch-tracking-eh2.ll
index 64d44d9..0123431 100644
--- a/llvm/test/CodeGen/X86/indirect-branch-tracking-eh2.ll
+++ b/llvm/test/CodeGen/X86/indirect-branch-tracking-eh2.ll
@@ -1,59 +1,183 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple x86_64-unknown-unknown -exception-model sjlj -verify-machineinstrs=0 -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s --check-prefix=NUM
; RUN: llc -mtriple x86_64-unknown-unknown -exception-model sjlj -verify-machineinstrs=0 -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s --check-prefix=SJLJ
-; NUM-COUNT-3: endbr64
-
-;SJLJ: main: # @main
-;SJLJ-NEXT: .Lfunc_begin0:
-;SJLJ-NEXT: # %bb.0: # %entry
-;SJLJ-NEXT: endbr64
-;SJLJ-NEXT: pushq %rbp
-;SJLJ: callq _Unwind_SjLj_Register
-;SJLJ-NEXT: .Ltmp0:
-;SJLJ-NEXT: callq _Z3foov
-;SJLJ-NEXT: .Ltmp1:
-;SJLJ-NEXT: # %bb.1: # %invoke.cont
-;SJLJ-NEXT: movl
-;SJLJ-NEXT: .LBB0_7: # %return
-;SJLJ: callq _Unwind_SjLj_Unregister
-;SJLJ: retq
-;SJLJ-NEXT: .LBB0_9:
-;SJLJ-NEXT: endbr64
-;SJLJ-NEXT: movl
-;SJLJ-NEXT: cmpl
-;SJLJ-NEXT: jb .LBB0_10
-;SJLJ-NEXT: # %bb.11:
-;SJLJ-NEXT: ud2
-;SJLJ-NEXT: .LBB0_10:
-;SJLJ-NEXT: leaq .LJTI0_0(%rip), %rcx
-;SJLJ-NEXT: jmpq *(%rcx,%rax,8)
-;SJLJ-NEXT: .LBB0_2: # %lpad
-;SJLJ-NEXT: .Ltmp2:
-;SJLJ-NEXT: endbr64
-;SJLJ: jne .LBB0_4
-;SJLJ-NEXT: # %bb.3: # %catch3
-;SJLJ: callq __cxa_begin_catch
-;SJLJ: jmp .LBB0_6
-;SJLJ-NEXT: .LBB0_4: # %catch.fallthrough
-;SJLJ-NEXT: cmpl
-;SJLJ-NEXT: jne .LBB0_8
-;SJLJ-NEXT: # %bb.5: # %catch
-;SJLJ: callq __cxa_begin_catch
-;SJLJ: cmpb
-;SJLJ-NEXT: .LBB0_6: # %return
-;SJLJ: callq __cxa_end_catch
-;SJLJ-NEXT: jmp .LBB0_7
-;SJLJ-NEXT: .LBB0_8: # %eh.resume
-;SJLJ-NEXT: movl
-;SJLJ-NEXT: .Lfunc_end0:
-;SJLJ: .LJTI0_0:
-;SJLJ-NEXT: .quad .LBB0_2
-
@_ZTIi = external dso_local constant ptr
@_ZTIc = external dso_local constant ptr
; Function Attrs: noinline norecurse optnone uwtable
define dso_local i32 @main() #0 personality ptr @__gxx_personality_sj0 {
+; NUM-LABEL: main:
+; NUM: # %bb.0: # %entry
+; NUM-NEXT: endbr64
+; NUM-NEXT: pushq %rbp
+; NUM-NEXT: movq %rsp, %rbp
+; NUM-NEXT: pushq %r15
+; NUM-NEXT: pushq %r14
+; NUM-NEXT: pushq %r13
+; NUM-NEXT: pushq %r12
+; NUM-NEXT: pushq %rbx
+; NUM-NEXT: subq $120, %rsp
+; NUM-NEXT: movl $0, -44(%rbp)
+; NUM-NEXT: movq $__gxx_personality_sj0, -120(%rbp)
+; NUM-NEXT: movq $GCC_except_table0, -112(%rbp)
+; NUM-NEXT: movq %rbp, -104(%rbp)
+; NUM-NEXT: movq %rsp, -88(%rbp)
+; NUM-NEXT: movq $.LBB0_9, -96(%rbp)
+; NUM-NEXT: movl $1, -144(%rbp)
+; NUM-NEXT: leaq -152(%rbp), %rdi
+; NUM-NEXT: callq _Unwind_SjLj_Register@PLT
+; NUM-NEXT: .Ltmp0:
+; NUM-NEXT: callq _Z3foov
+; NUM-NEXT: .Ltmp1:
+; NUM-NEXT: # %bb.1: # %invoke.cont
+; NUM-NEXT: movl $1, -44(%rbp)
+; NUM-NEXT: .LBB0_7: # %return
+; NUM-NEXT: movl -44(%rbp), %ebx
+; NUM-NEXT: leaq -152(%rbp), %rdi
+; NUM-NEXT: callq _Unwind_SjLj_Unregister@PLT
+; NUM-NEXT: movl %ebx, %eax
+; NUM-NEXT: addq $120, %rsp
+; NUM-NEXT: popq %rbx
+; NUM-NEXT: popq %r12
+; NUM-NEXT: popq %r13
+; NUM-NEXT: popq %r14
+; NUM-NEXT: popq %r15
+; NUM-NEXT: popq %rbp
+; NUM-NEXT: retq
+; NUM-NEXT: .LBB0_9:
+; NUM-NEXT: endbr64
+; NUM-NEXT: movl -144(%rbp), %eax
+; NUM-NEXT: cmpl $1, %eax
+; NUM-NEXT: jb .LBB0_10
+; NUM-NEXT: # %bb.11:
+; NUM-NEXT: ud2
+; NUM-NEXT: .LBB0_10:
+; NUM-NEXT: leaq .LJTI0_0(%rip), %rcx
+; NUM-NEXT: jmpq *(%rcx,%rax,8)
+; NUM-NEXT: .LBB0_2: # %lpad
+; NUM-NEXT: .Ltmp2:
+; NUM-NEXT: endbr64
+; NUM-NEXT: movl -140(%rbp), %ecx
+; NUM-NEXT: movl -136(%rbp), %eax
+; NUM-NEXT: movq %rcx, -56(%rbp)
+; NUM-NEXT: movl %eax, -64(%rbp)
+; NUM-NEXT: cmpl $2, %eax
+; NUM-NEXT: jne .LBB0_4
+; NUM-NEXT: # %bb.3: # %catch3
+; NUM-NEXT: movq -56(%rbp), %rdi
+; NUM-NEXT: movl $-1, -144(%rbp)
+; NUM-NEXT: callq __cxa_begin_catch
+; NUM-NEXT: movl (%rax), %eax
+; NUM-NEXT: movl %eax, -60(%rbp)
+; NUM-NEXT: xorl %ecx, %ecx
+; NUM-NEXT: cmpl $5, %eax
+; NUM-NEXT: jmp .LBB0_6
+; NUM-NEXT: .LBB0_4: # %catch.fallthrough
+; NUM-NEXT: cmpl $1, %eax
+; NUM-NEXT: jne .LBB0_8
+; NUM-NEXT: # %bb.5: # %catch
+; NUM-NEXT: movq -56(%rbp), %rdi
+; NUM-NEXT: movl $-1, -144(%rbp)
+; NUM-NEXT: callq __cxa_begin_catch
+; NUM-NEXT: movzbl (%rax), %eax
+; NUM-NEXT: movb %al, -45(%rbp)
+; NUM-NEXT: xorl %ecx, %ecx
+; NUM-NEXT: cmpb $3, %al
+; NUM-NEXT: .LBB0_6: # %return
+; NUM-NEXT: setne %cl
+; NUM-NEXT: movl %ecx, -44(%rbp)
+; NUM-NEXT: movl $-1, -144(%rbp)
+; NUM-NEXT: callq __cxa_end_catch
+; NUM-NEXT: jmp .LBB0_7
+; NUM-NEXT: .LBB0_8: # %eh.resume
+; NUM-NEXT: movl $-1, -144(%rbp)
+;
+; SJLJ-LABEL: main:
+; SJLJ: # %bb.0: # %entry
+; SJLJ-NEXT: endbr64
+; SJLJ-NEXT: pushq %rbp
+; SJLJ-NEXT: movq %rsp, %rbp
+; SJLJ-NEXT: pushq %r15
+; SJLJ-NEXT: pushq %r14
+; SJLJ-NEXT: pushq %r13
+; SJLJ-NEXT: pushq %r12
+; SJLJ-NEXT: pushq %rbx
+; SJLJ-NEXT: subq $120, %rsp
+; SJLJ-NEXT: movl $0, -44(%rbp)
+; SJLJ-NEXT: movq $__gxx_personality_sj0, -120(%rbp)
+; SJLJ-NEXT: movq $GCC_except_table0, -112(%rbp)
+; SJLJ-NEXT: movq %rbp, -104(%rbp)
+; SJLJ-NEXT: movq %rsp, -88(%rbp)
+; SJLJ-NEXT: movq $.LBB0_9, -96(%rbp)
+; SJLJ-NEXT: movl $1, -144(%rbp)
+; SJLJ-NEXT: leaq -152(%rbp), %rdi
+; SJLJ-NEXT: callq _Unwind_SjLj_Register@PLT
+; SJLJ-NEXT: .Ltmp0:
+; SJLJ-NEXT: callq _Z3foov
+; SJLJ-NEXT: .Ltmp1:
+; SJLJ-NEXT: # %bb.1: # %invoke.cont
+; SJLJ-NEXT: movl $1, -44(%rbp)
+; SJLJ-NEXT: .LBB0_7: # %return
+; SJLJ-NEXT: movl -44(%rbp), %ebx
+; SJLJ-NEXT: leaq -152(%rbp), %rdi
+; SJLJ-NEXT: callq _Unwind_SjLj_Unregister@PLT
+; SJLJ-NEXT: movl %ebx, %eax
+; SJLJ-NEXT: addq $120, %rsp
+; SJLJ-NEXT: popq %rbx
+; SJLJ-NEXT: popq %r12
+; SJLJ-NEXT: popq %r13
+; SJLJ-NEXT: popq %r14
+; SJLJ-NEXT: popq %r15
+; SJLJ-NEXT: popq %rbp
+; SJLJ-NEXT: retq
+; SJLJ-NEXT: .LBB0_9:
+; SJLJ-NEXT: endbr64
+; SJLJ-NEXT: movl -144(%rbp), %eax
+; SJLJ-NEXT: cmpl $1, %eax
+; SJLJ-NEXT: jb .LBB0_10
+; SJLJ-NEXT: # %bb.11:
+; SJLJ-NEXT: ud2
+; SJLJ-NEXT: .LBB0_10:
+; SJLJ-NEXT: leaq .LJTI0_0(%rip), %rcx
+; SJLJ-NEXT: jmpq *(%rcx,%rax,8)
+; SJLJ-NEXT: .LBB0_2: # %lpad
+; SJLJ-NEXT: .Ltmp2:
+; SJLJ-NEXT: endbr64
+; SJLJ-NEXT: movl -140(%rbp), %ecx
+; SJLJ-NEXT: movl -136(%rbp), %eax
+; SJLJ-NEXT: movq %rcx, -56(%rbp)
+; SJLJ-NEXT: movl %eax, -64(%rbp)
+; SJLJ-NEXT: cmpl $2, %eax
+; SJLJ-NEXT: jne .LBB0_4
+; SJLJ-NEXT: # %bb.3: # %catch3
+; SJLJ-NEXT: movq -56(%rbp), %rdi
+; SJLJ-NEXT: movl $-1, -144(%rbp)
+; SJLJ-NEXT: callq __cxa_begin_catch
+; SJLJ-NEXT: movl (%rax), %eax
+; SJLJ-NEXT: movl %eax, -60(%rbp)
+; SJLJ-NEXT: xorl %ecx, %ecx
+; SJLJ-NEXT: cmpl $5, %eax
+; SJLJ-NEXT: jmp .LBB0_6
+; SJLJ-NEXT: .LBB0_4: # %catch.fallthrough
+; SJLJ-NEXT: cmpl $1, %eax
+; SJLJ-NEXT: jne .LBB0_8
+; SJLJ-NEXT: # %bb.5: # %catch
+; SJLJ-NEXT: movq -56(%rbp), %rdi
+; SJLJ-NEXT: movl $-1, -144(%rbp)
+; SJLJ-NEXT: callq __cxa_begin_catch
+; SJLJ-NEXT: movzbl (%rax), %eax
+; SJLJ-NEXT: movb %al, -45(%rbp)
+; SJLJ-NEXT: xorl %ecx, %ecx
+; SJLJ-NEXT: cmpb $3, %al
+; SJLJ-NEXT: .LBB0_6: # %return
+; SJLJ-NEXT: setne %cl
+; SJLJ-NEXT: movl %ecx, -44(%rbp)
+; SJLJ-NEXT: movl $-1, -144(%rbp)
+; SJLJ-NEXT: callq __cxa_end_catch
+; SJLJ-NEXT: jmp .LBB0_7
+; SJLJ-NEXT: .LBB0_8: # %eh.resume
+; SJLJ-NEXT: movl $-1, -144(%rbp)
entry:
%retval = alloca i32, align 4
%exn.slot = alloca ptr