IR
にpthread_create を呼び出す命令を挿入する必要があるため、新しいスレッドで呼び出すことになってLoopPass
いる引数として実際の関数を渡す必要があります。pthread_create
現在、新しいスレッドで実行する関数を次のように定義しています
Function *worker_func = Function::Create(funcType,
GlobalValue::ExternalLinkage,
"worker_func",
CurrentModule);
pthread_create
そして、次の方法でポインタを取得しました。
Function *func_pthread_create = dyn_cast<Function>(
TheModule->getOrInsertFunction("pthread_create", pthreadCreateTy));
Type*
そして、以下のような引数としての配列を渡す必要がありpthread_create
ます。
Value* pthread_create_call = builder.CreateCall(
func_pthread_create, args, "pthread_create");
引数は次のとおりです。
Value* args[4];
args[0] = pthread_t_ld
args[1] = llvm::Constant::getNullValue(llvm::Type::getInt8Ty(getGlobalContext())->getPointerTo());
args[2] = ??? // supposed to be the pointer to worker_func`
args[3] = llvm::Constant::getNullValue(llvm::Type::getInt8Ty(getGlobalContext())->getPointerTo());
worker_func
では、この関数へのポインターを取得して に渡すにはどうすればよいpthread_create
でしょうか?