[llvm-dev] Indices for extractvalue and insertvalue

79 views
Skip to first unread message

Xin Tong via llvm-dev

unread,
Jan 2, 2017, 5:01:47 PM1/2/17
to llvm...@lists.llvm.org
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...@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

Reid Kleckner via llvm-dev

unread,
Jan 3, 2017, 11:45:22 AM1/3/17
to Xin Tong, llvm-dev
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.

Xin Tong via llvm-dev

unread,
Jan 3, 2017, 12:18:21 PM1/3/17
to Reid Kleckner, llvm-dev
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

Reply all
Reply to author
Forward
0 new messages