http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60291
--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> --- With the redundant set_mem_addr_space removed -Og now takes expand : 19.21 (31%) usr 0.60 ( 8%) sys 20.06 (29%) wall 165633 kB ( 8%) ggc TOTAL : 61.60 7.58 69.16 2047648 kB collisions are like MEM[(StgWord *)_5 + -64B] != MEM[(StgWord *)_5 + -64B] MEM[(StgWord *)_5 + -64B] != MEM[(StgWord *)_5 + -64B] MEM[(StgWord *)_5 + -64B] != MEM[(StgWord *)_5 + -64B] MEM[(StgWord *)_20 + 24B] != MEM[(StgWord *)_5 + -64B] investigating ... (clearly not having a recorded hash to compare that quickly with the hashtab collision handling makes things worse here). Ouch. This mem-attr hashtable is _global_! The above _5 are different SSA name objects (from different functions). The hash is global because we also have DECL_RTL for global variables, so we can't really clear it (well, we could - we'd just lose mem-attr sharing at that points). Clearing the mem-attrs htab in rest_of_clean_state () gets us to phase parsing : 5.33 (13%) usr 4.41 (58%) sys 9.74 (19%) wall 294905 kB (14%) ggc tree gimplify : 2.05 ( 5%) usr 0.20 ( 3%) sys 2.05 ( 4%) wall 252760 kB (12%) ggc tree CCP : 1.25 ( 3%) usr 0.13 ( 2%) sys 1.13 ( 2%) wall 57081 kB ( 3%) ggc expand : 1.50 ( 4%) usr 0.13 ( 2%) sys 1.63 ( 3%) wall 169767 kB ( 8%) ggc CSE : 1.29 ( 3%) usr 0.12 ( 2%) sys 1.05 ( 2%) wall 13532 kB ( 1%) ggc combiner : 2.06 ( 5%) usr 0.15 ( 2%) sys 2.10 ( 4%) wall 11785 kB ( 1%) ggc integrated RA : 4.51 (11%) usr 0.24 ( 3%) sys 4.30 ( 9%) wall 427273 kB (21%) ggc LRA non-specific : 1.26 ( 3%) usr 0.09 ( 1%) sys 1.40 ( 3%) wall 6517 kB ( 0%) ggc reload CSE regs : 1.19 ( 3%) usr 0.06 ( 1%) sys 1.40 ( 3%) wall 13638 kB ( 1%) ggc rest of compilation : 2.31 ( 5%) usr 0.18 ( 2%) sys 2.20 ( 4%) wall 40076 kB ( 2%) ggc TOTAL : 42.32 7.66 50.19 2052932 kB