[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