aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa-inline-analysis.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2012-10-29 00:59:31 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2012-10-28 23:59:31 +0000
commita7dbc1cbe52e7aea67d75d8ed26a67c18a3780ed (patch)
tree5b3e66ce7c0bea0c2a3a738891cf18d64021e498 /gcc/ipa-inline-analysis.c
parent1d5d667b3bbbdd78d86bbe3c7a0282d9ed5802c5 (diff)
downloadgcc-a7dbc1cbe52e7aea67d75d8ed26a67c18a3780ed.zip
gcc-a7dbc1cbe52e7aea67d75d8ed26a67c18a3780ed.tar.gz
gcc-a7dbc1cbe52e7aea67d75d8ed26a67c18a3780ed.tar.bz2
ipa-inline-analysis.c (eliminated_by_inlining_prob): Handle &this->field expressions.
* ipa-inline-analysis.c (eliminated_by_inlining_prob): Handle &this->field expressions. From-SVN: r192899
Diffstat (limited to 'gcc/ipa-inline-analysis.c')
-rw-r--r--gcc/ipa-inline-analysis.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c
index 3b56e7a..a8d16a8 100644
--- a/gcc/ipa-inline-analysis.c
+++ b/gcc/ipa-inline-analysis.c
@@ -1567,6 +1567,7 @@ eliminated_by_inlining_prob (gimple stmt)
if (gimple_assign_rhs_code (stmt) == CONVERT_EXPR
|| gimple_assign_rhs_code (stmt) == NOP_EXPR
|| gimple_assign_rhs_code (stmt) == VIEW_CONVERT_EXPR
+ || gimple_assign_rhs_code (stmt) == ADDR_EXPR
|| gimple_assign_rhs_class (stmt) == GIMPLE_SINGLE_RHS)
{
tree rhs = gimple_assign_rhs1 (stmt);
@@ -1584,6 +1585,20 @@ eliminated_by_inlining_prob (gimple stmt)
/* Reads of parameter are expected to be free. */
if (unmodified_parm (stmt, inner_rhs))
rhs_free = true;
+ /* Match expressions of form &this->field. Those will most likely
+ combine with something upstream after inlining. */
+ else if (TREE_CODE (inner_rhs) == ADDR_EXPR)
+ {
+ tree op = get_base_address (TREE_OPERAND (inner_rhs, 0));
+ if (TREE_CODE (op) == PARM_DECL)
+ rhs_free = true;
+ else if (TREE_CODE (op) == MEM_REF)
+ {
+ op = get_base_address (TREE_OPERAND (op, 0));
+ if (unmodified_parm (stmt, op))
+ rhs_free = true;
+ }
+ }
/* When parameter is not SSA register because its address is taken
and it is just copied into one, the statement will be completely