[LLVMdev] How to place call(s) to functions found in other llvm modules ???

Mian M. Hamayun mian-muhammad.hamayun at imag.fr
Thu Sep 1 06:04:49 PDT 2011


Hi Eli,

Yes, you were right. I was doing something like this ... (which doesn't 
work :()

Function* gcd = inMod.getFunction("gcd");	// Get gcd function from the 
input module
...
Function *F_GCD = Function::Create(FT, Function::ExternalLinkage, 
"gcd", mod);	// Add a prototype of the gcd function
...
Value *gcd_val = builder.CreateCall(gcd, args.begin(), args.end(), 
"tmp");		// Add a call to the gcd function.


In fact we don't need to getFunction from the other module.
Just adding a prototype and calling this prototype is sufficient.
Like this ... (this works :))

Function *F_GCD = Function::Create(FT, Function::ExternalLinkage, 
"gcd", mod);	// Add a prototype of the gcd function
...
Value *gcd_val = builder.CreateCall(F_GCD, args.begin(), args.end(), 
"tmp");         // Add a call to the gcd function.


Thanks for you help,
Have a Nice Day !!!
Hamayun

On 08/31/2011 08:11 PM, Eli Friedman wrote:
> On Wed, Aug 31, 2011 at 10:54 AM, Mian M. Hamayun
> <mian-muhammad.hamayun at imag.fr>  wrote:
>> Hi,
>>
>> I tried this as well, using the following line to add function declaration
>> to the caller module.
>>
>> Function::Create(FT, Function::ExternalLinkage, "gcd", mod);
>>
>> Where "FT" is the same as before. And the output produced by the
>> PrintModulePass becomes:
>>
>> ; ModuleID = 'GCDMain'
>>
>> declare i32 @gcd(i32, i32)
>>
>> define i32 @main() {
>> EntryBlock:
>>   %tmp = call i32 @gcd(i32 30, i32 50)
>>   ret i32 %tmp
>> }
>>
>> But it still fails to WriteBitcodeToFile, and produces the same error as
>> before.
>
> If you're still getting the "Referencing function in another module"
> error, the call isn't referring to a declaration in the same module.
>
> -Eli
>


-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3781 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110901/25a2f2cc/attachment.bin>


More information about the llvm-dev mailing list