[LLVMdev] extractelement causes memory access violation - what to do?

Philip Reames listmail at philipreames.com
Fri Jun 26 09:38:59 PDT 2015


On 06/26/2015 08:42 AM, David Majnemer wrote:
>
>
> On Fri, Jun 26, 2015 at 7:00 AM, Paweł Bylica <chfast at gmail.com 
> <mailto:chfast at gmail.com>> wrote:
>
>     Hi,
>
>     Let's have a simple program:
>     define i32 @main(i32 %n, i64 %idx) {
>       %idxSafe = trunc i64 %idx to i5
>       %r = extractelement <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>,
>     i64 %idx
>       ret i32 %r
>     }
>
>     The assembly of that would be:
>     pcmpeqd%xmm0, %xmm0
>     movdqa%xmm0, -24(%rsp)
>     movl-24(%rsp,%rsi,4), %eax
>     retq
>
>     The language reference states that the extractelement instruction
>     produces undefined value in case the index argument is invalid
>     (our case). But the implementation simply dumps the vector to the
>     stack memory, calculates the memory offset out of the index value
>     and tries to access the memory. That causes the crash.
>
>     The workaround is to trunc the index value before extractelement
>     (see %idxSafe). But what should be the ultimate solution?
>
>
> We could fix this by specifying that out of bounds access on an 
> extractelement leads to full-on undefined behavior, no need to force 
> everyone to eat the cost of a mask.
This seems like the appropriate decision to me.  It's closely in line 
with existing practice and assumptions.

Philip
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150626/4d44fda7/attachment.html>


More information about the llvm-dev mailing list