Reviewers: mvstanton,

Message:
In the situation where one block leads directly into another block with a goto,
and the successor block has no other predecessors, we can inherit the
flow-sensitive state, avoiding a copy.

Experiments on Octane show that 40% of copies can be avoided.


Description:
Avoid copying flow-sensitive state when only a goto separates blocks.

BUG=

Please review this at https://codereview.chromium.org/48353007/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+9, -2 lines):
  M src/hydrogen-flow-engine.h


Index: src/hydrogen-flow-engine.h
diff --git a/src/hydrogen-flow-engine.h b/src/hydrogen-flow-engine.h
index dfe43ec6c3ba94b3c38ee2aa2fb4c561ea390919..4e1275546f611e2401e467484976f73d59b3e784 100644
--- a/src/hydrogen-flow-engine.h
+++ b/src/hydrogen-flow-engine.h
@@ -138,12 +138,19 @@ class HFlowEngine {
       }

       // Propagate the block state forward to all successor blocks.
-      for (int i = 0; i < block->end()->SuccessorCount(); i++) {
+      int max = block->end()->SuccessorCount();
+      for (int i = 0; i < max; i++) {
         HBasicBlock* succ = block->end()->SuccessorAt(i);
         IncrementPredecessorCount(succ);
         if (StateAt(succ) == NULL) {
           // This is the first state to reach the successor.
-          SetStateAt(succ, state->Copy(succ, zone_));
+          if (max == 1 && succ->predecessors()->length() == 1) {
+            // Optimization: successor can inherit this state.
+            SetStateAt(succ, state);
+          } else {
+            // Successor needs a copy of the state.
+            SetStateAt(succ, state->Copy(succ, zone_));
+          }
         } else {
// Merge the current state with the state already at the successor.
           SetStateAt(succ, state->Merge(succ, StateAt(succ), zone_));


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to