summaryrefslogtreecommitdiff
path: root/src/cmd/gc/gen.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-10-07 04:42:26 -0400
committerRuss Cox <rsc@golang.org>2010-10-07 04:42:26 -0400
commit9ba0bfc17c1c812a86fe912e19d005baa9eed9a3 (patch)
treef82d8d09026b3dbbe1f1f6b5beb12715674a24eb /src/cmd/gc/gen.c
parent02647460c22c62b6def1bba1e29036ab20eca00d (diff)
downloadgo-9ba0bfc17c1c812a86fe912e19d005baa9eed9a3.tar.gz
gc: elide dead code
R=ken2 CC=golang-dev http://codereview.appspot.com/2365044
Diffstat (limited to 'src/cmd/gc/gen.c')
-rw-r--r--src/cmd/gc/gen.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/cmd/gc/gen.c b/src/cmd/gc/gen.c
index d2396aa09..a8b2e1b8e 100644
--- a/src/cmd/gc/gen.c
+++ b/src/cmd/gc/gen.c
@@ -257,6 +257,17 @@ gen(Node *n)
break;
case OIF:
+ if(n->ntest == N || n->ntest->op == OLITERAL) {
+ // drop dead code in if true or if false.
+ // the linker will do it for us in general,
+ // but this avoids writnig to the object file
+ // in a very common case.
+ if(n->ntest == N || n->ntest->val.u.bval)
+ genlist(n->nbody);
+ else
+ genlist(n->nelse);
+ break;
+ }
p1 = gjmp(P); // goto test
p2 = gjmp(P); // p2: goto else
patch(p1, pc); // test: