pardo@JUNE.CS.WASHINGTON.EDU (09/29/89)
This is not a bug report. This is a comment about one more place to do optmizations. Gcc 1.36 for a Vax using config.gcc. The optimizer does not recognize some non-overlapping variable lifetimes. int z; bork() { { int i; i = z + 4; zork (&i); } { int j; j = z + 5; zork (&j); } } gcc -O -S -v foo.c gcc version 1.36 /uns/usr/local/lib/gcc-cpp -v -undef -D__GNUC__ -Dvax -Dunix -D__vax__ -D__unix__ -D__OPTIMIZE__ foo.c /usr/tmp/cca05236.cpp GNU CPP version 1.36 /uns/usr/local/lib/gcc-cc1 /usr/tmp/cca05236.cpp -quiet -dumpbase foo.c -O -version -o foo.s GNU C version 1.36 (vax) compiled by GNU C version 1.36. default target switches: -munix #NO_APP gcc_compiled.: .text .align 1 .globl _bork _bork: .word 0x40 subl2 $8,sp # only needed subl2 $4. addl3 _z,$4,-4(fp) subl3 $4,fp,-(sp) movab _zork,r6 calls $1,(r6) addl3 _z,$5,-8(fp) subl3 $8,fp,-(sp) calls $1,(r6) ret .comm _z,4 The place where this optimization is important is when `i' and `j' are replaced by arrays; the difference in stack size (and thus caching performance) is observable. ;-D on ( Yes, GNU improves cache performance, too! ) Pardo