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

Martin Jambor mjambor@suse.cz
Wed Jun 25 22:12:00 GMT 2014


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  <mjambor@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
===================================================================
--- src.orig/gcc/ipa-prop.h
+++ src/gcc/ipa-prop.h
@@ -586,6 +586,7 @@ tree ipa_get_indirect_edge_target (struc
 struct cgraph_edge *ipa_make_edge_direct_to_target (struct cgraph_edge *, tree);
 tree ipa_binfo_from_known_type_jfunc (struct ipa_jump_func *);
 tree ipa_intraprocedural_devirtualization (gimple);
+tree ipa_impossible_devirt_target (struct cgraph_edge *, tree);
 
 /* Functions related to both.  */
 void ipa_analyze_node (struct cgraph_node *);
Index: src/gcc/testsuite/g++.dg/ipa/devirt-25.C
===================================================================
--- src.orig/gcc/testsuite/g++.dg/ipa/devirt-25.C
+++ src/gcc/testsuite/g++.dg/ipa/devirt-25.C
@@ -22,5 +22,5 @@ void dpr_run(ebs_Object& objectA) {
   dpr_Job jobL;
   dpr_run(jobL);
 }
-/* { dg-final { scan-ipa-dump "Type inconsident devirtualization" "cp"  } } */
+/* { dg-final { scan-ipa-dump "Type inconsistent devirtualization" "cp"  } } */
 /* { dg-final { cleanup-ipa-dump "cp" } } */
Index: src/gcc/testsuite/g++.dg/ipa/pr60600.C
===================================================================
--- src.orig/gcc/testsuite/g++.dg/ipa/pr60600.C
+++ src/gcc/testsuite/g++.dg/ipa/pr60600.C
@@ -30,5 +30,5 @@ void test(top& t)
     test(d);
 }
 
-/* { dg-final { scan-ipa-dump "Type inconsident devirtualization" "cp" } } */
+/* { dg-final { scan-ipa-dump "Type inconsistent devirtualization" "cp" } } */
 /* { dg-final { cleanup-ipa-dump "cp" } } */
Index: src/gcc/testsuite/g++.dg/ipa/pr61540.C
===================================================================
--- src.orig/gcc/testsuite/g++.dg/ipa/pr61540.C
+++ src/gcc/testsuite/g++.dg/ipa/pr61540.C
@@ -37,5 +37,5 @@ int main (int argc, char **argv)
   return 0;
 }
 
-/* { dg-final { scan-ipa-dump "Type inconsident devirtualization" "cp" } } */
+/* { dg-final { scan-ipa-dump "Type inconsistent devirtualization" "cp" } } */
 /* { dg-final { cleanup-ipa-dump "cp" } } */



More information about the Gcc-patches mailing list