diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2011-12-10 10:44:59 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2011-12-10 10:44:59 -0800 |
commit | 17928334e0b80cf009df2a5838d6778fe23cf64f (patch) | |
tree | 0696dd0bd9b2c5ac5b93f30ebfdc75c66e2bf588 | |
parent | e3a60abafb1e7740f3c278396f703f4e47ebcf29 (diff) | |
download | txr-17928334e0b80cf009df2a5838d6778fe23cf64f.tar.gz txr-17928334e0b80cf009df2a5838d6778fe23cf64f.tar.bz2 txr-17928334e0b80cf009df2a5838d6778fe23cf64f.zip |
* lib.c (mulv): Recognize cases to eliminate a wasteful mul call
with an initial element of 1.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | lib.c | 6 |
2 files changed, 10 insertions, 1 deletions
@@ -1,5 +1,10 @@ 2011-12-10 Kaz Kylheku <kaz@kylheku.com> + * lib.c (mulv): Recognize cases to eliminate a wasteful mul call + with an initial element of 1. + +2011-12-10 Kaz Kylheku <kaz@kylheku.com> + * lib.c (plusv): Recognize cases to eliminate a wasteful plus call with an initial element of zero. @@ -881,7 +881,11 @@ val mul(val anum, val bnum) val mulv(val nlist) { - return reduce_left(func_n2(mul), nlist, num(1), nil); + if (!nlist) + return num(1); + else if (!cdr(nlist)) + return car(nlist); + return reduce_left(func_n2(mul), cdr(nlist), car(nlist), nil); } val trunc(val anum, val bnum) |