]> granicus.if.org Git - clang/commitdiff
Revert "clang-misexpect: Profile Guided Validation of Performance Annotations in...
authorPetr Hosek <phosek@chromium.org>
Tue, 10 Sep 2019 06:25:13 +0000 (06:25 +0000)
committerPetr Hosek <phosek@chromium.org>
Tue, 10 Sep 2019 06:25:13 +0000 (06:25 +0000)
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

17 files changed:
include/clang/Basic/DiagnosticFrontendKinds.td
include/clang/Basic/DiagnosticGroups.td
lib/CodeGen/CodeGenAction.cpp
lib/Frontend/CompilerInvocation.cpp
test/Profile/Inputs/misexpect-branch-nonconst-expect-arg.proftext [deleted file]
test/Profile/Inputs/misexpect-branch.proftext [deleted file]
test/Profile/Inputs/misexpect-switch-default-only.proftext [deleted file]
test/Profile/Inputs/misexpect-switch-default.proftext [deleted file]
test/Profile/Inputs/misexpect-switch.proftext [deleted file]
test/Profile/misexpect-branch-cold.c [deleted file]
test/Profile/misexpect-branch-nonconst-expected-val.c [deleted file]
test/Profile/misexpect-branch-unpredictable.c [deleted file]
test/Profile/misexpect-branch.c [deleted file]
test/Profile/misexpect-switch-default.c [deleted file]
test/Profile/misexpect-switch-nonconst.c [deleted file]
test/Profile/misexpect-switch-only-default-case.c [deleted file]
test/Profile/misexpect-switch.c [deleted file]

index 3ab18913a457c9c6d4771347b3ab5b078a9ba302..7a990164b0d9f3e29c29b560f22570de2c7a4827 100644 (file)
@@ -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
 
 }
index a74427dba2d8e187d12b1a1b39eacc1a0d1523a8..ee6ecb9a445b1e71ea863081b2f48011bfa7cd8e 100644 (file)
@@ -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">;
index 87bda4a0fc2cc37982e93a873ed086745fae5ef7..2356f84c05d183713750a2199c96df4838500eec 100644 (file)
@@ -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);
index 38d5694e7cd0e35969a4b13715888bb932b7ce59..99713e5e16289d0e6525e362107ba4acaffe3548 100644 (file)
@@ -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 (file)
index a99351c..0000000
+++ /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 (file)
index b809c14..0000000
+++ /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 (file)
index ac59378..0000000
+++ /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 (file)
index 7b2d597..0000000
+++ /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 (file)
index ce4c96b..0000000
+++ /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 (file)
index 6d34f92..0000000
+++ /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 (file)
index c5167b9..0000000
+++ /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 (file)
index 6c4f901..0000000
+++ /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 (file)
index 503aa73..0000000
+++ /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 (file)
index 3d1079d..0000000
+++ /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 (file)
index bf2143b..0000000
+++ /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 (file)
index 3886472..0000000
+++ /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 (file)
index a7f01bc..0000000
+++ /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;
-}