brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · c961339 Raw
54 lines · plain
1// REQUIRES: aarch642// RUN: rm -rf %t && split-file %s %t3// RUN: llvm-mc -triple aarch64-none-elf -filetype=obj -o %t/a.o %t/a.s4// RUN: ld.lld --shared %t/a.o -T %t/a.t -o %t/a5// RUN: llvm-objdump --no-show-raw-insn -d --start-address=0x7001004 --stop-address=0x7001010 %t/a | FileCheck %s6// RUN: llvm-objdump --no-show-raw-insn -d --start-address=0x11001008 --stop-address=0x11001014 %t/a | FileCheck --check-prefix=CHECK2 %s7// RUN: rm -f %t/a8/// This test shows that once a long-range thunk has been generated it9/// cannot be written as a short-range thunk. This prevents oscillations10/// in size that can prevent convergence.11/// In pass 0 bl foo requires a long-range thunk to reach foo. The thunk for12/// bar increases the address of foo so that ic can be reaced by bl foo with a13/// a single b instruction.14/// In pass 2 we expect the the long-range thunk to remain long.15 16// CHECK-LABEL: <__AArch64ADRPThunk_>:17// CHECK-NEXT: 7001004: adrp    x16, 0x1100100018// CHECK-NEXT:          add     x16, x16, #0x1419// CHECK-NEXT:          br      x1620 21// CHECK2-LABEL: <__AArch64ADRPThunk_>:22// CHECK2-NEXT: 11001008: adrp    x16, 0x900100023// CHECK2-NEXT:           add     x16, x16, #0x1024// CHECK2-NEXT:           br      x1625 26 27//--- a.t28SECTIONS {29  .foo 0x1000 : { *(.foo.*) }30  .bar 0x11001000 : { *(.bar.*) }31}32 33//--- a.s34.section .foo.1,"ax",%progbits,unique,135bl bar36 37.section .foo.2,"ax",%progbits,unique,138.space 0x700000039 40.section .foo.3,"ax",%progbits,unique,141.space 0x200000042 43.section .foo.4,"ax",%progbits,unique,144foo:45nop46 47.section .bar.1,"ax",%progbits,unique,148nop49nop50.section .bar.2,"ax",%progbits,unique,151bar:52bl foo53.space 0x800000054