| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 | |
| ; RUN: llc -mtriple aarch64-windows -filetype asm -o - < %s | FileCheck %s | |
| ; RUN: llc -mtriple aarch64-windows -filetype asm -o - -fast-isel %s | FileCheck %s --check-prefix=FISEL | |
| ; RUN: llc -mtriple aarch64-windows -filetype asm -o - -global-isel -global-isel-abort=0 %s | FileCheck %s | |
| define void @func() nounwind { | |
| ; CHECK-LABEL: func: | |
| ; CHECK: // %bb.0: | |
| ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill | |
| ; CHECK-NEXT: adrp x8, .refptr.weakfunc | |
| ; CHECK-NEXT: ldr x8, [x8, :lo12:.refptr.weakfunc] | |
| ; CHECK-NEXT: cbz x8, .LBB0_2 | |
| ; CHECK-NEXT: // %bb.1: | |
| ; CHECK-NEXT: blr x8 | |
| ; CHECK-NEXT: .LBB0_2: | |
| ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload | |
| ; CHECK-NEXT: ret | |
| ; | |
| ; FISEL-LABEL: func: | |
| ; FISEL: // %bb.0: | |
| ; FISEL-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill | |
| ; FISEL-NEXT: adrp x8, .refptr.weakfunc | |
| ; FISEL-NEXT: ldr x8, [x8, :lo12:.refptr.weakfunc] | |
| ; FISEL-NEXT: cbz x8, .LBB0_2 | |
| ; FISEL-NEXT: // %bb.1: | |
| ; FISEL-NEXT: adrp x8, .refptr.weakfunc | |
| ; FISEL-NEXT: ldr x8, [x8, :lo12:.refptr.weakfunc] | |
| ; FISEL-NEXT: blr x8 | |
| ; FISEL-NEXT: .LBB0_2: | |
| ; FISEL-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload | |
| ; FISEL-NEXT: ret | |
| %cmp = icmp ne ptr @weakfunc, null | |
| br i1 %cmp, label %1, label %2 | |
| 1: | |
| call void @weakfunc() | |
| br label %2 | |
| 2: | |
| ret void | |
| } | |
| declare extern_weak void @weakfunc() |