gallivm: fix coroutines on aarch64 with llvm 8
authorDave Airlie <airlied@redhat.com>
Thu, 10 Oct 2019 03:27:30 +0000 (13:27 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 11 Oct 2019 02:15:45 +0000 (12:15 +1000)
The coroutine split pass is missing a dependency before LLVM 9.0,
and fails to initialise properly if the CallGraphWrapperPass hasn't
be initialised earlier (x86 does it due to some of it's passes
requiring it).

This is a workaround for llvm 8 (coroutines are only supported in 8
and higher). It adds another pass that has a dependency on the pass
the coroutines split requires. This pass shouldn't have any raal
effects.

Fixes: d32690b43c9 (gallivm: add coroutine pass manager support)
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
src/gallium/auxiliary/gallivm/lp_bld_init.c

index 19d0d5ab0318f5d7fbf9d8a1d0304029b08b5df2..beffbc552a2726755cb0d5d6f91f03347ffdf314 100644 (file)
@@ -46,6 +46,9 @@
 #endif
 #include <llvm-c/BitWriter.h>
 #if GALLIVM_HAVE_CORO
+#if LLVM_VERSION_MAJOR <= 8 && defined(PIPE_ARCH_AARCH64)
+#include <llvm-c/Transforms/IPO.h>
+#endif
 #include <llvm-c/Transforms/Coroutines.h>
 #endif
 
@@ -134,6 +137,9 @@ create_pass_manager(struct gallivm_state *gallivm)
    }
 
 #if GALLIVM_HAVE_CORO
+#if LLVM_VERSION_MAJOR <= 8 && defined(PIPE_ARCH_AARCH64)
+   LLVMAddFunctionAttrsPass(gallivm->cgpassmgr);
+#endif
    LLVMAddCoroEarlyPass(gallivm->cgpassmgr);
    LLVMAddCoroSplitPass(gallivm->cgpassmgr);
    LLVMAddCoroElidePass(gallivm->cgpassmgr);