From 4d90edb96e199e2e73ba71de5ab3b7c1c0aad6d0 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Wed, 14 Oct 2020 16:01:39 +0200 Subject: Handle POINTER_PLUS_EXPR in jump functions in ipa-modref. gcc/ChangeLog: * ipa-modref.c (compute_parm_map): Handle POINTER_PLUS_EXPR in PASSTHROUGH. gcc/testsuite/ChangeLog: * gcc.dg/ipa/modref-1.c: New test. * gcc.dg/tree-ssa/modref-4.c: New test. --- gcc/ipa-modref.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'gcc/ipa-modref.c') diff --git a/gcc/ipa-modref.c b/gcc/ipa-modref.c index a6dfe1f..8e6a876 100644 --- a/gcc/ipa-modref.c +++ b/gcc/ipa-modref.c @@ -1682,9 +1682,18 @@ compute_parm_map (cgraph_edge *callee_edge, vec *parm_map) { (*parm_map)[i].parm_index = ipa_get_jf_pass_through_formal_id (jf); - (*parm_map)[i].parm_offset_known - = ipa_get_jf_pass_through_operation (jf) == NOP_EXPR; - (*parm_map)[i].parm_offset = 0; + if (ipa_get_jf_pass_through_operation (jf) == NOP_EXPR) + { + (*parm_map)[i].parm_offset_known = true; + (*parm_map)[i].parm_offset = 0; + } + else if (ipa_get_jf_pass_through_operation (jf) + == POINTER_PLUS_EXPR + && ptrdiff_tree_p (ipa_get_jf_pass_through_operand (jf), + &(*parm_map)[i].parm_offset)) + (*parm_map)[i].parm_offset_known = true; + else + (*parm_map)[i].parm_offset_known = false; continue; } if (jf && jf->type == IPA_JF_ANCESTOR) -- cgit v1.1