match.pd handling of three-constant bitops
authorRichard Sandiford <richard.sandiford@linaro.org>
Wed, 3 Jan 2018 07:13:57 +0000 (07:13 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 3 Jan 2018 07:13:57 +0000 (07:13 +0000)
commitfba05d9e9a0321c812ddbda7b4caa3977e1db4ef
treefcb44ccf099df984033df19505fd84e7a39d4e7b
parent0f26839a0a779caa6c81d9fb3c31699f6ca86790
match.pd handling of three-constant bitops

natch.pd tries to reassociate two bit operations if both of them have
constant operands.  However, with the polynomial integers added later,
there's no guarantee that a bit operation on two integers can be folded
at compile time.  This means that the pattern can trigger for operations
on three constants, and as things stood could endlessly oscillate
between the two associations.

This patch keeps the existing pattern for the normal case of a
non-constant first operand.  When all three operands are constant it
tries to find a pair of constants that do fold.  If none do, it keeps
the original expression as-was.

2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* match.pd: Handle bit operations involving three constants
and try to fold one pair.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r256125
gcc/ChangeLog
gcc/match.pd