Path: utzoo!utgpu!news-server.csri.toronto.edu!clyde.concordia.ca!uunet!cs.utexas.edu!rutgers!pyrnj!hhb!istvan From: istvan@hhb.UUCP (Istvan Mohos) Newsgroups: comp.unix.wizards Subject: Should optimizing compilers automatically assign registers? Message-ID: <512@hhb.UUCP> Date: 6 May 90 16:24:58 GMT Organization: HHB Systems, Mawah, NJ Lines: 48 main() { /* prog1, compile with: /bin/cc -O prog1.c -o reg */ static unsigned char buf[4096]; register unsigned char *p; for (p = buf + 4096; --p >= buf;) for (; *p < 255; ++*p); } main() { /* prog2, compile with: /bin/cc -O prog2.c -o nonreg */ static unsigned char buf[4096]; unsigned char *p; for (p = buf + 4096; --p >= buf;) for (; *p < 255; ++*p); } Prog1 and prog2 are identical except that prog1 requests the assignment of the auto variable p to a hardware register. I mistakenly assumed that by using the -O flag, the compiler would optimize prog2, and generate identical objects from prog1 and prog2. Of the systems I tried this on, the Pyramid90X, the Sparcstation1, and a SystemV 6300+ PC, proved this to be true. A VAX Ultrix and a Sun3 proved me wrong. Here are some execution times for the reg and nonreg objects, gotten on quiescent systems using /bin/time ./[non]reg >& [non]regtime Ultrix: regtime 15.8 real 3.1 user 0.9 sys nonregtime 21.6 real 3.7 user 1.2 sys 6300+: 7.9 real 7.8 user 0.1 sys Pyramid: 4.8 real 4.6 user 0.1 sys Sun3: regtime 1.7 real 1.6 user 0.0 sys nonregtime 2.2 real 2.2 user 0.0 sys Sparcstation1: 0.9 real 0.8 user 0.0 sys Is the automatic allocation of a few variables into registers too much to ask from an optimizing compiler? -- Istvan Mohos ...uunet!pyrdc!pyrnj!hhb!istvan RACAL-REDAC/HHB 1000 Wyckoff Ave. Mahwah NJ 07430 201-848-8000 ======================================================================