Modifying modules, function, blocks, etc. is not thread safe within the same context.  In your example code, is the context different in each thread?  Also calls to getPointerToFunction are thread safe in some cases, but not in others.  see this: <a href="http://llvm.org/docs/ProgrammersManual.html#threading">http://llvm.org/docs/ProgrammersManual.html#threading</a><div>
<div><br></div><div>In my own multithreaded JIT, I always hold a lock on the ExecutionEngine when performing code transformation.  For example,</div><div><br></div><div>FunctionPassManager PM(F->getParent());</div><div>
PM.add(....);</div><div>{</div><div>    MutexGuard locked(cg->lock);</div><div>    PM.run(*F);</div><div>}</div><div><br></div><div>where cg is a singleton ExecutionEngine instance that I use throughout my code. Unfortunately this serializes access to all of my transformation passes, but at least it's safe.</div>
<div><br></div><div><br></div><div>-Jeff</div><div><br></div><div><br><div class="gmail_quote">On Mon, Oct 24, 2011 at 7:25 AM, Michael.Kang <span dir="ltr"><<a href="mailto:blackfin.kang@gmail.com">blackfin.kang@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">We try to use llvm to translate and generate the native code in<br>
parallel with multi-thread. But some various<br>
bugs will be triggered. We run the following code in multithread environment:<br>
##################<br>
BasicBlock::Create(_CTX(), "dispatch", cpu->cur_func, 0);<br>
BranchInst::Create(bb_start, label_entry);<br>
cpu->exec_engine->getPointerToFunction<br>
##################3<br>
<br>
And cpu variable is stored for every thread.<br>
<br>
Thanks<br>
MK<br>
<font color="#888888"><br>
--<br>
<a href="http://www.skyeye.org" target="_blank">www.skyeye.org</a><br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</font></blockquote></div><br></div></div>