diff options
author | Richard Guenther <rguenther@suse.de> | 2012-03-06 13:16:50 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-03-06 13:16:50 +0000 |
commit | d8f56643c04e5c76d8e17ab97ba4c67654b488a1 (patch) | |
tree | 506ce2369db9d5b1d1e1116755e1107c1b4413cf /gcc | |
parent | 9da5500b12acba71c0a807e1ed2de92b18f16c29 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fold-const.c | 7 |
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)); |