This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFC ping: Make regrename use validate_change


Hello,

after a discussion with Ulrich I think I've finally understood
why you and Bernd say that the constraints must be the problem.

Like in the arm case Bernd described our load multiple pattern
work because they are only allowed after reload and are emitted
by the back end always with hard reg operands statisfying the 
predicate. A predicate forcing operand registers to be consecutive
is broken anyway if it would be called before reload. 
But reload never has to deal with it otherwise it would have run 
into similar trouble as regrename.

And regrename never made problems before because these insns
are only emitted for storing and restoring general purpose
registers in the function prologue and epilogue. Hence
regrename never had them in a def-use chain what explains why
it never had a chance to break them.

The patch I'm working on introduces load/store multiple splitters
for movti patterns. These splitters are enabled after reload but before
regrename. This way load/store multiple patterns are emitted in the 
function body what makes them proper targets for regrename.

Because reload and regrename functions are exclusively controlled by
insn constraints an insn with a predicate demanding more than the
sum of contraints has to disable reload and regrename by passing an
empty constraint string as Bernd already suggested.

Actually I wasn't aware that I can leave one contraint string empty 
although other operands have constraints.

Thanks for your help

Bye,

-Andreas-


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]