<div style="white-space:pre-wrap">I would like a command line option to disable this optimization. That way tests  can still verify that EVEX instructions came out of isel by using -show-mc-encoding.</div><br><div class="gmail_quote"><div dir="ltr">On Wed, Nov 23, 2016 at 5:01 AM Hal Finkel via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_msg"><div style="font-family:arial,helvetica,sans-serif;font-size:10pt;color:#000000" class="gmail_msg"><br class="gmail_msg"><hr id="m_7404997511002967471zwchr" class="gmail_msg"><blockquote style="border-left:2px solid rgb(16,16,255);margin-left:5px;padding-left:5px;color:rgb(0,0,0);font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt" class="gmail_msg"><b class="gmail_msg">From: </b>"Gadi via llvm-dev Haber" <<a href="mailto:llvm-dev@lists.llvm.org" class="gmail_msg" target="_blank">llvm-dev@lists.llvm.org</a>><br class="gmail_msg"><b class="gmail_msg">To: </b><a href="mailto:llvm-dev@lists.llvm.org" class="gmail_msg" target="_blank">llvm-dev@lists.llvm.org</a><br class="gmail_msg"><b class="gmail_msg">Sent: </b>Wednesday, November 23, 2016 5:50:42 AM<br class="gmail_msg"><b class="gmail_msg">Subject: </b>[llvm-dev] RFC: code size reduction in X86 by replacing EVEX with        VEX encoding</blockquote></div></div><div class="gmail_msg"><div style="font-family:arial,helvetica,sans-serif;font-size:10pt;color:#000000" class="gmail_msg"><blockquote style="border-left:2px solid rgb(16,16,255);margin-left:5px;padding-left:5px;color:rgb(0,0,0);font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt" class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">




<div class="m_7404997511002967471WordSection1 gmail_msg">
<p class="MsoNormal gmail_msg">Hi All.</p>
<p class="MsoNormal gmail_msg"> </p>
<p class="MsoNormal gmail_msg">This is an RFC for a proposed target specific X86 optimization for reducing code size in the encoding of AVX-512 instructions when possible.</p>
<p class="MsoNormal gmail_msg"> </p>
<p class="MsoNormal gmail_msg">When the AVX512F instruction set was introduced in X86 it included additional 32 registers of 512bit size each ZMM0 - ZMM31, as well as additional 16 XMM registers XMM16-XMM31 and 16 YMM registers YMM16-YMM31.</p>
<p class="MsoNormal gmail_msg">In order to encode the new registers of 16-31 and the additional instructions, a new encoding prefix called EVEX<span style="color:rgb(31,73,125)" class="gmail_msg">,</span> which extends the existing VEX encoding<span style="color:rgb(31,73,125)" class="gmail_msg">,</span> was introduced
 as shown below:</p>
<p class="MsoNormal gmail_msg"><span style="color:rgb(31,73,125)" class="gmail_msg"> </span></p>
<p class="MsoNormal gmail_msg"><span style="font-size:9.5pt;font-family:Consolas;color:black" class="gmail_msg">The EVEX encoding format:</span></p>
<p class="MsoNormal gmail_msg"><span style="font-size:9.5pt;font-family:Consolas" class="gmail_msg">            EVEX Opcode ModR/M [SIB] [Disp32] / [Disp8*N] [Immediate]</span></p>
<p class="MsoNormal gmail_msg"><span style="font-size:9.5pt;font-family:Consolas" class="gmail_msg"># of bytes: 4    1      1      1      4       / 1         1</span></p>
<p class="MsoNormal gmail_msg"> </p>
<p class="MsoNormal gmail_msg">The existing VEX encoding format:</p>
<p class="MsoNormal gmail_msg"><span style="font-size:9.5pt;font-family:Consolas" class="gmail_msg">            [VEX]   OPCODE ModR/M [SIB] [DISP]   [IMM]</span></p>
<p class="MsoNormal gmail_msg"><span style="font-size:9.5pt;font-family:Consolas" class="gmail_msg"># of bytes: 0,2,3   1      1      0,1   0,1,2,4  0,1</span></p>
<p class="MsoNormal gmail_msg"><span style="font-size:9.5pt;font-family:Consolas;color:green" class="gmail_msg"> </span></p>
<p class="MsoNormal gmail_msg">Note that the EVEX prefix requires 4 bytes whereas the VEX prefix can take only up to 3 bytes.</p>
<p class="MsoNormal gmail_msg">Consequently, for the SKX architecture, many instructions that use only the lower registers of XMM0-XMM15 or YMM0-YMM15, can be encoded by either the EVEX or the VEX format. For such cases, using the VEX encoding results in a code size
 reduction of ~2 bytes even though it is compiled with the AVX512F/AVX512VL features enabled.</p>
<p class="MsoNormal gmail_msg"> </p>
<p class="MsoNormal gmail_msg">For example: “vmovss  %xmm0, 32(%rsp,%rax,4)“, has the following 2 possible encodings:</p>
<p class="MsoNormal gmail_msg"> </p>
<p class="MsoNormal gmail_msg">EVEX encoding (8 bytes long):</p>
<p class="MsoNormal gmail_msg">            62 f1 7e 08 11 44 84 08         vmovss  %xmm0, 32(%rsp,%rax,4)</p>
<p class="MsoNormal gmail_msg"> </p>
<p class="MsoNormal gmail_msg">VEX encoding (6 bytes long):</p>
<p class="MsoNormal gmail_msg">           c5 fa 11 44 84 20                      vmovss  %xmm0, 32(%rsp,%rax,4)</p>
<p class="MsoNormal gmail_msg"> </p>
<p class="MsoNormal gmail_msg">See reported Bugzilla bugs about this proposed optimization:<span style="color:rgb(31,73,125)" class="gmail_msg"></span></p>
<p class="MsoNormal gmail_msg"><span style="color:rgb(31,73,125)" class="gmail_msg"><a href="https://llvm.org/bugs/show_bug.cgi?id=23376" class="gmail_msg" target="_blank">https://llvm.org/bugs/show_bug.cgi?id=23376</a></span></p>
<p class="MsoNormal gmail_msg"><a href="https://llvm.org/bugs/show_bug.cgi?id=29162" class="gmail_msg" target="_blank">https://llvm.org/bugs/show_bug.cgi?id=29162</a></p>
<p class="MsoNormal gmail_msg"> </p>
<p class="MsoNormal gmail_msg">The proposed optimization implementation is to add a table of all EVEX opcodes that can be encoded via VEX in a new header file placed under lib/Target/X86.</p>
<p class="MsoNormal gmail_msg">A new pass is to be added at the pre-emit stage<span id="m_7404997511002967471DWT257" style="color:rgb(31,73,125)" class="gmail_msg">.</span></p></div></blockquote></div></div><div class="gmail_msg"><div style="font-family:arial,helvetica,sans-serif;font-size:10pt;color:#000000" class="gmail_msg"><blockquote style="border-left:2px solid rgb(16,16,255);margin-left:5px;padding-left:5px;color:rgb(0,0,0);font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt" class="gmail_msg"></blockquote>It might be better to have TableGen generate the mapping table for you instead of manually making a table yourself. TableGen has a feature that is specifically designed to make mapping tables like this. For examples, grep for InstrMapping in:<br class="gmail_msg"><br class="gmail_msg">lib/Target/Hexagon/Hexagon.td<br class="gmail_msg">lib/Target/Mips/MipsDSPInstrFormats.td<br class="gmail_msg">lib/Target/Mips/MipsInstrFormats.td<br class="gmail_msg">lib/Target/Mips/Mips32r6InstrFormats.td<br class="gmail_msg">lib/Target/PowerPC/PPC.td<br class="gmail_msg">lib/Target/AMDGPU/SIInstrInfo.td<br class="gmail_msg">lib/Target/AMDGPU/R600Instructions.td<br class="gmail_msg">lib/Target/SystemZ/SystemZInstrFormats.td<br class="gmail_msg">lib/Target/Lanai/LanaiInstrInfo.td<br class="gmail_msg"><br class="gmail_msg">I've used this feature a few times in the PowerPC backend, and it's quite convenient.<br class="gmail_msg"><br class="gmail_msg"> -Hal</div></div><div class="gmail_msg"><div style="font-family:arial,helvetica,sans-serif;font-size:10pt;color:#000000" class="gmail_msg"><br class="gmail_msg"><blockquote style="border-left:2px solid rgb(16,16,255);margin-left:5px;padding-left:5px;color:rgb(0,0,0);font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt" class="gmail_msg"><div class="m_7404997511002967471WordSection1 gmail_msg"><p class="MsoNormal gmail_msg"><span style="color:rgb(31,73,125)" class="gmail_msg"></span></p>
<p class="MsoNormal gmail_msg">No need for special Opt flags, as it is always better to use the reduced VEX encoding when possible.</p>
<p class="MsoNormal gmail_msg"> </p>
<p class="MsoNormal gmail_msg">Thank you for any comments or questions that you may have.</p>
<p class="MsoNormal gmail_msg"><span style="color:rgb(31,73,125)" class="gmail_msg"> </span></p>
<p class="MsoNormal gmail_msg">Sincerely, </p>
<p class="MsoNormal gmail_msg"><span style="color:rgb(31,73,125)" class="gmail_msg"> </span></p>
<p class="MsoNormal gmail_msg">Gadi. </p>
<p class="MsoNormal gmail_msg"> </p>
</div>
<p class="gmail_msg">---------------------------------------------------------------------<br class="gmail_msg">
Intel Israel (74) Limited</p>

<p class="gmail_msg">This e-mail and any attachments may contain confidential material for<br class="gmail_msg">
the sole use of the intended recipient(s). Any review or distribution<br class="gmail_msg">
by others is strictly prohibited. If you are not the intended<br class="gmail_msg">
recipient, please contact the sender and delete all copies.</p><br class="gmail_msg">_______________________________________________<br class="gmail_msg">LLVM Developers mailing list<br class="gmail_msg"><a href="mailto:llvm-dev@lists.llvm.org" class="gmail_msg" target="_blank">llvm-dev@lists.llvm.org</a><br class="gmail_msg"><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br class="gmail_msg"></blockquote><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"></div></div><div class="gmail_msg"><div style="font-family:arial,helvetica,sans-serif;font-size:10pt;color:#000000" class="gmail_msg">-- <br class="gmail_msg"><div class="gmail_msg"><span name="x" class="gmail_msg"></span>Hal Finkel<br class="gmail_msg">Lead, Compiler Technology and Programming Languages<br class="gmail_msg">Leadership Computing Facility<br class="gmail_msg">Argonne National Laboratory<span name="x" class="gmail_msg"></span><br class="gmail_msg"></div></div></div>_______________________________________________<br class="gmail_msg">
LLVM Developers mailing list<br class="gmail_msg">
<a href="mailto:llvm-dev@lists.llvm.org" class="gmail_msg" target="_blank">llvm-dev@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br class="gmail_msg">
</blockquote></div>