[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