https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88933
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |hubicka at gcc dot gnu.org, | |mjambor at suse dot cz --- Comment #5 from Martin Liška <marxin at gcc dot gnu.org> --- Reduced test-case for x86_64: $ !$omp parallel !$omp single call a !$omp end single !$omp end parallel contains subroutine b (c, d, e, f, g, h, i, j, k, m) character (*) c character d integer, dimension (m) :: e integer, dimension (m) :: f character g character h real, dimension (:, :, :) :: i double precision, dimension (:, :, :) :: j integer, dimension (:, :, :) :: k integer, dimension (m) :: l !$omp task firstprivate (k) firstprivate (l) !$omp end task c = '' end subroutine a character c character d integer, dimension (7) :: e integer, dimension (7) :: f character g character h real, dimension (5, 6, 7) :: i double precision, dimension (6, 6, 7) :: j integer, dimension (5, 7, 6) :: k call b (c, d, e, f, g, h, i, j, k, 7) end end $ ./xgcc -B. ~/Programming/testcases/god.f90 -c -std=legacy -O1 -fexceptions -fipa-cp -fnon-call-exceptions -fopenmp -fno-inline-functions-called-once b.2041.constprop.1/15 (b.constprop) @0x7ffff6c65e60 Type: function definition analyzed Visibility: artificial References: Referring: Availability: local First run: 0 Function flags: count: 1073741826 (estimated locally) body local Called by: a/0 (1073741825 (estimated locally),1.00 per call) (can throw external) Calls: __builtin_memset/12 (445388109 (estimated locally),0.41 per call) __builtin_free/14 (0,0.00 per call) during IPA pass: inline /home/marxin/Programming/testcases/god.f90:7:0: internal compiler error: verify_cgraph_node failed 0xaa864f cgraph_node::verify_node() ../../gcc/cgraph.c:3555 0xa95d17 symtab_node::verify() ../../gcc/symtab.c:1204 0x1110c0f optimize_inline_calls(tree_node*) ../../gcc/tree-inline.c:5086 0x1a2e4ee inline_transform(cgraph_node*) ../../gcc/ipa-inline-transform.c:682 0xf2aba1 execute_one_ipa_transform_pass ../../gcc/passes.c:2239 0xf2ad2b execute_all_ipa_transforms() ../../gcc/passes.c:2281 0xab5abe cgraph_node::expand() ../../gcc/cgraphunit.c:2132 0xab612d expand_all_functions ../../gcc/cgraphunit.c:2275 0xab6c92 symbol_table::compile() ../../gcc/cgraphunit.c:2624 0xab6f06 symbol_table::finalize_compilation_unit() ../../gcc/cgraphunit.c:2717 We first create a constprop, so that following edge is cloned: clonning: b/2->__builtin_free/14 # .MEM_19 = VDEF <.MEM_4(D)> __builtin_memset (c_18(D), 32, _c.14_1); and then after materialization we have following CFG: <bb 13> [local count: 1073741825]: if (1 != 0) goto <bb 14>; [41.48%] else goto <bb 15>; [58.52%] <bb 14> [local count: 445388109]: __builtin_memset (c_14(D), 32, _c.14_1); then the if condition is folded away and we end up with: <bb 3> [local count: 1073741825]: _5 = 5; _6 = 1; _7 = 5; _8 = 7; _9 = 1; _10 = 35; _11 = 6; _12 = 1; _13 = 7; __builtin_memset (c_14(D), 32, _c.14_1); return; and it's logical that count promotes from 445388109 -> 1073741825. Is it something known? I consider it's related to fact the call is a call to built-in. Honza, Martin, any ideas?