diff options
| author | Diego Novillo <dnovillo@google.com> | 2015-10-28 22:30:25 +0000 |
|---|---|---|
| committer | Diego Novillo <dnovillo@google.com> | 2015-10-28 22:30:25 +0000 |
| commit | 748b3ffe3b8d83e2405e41c572cc19bc9f211053 (patch) | |
| tree | 01fb113e6fc6d513589714e71d57740bf46d2d51 /llvm/test | |
| parent | 11a17198e0396ac11d8034cf9d88e3c4c5c4e1f6 (diff) | |
| download | bcm5719-llvm-748b3ffe3b8d83e2405e41c572cc19bc9f211053.tar.gz bcm5719-llvm-748b3ffe3b8d83e2405e41c572cc19bc9f211053.zip | |
SamplePGO - Add flag to check sampling coverage.
This adds the flag -mllvm -sample-profile-check-coverage=N to the
SampleProfile pass. N is the percent of input sample records that the
user expects to apply. If the pass does not use N% (or more) of the
sample records in the input, it emits a warning.
This is useful to detect some forms of stale profiles. If the code has
drifted enough from the original profile, there will be records that do
not match the IR anymore.
This will not detect cases where a sample profile record for line L is
referring to some other instructions that also used to be at line L.
llvm-svn: 251568
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/Transforms/SampleProfile/Inputs/coverage-warning.prof | 5 | ||||
| -rw-r--r-- | llvm/test/Transforms/SampleProfile/coverage-warning.ll | 45 |
2 files changed, 50 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SampleProfile/Inputs/coverage-warning.prof b/llvm/test/Transforms/SampleProfile/Inputs/coverage-warning.prof new file mode 100644 index 00000000000..57989b837a0 --- /dev/null +++ b/llvm/test/Transforms/SampleProfile/Inputs/coverage-warning.prof @@ -0,0 +1,5 @@ +foo:30000:100 + 2: 28000 + 3: 1000 +# This profile is stale. Function foo() does not have a line 8 anymore. + 8: 1700 diff --git a/llvm/test/Transforms/SampleProfile/coverage-warning.ll b/llvm/test/Transforms/SampleProfile/coverage-warning.ll new file mode 100644 index 00000000000..f96068002dd --- /dev/null +++ b/llvm/test/Transforms/SampleProfile/coverage-warning.ll @@ -0,0 +1,45 @@ +; RUN: opt < %s -sample-profile -sample-profile-file=%S/Inputs/coverage-warning.prof -sample-profile-check-coverage=90 2>& 1 | FileCheck %s +define i32 @foo(i32 %i) { +; The profile has samples for line locations that are no longer present. +; Coverage does not reach 90%, so we should get this warning: +; +; CHECK: warning: coverage-warning.c:1: 2 of 3 available profile records (66%) were applied +entry: + %retval = alloca i32, align 4 + %i.addr = alloca i32, align 4 + store i32 %i, i32* %i.addr, align 4 + %0 = load i32, i32* %i.addr, align 4, !dbg !9 + %cmp = icmp sgt i32 %0, 1000, !dbg !10 + br i1 %cmp, label %if.then, label %if.end, !dbg !9 + +if.then: ; preds = %entry + store i32 30, i32* %retval, align 4, !dbg !11 + br label %return, !dbg !11 + +if.end: ; preds = %entry + store i32 3, i32* %retval, align 4, !dbg !12 + br label %return, !dbg !12 + +return: ; preds = %if.end, %if.then + %1 = load i32, i32* %retval, align 4, !dbg !13 + ret i32 %1, !dbg !13 +} + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!6, !7} +!llvm.ident = !{!8} + +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.8.0 (trunk 251524) (llvm/trunk 251531)", isOptimized: false, runtimeVersion: 0, emissionKind: 2, enums: !2, subprograms: !3) +!1 = !DIFile(filename: "coverage-warning.c", directory: ".") +!2 = !{} +!3 = !{!4} +!4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, function: i32 (i32)* @foo, variables: !2) +!5 = !DISubroutineType(types: !2) +!6 = !{i32 2, !"Dwarf Version", i32 4} +!7 = !{i32 2, !"Debug Info Version", i32 3} +!8 = !{!"clang version 3.8.0 (trunk 251524) (llvm/trunk 251531)"} +!9 = !DILocation(line: 2, column: 7, scope: !4) +!10 = !DILocation(line: 2, column: 9, scope: !4) +!11 = !DILocation(line: 3, column: 5, scope: !4) +!12 = !DILocation(line: 4, column: 3, scope: !4) +!13 = !DILocation(line: 5, column: 1, scope: !4) |

