<html><head></head><body><div class="ydp38c558d1yahoo-style-wrap" style="font-family:verdana, helvetica, sans-serif;font-size:10px;"><div id="ydp38c558d1yiv7099781041"><div><div class="ydp38c558d1yiv7099781041ydp360ec3adyahoo-style-wrap" style="font-family:verdana, helvetica, sans-serif;font-size:10px;"><div><div>Hi Johannes,</div><div><br clear="none"></div><div style="font-family:verdana, helvetica, sans-serif;font-size:10px;" dir="ltr" data-setdir="false"><div dir="ltr" data-setdir="false">Excuse me for the late answer. Regarding the question if the pthread call inserted in the LLVM IR works, I implemented a new function pass and I would like to test the insertion of pthread call all in one, when testing the entire implementation. It is easier for me to do like that.<br></div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">What are the next steps after a pass implementation in llvm before commit? Is there a review process involved also? I haven't tested the implementation (the tests are not straight forward), so I would like to know if, in llvm, the validation is after or before the review? Or maybe both before and after? I am not expecting many changes after the testing.</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">Looking forward for your answer.</div><div dir="ltr" data-setdir="false">Regards,</div><div dir="ltr" data-setdir="false">Iulia<br></div></div></div></div></div></div></div><div class="yiv7099781041yqt9428097642" id="yiv7099781041yqt46008"><div class="yiv7099781041yahoo_quoted" id="yiv7099781041yahoo_quoted_7132951957">
            <div style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;color:#26282a;">
                
                <div>
                    On Monday, April 22, 2019, 5:03:15 PM GMT+3, Doerfert, Johannes <jdoerfert@anl.gov> wrote:
                </div>
                <div><br clear="none"></div>
                <div><br clear="none"></div>
                <div>Hi Iulia,<br clear="none"><br clear="none">The declaration Rob has shared was never part of mainline LLVM (afaik).<br clear="none">The implementation Rob provided should however still work.<br clear="none">Have you tried it?<br clear="none"><br clear="none">There is no need to add/change anything in the machine representation.<br clear="none"><br clear="none">Cheers,<br clear="none">  Johannes<br clear="none"><br clear="none"><br clear="none"><br clear="none">On 04/22, Iulia Stirb via llvm-dev wrote:<br clear="none">> Hello all,<br clear="none">> I am returning to this subject after a while and I was looking for CBuilder::CreatePThreadCreateCall function below. I cannot find it anywere and I guess it has been rename or changed into a more generic one. I would want to insert a phtread call into the input source code. Which builder class to use for that instead of CBuilder class? If I insert the call into IR representation, do I need to insert the call also into machine representation?<br clear="none">> Kind regards,<br clear="none">> ----------------------------------------------------------Iulia ȘTIRBPhD Student in Computer ScienceAssociate Teaching AssistantDepartment of Computers and Software EngineeringPolitehnica University of Timișoara2 Piața Victoriei, Timișoara, Romania, 300006 Tel.: +(40) 76 560 3230E-mail: <a rel="nofollow" shape="rect" ymailto="mailto:iulia.stirb@gmail.com" target="_blank" href="mailto:iulia.stirb@gmail.com">iulia.stirb@gmail.com</a>, <a rel="nofollow" shape="rect" ymailto="mailto:iulia_s24@yahoo.comSkype" target="_blank" href="mailto:iulia_s24@yahoo.comSkype">iulia_s24@yahoo.comSkype</a>: iulia.stirb----------------------------------------------------------<br clear="none">> <br clear="none">> <br clear="none">> <br clear="none">> <br clear="none">>  <br clear="none">> <br clear="none">>     On Saturday, May 6, 2017, 5:58:03 PM GMT+3, Rob Cameron <<a rel="nofollow" shape="rect" ymailto="mailto:cameron@cs.sfu.ca" target="_blank" href="mailto:cameron@cs.sfu.ca">cameron@cs.sfu.ca</a>> wrote:  <br clear="none">>  <br clear="none">>  Hi, Iulia.<br clear="none">> <br clear="none">> You can create calls to pthread routines.  For example, this is a declaration<br clear="none">> in one of our header files.<br clear="none">> <br clear="none">>   //  Create a call to:  int pthread_create(pthread_t *thread, const pthread_attr_t *attr,<br clear="none">>   //                    void *(*start_routine)(void*), void *arg);<br clear="none">>   llvm::Value * CreatePThreadCreateCall(llvm::Value * thread, llvm::Value * attr, <br clear="none">>                                         llvm::Function * start_routine, llvm::Value * arg);<br clear="none">> <br clear="none">> Here is our implementation (mMod is the Module * containing the code we are building).<br clear="none">> <br clear="none">> Value * CBuilder::CreatePThreadCreateCall(Value * thread, Value * attr, Function * start_routine, Value * arg) {<br clear="none">>     Type * const voidPtrTy = getVoidPtrTy();<br clear="none">>     Function * pthreadCreateFunc = mMod->getFunction("pthread_create");<br clear="none">>     if (pthreadCreateFunc == nullptr) {<br clear="none">>         Type * pthreadTy = getSizeTy();<br clear="none">>         FunctionType * funVoidPtrVoidTy = FunctionType::get(getVoidTy(), {getVoidPtrTy()}, false);<br clear="none">>         FunctionType * fty = FunctionType::get(getInt32Ty(), {pthreadTy->getPointerTo(), voidPtrTy, funVoidPtrVoidTy->getPointerTo(), voidPtrTy}, false);<br clear="none">>         pthreadCreateFunc = Function::Create(fty, Function::ExternalLinkage, "pthread_create", mMod);<br clear="none">>         pthreadCreateFunc->setCallingConv(CallingConv::C);<br clear="none">>     }<br clear="none">>     return CreateCall(pthreadCreateFunc, {thread, attr, start_routine, CreatePointerCast(arg, voidPtrTy)});<br clear="none">> }<br clear="none">> <br clear="none">> The actual routine called is determined at link time.  In our case, <br clear="none">> we rely on the ExecutionEngine to dynamically link to the pthread routines <br clear="none">> available on our target platform.  This approach works well for us on both<br clear="none">> Linux and Mac OS.  I don't know what happens with Windows OS.<br clear="none">> <br clear="none">> <br clear="none">> <br clear="none">> ----- On May 6, 2017, at 4:16 AM, Iulia Stirb via llvm-dev <a rel="nofollow" shape="rect" ymailto="mailto:llvm-dev@lists.llvm.org" target="_blank" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a> wrote:<br clear="none">> <br clear="none">> > Hello,<br clear="none">> > I know clang supports -pthread option (here). Does this mean I can call pthread<br clear="none">> > routines inside llvm code and which pthread library is used, the one for Linux<br clear="none">> > OS or the one for Windows?<br clear="none">> > Thank you.Iulia<br clear="none">> > <br clear="none">> > <br clear="none">> > _______________________________________________<br clear="none">> > LLVM Developers mailing list<br clear="none">> > <a rel="nofollow" shape="rect" ymailto="mailto:llvm-dev@lists.llvm.org" target="_blank" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br clear="none">> > <a rel="nofollow" shape="rect" target="_blank" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><div class="yiv7099781041yqt9538407164" id="yiv7099781041yqtfd47410"><br clear="none">>   <br clear="none"><br clear="none">> _______________________________________________<br clear="none">> LLVM Developers mailing list<br clear="none">> <a rel="nofollow" shape="rect" ymailto="mailto:llvm-dev@lists.llvm.org" target="_blank" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a></div><br clear="none">> <a rel="nofollow" shape="rect" target="_blank" href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br clear="none"><br clear="none"><br clear="none">-- <br clear="none"><br clear="none">Johannes Doerfert<br clear="none">Researcher<br clear="none"><br clear="none">Argonne National Laboratory<br clear="none">Lemont, IL 60439, USA<br clear="none"><br clear="none"><a rel="nofollow" shape="rect" ymailto="mailto:jdoerfert@anl.gov" target="_blank" href="mailto:jdoerfert@anl.gov">jdoerfert@anl.gov</a></div>
            </div>
        </div></div></body></html>