<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:12pt">I compile it with clang as follows. It didn't generate "tail call". Should I add some options in clang command?<br><br>// clang -target mips-unknown-linux-gnu -c 1.c -emit-llvm -o 1.bc<br>// llvm-dis 1.bc -o -<br><br>int factorial(int x, int accum) {<br>  if (x == 1)<br>    return accum;<br>  else<br>    return factorial(x-1, accum*x);<br>}<br><br>Jonathan<br><br><div><span><br></span></div><div style="display: block;" class="yahoo_quoted"> <br> <br> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 12pt;"> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 12pt;"> <div dir="ltr"> <font face="Arial" size="2"> Dmitri Gribenko
 <gribozavr@gmail.com> 於 2014/1/1 (週三) 9:06 PM 寫道﹕<br> </font> </div>  <div class="y_msg_container">On Fri, Dec 20, 2013 at 8:04 AM, gamma_chen <<a ymailto="mailto:gamma_chen@yahoo.com.tw" href="mailto:gamma_chen@yahoo.com.tw">gamma_chen@yahoo.com.tw</a>> wrote:<br>> The following recursive example cannot generate "tail call". It generate<br>> "call" only. Anyone knows how to make "tail call"?<br>><br>> // clang -c 1.c -emit-llvm -o 1.bc<br>> // llvm-dis 1.bc -o -<br>><br>> // File 1.c<br>> int factorial(int x)<br>> {<br>>   x--;<br>>   if (x <= 0)<br>>     return 1;<br>>   return x*factorial(x-1);<br><br>This function is not tail-recursive.  A tail-recursive variant would<br>be something like:<br><br>int factorial(int x, int accum) {<br>  if (x == 1)<br>    return accum;<br>  else<br>    return factorial(x-1,
 accum*x);<br>}<br><br>Dmitri<br><br>-- <br>main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if<br>(j){printf("%d\n",i);}}} /*Dmitri Gribenko <<a ymailto="mailto:gribozavr@gmail.com" href="mailto:gribozavr@gmail.com">gribozavr@gmail.com</a>>*/<br><br><br></div>  </div> </div>  </div> </div></body></html>