| # REQUIRES: aarch64 |
| |
| # RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin %s -o %t.o |
| # RUN: %lld -arch arm64 %t.o -o %t |
| # RUN: llvm-objdump -d --macho %t | FileCheck %s |
| |
| # CHECK-LABEL: _main: |
| ## Valid |
| # CHECK-NEXT: adrp x0 |
| # CHECK-NEXT: nop |
| ## Mismatched registers |
| # CHECK-NEXT: adrp x1 |
| # CHECK-NEXT: adrp x2 |
| ## Not on the same page |
| # CHECK-NEXT: adrp x3 |
| # CHECK-NEXT: adrp x3 |
| ## Not an adrp instruction (invalid) |
| # CHECK-NEXT: nop |
| # CHECK-NEXT: adrp x4 |
| ## Other relaxations take precedence over AdrpAdrp |
| # CHECK-NEXT: adr x6 |
| # CHECK-NEXT: nop |
| # CHECK-NEXT: adr x6 |
| # CHECK-NEXT: nop |
| |
| .text |
| .align 2 |
| |
| .globl _main |
| _main: |
| L1: |
| adrp x0, _foo@PAGE |
| L2: |
| adrp x0, _bar@PAGE |
| L3: |
| adrp x1, _foo@PAGE |
| L4: |
| adrp x2, _bar@PAGE |
| L5: |
| adrp x3, _foo@PAGE |
| L6: |
| adrp x3, _baz@PAGE |
| L7: |
| nop |
| L8: |
| adrp x4, _baz@PAGE |
| L9: |
| adrp x5, _foo@PAGE |
| L10: |
| add x6, x5, _foo@PAGEOFF |
| L11: |
| adrp x5, _bar@PAGE |
| L12: |
| add x6, x5, _bar@PAGEOFF |
| |
| .data |
| .align 12 |
| _foo: |
| .byte 0 |
| _bar: |
| .byte 0 |
| .space 4094 |
| _baz: |
| .byte 0 |
| |
| .loh AdrpAdrp L1, L2 |
| .loh AdrpAdrp L3, L4 |
| .loh AdrpAdrp L5, L6 |
| .loh AdrpAdrp L7, L8 |
| .loh AdrpAdrp L9, L11 |
| .loh AdrpAdd L9, L10 |
| .loh AdrpAdd L11, L12 |