<div dir="ltr">On Fri, Jul 8, 2016 at 2:18 PM, David Jones via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div><div><div>For my project, the step of using LLVM to optimize and generate machine code for a module is much slower than everything else. I realize a significant performance improvement if I can do "incremental compilation" and avoid invoking the LLVM code generator if the underlying object has not changed.<br><br></div>My current strategy is as follows: for each module:<br></div>- write bitcode out to "module.bc.new"<br></div>- if "module.bc" exists, then compare (byte-by-byte) with "module.bc.new".  If they match, then skip compilation<br></div>- move "module.bc.new" to "module.bc" (known to be different at this point)<br></div>- generate "module.o" (expensive step)<br><br></div>However, I am finding that occasionally I will write out different bitcode for the same input, which causes gratuitous recompilation.  If I run llvm-dis on "module.bc" and "module.bc.new" in these cases, the output is identical, as expected.<br><br></div>Is it expected that the actual bitcode may change from run to run, perhaps as a result of ASLR?<br></div></div></blockquote><div><br></div><div>If the input is exactly the same, LLVM should generate the same bitcode from run to run.  That said, we don't have very good testing infrastructure for this, so it's possible you're tripping over a bug.<br><br></div><div>Note that llvm-dis by default doesn't print out all the information in a .bc file; try passing "-<span class=""><span class=""></span>preserve-ll-uselistorder<span class="">=true".</span></span></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Is there a better way for me to check that a Module* structure just built is (not) identical to that from a previous run?<br></div></blockquote><div><br></div><div>I don't think so.  It's not really a common operation.  (Compilers which support incremental compilation generally use some other mechanism.)<br><br></div><div>-Eli<br></div></div></div></div>