escape: Enable escape analysis in gccgo.
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 4 Aug 2016 00:10:35 +0000 (00:10 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 4 Aug 2016 00:10:35 +0000 (00:10 +0000)
    Off by default, enabled through -fgo-optimize-allocs.

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

From-SVN: r239109

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/escape.cc
gcc/go/gofrontend/go.cc

index 58066bd6d318bfea37036e4472a8e40b4c0301f0..ba99743f8d2c73093b55ecef5f7f33995493c28c 100644 (file)
@@ -1,4 +1,4 @@
-3096ac81185edacbf800783f0f803d1c419dccdd
+4ba387176e8a826dd5dd6cad4caa2f93434d0b14
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 6814c7ea74d57cf34819c297077b9d0145aa4dcf..dfe6eb230fc37eb75d0218f5ee713b917ee89a39 100644 (file)
@@ -14,6 +14,7 @@
 #include "statements.h"
 #include "escape.h"
 #include "ast-dump.h"
+#include "go-optimize.h"
 
 // class Node.
 
@@ -678,11 +679,19 @@ Escape_note::parse_tag(std::string* tag)
   return encoding;
 }
 
+
+// The -fgo-optimize-alloc flag activates this escape analysis.
+
+Go_optimize optimize_allocation_flag("allocs");
+
 // Analyze the program flow for escape information.
 
 void
 Gogo::analyze_escape()
 {
+  if (!optimize_allocation_flag.is_enabled() || saw_errors())
+    return;
+
   // Discover strongly connected groups of functions to analyze for escape
   // information in this package.
   this->discover_analysis_sets();
index a0c74228158cde0235a342b119311fdb492e4654..a0df2b801bddbac95b36ff16e21c279b42e456ab 100644 (file)
@@ -112,6 +112,8 @@ go_parse_input_files(const char** filenames, unsigned int filename_count,
   if (only_check_syntax)
     return;
 
+  ::gogo->analyze_escape();
+
   // Export global identifiers as appropriate.
   ::gogo->do_exports();