[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