mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-08 22:45:43 +00:00
77 lines
3.3 KiB
Diff
77 lines
3.3 KiB
Diff
From ebe30fd4d4a90219431b6947f233473b2cf518a5 Mon Sep 17 00:00:00 2001
|
|
From: Roland Scheidegger <sroland@vmware.com>
|
|
Date: Thu, 19 Jun 2014 03:27:26 +0200
|
|
Subject: [PATCH 2/2] gallivm: set mcpu when initializing llvm execution engine
|
|
|
|
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.
|
|
|
|
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
|
|
Tested-by: Vinson Lee <vlee@freedesktop.org>
|
|
(cherry picked from commit cad60420d5ea36a4b6fa2e6c91317f71423aa63e)
|
|
---
|
|
src/gallium/auxiliary/gallivm/lp_bld_misc.cpp | 24 ++++++++++++++++++++++--
|
|
1 file changed, 22 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
|
|
index 45c985d..395ac7b 100644
|
|
--- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
|
|
+++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
|
|
@@ -59,6 +59,7 @@
|
|
#include <llvm/ExecutionEngine/JITMemoryManager.h>
|
|
#endif
|
|
#include <llvm/Support/CommandLine.h>
|
|
+#include <llvm/Support/Host.h>
|
|
#include <llvm/Support/PrettyStackTrace.h>
|
|
|
|
#if HAVE_LLVM >= 0x0300
|
|
@@ -309,8 +310,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) {
|
|
@@ -318,9 +319,28 @@ 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
|
|
+
|
|
builder.setJITMemoryManager(JITMemoryManager::CreateDefaultMemManager());
|
|
|
|
ExecutionEngine *JIT;
|
|
+
|
|
#if HAVE_LLVM >= 0x0302
|
|
JIT = builder.create();
|
|
#else
|
|
--
|
|
2.1.0
|
|
|