[Haskell-cafe] llvm is generating invalid instructions (problem with autovectorization?)

Geoffrey Mainland mainland at apeiron.net
Thu May 22 01:05:49 UTC 2014


Perhaps your installed version of binutils does not support the sarxq
instruction?

You can ask GHC to pass flags to llc and friends:

http://www.haskell.org/ghc/docs/7.8.2/html/users_guide/options-phases.html#forcing-options-through

Best,
Geoff

On 05/21/2014 06:50 PM, Mike Izbicki wrote:
> I have some code* that is causing llvm to throw a fit.  In particular,
> I get (compiling with GHC 7.8 and llvm 3.4):
>
>     /tmp/ghc1685_0/ghc1685_5.bc:150324:0:
>          Error: no such instruction: `sarxq %rax,%rbx,%r14'
>
> Similar errors get repeated several thousand times, and it's always a
> sarxq instruction.  Now, my code doesn't use any of the simd primops,
> so the sarxq must be coming from llvm's autovectorization.  Is it
> possible that somehow GHC's output bytecode could be responsible, or
> is the problem more likely with llvm proper?  Is there any way I can
> force GHC to pass flags to llvm so I can experiment with different
> settings?
>
> Another clue that the cause might be in llvm's autovectorization is
> that when I compile with llvm 3.0 (which does not support
> autovectorization), there are no error messages.
>
> * I suspect my code is far too complicated for it to shed any light on
> this question, but it's available at:
> https://github.com/mikeizbicki/HLearn/tree/dev-7.8/src/examples/hlearn-allknn 
> If need be, I can create a minimal sample of code that causes the
> error, but I don't want to go through the trouble if it's not needed.
>
>



More information about the Haskell-Cafe mailing list