[COMMIT] romcc 0.63 and some fixes...
Eric W. Biederman
ebiederman at lnxi.com
Fri Jun 25 19:12:00 CEST 2004
YhLu <YhLu at tyan.com> writes:
> printo_debug("this mainboard is only designed for 2 cpus\r\n");
> causes the segment dump.
A update on this...
I took some time and tracked the problem down. So far
I have exposed 2 problems in romcc with your code.
The first that was causing the core dump I have fixed.
The second is a little more insidious. Basically
when call/return instructions are introduced the control
flow graph is no longer a graph. Because the structure
changes depending on which path you take through the code.
What happens currently is I treat it like a graph and get
a conservative estimate on the control flow structure. So no
incorrect transformations happen to the code. However there are a
number of cases and your code was one where code that is correct
does not appear to be. Because it appears that there are additional
paths to a basic block, when there are not.
The result is some legitimate cases will not compile. And likely
that some optimization opportunities are lost. I suspect the lost
optimization opportunities are responsible for the code size growth.
Without calls and returns the dominance relationship between
instructions is transitive. Instruction X dominates instruction Y if
you must execute X before Y. With call/return pairs the dominance
relationship is no longer quite transitive which is going to take
some delicate manipulation to let romcc understand this without
I am going to spend a little more time looking at this and when I am
done I am going to commit however many fixes/enhancements that I have.
More information about the coreboot