<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
</head>
<body>
<p>Hi Frank<br>
<br>
<blockquote type="cite">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
That makes me think that the ORC JIT Kaleidoscope doesn't use
the '+avx2' attribute.<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
How can ORC JIT Kaleidoscope generate jitted code with AVX2
instructions?</div>
</blockquote>
Did you try adding something like:<br>
JTMB.addFeatures({"+avx2"});<br>
<br>
Here?<br>
<a class="moz-txt-link-freetext" href="https://github.com/llvm/llvm-project/blob/7a2a765745973ebeb041276d2d9489a000ba9371/llvm/examples/Kaleidoscope/BuildingAJIT/Chapter1/KaleidoscopeJIT.h#L71">https://github.com/llvm/llvm-project/blob/7a2a765745973ebeb041276d2d9489a000ba9371/llvm/examples/Kaleidoscope/BuildingAJIT/Chapter1/KaleidoscopeJIT.h#L71</a><br>
<br>
Hope it helps.<br>
Best, Stefan<br>
<br>
</p>
<div class="moz-cite-prefix">On 30/08/2021 21:46, Frank Winter via
llvm-dev wrote:<br>
</div>
<blockquote type="cite"
cite="mid:MN2PR09MB5306A8D061AA06A1D2538D70DECB9@MN2PR09MB5306.namprd09.prod.outlook.com">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<style type="text/css" style="display:none;">P {margin-top:0;margin-bottom:0;}</style>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
Thanks! Yeah, that was my silliness. Fixed and the module
compiles now with ORC JIT Kaleidoscope.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
However, looking at the assembler I only see SSE (128 bit
vectors) being generated:</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
.Leval0_intern:
<div>.cfi_startproc</div>
<div>addl %esi, %edi</div>
<div>shll $3, %edi</div>
<div>movslq %edi, %rax</div>
<div>shlq $5, %rax</div>
<div>movaps (%r8,%rax), %xmm0</div>
<div>movaps 16(%r8,%rax), %xmm1</div>
<div>mulps 16(%rcx,%rax), %xmm1</div>
<div>mulps (%rcx,%rax), %xmm0</div>
<div>movaps %xmm0, (%rdx,%rax)</div>
<div>movaps %xmm1, 16(%rdx,%rax)</div>
<span>retq</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
I cross checked what LLC gives:</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
Calling llc with no optional flags gives matching assembler, but
when adding '-mattr=+avx2' I get AVX2 (256 bit vectors)<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
.Leval0_intern: # @eval0_intern
<div> .cfi_startproc</div>
<div># %bb.0: # %stack</div>
<div> addl %esi, %edi</div>
<div> shll $3, %edi</div>
<div> movslq %edi, %rax</div>
<div> shlq $5, %rax</div>
<div> vmovaps (%r8,%rax), %ymm0</div>
<div> vmulps (%rcx,%rax), %ymm0, %ymm0</div>
<div> vmovaps %ymm0, (%rdx,%rax)</div>
<div> vzeroupper</div>
<span> retq</span><br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
That makes me think that the ORC JIT Kaleidoscope doesn't use
the '+avx2' attribute.<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
How can ORC JIT Kaleidoscope generate jitted code with AVX2
instructions?<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
Thanks again & Best wishes,</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
Frank</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font style="font-size:11pt"
face="Calibri, sans-serif" color="#000000"><b>From:</b>
Craig Topper <a class="moz-txt-link-rfc2396E" href="mailto:craig.topper@gmail.com"><craig.topper@gmail.com></a><br>
<b>Sent:</b> Monday, August 30, 2021 3:20 PM<br>
<b>To:</b> Frank Winter <a class="moz-txt-link-rfc2396E" href="mailto:fwinter@jlab.org"><fwinter@jlab.org></a><br>
<b>Cc:</b> <a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-rfc2396E" href="mailto:llvm-dev@lists.llvm.org"><llvm-dev@lists.llvm.org></a><br>
<b>Subject:</b> [EXTERNAL] Re: [llvm-dev] ORC JIT error when
using AVX2 vector instructions</font>
<div> </div>
</div>
<div>
<div dir="ltr">This is an illegal instruction. mul is an
integer operation, but that has floating point types. The
correct operation would be fmul.
<div><br>
</div>
<div><span style="color:rgb(0,0,0);
font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:16px">%21 = mul <8 x float> %20, %10</span><br>
</div>
<div><br clear="all">
<div>
<div dir="ltr" class="x_gmail_signature">~Craig</div>
</div>
<br>
</div>
</div>
<br>
<div class="x_gmail_quote">
<div dir="ltr" class="x_gmail_attr">On Mon, Aug 30, 2021 at
12:08 PM Frank Winter via llvm-dev <<a
href="mailto:llvm-dev@lists.llvm.org"
moz-do-not-send="true">llvm-dev@lists.llvm.org</a>>
wrote:<br>
</div>
<blockquote class="x_gmail_quote" style="margin:0px 0px 0px
0.8ex; border-left:1px solid rgb(204,204,204);
padding-left:1ex">
<div dir="ltr">
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
Hi.</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
As soon as the module contains instructions operating
on < 8 x float > the ORC JIT refuses to work.</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
Here's the module that provokes the error given
further below: <br>
</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
; ModuleID = 'module'
<div>source_filename = "module"</div>
<div>target datalayout =
"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"</div>
<div><br>
</div>
<div>define private void @eval0_intern(i32 %arg0, i32
%arg1, <8 x float>* %arg2, <8 x float>*
%arg3, <8 x float>* %arg4) {</div>
<div>stack:</div>
<div> br label %afterstack</div>
<div><br>
</div>
<div>afterstack:
; preds = %stack</div>
<div> %0 = add nsw i32 %arg0, %arg1</div>
<div> %1 = add nsw i32 0, %0</div>
<div> %2 = mul i32 %1, 1</div>
<div> %3 = add nsw i32 %2, 0</div>
<div> %4 = mul i32 %3, 1</div>
<div> %5 = add nsw i32 %4, 0</div>
<div> %6 = mul i32 %5, 1</div>
<div> %7 = add nsw i32 %6, 0</div>
<div> %8 = mul i32 %7, 8</div>
<div> %9 = getelementptr <8 x float>, <8 x
float>* %arg3, i32 %8</div>
<div> %10 = load <8 x float>, <8 x
float>* %9, align 32</div>
<div> %11 = add nsw i32 0, %0</div>
<div> %12 = mul i32 %11, 1</div>
<div> %13 = add nsw i32 %12, 0</div>
<div> %14 = mul i32 %13, 1</div>
<div> %15 = add nsw i32 %14, 0</div>
<div> %16 = mul i32 %15, 1</div>
<div> %17 = add nsw i32 %16, 0</div>
<div> %18 = mul i32 %17, 8</div>
<div> %19 = getelementptr <8 x float>, <8 x
float>* %arg4, i32 %18</div>
<div> %20 = load <8 x float>, <8 x
float>* %19, align 32</div>
<div> %21 = mul <8 x float> %20, %10</div>
<div> %22 = add nsw i32 0, %0</div>
<div> %23 = mul i32 %22, 1</div>
<div> %24 = add nsw i32 %23, 0</div>
<div> %25 = mul i32 %24, 1</div>
<div> %26 = add nsw i32 %25, 0</div>
<div> %27 = mul i32 %26, 1</div>
<div> %28 = add nsw i32 %27, 0</div>
<div> %29 = mul i32 %28, 8</div>
<div> %30 = getelementptr <8 x float>, <8 x
float>* %arg2, i32 %29</div>
<div> store <8 x float> %21, <8 x float>*
%30, align 32</div>
<div> ret void</div>
<div>}</div>
<div><br>
</div>
<div>define void @eval0(i32 %idx, [8 x i8]* %arg_ptr)
{</div>
<div>entrypoint:</div>
<div> %0 = getelementptr [8 x i8], [8 x i8]*
%arg_ptr, i32 0</div>
<div> %1 = bitcast [8 x i8]* %0 to i32*</div>
<div> %2 = load i32, i32* %1, align 4</div>
<div> %3 = getelementptr [8 x i8], [8 x i8]*
%arg_ptr, i32 1</div>
<div> %4 = bitcast [8 x i8]* %3 to <8 x
float>**</div>
<div> %5 = load <8 x float>*, <8 x
float>** %4, align 8</div>
<div> %6 = getelementptr [8 x i8], [8 x i8]*
%arg_ptr, i32 2</div>
<div> %7 = bitcast [8 x i8]* %6 to <8 x
float>**</div>
<div> %8 = load <8 x float>*, <8 x
float>** %7, align 8</div>
<div> %9 = getelementptr [8 x i8], [8 x i8]*
%arg_ptr, i32 3</div>
<div> %10 = bitcast [8 x i8]* %9 to <8 x
float>**</div>
<div> %11 = load <8 x float>*, <8 x
float>** %10, align 8</div>
<div> call void @eval0_intern(i32 %idx, i32 %2, <8
x float>* %5, <8 x float>* %8, <8 x
float>* %11)</div>
<div> ret void</div>
<div>}</div>
<div>--------------------------</div>
<div><br>
</div>
<div><br>
</div>
<div>For the JIT part I'm using the Kaleidoscope ORC
JIT as given in the LLVM examples. However, when it
comes to the symbol lookup the program stops with
output like this:<br>
</div>
<div><br>
</div>
Lookup
<div>LLVM ERROR: Cannot select: 0x562e8bb6c268: v4f32
= mul 0x562e8bb6bab0, 0x562e8bb6b6a0</div>
<div> 0x562e8bb6bab0: v4f32,ch = load<(load 16
from %ir.19 + 16, basealign 32)> 0x562e8baf8ca8,
0x562e8bb6c130, undef:i64</div>
<div> 0x562e8bb6c130: i64 = add nuw 0x562e8bb6bcb8,
Constant:i64<16></div>
<div> 0x562e8bb6bcb8: i64 = add 0x562e8bb6bc50,
0x562e8bb6b9e0</div>
<div> 0x562e8bb6bc50: i64,ch = CopyFromReg
0x562e8baf8ca8, Register:i64 %4</div>
<div> 0x562e8bb6bbe8: i64 = Register %4</div>
<div> 0x562e8bb6b9e0: i64 = shl 0x562e8bb6b910,
Constant:i8<5></div>
<div> 0x562e8bb6b910: i64 = sign_extend
0x562e8bb6b770</div>
<div> 0x562e8bb6b770: i32 = shl
0x562e8bb6b500, Constant:i8<3></div>
<div> 0x562e8bb6b500: i32 = add nsw
0x562e8bb6b3c8, 0x562e8bb6b498</div>
<div> 0x562e8bb6b3c8: i32,ch =
CopyFromReg 0x562e8baf8ca8, Register:i32 %0</div>
<div> 0x562e8bb6b360: i32 = Register
%0</div>
<div> 0x562e8bb6b498: i32,ch =
CopyFromReg 0x562e8baf8ca8, Register:i32 %1</div>
<div> 0x562e8bb6b430: i32 = Register
%1</div>
<div> 0x562e8bb6ea28: i8 =
Constant<3></div>
<div> 0x562e8bb6c2d0: i8 = Constant<5></div>
<div> 0x562e8bb6b638: i64 = Constant<16></div>
<div> 0x562e8bb6bb18: i64 = undef</div>
<div> 0x562e8bb6b6a0: v4f32,ch = load<(load 16
from %ir.9 + 16, basealign 32)> 0x562e8baf8ca8,
0x562e8bb6c198, undef:i64</div>
<div> 0x562e8bb6c198: i64 = add nuw 0x562e8bb6ba48,
Constant:i64<16></div>
<div> 0x562e8bb6ba48: i64 = add 0x562e8bb6b8a8,
0x562e8bb6b9e0</div>
<div> 0x562e8bb6b8a8: i64,ch = CopyFromReg
0x562e8baf8ca8, Register:i64 %3</div>
<div> 0x562e8bb6b840: i64 = Register %3</div>
<div> 0x562e8bb6b9e0: i64 = shl 0x562e8bb6b910,
Constant:i8<5></div>
<div> 0x562e8bb6b910: i64 = sign_extend
0x562e8bb6b770</div>
<div> 0x562e8bb6b770: i32 = shl
0x562e8bb6b500, Constant:i8<3></div>
<div> 0x562e8bb6b500: i32 = add nsw
0x562e8bb6b3c8, 0x562e8bb6b498</div>
<div> 0x562e8bb6b3c8: i32,ch =
CopyFromReg 0x562e8baf8ca8, Register:i32 %0</div>
<div> 0x562e8bb6b360: i32 = Register
%0</div>
<div> 0x562e8bb6b498: i32,ch =
CopyFromReg 0x562e8baf8ca8, Register:i32 %1</div>
<div> 0x562e8bb6b430: i32 = Register
%1</div>
<div> 0x562e8bb6ea28: i8 =
Constant<3></div>
<div> 0x562e8bb6c2d0: i8 = Constant<5></div>
<div> 0x562e8bb6b638: i64 = Constant<16></div>
<span> 0x562e8bb6bb18: i64 = undef</span><br>
</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
The module compiles fine with LLC. So, I assume that's
not the problem.</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
What might go wrong? Is there a way to initialize the
ORC JIT with the AVX2 option somehow?<br>
</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
This is using LLVM release 12.<br>
</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
Best,</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
Frank</div>
<div
style="font-family:Calibri,Arial,Helvetica,sans-serif;
font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
</div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank"
moz-do-not-send="true">llvm-dev@lists.llvm.org</a><br>
<a
href="https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_llvm-2Ddev&d=DwMFaQ&c=CJqEzB1piLOyyvZjb8YUQw&r=tFpAzszScTWMAFcrGFW5xg&m=iIRT39rMHzg60BQQu6bv5Nzez97Rjf-90P-EHloWvtk&s=BpFT2lRfi7rhmDGQWAkBbHAKDe_9xPQKggZyX5VciuY&e="
rel="noreferrer" target="_blank" moz-do-not-send="true">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote>
</div>
</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
</blockquote>
<pre class="moz-signature" cols="72">--
<a class="moz-txt-link-freetext" href="https://weliveindetail.github.io/blog/about/">https://weliveindetail.github.io/blog/about/</a></pre>
</body>
</html>