]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
fold-const.c (operand_equal_for_comparison_p): See if equal when nop conversions...
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Wed, 18 Mar 1998 13:45:28 +0000 (13:45 +0000)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 18 Mar 1998 13:45:28 +0000 (05:45 -0800)
Wed Mar 18 13:46:07 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
        * fold-const.c (operand_equal_for_comparison_p): See if equal
        when nop conversions are removed.

From-SVN: r18672

gcc/ChangeLog
gcc/fold-const.c

index dd4f83cf2aff1de0a90779560e40e7364e5f387f..2b246554f42f57d5a0ffd02ba78b35699817c6fd 100644 (file)
@@ -1,3 +1,8 @@
+Wed Mar 18 13:46:07 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * fold-const.c (operand_equal_for_comparison_p): See if equal
+       when nop conversions are removed.
+
 Wed Mar 18 13:42:01 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
        * expr.c (expand_expr, case COND_EXPR): If have conditional move,
index 32f399623692f6d67a6910c6bb0490b5574a02e2..3a24e4c2df584d3b6429ab282464e7870fabbb8a 100644 (file)
@@ -1909,7 +1909,7 @@ operand_equal_for_comparison_p (arg0, arg1, other)
      tree other;
 {
   int unsignedp1, unsignedpo;
-  tree primarg1, primother;
+  tree primarg0, primarg1, primother;
   unsigned correct_width;
 
   if (operand_equal_p (arg0, arg1, 0))
@@ -1919,6 +1919,14 @@ operand_equal_for_comparison_p (arg0, arg1, other)
       || ! INTEGRAL_TYPE_P (TREE_TYPE (arg1)))
     return 0;
 
+  /* Discard any conversions that don't change the modes of ARG0 and ARG1
+     and see if the inner values are the same.  This removes any
+     signedness comparison, which doesn't matter here.  */
+  primarg0 = arg0, primarg1 = arg1;
+  STRIP_NOPS (primarg0);  STRIP_NOPS (primarg1);
+  if (operand_equal_p (primarg0, primarg1, 0))
+    return 1;
+
   /* Duplicate what shorten_compare does to ARG1 and see if that gives the
      actual comparison operand, ARG0.