------- Comment #3 from rguenth at gcc dot gnu dot org 2007-12-04 14:03 -------
The issue is that the loaded_syms bitmap doesn't agree with the VUSEs:
(gdb) call debug_generic_expr (stmt)
# VUSE <SMT.33_40> { SMT.32 SMT.33 }
storetmp.46_60 = *dest_19
as in create_ssa_artificial_load_stmt we make sure to kill build_vuses, but
not to clear the build_loads bitmap. With that fixed we generate
# VUSE <SMT.33_40> { SMT.33 }
storetmp.46_60 = *dest_19
which looks better, but later still ICEs, because the operand scanner
re-inserts the load of SMT.32.
So one could argue that for the original statement where we copy the
virtual operands from
# SMT.33_40 = VDEF <SMT.33_55> { SMT.33 }
*dest_19 = 0B
that this is missing a VDEF of SMT.32 (the alias sets of both SMT.32 and
*dest_19 are 3).
Note also that even during the first may_alias pass(!) we do not have
flow-sensitive information for dest_19:
NOTE: no flow-sensitive alias info for dest_19 in *dest_19 = 0B;
that is, we only use a fallback SMT here. And the failure mode is exactly
as I have predicted - we add the aliases of SMT.32 (SMT.33), but not SMT.32
itself!
Mine.
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |rguenth at gcc dot gnu dot
|dot org |org
Status|UNCONFIRMED |ASSIGNED
Ever Confirmed|0 |1
Last reconfirmed|0000-00-00 00:00:00 |2007-12-04 14:03:39
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34334