Home | History | Annotate | Line # | Download | only in profile
      1  1.1  joerg """
      2  1.1  joerg This test produces three shared libraries:
      3  1.1  joerg 
      4  1.1  joerg 1. libt-instr.so is instrumented
      5  1.1  joerg 2. libt-no-instr1.so is not instrumented
      6  1.1  joerg 3. libt-no-instr2.so is built with profile rt linked in (via -u<hook>), but the object file is built
      7  1.1  joerg    with instrumentation turned off.
      8  1.1  joerg 
      9  1.1  joerg After the libraries are built, the main program is then built with/without instrumentation and linked
     10  1.1  joerg against 3 libraries above.
     11  1.1  joerg 
     12  1.1  joerg The test is to verify that programs linked against these shared objects with and without instrumentation
     13  1.1  joerg enabled behave as expected.
     14  1.1  joerg """
     15  1.1  joerg 
     16  1.1  joerg RUN: mkdir -p %t.d
     17  1.1  joerg RUN: %clang_profgen -o %t.d/libt-instr.so -fPIC -shared %S/Inputs/instrprof-shared-lib.c
     18  1.1  joerg RUN: %clang -o %t.d/libt-no-instr1.so -fPIC -shared %S/Inputs/instrprof-shared-lib.c
     19  1.1  joerg RUN: %clang -c -o %t.d/instrprof-shared-lib-no-instr2.o -fPIC  %S/Inputs/instrprof-shared-lib.c
     20  1.1  joerg RUN: %clang_profgen -o %t.d/libt-no-instr2.so -fPIC -shared %t.d/instrprof-shared-lib-no-instr2.o
     21  1.1  joerg 
     22  1.1  joerg RUN: %clang_profgen -o %t-instr-instr -L%t.d -rpath %t.d -lt-instr  %S/Inputs/instrprof-shared-main.c
     23  1.1  joerg RUN: %clang_profgen -o %t-instr-no-instr1 -L%t.d -rpath %t.d -lt-no-instr1  %S/Inputs/instrprof-shared-main.c
     24  1.1  joerg RUN: %clang_profgen -o %t-instr-no-instr2 -L%t.d -rpath %t.d -lt-no-instr2  %S/Inputs/instrprof-shared-main.c
     25  1.1  joerg RUN: %clang -o %t-no-instr1-instr -L%t.d -rpath %t.d -lt-instr  %S/Inputs/instrprof-shared-main.c
     26  1.1  joerg RUN: %clang -o %t-no-instr1-no-instr1 -L%t.d -rpath %t.d -lt-no-instr1  %S/Inputs/instrprof-shared-main.c
     27  1.1  joerg RUN: %clang -o %t-no-instr1-no-instr2 -L%t.d -rpath %t.d -lt-no-instr2  %S/Inputs/instrprof-shared-main.c
     28  1.1  joerg RUN: %clang -c -o %t.d/instrprof-shared-main-no-instr2.o  %S/Inputs/instrprof-shared-main.c
     29  1.1  joerg RUN: %clang -o %t-no-instr2-instr -L%t.d -rpath %t.d -lt-instr  %t.d/instrprof-shared-main-no-instr2.o
     30  1.1  joerg RUN: %clang -o %t-no-instr2-no-instr1 -L%t.d -rpath %t.d -lt-no-instr1  %t.d/instrprof-shared-main-no-instr2.o
     31  1.1  joerg RUN: %clang -o %t-no-instr2-no-instr2 -L%t.d -rpath %t.d -lt-no-instr2  %t.d/instrprof-shared-main-no-instr2.o
     32  1.1  joerg 
     33  1.1  joerg RUN: env LLVM_PROFILE_FILE=%t-instr-instr.profraw %run %t-instr-instr
     34  1.1  joerg RUN: env LLVM_PROFILE_FILE=%t-instr-no-instr1.profraw %run %t-instr-no-instr1
     35  1.1  joerg RUN: env LLVM_PROFILE_FILE=%t-instr-no-instr2.profraw %run %t-instr-no-instr2
     36  1.1  joerg RUN: env LLVM_PROFILE_FILE=%t-no-instr1-instr.profraw %run %t-no-instr1-instr
     37  1.1  joerg RUN: env LLVM_PROFILE_FILE=%t-no-instr2-instr.profraw %run %t-no-instr2-instr
     38  1.1  joerg RUN: env LLVM_PROFILE_FILE=%t-no-instr1-no-instr1.profraw %run %t-no-instr1-no-instr1
     39  1.1  joerg RUN: env LLVM_PROFILE_FILE=%t-no-instr1-no-instr2.profraw %run %t-no-instr1-no-instr2
     40  1.1  joerg RUN: env LLVM_PROFILE_FILE=%t-no-instr2-no-instr1.profraw %run %t-no-instr2-no-instr1
     41  1.1  joerg RUN: env LLVM_PROFILE_FILE=%t-no-instr2-no-instr2.profraw %run %t-no-instr2-no-instr2
     42  1.1  joerg 
     43  1.1  joerg RUN: llvm-profdata merge -o %t-instr-instr.profdata %t-instr-instr.profraw
     44  1.1  joerg RUN: llvm-profdata merge -o %t-instr-no-instr1.profdata %t-instr-no-instr1.profraw
     45  1.1  joerg RUN: llvm-profdata merge -o %t-instr-no-instr2.profdata %t-instr-no-instr2.profraw
     46  1.1  joerg RUN: llvm-profdata merge -o %t-no-instr1-instr.profdata %t-no-instr1-instr.profraw
     47  1.1  joerg RUN: llvm-profdata merge -o %t-no-instr2-instr.profdata %t-no-instr2-instr.profraw
     48  1.1  joerg 
     49  1.1  joerg RUN: not llvm-profdata merge -o %t-no-instr1-no-instr1.profdata %t-no-instr1-no-instr1.profraw 2>&1 | FileCheck %s --check-prefix=MISSING-FILE
     50  1.1  joerg RUN: not llvm-profdata merge -o %t-no-instr2-no-instr1.profdata %t-no-instr2-no-instr1.profraw 2>&1 | FileCheck %s --check-prefix=MISSING-FILE
     51  1.1  joerg MISSING-FILE: profraw
     52  1.1  joerg 
     53  1.1  joerg RUN: llvm-profdata show -counts --function main %t-instr-instr.profdata | grep -v 'Total\|Maximum' > %t-main-1
     54  1.1  joerg RUN: llvm-profdata show -counts --function main %t-instr-no-instr1.profdata | grep -v 'Total\|Maximum' > %t-main-2
     55  1.1  joerg RUN: llvm-profdata show -counts --function main %t-instr-no-instr2.profdata | grep -v 'Total\|Maximum' > %t-main-3
     56  1.1  joerg RUN: llvm-profdata show -counts --function foo %t-instr-instr.profdata | grep -v 'Total\|Maximum' > %t-foo-1
     57  1.1  joerg RUN: llvm-profdata show -counts --function foo %t-no-instr1-instr.profdata | grep -v 'Total\|Maximum' > %t-foo-2
     58  1.1  joerg RUN: llvm-profdata show -counts --function foo %t-no-instr2-instr.profdata | grep -v 'Total\|Maximum'  > %t-foo-3
     59  1.1  joerg 
     60  1.1  joerg RUN: %clang_profuse=%t-instr-instr.profdata -o %t-main-instr-instr.ll -S -emit-llvm %S/Inputs/instrprof-shared-main.c
     61  1.1  joerg RUN: %clang_profuse=%t-instr-no-instr1.profdata -o %t-main-instr-no-instr1.ll -S -emit-llvm %S/Inputs/instrprof-shared-main.c
     62  1.1  joerg RUN: %clang_profuse=%t-instr-no-instr2.profdata -o %t-main-instr-no-instr2.ll -S -emit-llvm %S/Inputs/instrprof-shared-main.c
     63  1.1  joerg RUN: %clang_profuse=%t-instr-instr.profdata -o %t-lib-instr-instr.ll -S -emit-llvm %S/Inputs/instrprof-shared-lib.c
     64  1.1  joerg RUN: %clang_profuse=%t-no-instr1-instr.profdata -o %t-lib-no-instr1-instr.ll -S -emit-llvm %S/Inputs/instrprof-shared-lib.c
     65  1.1  joerg RUN: %clang_profuse=%t-no-instr2-instr.profdata -o %t-lib-no-instr2-instr.ll -S -emit-llvm %S/Inputs/instrprof-shared-lib.c
     66  1.1  joerg RUN: %clang_profuse=%t-instr-instr.profdata -o %t-lib-instr-instr.ll -S -emit-llvm %S/Inputs/instrprof-shared-lib.c
     67  1.1  joerg 
     68  1.1  joerg RUN: diff %t-main-instr-no-instr1.ll %t-main-instr-no-instr2.ll
     69  1.1  joerg RUN: diff %t-lib-no-instr1-instr.ll %t-lib-no-instr2-instr.ll
     70  1.1  joerg 
     71  1.1  joerg RUN: diff %t-main-1 %t-main-2
     72  1.1  joerg RUN: diff %t-main-1 %t-main-3
     73  1.1  joerg RUN: diff %t-foo-1 %t-foo-2
     74  1.1  joerg RUN: diff %t-foo-1 %t-foo-3
     75  1.1  joerg 
     76