From b95962dac042c42b978708f495b6fa43fe72074c Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Tue, 10 Sep 2019 06:25:13 +0000 Subject: 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 --- include/clang/Basic/DiagnosticFrontendKinds.td | 7 +--- include/clang/Basic/DiagnosticGroups.td | 1 - lib/CodeGen/CodeGenAction.cpp | 26 ------------- lib/Frontend/CompilerInvocation.cpp | 3 -- .../misexpect-branch-nonconst-expect-arg.proftext | 9 ----- test/Profile/Inputs/misexpect-branch.proftext | 9 ----- .../Inputs/misexpect-switch-default-only.proftext | 12 ------ .../Inputs/misexpect-switch-default.proftext | 16 -------- test/Profile/Inputs/misexpect-switch.proftext | 16 -------- test/Profile/misexpect-branch-cold.c | 26 ------------- .../misexpect-branch-nonconst-expected-val.c | 23 ------------ test/Profile/misexpect-branch-unpredictable.c | 25 ------------- test/Profile/misexpect-branch.c | 28 -------------- test/Profile/misexpect-switch-default.c | 40 -------------------- test/Profile/misexpect-switch-nonconst.c | 43 ---------------------- test/Profile/misexpect-switch-only-default-case.c | 35 ------------------ test/Profile/misexpect-switch.c | 41 --------------------- 17 files changed, 1 insertion(+), 359 deletions(-) delete mode 100644 test/Profile/Inputs/misexpect-branch-nonconst-expect-arg.proftext delete mode 100644 test/Profile/Inputs/misexpect-branch.proftext delete mode 100644 test/Profile/Inputs/misexpect-switch-default-only.proftext delete mode 100644 test/Profile/Inputs/misexpect-switch-default.proftext delete mode 100644 test/Profile/Inputs/misexpect-switch.proftext delete mode 100644 test/Profile/misexpect-branch-cold.c delete mode 100644 test/Profile/misexpect-branch-nonconst-expected-val.c delete mode 100644 test/Profile/misexpect-branch-unpredictable.c delete mode 100644 test/Profile/misexpect-branch.c delete mode 100644 test/Profile/misexpect-switch-default.c delete mode 100644 test/Profile/misexpect-switch-nonconst.c delete mode 100644 test/Profile/misexpect-switch-only-default-case.c delete mode 100644 test/Profile/misexpect-switch.c 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; -def warn_profile_data_misexpect : Warning< - "Potential performance regression from use of __builtin_expect(): " - "Annotation was correct on %0 of profiled executions.">, - BackendInfo, - InGroup, - 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(DI)); return; - case llvm::DK_MisExpect: - MisExpectDiagHandler(cast(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; -} -- cgit v1.2.1