On Thu, Sep 26, 2019 at 10:01:56AM -0600, Jeff Law wrote:
> On 9/26/19 9:47 AM, Jakub Jelinek wrote:
> > On Thu, Sep 26, 2019 at 09:39:31AM -0600, Jeff Law wrote:
> >> Right.  My point is that the multiplication patterns are an exception as
> >> well.
> > 
> > Do you have some evidence for that? 
> It's in the manual.  And yes it potentially makes a huge mess due to the
> interactions with modeless CONST_INTs.

Where?
Unless otherwise specified, all the operands of arithmetic expressions
must be valid for mode @var{m}.  An operand is valid for mode @var{m}
if it has mode @var{m}, or if it is a @code{const_int} or
@code{const_double} and @var{m} is a mode of class @code{MODE_INT}.

and for MULT:
Represents the signed product of the values represented by @var{x} and
@var{y} carried out in machine mode @var{m}.
@code{ss_mult} and @code{us_mult} ensure that an out-of-bounds result
saturates to the maximum or minimum signed or unsigned value.

Some machines support a multiplication that generates a product wider
than the operands.  Write the pattern for this as

@smallexample
(mult:@var{m} (sign_extend:@var{m} @var{x}) (sign_extend:@var{m} @var{y}))
@end smallexample

where @var{m} is wider than the modes of @var{x} and @var{y}, which need
not be the same.

For unsigned widening multiplication, use the same idiom, but with
@code{zero_extend} instead of @code{sign_extend}.

I don't read that as an exception to violate that, it simply says that in
that case one should use sign/zero_extend.

        Jakub

Reply via email to