Hi,<br><br>We also use DemandedBits for a similar purpose during loop vectorisation (see computeMinimalBitwidths in VectorUtils.cpp). <br><br>James<br><div class="gmail_quote"><div dir="ltr">On Thu, 18 May 2017 at 17:28, Craig Topper 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 dir="ltr">The demanded bits pass is an analysis pass. By itself it won't make any changes to the IR. It is used by other transformation passes that care about this type of information.<div><br></div><div>The main place I know where we look to see if we can perform an operation truncated is in InstCombine. See canEvaluateTruncated in InstCombineCasts.cpp. But I believe we have to be able to completely remove the trunc before we will move it. So we'll need to find something like an earlier sign extend or zero extend that extended from the same type we'd be truncatng to.</div></div><div class="gmail_extra"></div><div class="gmail_extra"><br clear="all"><div><div class="m_-6001963018730961145gmail_signature" data-smartmail="gmail_signature">~Craig</div></div></div><div class="gmail_extra">
<br><div class="gmail_quote">On Thu, May 18, 2017 at 8:04 AM, Raul Garcia via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<div>
<div style="direction:ltr;font-family:Tahoma;color:#000000;font-size:10pt">Hello All,<br>
<br>
<br>
I am trying to understand the demanded-bits pass. The example in the source code (below) seems quite explicit. In the example, only 16 bits from a 32 bit variable in IR are demanded and therefore the variable is truncated to a 16 bit variable.  
<br>
<br>
<pre class="m_-6001963018730961145m_-8943078949469776107fragment"><span class="m_-6001963018730961145m_-8943078949469776107comment">%1 = add i32 %x, %y</span>
<a name="m_-6001963018730961145_m_-8943078949469776107_l00015"></a><span class="m_-6001963018730961145m_-8943078949469776107comment">%2 = trunc i32 %1 to i16</span></pre>
<br>
However I was wondering if  for example, the addition demanded, say 18 bits, would this pass generate a i18 integer variable? I have not done the experiment, but I would like to know beforehand if this is something that this pass can do.<br>
<br>
<br>
Regards,<br>
Raul. <br>
<br>
<br>
</div>
</div>

<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>