compiler: Mark non-escaping variables that aren't addressed.
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 30 Apr 2015 17:21:29 +0000 (17:21 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 30 Apr 2015 17:21:29 +0000 (17:21 +0000)
When optimizing allocations, only variables that had their address
taken somewhere in the program were marked as non-escaping.
There are several cases where non-addressed variables might cause
extra allocations.

From-SVN: r222640

gcc/go/gofrontend/escape.cc

index 1acd29cd70a3c589a8c8c3a04648554ecc489f81..80f6ef6dd8353d88afe8e70add4cb30855c1d045 100644 (file)
@@ -1560,8 +1560,7 @@ Optimize_allocations::variable(Named_object* var)
 
   if (var->is_variable())
     {
-      if (var->var_value()->is_address_taken())
-       var->var_value()->set_does_not_escape();
+      var->var_value()->set_does_not_escape();
       if (var->var_value()->init() != NULL
          && var->var_value()->init()->allocation_expression() != NULL)
        {
@@ -1570,9 +1569,6 @@ Optimize_allocations::variable(Named_object* var)
          alloc->set_allocate_on_stack();
        }
     }
-  else if (var->is_result_variable()
-          && var->result_var_value()->is_address_taken())
-    var->result_var_value()->set_does_not_escape();
 
   return TRAVERSE_CONTINUE;
 }