* function.c (purge_addressof): Unshare any shared rtl created by
        purge_addressof and its children.

From-SVN: r33133
This commit is contained in:
Jeffrey A Law 2000-04-12 23:47:06 +00:00 committed by Richard Henderson
parent aea0083a2d
commit 4fa48eaefa
2 changed files with 19 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2000-04-12 Jeffrey A Law (law@cygnus.com)
* function.c (purge_addressof): Unshare any shared rtl created by
purge_addressof and its children.
2000-04-12 Mark Mitchell <mark@codesourcery.com>
* function.c (aggregate_value_p): VOID_TYPE nodes are never

View File

@ -3330,6 +3330,20 @@ purge_addressof (insns)
hash_table_free (&ht);
purge_bitfield_addressof_replacements = 0;
purge_addressof_replacements = 0;
/* REGs are shared. purge_addressof will destructively replace a REG
with a MEM, which creates shared MEMs.
Unfortunately, the children of put_reg_into_stack assume that MEMs
referring to the same stack slot are shared (fixup_var_refs and
the associated hash table code).
So, we have to do another unsharing pass after we have flushed any
REGs that had their address taken into the stack.
It may be worth tracking whether or not we converted any REGs into
MEMs to avoid this overhead when it is not needed. */
unshare_all_rtl_again (get_insns ());
}
/* Pass through the INSNS of function FNDECL and convert virtual register