In a private port I had the problem that reg_equiv_alt_mem_list did contain the same RTL as reg_equiv_memory_loc. This caused an assert in delete_output_reload, where these are compared with equal_rtx_p. The list is build with push_reg_equiv_alt_mem, but only when "tem != orig". The value tem is build with find_reloads_address. Within that function we have some code which simply unshares the RTL. The return value will be the new RTL, even in some cases where the RTL did not change.
I think the test in front of push_reg_equiv_alt_mem should be done via rtx_equal_p. This would match the assert in delete_output_reload. My private port is based on GCC 4.1.0, but the code looks the same in 4.3. I do not have papers on file so someone else should prepare a patch. Erwin