xref: /llvm-project/bolt/test/runtime/X86/user-func-reorder.c (revision d648aa1b8e937de1648524e1f1016b53b29ba2a4)
16b4eb0b9SAmir Ayupov /* Checks that BOLT correctly processes a user-provided function list file,
26b4eb0b9SAmir Ayupov  * reorder functions according to this list, update hot_start and hot_end
36b4eb0b9SAmir Ayupov  * symbols and insert a function to perform hot text mapping during program
46b4eb0b9SAmir Ayupov  * startup.
56b4eb0b9SAmir Ayupov  */
66b4eb0b9SAmir Ayupov #include <stdio.h>
76b4eb0b9SAmir Ayupov 
foo(int x)86b4eb0b9SAmir Ayupov int foo(int x) {
96b4eb0b9SAmir Ayupov   return x + 1;
106b4eb0b9SAmir Ayupov }
116b4eb0b9SAmir Ayupov 
fib(int x)126b4eb0b9SAmir Ayupov int fib(int x) {
136b4eb0b9SAmir Ayupov   if (x < 2)
146b4eb0b9SAmir Ayupov     return x;
156b4eb0b9SAmir Ayupov   return fib(x - 1) + fib(x - 2);
166b4eb0b9SAmir Ayupov }
176b4eb0b9SAmir Ayupov 
bar(int x)186b4eb0b9SAmir Ayupov int bar(int x) {
196b4eb0b9SAmir Ayupov   return x - 1;
206b4eb0b9SAmir Ayupov }
216b4eb0b9SAmir Ayupov 
main(int argc,char ** argv)226b4eb0b9SAmir Ayupov int main(int argc, char **argv) {
236b4eb0b9SAmir Ayupov   printf("fib(%d) = %d\n", argc, fib(argc));
246b4eb0b9SAmir Ayupov   return 0;
256b4eb0b9SAmir Ayupov }
266b4eb0b9SAmir Ayupov 
276b4eb0b9SAmir Ayupov /*
280559dab5SRafael Auler REQUIRES: system-linux,bolt-runtime
296b4eb0b9SAmir Ayupov 
30487570fbSAmir Ayupov RUN: %clang %cflags -no-pie %s -o %t.exe -Wl,-q
316b4eb0b9SAmir Ayupov 
32*d648aa1bSMaksim Panchenko RUN: llvm-bolt %t.exe --relocs=1 --lite --reorder-functions=user \
33*d648aa1bSMaksim Panchenko RUN:   --hugify --function-order=%p/Inputs/user_func_order.txt -o %t
346b4eb0b9SAmir Ayupov RUN: llvm-nm --numeric-sort --print-armap %t | \
356b4eb0b9SAmir Ayupov RUN:   FileCheck %s -check-prefix=CHECK-NM
366b4eb0b9SAmir Ayupov RUN: %t 1 2 3 | FileCheck %s -check-prefix=CHECK-OUTPUT
376b4eb0b9SAmir Ayupov 
386b4eb0b9SAmir Ayupov CHECK-NM:      W  __hot_start
396b4eb0b9SAmir Ayupov CHECK-NM:      T main
406b4eb0b9SAmir Ayupov CHECK-NM-NEXT: T fib
416b4eb0b9SAmir Ayupov CHECK-NM-NEXT: W __hot_end
426b4eb0b9SAmir Ayupov 
436b4eb0b9SAmir Ayupov CHECK-OUTPUT: fib(4) = 3
446b4eb0b9SAmir Ayupov */
45