[LLVMdev] LLVM IR i128

Jaak Randmets jaak.ra at gmail.com
Mon Feb 2 06:30:07 PST 2015


For 64-bit X86 code we have had good success with using up-to 128-bit
integers (this includes say 36-bit or even 2-bit integers).

On Mon, Feb 2, 2015 at 4:03 PM, Alejandro Velasco
<gollumdelperdiguero at gmail.com> wrote:
> I asked a similar question last year here. Operations on types iN with no
> direct translation into one assembly instruction seem to be translated into
> several ones correctly.
>

In my experience this is *definitely* not true in practise, at least
on x86. Using larger than 128-bit integers we have hit assertion
failures, crashes and miscompiles. Things are even worse for vectors
of non-legal(?) types (say <2 x i2>).

Some of the issue that we hit after giving up on vectorized code and
relying directly on LLVM for wider-than-legal types:

http://llvm.org/bugs/show_bug.cgi?id=20011 (crash with <2 x i2>)
http://llvm.org/bugs/show_bug.cgi?id=20012 (error when storing <2 x i4>)
http://llvm.org/bugs/show_bug.cgi?id=19797 (assert failure on
multiplication of i192)
http://llvm.org/bugs/show_bug.cgi?id=20921 (assert failure on stores
and loads of i193)
http://llvm.org/bugs/show_bug.cgi?id=21184 (miscompilation of
wider-than-legal types)

I would *really* wish that the documentation made sure to mention,
that wider-than-legal types are not expected to work.


- Jaak



More information about the llvm-dev mailing list