summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Hosek <phosek@chromium.org>2019-09-10 06:25:13 +0000
committerPetr Hosek <phosek@chromium.org>2019-09-10 06:25:13 +0000
commitb95962dac042c42b978708f495b6fa43fe72074c (patch)
treef59e0188e272aa0e827b5b09ee4b8844a3e5f6b4
parent14dee917c5c8fe77fdb50b5554d3d8912ad346a3 (diff)
downloadclang-b95962dac042c42b978708f495b6fa43fe72074c.tar.gz
Revert "clang-misexpect: Profile Guided Validation of Performance Annotations in LLVM"
This reverts commit r371484: this broke sanitizer-x86_64-linux-fast bot. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@371488 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Basic/DiagnosticFrontendKinds.td7
-rw-r--r--include/clang/Basic/DiagnosticGroups.td1
-rw-r--r--lib/CodeGen/CodeGenAction.cpp26
-rw-r--r--lib/Frontend/CompilerInvocation.cpp3
-rw-r--r--test/Profile/Inputs/misexpect-branch-nonconst-expect-arg.proftext9
-rw-r--r--test/Profile/Inputs/misexpect-branch.proftext9
-rw-r--r--test/Profile/Inputs/misexpect-switch-default-only.proftext12
-rw-r--r--test/Profile/Inputs/misexpect-switch-default.proftext16
-rw-r--r--test/Profile/Inputs/misexpect-switch.proftext16
-rw-r--r--test/Profile/misexpect-branch-cold.c26
-rw-r--r--test/Profile/misexpect-branch-nonconst-expected-val.c23
-rw-r--r--test/Profile/misexpect-branch-unpredictable.c25
-rw-r--r--test/Profile/misexpect-branch.c28
-rw-r--r--test/Profile/misexpect-switch-default.c40
-rw-r--r--test/Profile/misexpect-switch-nonconst.c43
-rw-r--r--test/Profile/misexpect-switch-only-default-case.c35
-rw-r--r--test/Profile/misexpect-switch.c41
17 files changed, 1 insertions, 359 deletions
diff --git a/include/clang/Basic/DiagnosticFrontendKinds.td b/include/clang/Basic/DiagnosticFrontendKinds.td
index 3ab18913a4..7a990164b0 100644
--- a/include/clang/Basic/DiagnosticFrontendKinds.td
+++ b/include/clang/Basic/DiagnosticFrontendKinds.td
@@ -275,12 +275,7 @@ def warn_profile_data_missing : Warning<
def warn_profile_data_unprofiled : Warning<
"no profile data available for file \"%0\"">,
InGroup<ProfileInstrUnprofiled>;
-def warn_profile_data_misexpect : Warning<
- "Potential performance regression from use of __builtin_expect(): "
- "Annotation was correct on %0 of profiled executions.">,
- BackendInfo,
- InGroup<MisExpect>,
- DefaultIgnore;
+
} // end of instrumentation issue category
}
diff --git a/include/clang/Basic/DiagnosticGroups.td b/include/clang/Basic/DiagnosticGroups.td
index a74427dba2..ee6ecb9a44 100644
--- a/include/clang/Basic/DiagnosticGroups.td
+++ b/include/clang/Basic/DiagnosticGroups.td
@@ -1042,7 +1042,6 @@ def BackendOptimizationFailure : DiagGroup<"pass-failed">;
def ProfileInstrMissing : DiagGroup<"profile-instr-missing">;
def ProfileInstrOutOfDate : DiagGroup<"profile-instr-out-of-date">;
def ProfileInstrUnprofiled : DiagGroup<"profile-instr-unprofiled">;
-def MisExpect : DiagGroup<"misexpect">;
// AddressSanitizer frontend instrumentation remarks.
def SanitizeAddressRemarks : DiagGroup<"sanitize-address">;
diff --git a/lib/CodeGen/CodeGenAction.cpp b/lib/CodeGen/CodeGenAction.cpp
index 87bda4a0fc..2356f84c05 100644
--- a/lib/CodeGen/CodeGenAction.cpp
+++ b/lib/CodeGen/CodeGenAction.cpp
@@ -14,7 +14,6 @@
#include "clang/AST/ASTContext.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclGroup.h"
-#include "clang/Basic/DiagnosticFrontend.h"
#include "clang/Basic/FileManager.h"
#include "clang/Basic/LangStandard.h"
#include "clang/Basic/SourceManager.h"
@@ -366,9 +365,6 @@ namespace clang {
bool StackSizeDiagHandler(const llvm::DiagnosticInfoStackSize &D);
/// Specialized handler for unsupported backend feature diagnostic.
void UnsupportedDiagHandler(const llvm::DiagnosticInfoUnsupported &D);
- /// Specialized handler for misexpect warnings.
- /// Note that misexpect remarks are emitted through ORE
- void MisExpectDiagHandler(const llvm::DiagnosticInfoMisExpect &D);
/// Specialized handlers for optimization remarks.
/// Note that these handlers only accept remarks and they always handle
/// them.
@@ -621,25 +617,6 @@ void BackendConsumer::UnsupportedDiagHandler(
<< Filename << Line << Column;
}
-void BackendConsumer::MisExpectDiagHandler(
- const llvm::DiagnosticInfoMisExpect &D) {
- StringRef Filename;
- unsigned Line, Column;
- bool BadDebugInfo = false;
- FullSourceLoc Loc =
- getBestLocationFromDebugLoc(D, BadDebugInfo, Filename, Line, Column);
-
- Diags.Report(Loc, diag::warn_profile_data_misexpect) << D.getMsg().str();
-
- if (BadDebugInfo)
- // If we were not able to translate the file:line:col information
- // back to a SourceLocation, at least emit a note stating that
- // we could not translate this location. This can happen in the
- // case of #line directives.
- Diags.Report(Loc, diag::note_fe_backend_invalid_loc)
- << Filename << Line << Column;
-}
-
void BackendConsumer::EmitOptimizationMessage(
const llvm::DiagnosticInfoOptimizationBase &D, unsigned DiagID) {
// We only support warnings and remarks.
@@ -810,9 +787,6 @@ void BackendConsumer::DiagnosticHandlerImpl(const DiagnosticInfo &DI) {
case llvm::DK_Unsupported:
UnsupportedDiagHandler(cast<DiagnosticInfoUnsupported>(DI));
return;
- case llvm::DK_MisExpect:
- MisExpectDiagHandler(cast<DiagnosticInfoMisExpect>(DI));
- return;
default:
// Plugin IDs are not bound to any value as they are set dynamically.
ComputeDiagRemarkID(Severity, backend_plugin, DiagID);
diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp
index 38d5694e7c..99713e5e16 100644
--- a/lib/Frontend/CompilerInvocation.cpp
+++ b/lib/Frontend/CompilerInvocation.cpp
@@ -3453,9 +3453,6 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
}
}
- if (Diags.isIgnored(diag::warn_profile_data_misexpect, SourceLocation()))
- Res.FrontendOpts.LLVMArgs.push_back("-pgo-warn-misexpect");
-
LangOpts.FunctionAlignment =
getLastArgIntValue(Args, OPT_function_alignment, 0, Diags);
diff --git a/test/Profile/Inputs/misexpect-branch-nonconst-expect-arg.proftext b/test/Profile/Inputs/misexpect-branch-nonconst-expect-arg.proftext
deleted file mode 100644
index a99351c06e..0000000000
--- a/test/Profile/Inputs/misexpect-branch-nonconst-expect-arg.proftext
+++ /dev/null
@@ -1,9 +0,0 @@
-bar
-# Func Hash:
-11262309464
-# Num Counters:
-2
-# Counter Values:
-200000
-2
-
diff --git a/test/Profile/Inputs/misexpect-branch.proftext b/test/Profile/Inputs/misexpect-branch.proftext
deleted file mode 100644
index b809c1491f..0000000000
--- a/test/Profile/Inputs/misexpect-branch.proftext
+++ /dev/null
@@ -1,9 +0,0 @@
-bar
-# Func Hash:
-45795613684824
-# Num Counters:
-2
-# Counter Values:
-200000
-0
-
diff --git a/test/Profile/Inputs/misexpect-switch-default-only.proftext b/test/Profile/Inputs/misexpect-switch-default-only.proftext
deleted file mode 100644
index ac59378e76..0000000000
--- a/test/Profile/Inputs/misexpect-switch-default-only.proftext
+++ /dev/null
@@ -1,12 +0,0 @@
-main
-# Func Hash:
-79676873694057560
-# Num Counters:
-5
-# Counter Values:
-1
-20
-20000
-20000
-20000
-
diff --git a/test/Profile/Inputs/misexpect-switch-default.proftext b/test/Profile/Inputs/misexpect-switch-default.proftext
deleted file mode 100644
index 7b2d59781a..0000000000
--- a/test/Profile/Inputs/misexpect-switch-default.proftext
+++ /dev/null
@@ -1,16 +0,0 @@
-main
-# Func Hash:
-8712453512413296413
-# Num Counters:
-9
-# Counter Values:
-1
-20000
-20000
-4066
-11889
-0
-0
-4045
-0
-
diff --git a/test/Profile/Inputs/misexpect-switch.proftext b/test/Profile/Inputs/misexpect-switch.proftext
deleted file mode 100644
index ce4c96b3e3..0000000000
--- a/test/Profile/Inputs/misexpect-switch.proftext
+++ /dev/null
@@ -1,16 +0,0 @@
-main
-# Func Hash:
-1965403898329309329
-# Num Counters:
-9
-# Counter Values:
-1
-20
-20000
-20000
-12
-26
-0
-0
-19962
-
diff --git a/test/Profile/misexpect-branch-cold.c b/test/Profile/misexpect-branch-cold.c
deleted file mode 100644
index 6d34f92a25..0000000000
--- a/test/Profile/misexpect-branch-cold.c
+++ /dev/null
@@ -1,26 +0,0 @@
-// Test that misexpect emits no warning when prediction is correct
-
-// RUN: llvm-profdata merge %S/Inputs/misexpect-branch.proftext -o %t.profdata
-// RUN: %clang_cc1 %s -O2 -o - -disable-llvm-passes -emit-llvm -fprofile-instrument-use-path=%t.profdata -verify -Wmisexpect
-
-// expected-no-diagnostics
-#define likely(x) __builtin_expect(!!(x), 1)
-#define unlikely(x) __builtin_expect(!!(x), 0)
-
-int foo(int);
-int baz(int);
-int buzz();
-
-const int inner_loop = 100;
-const int outer_loop = 2000;
-
-int bar() {
- int rando = buzz();
- int x = 0;
- if (unlikely(rando % (outer_loop * inner_loop) == 0)) {
- x = baz(rando);
- } else {
- x = foo(50);
- }
- return x;
-}
diff --git a/test/Profile/misexpect-branch-nonconst-expected-val.c b/test/Profile/misexpect-branch-nonconst-expected-val.c
deleted file mode 100644
index c5167b9a2a..0000000000
--- a/test/Profile/misexpect-branch-nonconst-expected-val.c
+++ /dev/null
@@ -1,23 +0,0 @@
-// Test that misexpect emits no warning when condition is not a compile-time constant
-
-// RUN: llvm-profdata merge %S/Inputs/misexpect-branch-nonconst-expect-arg.proftext -o %t.profdata
-// RUN: %clang_cc1 %s -O2 -o - -disable-llvm-passes -emit-llvm -fprofile-instrument-use-path=%t.profdata -verify -Wmisexpect
-
-// expected-no-diagnostics
-int foo(int);
-int baz(int);
-int buzz();
-
-const int inner_loop = 100;
-const int outer_loop = 2000;
-
-int bar() {
- int rando = buzz();
- int x = 0;
- if (__builtin_expect(rando % (outer_loop * inner_loop) == 0, buzz())) {
- x = baz(rando);
- } else {
- x = foo(50);
- }
- return x;
-}
diff --git a/test/Profile/misexpect-branch-unpredictable.c b/test/Profile/misexpect-branch-unpredictable.c
deleted file mode 100644
index 6c4f90146a..0000000000
--- a/test/Profile/misexpect-branch-unpredictable.c
+++ /dev/null
@@ -1,25 +0,0 @@
-// Test that misexpect emits no warning when prediction is correct
-
-// RUN: llvm-profdata merge %S/Inputs/misexpect-branch.proftext -o %t.profdata
-// RUN: %clang_cc1 %s -O2 -o - -disable-llvm-passes -emit-llvm -fprofile-instrument-use-path=%t.profdata -verify -Wmisexpect
-
-// expected-no-diagnostics
-#define unpredictable(x) __builtin_unpredictable(!!(x))
-
-int foo(int);
-int baz(int);
-int buzz();
-
-const int inner_loop = 100;
-const int outer_loop = 2000;
-
-int bar() {
- int rando = buzz();
- int x = 0;
- if (unpredictable(rando % (outer_loop * inner_loop) == 0)) {
- x = baz(rando);
- } else {
- x = foo(50);
- }
- return x;
-}
diff --git a/test/Profile/misexpect-branch.c b/test/Profile/misexpect-branch.c
deleted file mode 100644
index 503aa7398e..0000000000
--- a/test/Profile/misexpect-branch.c
+++ /dev/null
@@ -1,28 +0,0 @@
-// Test that misexpect detects mis-annotated branches
-
-// RUN: llvm-profdata merge %S/Inputs/misexpect-branch.proftext -o %t.profdata
-// RUN: %clang_cc1 %s -O2 -o - -emit-llvm -fprofile-instrument-use-path=%t.profdata -verify=imprecise -Wmisexpect
-// RUN: %clang_cc1 %s -O2 -o - -emit-llvm -fprofile-instrument-use-path=%t.profdata -verify=exact -Wmisexpect -debug-info-kind=line-tables-only
-// RUN: %clang_cc1 %s -O2 -o - -disable-llvm-passes -emit-llvm -fprofile-instrument-use-path=%t.profdata -verify=foo
-
-// foo-no-diagnostics
-#define likely(x) __builtin_expect(!!(x), 1)
-#define unlikely(x) __builtin_expect(!!(x), 0)
-
-int foo(int);
-int baz(int);
-int buzz();
-
-const int inner_loop = 100;
-const int outer_loop = 2000;
-
-int bar() { // imprecise-warning-re {{Potential performance regression from use of __builtin_expect(): Annotation was correct on {{.+}}% ({{[0-9]+ / [0-9]+}}) of profiled executions.}}
- int rando = buzz();
- int x = 0;
- if (likely(rando % (outer_loop * inner_loop) == 0)) { // exact-warning-re {{Potential performance regression from use of __builtin_expect(): Annotation was correct on {{.+}}% ({{[0-9]+ / [0-9]+}}) of profiled executions.}}
- x = baz(rando);
- } else {
- x = foo(50);
- }
- return x;
-}
diff --git a/test/Profile/misexpect-switch-default.c b/test/Profile/misexpect-switch-default.c
deleted file mode 100644
index 3d1079d79f..0000000000
--- a/test/Profile/misexpect-switch-default.c
+++ /dev/null
@@ -1,40 +0,0 @@
-// Test that misexpect detects mis-annotated switch statements for default case
-
-// RUN: llvm-profdata merge %S/Inputs/misexpect-switch-default.proftext -o %t.profdata
-// RUN: %clang_cc1 %s -O2 -o - -emit-llvm -fprofile-instrument-use-path=%t.profdata -verify -Wmisexpect -debug-info-kind=line-tables-only
-
-int sum(int *buff, int size);
-int random_sample(int *buff, int size);
-int rand();
-void init_arry();
-
-const int inner_loop = 1000;
-const int outer_loop = 20;
-const int arry_size = 25;
-
-int arry[arry_size] = {0};
-
-int main() {
- init_arry();
- int val = 0;
- int j;
- for (j = 0; j < outer_loop * inner_loop; ++j) {
- unsigned condition = rand() % 5;
- switch (__builtin_expect(condition, 6)) { // expected-warning-re {{Potential performance regression from use of __builtin_expect(): Annotation was correct on {{.+}}% ({{[0-9]+ / [0-9]+}}) of profiled executions.}}
- case 0:
- val += sum(arry, arry_size);
- break;
- case 1:
- case 2:
- case 3:
- break;
- case 4:
- val += random_sample(arry, arry_size);
- break;
- default:
- __builtin_unreachable();
- } // end switch
- } // end outer_loop
-
- return 0;
-}
diff --git a/test/Profile/misexpect-switch-nonconst.c b/test/Profile/misexpect-switch-nonconst.c
deleted file mode 100644
index bf2143b6f4..0000000000
--- a/test/Profile/misexpect-switch-nonconst.c
+++ /dev/null
@@ -1,43 +0,0 @@
-// Test that misexpect emits no warning when switch condition is non-const
-
-// RUN: llvm-profdata merge %S/Inputs/misexpect-switch.proftext -o %t.profdata
-// RUN: %clang_cc1 %s -O2 -o - -disable-llvm-passes -emit-llvm -fprofile-instrument-use-path=%t.profdata -verify -Wmisexpect
-
-// expected-no-diagnostics
-int sum(int *buff, int size);
-int random_sample(int *buff, int size);
-int rand();
-void init_arry();
-
-const int inner_loop = 1000;
-const int outer_loop = 20;
-const int arry_size = 25;
-
-int arry[arry_size] = {0};
-
-int main() {
- init_arry();
- int val = 0;
-
- int j, k;
- for (j = 0; j < outer_loop; ++j) {
- for (k = 0; k < inner_loop; ++k) {
- unsigned condition = rand() % 10000;
- switch (__builtin_expect(condition, rand())) {
- case 0:
- val += sum(arry, arry_size);
- break;
- case 1:
- case 2:
- case 3:
- case 4:
- val += random_sample(arry, arry_size);
- break;
- default:
- __builtin_unreachable();
- } // end switch
- } // end inner_loop
- } // end outer_loop
-
- return 0;
-}
diff --git a/test/Profile/misexpect-switch-only-default-case.c b/test/Profile/misexpect-switch-only-default-case.c
deleted file mode 100644
index 3886472e2b..0000000000
--- a/test/Profile/misexpect-switch-only-default-case.c
+++ /dev/null
@@ -1,35 +0,0 @@
-// Test that misexpect emits no warning when there is only one switch case
-
-// RUN: llvm-profdata merge %S/Inputs/misexpect-switch-default-only.proftext -o %t.profdata
-// RUN: %clang_cc1 %s -O2 -o - -emit-llvm -fprofile-instrument-use-path=%t.profdata -verify -Wmisexpect -debug-info-kind=line-tables-only
-
-// expected-no-diagnostics
-int sum(int *buff, int size);
-int random_sample(int *buff, int size);
-int rand();
-void init_arry();
-
-const int inner_loop = 1000;
-const int outer_loop = 20;
-const int arry_size = 25;
-
-int arry[arry_size] = {0};
-
-int main() {
- init_arry();
- int val = 0;
-
- int j, k;
- for (j = 0; j < outer_loop; ++j) {
- for (k = 0; k < inner_loop; ++k) {
- unsigned condition = rand() % 10000;
- switch (__builtin_expect(condition, 0)) {
- default:
- val += random_sample(arry, arry_size);
- break;
- }; // end switch
- } // end inner_loop
- } // end outer_loop
-
- return 0;
-}
diff --git a/test/Profile/misexpect-switch.c b/test/Profile/misexpect-switch.c
deleted file mode 100644
index a7f01bcc99..0000000000
--- a/test/Profile/misexpect-switch.c
+++ /dev/null
@@ -1,41 +0,0 @@
-// Test that misexpect detects mis-annotated switch statements
-
-// RUN: llvm-profdata merge %S/Inputs/misexpect-switch.proftext -o %t.profdata
-// RUN: %clang_cc1 %s -O2 -o - -emit-llvm -fprofile-instrument-use-path=%t.profdata -verify -Wmisexpect -debug-info-kind=line-tables-only
-
-int sum(int *buff, int size);
-int random_sample(int *buff, int size);
-int rand();
-void init_arry();
-
-const int inner_loop = 1000;
-const int outer_loop = 20;
-const int arry_size = 25;
-
-int arry[arry_size] = {0};
-
-int main() {
- init_arry();
- int val = 0;
-
- int j, k;
- for (j = 0; j < outer_loop; ++j) {
- for (k = 0; k < inner_loop; ++k) {
- unsigned condition = rand() % 10000;
- switch (__builtin_expect(condition, 0)) { // expected-warning-re {{Potential performance regression from use of __builtin_expect(): Annotation was correct on {{.+}}% ({{[0-9]+ / [0-9]+}}) of profiled executions.}}
- case 0:
- val += sum(arry, arry_size);
- break;
- case 1:
- case 2:
- case 3:
- break;
- default:
- val += random_sample(arry, arry_size);
- break;
- } // end switch
- } // end inner_loop
- } // end outer_loop
-
- return 0;
-}