[llvm-dev] How to get the arguments of a function call in LLVM?

Doerfert, Johannes via llvm-dev llvm-dev at lists.llvm.org
Thu Jan 16 10:29:19 PST 2020


  Hi Abid,

  CallInst has a member getArgOperand(No) which returns the values passed
  at the call site. The code below iterates over function arguments
  instead.

  Cheers,
    Johannes




---------------------------------------
Johannes Doerfert
Researcher

Argonne National Laboratory
Lemont, IL 60439, USA

jdoerfert at anl.gov

________________________________________
From: llvm-dev <llvm-dev-bounces at lists.llvm.org> on behalf of Abid Malik via llvm-dev <llvm-dev at lists.llvm.org>
Sent: Thursday, January 16, 2020 12:11
To: llvm-dev at lists.llvm.org
Subject: [llvm-dev] How to get the arguments of a function call in LLVM?

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 <CallInst> (&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<ConstantInt>(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,

--
Abid M. Malik
******************************************************




More information about the llvm-dev mailing list