Tune pointer-plus folding
authorTom de Vries <tom@codesourcery.com>
Sat, 31 Oct 2015 09:33:25 +0000 (09:33 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Sat, 31 Oct 2015 09:33:25 +0000 (09:33 +0000)
2015-10-31  Tom de Vries  <tom@codesourcery.com>

* fold-const.c (fold_unary_loc): Tune POINTER_PLUS_EXPR folding.

* gfortran.dg/assumed_type_2.f90: Update test.
* gfortran.dg/no_arg_check_2.f90: Same.

From-SVN: r229621

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/assumed_type_2.f90
gcc/testsuite/gfortran.dg/no_arg_check_2.f90

index 7e4fa20a4cdd43917bb0f2e029bea745bf9ca7c5..48cd3f80d43bf009e724c5fbdcd95acf4f80c360 100644 (file)
@@ -1,3 +1,7 @@
+2015-10-31  Tom de Vries  <tom@codesourcery.com>
+
+       * fold-const.c (fold_unary_loc): Tune POINTER_PLUS_EXPR folding.
+
 2015-10-31  Tom de Vries  <tom@codesourcery.com>
 
        * tree-ssa-structalias.c (intra_create_variable_infos): Don't expect
index b9168f331ed534afb02f02af7f946179a01b85da..197ccfddddb2d2e34e63c11e313dd43bf5479129 100644 (file)
@@ -7755,14 +7755,12 @@ fold_unary_loc (location_t loc, enum tree_code code, tree type, tree op0)
            }
        }
 
-      /* Convert (T1)(X p+ Y) into ((T1)X p+ Y), for pointer type,
-         when one of the new casts will fold away. Conservatively we assume
-        that this happens when X or Y is NOP_EXPR or Y is INTEGER_CST. */
+      /* Convert (T1)(X p+ Y) into ((T1)X p+ Y), for pointer type, when the new
+        cast (T1)X will fold away.  We assume that this happens when X itself
+        is a cast.  */
       if (POINTER_TYPE_P (type)
          && TREE_CODE (arg0) == POINTER_PLUS_EXPR
-         && (TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST
-             || TREE_CODE (TREE_OPERAND (arg0, 0)) == NOP_EXPR
-             || TREE_CODE (TREE_OPERAND (arg0, 1)) == NOP_EXPR))
+         && CONVERT_EXPR_P (TREE_OPERAND (arg0, 0)))
        {
          tree arg00 = TREE_OPERAND (arg0, 0);
          tree arg01 = TREE_OPERAND (arg0, 1);
index 2ec795cda2aa9811602832e1a70b767e9d735382..85dff2ef2f7ee84ad85986084db691fc2497e7fd 100644 (file)
@@ -1,3 +1,8 @@
+2015-10-31  Tom de Vries  <tom@codesourcery.com>
+
+       * gfortran.dg/assumed_type_2.f90: Update test.
+       * gfortran.dg/no_arg_check_2.f90: Same.
+
 2015-10-30  Cesar Philippidis  <cesar@codesourcery.com>
 
        * gfortran.dg/gomp/intentin1.f90: Adjust copyprivate warning.
index ec51b8bcaa8867a801b545f336cb89ab4fa7958b..f1a20747884436fae2c4ed88232ac47da31d993a 100644 (file)
@@ -155,7 +155,7 @@ end
 ! { dg-final { scan-tree-dump-times "sub_scalar .&\\(.\\(struct t2.0:. . restrict\\) array_t2_alloc.data" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "sub_scalar .&\\(.\\(struct t3.0:. .\\) array_t3_ptr.data" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "sub_scalar .\\(struct t1 .\\) array_class_t1_alloc._data.data" 1 "original" } }
-! { dg-final { scan-tree-dump-times "sub_scalar .\\(struct t1 .\\) array_class_t1_ptr._data.dat" 1 "original" } }a
+! { dg-final { scan-tree-dump-times "sub_scalar .\\(struct t1 .\\) \\(array_class_t1_ptr._data.dat" 1 "original" } }
 
 ! { dg-final { scan-tree-dump-times "sub_array_assumed \\(D" 3 "original" } }
 ! { dg-final { scan-tree-dump-times " = _gfortran_internal_pack \\(&parm" 1 "original" } }
index 3645dedeb21e157edd075bd88edf60a5bbf90b1a..b3fb4685efe61f70fb4014ea70859dcb877ff425 100644 (file)
@@ -137,7 +137,7 @@ end
 ! { dg-final { scan-tree-dump-times "sub_scalar .&\\(.\\(struct t2.0:. . restrict\\) array_t2_alloc.data" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "sub_scalar .&\\(.\\(struct t3.0:. .\\) array_t3_ptr.data" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "sub_scalar .\\(struct t1 .\\) array_class_t1_alloc._data.data" 1 "original" } }
-! { dg-final { scan-tree-dump-times "sub_scalar .\\(struct t1 .\\) array_class_t1_ptr._data.dat" 1 "original" } }a
+! { dg-final { scan-tree-dump-times "sub_scalar .\\(struct t1 .\\) \\(array_class_t1_ptr._data.dat" 1 "original" } }
 
 ! { dg-final { scan-tree-dump-times "sub_array_assumed \\(D" 3 "original" } }
 ! { dg-final { scan-tree-dump-times " = _gfortran_internal_pack \\(&parm" 1 "original" } }