aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2012-03-06 13:16:50 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2012-03-06 13:16:50 +0000
commitd8f56643c04e5c76d8e17ab97ba4c67654b488a1 (patch)
tree506ce2369db9d5b1d1e1116755e1107c1b4413cf /gcc
parent9da5500b12acba71c0a807e1ed2de92b18f16c29 (diff)
downloadgcc-d8f56643c04e5c76d8e17ab97ba4c67654b488a1.zip
gcc-d8f56643c04e5c76d8e17ab97ba4c67654b488a1.tar.gz
gcc-d8f56643c04e5c76d8e17ab97ba4c67654b488a1.tar.bz2
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> * fold-const.c (build_fold_addr_expr_with_type_loc): Fold MEM_REF with constant pointer operand. From-SVN: r184988
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/fold-const.c7
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3b88179..5ce9dc6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 6492f11..0f80675 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -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));