On Wed, Sep 14, 2022 at 07:58:47AM +0000, Richard Biener wrote: > > My change to match.pd (that added the two simplifications this patch > > touches) results in more |/^/& assignments with pointer arguments, > > but since r12-1608 we reject pointer operands for BIT_NOT_EXPR. > > > > Disallowing them for BIT_NOT_EXPR and allowing for BIT_{IOR,XOR,AND}_EXPR > > leads to a match.pd maintainance nightmare (see one of the patches in the > > PR), so either we want to allow pointer operand on BIT_NOT_EXPR (but then > > we run into issues e.g. with the ranger which expects it can emulate > > BIT_NOT_EXPR ~X as - 1 - X which doesn't work for pointers which don't > > support MINUS_EXPR), or the following patch disallows pointer arguments > > for all of BIT_{IOR,XOR,AND}_EXPR with the exception of BIT_AND_EXPR > > with INTEGER_CST last operand (for simpler pointer realignment). > > I had to tweak one reassoc optimization and the two match.pd > > simplifications. > > > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? > > OK.
Thanks. > Did you check what breaks when we reverse the decision to allow > BIT_AND_EXPR to align pointers alltogether? I think we don't > have any > > (T')(((T)ptr) & CST) -> ptr & CST I haven't tried that, but can try that next. Would prefer a few days in between so if my current patch affects other arches it is reported. > I think for BIT_*_EXPR we want ANY_INTEGRAL_TYPE_P (well, likely > not complex int, but ...). So if a patch to check that passes > bootstrap that would be nice to have. And can try that as the third step then. Jakub