Reorder optimizations to eliminate more code.
Unreachable code might contain the only reference to a variable or
function. We can eliminate those variables/functions if we remove the
unreachable code first.
(Are there counterexamples where this order leads to worse results? I
couldn't think of any, and pragmatically it didn't show up in any of
our existing tests.)
Change-Id: Ic9f0222851269e0c37eb9570547307998f882b6c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/450156
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
diff --git a/src/sksl/SkSLCompiler.cpp b/src/sksl/SkSLCompiler.cpp
index 8d284d1..4423f98 100644
--- a/src/sksl/SkSLCompiler.cpp
+++ b/src/sksl/SkSLCompiler.cpp
@@ -791,14 +791,15 @@
// more wins, but it's diminishing returns.
this->runInliner(program.ownedElements(), program.fSymbols, usage);
+ // Unreachable code can confuse some drivers, so it's worth removing. (skia:12012)
+ this->removeUnreachableCode(program, usage);
+
while (this->removeDeadFunctions(program, usage)) {
// Removing dead functions may cause more functions to become unreferenced. Try again.
}
while (this->removeDeadLocalVariables(program, usage)) {
// Removing dead variables may cause more variables to become unreferenced. Try again.
}
- // Unreachable code can confuse some drivers, so it's worth removing. (skia:12012)
- this->removeUnreachableCode(program, usage);
this->removeDeadGlobalVariables(program, usage);
}