summaryrefslogtreecommitdiff
path: root/compiler/optimizing
diff options
context:
space:
mode:
author Santiago Aboy Solanes <solanes@google.com> 2025-01-29 17:39:39 +0000
committer Santiago Aboy Solanes <solanes@google.com> 2025-01-30 05:36:18 -0800
commit63cde047113755a1de777120b68a42039e335868 (patch)
treea6f7b2888c73b1dc52ded90f285a324349178128 /compiler/optimizing
parent6b39013f1801140ff06e6323b5a7173a166d8df2 (diff)
Optimize ValueSet::Kill
Skip calling DeleteAllImpureWhich for side effects which MayDependOn will always return false, which happened 65-75% of the times. In fact, SideEffects::None() was passed on ~50% of the calls to Kill. Based on local compiles, this CL improves GVN runtime by ~15% and overall dex2oat runtime by ~1%. Bug: 393108375 Test: art/test/testrunner/testrunner.py --host --64 -b --optimizing Change-Id: Ib5cdb33c9caa5f2cfffbc1a650dabbda185a3c6d
Diffstat (limited to 'compiler/optimizing')
-rw-r--r--compiler/optimizing/gvn.cc10
1 files changed, 7 insertions, 3 deletions
diff --git a/compiler/optimizing/gvn.cc b/compiler/optimizing/gvn.cc
index 8a5a4742ba..d088e02132 100644
--- a/compiler/optimizing/gvn.cc
+++ b/compiler/optimizing/gvn.cc
@@ -125,9 +125,13 @@ class ValueSet : public ArenaObject<kArenaAllocGvn> {
// Removes all instructions in the set affected by the given side effects.
void Kill(SideEffects side_effects) {
- DeleteAllImpureWhich([side_effects](Node* node) {
- return node->GetSideEffects().MayDependOn(side_effects);
- });
+ // Nothing to do if the side effects don't have any change bit set, as MayDependOn will always
+ // return false.
+ if (side_effects.HasSideEffects()) {
+ DeleteAllImpureWhich([side_effects](Node* node) {
+ return node->GetSideEffects().MayDependOn(side_effects);
+ });
+ }
}
void Clear() {