This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: A problem about loop store motion


On Tue, Feb 21, 2012 at 9:54 AM, Jiangning Liu <jiangning.liu@arm.com> wrote:
>> The MEM form is more "canonical", so the loop SM machinery to detect
>> equality should be adjusted accordingly. ?Alternatively you can teach
>> PRE insertion to strip off the MEM if possible (though
>> fold_stmt_inplace should
>> arelady do this if possible).
>
> Richard,
>
> Thank you! You are right. I noticed on latest trunk the problem in PRE was
> already fixed by invoking fold_stmt_inplace.
>
> Unfortunately for this small case, the latest trunk code still can't do SM
> for variable pos, because refs_may_alias_p(*D.4074_10, pos) is true, that
> is, pos has alias with l[pos].
>
> I think alias analysis should be able to know they don't have alias with
> each other, unless there is an assignment statement like "l=&pos;".
>
> Can alias analysis fix the problem?

The problem is that 'pos' is marked TREE_ADDRESSABLE, so we think
its address got taken.  'l' points to any global possibly address-taken
variable.  It get's the TREE_ADDRESSABLE flag via PRE insertion which
re-gimplifies the tree it creates which marks the variable as addressable.

I'll have a look.

Richard.



> Thanks,
> -Jiangning
>
>>
>> Richard.
>>
>
>
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]