| ; 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: {{.*}} |