diff --git a/llvm/test/tools/llvm-reduce/granularity-level.ll b/llvm/test/tools/llvm-reduce/granularity-level.ll new file mode 100644 --- /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 --- a/llvm/tools/llvm-reduce/deltas/Delta.cpp +++ b/llvm/tools/llvm-reduce/deltas/Delta.cpp @@ -27,6 +27,10 @@ "abort-on-invalid-reduction", cl::desc("Abort if any reduction results in invalid IR")); +static cl::opt 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 @@ std::vector ChunksStillConsideredInteresting = {{1, Targets}}; std::unique_ptr ReducedProgram; + for (unsigned int Level = 0; Level < StartingGranularityLevel; Level++) { + increaseGranularity(ChunksStillConsideredInteresting); + } + bool FoundAtLeastOneNewUninterestingChunkWithCurrentGranularity; do { FoundAtLeastOneNewUninterestingChunkWithCurrentGranularity = false;