https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86158
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jamborm at gcc dot gnu.org --- Comment #8 from Martin Liška <marxin at gcc dot gnu.org> --- Got it, if I print pointer value of streamed trees I see: BAD: Creating output block for jmpfuncs Encoding indexable <integer_type # int> as 0 Encoding indexable <pointer_type #> as 1 Encoding indexable <pointer_type #> as 2 Streaming SCC of <addr_expr #> (0x7ffff6af78a0) Streaming <addr_expr #> to jmpfuncs Streaming <string_cst #> to jmpfuncs Encoding indexable <array_type #> as 3 Encoding indexable <pointer_type #> as 4 Existing SCC of <string_cst #> (0x7ffff6ade5c8) Finished SCC of <addr_expr #> Streaming SCC of <integer_cst # 0> (0x7ffff6af25a0) Finished SCC of <integer_cst # 0> Existing SCC of <integer_cst # 0> (0x7ffff6af25a0) Streaming SCC of <addr_expr #> (0x7ffff6af7900) Streaming <addr_expr #> to jmpfuncs Encoding indexable <pointer_type #> as 5 Encoding indexable <function_decl # exit> as 0 Finished SCC of <addr_expr #> Streaming SCC of <integer_cst # 0> (0x7ffff6af25b8) Finished SCC of <integer_cst # 0> Existing SCC of <integer_cst # 0> (0x7ffff6af25b8) Streaming SCC of <addr_expr #> (0x7ffff6af7940) Streaming <addr_expr #> to jmpfuncs Encoding indexable <var_decl # M_var> as 0 Finished SCC of <addr_expr #> Streaming SCC of <integer_cst # 0> (0x7ffff6ae1d20) Finished SCC of <integer_cst # 0> Existing SCC of <integer_cst # 0> (0x7ffff6ae1d20) GOOD: Creating output block for jmpfuncs Encoding indexable <integer_type # int> as 0 Encoding indexable <pointer_type #> as 1 Encoding indexable <pointer_type #> as 2 Streaming SCC of <addr_expr #> (0x7ffff6af99c0) Streaming <addr_expr #> to jmpfuncs Streaming <string_cst #> to jmpfuncs Encoding indexable <array_type #> as 3 Encoding indexable <pointer_type #> as 4 Existing SCC of <string_cst #> (0x7ffff6ade640) Finished SCC of <addr_expr #> Streaming SCC of <integer_cst # 0> (0x7ffff6af3690) Finished SCC of <integer_cst # 0> Existing SCC of <integer_cst # 0> (0x7ffff6af3690) Streaming SCC of <addr_expr #> (0x7ffff6af9a20) Streaming <addr_expr #> to jmpfuncs Encoding indexable <pointer_type #> as 5 Encoding indexable <function_decl # exit> as 0 Finished SCC of <addr_expr #> Streaming SCC of <integer_cst # 0> (0x7ffff6af36a8) Finished SCC of <integer_cst # 0> Existing SCC of <integer_cst # 0> (0x7ffff6af36a8) Streaming SCC of <addr_expr #> (0x7ffff6af9a40) Streaming <addr_expr #> to jmpfuncs Encoding indexable <var_decl # M_var> as 0 Finished SCC of <addr_expr #> Existing SCC of <integer_cst # 0> (0x7ffff6af3690) Existing SCC of <integer_cst # 0> (0x7ffff6af3690) So as seen, the integer_cst in GOOD version points to same tree (0x7ffff6af3690), while in the bad one, there are multiple integer constants. Martin I thought there's some caching happening in IPA CP?