aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2019-07-19 23:10:55 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2019-07-19 23:10:55 +0000
commitaa4d56e2ce1d89599654d33051486cb58aadbc2e (patch)
treeafb15aed0fb2e6dea6137505fac6a2629ff0aa19 /gcc
parentc35504626ec008d97b61e4bda17038333d51a8f2 (diff)
downloadgcc-aa4d56e2ce1d89599654d33051486cb58aadbc2e.zip
gcc-aa4d56e2ce1d89599654d33051486cb58aadbc2e.tar.gz
gcc-aa4d56e2ce1d89599654d33051486cb58aadbc2e.tar.bz2
compiler: don't export bodies for functions marked "go:noinline"
The current Mark_inline_candidates helper looks only at budget when deciding to mark a function or method as inline (with the proviso that IR constructs not yet supported by the inliner are given artificially high cost). This patch changes the helper to also look at whether a function has the "go:noinline" pragma; if it does have the pragma there is no point putting it into the export data (it will just make the export data bigger). Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/186923 From-SVN: r273611
Diffstat (limited to 'gcc')
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--gcc/go/gofrontend/gogo.cc4
2 files changed, 5 insertions, 1 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index ccc1a24..2c53602 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-4df7c8d7af894ee93f50c3a50debdcf4e369a2c6
+e242929304e7a524ced56dc94605bbf6d83e6489
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/gogo.cc b/gcc/go/gofrontend/gogo.cc
index abd8686..30523f7 100644
--- a/gcc/go/gofrontend/gogo.cc
+++ b/gcc/go/gofrontend/gogo.cc
@@ -5109,6 +5109,8 @@ int
Mark_inline_candidates::function(Named_object* no)
{
Function* func = no->func_value();
+ if ((func->pragmas() & GOPRAGMA_NOINLINE) != 0)
+ return TRAVERSE_CONTINUE;
int budget = budget_heuristic;
Inline_within_budget iwb(&budget);
func->block()->traverse(&iwb);
@@ -5138,6 +5140,8 @@ Mark_inline_candidates::type(Type* t)
Named_object* no = *p;
go_assert(no->is_function());
Function *func = no->func_value();
+ if ((func->pragmas() & GOPRAGMA_NOINLINE) != 0)
+ continue;
int budget = budget_heuristic;
Inline_within_budget iwb(&budget);
func->block()->traverse(&iwb);