aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2018-12-28 21:10:33 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2018-12-28 21:10:33 +0000
commit03f0fa9538a68a9e192a7e157b333b54eb72d5c8 (patch)
tree6446f7d0eab8fb74381d97f3fb560a759e75fa9f
parent3a03bffd4873ae4efa21c360cc6d147fee7365a7 (diff)
downloadgcc-03f0fa9538a68a9e192a7e157b333b54eb72d5c8.zip
gcc-03f0fa9538a68a9e192a7e157b333b54eb72d5c8.tar.gz
gcc-03f0fa9538a68a9e192a7e157b333b54eb72d5c8.tar.bz2
compiler: remove escapes_ field from Variable and Result_variable
The fields were set to true initially and never set to false. These were left over from an earlier attempt at escape analysis. Reviewed-on: https://go-review.googlesource.com/c/155750 From-SVN: r267455
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--gcc/go/gofrontend/expressions.cc22
-rw-r--r--gcc/go/gofrontend/gogo.cc3
-rw-r--r--gcc/go/gofrontend/gogo.h39
4 files changed, 10 insertions, 56 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index 3dd5fb2..2552025 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-416baf55e4890acab244470f6457372987a17a68
+d9a30434440469c640a120fe7132057f5644d38c
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc
index 7c464ce..ef8a917 100644
--- a/gcc/go/gofrontend/expressions.cc
+++ b/gcc/go/gofrontend/expressions.cc
@@ -3936,24 +3936,12 @@ Unary_expression::check_operand_address_taken(Gogo*)
// If this->escapes_ is false at this point, then it was set to
// false by an explicit call to set_does_not_escape, and the value
// does not escape. If this->escapes_ is true, we may be able to
- // set it to false if taking the address of a variable that does not
- // escape.
- Node* n = Node::make_node(this);
- if ((n->encoding() & ESCAPE_MASK) == int(Node::ESCAPE_NONE))
- this->escapes_ = false;
-
- Named_object* var = NULL;
- if (this->expr_->var_expression() != NULL)
- var = this->expr_->var_expression()->named_object();
- else if (this->expr_->enclosed_var_expression() != NULL)
- var = this->expr_->enclosed_var_expression()->variable();
-
- if (this->escapes_ && var != NULL)
+ // set it to false based on the escape analysis pass.
+ if (this->escapes_)
{
- if (var->is_variable())
- this->escapes_ = var->var_value()->escapes();
- if (var->is_result_variable())
- this->escapes_ = var->result_var_value()->escapes();
+ Node* n = Node::make_node(this);
+ if ((n->encoding() & ESCAPE_MASK) == int(Node::ESCAPE_NONE))
+ this->escapes_ = false;
}
this->expr_->address_taken(this->escapes_);
diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc
index 5654e30..d0d6f3b 100644
--- a/gcc/go/gofrontend/gogo.cc
+++ b/gcc/go/gofrontend/gogo.cc
@@ -6939,8 +6939,7 @@ Variable::Variable(Type* type, Expression* init, bool is_global,
type_from_init_tuple_(false), type_from_range_index_(false),
type_from_range_value_(false), type_from_chan_element_(false),
is_type_switch_var_(false), determined_type_(false),
- in_unique_section_(false), escapes_(true),
- toplevel_decl_(NULL)
+ in_unique_section_(false), toplevel_decl_(NULL)
{
go_assert(type != NULL || init != NULL);
go_assert(!is_parameter || init == NULL);
diff --git a/gcc/go/gofrontend/gogo.h b/gcc/go/gofrontend/gogo.h
index 0331cca..be6048f 100644
--- a/gcc/go/gofrontend/gogo.h
+++ b/gcc/go/gofrontend/gogo.h
@@ -1863,11 +1863,7 @@ class Variable
// Whether this variable should live in the heap.
bool
is_in_heap() const
- {
- return this->is_address_taken_
- && this->escapes_
- && !this->is_global_;
- }
+ { return this->is_address_taken_ && !this->is_global_; }
// Note that something takes the address of this variable.
void
@@ -1885,16 +1881,6 @@ class Variable
set_non_escaping_address_taken()
{ this->is_non_escaping_address_taken_ = true; }
- // Return whether this variable escapes the function it is declared in.
- bool
- escapes()
- { return this->escapes_; }
-
- // Note that this variable does not escape the function it is declared in.
- void
- set_does_not_escape()
- { this->escapes_ = false; }
-
// Get the source location of the variable's declaration.
Location
location() const
@@ -2117,9 +2103,6 @@ class Variable
// True if this variable should be put in a unique section. This is
// used for field tracking.
bool in_unique_section_ : 1;
- // Whether this variable escapes the function it is created in. This is
- // true until shown otherwise.
- bool escapes_ : 1;
// The top-level declaration for this variable. Only used for local
// variables. Must be a Temporary_statement if not NULL.
Statement* toplevel_decl_;
@@ -2135,7 +2118,7 @@ class Result_variable
Location location)
: type_(type), function_(function), index_(index), location_(location),
backend_(NULL), is_address_taken_(false),
- is_non_escaping_address_taken_(false), escapes_(true)
+ is_non_escaping_address_taken_(false)
{ }
// Get the type of the result variable.
@@ -2179,23 +2162,10 @@ class Result_variable
set_non_escaping_address_taken()
{ this->is_non_escaping_address_taken_ = true; }
- // Return whether this variable escapes the function it is declared in.
- bool
- escapes()
- { return this->escapes_; }
-
- // Note that this variable does not escape the function it is declared in.
- void
- set_does_not_escape()
- { this->escapes_ = false; }
-
// Whether this variable should live in the heap.
bool
is_in_heap() const
- {
- return this->is_address_taken_
- && this->escapes_;
- }
+ { return this->is_address_taken_; }
// Set the function. This is used when cloning functions which call
// recover.
@@ -2223,9 +2193,6 @@ class Result_variable
// Whether something takes the address of this variable such that
// the address does not escape the function.
bool is_non_escaping_address_taken_;
- // Whether this variable escapes the function it is created in. This is
- // true until shown otherwise.
- bool escapes_;
};
// The value we keep for a named constant. This lets us hold a type