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

Paweł Bylica chfast at gmail.com
Fri Jun 26 07:00:07 PDT 2015


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?

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


More information about the llvm-dev mailing list