diff options
author | Jan Hubicka <jh@suse.cz> | 2020-10-14 16:01:39 +0200 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2020-10-14 16:01:39 +0200 |
commit | 4d90edb96e199e2e73ba71de5ab3b7c1c0aad6d0 (patch) | |
tree | 0a6e42042ff91a4b4b50b58f59ee66d71d9cada5 /gcc/ipa-modref.c | |
parent | 4aa9742252ea419947fe32ff64c7546c92286b96 (diff) | |
download | gcc-4d90edb96e199e2e73ba71de5ab3b7c1c0aad6d0.zip gcc-4d90edb96e199e2e73ba71de5ab3b7c1c0aad6d0.tar.gz gcc-4d90edb96e199e2e73ba71de5ab3b7c1c0aad6d0.tar.bz2 |
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.
Diffstat (limited to 'gcc/ipa-modref.c')
-rw-r--r-- | gcc/ipa-modref.c | 15 |
1 files changed, 12 insertions, 3 deletions
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<modref_parm_map> *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) |