Support LLVM >= 3.2 on radeonsi and opencl.
authorJohannes Obermayr <johannesobermayr@gmx.de>
Thu, 20 Dec 2012 19:56:17 +0000 (20:56 +0100)
committerTom Stellard <thomas.stellard@amd.com>
Fri, 4 Jan 2013 21:05:09 +0000 (21:05 +0000)
Tom Stellard:
 - Backend now has same name for all LLVM versions
 - Add missing LLVM_VERSION_INT definition

configure.ac
src/gallium/drivers/radeon/radeon_llvm_emit.cpp

index 1294740a482a86bb45fa3b510591f9e2b65b4f65..3b84b1c917e22f4a9fd0e85afbbd4d2ce1ae62fe 100644 (file)
@@ -1677,7 +1677,8 @@ if test "x$enable_gallium_llvm" = xyes; then
 
     if test "x$LLVM_CONFIG" != xno; then
        LLVM_VERSION=`$LLVM_CONFIG --version | sed 's/svn.*//g'`
-       if test "x$with_llvm_shared_libs" = xyes; then
+       LLVM_VERSION_INT=`echo $LLVM_VERSION | sed -e 's/\([[0-9]]\)\.\([[0-9]]\)/\10\2/g'`
+        if test "x$with_llvm_shared_libs" = xyes; then
            dnl We can't use $LLVM_VERSION because it has 'svn' stripped out,
            LLVM_LIBS="-lLLVM-`$LLVM_CONFIG --version`"
        else
@@ -1800,24 +1801,19 @@ gallium_require_drm_loader() {
 radeon_llvm_check() {
     LLVM_REQUIRED_VERSION_MAJOR="3"
     LLVM_REQUIRED_VERSION_MINOR="2"
-    LLVM_AVAILABLE_VERSION_MAJOR=`echo $LLVM_VERSION | cut -d. -f1`
-    LLVM_AVAILABLE_VERSION_MINOR=`echo $LLVM_VERSION | cut -d. -f2`
-    if test "$LLVM_AVAILABLE_VERSION_MAJOR" -lt "$LLVM_REQUIRED_VERSION_MAJOR" -o [ "$LLVM_AVAILABLE_VERSION_MAJOR" -eq "$LLVM_REQUIRED_VERSION_MAJOR" -a "$LLVM_AVAILABLE_VERSION_MINOR" -lt "$LLVM_REQUIRED_VERSION_MINOR" ] ; then
-        AC_MSG_ERROR([LLVM $LLVM_REQUIRED_VERSION_MAJOR.$LLVM_REQUIRED_VERSION_MINOR or newer with AMDGPU target enabled is required.
+    if test "$LLVM_VERSION_INT" -lt "${LLVM_REQUIRED_VERSION_MAJOR}0${LLVM_REQUIRED_VERSION_MINOR}"; then
+        AC_MSG_ERROR([LLVM $LLVM_REQUIRED_VERSION_MAJOR.$LLVM_REQUIRED_VERSION_MINOR or newer with R600 target enabled is required.
                      To use the r600/radeonsi LLVM backend, you need to fetch the LLVM source from:
                      git://people.freedesktop.org/~tstellar/llvm master
-                     and build with --enable-experimental-targets=AMDGPU])
+                     and build with --enable-experimental-targets=R600])
     fi
-    if test true && $LLVM_CONFIG --targets-built | grep -qv '\<AMDGPU\>' ; then
-        AC_MSG_ERROR([LLVM AMDGPU Target not enabled.
-                      To use the r600/radeonsi LLVM backend, you need to fetch the LLVM source from:
-                      git://people.freedesktop.org/~tstellar/llvm master
-                      and build with --enable-experimental-targets=AMDGPU])
+    if test true && $LLVM_CONFIG --targets-built | grep -qv '\<R600\>' ; then
+        AC_MSG_ERROR([LLVM R600 Target not enabled.  You can enable it when building the LLVM
+                      sources with the --enable-experimental-targets=R600
+                      configure flag])
     fi
     AC_MSG_WARN([Please ensure you use the latest llvm tree from git://people.freedesktop.org/~tstellar/llvm master before submitting a bug])
-    if test "x$LLVM_VERSION" = "x3.2"; then
-        LLVM_LIBS="$LLVM_LIBS `$LLVM_CONFIG --libs amdgpu`"
-    fi
+    LLVM_LIBS="$LLVM_LIBS `$LLVM_CONFIG --libs r600`"
 }
 
 dnl Gallium drivers
index 21661a0500204b09d44f9763c3b192d3f1d4732f..b889f029694daecb2405c55471205fd7684a3105 100644 (file)
@@ -89,10 +89,17 @@ radeon_llvm_compile(LLVMModuleRef M, unsigned char ** bytes,
 
    Triple AMDGPUTriple(sys::getDefaultTargetTriple());
 
+#if HAVE_LLVM == 0x0302
    LLVMInitializeAMDGPUTargetInfo();
    LLVMInitializeAMDGPUTarget();
    LLVMInitializeAMDGPUTargetMC();
    LLVMInitializeAMDGPUAsmPrinter();
+#else
+   LLVMInitializeR600TargetInfo();
+   LLVMInitializeR600Target();
+   LLVMInitializeR600TargetMC();
+   LLVMInitializeR600AsmPrinter();
+#endif
 
    std::string err;
    const Target * AMDGPUTarget = TargetRegistry::lookupTarget("r600", err);