On 04.10.2016 03:48, Dave Airlie wrote:
From: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>
This adds the basic files for the NIR->LLVM translation layer,
along with some hopefully generic code to load the binary
result, and other helpers required.
The hope is in the future we could share this with an
GL_ARB_spirv implementation or a push to replace TGSI
with NIR in radeonsi.
Indeed. :)
Skimming over this, two remarks:
1. In ac_binary.c, just include sid.h instead of duplicating #defines.
2. There are several files with missing copyright headers -- that's an
absolute no-go.
Two more remarks inline.
Authors: Bas Nieuwenhuizen and Dave Airlie
Signed-off-by: Dave Airlie <airl...@redhat.com>
---
src/amd/common/Makefile.am | 52 +
src/amd/common/Makefile.sources | 26 +
src/amd/common/ac_binary.c | 330 +++
src/amd/common/ac_binary.h | 88 +
src/amd/common/ac_llvm_helper.cpp | 22 +
src/amd/common/ac_llvm_util.c | 117 +
src/amd/common/ac_llvm_util.h | 7 +
src/amd/common/ac_nir_to_llvm.c | 4531 +++++++++++++++++++++++++++++++++++++
src/amd/common/ac_nir_to_llvm.h | 102 +
src/amd/common/ac_radeon_winsys.h | 85 +
10 files changed, 5360 insertions(+)
create mode 100644 src/amd/common/Makefile.am
create mode 100644 src/amd/common/Makefile.sources
create mode 100644 src/amd/common/ac_binary.c
create mode 100644 src/amd/common/ac_binary.h
create mode 100644 src/amd/common/ac_llvm_helper.cpp
create mode 100644 src/amd/common/ac_llvm_util.c
create mode 100644 src/amd/common/ac_llvm_util.h
create mode 100644 src/amd/common/ac_nir_to_llvm.c
create mode 100644 src/amd/common/ac_nir_to_llvm.h
create mode 100644 src/amd/common/ac_radeon_winsys.h
diff --git a/src/amd/common/Makefile.am b/src/amd/common/Makefile.am
new file mode 100644
index 0000000..d711dd9
--- /dev/null
+++ b/src/amd/common/Makefile.am
@@ -0,0 +1,52 @@
+# Copyright © 2016 Bas Nieuwenhuizen
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+include Makefile.sources
+
+AM_CPPFLAGS = \
+ $(VALGRIND_CFLAGS) \
+ $(DEFINES) \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/src \
+ -I$(top_srcdir)/src \
+ -I$(top_builddir)/src/compiler \
+ -I$(top_builddir)/src/compiler/nir \
+ -I$(top_srcdir)/src/compiler \
+ -I$(top_srcdir)/src/mapi \
+ -I$(top_srcdir)/src/mesa \
+ -I$(top_srcdir)/src/mesa/drivers/dri/common \
+ -I$(top_srcdir)/src/gallium/auxiliary \
+ -I$(top_srcdir)/src/gallium/include
+
+AM_CFLAGS = -Wno-override-init -msse2 \
Why the -Wno-override-init? The -msse2 is probably fine, but let's not
leak it to someone who uses r300 on an ancient system...
+ $(VISIBILITY_CFLAGS) \
+ $(PTHREAD_CFLAGS) \
+ $(LLVM_CFLAGS) \
+ $(LIBELF_CFLAGS)
+
+AM_CXXFLAGS = \
+ $(VISIBILITY_CXXFLAGS) \
+ $(MSVC2013_COMPAT_CXXFLAGS) \
+ $(LLVM_CXXFLAGS)
+
+noinst_LTLIBRARIES = libamd_common.la
+
+libamd_common_la_SOURCES = $(AMD_COMPILER_SOURCES)
[snip]
diff --git a/src/amd/common/ac_llvm_helper.cpp
b/src/amd/common/ac_llvm_helper.cpp
new file mode 100644
index 0000000..feafdaf
--- /dev/null
+++ b/src/amd/common/ac_llvm_helper.cpp
@@ -0,0 +1,22 @@
+
+// Workaround http://llvm.org/PR23628
+#if HAVE_LLVM >= 0x0307
+# pragma push_macro("DEBUG")
+# undef DEBUG
+#endif
+
+#include "ac_nir_to_llvm.h"
+#include <llvm-c/Core.h>
+#include <llvm/Target/TargetOptions.h>
+#include <llvm/ExecutionEngine/ExecutionEngine.h>
+
+extern "C" void
+ac_add_attr_dereferenceable(LLVMValueRef val, uint64_t bytes)
+{
+#if HAVE_LLVM >= 0x0306
We only build with LLVM >= 3.6, so drop this check.
Cheers,
Nicolai
+ llvm::Argument *A = llvm::unwrap<llvm::Argument>(val);
+ llvm::AttrBuilder B;
+ B.addDereferenceableAttr(bytes);
+ A->addAttr(llvm::AttributeSet::get(A->getContext(), A->getArgNo() + 1, B));
+#endif
+}
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev