diff options
| author | Brian Paul <brianp@vmware.com> | 2010-07-29 12:49:12 -0600 | 
|---|---|---|
| committer | Brian Paul <brianp@vmware.com> | 2010-07-29 12:51:45 -0600 | 
| commit | d05cb9f0187984e461b41eb1ba6ca2adf0593c74 (patch) | |
| tree | 0be1dde26a25e4d9e00ea7836a8ecdcb64fc9374 | |
| parent | 8f3fe7e2f0a3ce1a5c45fd204b0105f3b501e641 (diff) | |
llvmpipe: don't call LLVMCreateJITCompiler() twice
Fixes a failed assertion with LLVM 2.6:
<unnamed>::JITResolver::JITResolver(llvm::JIT&): Assertion
`TheJITResolver == 0&&  "Multiple JIT resolvers?"' failed.
Though, not everyone seems to experience this problem.
| -rw-r--r-- | src/gallium/drivers/llvmpipe/lp_test_blend.c | 14 | ||||
| -rw-r--r-- | src/gallium/drivers/llvmpipe/lp_test_conv.c | 14 | ||||
| -rw-r--r-- | src/gallium/drivers/llvmpipe/lp_test_printf.c | 6 | ||||
| -rw-r--r-- | src/gallium/drivers/llvmpipe/lp_test_round.c | 12 | ||||
| -rw-r--r-- | src/gallium/drivers/llvmpipe/lp_test_sincos.c | 13 | 
5 files changed, 14 insertions, 45 deletions
| diff --git a/src/gallium/drivers/llvmpipe/lp_test_blend.c b/src/gallium/drivers/llvmpipe/lp_test_blend.c index 0c95555655..d0389f0cb0 100644 --- a/src/gallium/drivers/llvmpipe/lp_test_blend.c +++ b/src/gallium/drivers/llvmpipe/lp_test_blend.c @@ -37,6 +37,7 @@   */ +#include "gallivm/lp_bld_init.h"  #include "gallivm/lp_bld_type.h"  #include "gallivm/lp_bld_debug.h"  #include "lp_bld_blend.h" @@ -485,8 +486,7 @@ test_one(unsigned verbose,  {     LLVMModuleRef module = NULL;     LLVMValueRef func = NULL; -   LLVMExecutionEngineRef engine = NULL; -   LLVMModuleProviderRef provider = NULL; +   LLVMExecutionEngineRef engine = lp_build_engine;     LLVMPassManagerRef pass = NULL;     char *error = NULL;     blend_test_ptr_t blend_test_ptr; @@ -510,15 +510,6 @@ test_one(unsigned verbose,     }     LLVMDisposeMessage(error); -   provider = LLVMCreateModuleProviderForExistingModule(module); -   if (LLVMCreateJITCompiler(&engine, provider, 1, &error)) { -      if(verbose < 1) -         dump_blend_type(stderr, blend, mode, type); -      fprintf(stderr, "%s\n", error); -      LLVMDisposeMessage(error); -      abort(); -   } -  #if 0     pass = LLVMCreatePassManager();     LLVMAddTargetData(LLVMGetExecutionEngineTargetData(engine), pass); @@ -735,7 +726,6 @@ test_one(unsigned verbose,     LLVMFreeMachineCodeForFunction(engine, func); -   LLVMDisposeExecutionEngine(engine);     if(pass)        LLVMDisposePassManager(pass); diff --git a/src/gallium/drivers/llvmpipe/lp_test_conv.c b/src/gallium/drivers/llvmpipe/lp_test_conv.c index cf41b40581..3ba42bf11a 100644 --- a/src/gallium/drivers/llvmpipe/lp_test_conv.c +++ b/src/gallium/drivers/llvmpipe/lp_test_conv.c @@ -35,6 +35,7 @@  #include "util/u_pointer.h" +#include "gallivm/lp_bld_init.h"  #include "gallivm/lp_bld_type.h"  #include "gallivm/lp_bld_const.h"  #include "gallivm/lp_bld_conv.h" @@ -152,8 +153,7 @@ test_one(unsigned verbose,  {     LLVMModuleRef module = NULL;     LLVMValueRef func = NULL; -   LLVMExecutionEngineRef engine = NULL; -   LLVMModuleProviderRef provider = NULL; +   LLVMExecutionEngineRef engine = lp_build_engine;     LLVMPassManagerRef pass = NULL;     char *error = NULL;     conv_test_ptr_t conv_test_ptr; @@ -203,15 +203,6 @@ test_one(unsigned verbose,     }     LLVMDisposeMessage(error); -   provider = LLVMCreateModuleProviderForExistingModule(module); -   if (LLVMCreateJITCompiler(&engine, provider, 1, &error)) { -      if(verbose < 1) -         dump_conv_types(stderr, src_type, dst_type); -      fprintf(stderr, "%s\n", error); -      LLVMDisposeMessage(error); -      abort(); -   } -  #if 0     pass = LLVMCreatePassManager();     LLVMAddTargetData(LLVMGetExecutionEngineTargetData(engine), pass); @@ -351,7 +342,6 @@ test_one(unsigned verbose,     LLVMFreeMachineCodeForFunction(engine, func); -   LLVMDisposeExecutionEngine(engine);     if(pass)        LLVMDisposePassManager(pass); diff --git a/src/gallium/drivers/llvmpipe/lp_test_printf.c b/src/gallium/drivers/llvmpipe/lp_test_printf.c index 21df83f9d8..62041f0301 100644 --- a/src/gallium/drivers/llvmpipe/lp_test_printf.c +++ b/src/gallium/drivers/llvmpipe/lp_test_printf.c @@ -31,6 +31,7 @@  #include "util/u_pointer.h"  #include "gallivm/lp_bld.h" +#include "gallivm/lp_bld_init.h"  #include "gallivm/lp_bld_printf.h"  #include <llvm-c/Analysis.h> @@ -74,6 +75,7 @@ add_printf_test(LLVMModuleRef module)     lp_build_printf(builder, "hello, world\n");     lp_build_printf(builder, "print 5 6: %d %d\n", LLVMConstInt(LLVMInt32Type(), 5, 0),  				LLVMConstInt(LLVMInt32Type(), 6, 0)); +     LLVMBuildRetVoid(builder);     LLVMDisposeBuilder(builder);     return func; @@ -107,11 +109,15 @@ test_printf(unsigned verbose, FILE *fp, const struct printf_test_case *testcase)     LLVMDisposeMessage(error);     provider = LLVMCreateModuleProviderForExistingModule(module); +#if 0     if (LLVMCreateJITCompiler(&engine, provider, 1, &error)) {        fprintf(stderr, "%s\n", error);        LLVMDisposeMessage(error);        abort();     } +#else +   engine = lp_build_engine; +#endif  #if 0     pass = LLVMCreatePassManager(); diff --git a/src/gallium/drivers/llvmpipe/lp_test_round.c b/src/gallium/drivers/llvmpipe/lp_test_round.c index f571a81a4a..57b0ee5776 100644 --- a/src/gallium/drivers/llvmpipe/lp_test_round.c +++ b/src/gallium/drivers/llvmpipe/lp_test_round.c @@ -31,7 +31,7 @@  #include "util/u_pointer.h"  #include "gallivm/lp_bld.h" -#include "gallivm/lp_bld_printf.h" +#include "gallivm/lp_bld_init.h"  #include "gallivm/lp_bld_arit.h"  #include <llvm-c/Analysis.h> @@ -121,8 +121,7 @@ test_round(unsigned verbose, FILE *fp)  {     LLVMModuleRef module = NULL;     LLVMValueRef test_round = NULL, test_trunc, test_floor, test_ceil; -   LLVMExecutionEngineRef engine = NULL; -   LLVMModuleProviderRef provider = NULL; +   LLVMExecutionEngineRef engine = lp_build_engine;     LLVMPassManagerRef pass = NULL;     char *error = NULL;     test_round_t round_func, trunc_func, floor_func, ceil_func; @@ -145,13 +144,6 @@ test_round(unsigned verbose, FILE *fp)     }     LLVMDisposeMessage(error); -   provider = LLVMCreateModuleProviderForExistingModule(module); -   if (LLVMCreateJITCompiler(&engine, provider, 1, &error)) { -      fprintf(stderr, "%s\n", error); -      LLVMDisposeMessage(error); -      abort(); -   } -  #if 0     pass = LLVMCreatePassManager();     LLVMAddTargetData(LLVMGetExecutionEngineTargetData(engine), pass); diff --git a/src/gallium/drivers/llvmpipe/lp_test_sincos.c b/src/gallium/drivers/llvmpipe/lp_test_sincos.c index 1366ecddcb..e93c1b7859 100644 --- a/src/gallium/drivers/llvmpipe/lp_test_sincos.c +++ b/src/gallium/drivers/llvmpipe/lp_test_sincos.c @@ -30,7 +30,7 @@  #include <stdio.h>  #include "gallivm/lp_bld.h" -#include "gallivm/lp_bld_printf.h" +#include "gallivm/lp_bld_init.h"  #include "gallivm/lp_bld_arit.h"  #include <llvm-c/Analysis.h> @@ -101,8 +101,7 @@ test_sincos(unsigned verbose, FILE *fp)  {     LLVMModuleRef module = NULL;     LLVMValueRef test_sin = NULL, test_cos = NULL; -   LLVMExecutionEngineRef engine = NULL; -   LLVMModuleProviderRef provider = NULL; +   LLVMExecutionEngineRef engine = lp_build_engine;     LLVMPassManagerRef pass = NULL;     char *error = NULL;     test_sincos_t sin_func; @@ -122,13 +121,6 @@ test_sincos(unsigned verbose, FILE *fp)     }     LLVMDisposeMessage(error); -   provider = LLVMCreateModuleProviderForExistingModule(module); -   if (LLVMCreateJITCompiler(&engine, provider, 1, &error)) { -      fprintf(stderr, "%s\n", error); -      LLVMDisposeMessage(error); -      abort(); -   } -  #if 0     pass = LLVMCreatePassManager();     LLVMAddTargetData(LLVMGetExecutionEngineTargetData(engine), pass); @@ -162,7 +154,6 @@ test_sincos(unsigned verbose, FILE *fp)     LLVMFreeMachineCodeForFunction(engine, test_sin);     LLVMFreeMachineCodeForFunction(engine, test_cos); -   LLVMDisposeExecutionEngine(engine);     if(pass)        LLVMDisposePassManager(pass); | 
