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:
parent
fb0cb7fa67
commit
66286a53d5
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user