alpha failure on 920810-1
Joern Rennecke
amylaar@cygnus.co.uk
Wed Apr 29 16:08: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.
...
> 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.
If it tests only if all bits are zero, I think we should express this
as a DImode equality test to zero:
(set (reg:DF 1)
(eq:DF (reg:DF 2) (reg:DF 3)))
(set (reg:DF 4)
(if_then_else:DF (eq (subreg:DI (reg:DF 1) 0)
(const_int 0))
(reg:DF 5)
(reg:DF 4)))
More information about the Gcc
mailing list