Am 20.07.2015 um 19:35 schrieb Tom Stellard: > This fixes crashes in some piglit tests on radeonsi that use the draw > module, and llvmpipe is likely completely broken without this on LLVM > 3.8. Yes, see https://llvm.org/bugs/show_bug.cgi?id=24172
> > This is just a temporary solution. The correct solution will require > creating a TargetMachine during gallivm initialization and pulling the > DataLayout from there. This will be a somewhat invasive change, and it > will need to be validatated on multiple LLVM versions. Reviewed-by: Roland Scheidegger <srol...@vmware.com> > --- > src/gallium/auxiliary/gallivm/lp_bld_init.c | 28 +++++++++++++++++++++++----- > 1 file changed, 23 insertions(+), 5 deletions(-) > > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.c > b/src/gallium/auxiliary/gallivm/lp_bld_init.c > index 384ea86..017d075 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_init.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_init.c > @@ -106,7 +106,6 @@ enum LLVM_CodeGenOpt_Level { > static boolean > create_pass_manager(struct gallivm_state *gallivm) > { > - char *td_str; > assert(!gallivm->passmgr); > assert(gallivm->target); > > @@ -122,10 +121,29 @@ create_pass_manager(struct gallivm_state *gallivm) > // Old versions of LLVM get the DataLayout from the pass manager. > LLVMAddTargetData(gallivm->target, gallivm->passmgr); > > - // New ones from the Module. > - td_str = LLVMCopyStringRepOfTargetData(gallivm->target); > - LLVMSetDataLayout(gallivm->module, td_str); > - free(td_str); > + /* Setting the module's DataLayout to an empty string will cause the > + * ExecutionEngine to copy to the DataLayout string from its target > + * machine to the module. As of LLVM 3.8 the module and the execution > + * engine are required to have the same DataLayout. > + * > + * TODO: This is just a temporary work-around. The correct solution is > + * for gallivm_init_state() to create a TargetMachine and pull the > + * DataLayout from there. Currently, the TargetMachine used by llvmpipe > + * is being implicitly created by the EngineBuilder in > + * lp_build_create_jit_compiler_for_module() > + */ > + > +#if HAVE_LLVM < 0x0308 > + { > + char *td_str; > + // New ones from the Module. > + td_str = LLVMCopyStringRepOfTargetData(gallivm->target); > + LLVMSetDataLayout(gallivm->module, td_str); > + free(td_str); > + } > +#else > + LLVMSetDataLayout(gallivm->module, ""); > +#endif > > if ((gallivm_debug & GALLIVM_DEBUG_NO_OPT) == 0) { > /* These are the passes currently listed in llvm-c/Transforms/Scalar.h, > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev