[Bug tree-optimization/29680] Misscompilation of spec2006 gcc

rakdver at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Wed Nov 1 00:49:00 GMT 2006



------- 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



More information about the Gcc-bugs mailing list