On Thu, Jan 22 2015, Richard Biener <richard.guent...@gmail.com> wrote:
> On Wed, Jan 21, 2015 at 9:00 PM, Marc Glisse <marc.gli...@inria.fr> wrote: >> Hello, >> >> (sorry for the broken thread, for some reason I haven't received any email >> from gcc since about 10am, I'll investigate later) >> >> +/* x & ~(x & y) -> x & ~y */ >> +(simplify >> + (bit_and:c @0 (bit_not (bit_and:c@2 @0 @1))) >> + (if (TREE_CODE (@2) != SSA_NAME || has_single_use (@2)) >> + (bit_and @0 (bit_not @1)))) >> >> Wouldn't it make more sense to put @2 on bit_not? If bit_and is used >> multiple times, the transformation is neutral so it should be done as a >> canonicalization. On the other hand, if bit_not is used multiple times, the >> transformation adds an extra bit_not (which might be free when there is an >> andn insn). So I believe the 2 main options are: >> - move @2 on the bit_not >> - don't test has_single_use at all > > I tend to favor not testing has_single_use at all. Does this apply only to this pattern, to this pattern and its dual (3/4), or to all four? Rasmus