From 63cde047113755a1de777120b68a42039e335868 Mon Sep 17 00:00:00 2001 From: Santiago Aboy Solanes Date: Wed, 29 Jan 2025 17:39:39 +0000 Subject: 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 --- compiler/optimizing/gvn.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'compiler/optimizing/gvn.cc') 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 { // 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() { -- cgit v1.2.3-59-g8ed1b