Bug 66847

Summary: compilation broken with llvm 3.3
Product: Mesa Reporter: Marc Dietrich <marvin24>
Component: Drivers/Gallium/r600Assignee: Default DRI bug account <dri-devel>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: medium    
Version: 9.1   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:
Attachments: possible fix (untested)
possible fix v2 (untested)

Description Marc Dietrich 2013-07-12 09:21:36 UTC
r600 build is broken in 9.1 (stable branch) when using llvm 3.3 (also stable).

I got it compiling with


0ee3cc5 r600g: Add $(DEFINES) to AM_CXXFLAGS
3a11b9b radeon/llvm: remove uneeded inclusion
1d16c20 radeon/llvm: Fix build with LLVM 3.3

from upstream plus


--- a/src/gallium/drivers/r600/llvm_wrapper.cpp
+++ b/src/gallium/drivers/r600/llvm_wrapper.cpp
@@ -2,11 +2,13 @@
 #include <llvm/ADT/StringRef.h>
 #if HAVE_LLVM < 0x0303
 #include <llvm/LLVMContext.h>
+#include <llvm/Support/IRReader.h>
 #else
 #include <llvm/IR/LLVMContext.h>
+#include <llvm/IRReader/IRReader.h>
+#include <llvm/IR/Module.h>
 #endif
 #include <llvm/PassManager.h>
-#include <llvm/Support/IRReader.h>
 #include <llvm/Support/MemoryBuffer.h>
 #include <llvm/Support/SourceMgr.h>
 #include <llvm/Transforms/IPO.h>

but that doesn't seem to be sufficient because I get a lot of

EE r600_asm.c:2041 r600_bytecode_build - unsupported CF instruction (0xFFFFFFFF)
EE r600_shader.c:160 r600_pipe_shader_create - building bytecode failed !
EE r600_state_common.c:756 r600_shader_select - Failed to build shader variant (type=0) -22
EE r600_asm.c:2041 r600_bytecode_build - unsupported CF instruction (0xFFFFFFFF)
EE r600_shader.c:160 r600_pipe_shader_create - building bytecode failed !
EE r600_state_common.c:756 r600_shader_select - Failed to build shader variant (type=0) -22

messages (this was from glxgears).

I would be great if this could be fixed for Mesa-9.1.5 because many distros will use it.
Comment 1 Andreas Boll 2013-07-12 10:00:46 UTC
The llvm backends of r600g and the radeonsi on mesa 9.1 are only compatible with tstellar's llvm-3.2 branch.

The llvm backends of r600g and the radeonsi on mesa 9.2 should be compatible with the official llvm-3.3 and llvm-3.4. It's not compatible with tstellar's llvm-3.2 branch.

So I think we should abort in configure if someone wants to build mesa 9.1 with enabled llvm backend and llvm != 3.2.
Comment 2 Michel Dänzer 2013-07-12 10:26:05 UTC
(In reply to comment #1)
> So I think we should abort in configure if someone wants to build mesa 9.1
> with enabled llvm backend and llvm != 3.2.

Agreed.
Comment 3 Andreas Boll 2013-07-12 10:48:46 UTC
Created attachment 82362 [details] [review]
possible fix (untested)
Comment 4 Marc Dietrich 2013-07-12 11:01:02 UTC
You should also remove "or newer". Also "master" isn't the right branch (which one is the right?). While you are at it, checking for r600 target isn't enough, because it also needs "host".

I have the feeling that we should disable r600-llvm support in 9.1 release alltogether. I think it was just for testing anyway and likely unstable/lots of bugs still. It also saves distros from compiling some experimental version of llvm.
Comment 5 Andreas Boll 2013-07-12 12:25:50 UTC
(In reply to comment #4)
> You should also remove "or newer". 

Yes, will do.

> Also "master" isn't the right branch
> (which one is the right?).

master is the right branch. See http://cgit.freedesktop.org/~tstellar/llvm

> While you are at it, checking for r600 target
> isn't enough, because it also needs "host".
>

AFAIK the host target is needed for llvmpipe and draw-llvm too.
So a more generic check would be required. But that's stuff for mesa master and should be in a separate commit anyway.

> I have the feeling that we should disable r600-llvm support in 9.1 release
> alltogether. I think it was just for testing anyway and likely unstable/lots
> of bugs still. It also saves distros from compiling some experimental
> version of llvm.

For initial radeonsi support it's required.
The r600g llvm backend isn't enabled by default and the help string says: Enable experimental LLVM backend for graphics shaders.
See http://cgit.freedesktop.org/mesa/mesa/tree/configure.ac?h=9.1#n641
I think that should be enough.
Comment 6 Andreas Boll 2013-07-12 12:29:12 UTC
Created attachment 82365 [details] [review]
possible fix v2 (untested)
Comment 7 Marc Dietrich 2013-07-12 18:39:17 UTC
arr, yes, master is right (I had an unclean tree), and also yes, r600 llvm in mesa is marked experimental and needs to be enabled explicitly, so all is fine - sorry.

Patch looks also fine (tested).
Comment 8 Andreas Boll 2013-07-19 15:27:12 UTC
Fixed with commit 9a287a076803a4b4cb475ec5c067c9a064f11a0d

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.