On Tue, Mar 5, 2013 at 9:56 AM, Giacomo Tagliabue <span dir="ltr"><<a href="mailto:giacomo.tag@gmail.com" target="_blank">giacomo.tag@gmail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">That's a good question indeed. I have to do some examinations over the IR, so looking at the AST won't be good for me.<br>For example, I am trying to trigger the ConstProp optimization, but I don't find a case where this is used.<br>

</div></blockquote><div><br></div><div>Perhaps you could generate testcases by putting your values into local variables, and running mem2reg before the optimization pass you want to investigate?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">And also, I always thought that clang codegeneration was as transparent as possible, trying not to interfere with the logic flow of the source code, and leaving the optimizations as business for LLVM. I fear that, besides this example, clang would do other subtle optimizations. What I would like, if it exists, is to use an option to disable them.</div>
</blockquote><div><br></div><div>There is no option to disable constant folding when generating IR. There are some cases where such constant folding is essential in order to produce correct IR -- for instance, for globals in C or constexpr variables in C++, we cannot generate IR which computes the value, we must actually emit the value itself. In other cases, we could emit the expression as a non-constant, but the produced IR is generally not intended to preserve any language-level semantics, so we don't wastefully generate IR we know can be constant-folded. Additionally, the mechanism we use to generate IR does some constant folding itself.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="h5"><div class="gmail_extra"><div class="gmail_quote">On 5 March 2013 11:51, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><p dir="ltr"><br>
On 5 Mar 2013 09:26, "Giacomo Tagliabue" <<a href="mailto:giacomo.tag@gmail.com" target="_blank">giacomo.tag@gmail.com</a>> wrote:<br>
><br>
> Hello,<br>
> let's say I have this function:<br>
><br>
> int main(int argc, char const *argv[])<br>
> {<br>
>   return 10+1;<br>
> }<br>
><br>
> When I compile it with -emit-llvm -S I expect that clang doesn't fold my constant, but if I look at the .s file i see<br>
><br>
> ret i32 11<br>
><br>
> How do I prevent clang to perform folding, or, in general, any kind of optimization?</p>
</div></div><p dir="ltr">Why do you want this? It's possible you would be better served by examining the AST, not the IR.</p>
<p dir="ltr">> Thanks<br>
><br>
> _______________________________________________<br>
> cfe-dev mailing list<br>
> <a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
> </p></blockquote></div></div></div></div></blockquote></div><br>