[LLVMdev] strange behaviour after extracting optimization pass code

Ralf Karrenberg Chareos at gmx.de
Fri Dec 19 07:44:38 PST 2008


Thanks a lot ! :)

Gordon Henriksen schrieb:
> On 2008-12-19, at 06:59, Ralf Karrenberg wrote:
>
>   
>> I am expieriencing strange behaviour of llvm's optimization passes  
>> and I don't understand what I am doing wrong.
>> Basically all I've done is extracting code for optimization of a  
>> llvm-function in a llvm-module and put it into a separate function  
>> for better readability. The original code looks like follows (and  
>> works as expected):
>>     
>
> Hi Ralf,
>
> Your problem is that the ExistingModuleProvider takes ownership of the  
> Module, deleting it when it goes out of scope. You would see the same  
> behavior if you just offset the code with an unnamed block as shown  
> below. The fix is simply to leave the 'mp' variable in the caller so  
> it doesn't go out of scope before you're done with the Module.
>
> — Gordon
>
>   
>> -----------------------------
>>   std::string functionName = "main";
>>   llvm::Module* mod = some arbitrary valid modulepointer;
>>     
> {
>   
>>   llvm::ExistingModuleProvider mp(mod);
>>   llvm::FunctionPassManager fpm(&mp);
>>   fpm.add(new llvm::TargetData(mod));
>>   fpm.add(llvm::createInstructionCombiningPass());
>>   fpm.add(llvm::createReassociatePass());
>>   fpm.add(llvm::createGVNPass());
>>   fpm.add(llvm::createCFGSimplificationPass());
>>   fpm.run(*f);
>>     
> }
>   
>>   //...get execution engine
>>   //... call execEngine->getPointerToFunction()
>>   //... execute function
>>     
>
> _______________________________________________
> 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