compiler: turn on escape analysis by default
authorCherry Zhang <cherryyz@google.com>
Fri, 2 Feb 2018 00:00:04 +0000 (00:00 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Fri, 2 Feb 2018 00:00:04 +0000 (00:00 +0000)
    The escape analysis now runs by default. It can be disabled with
    the negative flag, -fno-go-optimize-allocs.

    Reviewed-on: https://go-review.googlesource.com/86247

* lang.opt (fgo-optimize): Remove RejectNegative.
* go-c.h (go_enable_optimize): Update declaration to take value
argument.
* go-lang.c (go_langhook_handle_option): Pass value to
go_enable_optimize.
* gccgo.texi (Invoking gccgo): Update -fgo-optimize-allocs doc.

From-SVN: r257319

gcc/go/ChangeLog
gcc/go/gccgo.texi
gcc/go/go-c.h
gcc/go/go-lang.c
gcc/go/gofrontend/MERGE
gcc/go/gofrontend/escape.cc
gcc/go/gofrontend/go-optimize.cc
gcc/go/gofrontend/go-optimize.h
gcc/go/lang.opt

index b1876c57d5a2cd22ac5798791fd1782e0ab1ec04..92abf590c29c6f86e14086f1842bac736b169264 100644 (file)
@@ -1,3 +1,12 @@
+2018-02-01  Cherry Zhang  <cherryyz@google.com>
+
+       * lang.opt (fgo-optimize): Remove RejectNegative.
+       * go-c.h (go_enable_optimize): Update declaration to take value
+       argument.
+       * go-lang.c (go_langhook_handle_option): Pass value to
+       go_enable_optimize.
+       * gccgo.texi (Invoking gccgo): Update -fgo-optimize-allocs doc.
+
 2018-01-30  Ian Lance Taylor  <iant@golang.org>
 
        * go-gcc.cc (Gcc_backend::convert_tree): New private method.
index 48e69d42ddfdaeeb176c574c35c1cce90e9f2a58..f42be9a52a6ca780c8024e74ee6b0d6cd176ca77 100644 (file)
@@ -229,10 +229,10 @@ may be used.  Or the checks may be removed via
 by default, but in the future may be off by default on systems that do
 not require it.
 
-@item -fgo-optimize-allocs
-@cindex @option{-fgo-optimize-allocs}
-Use escape analysis to allocate objects on the stack rather than the
-heap when possible.  In the future this may be the default.
+@item -fno-go-optimize-allocs
+@cindex @option{-fno-go-optimize-allocs}
+Disable escape analysis, which tries to allocate objects on the stack
+rather than the heap.
 
 @item -fgo-debug-escape@var{n}
 @cindex @option{-fgo-debug-escape}
index 139c233aab4e5f3299cc491e3b43a04d290fda6a..2dc1d434bd5cd1c0073e0bacbbcbbd35d233099c 100644 (file)
@@ -29,7 +29,7 @@ class Backend;
    interface.  */
 
 extern int go_enable_dump (const char*);
-extern int go_enable_optimize (const char*);
+extern int go_enable_optimize (const char*, int);
 
 extern void go_add_search_path (const char*);
 
index b5d8224a54e27c2b07c8c99f31a103f85d08e46b..45dee88fe485bf1065ea8ae7342a4429debe5afd 100644 (file)
@@ -194,7 +194,7 @@ static bool
 go_langhook_handle_option (
     size_t scode,
     const char *arg,
-    int value ATTRIBUTE_UNUSED,
+    int value,
     int kind ATTRIBUTE_UNUSED,
     location_t loc ATTRIBUTE_UNUSED,
     const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED)
@@ -251,7 +251,7 @@ go_langhook_handle_option (
       break;
 
     case OPT_fgo_optimize_:
-      ret = go_enable_optimize (arg) ? true : false;
+      ret = go_enable_optimize (arg, value) ? true : false;
       break;
 
     case OPT_fgo_pkgpath_:
index 6e580389d91e57fee87c5e8b691b7335d94b0f0c..cc64fad98ce9e9ebe65632374ad73e001e1813d4 100644 (file)
@@ -1,4 +1,4 @@
-023c3d4358d101c71ac1436065690eaec2ce138e
+e148068360699f24118950b728f23a5c98e1f85e
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 873c187bb573aa1ea6bffec0d0b4cb6182697b2f..51e80e446451388f251a4a25679c7828da87e80d 100644 (file)
@@ -825,7 +825,7 @@ Escape_note::parse_tag(std::string* tag)
 
 // The -fgo-optimize-alloc flag activates this escape analysis.
 
-Go_optimize optimize_allocation_flag("allocs");
+Go_optimize optimize_allocation_flag("allocs", true);
 
 // A helper function to compute whether a function name has a
 // matching hash value.
index 6da934f4d13a4e846f841a57fd5776f7a281e0b4..d24f35c58d3fca659376fd1e06a72856a9a61396 100644 (file)
@@ -19,8 +19,8 @@ Go_optimize* optimizations;
 
 // Create a new optimization.
 
-Go_optimize::Go_optimize(const char* name)
-  : next_(optimizations), name_(name), is_enabled_(false)
+Go_optimize::Go_optimize(const char* name, bool enabled)
+  : next_(optimizations), name_(name), is_enabled_(enabled)
 {
   optimizations = this;
 }
@@ -28,7 +28,7 @@ Go_optimize::Go_optimize(const char* name)
 // Enable an optimization by name.
 
 bool
-Go_optimize::enable_by_name(const char* name)
+Go_optimize::enable_by_name(const char* name, bool value)
 {
   bool is_all = strcmp(name, "all") == 0;
   bool found = false;
@@ -36,18 +36,18 @@ Go_optimize::enable_by_name(const char* name)
     {
       if (is_all || strcmp(name, p->name_) == 0)
        {
-         p->is_enabled_ = true;
+         p->is_enabled_ = value;
          found = true;
        }
     }
   return found;
 }
 
-// Enable an optimization.  Return 1 if this is a real name, 0 if not.
+// Enable/disable an optimization.  Return 1 if this is a real name, 0 if not.
 
 GO_EXTERN_C
 int
-go_enable_optimize(const char* name)
+go_enable_optimize(const char* name, int value)
 {
-  return Go_optimize::enable_by_name(name) ? 1 : 0;
+  return Go_optimize::enable_by_name(name, (bool)value) ? 1 : 0;
 }
index 8638498e18ffca357398efed0aaafeed26540789..1ca68deba0825cd20c73a7118a2e2efca18f9963 100644 (file)
 class Go_optimize
 {
  public:
-  Go_optimize(const char* name);
+  Go_optimize(const char*, bool);
 
   // Whether this optimizaiton was enabled.
   bool
   is_enabled() const
   { return this->is_enabled_; }
 
-  // Enable an optimization by name.  Return true if found.
+  // Enable/disable an optimization by name.  Return true if found.
   static bool
-  enable_by_name(const char*);
+  enable_by_name(const char*, bool);
 
  private:
   // The next optimize flag.  These are not in any order.
index 6dbb54298d7e5f03f6fff791797056a8e2e3eee2..ee1c2913f2733eda507e8bc256ff1944f5243249 100644 (file)
@@ -58,7 +58,7 @@ Go Joined RejectNegative
 -fgo-dump-<type>       Dump Go frontend internal information.
 
 fgo-optimize-
-Go Joined RejectNegative
+Go Joined
 -fgo-optimize-<type>   Turn on optimization passes in the frontend.
 
 fgo-pkgpath=