[PATCH] D66832: [Bugpoint][CrashDebugger] Add --same-error to skip non-relevant CodeGenCrash

Jinsong Ji via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 27 14:54:18 PDT 2019


jsji created this revision.
jsji added reviewers: modocache, bogner, sebpop, reames.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
jsji updated this revision to Diff 217503.
jsji added a comment.

Fix typos in testcase.


When reducing case for a CodeGenCrash, bugpoint may generate a new reduced
testcase that exposes/causes another crash or break something due to
limitation.

Bugpoint does not distiguish different crashes currently,
so when this happens, bugpoint will go on reducing for the new crash,
or just abort, we can't get the case reduced for the origial crash.

This patch introduces a new flag for CrashDebugger,
it tries to compare the message for each CodeGenCrash,
and only treats it as crash when we get same crash message.

In order to facilitate the message check, this patch also add
'Error Message:' as a Spearator to current ToolRunner message.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D66832

Files:
  llvm/test/BugPoint/crash-sameerror.ll
  llvm/tools/bugpoint/CrashDebugger.cpp
  llvm/tools/bugpoint/ToolRunner.cpp


Index: llvm/tools/bugpoint/ToolRunner.cpp
===================================================================
--- llvm/tools/bugpoint/ToolRunner.cpp
+++ llvm/tools/bugpoint/ToolRunner.cpp
@@ -109,7 +109,7 @@
   OS << "\nError running tool:\n ";
   for (StringRef Arg : Args)
     OS << " " << Arg.str();
-  OS << "\n";
+  OS << "\nError Message:\n";
 
   // Rerun the compiler, capturing any error messages to print them.
   SmallString<128> ErrorFilename;
Index: llvm/tools/bugpoint/CrashDebugger.cpp
===================================================================
--- llvm/tools/bugpoint/CrashDebugger.cpp
+++ llvm/tools/bugpoint/CrashDebugger.cpp
@@ -63,6 +63,10 @@
 cl::opt<bool> VerboseErrors("verbose-errors",
                             cl::desc("Print the output of crashing program"),
                             cl::init(false));
+cl::opt<bool> SameError("same-error",
+                            cl::desc("Focus on 1st crash error, treat other new crash as success"),
+                            cl::init(false));
+
 }
 
 namespace llvm {
@@ -1294,11 +1298,27 @@
 
 static bool TestForCodeGenCrash(const BugDriver &BD, Module *M) {
   if (Error E = BD.compileProgram(*M)) {
-    if (VerboseErrors)
-      errs() << toString(std::move(E)) << "\n";
-    else {
-      consumeError(std::move(E));
-      errs() << "<crash>\n";
+    bool SameCrash = true;
+    handleAllErrors(std::move(E), [&](const ErrorInfoBase &EIB) {
+      static std::string CrashMsgs = "";
+      if (SameError) {
+        StringRef str(EIB.message());
+        auto Msgs = str.split("Error Message:\n");
+        if (CrashMsgs.empty())
+          CrashMsgs = Msgs.second;
+        else {
+          SameCrash = CrashMsgs.compare(Msgs.second.str()) == 0;
+        }
+      }
+      if (VerboseErrors)
+        errs() << EIB.message() << "\n";
+      else {
+        errs() << "<crash>\n";
+      }
+    });
+    if (SameError) {
+      // Only retrun true when we are getting same crash
+      return SameCrash;
     }
     return true; // Tool is still crashing.
   }
Index: llvm/test/BugPoint/crash-sameerror.ll
===================================================================
--- /dev/null
+++ llvm/test/BugPoint/crash-sameerror.ll
@@ -0,0 +1,18 @@
+; Test that bugpoint can stick to same error (ignore non-relevant errors)
+;
+; RUN: bugpoint -llc-safe %s -output-prefix %t -silence-passes -same-error > /dev/null
+; REQUIRES: powerpc-registered-target
+target triple = "powerpc64le-unknown-linux-gnu"
+
+define dso_local void @test1(i32 signext %a) local_unnamed_addr #0 {
+entry:
+; This should cause codegen error, the argument should be a constant.
+  tail call void @llvm.ppc.altivec.dss(i32 %a) #1
+  ret void
+}
+declare void @llvm.ppc.altivec.dss(i32) #1
+
+; This should trigger bugpoint limitation when reducing attributes
+; verify failed: Attribute 'optnone' requires 'noinline'! 
+attributes #0 = { optnone noinline nounwind}
+attributes #1 = { nounwind }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66832.217503.patch
Type: text/x-patch
Size: 2966 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190827/87fc1cf1/attachment.bin>


More information about the llvm-commits mailing list