http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50955
--- Comment #9 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-11-03 08:18:05 UTC --- (In reply to comment #8) > > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50955 > > > > > > --- Comment #6 from Yuehai Du <duyuehai at gmail dot com> 2011-11-03 > > > 06:24:58 UTC --- > > > Let me see if i understand you correctly, you are saying that there isn't > > > an > > > easy way to fix it without hurting the performance(either consider less IV > > > candidates or dumb down the alias analysis). > > > > Yes. > > > > > so this issue won't be fixed in trunk now? > > > > At least I can't see an easy way out. What I was considering as _maybe_ > > a good final solution would be to remove TARGET_MEM_REF and instead > > have TARGET_MEM_REF_ADDR, which would produce an SSA name where we > > could in turn attach alias info to. The minor downside of that is > > that we lose the ability to directly specify a symbol as the base > > for a TARGET_MEM_REF (which is ironically exactly the point where > > things wreck in this testcase ...) > > or we could just start associating alias info with memory references instead > of with pointers. Either way, this would be a major change. Anyway, let > me have a look at this, perhaps I can come up with something less intrusive. > > > > if in that case, Avoiding the issue by set PARM isn't an option for me. i > > > still want to fix it in our private port even with an ugly patch. can we > > > just > > > add a new field in MEM_REF which specify it is local or non-nolocal > > > store(enum{INVALID, LOCAL, NON-LOCAL}), and only set it in IVOPTS before > > > it > > > rewrite the address. we will check this in is_hidden_global_store(). do > > > this > > > work in Gimple level? but i don't know if RTL optimization still delete > > > this > > > store because we don't keep points-to information. > > > > The issue is not only in is_hidden_global_store (), but the issue > > is that alias analysis thinks the store may only alias the local p1 > > array. Thus you may as well get miscompiles from RTL scheduling as well. > > You could already paper over the issue in question by checking > > if a TARGET_MEM_REF has TMR_OFFSET or TMR_OFFSET2 != NULL_TREE in > > is_hidden_global_store (). Another way would be to make sure we > > bias costs enough to make the situation less likely, for example > > in get_computation_cost_at, make the address_p code unconditional. > > Making a miscompilation "less likely" is really not a good idea; we need to > really fix the problem, even if it means some performance penalty. I agree. I think the main difficulty is to detect this issue reliably (and not too conservatively) - arranging for the TARGET_MEM_REF to look ok from an aliasing point of view shouldn't be too difficult then (simply use a INTEGER_CST zero TMR_BASE and shuffle the real base to TMR_INDEX2).