public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [RFC/SCCVN] Handle BIT_INSERT_EXPR in vn_nary_op_eq
@ 2017-07-13  1:19 Andrew Pinski
  2017-07-13  4:14 ` Marc Glisse
  0 siblings, 1 reply; 7+ messages in thread
From: Andrew Pinski @ 2017-07-13  1:19 UTC (permalink / raw)
  To: GCC Patches

[-- Attachment #1: Type: text/plain, Size: 1045 bytes --]

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.

[-- Attachment #2: fixbitinsert-vn.diff.txt --]
[-- Type: text/plain, Size: 675 bytes --]

Index: tree-ssa-sccvn.c
===================================================================
--- tree-ssa-sccvn.c	(revision 250159)
+++ tree-ssa-sccvn.c	(working copy)
@@ -2636,6 +2636,14 @@ vn_nary_op_eq (const_vn_nary_op_t const
     if (!expressions_equal_p (vno1->op[i], vno2->op[i]))
       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 (vno1->opcode == BIT_INSERT_EXPR)
+    if (INTEGRAL_TYPE_P (TREE_TYPE (vno1->op[0]))
+	&& TYPE_PRECISION (TREE_TYPE (vno1->op[1]))
+	    != TYPE_PRECISION (TREE_TYPE (vno2->op[1])))
+      return false;
+
   return true;
 }
 

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-07-21 17:16 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-13  1:19 [RFC/SCCVN] Handle BIT_INSERT_EXPR in vn_nary_op_eq Andrew Pinski
2017-07-13  4:14 ` Marc Glisse
2017-07-13  4:18   ` Andrew Pinski
2017-07-17 10:03     ` Richard Biener
2017-07-19 16:10       ` Andrew Pinski
2017-07-19 18:13         ` Richard Biener
2017-07-21 17:16           ` Andrew Pinski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).