[RFC/SCCVN] Handle BIT_INSERT_EXPR in vn_nary_op_eq

Marc Glisse marc.glisse@inria.fr
Thu Jul 13 04:14:00 GMT 2017


On Wed, 12 Jul 2017, Andrew Pinski wrote:

> Hi,
>  Unlike most other expressions, BIT_INSERT_EXPR has an implicit
> operand of the precision/size of the second operand.  This means if we
> have an integer constant for the second operand and that compares to
> the same constant value, vn_nary_op_eq would return that these two
> expressions are the same.  But in the case I was looking into the
> integer constants had different types, one with 1 bit precision and
> the other with 2 bit precision which means the BIT_INSERT_EXPR were
> not equal at all.
>
> This patches the problem by checking to see if BIT_INSERT_EXPR's
> operand 1's (second operand) type  has different precision to return
> false.
>
> Is this the correct location or should we be checking for this
> differently?  If this is the correct location, is the patch ok?
> Bootstrapped and tested on aarch64-linux-gnu with no regressions (and
> also tested with a few extra patches to expose BIT_INSERT_EXPR).
>
> Thanks,
> Andrew Pinski
>
> ChangeLog:
> * tree-ssa-sccvn.c (vn_nary_op_eq): Check BIT_INSERT_EXPR's operand 1
> to see if the types precision matches.

Hello,

since BIT_INSERT_EXPR is implicitly an expression with 4 arguments, it 
makes sense that we may need a few such special cases. But shouldn't the 
hash function be in sync with the equality comparator? Does 
operand_equal_p need the same?

-- 
Marc Glisse



More information about the Gcc-patches mailing list