Gentoo Archives: gentoo-commits

From: Marek Szuba <marecki@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: dev-libs/beignet/, dev-libs/beignet/files/
Date: Fri, 31 Aug 2018 13:27:54
Message-Id: 1535722036.2517438cae9831332178378078fc273cb8ffb466.marecki@gentoo
1 commit: 2517438cae9831332178378078fc273cb8ffb466
2 Author: Marek Szuba <marecki <AT> gentoo <DOT> org>
3 AuthorDate: Fri Aug 31 13:27:16 2018 +0000
4 Commit: Marek Szuba <marecki <AT> gentoo <DOT> org>
5 CommitDate: Fri Aug 31 13:27:16 2018 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2517438c
7
8 dev-libs/beignet: disable optimisations broken on some platforms
9
10 Certain optimisation introduced in 1.3.2 is now known not to work
11 correctly on Skylake and Haswell systems. Upstream has been notified but
12 has yet to respond.
13
14 Upstream-Bug: https://bugs.freedesktop.org/show_bug.cgi?id=102137
15 Closes: https://bugs.gentoo.org/662760
16 Package-Manager: Portage-2.3.40, Repoman-2.3.9
17
18 dev-libs/beignet/beignet-1.3.2-r2.ebuild | 107 +++++++++++++++++++++
19 ...eignet-1.3.2_disable-doNegAddOptimization.patch | 66 +++++++++++++
20 2 files changed, 173 insertions(+)
21
22 diff --git a/dev-libs/beignet/beignet-1.3.2-r2.ebuild b/dev-libs/beignet/beignet-1.3.2-r2.ebuild
23 new file mode 100644
24 index 00000000000..bc69b887c3d
25 --- /dev/null
26 +++ b/dev-libs/beignet/beignet-1.3.2-r2.ebuild
27 @@ -0,0 +1,107 @@
28 +# Copyright 1999-2018 Gentoo Foundation
29 +# Distributed under the terms of the GNU General Public License v2
30 +
31 +EAPI=6
32 +
33 +PYTHON_COMPAT=( python{2_7,3_4,3_5,3_6} )
34 +CMAKE_BUILD_TYPE="Release"
35 +
36 +inherit python-any-r1 cmake-multilib flag-o-matic llvm toolchain-funcs
37 +
38 +DESCRIPTION="OpenCL implementation for Intel GPUs"
39 +HOMEPAGE="https://01.org/beignet"
40 +
41 +LICENSE="LGPL-2.1+"
42 +SLOT="0"
43 +IUSE="ocl-icd ocl20"
44 +
45 +if [[ "${PV}" == "9999" ]]; then
46 + inherit git-r3
47 + EGIT_REPO_URI="https://anongit.freedesktop.org/git/beignet.git"
48 + KEYWORDS=""
49 +else
50 + KEYWORDS="~amd64"
51 + SRC_URI="https://01.org/sites/default/files/${P}-source.tar.gz"
52 + S=${WORKDIR}/Beignet-${PV}-Source
53 +fi
54 +
55 +COMMON="media-libs/mesa[${MULTILIB_USEDEP}]
56 + <sys-devel/clang-6.0.9999:=[${MULTILIB_USEDEP}]
57 + >=x11-libs/libdrm-2.4.70[video_cards_intel,${MULTILIB_USEDEP}]
58 + x11-libs/libXext[${MULTILIB_USEDEP}]
59 + x11-libs/libXfixes[${MULTILIB_USEDEP}]"
60 +RDEPEND="${COMMON}
61 + app-eselect/eselect-opencl"
62 +DEPEND="${COMMON}
63 + ${PYTHON_DEPS}
64 + ocl-icd? ( dev-libs/ocl-icd )
65 + virtual/pkgconfig"
66 +
67 +LLVM_MAX_SLOT=6
68 +
69 +PATCHES=(
70 + "${FILESDIR}"/no-debian-multiarch.patch
71 + "${FILESDIR}"/${PN}-1.3.2_disable-doNegAddOptimization.patch
72 + "${FILESDIR}"/${PN}-1.3.2_cmake-llvm-config-multilib.patch
73 + "${FILESDIR}"/${PN}-1.3.2_llvm6.patch
74 + "${FILESDIR}"/${PN}-1.3.1-oclicd_no_upstream_icdfile.patch
75 + "${FILESDIR}"/${PN}-1.2.0_no-hardcoded-cflags.patch
76 + "${FILESDIR}"/llvm-terminfo.patch
77 +)
78 +
79 +DOCS=(
80 + docs/.
81 +)
82 +
83 +pkg_pretend() {
84 + if [[ ${MERGE_TYPE} != "binary" ]]; then
85 + if tc-is-gcc; then
86 + if [[ $(gcc-major-version) -eq 4 ]] && [[ $(gcc-minor-version) -lt 6 ]]; then
87 + eerror "Compilation with gcc older than 4.6 is not supported"
88 + die "Too old gcc found."
89 + fi
90 + fi
91 + fi
92 +}
93 +
94 +pkg_setup() {
95 + llvm_pkg_setup
96 + python_setup
97 +}
98 +
99 +src_prepare() {
100 + # See Bug #593968
101 + append-flags -fPIC
102 +
103 + cmake-utils_src_prepare
104 + # We cannot run tests because they require permissions to access
105 + # the hardware, and building them is very time-consuming.
106 + cmake_comment_add_subdirectory utests
107 +}
108 +
109 +multilib_src_configure() {
110 + VENDOR_DIR="/usr/$(get_libdir)/OpenCL/vendors/${PN}"
111 +
112 + local mycmakeargs=(
113 + -DCMAKE_INSTALL_PREFIX="${EPREFIX}${VENDOR_DIR}"
114 + -DOCLICD_COMPAT=$(usex ocl-icd)
115 + $(usex ocl20 "" "-DENABLE_OPENCL_20=OFF")
116 + )
117 +
118 + cmake-utils_src_configure
119 +}
120 +
121 +multilib_src_install() {
122 + VENDOR_DIR="/usr/$(get_libdir)/OpenCL/vendors/${PN}"
123 +
124 + cmake-utils_src_install
125 +
126 + insinto /etc/OpenCL/vendors/
127 + echo "${EPREFIX}${VENDOR_DIR}/lib/${PN}/libcl.so" > "${PN}-${ABI}.icd" || die "Failed to generate ICD file"
128 + doins "${PN}-${ABI}.icd"
129 +
130 + dosym "lib/${PN}/libcl.so" "${VENDOR_DIR}"/libOpenCL.so.1
131 + dosym "lib/${PN}/libcl.so" "${VENDOR_DIR}"/libOpenCL.so
132 + dosym "lib/${PN}/libcl.so" "${VENDOR_DIR}"/libcl.so.1
133 + dosym "lib/${PN}/libcl.so" "${VENDOR_DIR}"/libcl.so
134 +}
135
136 diff --git a/dev-libs/beignet/files/beignet-1.3.2_disable-doNegAddOptimization.patch b/dev-libs/beignet/files/beignet-1.3.2_disable-doNegAddOptimization.patch
137 new file mode 100644
138 index 00000000000..ae399b17f05
139 --- /dev/null
140 +++ b/dev-libs/beignet/files/beignet-1.3.2_disable-doNegAddOptimization.patch
141 @@ -0,0 +1,66 @@
142 +--- b/backend/src/backend/gen_insn_selection_optimize.cpp
143 ++++ a/backend/src/backend/gen_insn_selection_optimize.cpp
144 +@@ -74,7 +74,8 @@ namespace gbe
145 + const GenRegister& replacement) :
146 + insn(insn), intermedia(intermedia), replacement(replacement)
147 + {
148 +- assert(insn.opcode == SEL_OP_MOV || insn.opcode == SEL_OP_ADD);
149 ++ assert(insn.opcode == SEL_OP_MOV);
150 ++ assert(&(insn.src(0)) == &replacement);
151 + assert(&(insn.dst(0)) == &intermedia);
152 + this->elements = CalculateElements(intermedia, insn.state.execWidth);
153 + replacementOverwritten = false;
154 +@@ -101,7 +102,6 @@ namespace gbe
155 + void doReplacement(ReplaceInfo* info);
156 + bool CanBeReplaced(const ReplaceInfo* info, const SelectionInstruction& insn, const GenRegister& var);
157 + void cleanReplaceInfoMap();
158 +- void doNegAddOptimization(SelectionInstruction &insn);
159 +
160 + SelectionBlock &bb;
161 + const ir::Liveness::LiveOut& liveout;
162 +@@ -159,13 +159,8 @@ namespace gbe
163 +
164 + void SelBasicBlockOptimizer::addToReplaceInfoMap(SelectionInstruction& insn)
165 + {
166 +- assert(insn.opcode == SEL_OP_MOV || insn.opcode == SEL_OP_ADD);
167 +- GenRegister &src = insn.src(0);
168 +- if (insn.opcode == SEL_OP_ADD) {
169 +- if (src.file == GEN_IMMEDIATE_VALUE)
170 +- src = insn.src(1);
171 +- }
172 +-
173 ++ assert(insn.opcode == SEL_OP_MOV);
174 ++ const GenRegister& src = insn.src(0);
175 + const GenRegister& dst = insn.dst(0);
176 + if (src.type != dst.type || src.file != dst.file)
177 + return;
178 +@@ -254,29 +249,10 @@ namespace gbe
179 +
180 + if (insn.opcode == SEL_OP_MOV)
181 + addToReplaceInfoMap(insn);
182 +-
183 +- doNegAddOptimization(insn);
184 + }
185 + cleanReplaceInfoMap();
186 + }
187 +
188 +- /* LLVM transform Mad(a, -b, c) to
189 +- Add b, -b, 0
190 +- Mad val, a, b, c
191 +- for Gen support negtive modifier, mad(a, -b, c) is native suppoted.
192 +- Also it can be used for the same like instruction sequence.
193 +- Do it just like a: mov b, -b, so it is a Mov operation like LocalCopyPropagation
194 +- */
195 +- void SelBasicBlockOptimizer::doNegAddOptimization(SelectionInstruction &insn) {
196 +- if (insn.opcode == SEL_OP_ADD) {
197 +- GenRegister src0 = insn.src(0);
198 +- GenRegister src1 = insn.src(1);
199 +- if ((src0.negation && src1.file == GEN_IMMEDIATE_VALUE && src1.value.f == 0.0f) ||
200 +- (src1.negation && src0.file == GEN_IMMEDIATE_VALUE && src0.value.f == 0.0f))
201 +- addToReplaceInfoMap(insn);
202 +- }
203 +- }
204 +-
205 + void SelBasicBlockOptimizer::run()
206 + {
207 + for (size_t i = 0; i < MaxTries; ++i) {