forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[BOLT] Handle internal calls in ValidateInternalCalls (llvm#105736)
Move handling of all internal calls into the designated pass. Preserve NOPs and mark functions as non-simple on non-X86 platforms.
- Loading branch information
Showing
4 changed files
with
77 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
## 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 |