| // RUN: rm -rf %t && split-file %s %t | |
| // RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm %t/main.c -o - | FileCheck %s | |
| // RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -fprofile-list=%t/func.list -emit-llvm %t/main.c -o - | FileCheck %s --check-prefix=FUNC | |
| // RUN: echo "src:%t/main.c" | sed -e 's/\\/\\\\/g' > %t-file.list | |
| // RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -fprofile-list=%t-file.list -emit-llvm %t/main.c -o - | FileCheck %s --check-prefix=FILE | |
| // RUN: %clang_cc1 -fprofile-instrument=llvm -fprofile-list=%t/section.list -emit-llvm %t/main.c -o - | FileCheck %s --check-prefix=SECTION | |
| // RUN: %clang_cc1 -fprofile-instrument=sample-coldcov -fprofile-list=%t/cold-func.list -emit-llvm %t/main.c -o - | FileCheck %s --check-prefix=COLDCOV | |
| // RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -fprofile-list=%t/exclude.list -emit-llvm %t/main.c -o - | FileCheck %s --check-prefix=EXCLUDE | |
| // RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -fprofile-list=%t/exclude-only.list -emit-llvm %t/main.c -o - | FileCheck %s --check-prefix=EXCLUDE | |
| //--- func.list | |
| fun:test1 | |
| //--- section.list | |
| [clang] | |
| fun:test1 | |
| [llvm] | |
| fun:test2 | |
| //--- cold-func.list | |
| [sample-coldcov] | |
| fun:test* | |
| !fun:test2 | |
| //--- exclude.list | |
| fun:test* | |
| !fun:test1 | |
| //--- exclude-only.list | |
| !fun:test1 | |
| //--- main.c | |
| unsigned i; | |
| // CHECK: test1 | |
| // CHECK: test2 | |
| // FUNC: test1 | |
| // FUNC-NOT: test2 | |
| // FILE: test1 | |
| // FILE: test2 | |
| // EXCLUDE-NOT: test1 | |
| // EXCLUDE: test2 | |
| // CHECK-NOT: noprofile | |
| // CHECK: @test1 | |
| // FUNC-NOT: noprofile | |
| // FUNC: @test1 | |
| // FILE-NOT: noprofile | |
| // FILE: @test1 | |
| // SECTION: noprofile | |
| // SECTION: @test1 | |
| // EXCLUDE: noprofile | |
| // EXCLUDE: @test1 | |
| // COLDCOV-NOT: noprofile | |
| // COLDCOV: @test1 | |
| unsigned test1(void) { | |
| // CHECK: %pgocount = load i64, ptr @__profc_{{_?}}test1 | |
| // FUNC: %pgocount = load i64, ptr @__profc_{{_?}}test1 | |
| // FILE: %pgocount = load i64, ptr @__profc_{{_?}}test1 | |
| // SECTION-NOT: %pgocount = load i64, ptr @__profc_{{_?}}test1 | |
| // EXCLUDE-NOT: %pgocount = load i64, ptr @__profc_{{_?}}test1 | |
| return i + 1; | |
| } | |
| // CHECK-NOT: noprofile | |
| // CHECK: @test2 | |
| // FUNC: noprofile | |
| // FUNC: @test2 | |
| // FILE-NOT: noprofile | |
| // FILE: @test2 | |
| // SECTION-NOT: noprofile | |
| // SECTION: @test2 | |
| // EXCLUDE-NOT: noprofile | |
| // EXCLUDE: @test2 | |
| // COLDCOV: noprofile | |
| // COLDCOV: @test2 | |
| unsigned test2(void) { | |
| // CHECK: %pgocount = load i64, ptr @__profc_{{_?}}test2 | |
| // FUNC-NOT: %pgocount = load i64, ptr @__profc_{{_?}}test2 | |
| // FILE: %pgocount = load i64, ptr @__profc_{{_?}}test2 | |
| // SECTION: %pgocount = load i64, ptr @__profc_{{_?}}test2 | |
| // EXCLUDE: %pgocount = load i64, ptr @__profc_{{_?}}test2 | |
| return i - 1; | |
| } |