Steven Bosscher wrote:
As far as I can tell, there is no architecture requirement that p1 and
p2 must be a register pair (ie. p6,p7 or p2,p3, etc.), but that seems
to be the only form that GCC can produce.
Perhaps this was done this way to avoid insn patterns with two sets?

It was done this way because no one has written real predication support yet. And in this context, ifcvt.c doesn't count, because it only has the simplest of possible predication support.


In the absence of real predication support, the two predicates are always inverses of each other, and hence there is no advantage to treating them as separate registers. We need both predicates so we can reverse branches, but there is no reason why we would ever need to treat them as anything other than a register pair. Treating them as a register pair makes everything simpler, the md patterns, the support for reversing branches, the PR register allocation, etc. They look just like the condition codes available on other targets when we do things this way.

When we have real predication support, the predicate register support in ia64.md will have to be generalized. Until then, it seems to be an unnecessary luxury.
--
Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com

Reply via email to