<div dir="ltr"><div>Hello,</div><div><br></div><div>I recently noticed a performance issue of JIT execution vs native code of the following simple logic which computes the Fibonacci sequence:</div><div><br></div><div>uint64_t fib(int n) {<br>      if (n <= 2) {<br>              return 1;<br>     } else {<br>              return fib(n-1) + fib(n-2);<br>   }<br>}<br></div><div><br></div><div>When compiled natively using clang++ with -O3, it took 0.17s to compute fib(40). However, when executing using LLJIT, fed with the IR output of "clang++ -emit-llvm -O3", it took 0.26s.</div><div><br></div><div>I don't know much about the internals of LLJIT, but my guess is since the IR is the same, maybe LLJIT used a cheaper but lower quality instruction selection pass, resulting in the slower runtime? Could someone working on LLJIT clarify the difference in lowering passes between LLJIT and clang++? And if I were to change this behavior, which APIs should I look at to begin with?<br></div><div><br></div><div>Thanks for your time!</div><div><br></div><div>Best regards,<br></div><div>Haoran</div><div><br></div><div><br></div></div>