[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / bolt / test / runtime / AArch64 / adrrelaxationpass.s
blob5c50cd6371926cbe23175ded354dd7e719ef6338
1 # The second and third ADR instructions are non-local to functions
2 # and must be replaced with ADRP + ADD by BOLT
3 # Also since main is non-simple, we can't change it's length so we have to
4 # replace NOP with adrp, and if there is no nop before adr in non-simple
5 # function, we can't guarantee we didn't break possible jump tables, so we
6 # fail in strict mode
8 # REQUIRES: system-linux
10 # RUN: llvm-mc -filetype=obj -triple aarch64-unknown-unknown \
11 # RUN: %s -o %t.o
12 # RUN: %clang %cflags %t.o -o %t.exe -Wl,-q
13 # RUN: llvm-bolt %t.exe -o %t.bolt --adr-relaxation=true
14 # RUN: llvm-objdump --no-print-imm-hex -d --disassemble-symbols=main %t.bolt | FileCheck %s
15 # RUN: %t.bolt
16 # RUN: not llvm-bolt %t.exe -o %t.bolt --adr-relaxation=true --strict \
17 # RUN: 2>&1 | FileCheck %s --check-prefix CHECK-ERROR
19 .data
20 .align 8
21 .global Gvar
22 Gvar: .xword 0x0
23 .global Gvar2
24 Gvar2: .xword 0x42
26 .text
27 .align 4
28 .global test
29 .type test, %function
30 test:
31 mov x0, xzr
32 ret
33 .size test, .-test
35 .align 4
36 .global main
37 .type main, %function
38 main:
39 adr x0, .CI
40 nop
41 adr x1, test
42 adr x2, Gvar2
43 adr x3, br
44 br:
45 br x1
46 .size main, .-main
47 .CI:
48 .word 0xff
50 # CHECK: <main>:
51 # CHECK-NEXT: adr x0, 0x{{[1-8a-f][0-9a-f]*}}
52 # CHECK-NEXT: adrp x1, 0x{{[1-8a-f][0-9a-f]*}}
53 # CHECK-NEXT: add x1, x1, #{{[1-8a-f][0-9a-f]*}}
54 # CHECK-NEXT: adrp x2, 0x{{[1-8a-f][0-9a-f]*}}
55 # CHECK-NEXT: add x2, x2, #{{[1-8a-f][0-9a-f]*}}
56 # CHECK-NEXT: adr x3, 0x{{[1-8a-f][0-9a-f]*}}
57 # CHECK-ERROR: BOLT-ERROR: Cannot relax adr in non-simple function main