alpha failure on 920810-1
Jim Wilson
wilson@cygnus.com
Tue Apr 28 22:14:00 GMT 1998
The reason is that the limited comparison
done by the conditional move does not follow all of the IEEE rules
that the comparision insn does, but rather simply test that the
register has no bits set.
I suspect that there are no currently supported machines for which your
get_condition change is wrong, but there may be future architectures for
which is it wrong. In any case, it doesn't seem to really fix the problem.
For instance, you will probably see the same invalid transformations from
combine. Fixing loop doesn't help with that.
To fix this elegantly, we need to make the RTL operations distinct if
they are performing different operations. Since we can't do this with
CCmodes, it seems to imply that we need new comparison operators. For
instance, perhaps we need eqieee separate from eq, similar to how gtu is
separate from gt. This would require changing a lot of code though to
handle the new operators though. That would be a major task.
Adding a strategic unspec operation could fix the problem, at the expense
of uglifying the alpha.md file a bit, and perhaps losing some optimizations.
It is likely a simpler solution though.
I don't see any clean and simple way to fix the problem.
Jim
More information about the Gcc
mailing list