[PATCH 1/4] Remove usesess and wrong code from ipa_analyze_virtual_call_uses

2011-04-15 Thread Martin Jambor
Hi,

ipa_analyze_virtual_call_uses contains code that was meant to deal
with situation where OBJ_TYPE_REF_OBJECT is a (number of)
COMPONENT_REFs on top of a dereferenced default definition SSA_NAME of
a parameter.

The code is useless because that never happens in the IL, if an
ancestor object of a parameter is being used for a virtual call, the
object in the expression is always an SSA_NAME which is assigned the
proper value in a previous statement.

Moreover, if it ever triggered, it might lead to wrong code because in
cases like this it is necessary also to store the offset within the
parameter into the indirect call graph edge information (like we do in
indirect inlining).

The above is done in the next patch in the series.  I've split this
part from it because I would like to commit it also to the 4.6 branch.
I have bootstrapped and tested this on x86-64-linux without any
problems.  OK for trunk and the 4.6 branch?

Thanks,

Martin


2011-04-08  Martin Jambor  mjam...@suse.cz

* ipa-prop.c (ipa_analyze_virtual_call_uses): Remove handling
of ADR_EXPRs.


Index: src/gcc/ipa-prop.c
===
--- src.orig/gcc/ipa-prop.c
+++ src/gcc/ipa-prop.c
@@ -1383,18 +1383,6 @@ ipa_analyze_virtual_call_uses (struct cg
   if (!flag_devirtualize)
 return;
 
-  if (TREE_CODE (obj) == ADDR_EXPR)
-{
-  do
-   {
- obj = TREE_OPERAND (obj, 0);
-   }
-  while (TREE_CODE (obj) == COMPONENT_REF);
-  if (TREE_CODE (obj) != MEM_REF)
-   return;
-  obj = TREE_OPERAND (obj, 0);
-}
-
   if (TREE_CODE (obj) != SSA_NAME
   || !SSA_NAME_IS_DEFAULT_DEF (obj))
 return;



Re: [PATCH 1/4] Remove usesess and wrong code from ipa_analyze_virtual_call_uses

2011-04-15 Thread Richard Guenther
On Fri, 15 Apr 2011, Martin Jambor wrote:

 Hi,
 
 ipa_analyze_virtual_call_uses contains code that was meant to deal
 with situation where OBJ_TYPE_REF_OBJECT is a (number of)
 COMPONENT_REFs on top of a dereferenced default definition SSA_NAME of
 a parameter.
 
 The code is useless because that never happens in the IL, if an
 ancestor object of a parameter is being used for a virtual call, the
 object in the expression is always an SSA_NAME which is assigned the
 proper value in a previous statement.
 
 Moreover, if it ever triggered, it might lead to wrong code because in
 cases like this it is necessary also to store the offset within the
 parameter into the indirect call graph edge information (like we do in
 indirect inlining).
 
 The above is done in the next patch in the series.  I've split this
 part from it because I would like to commit it also to the 4.6 branch.
 I have bootstrapped and tested this on x86-64-linux without any
 problems.  OK for trunk and the 4.6 branch?

Ok for both.

Thanks,
Richard.

 Thanks,
 
 Martin
 
 
 2011-04-08  Martin Jambor  mjam...@suse.cz
 
   * ipa-prop.c (ipa_analyze_virtual_call_uses): Remove handling
   of ADR_EXPRs.
 
 
 Index: src/gcc/ipa-prop.c
 ===
 --- src.orig/gcc/ipa-prop.c
 +++ src/gcc/ipa-prop.c
 @@ -1383,18 +1383,6 @@ ipa_analyze_virtual_call_uses (struct cg
if (!flag_devirtualize)
  return;
  
 -  if (TREE_CODE (obj) == ADDR_EXPR)
 -{
 -  do
 - {
 -   obj = TREE_OPERAND (obj, 0);
 - }
 -  while (TREE_CODE (obj) == COMPONENT_REF);
 -  if (TREE_CODE (obj) != MEM_REF)
 - return;
 -  obj = TREE_OPERAND (obj, 0);
 -}
 -
if (TREE_CODE (obj) != SSA_NAME
|| !SSA_NAME_IS_DEFAULT_DEF (obj))
  return;
 
 

-- 
Richard Guenther rguent...@suse.de
Novell / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 - GF: Markus Rex