[LLVMdev] strange behaviour after extracting optimization pass code

Gordon Henriksen gordonhenriksen at me.com
Fri Dec 19 06:15:49 PST 2008


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




More information about the llvm-dev mailing list