2012-03-06 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Mar 2012 13:16:50 +0000 (13:16 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Mar 2012 13:16:50 +0000 (13:16 +0000)
* fold-const.c (build_fold_addr_expr_with_type_loc): Fold
MEM_REF with constant pointer operand.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184988 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/fold-const.c

index 3b88179..5ce9dc6 100644 (file)
@@ -1,5 +1,10 @@
 2012-03-06  Richard Guenther  <rguenther@suse.de>
 
+       * fold-const.c (build_fold_addr_expr_with_type_loc): Fold
+       MEM_REF with constant pointer operand.
+
+2012-03-06  Richard Guenther  <rguenther@suse.de>
+
        PR middle-end/52493
        * tree-ssa-alias.c (ptr_derefs_may_alias_p): Robustify.
 
index 6492f11..0f80675 100644 (file)
@@ -7626,8 +7626,13 @@ build_fold_addr_expr_with_type_loc (location_t loc, tree t, tree ptrtype)
        t = build1_loc (loc, NOP_EXPR, ptrtype, t);
     }
   else if (TREE_CODE (t) == MEM_REF
-      && integer_zerop (TREE_OPERAND (t, 1)))
+          && integer_zerop (TREE_OPERAND (t, 1)))
     return TREE_OPERAND (t, 0);
+  else if (TREE_CODE (t) == MEM_REF
+          && TREE_CODE (TREE_OPERAND (t, 0)) == INTEGER_CST)
+    return fold_binary (POINTER_PLUS_EXPR, ptrtype,
+                       TREE_OPERAND (t, 0),
+                       convert_to_ptrofftype (TREE_OPERAND (t, 1)));
   else if (TREE_CODE (t) == VIEW_CONVERT_EXPR)
     {
       t = build_fold_addr_expr_loc (loc, TREE_OPERAND (t, 0));