Reviewers: Mads Ager,

Description:
Merge SVN r6485 to trunk.

This change disables all code motion on the final optimization
attempt.  It fixes a crash in generated code.

Please review this at http://codereview.chromium.org/6249018/

SVN Base: https://v8.googlecode.com/svn/trunk

Affected files:
  M src/hydrogen.h
  M src/hydrogen.cc
  M src/version.cc


Index: src/hydrogen.cc
diff --git a/src/hydrogen.cc b/src/hydrogen.cc
index ae91065d59ba32e33cd8c62c02fa109bd91fb644..a072f902e1d1559c0e9bf3441eb0744e72423d16 100644
--- a/src/hydrogen.cc
+++ b/src/hydrogen.cc
@@ -684,7 +684,7 @@ HGraph::HGraph(CompilationInfo* info)
 }


-bool HGraph::AllowAggressiveOptimizations() const {
+bool HGraph::AllowCodeMotion() const {
return info()->shared_info()->opt_count() + 1 < Compiler::kDefaultMaxOptCount;
 }

@@ -1446,19 +1446,23 @@ void HGlobalValueNumberer::ProcessLoopBlock(HBasicBlock* block,
   }
 }

-// Only move instructions that postdominate the loop header (i.e. are
-// always executed inside the loop). This is to avoid unnecessary
-// deoptimizations assuming the loop is executed at least once.
-// TODO(fschneider): Better type feedback should give us information
-// about code that was never executed.
+
 bool HGlobalValueNumberer::ShouldMove(HInstruction* instr,
                                       HBasicBlock* loop_header) {
-  if (FLAG_aggressive_loop_invariant_motion &&
-      !instr->IsChange() &&
-      (!instr->IsCheckInstruction() ||
-       graph_->AllowAggressiveOptimizations())) {
+  // If we've disabled code motion, don't move any instructions.
+  if (!graph_->AllowCodeMotion()) return false;
+
+  // If --aggressive-loop-invariant-motion, move everything except change
+  // instructions.
+  if (FLAG_aggressive_loop_invariant_motion && !instr->IsChange()) {
     return true;
   }
+
+  // Otherwise only move instructions that postdominate the loop header
+  // (i.e. are always executed inside the loop). This is to avoid
+  // unnecessary deoptimizations assuming the loop is executed at least
+  // once.  TODO(fschneider): Better type feedback should give us
+  // information about code that was never executed.
   HBasicBlock* block = instr->block();
   bool result = true;
   if (block != loop_header) {
Index: src/hydrogen.h
diff --git a/src/hydrogen.h b/src/hydrogen.h
index 3524df949524a4835aea6a4ec4ab439b89e51f23..dbcb82e6e8eadb5b625ed81ce27889c6eeb9ac56 100644
--- a/src/hydrogen.h
+++ b/src/hydrogen.h
@@ -297,7 +297,7 @@ class HGraph: public HSubgraph {

   CompilationInfo* info() const { return info_; }

-  bool AllowAggressiveOptimizations() const;
+  bool AllowCodeMotion() const;

   const ZoneList<HBasicBlock*>* blocks() const { return &blocks_; }
   const ZoneList<HPhi*>* phi_list() const { return phi_list_; }
Index: src/version.cc
diff --git a/src/version.cc b/src/version.cc
index af0dcb4af07f4435d09f995a5e432755716cd263..50a90c63ac988db686997792f1c70f346118698c 100644
--- a/src/version.cc
+++ b/src/version.cc
@@ -35,7 +35,7 @@
 #define MAJOR_VERSION     3
 #define MINOR_VERSION     0
 #define BUILD_NUMBER      11
-#define PATCH_LEVEL       1
+#define PATCH_LEVEL       2
 #define CANDIDATE_VERSION false

 // Define SONAME to have the SCons build the put a specific SONAME into the


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to