summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>2016-05-18 16:41:19 +0000
committerjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>2016-05-18 16:41:19 +0000
commitab4891c2b5851a2921e10eadfa7c47da432e6757 (patch)
treeea0c61cf669bb09530b2c397848a1956446177e7 /gcc
parent665ff45b7fbf613b0b592f160aa15f3956872a7f (diff)
downloadgcc-ab4891c2b5851a2921e10eadfa7c47da432e6757.tar.gz
Const parameters are always unmodified
2016-05-18 Martin Jambor <mjambor@suse.cz> PR ipa/69708 * ipa-prop.c (parm_preserved_before_stmt_p): Return true for loads from TREE_READONLY parameters. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@236417 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/ipa-prop.c5
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3a8e9a76373..7924d1f98c9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,6 +1,12 @@
2016-05-18 Martin Jambor <mjambor@suse.cz>
PR ipa/69708
+ * ipa-prop.c (parm_preserved_before_stmt_p): Return true for loads
+ from TREE_READONLY parameters.
+
+2016-05-18 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/69708
* cgraph.h (cgraph_indirect_call_info): New field
guaranteed_unmodified.
* ipa-cp.c (ipa_get_indirect_edge_target_1): Also pass parameter value
diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
index 785f2f43ab7..117a0255b1b 100644
--- a/gcc/ipa-prop.c
+++ b/gcc/ipa-prop.c
@@ -803,6 +803,11 @@ parm_preserved_before_stmt_p (struct ipa_func_body_info *fbi, int index,
bool modified = false;
ao_ref refd;
+ tree base = get_base_address (parm_load);
+ gcc_assert (TREE_CODE (base) == PARM_DECL);
+ if (TREE_READONLY (base))
+ return true;
+
/* FIXME: FBI can be NULL if we are being called from outside
ipa_node_analysis or ipcp_transform_function, which currently happens
during inlining analysis. It would be great to extend fbi's lifetime and