[LLVMdev] Strange LLVM Crash

Nick Lewycky nicholas at mxc.ca
Sat Mar 14 15:37:15 PDT 2009


Nyx wrote:
> The linkage type is set to external, I have little code snippet I use to
> register those native functions in the first post of this topic. The global
> DCE pass deletes the unused native functions when run. I commented it out
> for now...

Can you make this happen by writing a custom .ll to demonstrate the 
problem? For example:

   $ cat gdce.ll
   define i32 @foo() {
     ret i32 0
   }
   $ llvm-as < gdce.ll | opt -globaldce | llvm-dis
   ; ModuleID = '<stdin>'

   define i32 @foo() {
           ret i32 0
   }

If it happens as you say, you should be able to create a .ll where "opt 
-globaldce" will eliminate your function.

Nick

> 
> 
> Nick Lewycky wrote:
>> Nyx wrote:
>>> Ok, well, I seem to have pinpointed the cause of the problem more
>>> accurately.
>>> I'm running some optimization passes on my module after I compile each
>>> function in my scripting language (functions can be compiled at various
>>> times, when scripts are loaded). Now it seems these optimization passes
>>> will
>>> prune some of the native C++ functions I'm registering in my module (the
>>> functions that haven't been called/used yet). I'd like to find a way to
>>> disable this so that all the native functions I register will stay in the
>>> module.
>> "externally visible" functions should never be deleted. What's the 
>> linkage type on your functions? internal? Don't mark things internal 
>> unless you don't mind if they go away. :)
>>
>> Nick
>>
>>> Here are the optimization passes I'm running:
>>>
>>> 	passManager.add(new llvm::TargetData(s_pModule));
>>> 	passManager.add(llvm::createLowerSetJmpPass());
>>> 	passManager.add(llvm::createRaiseAllocationsPass());
>>> 	passManager.add(llvm::createCFGSimplificationPass());
>>> 	passManager.add(llvm::createPromoteMemoryToRegisterPass());
>>> 	passManager.add(llvm::createGlobalOptimizerPass());
>>> 	passManager.add(llvm::createGlobalDCEPass());
>>> 	passManager.add(llvm::createFunctionInliningPass());
>>>
>>> I would like to know either which pass does this (global optimizer
>>> maybe?)
>>> so I can disable it, or what flag I can set on my C++ function objects to
>>> keep them from being pruned out.
>> _______________________________________________
>> 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