Hi,
  When I was playing around where lowering of bit-field accesses go in
the pass order, I found that DOM had the same issue as PRE had when it
came to comparing BIT_INSERT_EXPR for equality.  The same exact
testcase was showing the wrong code; gcc.dg/tree-ssa/20040324-1.c.

This fixes DOM the same way as I had fixed PRE, by special casing
BIT_INSERT_EXPR due to the implicit operand.

OK?  Bootstrapped and tested on aarch64-linux-gnu with no regressions.

Thanks,
Andrew Pinski

ChangeLog:
* tree-ssa-scopedtables.c (hashable_expr_equal_p): Check
BIT_INSERT_EXPR's operand 1
to see if the types precision matches.
Index: tree-ssa-scopedtables.c
===================================================================
--- tree-ssa-scopedtables.c     (revision 250712)
+++ tree-ssa-scopedtables.c     (working copy)
@@ -502,6 +502,16 @@ hashable_expr_equal_p (const struct hash
                               expr1->ops.ternary.opnd2, 0))
        return false;
 
+      /* BIT_INSERT_EXPR has an implict operand as the type precision
+         of op1.  Need to check to make sure they are the same.  */
+      if (expr0->ops.ternary.op == BIT_INSERT_EXPR
+         && TREE_CODE (expr0->ops.ternary.opnd1) == INTEGER_CST
+          && TREE_CODE (expr1->ops.ternary.opnd1) == INTEGER_CST
+          && TYPE_PRECISION (TREE_TYPE (expr0->ops.ternary.opnd1))
+              != TYPE_PRECISION (TREE_TYPE (expr1->ops.ternary.opnd1)))
+        return false;
+
+
       if (operand_equal_p (expr0->ops.ternary.opnd0,
                           expr1->ops.ternary.opnd0, 0)
          && operand_equal_p (expr0->ops.ternary.opnd1,

Reply via email to