Commit f3280e4c by Richard Biener

ipa/94217 simplify offsetted address build

This avoids using build_ref_for_offset and build_fold_addr_expr
where type mixup easily results in something not IP invariant.

2020-03-19  Richard Biener  <rguenther@suse.de>

	PR ipa/94217
	* ipa-cp.c (ipa_get_jf_ancestor_result): Avoid build_fold_addr_expr
	and build_ref_for_offset.
parent 73bc09fa
2020-03-19 Richard Biener <rguenther@suse.de> 2020-03-19 Richard Biener <rguenther@suse.de>
PR ipa/94217
* ipa-cp.c (ipa_get_jf_ancestor_result): Avoid build_fold_addr_expr
and build_ref_for_offset.
2020-03-19 Richard Biener <rguenther@suse.de>
PR middle-end/94216 PR middle-end/94216
* fold-const.c (fold_binary_loc): Avoid using * fold-const.c (fold_binary_loc): Avoid using
build_fold_addr_expr when we really want an ADDR_EXPR. build_fold_addr_expr when we really want an ADDR_EXPR.
......
...@@ -1352,11 +1352,13 @@ ipa_get_jf_ancestor_result (struct ipa_jump_func *jfunc, tree input) ...@@ -1352,11 +1352,13 @@ ipa_get_jf_ancestor_result (struct ipa_jump_func *jfunc, tree input)
gcc_checking_assert (TREE_CODE (input) != TREE_BINFO); gcc_checking_assert (TREE_CODE (input) != TREE_BINFO);
if (TREE_CODE (input) == ADDR_EXPR) if (TREE_CODE (input) == ADDR_EXPR)
{ {
tree t = TREE_OPERAND (input, 0); gcc_checking_assert (is_gimple_ip_invariant_address (input));
t = build_ref_for_offset (EXPR_LOCATION (t), t, poly_int64 off = ipa_get_jf_ancestor_offset (jfunc);
ipa_get_jf_ancestor_offset (jfunc), false, if (known_eq (off, 0))
ptr_type_node, NULL, false); return input;
return build_fold_addr_expr (t); return build1 (ADDR_EXPR, TREE_TYPE (input),
fold_build2 (MEM_REF, TREE_TYPE (TREE_TYPE (input)),
input, build_int_cst (ptr_type_node, off)));
} }
else else
return NULL_TREE; return NULL_TREE;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment