| ## Test that llvm-bolt detects internal calls and marks the containing function |
| ## as non-simple. |
| |
| # RUN: llvm-mc -filetype=obj -triple aarch64-unknown-unknown %s -o %t.o |
| # RUN: %clang %cflags %t.o -o %t.exe -Wl,-q -static |
| # RUN: llvm-bolt %t.exe -o %t.null --print-all 2>&1 | FileCheck %s |
| |
| # CHECK: Binary Function "_start" after building cfg |
| # CHECK: internal call detected in function _start |
| # CHECK-NOT: Binary Function "_start" after validate-internal-calls |
| |
| .text |
| .globl _start |
| .type _start, %function |
| _start: |
| .cfi_startproc |
| .LBB00: |
| mov x11, #0x1fff |
| cmp x1, x11 |
| b.hi .Ltmp1 |
| |
| .entry1: |
| movi v4.16b, #0x0 |
| movi v5.16b, #0x0 |
| subs x1, x1, #0x8 |
| b.lo .Ltmp2 |
| |
| .entry2: |
| ld1 { v2.2d, v3.2d }, [x0], #32 |
| ld1 { v0.2d, v1.2d }, [x0], #32 |
| |
| .Ltmp2: |
| uaddlp v4.4s, v4.8h |
| uaddlp v4.2d, v4.4s |
| mov x0, v4.d[0] |
| mov x1, v4.d[1] |
| add x0, x0, x1 |
| ret x30 |
| |
| .Ltmp1: |
| mov x8, x30 |
| |
| .Lloop: |
| add x5, x0, x9 |
| mov x1, #0xface |
| movi v4.16b, #0x0 |
| movi v5.16b, #0x0 |
| bl .entry2 |
| add x4, x4, x0 |
| mov x0, x5 |
| sub x7, x7, x10 |
| cmp x7, x11 |
| b.hi .Lloop |
| |
| mov x1, x7 |
| bl .entry1 |
| add x0, x4, x0 |
| mov x30, x8 |
| ret x30 |
| |
| .cfi_endproc |
| .size _start, .-_start |
| |
| ## Force relocation mode. |
| .reloc 0, R_AARCH64_NONE |