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