Add phis in SimplifyIfs to enable branch redirection
For example it turns:
if(cond)
/ \
B1 B2
\ /
if(cond)
/ \
B3 B4
into:
if(cond)
/ \
B1 B2
\ /
if(Phi(1, 0))
/ \
B3 B4
Following this, SimplifyIfs is able to connect B1->B3
and B2->B4 effectively skipping an if.
Locally, speed compiling on a Pixel 5:
* system server: -4.0KB (-0.01%)
* SystemUIGoogle: -8.0KB (-0.03%)
* AGSA: -17.75KB (-0.01%)
Test: art/test/testrunner/testrunner.py --host --64 --optimizing -b
Change-Id: I3b2e6a986b4d5e162bec28d72e9b0e2a3de1a4c3
diff --git a/compiler/optimizing/optimizing_compiler_stats.h b/compiler/optimizing/optimizing_compiler_stats.h
index 866c883..a1d0a5a 100644
--- a/compiler/optimizing/optimizing_compiler_stats.h
+++ b/compiler/optimizing/optimizing_compiler_stats.h
@@ -82,6 +82,7 @@
kImplicitNullCheckGenerated,
kExplicitNullCheckGenerated,
kSimplifyIf,
+ kSimplifyIfAddedPhi,
kSimplifyThrowingInvoke,
kInstructionSunk,
kNotInlinedUnresolvedEntrypoint,