[LLVMdev] JIT: Inlining introduces intrinsics.

Nick Lewycky nicholas at mxc.ca
Thu Nov 24 18:52:11 PST 2011


On 11/24/2011 05:52 PM, Óscar Fuentes wrote:
> Óscar Fuentes<ofv at wanadoo.es>  writes:
>
>>>> If I activate the Inliner pass:
>>>>
>>>>     Builder.Inliner = createFunctionInliningPass(Threshold);
>>>>
>>>> this is the result:
>>>>
>>>> LLVM ERROR: Program used external function 'llvm.lifetime.start' which could not be resolved!
>>>>
>>>> It happens on almost all my test cases, even at -O0.
>>>>
>>>> This JIT compiler does the same as `opt' wrt optimization passes. I'm
>>>> using a LLVM snapshot from approx 4 months ago.
>>>
>>> Yes, the inliner does introduce llvm.lifetime.start... and CodeGen
>>> should eliminate it.  Are you using the interpreter?
>>
>> No, I'm not using the interpreter. Is there any condition that prevents
>> CodeGen from removing those intrinsics?
>>
>>> Otherwise, I have no clue how you could trigger that error.
>>
>> Ok, I'll investigate a bit further. Thanks.
>
> For the record: the cause is that the JIT compiler calls
> getPointerToFunction for all defined functions on the module

Intrinsics are only declared, they have no definition. The JIT may 
codegen functions which call those intrinsics, but that shouldn't cause 
any problems, as codegen should handle them.

Nick

  before
> executing the generated code:
>
>      for (Module::iterator it = M->begin(); it != M->end(); ++it)
>         EE->getPointerToFunction(&*it);
>
>      Function *mf = M->getFunction("mainf");
>
>      EE->runFunction(mf, args);
>
> This is done for establishing a clear distinction between compile time
> and execution time (for benchmarking purposes) and for speeding up the
> whole process, as it is quite faster to generate all code in advance
> than to JIT it as it is found (ExecutionEngine::DisableLazyCompilation
> does not the same thing, as a large part of the code on the real-life
> applications where this compiler works is reachable only through
> pointers.)
>
> _______________________________________________
> 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