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,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;
}