Related articles |
---|
reducible loops preston@cs.rice.edu (1992-02-24) |
Re: reducible loops rockwell@socrates.umd.edu (Raul Deluth Miller-Rockwell) (1992-02-25) |
Re: reducible loops preston@dawn.cs.rice.edu (1992-02-26) |
Re: reducible loops lee@dumas.rutgers.edu (1992-02-26) |
Re: reducible loops glew@pdx007.intel.com (1992-02-26) |
Re: reducible loops preston@dawn.cs.rice.edu (1992-02-27) |
Re: reducible loops joel@decwrl.dec.com (1992-02-28) |
Re: reducible loops idacrd!desj@uunet.UU.NET (1992-03-09) |
Re: reducible loops preston@dawn.cs.rice.edu (1992-03-10) |
Newsgroups: | comp.compilers |
From: | joel@decwrl.dec.com |
Keywords: | optimize |
Organization: | DEC Western Research Laboratory |
References: | <9202220021.AA28153@ucbvax.Berkeley.EDU> 92-02-131 |
Date: | Fri, 28 Feb 92 01:32:55 GMT |
A much simpler related problem, which almost no compiler seems to get
right, is moving much of the switch statement overhead OUT of a loop, if
the switch expression is invariant inside the loop. Why, I don't know.
It's not much different from moving any other invariant out of the loop,
except that the invariant is a pc address rather than a data value.
#define blah(offset) ...
while (height != 0) {
/* No modifications to width inside loop. */
switch (width/4) {
case 7: blah(-32);
case 6: blah(-28);
...
case 0: blah(-4);
}
height--;
}
This is an example from real code in both MIT's and DEC's X servers.
Getting the code to run fast requires much programmer intervention, in the
form of assembly code, or in a truly excessive amount of C code that moves
the switch statement outside the (now 8 different) loop(s).
- Joel McCormack (decwrl!joel, joel@decwrl.dec.com)
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.