diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2015-04-30 17:21:29 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2015-04-30 17:21:29 +0000 |
commit | 66286a53d5f325b1b396d0d590dfa1c6aa51cbca (patch) | |
tree | d75fffab8c110857e1dcbf84a6bd5bd5aa9bf743 /gcc | |
parent | fb0cb7fa67a4e267715129fc06185f631904cd86 (diff) | |
download | gcc-66286a53d5f325b1b396d0d590dfa1c6aa51cbca.zip gcc-66286a53d5f325b1b396d0d590dfa1c6aa51cbca.tar.gz gcc-66286a53d5f325b1b396d0d590dfa1c6aa51cbca.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/go/gofrontend/escape.cc | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/gcc/go/gofrontend/escape.cc b/gcc/go/gofrontend/escape.cc index 1acd29c..80f6ef6 100644 --- a/gcc/go/gofrontend/escape.cc +++ b/gcc/go/gofrontend/escape.cc @@ -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; } |