<div dir="ltr"><div><font size="4">Hi all:</font></div><font size="4">Thanks for your help, everyone. <span style="color:rgb(0,0,0);font-family:Calibri,Arial,Helvetica,sans-serif">getInstructionCost  and llvm-mca is helpful for me. I will test it later.</span></font><div><font color="#000000" face="Calibri, Arial, Helvetica, sans-serif"><span style="font-size:16px"><br></span></font><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Finkel, Hal J. <<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>> 于2019年5月14日周二 上午12:57写道:<br></div><blockquote class="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)">
We have an interface for estimating this, although it depends on the targets providing appropriate information through the TargetTransformInfo interface.</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)">
Call TTI->getInstructionCost with the kind parameter set to TCK_Latency.</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)">
 -Hal</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div id="m_-1460415323314770825gmail-m_8336114721775752560Signature">
<div class="m_-1460415323314770825gmail-m_8336114721775752560BodyFragment"><font size="2"><span style="font-size:10pt">
<div class="m_-1460415323314770825gmail-m_8336114721775752560PlainText">Hal Finkel<br>
Lead, Compiler Technology and Programming Languages<br>
Leadership Computing Facility<br>
Argonne National Laboratory</div>
</span></font></div>
<div>
<div id="m_-1460415323314770825gmail-m_8336114721775752560appendonsend"></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<hr style="display:inline-block;width:98%">
<div id="m_-1460415323314770825gmail-m_8336114721775752560divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>> on behalf of Matt Davis via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Sent:</b> Monday, May 13, 2019 10:04 AM<br>
<b>To:</b> Duan Bing; LLVM Developers Mailing List<br>
<b>Subject:</b> Re: [llvm-dev] How shall I evaluate the latency of each instruction in LLVM IR?</font>
<div> </div>
</div>
<div lang="EN-US">
<div class="m_-1460415323314770825gmail-m_8336114721775752560x_WordSection1">
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
Hi Duan,</p>
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
 </p>
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
It sounds like you might be interested in llvm’s  Machine Code Analyzer.  It’s an llvm tool that can calculate reciprocal throughput by simulating an out-of-order instruction pipeline.   It also provides other useful cycle information:</p>
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
<a href="https://llvm.org/docs/CommandGuide/llvm-mca.html" target="_blank">https://llvm.org/docs/CommandGuide/llvm-mca.html</a></p>
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
 </p>
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
Your question asks about IR.  llvm-mca currently only works on assembly.  However, you can easily generate assembly from IR or make use of MCA as a library.   I suggest just converting your IR to assembly and running that through llvm-mca.</p>
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
 </p>
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
MCA is built on LLVM instruction scheduling information which contains cycle latency information.   If you’re curious of what that data looks like, outside of MCA,  take a peek at the X86 instruction scheduling information located around:  ‘llvm/lib/Target/X86/X86Schedule.td’</p>
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
 </p>
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
-Matt</p>
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
 </p>
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
 </p>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(181,196,223);padding:3pt 0in 0in">
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
<b><span style="font-size:12pt;color:black">From: </span></b><span style="font-size:12pt;color:black">llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>> on behalf of Duan Bing via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Reply-To: </b>Duan Bing <<a href="mailto:hibduan@gmail.com" target="_blank">hibduan@gmail.com</a>><br>
<b>Date: </b>Sunday, May 12, 2019 at 6:59 PM<br>
<b>To: </b>LLVM Developers Mailing List <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Subject: </b>[llvm-dev] How shall I evaluate the latency of each instruction in LLVM IR?</span></p>
</div>
<div>
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
 </p>
</div>
<div>
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
Inspired by <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__www.agner.org_optimize_instruction-5Ftables.pdf&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=UilupKr8sbkenSLlythLNg&m=DWhb3uSjfkI09NsIvzdD_gqnlaI7VN0NpDYUdEvguDw&s=g7xcpplySDXjLzySPYQQjj3BbmDZdSgQtcKxwgCOh9s&e=" target="_blank">https://www.agner.org/optimize/instruction_tables.pdf</a>, 
 which gives us the latency and reciprocal throughput of each instruction in the different architecture of X86, Is there anybody taking the effort to do a similar job for LLVM IR? 
</p>
<div>
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
 </p>
</div>
<div>
<p class="m_-1460415323314770825gmail-m_8336114721775752560x_MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">
Thanks!</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

</blockquote></div></div></div>