[llvm] fbfd327 - [llvm-reduce] Add flag to start at finer granularity

Arthur Eubanks via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 9 10:15:58 PST 2021


Author: Dwight Guth
Date: 2021-11-09T10:14:08-08:00
New Revision: fbfd327fdf1e461821dada1a2f18e67f83ac65ef

URL: https://github.com/llvm/llvm-project/commit/fbfd327fdf1e461821dada1a2f18e67f83ac65ef
DIFF: https://github.com/llvm/llvm-project/commit/fbfd327fdf1e461821dada1a2f18e67f83ac65ef.diff

LOG: [llvm-reduce] Add flag to start at finer granularity

Sometimes if llvm-reduce is interrupted in the middle of a delta pass on
a large file, it can take quite some time for the tool to start actually
doing new work if it is restarted again on the partially-reduced file. A
lot of time ends up being spent testing large chunks when these large
chunks are very unlikely to actually pass the interestingness test. In
cases like this, the tool will complete faster if the starting
granularity is reduced to a finer amount. Thus, we introduce a command
line flag that automatically divides the chunks into smaller subsets a
fixed, user-specified number of times prior to beginning the core loop.

Reviewed By: aeubanks

Differential Revision: https://reviews.llvm.org/D112651

Added: 
    llvm/test/tools/llvm-reduce/granularity-level.ll

Modified: 
    llvm/tools/llvm-reduce/deltas/Delta.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/test/tools/llvm-reduce/granularity-level.ll b/llvm/test/tools/llvm-reduce/granularity-level.ll
new file mode 100644
index 0000000000000..41b81af0a178f
--- /dev/null
+++ b/llvm/test/tools/llvm-reduce/granularity-level.ll
@@ -0,0 +1,30 @@
+; Test that llvm-reduce produces the same output when starting at a higher granularity level.
+;
+; RUN: llvm-reduce --delta-passes=functions,instructions --starting-granularity-level=2 --test FileCheck --test-arg --check-prefixes=CHECK-ALL,CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t
+; RUN: cat %t | FileCheck -implicit-check-not=uninteresting --check-prefixes=CHECK-ALL,CHECK-FINAL %s
+
+define i32 @uninteresting1() {
+entry:
+  ret i32 0
+}
+
+; CHECK-ALL-LABEL: interesting()
+define i32 @interesting() {
+entry:
+  ; CHECK-INTERESTINGNESS: call i32 @interesting()
+  %call2 = call i32 @interesting()
+  %call = call i32 @uninteresting1()
+  ret i32 5
+}
+
+; CHECK-FINAL-NEXT: entry:
+; CHECK-FINAL-NEXT:   %call2 = call i32 @interesting()
+; CHECK-FINAL-NEXT:   ret i32 5
+; CHECK-FINAL-NEXT: }
+
+define i32 @uninteresting2() {
+entry:
+  ret i32 0
+}
+
+declare void @uninteresting3()

diff  --git a/llvm/tools/llvm-reduce/deltas/Delta.cpp b/llvm/tools/llvm-reduce/deltas/Delta.cpp
index cabbe9513e5de..bd4e8de07047c 100644
--- a/llvm/tools/llvm-reduce/deltas/Delta.cpp
+++ b/llvm/tools/llvm-reduce/deltas/Delta.cpp
@@ -27,6 +27,10 @@ static cl::opt<bool> AbortOnInvalidReduction(
     "abort-on-invalid-reduction",
     cl::desc("Abort if any reduction results in invalid IR"));
 
+static cl::opt<unsigned int> StartingGranularityLevel(
+    "starting-granularity-level",
+    cl::desc("Number of times to divide chunks prior to first test"));
+
 void writeOutput(ReducerWorkItem &M, llvm::StringRef Message);
 
 bool isReduced(ReducerWorkItem &M, TestRunner &Test,
@@ -118,6 +122,10 @@ void runDeltaPassInt(
   std::vector<Chunk> ChunksStillConsideredInteresting = {{1, Targets}};
   std::unique_ptr<ReducerWorkItem> ReducedProgram;
 
+  for (unsigned int Level = 0; Level < StartingGranularityLevel; Level++) {
+    increaseGranularity(ChunksStillConsideredInteresting);
+  }
+
   bool FoundAtLeastOneNewUninterestingChunkWithCurrentGranularity;
   do {
     FoundAtLeastOneNewUninterestingChunkWithCurrentGranularity = false;


        


More information about the llvm-commits mailing list