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
This commit is contained in:
Richard Guenther 2012-03-06 13:16:50 +00:00 committed by Richard Biener
parent 9da5500b12
commit d8f56643c0
2 changed files with 11 additions and 1 deletions

View File

@ -1,3 +1,8 @@
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> 2012-03-06 Richard Guenther <rguenther@suse.de>
PR middle-end/52493 PR middle-end/52493

View 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); t = build1_loc (loc, NOP_EXPR, ptrtype, t);
} }
else if (TREE_CODE (t) == MEM_REF else if (TREE_CODE (t) == MEM_REF
&& integer_zerop (TREE_OPERAND (t, 1))) && integer_zerop (TREE_OPERAND (t, 1)))
return TREE_OPERAND (t, 0); 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) else if (TREE_CODE (t) == VIEW_CONVERT_EXPR)
{ {
t = build_fold_addr_expr_loc (loc, TREE_OPERAND (t, 0)); t = build_fold_addr_expr_loc (loc, TREE_OPERAND (t, 0));