<div dir="ltr">Hi, All<div><br></div><div>I am using MCJIT to compile a expression function and save the JIT compiled object into a ObjectCache using std::map<std::string functionName, llvm::MemoryBuffer> and then it could be reused in the subsequent call to that expression function. However I don't get much performance gain vs. still compile the same function in each call and not to save the compiled object into ObjectCache. One interesting observation in the perf top is that there are many usage on functions under llvm::DenseMapBase. libptcompiler.so is the library contains a llvm helper class and it has the ObjectCache in it. Does the usage make sense to you guys and any suggestion? Thank you. </div><div><br> 1.72%  libptcompiler.so                    [.] bool llvm::DenseMapBase<llvm::DenseMap<void const*, llvm::Pass*, llvm::DenseMapInfo<void const*> >, void const*, llvm::Pass*, llvm::DenseMapInfo<void const*> >::LookupBucketFor<void const<br>  1.45%  libptcompiler.so                    [.] llvm::sys::MemoryFence()<br>  1.20%  libptcompiler.so                    [.] llvm::DenseMapInfo<void const*>::isEqual(void const*, void const*)<br>  1.02%  libptcompiler.so                    [.] bool llvm::DenseMapBase<llvm::DenseMap<void const*, llvm::PassInfo const*, llvm::DenseMapInfo<void const*> >, void const*, llvm::PassInfo const*, llvm::DenseMapInfo<void const*> >::Lookup<br>  0.95%  libptcompiler.so                    [.] llvm::DenseMapInfo<unsigned int>::isEqual(unsigned int const&, unsigned int const&)<br>  0.94%  libptcompiler.so                    [.] llvm::DenseMap<void const*, llvm::Pass*, llvm::DenseMapInfo<void const*> >::getBuckets() const<br>  0.93%  libptcompiler.so                    [.] llvm::PMTopLevelManager::findAnalysisPass(void const*)<br>  0.81%  libptcompiler.so                    [.] llvm::DenseMapIterator<void const*, llvm::Pass*, llvm::DenseMapInfo<void const*>, true>::DenseMapIterator(llvm::DenseMapIterator<void const*, llvm::Pass*, llvm::DenseMapInfo<void const*>,<br>  0.76%  libptcompiler.so                    [.] llvm::DenseMap<void const*, llvm::Pass*, llvm::DenseMapInfo<void const*> >::getNumBuckets() const<br>  0.75%  libptcompiler.so                    [.] llvm::DenseMapBase<llvm::DenseMap<void const*, llvm::Pass*, llvm::DenseMapInfo<void const*> >, void const*, llvm::Pass*, llvm::DenseMapInfo<void const*> >::getBucketsEnd()<br>  0.73%  libptcompiler.so                    [.] llvm::DenseMapIterator<llvm::Pass*, llvm::Pass*, llvm::DenseMapInfo<llvm::Pass*>, false>::AdvancePastEmptyBuckets()<br>  0.72%  libptcompiler.so                    [.] bool llvm::DenseMapBase<llvm::DenseMap<unsigned int, std::pair<unsigned int, unsigned int>, llvm::DenseMapInfo<unsigned int> >, unsigned int, std::pair<unsigned int, unsigned int>, llvm::<br>  0.69%  <a href="http://libpthread-2.12.so">libpthread-2.12.so</a>                  [.] pthread_rwlock_rdlock<br>  0.65%  <a href="http://libc-2.12.so">libc-2.12.so</a>                        [.] _int_malloc<br>  0.61%  <a href="http://libpthread-2.12.so">libpthread-2.12.so</a>                  [.] pthread_rwlock_unlock<br>  0.61%  perf                                [.] 0x000000000005f1dd<br>  0.60%  libptcompiler.so                    [.] llvm::DenseMapInfo<llvm::Pass*>::isEqual(llvm::Pass const*, llvm::Pass const*)<br>  0.57%  libptcompiler.so                    [.] llvm::DenseMapIterator<void const*, llvm::PassInfo const*, llvm::DenseMapInfo<void const*>, true>::DenseMapIterator(llvm::DenseMapIterator<void const*, llvm::PassInfo const*, llvm::DenseM<br>  0.55%  libptcompiler.so                    [.] llvm::DenseMapBase<llvm::DenseMap<void const*, llvm::Pass*, llvm::DenseMapInfo<void const*> >, void const*, llvm::Pass*, llvm::DenseMapInfo<void const*> >::getBuckets()<br>  0.50%  <a href="http://libc-2.12.so">libc-2.12.so</a>                        [.] malloc<br>  0.50%  libptcompiler.so                    [.] llvm::DenseMapBase<llvm::DenseMap<void const*, llvm::Pass*, llvm::DenseMapInfo<void const*> >, void const*, llvm::Pass*, llvm::DenseMapInfo<void const*> >::getNumBuckets() const<br>  0.49%  libptcompiler.so                    [.] llvm::DenseMapIterator<void const*, llvm::Pass*, llvm::DenseMapInfo<void const*>, false>::DenseMapIterator(std::pair<void const*, llvm::Pass*>*, std::pair<void const*, llvm::Pass*>*, bool<br>Press '?' for help on key bindings<br></div><div><div><br></div>-- <br>Best regards<br><br>Cheng
</div></div>