summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorBrian Gesiak <modocache@gmail.com>2017-06-30 23:14:53 +0000
committerBrian Gesiak <modocache@gmail.com>2017-06-30 23:14:53 +0000
commit4ef3daafef7c53d03bd221a323d34ae2cd47d14d (patch)
tree4fad026658b6f904209da704a666f75f6a0ca41a /llvm/test
parent4fcfc19976c9abfb98008f67c973b99376580121 (diff)
downloadbcm5719-llvm-4ef3daafef7c53d03bd221a323d34ae2cd47d14d.tar.gz
bcm5719-llvm-4ef3daafef7c53d03bd221a323d34ae2cd47d14d.zip
[ORE] Add diagnostics hotness threshold
Summary: Add an option to prevent diagnostics that do not meet a minimum hotness threshold from being output. When generating optimization remarks for large codebases with a ton of cold code paths, this option can be used to limit the optimization remark output at a reasonable size. Discussion of this change can be read here: http://lists.llvm.org/pipermail/llvm-dev/2017-June/114377.html Reviewers: anemet, davidxl, hfinkel Reviewed By: anemet Subscribers: qcolombet, javed.absar, fhahn, eraman, llvm-commits Differential Revision: https://reviews.llvm.org/D34867 llvm-svn: 306912
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/AArch64/arm64-spill-remarks.ll27
-rw-r--r--llvm/test/Transforms/Inline/optimization-remarks-yaml.ll18
2 files changed, 44 insertions, 1 deletions
diff --git a/llvm/test/CodeGen/AArch64/arm64-spill-remarks.ll b/llvm/test/CodeGen/AArch64/arm64-spill-remarks.ll
index bc9340352d7..cfebeb496e1 100644
--- a/llvm/test/CodeGen/AArch64/arm64-spill-remarks.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-spill-remarks.ll
@@ -3,6 +3,15 @@
; RUN: llc < %s -mtriple=arm64-apple-ios7.0 -aarch64-neon-syntax=apple 2>&1 | FileCheck -check-prefix=NO_REMARK %s
; RUN: llc < %s -mtriple=arm64-apple-ios7.0 -aarch64-neon-syntax=apple -pass-remarks-output=%t.yaml -pass-remarks-with-hotness 2>&1 | FileCheck -check-prefix=NO_REMARK %s
; RUN: cat %t.yaml | FileCheck -check-prefix=YAML %s
+;
+; Verify that remarks below the hotness threshold are not output.
+; RUN: llc < %s -mtriple=arm64-apple-ios7.0 -aarch64-neon-syntax=apple -pass-remarks-missed=regalloc \
+; RUN: -pass-remarks-with-hotness -pass-remarks-hotness-threshold=500 \
+; RUN: 2>&1 | FileCheck -check-prefix=THRESHOLD %s
+; RUN: llc < %s -mtriple=arm64-apple-ios7.0 -aarch64-neon-syntax=apple -pass-remarks-output=%t.threshold.yaml \
+; RUN: -pass-remarks-with-hotness -pass-remarks-hotness-threshold=500 \
+; RUN: 2>&1 | FileCheck -check-prefix=NO_REMARK %s
+; RUN: cat %t.threshold.yaml | FileCheck -check-prefix=THRESHOLD_YAML %s
; This has two nested loops, each with one value that has to be spilled and
; then reloaded.
@@ -23,6 +32,9 @@
; NO_REMARK-NOT: remark
+; THRESHOLD-NOT: (hotness: 300)
+; THRESHOLD: remark: /tmp/kk.c:2:20: 1 spills 1 reloads generated in loop (hotness: 30000)
+
; YAML: --- !Missed
; YAML: Pass: regalloc
; YAML: Name: LoopSpillReload
@@ -63,6 +75,21 @@
; YAML: - String: generated in loop
; YAML: ...
+; THRESHOLD_YAML-NOT: Hotness: 300{{$}}
+; THRESHOLD_YAML: --- !Missed
+; THRESHOLD_YAML: Pass: regalloc
+; THRESHOLD_YAML: Name: LoopSpillReload
+; THRESHOLD_YAML: DebugLoc: { File: /tmp/kk.c, Line: 2, Column: 20 }
+; THRESHOLD_YAML: Function: fpr128
+; THRESHOLD_YAML: Hotness: 30000
+; THRESHOLD_YAML: Args:
+; THRESHOLD_YAML: - NumSpills: '1'
+; THRESHOLD_YAML: - String: ' spills '
+; THRESHOLD_YAML: - NumReloads: '1'
+; THRESHOLD_YAML: - String: ' reloads '
+; THRESHOLD_YAML: - String: generated in loop
+; THRESHOLD_YAML: ...
+
define void @fpr128(<4 x float>* %p) nounwind ssp !prof !11 {
entry:
br label %loop, !dbg !8
diff --git a/llvm/test/Transforms/Inline/optimization-remarks-yaml.ll b/llvm/test/Transforms/Inline/optimization-remarks-yaml.ll
index 532e443e217..16783634484 100644
--- a/llvm/test/Transforms/Inline/optimization-remarks-yaml.ll
+++ b/llvm/test/Transforms/Inline/optimization-remarks-yaml.ll
@@ -1,8 +1,21 @@
-; RUN: opt < %s -S -inline -pass-remarks-missed=inline -pass-remarks-with-hotness \
+; RUN: opt < %s -S -inline -pass-remarks-missed=inline \
+; RUN: -pass-remarks-with-hotness -pass-remarks-hotness-threshold 15 \
; RUN: -pass-remarks-output=%t 2>&1 | FileCheck %s
; RUN: cat %t | FileCheck -check-prefix=YAML %s
; RUN: opt < %s -S -inline -pass-remarks-with-hotness -pass-remarks-output=%t
; RUN: cat %t | FileCheck -check-prefix=YAML %s
+;
+; Verify that remarks that don't meet the hotness threshold are not output.
+; RUN: opt < %s -S -inline -pass-remarks-missed=inline \
+; RUN: -pass-remarks-with-hotness -pass-remarks-hotness-threshold 100 \
+; RUN: -pass-remarks-output=%t.threshold 2>&1 | \
+; RUN: FileCheck -check-prefix=THRESHOLD %s
+; RUN: test ! -s %t.threshold
+; RUN: opt < %s -S -inline \
+; RUN: -pass-remarks-with-hotness -pass-remarks-hotness-threshold 100 \
+; RUN: -pass-remarks-output=%t.threshold
+; The remarks output file should be empty.
+; RUN: test ! -s %t.threshold
; Check the YAML file generated for inliner remarks for this program:
;
@@ -43,6 +56,9 @@
; YAML-NEXT: - String: ' because its definition is unavailable'
; YAML-NEXT: ...
+; No remarks should be output, since none meet the threshold.
+; THRESHOLD-NOT: remark
+
; ModuleID = '/tmp/s.c'
source_filename = "/tmp/s.c"
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
OpenPOWER on IntegriCloud