xref: /llvm-project/bolt/test/runtime/X86/user-func-reorder.c (revision 6b4eb0b94a6d5e6b65aa874a65e01d8772cf7054)
1*6b4eb0b9SAmir Ayupov /* Checks that BOLT correctly processes a user-provided function list file,
2*6b4eb0b9SAmir Ayupov  * reorder functions according to this list, update hot_start and hot_end
3*6b4eb0b9SAmir Ayupov  * symbols and insert a function to perform hot text mapping during program
4*6b4eb0b9SAmir Ayupov  * startup.
5*6b4eb0b9SAmir Ayupov  */
6*6b4eb0b9SAmir Ayupov #include <stdio.h>
7*6b4eb0b9SAmir Ayupov 
8*6b4eb0b9SAmir Ayupov int foo(int x) {
9*6b4eb0b9SAmir Ayupov   return x + 1;
10*6b4eb0b9SAmir Ayupov }
11*6b4eb0b9SAmir Ayupov 
12*6b4eb0b9SAmir Ayupov int fib(int x) {
13*6b4eb0b9SAmir Ayupov   if (x < 2)
14*6b4eb0b9SAmir Ayupov     return x;
15*6b4eb0b9SAmir Ayupov   return fib(x - 1) + fib(x - 2);
16*6b4eb0b9SAmir Ayupov }
17*6b4eb0b9SAmir Ayupov 
18*6b4eb0b9SAmir Ayupov int bar(int x) {
19*6b4eb0b9SAmir Ayupov   return x - 1;
20*6b4eb0b9SAmir Ayupov }
21*6b4eb0b9SAmir Ayupov 
22*6b4eb0b9SAmir Ayupov int main(int argc, char **argv) {
23*6b4eb0b9SAmir Ayupov   printf("fib(%d) = %d\n", argc, fib(argc));
24*6b4eb0b9SAmir Ayupov   return 0;
25*6b4eb0b9SAmir Ayupov }
26*6b4eb0b9SAmir Ayupov 
27*6b4eb0b9SAmir Ayupov /*
28*6b4eb0b9SAmir Ayupov REQUIRES: system-linux
29*6b4eb0b9SAmir Ayupov 
30*6b4eb0b9SAmir Ayupov RUN: %clang %cflags %s -o %t.exe -Wl,-q
31*6b4eb0b9SAmir Ayupov 
32*6b4eb0b9SAmir Ayupov RUN: llvm-bolt %t.exe -relocs=1 -lite -reorder-functions=user \
33*6b4eb0b9SAmir Ayupov RUN:   -hugify -function-order=%p/Inputs/user_func_order.txt -o %t
34*6b4eb0b9SAmir Ayupov RUN: llvm-nm --numeric-sort --print-armap %t | \
35*6b4eb0b9SAmir Ayupov RUN:   FileCheck %s -check-prefix=CHECK-NM
36*6b4eb0b9SAmir Ayupov RUN: %t 1 2 3 | FileCheck %s -check-prefix=CHECK-OUTPUT
37*6b4eb0b9SAmir Ayupov 
38*6b4eb0b9SAmir Ayupov CHECK-NM:      W  __hot_start
39*6b4eb0b9SAmir Ayupov CHECK-NM:      T main
40*6b4eb0b9SAmir Ayupov CHECK-NM-NEXT: T fib
41*6b4eb0b9SAmir Ayupov CHECK-NM-NEXT: W __hot_end
42*6b4eb0b9SAmir Ayupov 
43*6b4eb0b9SAmir Ayupov CHECK-OUTPUT: fib(4) = 3
44*6b4eb0b9SAmir Ayupov */
45