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 Ayupovint foo(int x) { 96b4eb0b9SAmir Ayupov return x + 1; 106b4eb0b9SAmir Ayupov } 116b4eb0b9SAmir Ayupov fib(int x)126b4eb0b9SAmir Ayupovint 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 Ayupovint bar(int x) { 196b4eb0b9SAmir Ayupov return x - 1; 206b4eb0b9SAmir Ayupov } 216b4eb0b9SAmir Ayupov main(int argc,char ** argv)226b4eb0b9SAmir Ayupovint 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