<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
I think that the __builtin_expect() can only to give hints for better performing branch predicitions.<div>I was thinking about another kind of situation. Usually if I have a function like this (this is only a simple example):</div><div><br></div><div>int foo(int x, int y){</div><div><br></div><div>  if (x > 0 and y>0){</div><div>      return x*y;</div><div>  <span style="font-size: 10pt; ">}</span></div><div>  else {</div><div>      return 0;</div><div>  }</div><div><br></div><div>}<br><br>and the compiler knows that the precondition of the function are (x > 0 && y>0) then it can compile it by simply consider it:</div><div><br></div><div><div>int foo(int x, int y){</div><div><br></div><div>   return x*y;</div><div><br></div><div>}</div><div><br></div>I know it could be dangerous because maybe it will not handle unexpected behavior, but I was wondering if by using some directive like a:</div><div><br></div><div>#pragma assert( <span style="font-size: 10pt; ">(x > 0 && y>0)</span><span style="font-size: 10pt; "> )  /* I know it does not exist pragma assert */</span></div><div><span style="font-size: 10pt; "><br></span></div><div><span style="font-size: 10pt; ">maybe by knowing it the compiler may skip branches or optimize computations (for example if the precondition tell that x==0, and there is a sum or multiplication with x as an operand it can simplify them) in the function code.</span></div><div><span style="font-size: 10pt; "><br></span></div><div><span style="font-size: 10pt; ">Thank you for helping me,</span></div><div><span style="font-size: 10pt; "><br></span></div><div><span style="font-size: 10pt; ">Niko Zarzani</span></div><div><br><div><div id="SkyDrivePlaceholder"></div>> Date: Tue, 23 Oct 2012 05:06:06 +0200<br>> Subject: Re: [LLVMdev] precondition suggestion to LLVM<br>> From: maemarcus@gmail.com<br>> To: koni10@hotmail.it<br>> CC: llvmdev@cs.uiuc.edu<br>> <br>> Hi Niko,<br>> <br>> Do you mean branch prediction, i.e. __builtin_expect [1]? Many<br>> compilers support it, I think clang (LLVM's C/C++ frontend) is among<br>> them.<br>> <br>> - D.<br>> <br>> [1] http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html<br>> <br>> 2012/10/23 Niko Zarzani <koni10@hotmail.it>:<br>> > Hi all,<br>> > Is there any way to tell LLVM some additional information about the<br>> > variables in the code in order to make better optimization?<br>> > For example, if my function has a certain precondition (such as x>0) then it<br>> > will be possible to better optimize the code given that information (which<br>> > the compiler does not know).<br>> > I am new in this field and I don't know if there are ways to tell the<br>> > compiler preconditions (such as by using some preprocessing directives).<br>> > Thank you in advance,<br>> > Niko Zarzani<br>> ><br>> > _______________________________________________<br>> > LLVM Developers mailing list<br>> > LLVMdev@cs.uiuc.edu         http://llvm.cs.uiuc.edu<br>> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev<br>> ><br></div></div>                                    </div></body>
</html>