tree-ssa-structalias.c (find_func_aliases): POINTER_DIFF_EXPR doesn't produce pointers.
authorRichard Biener <rguenther@suse.de>
Mon, 20 May 2019 12:02:35 +0000 (12:02 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 20 May 2019 12:02:35 +0000 (12:02 +0000)
2019-05-20  Richard Biener  <rguenther@suse.de>

* tree-ssa-structalias.c (find_func_aliases): POINTER_DIFF_EXPR
doesn't produce pointers.
{TRUNC,CEIL,FLOOR,ROUND,EXACT}_{DIV,MOD}_EXPR points to what
the first operand points to.

From-SVN: r271414

gcc/ChangeLog
gcc/tree-ssa-structalias.c

index d0232f2cd6a996dde3d3e6072e54cd6f0ff44677..d6eb9e346855ecfb6eb4cc0101d649d414a6b9d0 100644 (file)
@@ -1,3 +1,10 @@
+2019-05-20  Richard Biener  <rguenther@suse.de>
+
+       * tree-ssa-structalias.c (find_func_aliases): POINTER_DIFF_EXPR
+       doesn't produce pointers.
+       {TRUNC,CEIL,FLOOR,ROUND,EXACT}_{DIV,MOD}_EXPR points to what
+       the first operand points to.
+
 2019-05-20  Jan Hubicka  <hubicka@ucw.cz>
 
        * tree-ssa-alias.c (compare_sizes): New function.
index 2e2b0e8cb1e87576b03a5ccc62c29403f2f46926..d8ff2ce6dfe393205ecad7cd61fcd8f3061d91c1 100644 (file)
@@ -4900,6 +4900,9 @@ find_func_aliases (struct function *fn, gimple *origt)
          if (code == POINTER_PLUS_EXPR)
            get_constraint_for_ptr_offset (gimple_assign_rhs1 (t),
                                           gimple_assign_rhs2 (t), &rhsc);
+         else if (code == POINTER_DIFF_EXPR)
+           /* The result is not a pointer (part).  */
+           ;
          else if (code == BIT_AND_EXPR
                   && TREE_CODE (gimple_assign_rhs2 (t)) == INTEGER_CST)
            {
@@ -4908,6 +4911,17 @@ find_func_aliases (struct function *fn, gimple *origt)
              get_constraint_for_ptr_offset (gimple_assign_rhs1 (t),
                                             NULL_TREE, &rhsc);
            }
+         else if (code == TRUNC_DIV_EXPR
+                  || code == CEIL_DIV_EXPR
+                  || code == FLOOR_DIV_EXPR
+                  || code == ROUND_DIV_EXPR
+                  || code == EXACT_DIV_EXPR
+                  || code == TRUNC_MOD_EXPR
+                  || code == CEIL_MOD_EXPR
+                  || code == FLOOR_MOD_EXPR
+                  || code == ROUND_MOD_EXPR)
+           /* Division and modulo transfer the pointer from the LHS.  */
+           get_constraint_for_rhs (gimple_assign_rhs1 (t), &rhsc);
          else if ((CONVERT_EXPR_CODE_P (code)
                    && !(POINTER_TYPE_P (gimple_expr_type (t))
                         && !POINTER_TYPE_P (TREE_TYPE (rhsop))))