Hello,
I am using the following to capture the values of the arguments in a call function:
for (auto &BB : F) {
for (auto &II : BB) {
if (CallInst *c = dyn_cast (&II)){
if ( Function *func = c->getCalledFunction()){
if ( func->getName() =="__kmpc_for_static_init_4" ||
func->getName() == “__kmpc_for_static_fini” )
{
errs() << func->getName();
errs() << “\n”;
for(auto arg = func->arg_begin(); arg != func->arg_end(); ++arg) {
errs() << arg << “\n”;
if(auto ci = dyn_cast(arg))
errs() << ci->getValue() << “\n”;
}
}
}
}
}
}
I am looking for two specific calls for OMP in the *.ll file. For the following:
call void @__kmpc_for_static_init_4(%struct.ident_t* @0, i32 %17, i32 34, i32* %8, i32* %5, i32* %6, i32* %7, i32 1, i32 1)
I am able to see it and get the following:
__kmpc_for_static_init_4
%struct.ident_t* %0
i32 %1
i32 %2
i32* %3
i32* %4
i32* %5
i32* %6
i32 %7
i32 %8
The three arguments ( third ( schedule) and the last two; loop increment and chunk size are constant). The innermost loop should get them but it seems the test command fails on these three arguments. Also, the argument variable are different from the actual variable from the *.ll file.
Any comments.
Thanks,