<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">I’m looking at pocl and the loop based metadata llvm.loop and llvm.mem.parallel_loop_access, and am hoping someone familiar with it can help with my understanding.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">First, I understand this to be true:<o:p></o:p></p>
<p class="MsoNormal">- llvm.loop doesn’t by itself communicate anything.  It is used by other metadata to anchor that metadata to the loop.<o:p></o:p></p>
<p class="MsoNormal">- if all memory instructions in a loop have the llvm.mem.parallel_loop_access metadata referencing the loop’s llvm.loop metadata, then the loop can be considered ‘parallel’.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Here’s where I have a question:<o:p></o:p></p>
<p class="MsoNormal">- if not all memory instructions in a loop have this metadata, can the compiler still infer that the instructions having this metadata do not have any loop carried dependencies with any other instruction also having this metadata (for the
 common loops referenced by the metadata)?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">If so, it would be nice if we documented the actual meaning of llvm.mem.parallel_loop_access as such.  And the conclusion that a loop is ‘parallel’ if all its memory instructions have this metadata would be a natural consequence of that
 meaning.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">This will allow us to potentially vectorize and/or software pipeline large portions of loops even when some transformation introduces a memory operation whose dependence effects are unknown.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks<o:p></o:p></p>
<p class="MsoNormal">Jon<o:p></o:p></p>
</div>
</body>
</html>