[llvm-dev] Indices for extractvalue and insertvalue

Xin Tong via llvm-dev llvm-dev at lists.llvm.org
Tue Jan 3 09:18:14 PST 2017


That makes sense.

Then it seems to me that there is some unclearness about what the
language ref says, i.e.
http://llvm.org/docs/LangRef.html#extractvalue-instruction says
extractvalue indices work in a similar manner as indices for
getelementptr, and what the the compiler supports (extractvalue
indices are unsigned or smaller while getelementptr indices can be
uint64_t).

What would be the problem if we make extractvalue and insertvalue use
uint64_t indices, other than the compiler potentially uses a bit more
memory ?

-Xin

On Tue, Jan 3, 2017 at 8:45 AM, Reid Kleckner <rnk at google.com> wrote:
> I think originally insertvalue / extractvalue were only intended to work on
> struct values. LLVM struct types can have up to 2**32 element types, and the
> insertvalue/extractvalue indices match that.
>
> I hope people aren't actually trying to load a >4GB array and hoping to do
> something good with it.
>
> On Mon, Jan 2, 2017 at 2:01 PM, Xin Tong via llvm-dev
> <llvm-dev at lists.llvm.org> wrote:
>>
>> Hi
>>
>> Can someone explain to me why we cant use uint64_t for extractvalue
>> and insertvalue indices, while GEP on arrays can have indices of any
>> integer type. Basically if I load an array with UINT_MAX+O (O>=2)
>> elements, I can not extract its last element.
>>
>> Given this restriction I feel we have a bug here (uint64_t is passed
>> as a unsigned). This cant happen because of the if (NumElements >
>> 1024) guard, but its a bug anyways.
>>
>>
>> https://github.com/llvm-mirror/llvm/blob/master/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp#L634
>>
>> Thanks,
>> -Xin
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>


More information about the llvm-dev mailing list