gcc-2.7 creates faster code than pgcc-1.1.1
Jeffrey A Law
law@hurl.cygnus.com
Fri Mar 5 09:30:00 GMT 1999
In message < 19990305143358.4747.qmail@deer >you write:
> If that we really true *generally*, i.e. for floating-point as well,
> then we could happily make -mieee the default for egcs/gcc on Alphas,
> for example. (This would make Alpha-generated floating-point code
> much slower, of course, which is why I mention it: if it was possible
> to use value-range propagation to determine when the special code-
> generation normally needed for full IEEE range wasn't needed after all,
> then some of that performance could be regained.)
None of the papers discussed it in a floating point context, merely from an
integer context. The basics were you had a range [min,max] and a bit which
indicated that the value was in or out of the range which was built up on a
basic block level for each expression.
The ranges were then propagated through the flow graph like any other local
local property. A trivial example, at a flow merge point where we had
one path with a range 0..4 inclusive and a range 6...12 inclusive the
resulting range would be 0..12 inclusive. [ It didn't try to track the hole
at 5. ]
As you mention it could be used to detect and eliminate things like domain
checks which depend solely on the range, not the precision.
Knowing that certain numbers can't be a NaN or Inf would lead to being able
to apply more identity operations on floating point values.
It'd be a lot of work though. I suspect there's other lower hanging fruit
we can/should go after (assignment motion, partial dead code elimination,
sparse conditional constant propagation, etc).
jeff
More information about the Gcc
mailing list