[PATCH] D136127: [llvm-reduce] Check if reduction fails/is redundant before invoking oracle
Arthur Eubanks via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 17 21:16:02 PDT 2022
aeubanks created this revision.
aeubanks added a reviewer: arsenm.
Herald added a project: All.
aeubanks requested review of this revision.
Herald added subscribers: llvm-commits, wdng.
Herald added a project: LLVM.
So we don't over count the number of chunks and do unnecessary work reducing more chunks than exist.
This lowers some random reduction I tested with locally from 250s to 232s.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D136127
Files:
llvm/test/tools/llvm-reduce/oracle-count.ll
llvm/tools/llvm-reduce/deltas/Delta.cpp
llvm/tools/llvm-reduce/deltas/ReduceOpcodes.cpp
llvm/tools/llvm-reduce/deltas/ReduceOperands.cpp
llvm/tools/llvm-reduce/deltas/SimplifyInstructions.cpp
Index: llvm/tools/llvm-reduce/deltas/SimplifyInstructions.cpp
===================================================================
--- llvm/tools/llvm-reduce/deltas/SimplifyInstructions.cpp
+++ llvm/tools/llvm-reduce/deltas/SimplifyInstructions.cpp
@@ -28,11 +28,11 @@
for (auto &F : Program) {
for (auto &BB : F) {
for (auto &Inst : BB) {
- if (O.shouldKeep())
- continue;
SimplifyQuery Q(DL, &Inst);
if (Value *Simplified = simplifyInstruction(&Inst, Q)) {
+ if (O.shouldKeep())
+ continue;
Inst.replaceAllUsesWith(Simplified);
InstToDelete.push_back(&Inst);
}
Index: llvm/tools/llvm-reduce/deltas/ReduceOperands.cpp
===================================================================
--- llvm/tools/llvm-reduce/deltas/ReduceOperands.cpp
+++ llvm/tools/llvm-reduce/deltas/ReduceOperands.cpp
@@ -34,8 +34,8 @@
}
for (auto &Op : I.operands()) {
- if (!O.shouldKeep()) {
- if (Value *Reduced = ReduceValue(Op))
+ if (Value *Reduced = ReduceValue(Op)) {
+ if (!O.shouldKeep())
Op.set(Reduced);
}
}
Index: llvm/tools/llvm-reduce/deltas/ReduceOpcodes.cpp
===================================================================
--- llvm/tools/llvm-reduce/deltas/ReduceOpcodes.cpp
+++ llvm/tools/llvm-reduce/deltas/ReduceOpcodes.cpp
@@ -87,12 +87,13 @@
for (Function &F : Mod) {
for (BasicBlock &BB : F)
for (Instruction &I : make_early_inc_range(BB)) {
- if (O.shouldKeep())
- continue;
Instruction *Replacement =
dyn_cast_or_null<Instruction>(reduceInstruction(Mod, I));
if (Replacement && Replacement != &I) {
+ if (O.shouldKeep())
+ continue;
+
if (isa<FPMathOperator>(Replacement))
Replacement->copyFastMathFlags(&I);
Index: llvm/tools/llvm-reduce/deltas/Delta.cpp
===================================================================
--- llvm/tools/llvm-reduce/deltas/Delta.cpp
+++ llvm/tools/llvm-reduce/deltas/Delta.cpp
@@ -397,6 +397,7 @@
errs() << " **** SUCCESS | lines: " << getLines(CurrentFilepath)
<< "\n";
writeOutput(*ReducedProgram, "Saved new best reduction to ");
+ ReducedProgram->print(errs());
}
// Delete uninteresting chunks
erase_if(ChunksStillConsideredInteresting,
Index: llvm/test/tools/llvm-reduce/oracle-count.ll
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-reduce/oracle-count.ll
@@ -0,0 +1,23 @@
+; RUN: llvm-reduce --test FileCheck --test-arg --check-prefixes=CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t 2>&1 | FileCheck %s --check-prefix=CHECK-LOG
+; RUN: FileCheck --check-prefixes=CHECK-FINAL --input-file=%t %s
+
+; CHECK-INTERESTINGNESS: ret i32
+; CHECK-FINAL: ret i32 0
+
+; Test that we don't invoke the oracle more than necessary (e.g. check the
+; oracle then perform some failable/redundant reduction, as opposed to check if
+; a reduction will fail/be redundant before invoking the oracle). This prevents
+; overestimation of the number of possible reductions and the number of times we
+; attempt to reduce.
+
+; IR passes
+; CHECK-LOG: Saved new best reduction
+; Module data
+; CHECK-LOG: Saved new best reduction
+; SimplifyCFG
+; CHECK-LOG: Saved new best reduction
+; CHECK-LOG-NOT: Saved new best reduction
+
+define i32 @f() {
+ ret i32 0
+}
\ No newline at end of file
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D136127.468406.patch
Type: text/x-patch
Size: 3540 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221018/3530f8e3/attachment.bin>
More information about the llvm-commits
mailing list