lvalues and rvalues
Dibyendu Majumdar
mobile@majumdar.org.uk
Thu Jan 1 00:00:00 GMT 2015
On 15 June 2015 at 01:38, David Malcolm <dmalcolm@redhat.com> wrote:
> Typically if you have a pointer chain to something that's visible
> outside of local scope then the optimizer can't know whether or not
> something else is writing to the ptr, so the generated code has to
> re-read it each time.
>
>> Should I use a local variable
>> and assign the value of the base pointer to it explicitly (i.e.
>> similar to explicit load) ?
>
> That's worth doing if you know more than the optimizer can about when
> the value can change (e.g. if you're calling some function, and know
> that the value can't be changed by it, whereas the optimizer has to
> assume that it might touch it).
>
In the Lua interpreter the code does this exactly. However I set the
variable on every instruction I compile on the assumption that if the
variable is not involved in an external call between bytecodes and
there are no steps that modify the value stored in the variable then
the optimizer will do away with the redundant assignments. This seems
to be true in LLVM once appropriate aliasing metadata is provided. I
would hope that the gcc optimizer will do the same.
Setting the variables manually is problematic due to the unforeseen
interaction of basic blocks ... I would rather err on the side of
correctness. I did consider doing this manually initially but gave up
the idea when I found I could not reason about the way the blocks
would interact and what it would do to the assumptions I made.
Regards
More information about the Jit
mailing list