1 From: Tom Stellard <thomas.stell...@amd.com>
3 LLVM 3.2 and newer requires that the R600/SI backend be part of the
6 configure.ac | 26 +++++++++++++++++++------
7 src/gallium/drivers/radeon/Makefile | 6 ++++++
8 src/gallium/drivers/radeon/Makefile.sources | 7 ++++---
9 src/gallium/drivers/radeon/radeon_llvm_emit.cpp | 1 +
10 4 files changed, 31 insertions(+), 9 deletions(-)</pre><pre>
12 diff --git a/configure.ac b/configure.ac
13 index b83078f..a942621 100644
17 if $LLVM_CONFIG --components | grep -q '\<mcjit\>'; then
18 LLVM_COMPONENTS="${LLVM_COMPONENTS} mcjit"
20 + LLVM_COMPONENTS="${LLVM_COMPONENTS} all-targets"
21 if test "x$enable_opencl" = xyes; then
22 LLVM_COMPONENTS="${LLVM_COMPONENTS} ipo linker instrumentation"
24 @@ -1788,6 +1789,23 @@
28 +radeon_llvm_check() {
29 + LLVM_VERSION_MAJOR=`echo $LLVM_VERSION | cut -d. -f1`
30 + if test "$LLVM_VERSION_MAJOR" -lt "3" -o "x$LLVM_VERSION" = "x3.0"; then
31 + AC_MSG_ERROR([LLVM 3.1 or newer is required for the r600/radeonsi llvm compiler.])
33 + if test "$LLVM_VERSION_MAJOR" -ge "3" -a "x$LLVM_VERSION" != "x3.1" && $LLVM_CONFIG --targets-built | grep -qv '\<AMDGPU\>' ; then
34 + AC_MSG_ERROR([To use the r600/radeonsi LLVM backend with LLVM 3.2 and newer, you need to fetch the LLVM source from:
35 + git://people.freedesktop.org/~tstellar/llvm master
36 + and build with --enable-experimental-targets==AMDGPU])
38 + if test "$LLVM_VERSION" = "3.2"; then
39 + dnl LLVM 3.2 does not add experimental libraries to llvm-config's
41 + LLVM_LIBS="$LLVM_LIBS -lLLVMAMDGPUCodeGen -lLLVMAMDGPUDesc -lLLVMAMDGPUAsmPrinter -lLLVMAMDGPUInfo `$LLVM_CONFIG --libs mc`"
46 dnl Duplicates in GALLIUM_DRIVERS_DIRS are removed by sorting it after this block
47 if test "x$with_gallium_drivers" != x; then
49 gallium_require_drm_loader
50 GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS r600"
51 if test "x$enable_r600_llvm" = xyes -o "x$enable_opencl" = xyes; then
52 - if test "x$LLVM_VERSION" != "x3.1"; then
53 - AC_MSG_ERROR([LLVM 3.1 is required for the r600 llvm compiler.])
56 NEED_RADEON_GALLIUM=yes;
58 if test "x$enable_r600_llvm" = xyes; then
60 PKG_CHECK_MODULES([RADEON], [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
61 gallium_require_drm_loader
62 GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS radeonsi"
63 - if test "x$LLVM_VERSION" != "x3.1"; then
64 - AC_MSG_ERROR([LLVM 3.1 is required to build the radeonsi driver.])
67 NEED_RADEON_GALLIUM=yes;
68 gallium_check_st "radeon/drm" "dri-radeonsi" "xorg-radeonsi" "" "" "vdpau-radeonsi" ""
70 diff --git a/src/gallium/drivers/radeon/Makefile b/src/gallium/drivers/radeon/Makefile
71 index 7f1c613..bcc2646 100644
72 --- a/src/gallium/drivers/radeon/Makefile
73 +++ b/src/gallium/drivers/radeon/Makefile
74 @@ -12,6 +12,12 @@ TBLGEN = $(LLVM_BINDIR)/llvm-tblgen
76 CXXFLAGS+= $(LLVM_CXXFLAGS)
78 +ifeq ($(LLVM_VERSION),3.1)
79 + CPP_SOURCES += $(LLVM_CPP_SOURCES)
81 + CXXFLAGS+= -DEXTERNAL_LLVM
84 include ../../Makefile.template
86 CXXFLAGS := $(filter-out -DDEBUG, $(CXXFLAGS))
87 diff --git a/src/gallium/drivers/radeon/Makefile.sources b/src/gallium/drivers/radeon/Makefile.sources
88 index c5d1207..5e79342 100644
89 --- a/src/gallium/drivers/radeon/Makefile.sources
90 +++ b/src/gallium/drivers/radeon/Makefile.sources
95 -GENERATED_SOURCES := \
96 +LLVM_GENERATED_SOURCES := \
101 AMDGPUGenMCCodeEmitter.inc \
102 AMDGPUGenDFAPacketizer.inc
105 +LLVM_CPP_SOURCES := \
107 AMDILCFGStructurizer.cpp \
110 MCTargetDesc/SIMCCodeEmitter.cpp \
111 MCTargetDesc/R600MCCodeEmitter.cpp \
112 TargetInfo/AMDGPUTargetInfo.cpp \
118 diff --git a/src/gallium/drivers/radeon/radeon_llvm_emit.cpp b/src/gallium/drivers/radeon/radeon_llvm_emit.cpp
119 index 1b67bfe..625b0b4 100644
120 --- a/src/gallium/drivers/radeon/radeon_llvm_emit.cpp
121 +++ b/src/gallium/drivers/radeon/radeon_llvm_emit.cpp
122 @@ -90,6 +90,7 @@ radeon_llvm_compile(LLVMModuleRef M, unsigned char ** bytes,
123 /* XXX: Can we just initialize the AMDGPU target here? */
124 InitializeAllTargets();
125 InitializeAllTargetMCs();
126 + InitializeAllAsmPrinters();
128 LLVMInitializeAMDGPUTargetInfo();
129 LLVMInitializeAMDGPUTarget();
132 Adjusted hacks for R600 rename
135 configure.ac | 12 ++++++------
136 src/gallium/drivers/radeon/radeon_llvm_emit.cpp | 7 +++++++
137 2 files changed, 13 insertions(+), 6 deletions(-)
139 diff --git a/configure.ac b/configure.ac
140 index 228f464..b848503 100644
143 @@ -1794,15 +1794,15 @@
144 if test "$LLVM_VERSION_MAJOR" -lt "3" -o "x$LLVM_VERSION" = "x3.0"; then
145 AC_MSG_ERROR([LLVM 3.1 or newer is required for the r600/radeonsi llvm compiler.])
147 - if test "$LLVM_VERSION_MAJOR" -ge "3" -a "x$LLVM_VERSION" != "x3.1" && $LLVM_CONFIG --targets-built | grep -qv '\<AMDGPU\>' ; then
148 + if test "$LLVM_VERSION_MAJOR" -ge "3" -a "x$LLVM_VERSION" != "x3.1" && $LLVM_CONFIG --targets-built | grep -qv '\<R600\>' ; then
149 AC_MSG_ERROR([To use the r600/radeonsi LLVM backend with LLVM 3.2 and newer, you need to fetch the LLVM source from:
150 git://people.freedesktop.org/~tstellar/llvm master
151 - and build with --enable-experimental-targets==AMDGPU])
152 + and build with --enable-experimental-targets=R600])
154 if test "$LLVM_VERSION" = "3.2"; then
155 dnl LLVM 3.2 does not add experimental libraries to llvm-config's
157 - LLVM_LIBS="$LLVM_LIBS -lLLVMAMDGPUCodeGen -lLLVMAMDGPUDesc -lLLVMAMDGPUAsmPrinter -lLLVMAMDGPUInfo `$LLVM_CONFIG --libs mc`"
158 + LLVM_LIBS="$LLVM_LIBS `$LLVM_CONFIG --libs R600`"
162 diff --git a/src/gallium/drivers/radeon/radeon_llvm_emit.cpp b/src/gallium/drivers/radeon/radeon_llvm_emit.cpp
163 index 21661a0..9914228 100644
164 --- a/src/gallium/drivers/radeon/radeon_llvm_emit.cpp
165 +++ b/src/gallium/drivers/radeon/radeon_llvm_emit.cpp
168 Triple AMDGPUTriple(sys::getDefaultTargetTriple());
170 -#ifdef EXTERNAL_LLVM
171 - /* XXX: Can we just initialize the AMDGPU target here? */
172 - InitializeAllTargets();
173 - InitializeAllTargetMCs();
174 - InitializeAllAsmPrinters();
176 - LLVMInitializeAMDGPUTargetInfo();
177 - LLVMInitializeAMDGPUTarget();
178 - LLVMInitializeAMDGPUTargetMC();
179 - LLVMInitializeAMDGPUAsmPrinter();
181 + LLVMInitializeR600TargetInfo();
182 + LLVMInitializeR600Target();
183 + LLVMInitializeR600TargetMC();
184 + LLVMInitializeR600AsmPrinter();
187 const Target * AMDGPUTarget = TargetRegistry::lookupTarget("r600", err);
191 --- Mesa-9.0.2/src/gallium/drivers/radeon/radeon_llvm_emit.cpp.orig 2013-01-25 22:40:57.939828359 +0100
192 +++ Mesa-9.0.2/src/gallium/drivers/radeon/radeon_llvm_emit.cpp 2013-01-26 07:58:59.045797173 +0100
194 #include <llvm/Support/TargetRegistry.h>
195 #include <llvm/Support/TargetSelect.h>
196 #include <llvm/Support/Threading.h>
197 -#include <llvm/Target/TargetData.h>
198 #include <llvm/Target/TargetMachine.h>
200 #include <llvm/Transforms/Scalar.h>
202 #include <llvm-c/Target.h>
203 +#if HAVE_LLVM < 0x0302
204 +#include <llvm/Target/TargetData.h>
206 +#include <llvm/DataLayout.h>
213 TargetMachine &AMDGPUTargetMachine = *tm.get();
215 +#if HAVE_LLVM < 0x0302
216 PM.add(new TargetData(*AMDGPUTargetMachine.getTargetData()));
218 + PM.add(new DataLayout(*AMDGPUTargetMachine.getDataLayout()));
220 PM.add(createPromoteMemoryToRegisterPass());
221 AMDGPUTargetMachine.setAsmVerbosityDefault(true);
223 --- Mesa-9.0.2/src/gallium/state_trackers/clover/llvm/invocation.cpp.orig 2013-01-22 19:09:32.000000000 +0100
224 +++ Mesa-9.0.2/src/gallium/state_trackers/clover/llvm/invocation.cpp 2013-01-26 08:53:17.405729259 +0100
226 #include <llvm/Support/TargetSelect.h>
227 #include <llvm/Support/MemoryBuffer.h>
228 #include <llvm/Support/PathV1.h>
229 -#include <llvm/Target/TargetData.h>
230 #include <llvm/Transforms/IPO.h>
231 #include <llvm/Transforms/IPO/PassManagerBuilder.h>
232 +#if HAVE_LLVM < 0x0302
233 +#include <llvm/Target/TargetData.h>
235 +#include <llvm/DataLayout.h>
238 #include "pipe/p_state.h"
239 #include "util/u_memory.h"
242 c.getLangOpts().NoBuiltin = true;
243 c.getTargetOpts().Triple = triple;
244 +#if HAVE_LLVM < 0x0302
245 c.getInvocation().setLangDefaults(clang::IK_OpenCL);
247 + c.getInvocation().setLangDefaults(c.getLangOpts(), clang::IK_OpenCL, clang::LangStandard::lang_opencl11);
249 c.createDiagnostics(0, NULL, new clang::TextDiagnosticPrinter(
250 - s_log, c.getDiagnosticOpts()));
252 +#if HAVE_LLVM < 0x0302
253 + c.getDiagnosticOpts()
255 + &c.getDiagnosticOpts()
259 c.getPreprocessorOpts().addRemappedFile(name,
260 llvm::MemoryBuffer::getMemBuffer(source));
262 E = kernel_func->arg_end(); I != E; ++I) {
263 llvm::Argument &arg = *I;
264 llvm::Type *arg_type = arg.getType();
265 +#if HAVE_LLVM < 0x0302
266 llvm::TargetData TD(kernel_func->getParent());
268 + llvm::DataLayout TD(kernel_func->getParent()->getDataLayout());
270 unsigned arg_size = TD.getTypeStoreSize(arg_type);
272 if (llvm::isa<llvm::PointerType>(arg_type) && arg.hasByValAttr()) {
273 --- Mesa-9.0.2/src/gallium/targets/opencl/Makefile.am.orig 2013-01-22 19:09:32.000000000 +0100
274 +++ Mesa-9.0.2/src/gallium/targets/opencl/Makefile.am 2013-01-26 09:32:36.189013426 +0100