<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 6 January 2014 15:12, Alp Toker <span dir="ltr"><<a href="mailto:alp@nuanti.com" target="_blank">alp@nuanti.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Pragmas in clang are monolithic with their own parse rules and state management so it's a bit of work. As such it's better to come up with a plan to support different kinds of optimization flags beyond just vectorization that may be needed in future, and ideally to reuse an existing format if a sane one exists.<br>
</blockquote><div><br></div><div>Hi Alp,</div><div><br></div><div>I'd love to re-use pragma optimize, is it implemented already? I have to say, this is well beyond my knowledge in Clang to do it myself, if not.</div><div>
<br></div><div>I'm already out of my way to get the vectorize pragmas in Clang, TBH... :(</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
#pragma clang optimize push<br>
#pragma clang optimize "-vectorize-loops"<br>
    while (...) { }<br>
#pragma clang optimize pop<br></blockquote><div><br></div><div>This will only work for the first pragma, "vectorize on/off".</div><div><br></div><div>We have a list of other pragmas that need implementing, such as:</div>
<div> 1. width(N)</div><div> 2. unroll(N)</div><div> 3. safe-program-order-dist(N)</div><div> 4. safe-any-program-order</div><div> 5. safe-any-order</div><div><br></div><div>The first two are available as metadata already in IR, the rest have not been completely discussed and agreed on their semantics.</div>
<div><br></div><div>We should be able to combine any number of pragmas, with local context overriding global, etc. But this is far too distant in the future. The main target now is to get vectorize, width and unroll done at a loop level, since this is the only thing that is used in IR today.</div>
<div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Or closer to the Microsoft pragma*:<br>

<br>
#pragma clang optimize("vectorize-loops", on)<br>
    while (...) { }<br>
#pragma clang optimize("vectorize-loops", off)<br></blockquote><div><br></div><div>One would hope that, regardless of the syntax, both representation on the AST and therefore in IR, would be exactly the same.</div>
<div><br></div><div>cheers,</div><div>--renato</div></div></div></div>