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