diff options
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_misc.cpp | 22 |
1 files 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 38fbe1fc7e5..6bea9648922 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 |