Using head from today to build a telecom stack on the ARM port. It spends nearly 100% of time in tree call clobbering for a particularly nasty testcase which I am attaching.
Almost every time I do a Ctrl-C in gdb I hit myself in the function set_initial_properties with a similar backtrace. . #0 0x0847f0da in var_ann (t=0xb6f433c8) at ../../gnu/gcc/tree-flow-inline.h:204 #1 0x0847eee5 in mark_call_clobbered (var=0xb6f433c8, escape_type=256) at ../../gnu/gcc/tree-flow-inline.h:878 #2 0x08480ce6 in set_initial_properties (ai=0x8a8b280) at ../../gnu/gcc/tree-ssa-alias.c:565 #3 0x08481198 in compute_call_clobbered (ai=0x8a8b280) at ../../gnu/gcc/tree-ssa-alias.c:619 in the hunk if (TREE_CODE (alias) == STRUCT_FIELD_TAG) { subvar_t svars; svars = get_subvars_for_var (SFT_PARENT_VAR (alias)); for (; svars; svars = svars->next) if (!unmodifiable_var_p (alias)) mark_call_clobbered (svars->var, pi->escape_mask); } else if (!unmodifiable_var_p (alias)) mark_call_clobbered (alias, pi->escape_mask); I tried by reverting the patch from r127629 but that didn't help straight off. Doing a binary search I got to the versions r127831-37 : r127831 is the last revision of the tree that builds this testcase without any compile time regressions. r127836 is the first revision of the tree where this goes awry with a huge compile time regression . versions (r127832-35) do not build for undeclared references to forbidden_auto_inc_dec_classes in regclass.c. I haven't yet seen what's gone into these commits to make any informed decisions. This is the statistic with the garbage collection : 0.43 ( 0%) usr 0.03 ( 0%) sys 4.51 ( 0%) wall 0 kB ( 0%) ggc callgraph construction: 0.01 ( 0%) usr 0.00 ( 0%) sys 0.05 ( 0%) wall 69 kB ( 0%) ggc callgraph optimization: 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 51 kB ( 0%) ggc ipa type escape : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 0 kB ( 0%) ggc cfg cleanup : 0.02 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 2 kB ( 0%) ggc CFG verifier : 0.03 ( 0%) usr 0.00 ( 0%) sys 0.04 ( 0%) wall 0 kB ( 0%) ggc trivially dead code : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 0 kB ( 0%) ggc df live regs : 0.02 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 0 kB ( 0%) ggc df live&initialized regs: 0.02 ( 0%) usr 0.00 ( 0%) sys 0.02 ( 0%) wall 0 kB ( 0%) ggc df use-def / def-use chains: 0.00 ( 0%) usr 0.01 ( 0%) sys 0.01 ( 0%) wall 0 kB ( 0%) ggc df reg dead/unused notes: 0.02 ( 0%) usr 0.00 ( 0%) sys 0.03 ( 0%) wall 19 kB ( 0%) ggc register information : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall 0 kB ( 0%) ggc alias analysis : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.02 ( 0%) wall 88 kB ( 0%) ggc preprocessing : 0.13 ( 0%) usr 0.04 ( 0%) sys 0.19 ( 0%) wall 1636 kB ( 4%) ggc lexical analysis : 0.05 ( 0%) usr 0.10 ( 1%) sys 0.09 ( 0%) wall 0 kB ( 0%) ggc parser : 0.22 ( 0%) usr 0.09 ( 1%) sys 0.39 ( 0%) wall 7237 kB (19%) ggc inline heuristics : 0.04 ( 0%) usr 0.00 ( 0%) sys 0.18 ( 0%) wall 325 kB ( 1%) ggc integration : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall 91 kB ( 0%) ggc tree CFG cleanup : 0.02 ( 0%) usr 0.00 ( 0%) sys 0.06 ( 0%) wall 3 kB ( 0%) ggc tree VRP : 0.04 ( 0%) usr 0.00 ( 0%) sys 1.11 ( 0%) wall 338 kB ( 1%) ggc tree copy propagation : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.07 ( 0%) wall 20 kB ( 0%) ggc tree PTA : 0.06 ( 0%) usr 0.00 ( 0%) sys 0.11 ( 0%) wall 123 kB ( 0%) ggc tree alias analysis : 0.53 ( 0%) usr 0.00 ( 0%) sys 1.27 ( 0%) wall 23 kB ( 0%) ggc tree call clobbering :3604.47 (100%) usr 12.38 (95%) sys4166.01 (99%) wall 0 kB ( 0%) ggc tree flow sensitive alias: 0.01 ( 0%) usr 0.00 ( 0%) sys 0.04 ( 0%) wall 150 kB ( 0%) ggc tree flow insensitive alias: 0.54 ( 0%) usr 0.00 ( 0%) sys 0.73 ( 0%) wall 0 kB ( 0%) ggc tree memory partitioning: 1.91 ( 0%) usr 0.04 ( 0%) sys 3.32 ( 0%) wall 2 kB ( 0%) ggc tree SSA rewrite : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.27 ( 0%) wall 338 kB ( 1%) ggc tree SSA incremental : 0.21 ( 0%) usr 0.00 ( 0%) sys 0.30 ( 0%) wall 17 kB ( 0%) ggc tree operand scan : 1.96 ( 0%) usr 0.04 ( 0%) sys 4.16 ( 0%) wall 507 kB ( 1%) ggc dominator optimization: 0.58 ( 0%) usr 0.00 ( 0%) sys 0.78 ( 0%) wall 234 kB ( 1%) ggc tree SRA : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.12 ( 0%) wall 1 kB ( 0%) ggc tree CCP : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.04 ( 0%) wall 17 kB ( 0%) ggc tree reassociation : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.17 ( 0%) wall 11 kB ( 0%) ggc tree PRE : 0.15 ( 0%) usr 0.00 ( 0%) sys 0.23 ( 0%) wall 192 kB ( 1%) ggc tree FRE : 0.04 ( 0%) usr 0.00 ( 0%) sys 0.42 ( 0%) wall 113 kB ( 0%) ggc tree code sinking : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.18 ( 0%) wall 5 kB ( 0%) ggc tree forward propagate: 0.00 ( 0%) usr 0.00 ( 0%) sys 0.07 ( 0%) wall 40 kB ( 0%) ggc tree conservative DCE : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 0 kB ( 0%) ggc tree loop bounds : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 4 kB ( 0%) ggc tree iv optimization : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 38 kB ( 0%) ggc tree loop init : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.08 ( 0%) wall 12 kB ( 0%) ggc tree SSA to normal : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.52 ( 0%) wall 31 kB ( 0%) ggc tree SSA verifier : 4.07 ( 0%) usr 0.27 ( 2%) sys 5.43 ( 0%) wall 99 kB ( 0%) ggc tree STMT verifier : 0.18 ( 0%) usr 0.00 ( 0%) sys 0.22 ( 0%) wall 0 kB ( 0%) ggc dominance computation : 0.02 ( 0%) usr 0.00 ( 0%) sys 0.02 ( 0%) wall 0 kB ( 0%) ggc expand : 0.96 ( 0%) usr 0.06 ( 0%) sys 9.88 ( 0%) wall 25260 kB (66%) ggc forward prop : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 32 kB ( 0%) ggc CSE : 0.06 ( 0%) usr 0.01 ( 0%) sys 0.46 ( 0%) wall 18 kB ( 0%) ggc dead code elimination : 0.00 ( 0%) usr 0.01 ( 0%) sys 0.01 ( 0%) wall 0 kB ( 0%) ggc dead store elim1 : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.10 ( 0%) wall 17 kB ( 0%) ggc dead store elim2 : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 24 kB ( 0%) ggc loop analysis : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 15 kB ( 0%) ggc CPROP 1 : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall 15 kB ( 0%) ggc PRE : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.14 ( 0%) wall 6 kB ( 0%) ggc CPROP 2 : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.11 ( 0%) wall 15 kB ( 0%) ggc bypass jumps : 0.02 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall 14 kB ( 0%) ggc auto inc dec : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 7 kB ( 0%) ggc CSE 2 : 0.04 ( 0%) usr 0.00 ( 0%) sys 0.07 ( 0%) wall 8 kB ( 0%) ggc combiner : 0.02 ( 0%) usr 0.00 ( 0%) sys 0.38 ( 0%) wall 37 kB ( 0%) ggc regmove : 0.03 ( 0%) usr 0.00 ( 0%) sys 0.04 ( 0%) wall 2 kB ( 0%) ggc scheduling : 0.04 ( 0%) usr 0.00 ( 0%) sys 0.24 ( 0%) wall 39 kB ( 0%) ggc local alloc : 0.06 ( 0%) usr 0.00 ( 0%) sys 0.06 ( 0%) wall 98 kB ( 0%) ggc global alloc : 0.04 ( 0%) usr 0.00 ( 0%) sys 0.26 ( 0%) wall 35 kB ( 0%) ggc reload CSE regs : 0.03 ( 0%) usr 0.00 ( 0%) sys 0.13 ( 0%) wall 52 kB ( 0%) ggc thread pro- & epilogue: 0.01 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall 34 kB ( 0%) ggc peephole 2 : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.02 ( 0%) wall 0 kB ( 0%) ggc rename registers : 0.03 ( 0%) usr 0.00 ( 0%) sys 0.06 ( 0%) wall 0 kB ( 0%) ggc scheduling 2 : 0.07 ( 0%) usr 0.00 ( 0%) sys 0.10 ( 0%) wall 7 kB ( 0%) ggc machine dep reorg : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.02 ( 0%) wall 4 kB ( 0%) ggc final : 0.03 ( 0%) usr 0.00 ( 0%) sys 0.74 ( 0%) wall 0 kB ( 0%) ggc symout : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.22 ( 0%) wall 0 kB ( 0%) ggc TOTAL :3617.35 13.09 4205.33 38504 kB -- Summary: tree struct aliasing goes into a loop marking call clobbers. Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: ramana dot radhakrishnan at celunite dot com GCC build triplet: i686-linux-gnu GCC host triplet: i686-linux-gnu GCC target triplet: arm-none-eabi http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33508