On Wed, Jun 18, 2014 at 6:28 PM, <srol...@vmware.com> wrote: > From: Roland Scheidegger <srol...@vmware.com> > > Previously llvm detected cpu features automatically when the execution engine > was created (based on host cpu). This is no longer the case, which meant llvm > was then not able to emit some of the intrinsics we used as we didn't specify > any sse attributes (only on avx supporting systems this was not a problem > since > despite at least some llvm versions enabling it anyway we always set this > manually). So, instead of trying to figure out which MAttrs to set just set > MCPU. > > This fixes https://bugs.freedesktop.org/show_bug.cgi?id=77493. > --- > src/gallium/auxiliary/gallivm/lp_bld_misc.cpp | 22 ++++++++++++++++++++-- > 1 file changed, 20 insertions(+), 2 deletions(-) > > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp > b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp > index 38fbe1f..6bea964 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp > +++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp > @@ -468,8 +468,8 @@ > lp_build_create_jit_compiler_for_module(LLVMExecutionEngineRef *OutJIT, > /* > * AVX feature is not automatically detected from CPUID by the X86 > target > * yet, because the old (yet default) JIT engine is not capable of > - * emitting the opcodes. But as we're using MCJIT here, it is safe to > - * add set this attribute. > + * emitting the opcodes. On newer llvm versions it is and at least some > + * versions (tested with 3.3) will emit avx opcodes without this > anyway. > */ > MAttrs.push_back("+avx"); > if (util_cpu_caps.has_f16c) { > @@ -478,12 +478,30 @@ > lp_build_create_jit_compiler_for_module(LLVMExecutionEngineRef *OutJIT, > builder.setMAttrs(MAttrs); > } > > +#if HAVE_LLVM >= 0x0305 > + StringRef MCPU = llvm::sys::getHostCPUName(); > + /* > + * The cpu bits are no longer set automatically, so need to set mcpu > manually. > + * Note that the MAttrs set above will be sort of ignored (since we should > + * not set any which would not be set by specifying the cpu anyway). > + * It ought to be safe though since getHostCPUName() should include bits > + * not only from the cpu but environment as well (for instance if it's > safe > + * to use avx instructions which need OS support). According to > + * http://llvm.org/bugs/show_bug.cgi?id=19429 however if I understand this > + * right it may be necessary to specify older cpu (or disable mattrs) > though > + * when not using MCJIT so no instructions are generated which the old JIT > + * can't handle. Not entirely sure if we really need to do anything yet. > + */ > + builder.setMCPU(MCPU); > +#endif > + > ShaderMemoryManager *MM = new ShaderMemoryManager(); > *OutCode = MM->getGeneratedCode(); > > builder.setJITMemoryManager(MM); > > ExecutionEngine *JIT; > + > #if HAVE_LLVM >= 0x0302 > JIT = builder.create(); > #else > -- > 1.9.1 > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
This patch fixes the bug for me. Tested-by: Vinson Lee <v...@freedesktop.org> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev