Commit 5447e8e2 by Ian Lance Taylor

compiler: permit inlining constant expressions and expression statements

    
    This relatively minor change increases the number of inlinable
    functions/methods in the standard library from 983 to 2179.
    
    In particular it permits inlining math/bits/RotateLeftNN.  This
    restores the speed of crypto/sha256 back to what it was before the
    update to 1.13beta1.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194340

From-SVN: r275558
parent 77df40e8
c6097f269d2b3dbfd5204cf7e3d0b9f8d7ec2b5e 5c3f52ffbae7a9bb59bce63cd2cffdd8af8f4a92
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -3283,6 +3283,10 @@ class Const_expression : public Expression ...@@ -3283,6 +3283,10 @@ class Const_expression : public Expression
Bexpression* Bexpression*
do_get_backend(Translate_context* context); do_get_backend(Translate_context* context);
int
do_inlining_cost() const
{ return 1; }
// When exporting a reference to a const as part of a const // When exporting a reference to a const as part of a const
// expression, we export the value. We ignore the fact that it has // expression, we export the value. We ignore the fact that it has
// a name. // a name.
......
...@@ -158,6 +158,10 @@ Statement::import_statement(Import_function_body* ifb, Location loc) ...@@ -158,6 +158,10 @@ Statement::import_statement(Import_function_body* ifb, Location loc)
return Goto_statement::do_import(ifb, loc); return Goto_statement::do_import(ifb, loc);
Expression* lhs = Expression::import_expression(ifb, loc); Expression* lhs = Expression::import_expression(ifb, loc);
if (ifb->match_c_string(" //"))
return Statement::make_statement(lhs, true);
ifb->require_c_string(" = "); ifb->require_c_string(" = ");
Expression* rhs = Expression::import_expression(ifb, loc); Expression* rhs = Expression::import_expression(ifb, loc);
return Statement::make_assignment(lhs, rhs, loc); return Statement::make_assignment(lhs, rhs, loc);
...@@ -2089,6 +2093,14 @@ Expression_statement::do_may_fall_through() const ...@@ -2089,6 +2093,14 @@ Expression_statement::do_may_fall_through() const
return true; return true;
} }
// Export an expression statement.
void
Expression_statement::do_export_statement(Export_function_body* efb)
{
this->expr_->export_expression(efb);
}
// Convert to backend representation. // Convert to backend representation.
Bstatement* Bstatement*
......
...@@ -924,6 +924,13 @@ class Expression_statement : public Statement ...@@ -924,6 +924,13 @@ class Expression_statement : public Statement
bool bool
do_may_fall_through() const; do_may_fall_through() const;
int
do_inlining_cost()
{ return 0; }
void
do_export_statement(Export_function_body*);
Bstatement* Bstatement*
do_get_backend(Translate_context* context); do_get_backend(Translate_context* context);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment