[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 so it never sees the load itself.
(instcombine, the only other user, already gives up earlier if
Load->isVolatile() returns true)
: And in the case of instcombine, the latter is a select instruction, not a load.
More information about the llvm-commits