[LLVMdev] Best strategy to add a parameter to a function

Ralf Karrenberg Chareos at gmx.de
Sun May 26 23:52:13 PDT 2013

Hi Frank,

I regularly run into problems similar to yours. The only way I got 
around them was always to create a new function with the desired type, 
specify the mapping of the arguments, and use CloneFunctionInto.
Everything but efficient, but at least works reliably.


On 5/22/13 2:27 AM, Frank Winter wrote:
> I am trying to build a function (C++ Builder) and at the same time
> extend its parameter set. Here's what I try to do:
> Value* arg0 = add_param_float("arg0");
> Value* tmp = builder->CreateFAdd(arg0,some_previous_value);
> Value* arg1 = add_param_float("arg1");
> The function add_param_float should add a 'float' parameter to the
> function and return its value. Right now it's implemented like this
> Value* add_param_float() {
>      return new llvm::Argument(
> llvm::Type::getFloatTy(llvm::getGlobalContext()) , param_next() ,
> mainFunc );
> }
> where param_next just figures some new, unused name for the argument and
> mainFunc is the function being built.
> This works to a certain extent. I am seeing issues with certain type
> printers and I assume the way the argument is added to the function is
> not a strictly valid thing to do.
> I guess one cannot change the function type once it's created. (Then
> maybe the constructor of Argument should not be public).
> However, in my setup I need to add new arguments to the function. What
> would be the best way to do it?
> I was thinking of implementing a new function like CloneFunction which
> takes an additional argument that can be added to it. But, is this
> really necessary? Isn't there a simpler, more straight-forward way to do
> this?
> Any help/thoughts is appreciated!
> Frank
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

More information about the llvm-dev mailing list