From 49f749489422fa5d5cd828d2e13bf94156f14719 Mon Sep 17 00:00:00 2001 From: Ken Thompson Date: Fri, 1 May 2009 18:55:16 -0700 Subject: [PATCH] code optmization drip init function if it doesnt do anything R=r OCL=28180 CL=28180 --- src/cmd/gc/dcl.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/cmd/gc/dcl.c b/src/cmd/gc/dcl.c index 3a3e88b256..d39b893a35 100644 --- a/src/cmd/gc/dcl.c +++ b/src/cmd/gc/dcl.c @@ -1259,6 +1259,40 @@ mixed: // return (8) // } +int +anyinit(Node *n) +{ + uint32 h; + Sym *s; + + // are there any init statements + if(n != N) + return 1; + + // is this main + if(strcmp(package, "main") == 0) + return 1; + + // is there an explicit init function + snprint(namebuf, sizeof(namebuf), "init·%s", filename); + s = lookup(namebuf); + if(s->oname != N) + return 1; + + // are there any imported init functions + for(h=0; hlink) { + if(s->name[0] != 'I' || strncmp(s->name, "Init·", 6) != 0) + continue; + if(s->oname == N) + continue; + return 1; + } + + // then none + return 0; +} + void fninit(Node *n) { @@ -1272,6 +1306,9 @@ fninit(Node *n) return; } + if(!anyinit(n)) + return; + r = N; // (1)