blob: 4484efa45cd1f605470df4524d344988ad0c29bf [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; NOTE: FastISel can't select and fallbacks to SDAG
; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86,SDAG-X86
; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86,FASTISEL-X86
; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=GISEL-X86
; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck %s --check-prefixes=X64,SDAG-X64
; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X64,FASTISEL-X64
; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=GISEL-X64
declare void @_Unwind_Resume(ptr)
declare i32 @__gxx_personality_v0(...)
declare void @bar()
define void @foo() personality ptr @__gxx_personality_v0 {
; X86-LABEL: foo:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: .cfi_def_cfa_offset 16
; X86-NEXT: .Ltmp0: # EH_LABEL
; X86-NEXT: calll bar@PLT
; X86-NEXT: .Ltmp1: # EH_LABEL
; X86-NEXT: # %bb.1: # %invoke.cont
; X86-NEXT: addl $12, %esp
; X86-NEXT: .cfi_def_cfa_offset 4
; X86-NEXT: retl
; X86-NEXT: .LBB0_2: # %lpad
; X86-NEXT: .cfi_def_cfa_offset 16
; X86-NEXT: .Ltmp2: # EH_LABEL
; X86-NEXT: movl $0, (%esp)
; X86-NEXT: calll _Unwind_Resume@PLT
;
; GISEL-X86-LABEL: foo:
; GISEL-X86: # %bb.0: # %entry
; GISEL-X86-NEXT: pushl %esi
; GISEL-X86-NEXT: .cfi_def_cfa_offset 8
; GISEL-X86-NEXT: subl $8, %esp
; GISEL-X86-NEXT: .cfi_def_cfa_offset 16
; GISEL-X86-NEXT: .cfi_offset %esi, -8
; GISEL-X86-NEXT: movl $0, %esi
; GISEL-X86-NEXT: .Ltmp0: # EH_LABEL
; GISEL-X86-NEXT: calll bar
; GISEL-X86-NEXT: .Ltmp1: # EH_LABEL
; GISEL-X86-NEXT: # %bb.1: # %invoke.cont
; GISEL-X86-NEXT: addl $8, %esp
; GISEL-X86-NEXT: .cfi_def_cfa_offset 8
; GISEL-X86-NEXT: popl %esi
; GISEL-X86-NEXT: .cfi_def_cfa_offset 4
; GISEL-X86-NEXT: retl
; GISEL-X86-NEXT: .LBB0_2: # %lpad
; GISEL-X86-NEXT: .cfi_def_cfa_offset 16
; GISEL-X86-NEXT: .Ltmp2: # EH_LABEL
; GISEL-X86-NEXT: movl %esi, (%esp)
; GISEL-X86-NEXT: calll _Unwind_Resume
;
; X64-LABEL: foo:
; X64: # %bb.0: # %entry
; X64-NEXT: pushq %rax
; X64-NEXT: .cfi_def_cfa_offset 16
; X64-NEXT: .Ltmp0: # EH_LABEL
; X64-NEXT: callq bar@PLT
; X64-NEXT: .Ltmp1: # EH_LABEL
; X64-NEXT: # %bb.1: # %invoke.cont
; X64-NEXT: popq %rax
; X64-NEXT: .cfi_def_cfa_offset 8
; X64-NEXT: retq
; X64-NEXT: .LBB0_2: # %lpad
; X64-NEXT: .cfi_def_cfa_offset 16
; X64-NEXT: .Ltmp2: # EH_LABEL
; X64-NEXT: xorl %edi, %edi
; X64-NEXT: callq _Unwind_Resume@PLT
;
; GISEL-X64-LABEL: foo:
; GISEL-X64: # %bb.0: # %entry
; GISEL-X64-NEXT: pushq %rax
; GISEL-X64-NEXT: .cfi_def_cfa_offset 16
; GISEL-X64-NEXT: .Ltmp0: # EH_LABEL
; GISEL-X64-NEXT: callq bar
; GISEL-X64-NEXT: .Ltmp1: # EH_LABEL
; GISEL-X64-NEXT: # %bb.1: # %invoke.cont
; GISEL-X64-NEXT: popq %rax
; GISEL-X64-NEXT: .cfi_def_cfa_offset 8
; GISEL-X64-NEXT: retq
; GISEL-X64-NEXT: .LBB0_2: # %lpad
; GISEL-X64-NEXT: .cfi_def_cfa_offset 16
; GISEL-X64-NEXT: .Ltmp2: # EH_LABEL
; GISEL-X64-NEXT: movl $0, %edi
; GISEL-X64-NEXT: callq _Unwind_Resume
entry:
invoke void @bar() to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
ret void
lpad: ; preds = %entry
%4 = landingpad { ptr, i32 }
cleanup
br label %eh.resume
eh.resume: ; preds = %lpad
call void @_Unwind_Resume(ptr null) #13
unreachable
}
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
; FASTISEL-X64: {{.*}}
; FASTISEL-X86: {{.*}}
; SDAG-X64: {{.*}}
; SDAG-X86: {{.*}}