[LLVMdev] [cfe-dev] Clang devirtualization proposal
Nick Lewycky
nicholas at mxc.ca
Sat Aug 1 12:39:18 PDT 2015
Sanjoy Das wrote:
> On Fri, Jul 31, 2015 at 6:18 PM, Reid Kleckner<rnk at google.com> wrote:
>> Consider this pseudo-IR and some possible transforms that I would expect to
>> be semantics preserving:
>>
>> void f(i32* readonly %a, i32* %b) {
>> llvm.assume(%a == %b)
>> store i32 42, i32* %b
>> }
>> ...
>> %p = alloca i32
>> store i32 13, i32* %p
>> call f(i32* readonly %p, i32* %p)
>> %r = load i32, i32* %p
>>
>> ; Propagate llvm.assume info
>> void f(i32* readonly %a, i32* %b) {
>> store i32 42, i32* %a
>> }
>> ...
>> %p = alloca i32
>> store i32 13, i32* %p
>> call f(i32* readonly %p, i32* %p)
>> %r = load i32, i32* %p
>
> I'd say this first transformation is incorrect. `readonly` is
> effectively part of `%a`'s "type"
The trouble is that we want to express ideas like "at this call site,
but not others, I know that this call will not mutate state through this
pointer". We can't express that with the llvm type system we have today.
as it constrains and affects the
> operations you can do on `%a`. Even if `%b` is bitwise equivalent to
> `%a` at runtime, it is "type incompatible" to replace `%a` with `%b`.
>
> This is similar to how you cannot replace `store i32 42, i32
> addrspace(1)* %a` with `store i32 42, i32 addrspace(2)* %b`, even if
> you can prove `ptrtoint %a` == `ptrtoint %b` -- the nature of `store`
> is dependent on the type of the pointer you store through.
>
> The glitch in LLVM IR right now is that the `readonly`ness of `%a` is
> not modeled in the type system, when I think it should be. An `i32
> readonly*` should be a different type from `i32*`. In practice this
> may be non-trivial to get right (for instance `phi`s and `selects`
> will either have to do a type merge, or we'd have to have explicit
> type operators at the IR level).
Right, but the "type merge" as you call it has to happen essentially
everywhere. We'd need something akin to C's qualification conversion.
>
> -- Sanjoy
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
More information about the llvm-dev
mailing list