[PATCH] Fix the inconsident devirtualization typo and consolidate the related code

2014-06-25 Thread Martin Jambor
Hi,

the patch below fixes the (I guess now almost infamous) typo that
prints Type inconsident devirtualization to the dump.  This dumping
has been copied and pasted to a few places so I made all of them just
use the ipa_impossible_devirt_target function to do that.  The code
can be consolidated quite bit more but I believe this patch is small
enough to even be considered for the 4.9 branch, so I stopped there
now.

Bootstrapped and tested on trunk on x86_64-linux, I am running the
bootstrap on the 4.9 branch now.  OK for both or at least for the
trunk?

Thanks,

Martin


2014-06-25  Martin Jambor  mjam...@suse.cz

* ipa-prop.c (ipa_impossible_devirt_target): No longer static,
renamed to ipa_impossible_devirt_target.  Fix typo.
* ipa-prop.h (ipa_impossible_devirt_target): Declare.
* ipa-cp.c (ipa_get_indirect_edge_target_1): Use
ipa_impossible_devirt_target.

testsuite/
* g++.dg/ipa/pr60600.C: Fix typo.
* g++.dg/ipa/devirt-25.C: Likewise.
* g++.dg/ipa/pr61540.C: Likewise.

Index: src/gcc/ipa-cp.c
===
--- src.orig/gcc/ipa-cp.c
+++ src/gcc/ipa-cp.c
@@ -1587,15 +1587,7 @@ ipa_get_indirect_edge_target_1 (struct c
DECL_FUNCTION_CODE (target) == BUILT_IN_UNREACHABLE)
  || !possible_polymorphic_call_target_p
   (ie, cgraph_get_node (target)))
-   {
- if (dump_file)
-   fprintf (dump_file,
-Type inconsident devirtualization: %s/%i-%s\n,
-ie-caller-name (), ie-caller-order,
-IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
- target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
- cgraph_get_create_node (target);
-   }
+   target = ipa_impossible_devirt_target (ie, target);
  return target;
}
}
@@ -1629,7 +1621,7 @@ ipa_get_indirect_edge_target_1 (struct c
   if (targets.length () == 1)
target = targets[0]-decl;
   else
-   target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
+   target = ipa_impossible_devirt_target (ie, NULL_TREE);
 }
   else
 {
@@ -1643,15 +1635,7 @@ ipa_get_indirect_edge_target_1 (struct c
 
   if (target  !possible_polymorphic_call_target_p (ie,
 cgraph_get_node (target)))
-{
-  if (dump_file)
-   fprintf (dump_file,
-Type inconsident devirtualization: %s/%i-%s\n,
-ie-caller-name (), ie-caller-order,
-IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
-  target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
-  cgraph_get_create_node (target);
-}
+target = ipa_impossible_devirt_target (ie, target);
 
   return target;
 }
Index: src/gcc/ipa-prop.c
===
--- src.orig/gcc/ipa-prop.c
+++ src/gcc/ipa-prop.c
@@ -2915,14 +2915,14 @@ try_make_edge_direct_simple_call (struct
 /* Return the target to be used in cases of impossible devirtualization.  IE
and target (the latter can be NULL) are dumped when dumping is enabled.  */
 
-static tree
-impossible_devirt_target (struct cgraph_edge *ie, tree target)
+tree
+ipa_impossible_devirt_target (struct cgraph_edge *ie, tree target)
 {
   if (dump_file)
 {
   if (target)
fprintf (dump_file,
-Type inconsident devirtualization: %s/%i-%s\n,
+Type inconsistent devirtualization: %s/%i-%s\n,
 ie-caller-name (), ie-caller-order,
 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
   else
@@ -2969,7 +2969,7 @@ try_make_edge_direct_virtual_call (struc
DECL_FUNCTION_CODE (target) == BUILT_IN_UNREACHABLE)
  || !possible_polymorphic_call_target_p
   (ie, cgraph_get_node (target)))
-   target = impossible_devirt_target (ie, target);
+   target = ipa_impossible_devirt_target (ie, target);
  return ipa_make_edge_direct_to_target (ie, target);
}
}
@@ -2999,7 +2999,7 @@ try_make_edge_direct_virtual_call (struc
   if (targets.length () == 1)
target = targets[0]-decl;
   else
-   target = impossible_devirt_target (ie, NULL_TREE);
+   target = ipa_impossible_devirt_target (ie, NULL_TREE);
 }
   else
 {
@@ -3015,7 +3015,7 @@ try_make_edge_direct_virtual_call (struc
   if (target)
 {
   if (!possible_polymorphic_call_target_p (ie, cgraph_get_node (target)))
-   target = impossible_devirt_target (ie, target);
+   target = ipa_impossible_devirt_target (ie, target);
   return ipa_make_edge_direct_to_target (ie, target);
 }
   else
Index: src/gcc/ipa-prop.h

Re: [PATCH] Fix the inconsident devirtualization typo and consolidate the related code

2014-06-25 Thread Jan Hubicka
 Hi,
 
 the patch below fixes the (I guess now almost infamous) typo that
 prints Type inconsident devirtualization to the dump.  This dumping
 has been copied and pasted to a few places so I made all of them just
 use the ipa_impossible_devirt_target function to do that.  The code
 can be consolidated quite bit more but I believe this patch is small
 enough to even be considered for the 4.9 branch, so I stopped there
 now.
 
 Bootstrapped and tested on trunk on x86_64-linux, I am running the
 bootstrap on the 4.9 branch now.  OK for both or at least for the
 trunk?

Obviously OK :)
thanks!
 
 Thanks,
 
 Martin
 
 
 2014-06-25  Martin Jambor  mjam...@suse.cz
 
   * ipa-prop.c (ipa_impossible_devirt_target): No longer static,
   renamed to ipa_impossible_devirt_target.  Fix typo.
   * ipa-prop.h (ipa_impossible_devirt_target): Declare.
   * ipa-cp.c (ipa_get_indirect_edge_target_1): Use
   ipa_impossible_devirt_target.
 
 testsuite/
   * g++.dg/ipa/pr60600.C: Fix typo.
   * g++.dg/ipa/devirt-25.C: Likewise.
   * g++.dg/ipa/pr61540.C: Likewise.
 
 Index: src/gcc/ipa-cp.c
 ===
 --- src.orig/gcc/ipa-cp.c
 +++ src/gcc/ipa-cp.c
 @@ -1587,15 +1587,7 @@ ipa_get_indirect_edge_target_1 (struct c
   DECL_FUNCTION_CODE (target) == BUILT_IN_UNREACHABLE)
 || !possible_polymorphic_call_target_p
  (ie, cgraph_get_node (target)))
 - {
 -   if (dump_file)
 - fprintf (dump_file,
 -  Type inconsident devirtualization: %s/%i-%s\n,
 -  ie-caller-name (), ie-caller-order,
 -  IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
 -   target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
 -   cgraph_get_create_node (target);
 - }
 + target = ipa_impossible_devirt_target (ie, target);
 return target;
   }
   }
 @@ -1629,7 +1621,7 @@ ipa_get_indirect_edge_target_1 (struct c
if (targets.length () == 1)
   target = targets[0]-decl;
else
 - target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
 + target = ipa_impossible_devirt_target (ie, NULL_TREE);
  }
else
  {
 @@ -1643,15 +1635,7 @@ ipa_get_indirect_edge_target_1 (struct c
  
if (target  !possible_polymorphic_call_target_p (ie,
cgraph_get_node (target)))
 -{
 -  if (dump_file)
 - fprintf (dump_file,
 -  Type inconsident devirtualization: %s/%i-%s\n,
 -  ie-caller-name (), ie-caller-order,
 -  IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
 -  target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
 -  cgraph_get_create_node (target);
 -}
 +target = ipa_impossible_devirt_target (ie, target);
  
return target;
  }
 Index: src/gcc/ipa-prop.c
 ===
 --- src.orig/gcc/ipa-prop.c
 +++ src/gcc/ipa-prop.c
 @@ -2915,14 +2915,14 @@ try_make_edge_direct_simple_call (struct
  /* Return the target to be used in cases of impossible devirtualization.  IE
 and target (the latter can be NULL) are dumped when dumping is enabled.  
 */
  
 -static tree
 -impossible_devirt_target (struct cgraph_edge *ie, tree target)
 +tree
 +ipa_impossible_devirt_target (struct cgraph_edge *ie, tree target)
  {
if (dump_file)
  {
if (target)
   fprintf (dump_file,
 -  Type inconsident devirtualization: %s/%i-%s\n,
 +  Type inconsistent devirtualization: %s/%i-%s\n,
ie-caller-name (), ie-caller-order,
IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
else
 @@ -2969,7 +2969,7 @@ try_make_edge_direct_virtual_call (struc
   DECL_FUNCTION_CODE (target) == BUILT_IN_UNREACHABLE)
 || !possible_polymorphic_call_target_p
  (ie, cgraph_get_node (target)))
 - target = impossible_devirt_target (ie, target);
 + target = ipa_impossible_devirt_target (ie, target);
 return ipa_make_edge_direct_to_target (ie, target);
   }
   }
 @@ -2999,7 +2999,7 @@ try_make_edge_direct_virtual_call (struc
if (targets.length () == 1)
   target = targets[0]-decl;
else
 - target = impossible_devirt_target (ie, NULL_TREE);
 + target = ipa_impossible_devirt_target (ie, NULL_TREE);
  }
else
  {
 @@ -3015,7 +3015,7 @@ try_make_edge_direct_virtual_call (struc
if (target)
  {
if (!possible_polymorphic_call_target_p (ie, cgraph_get_node (target)))
 - target = impossible_devirt_target (ie, target);
 + target = ipa_impossible_devirt_target (ie, target);
return ipa_make_edge_direct_to_target (ie, target);
  }
else
 Index: src/gcc/ipa-prop.h