[PATCH] Fix the inconsident devirtualization typo and consolidate the related code
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
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