<font color="#000000"><font face="verdana,sans-serif">Hi Renato,<br></font></font><div><font class="Apple-style-span" face="verdana, sans-serif"><br></font></div><div><font class="Apple-style-span" face="verdana, sans-serif">I am trying to add a intrinsic call between the similar two instructions which either I'll remove or convert to nop</font><span class="Apple-style-span" style="font-family: verdana, sans-serif; "> in codegen</span><span class="Apple-style-span" style="font-family: verdana, sans-serif; ">.</span></div>

<meta http-equiv="content-type" content="text/html; charset=utf-8"><div><div class="gmail_quote">Does that kind of seem appropriate for the purpose here?</div><div class="gmail_quote"><br></div><div class="gmail_quote">Thanks</div>

<div class="gmail_quote">Daya</div><div class="gmail_quote"><br></div><div class="gmail_quote">On Wed, Jul 6, 2011 at 11:55 AM, Renato Golin <span dir="ltr"><<a href="mailto:renato.golin@arm.com">renato.golin@arm.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">On 6 July 2011 15:57, D S Khudia <<a href="mailto:daya.khudia@gmail.com">daya.khudia@gmail.com</a>> wrote:<br>


> Since I am inserting a new basic block (contains printf statement and<br>
> program exit) which is jumped upon based on the result of<br>
> the comparison, the compiler cannot/shouldnot optimize that away by means of<br>
> DCE or anything else.<br>
<br>
</div>It most certainly can, since the comparison yields always the same<br>
result. The compiler can replace all that by a simple branch to<br>
whatever block always executes.<br>
<div class="im"><br>
<br>
> In the above example even the operands are not same and I guess compiler<br>
> cannot be that smart at -O0. I sense something is wrong with the code<br>
> generation for ARM.<br>
<br>
</div>There're no hard rules stopping any compiler to run DCE or DAG<br>
combining/elimination or whatever when in O0 or any other level.<br>
<div class="im"><br>
<br>
> What other way do you suggest for duplicating since you mentioned I<br>
> shouldn't rely on duplication the way I am doing it?<br>
> Thanks a lot. I really appreciate your help.<br>
<br>
</div>What you need is a way to make sure it won't be optimised away,<br>
possibly even on higher O-levels. You need to add a dependency that<br>
the compiler cannot see through (or is not smart enough at O0 to do<br>
so, at least). Because this is a transient change, as a way to debug<br>
other problems, you're allowed to do ugly stuff.<br>
<br>
For example, you can get a fake offset from an argument, and guarantee<br>
that this is always zero. Or you can add a random offset internally to<br>
one of them, and then compare that one is exactly the offset higher<br>
(or lower) than the other. Or you could pass %a and %b as parameters<br>
and memcopy them in the caller.<br>
<br>
Anything that would make it difficult for the compiler to see that<br>
both are the same would do...<br>
<br>
cheers,<br>
<font color="#888888">--renato<br>
</font></blockquote></div><br></div>