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,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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user