[Mesa-dev] [PATCH] gallivm: Disable gallivm to fix build with LLVM 3.6
Jose Fonseca
jfonseca at vmware.com
Wed Sep 24 04:42:24 PDT 2014
On 23/09/14 21:23, Tom Stellard wrote:
> LLVM commit r218316 removes the JITMemoryManager class, which is
> the parent for a seemingly important class in gallivm. In order to
> fix the build, I've wrapped most of lp_bld_misc.cpp in
> if HAVE_LLVM < 0x0306 and modifyed the
> lp_build_create_jit_compiler_for_module() function to return false
> for 3.6 and newer which effectively disables the gallivm functionality.
>
> I realize this is overkill, but I could not come up with a simple
> solution to fix the build.
I don't oppose this until we have a better fix.
> Also, since 3.6 will be the first release
> without the old JIT, it would be really great if we could
> move gallivm to use the C API only for accessing MCJIT. There
> is still time before the 3.6 release to extend the C API in
> case it is missing some functionality that is required by gallivm.
Yes, ideally the C API would suffice.
We're not the only one with similar needs. Webkit has similar needs.
Though they opted by using LLVMCreateSimpleMCJITMemoryManager
https://trac.webkit.org/browser/trunk/Tools/ReducedFTL/ReducedFTL.c#L321
and implemeting the memory manager themselves.
We could do the same. We even have the code for it in
src/gallium/auxiliary/rtasm/rtasm_execmem.* ( And if we add a mutex
we could make this thread safe too, without needing multiple jit
managers around)
The other alternative would be to have another function besides
LLVMCreateSimpleMCJITMemoryManager that would create a standard
LLVMMCJITMemoryManagerRef.
That said, the way we use these things are still a bit in flux. Mathias
has some pending patches. BTW, Mathis, should I submit your patches
for making llvmpipe thread safe? Also, what are your thoughts on this
issue?
Jose
> ---
> src/gallium/auxiliary/gallivm/lp_bld_misc.cpp | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
> index 2fd85a8..1c42e8f 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
> @@ -143,6 +143,7 @@ lp_set_store_alignment(LLVMValueRef Inst,
> llvm::unwrap<llvm::StoreInst>(Inst)->setAlignment(Align);
> }
>
> +#if HAVE_LLVM < 0x0306
>
> /*
> * Delegating is tedious but the default manager class is hidden in an
> @@ -398,6 +399,7 @@ class ShaderMemoryManager : public DelegatingJITMemoryManager {
> llvm::JITMemoryManager *ShaderMemoryManager::TheMM = 0;
> unsigned ShaderMemoryManager::NumUsers = 0;
>
> +#endif
>
> /**
> * Same as LLVMCreateJITCompilerForModule, but:
> @@ -420,6 +422,11 @@ lp_build_create_jit_compiler_for_module(LLVMExecutionEngineRef *OutJIT,
> {
> using namespace llvm;
>
> +#if HAVE_LLVM >= 0x0306
> + *OutError = strdup("MCJIT not supported");
> + return 1;
> +#else
> +
> std::string Error;
> #if HAVE_LLVM >= 0x0306
> EngineBuilder builder(std::unique_ptr<Module>(unwrap(M)));
> @@ -528,6 +535,7 @@ lp_build_create_jit_compiler_for_module(LLVMExecutionEngineRef *OutJIT,
> delete MM;
> *OutError = strdup(Error.c_str());
> return 1;
> +#endif
> }
>
>
> @@ -535,5 +543,7 @@ extern "C"
> void
> lp_free_generated_code(struct lp_generated_code *code)
> {
> +#if HAVE_LLVM < 0x0306
> ShaderMemoryManager::freeGeneratedCode(code);
> +#endif
> }
>
More information about the mesa-dev
mailing list