Ghassan Shobaki wrote:
Hi,
I am currently experimenting with superblock and trace scheduling in GCC
(using the -fsched2-use-superblocks option). In an attempt to get traces
with more parallelism, I tried to change the phase ordering so that
superblcok scheduling is done before register allocation. However, when I
switched the order and ran the compiler I got the following error
message:
bits.c:113: internal compiler error: basic blocks not laid down
consecutively
Please submit a full bug report,
So, the question is: will it be possible to do superblock scheduling
before regsiter allocation or there is a fundamental reason that prohibits
that?
I don't know such reason but ebb scheduling was written for Itanium to
work as practically the very last pass. It was not supposed to work
before the register allocator.
If that's possible, any idea what changes I need to make besides
simply switching the order in which the two phases are invoked?
The above error message may give you a good idea about the problem.
It is hard to say but I think that ebb scheduler is not accurate with
maintaining CFG in a right shape therefore verifying CFG information
failed after the ebb. So you have to find what is wrong and fix it.
Sorry there is no easier way to make it work before the register allocator.