aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2015-04-30 17:21:29 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2015-04-30 17:21:29 +0000
commit66286a53d5f325b1b396d0d590dfa1c6aa51cbca (patch)
treed75fffab8c110857e1dcbf84a6bd5bd5aa9bf743 /gcc
parentfb0cb7fa67a4e267715129fc06185f631904cd86 (diff)
downloadgcc-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.cc6
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;
}