------- Comment #3 from rakdver at gcc dot gnu dot org 2006-11-01 00:49 ------- access_can_touch_variable determines that fde_13->dw_fde_cfi cannot touch cie_cfi_head; the list of virtual operands of the load thus becomes empty, and we insert SMT.48 for it.
On *p, we cannot eliminate cie_cfi_head, and since the condition for insertion of SMT is formulated as ... ||none_added || (TREE_CODE (var) == SYMBOL_MEMORY_TAG && for_clobber && SMT_USED_ALONE (var))) and for_clobber is only true on call operands, we do not insert SMT. The lists of virtual operands thus become disjoint. Daniel, any idea how to fix this? I do not quite understand the SMT_USED_ALONE stuff. The condition above looks suspicious to me, especially the test for "for_clobber" -- why should we want to handle call virtual operands differently from any others? Obviously, removing the for_clobber test would fix this problem, but I am not really sure this would be the right solution. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29680