compiler: Mark non-escaping variables that aren't addressed.

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
This commit is contained in:
Ian Lance Taylor 2015-04-30 17:21:29 +00:00
parent fb0cb7fa67
commit 66286a53d5

View File

@ -1560,7 +1560,6 @@ Optimize_allocations::variable(Named_object* var)
if (var->is_variable()) 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 if (var->var_value()->init() != NULL
&& var->var_value()->init()->allocation_expression() != NULL) && var->var_value()->init()->allocation_expression() != NULL)
@ -1570,9 +1569,6 @@ Optimize_allocations::variable(Named_object* var)
alloc->set_allocate_on_stack(); 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; return TRAVERSE_CONTINUE;
} }