<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p><span id="docs-internal-guid-a9667a8e-afef-a470-5109-70bbd65fc474"></span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;">Hi Peter,</span></p>
<br>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;">Thanks a lot for the response. After looking at WholeProgramDevirt
 pass sources and particularly the functions you mentioned, I’m clear how to use llvm type checking intrinsics to solve my problems.</span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;">But when I tried to run the wholeprogramdevirt pass for
 a sample program, I’m not getting the expected results. </span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;">Consider the example from my first email, with slight
 changes, that is: not overriding virtual F in derived class. </span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:11pt;margin-left: 40pt;margin-right: 4pt;">
<span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 0, 136); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">class</span><span style="font-size: 9pt; font-family: Consolas; background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">
 B {</span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:11pt;margin-left: 40pt;margin-right: 4pt;">
<span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 0, 136); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">virtual</span><span style="font-size: 9pt; font-family: Consolas; background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">
</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 0, 136); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">void</span><span style="font-size: 9pt; font-family: Consolas; background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">
 F</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(102, 102, 0); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">()</span><span style="font-size: 9pt; font-family: Consolas; background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">
</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(102, 102, 0); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">{</span><span style="font-size: 9pt; font-family: Consolas; background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">
</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(136, 0, 0); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">// do something }</span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:11pt;margin-left: 40pt;margin-right: 4pt;">
<span style="font-size: 9pt; font-family: Consolas; color: rgb(102, 102, 0); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">};</span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:11pt;margin-left: 40pt;margin-right: 4pt;">
<span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 0, 136); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">class</span><span style="font-size: 9pt; font-family: Consolas; background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">
 D </span><span style="font-size: 9pt; font-family: Consolas; color: rgb(102, 102, 0); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">:</span><span style="font-size: 9pt; font-family: Consolas; background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">
</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 0, 136); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">public</span><span style="font-size: 9pt; font-family: Consolas; background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">
 B {</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(102, 102, 0); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">};</span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:11pt;margin-left: 40pt;margin-right: 4pt;">
<span style="font-size: 9pt; font-family: Consolas; background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">B</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(102, 102, 0); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">*</span><span style="font-size: 9pt; font-family: Consolas; background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">
 d </span><span style="font-size: 9pt; font-family: Consolas; color: rgb(102, 102, 0); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">=</span><span style="font-size: 9pt; font-family: Consolas; background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">
</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 0, 136); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">new</span><span style="font-size: 9pt; font-family: Consolas; background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">
 D</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(102, 102, 0); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">();</span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:11pt;margin-left: 40pt;margin-right: 4pt;">
<span style="font-size: 9pt; font-family: Consolas; background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">d</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(102, 102, 0); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">-></span><span style="font-size: 9pt; font-family: Consolas; background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">F</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(102, 102, 0); background-color: rgb(239, 240, 241); vertical-align: baseline; white-space: pre-wrap;">();</span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;">From the comments in WholeProgramDevirt class I understand
 that the “single implementation devirtualization” should be applied to this example and the indirect call of F should be replaced with the direct call to B::F. However when I run the pass, the indirect call is still there. The reason why no transformation
 is taking place is that DevirtModule::run function along with type test intrinsic tries to also find llvm assume intrinsic, before starting the transformation. But there is no assume intrinsic.
</span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"><br>
</span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;">Do I need to run some other passes to get llvm.assume
 intrinsic generated?</span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"><br>
</span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"><span id="docs-internal-guid-a9667a8e-aff8-1569-71da-306e4ee8b39b"><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;">As
 for now, I’m getting bytecode with:</span></span><br>
</span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span id="docs-internal-guid-a9667a8e-aff5-f527-83a0-7b30bc2fa6db"></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;">clang++ -fvisibility=hidden -flto -fsanitize=cfi -c -emit-llvm
 simple.cpp -o simple.bc</span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;">opt -wholeprogramdevirt simple.bc -o simple_devirt.bc</span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"><br>
</span></p>
<span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;">I'm using llvm 3.9.0.</span></span><br>
<p></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"><br>
</span></span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;">Thanks,</span></span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span><span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;">Anahit.</span></span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left: 36pt;">
<span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"></span></p>
<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left: 36pt;">
<span style="font-size: 11pt; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"><br>
</span></p>
<div></div>
<p></p>
<div style="color: rgb(0, 0, 0);">
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Peter Collingbourne <peter@pcc.me.uk><br>
<b>Sent:</b> Wednesday, April 26, 2017 7:01 PM<br>
<b>To:</b> Hayrapetyan, Anahit<br>
<b>Cc:</b> llvm-dev@lists.llvm.org<br>
<b>Subject:</b> Re: [llvm-dev] Identify virtual function call sites and candidate callees for it</font>
<div> </div>
</div>
<div>
<div dir="ltr">Hi Anahit,
<div><br>
</div>
<div>You may find it useful to take a look at the WholeProgramDevirt pass, it uses the type metadata that was introduced for CFI to identify virtual call sites and candidate callees for devirtualization. See in particular the scanTypeTestUsers and tryFindVirtualCallTargets
 functions.</div>
<div><br>
</div>
<div>Peter</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Wed, Apr 26, 2017 at 9:44 AM, Hayrapetyan, Anahit 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 dir="ltr">
<div id="m_553385167373364753divtagdefaultwrapper" style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<p><span id="m_553385167373364753docs-internal-guid-8c79141e-ab20-a5a5-770c-b74769a63c9f"></span></p>
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap">Hi,</span></p>
<br>
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap">I have an analysis pass which collects information about functions
 based on their call sites. There are problems I’m facing with processing virtual function calls, namely
</span></p>
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt; text-indent:36pt">
<span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap">. How identify virtual call sites in my pass?</span></p>
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt; text-indent:36pt">
<span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap">. How Identify candidate callees for the given virtual call site?</span></p>
<br>
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap">For the following example, the information I want to get would
 be identify call of  F and as a possible callees have both B::F and D::F.</span></p>
<br>
<p dir="ltr" style="line-height:1.2; margin-top:0pt; margin-bottom:11pt; margin-left:40pt; margin-right:4pt">
<span style="font-size:9pt; font-family:Consolas; color:rgb(0,0,136); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">class</span><span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">
 B {</span></p>
<p dir="ltr" style="line-height:1.2; margin-top:0pt; margin-bottom:11pt; margin-left:40pt; margin-right:4pt">
<span style="font-size:9pt; font-family:Consolas; color:rgb(0,0,136); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">virtual</span><span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">
</span><span style="font-size:9pt; font-family:Consolas; color:rgb(0,0,136); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">void</span><span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">
 F</span><span style="font-size:9pt; font-family:Consolas; color:rgb(102,102,0); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">()</span><span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">
</span><span style="font-size:9pt; font-family:Consolas; color:rgb(102,102,0); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">{</span><span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">
</span><span style="font-size:9pt; font-family:Consolas; color:rgb(136,0,0); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">// do something }</span></p>
<p dir="ltr" style="line-height:1.2; margin-top:0pt; margin-bottom:11pt; margin-left:40pt; margin-right:4pt">
<span style="font-size:9pt; font-family:Consolas; color:rgb(102,102,0); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">};</span></p>
<p dir="ltr" style="line-height:1.2; margin-top:0pt; margin-bottom:11pt; margin-left:40pt; margin-right:4pt">
<span style="font-size:9pt; font-family:Consolas; color:rgb(0,0,136); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">class</span><span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">
 D </span><span style="font-size:9pt; font-family:Consolas; color:rgb(102,102,0); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">:</span><span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">
</span><span style="font-size:9pt; font-family:Consolas; color:rgb(0,0,136); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">public</span><span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">
 B {</span></p>
<p dir="ltr" style="line-height:1.2; margin-top:0pt; margin-bottom:11pt; margin-left:40pt; margin-right:4pt">
<span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap"></span><span style="font-size:9pt; font-family:Consolas; color:rgb(0,0,136); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">void</span><span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">
 F</span><span style="font-size:9pt; font-family:Consolas; color:rgb(102,102,0); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">()</span><span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">
</span><span style="font-size:9pt; font-family:Consolas; color:rgb(102,102,0); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">{</span><span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">
</span><span style="font-size:9pt; font-family:Consolas; color:rgb(136,0,0); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">// do something else }</span></p>
<p dir="ltr" style="line-height:1.2; margin-top:0pt; margin-bottom:11pt; margin-left:40pt; margin-right:4pt">
<span style="font-size:9pt; font-family:Consolas; color:rgb(102,102,0); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">};
</span></p>
<p dir="ltr" style="line-height:1.2; margin-top:0pt; margin-bottom:11pt; margin-left:40pt; margin-right:4pt">
<span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">B</span><span style="font-size:9pt; font-family:Consolas; color:rgb(102,102,0); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">*</span><span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">
 d </span><span style="font-size:9pt; font-family:Consolas; color:rgb(102,102,0); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">=</span><span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">
</span><span style="font-size:9pt; font-family:Consolas; color:rgb(0,0,136); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">new</span><span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">
 D</span><span style="font-size:9pt; font-family:Consolas; color:rgb(102,102,0); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">();</span></p>
<p dir="ltr" style="line-height:1.2; margin-top:0pt; margin-bottom:11pt; margin-left:40pt; margin-right:4pt">
<span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">d</span><span style="font-size:9pt; font-family:Consolas; color:rgb(102,102,0); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">-></span><span style="font-size:9pt; font-family:Consolas; background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">F</span><span style="font-size:9pt; font-family:Consolas; color:rgb(102,102,0); background-color:rgb(239,240,241); vertical-align:baseline; white-space:pre-wrap">();</span></p>
<br>
<p dir="ltr" style="line-height:1.2; margin-top:0pt; margin-bottom:11pt; margin-right:4pt">
<span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap">While doing some investigation on my problem, I found about CFI and how it makes use of llvm type.test intrinsic to check validity of
 virtual table pointers. I thought it might be useful. But still am not sure if this would be the correct way to solve the problem and even if it is how extend this approach to get information about potential callees.</span></p>
<p dir="ltr" style="line-height:1.2; margin-top:0pt; margin-bottom:11pt; margin-right:4pt">
<span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap"><span>I would greatly appreciate any ideas or hints on how to solve these problems.</span><span class="HOEnZb"><font color="#888888"><br>
</font></span></span></p>
<span class="HOEnZb"><font color="#888888">
<p dir="ltr" style="line-height:1.2; margin-top:0pt; margin-bottom:11pt; margin-right:4pt">
<span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap">Anahit.</span></p>
<br>
<br>
<p></p>
</font></span></div>
</div>
<br>
______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">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/<wbr>mailman/listinfo/llvm-dev</a><br>
<br>
</blockquote>
</div>
<br>
<br clear="all">
<div><br>
</div>
-- <br>
<div class="gmail_signature">
<div dir="ltr">-- 
<div>Peter</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>