radv/ac: workaround regression in llvm 4.0 release
authorDave Airlie <airlied@redhat.com>
Tue, 14 Mar 2017 21:15:50 +0000 (07:15 +1000)
committerDave Airlie <airlied@redhat.com>
Tue, 14 Mar 2017 23:51:53 +0000 (09:51 +1000)
LLVM 4.0 released with a pretty messy regression, that hopefully
get fixed in the future.

This work around was proposed by Tom, and it fixes the CTS regressions
here at least, I'm not sure if this will cause any major side effects,
but correctness over speed and all that.

radeonsi should possibly consider the same workaround until an llvm
fix can be found.

Acked-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/amd/common/ac_llvm_util.c

index a2fe631c00fdf5e282088c045d11079cfa22e87d..3687e98c85f4543911a8ab751e657870b508ddec 100644 (file)
@@ -26,7 +26,7 @@
 #include "ac_llvm_util.h"
 #include "util/bitscan.h"
 #include <llvm-c/Core.h>
-
+#include <llvm-c/Support.h>
 #include "c11/threads.h"
 
 #include <assert.h>
@@ -39,6 +39,17 @@ static void ac_init_llvm_target()
        LLVMInitializeAMDGPUTarget();
        LLVMInitializeAMDGPUTargetMC();
        LLVMInitializeAMDGPUAsmPrinter();
+
+       /*
+        * Workaround for bug in llvm 4.0 that causes image intrinsics
+        * to disappear.
+        * https://reviews.llvm.org/D26348
+        */
+#if HAVE_LLVM >= 0x0400
+       const char *argv[2] = {"mesa", "-simplifycfg-sink-common=false"};
+       LLVMParseCommandLineOptions(2, argv, NULL);
+#endif
+
 }
 
 static once_flag ac_init_llvm_target_once_flag = ONCE_FLAG_INIT;