http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56661



Richard Biener <rguenth at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

                 CC|                            |vries at gcc dot gnu.org



--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> 2013-03-20 
10:12:35 UTC ---

It's the tail-merging value-numbering doing



Value numbering .MEM_8 stmt = b_9 = malloc (12);

Setting value number of .MEM_8 to .MEM_8 (changed)

Setting value number of b_9 to b_9 (changed)

SCC consists of: .MEM_11

Value numbering .MEM_11 stmt = b_12 = malloc (12);

Setting value number of .MEM_11 to .MEM_8 (changed)

Setting value number of b_12 to b_9 (changed)

SCC consists of: b_12



which is of course bogus.  The pointers do not share the same alias

properties and thus when disambiguating *b_12 against setb (b_12)

which uses the call-clobbered vars set of the gimple call it doesn't

work if you instead ask it to disambiguate *b_9.



I know that I was nervous about this change ... it basically value-numbers

the result of non-const/pure calls using the same VUSE the same.  That's

broken if the IL contains bits that rely on the results being distinct

(which is alias information when it comes to malloc-like results).



In theory alias info of value-equivalent SSA names can be _intersected_

to get the alias info of the value.  Now in this case alias info computation

relies on the fact that the calls are different - which means alias info

for those "equivalent" SSA names has to be _unioned_.  All of this

alias-info adjusting doesn't work during the value-numbering process

though, so it's not an option to do it as a post-processing step.



We rely on the intersection property with all the value-numbering to not

need to do any alias-info adjusting - but getting the unioning requirement

in via value-numbering those calls the same breaks this.



Which means the most obvious "fix" is to not value-number those calls the

same.

Reply via email to