From 8a14b86bcf047c938ba81db3e00efb6079d830df Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 4 Aug 2016 00:10:35 +0000 Subject: [PATCH] escape: Enable escape analysis in gccgo. Off by default, enabled through -fgo-optimize-allocs. Reviewed-on: https://go-review.googlesource.com/22378 From-SVN: r239109 --- gcc/go/gofrontend/MERGE | 2 +- gcc/go/gofrontend/escape.cc | 9 +++++++++ gcc/go/gofrontend/go.cc | 2 ++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 58066bd..ba99743 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -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. diff --git a/gcc/go/gofrontend/escape.cc b/gcc/go/gofrontend/escape.cc index 6814c7e..dfe6eb2 100644 --- a/gcc/go/gofrontend/escape.cc +++ b/gcc/go/gofrontend/escape.cc @@ -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(); diff --git a/gcc/go/gofrontend/go.cc b/gcc/go/gofrontend/go.cc index a0c7422..a0df2b8 100644 --- a/gcc/go/gofrontend/go.cc +++ b/gcc/go/gofrontend/go.cc @@ -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(); -- 2.7.4