compiler: permit inlining constant expressions and expression statements
authorIan Lance Taylor <ian@gcc.gnu.org>
Tue, 10 Sep 2019 02:37:42 +0000 (02:37 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 10 Sep 2019 02:37:42 +0000 (02:37 +0000)
    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

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/expressions.cc
gcc/go/gofrontend/statements.cc
gcc/go/gofrontend/statements.h

index 21f9e483db462704486a00f2f3742ce3fbd69f4f..a762d6bf2f3999d3a77eca27517389644a2323d2 100644 (file)
@@ -1,4 +1,4 @@
-c6097f269d2b3dbfd5204cf7e3d0b9f8d7ec2b5e
+5c3f52ffbae7a9bb59bce63cd2cffdd8af8f4a92
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index cb09ec0bcbe42e32bc7cd843fc595830c4476045..7d8963e2c0be835f2121070f5a1c76ad6b25715f 100644 (file)
@@ -3283,6 +3283,10 @@ class Const_expression : public Expression
   Bexpression*
   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
   // expression, we export the value.  We ignore the fact that it has
   // a name.
index 27c309e5fdb62597ec96c3e2866646303b69b0ca..3dc394ab32b1af94cae2ec65919a943270192562 100644 (file)
@@ -158,6 +158,10 @@ Statement::import_statement(Import_function_body* ifb, Location loc)
     return Goto_statement::do_import(ifb, loc);
 
   Expression* lhs = Expression::import_expression(ifb, loc);
+
+  if (ifb->match_c_string(" //"))
+    return Statement::make_statement(lhs, true);
+
   ifb->require_c_string(" = ");
   Expression* rhs = Expression::import_expression(ifb, loc);
   return Statement::make_assignment(lhs, rhs, loc);
@@ -2089,6 +2093,14 @@ Expression_statement::do_may_fall_through() const
   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.
 
 Bstatement*
index 311bbaaca5ebfa5f504a18ead70a5d72088c165e..f1c6be9c98a990224991793082a70f1899e450af 100644 (file)
@@ -924,6 +924,13 @@ class Expression_statement : public Statement
   bool
   do_may_fall_through() const;
 
+  int
+  do_inlining_cost()
+  { return 0; }
+
+  void
+  do_export_statement(Export_function_body*);
+
   Bstatement*
   do_get_backend(Translate_context* context);