[llvm-commits] [PATCH] Tail recursion elimination and memory loads.
Frits van Bommel
fvbommel at wxs.nl
Wed Jun 17 01:26:06 PDT 2009
Duncan Sands wrote:
> Hi Frits,
>
>> 2) The load is non-volatile, the call does not write to memory, and the
>> pointer isSafeToLoadUnconditionally() at that point in the code. In this
>> case, the load has no side-effects (and won't trap) and the memory it
>> loads from won't contain different data after the call, making it safe
>> to raise the load above the call.
>
> shouldn't isSafeToLoadUnconditionally() check that the load is not
> volatile? If you are loading from i/o memory, then the fact of
> executing the load could cause your rocket to launch - in any case
> it is not in general safe to LoadUnconditionally something volatile.
isSafeToLoadUnconditionally() only receives the pointer loaded from and the
instruction to start scanning from[1] so it never sees the load itself.
(instcombine, the only other user, already gives up earlier if
Load->isVolatile() returns true)
[1]: And in the case of instcombine, the latter is a select instruction, not a load.
More information about the llvm-commits
mailing list