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

Dipanjan Das via llvm-dev llvm-dev at lists.llvm.org
Wed Apr 19 09:05:46 PDT 2017


I want to write an LLVM pass that'll extract the arguments of function
calls. If the argument is a constant one, my objective is to recover what
that constant is.

The IR looks like

    %2 = call noalias i8* @malloc(i64 512) #3

The LLVM pass looks like

    bool runOnFunction(Function &F) override {
        for (auto& B : F) {
            for (auto& I : B) {
                if(CallInst* call_inst = dyn_cast<CallInst>(&I)) {
                    Function* fn = call_inst->getCalledFunction();
                    StringRef fn_name = fn->getName();
                    errs() << fn_name << " : " <<
call_inst->getArgOperand(0) << "\n";
                    for(auto arg = fn->arg_begin(); arg != fn->arg_end();
++arg) {
                        errs() << *arg << "\n";
                    }
                }
            }
        }

        return false;
    }

If I run the pass through `opt`, it produces the following

    malloc : 0x3df3f40
    i64 %0

What does `0x3df3f40` represent? Instead of `164` and `512`, why does it
produce `i64` and `%0`?

-- 

Thanks & Regards,
Dipanjan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170419/6aa99251/attachment.html>


More information about the llvm-dev mailing list