Only invoke reaching definitions if there are >0 variables and >0 definitions.
authorfschneider@chromium.org <fschneider@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 12 Mar 2010 15:01:05 +0000 (15:01 +0000)
committerfschneider@chromium.org <fschneider@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 12 Mar 2010 15:01:05 +0000 (15:01 +0000)
Review URL: http://codereview.chromium.org/885004

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4120 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/compiler.cc
src/data-flow.cc

index ed4c5b99bdd2a9d564325bab9e44d9db791c1de8..dce881639b78deb0244d303746c81ca2f8dc86b9 100755 (executable)
@@ -95,10 +95,12 @@ static Handle<Code> MakeCode(Handle<Context> context, CompilationInfo* info) {
     if (!builder.HasStackOverflow()) {
       int variable_count =
           function->num_parameters() + function->scope()->num_stack_slots();
-      ReachingDefinitions rd(builder.postorder(),
-                             builder.definitions(),
-                             variable_count);
-      rd.Compute();
+      if (variable_count > 0 && builder.definitions()->length() > 0) {
+        ReachingDefinitions rd(builder.postorder(),
+                               builder.definitions(),
+                               variable_count);
+        rd.Compute();
+      }
     }
 
 #ifdef DEBUG
@@ -497,10 +499,12 @@ Handle<JSFunction> Compiler::BuildBoilerplate(FunctionLiteral* literal,
     if (!builder.HasStackOverflow()) {
       int variable_count =
           literal->num_parameters() + literal->scope()->num_stack_slots();
-      ReachingDefinitions rd(builder.postorder(),
-                             builder.definitions(),
-                             variable_count);
-      rd.Compute();
+      if (variable_count > 0 && builder.definitions()->length() > 0) {
+        ReachingDefinitions rd(builder.postorder(),
+                               builder.definitions(),
+                               variable_count);
+        rd.Compute();
+      }
     }
 
 #ifdef DEBUG
index ac12502c071b5dea3a50423805feb88579c4a39f..f6ccef1a13c4c278ff7c3a87d0305da97cfcfa13 100644 (file)
@@ -2061,7 +2061,7 @@ void JoinNode::UpdateRDIn(WorkList<Node>* worklist, bool mark) {
 
 
 void ReachingDefinitions::Compute() {
-  if (definitions_->is_empty()) return;
+  ASSERT(!definitions_->is_empty());
 
   int variable_count = variables_.length();
   int definition_count = definitions_->length();