]> git.pld-linux.org Git - packages/beignet.git/blame - beignet-llvm10-support.patch
- merged some Debian patches
[packages/beignet.git] / beignet-llvm10-support.patch
CommitLineData
7d3d7cb5
JB
1*Does not work - not in use*
2
3Description: Add LLVM 10 support
4
5Remove -std=c++0x, as LLVM 10 requires at least c++14 (the default)
6Note that this triggers a gcc bug, so build with clang
7https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93299
8
9BasicBlockPass no longer exists; as they suggest, replace it with
10FunctionPass with a loop over BasicBlocks
11https://github.com/llvm/llvm-project/commit/9f0ff0b2634bab6a5be8dace005c9eb24d386dd1#diff-bddbe5e4c647cb67298584000b67dea1
12Return true from IntrinsicLoweringPass as it can modify its input
13(possibly a bug before?)
14
15setAlignment now takes a MaybeAlign not a uint
16
17Don't call initializeDominatorTreeWrapperPassPass and
18initializeLoopInfoWrapperPassPass, as they no longer exist
19
20Add explicit template initialization to avoid an undefined symbol
21
22###does not work###
23Pass clang libs as a single string to prevent them being converted
24to -Wl,-Bstatic -lclang... -Wl,-Bdynamic, as that causes a
25multiply defined options crash when run
26(multiple dynamic LLVMs??)
27builtin_acos_float()clang (LLVM option parsing): for the --pgo-warn-misexpect option: may only occur zero or one times!
28
29
30#--- a/CMake/FindLLVM.cmake
31#+++ b/CMake/FindLLVM.cmake
32#@@ -120,11 +120,14 @@ macro(add_one_lib name)
33# endif (LLVM_SYSTEM_LIBS_ORIG)
34# endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
35#
36#+#something harmless because whitespace at start is an error
37#+set(CLANG_LIBRARIES "-ldl")
38# macro(add_one_lib name)
39# FIND_LIBRARY(CLANG_LIB
40# NAMES ${name}
41# PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
42#- set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
43#+ set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
44#+ message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
45# unset(CLANG_LIB CACHE)
46# endmacro()
47#
48#--- a/CMakeLists.txt
49#+++ b/CMakeLists.txt
50#@@ -79,7 +78,7 @@ elseif (COMPILER STREQUAL "CLANG")
51# elseif (COMPILER STREQUAL "ICC")
52# set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS} -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
53# endif ()
54#-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
55#+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
56# set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
57# set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g -DGBE_DEBUG=1")
58# set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
59--- beignet-1.3.2.orig/backend/src/backend/program.cpp
60+++ beignet-1.3.2/backend/src/backend/program.cpp
61@@ -695,8 +695,12 @@ namespace gbe {
62 );
63
64 clang::CompilerInvocation::CreateFromArgs(*CI,
65+#if LLVM_VERSION_MAJOR < 10
66 &args[0],
67 &args[0] + args.size(),
68+#else
69+ clang::ArrayRef<const char*>(args),
70+#endif
71 Diags);
72 // Create the compiler instance
73 clang::CompilerInstance Clang;
74@@ -1248,8 +1252,12 @@ EXTEND_QUOTE:
75 // Create the compiler invocation
76 std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
77 return clang::CompilerInvocation::CreateFromArgs(*CI,
78+#if LLVM_VERSION_MAJOR < 10
79 &args[0],
80 &args[0] + args.size(),
81+#else
82+ clang::ArrayRef<const char*>(args),
83+#endif
84 Diags);
85 }
86 #endif
87--- beignet-1.3.2.orig/backend/src/llvm/llvm_gen_backend.hpp
88+++ beignet-1.3.2/backend/src/llvm/llvm_gen_backend.hpp
89@@ -130,10 +130,10 @@ namespace gbe
90 llvm::FunctionPass *createGenPass(ir::Unit &unit);
91
92 /*! Remove the GEP instructions */
93- llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
94+ llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
95
96 /*! Merge load/store if possible */
97- llvm::BasicBlockPass *createLoadStoreOptimizationPass();
98+ llvm::FunctionPass *createLoadStoreOptimizationPass();
99
100 /*! Scalarize all vector op instructions */
101 llvm::FunctionPass* createScalarizePass();
102@@ -141,7 +141,7 @@ namespace gbe
103 llvm::ModulePass* createBarrierNodupPass(bool);
104
105 /*! Convert the Intrinsic call to gen function */
106- llvm::BasicBlockPass *createIntrinsicLoweringPass();
107+ llvm::FunctionPass *createIntrinsicLoweringPass();
108
109 /*! Passer the printf function call. */
110 llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
111--- beignet-1.3.2.orig/backend/src/llvm/llvm_intrinsic_lowering.cpp
112+++ beignet-1.3.2/backend/src/llvm/llvm_intrinsic_lowering.cpp
113@@ -29,12 +29,12 @@
114 using namespace llvm;
115
116 namespace gbe {
117- class InstrinsicLowering : public BasicBlockPass
118+ class InstrinsicLowering : public FunctionPass
119 {
120 public:
121 static char ID;
122 InstrinsicLowering() :
123- BasicBlockPass(ID) {}
124+ FunctionPass(ID) {}
125
126 void getAnalysisUsage(AnalysisUsage &AU) const {
127
128@@ -93,9 +93,9 @@ namespace gbe {
129 CI->eraseFromParent();
130 return NewCI;
131 }
132- virtual bool runOnBasicBlock(BasicBlock &BB)
133+ virtual bool runOnFunction(Function &F)
134 {
135- bool changedBlock = false;
136+ for (BasicBlock &BB : F) {
137 Module *M = BB.getParent()->getParent();
138
139 DataLayout TD(M);
140@@ -159,13 +159,14 @@ namespace gbe {
141 }
142 }
143 }
144- return changedBlock;
145+ }
146+ return true;
147 }
148 };
149
150 char InstrinsicLowering::ID = 0;
151
152- BasicBlockPass *createIntrinsicLoweringPass() {
153+ FunctionPass *createIntrinsicLoweringPass() {
154 return new InstrinsicLowering();
155 }
156 } // end namespace
157--- beignet-1.3.2.orig/backend/src/llvm/llvm_loadstore_optimization.cpp
158+++ beignet-1.3.2/backend/src/llvm/llvm_loadstore_optimization.cpp
159@@ -26,13 +26,13 @@
160
161 using namespace llvm;
162 namespace gbe {
163- class GenLoadStoreOptimization : public BasicBlockPass {
164+ class GenLoadStoreOptimization : public FunctionPass {
165
166 public:
167 static char ID;
168 ScalarEvolution *SE;
169 const DataLayout *TD;
170- GenLoadStoreOptimization() : BasicBlockPass(ID) {}
171+ GenLoadStoreOptimization() : FunctionPass(ID) {}
172
173 void getAnalysisUsage(AnalysisUsage &AU) const {
174 #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
175@@ -45,7 +45,9 @@ namespace gbe {
176 AU.setPreservesCFG();
177 }
178
179- virtual bool runOnBasicBlock(BasicBlock &BB) {
180+ virtual bool runOnFunction(Function &F) {
181+ bool changedAnyBlock = false;
182+ for (BasicBlock &BB : F) {
183 #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
184 SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
185 #else
186@@ -59,7 +61,9 @@ namespace gbe {
187 #else
188 TD = getAnalysisIfAvailable<DataLayout>();
189 #endif
190- return optimizeLoadStore(BB);
191+ changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
192+ }
193+ return changedAnyBlock;
194 }
195 Type *getValueType(Value *insn);
196 Value *getPointerOperand(Value *I);
197@@ -148,7 +152,11 @@ namespace gbe {
198 values.push_back(merged[i]);
199 }
200 LoadInst *ld = cast<LoadInst>(merged[0]);
201+#if LLVM_VERSION_MAJOR < 10
202 unsigned align = ld->getAlignment();
203+#else
204+ MaybeAlign align = ld->getAlign();
205+#endif
206 unsigned addrSpace = ld->getPointerAddressSpace();
207 // insert before first load
208 Builder.SetInsertPoint(ld);
209@@ -231,7 +239,11 @@ namespace gbe {
210
211 unsigned addrSpace = st->getPointerAddressSpace();
212
213+#if LLVM_VERSION_MAJOR < 10
214 unsigned align = st->getAlignment();
215+#else
216+ MaybeAlign align = st->getAlign();
217+#endif
218 // insert before the last store
219 Builder.SetInsertPoint(merged[size-1]);
220
221@@ -325,7 +337,7 @@ namespace gbe {
222 return changed;
223 }
224
225- BasicBlockPass *createLoadStoreOptimizationPass() {
226+ FunctionPass *createLoadStoreOptimizationPass() {
227 return new GenLoadStoreOptimization();
228 }
229 };
230--- beignet-1.3.2.orig/backend/src/llvm/llvm_passes.cpp
231+++ beignet-1.3.2/backend/src/llvm/llvm_passes.cpp
232@@ -37,7 +37,7 @@
233 #include "sys/map.hpp"
234
235 using namespace llvm;
236-
237+template class cfg::Update<BasicBlock *>;
238 namespace gbe
239 {
240 bool isKernelFunction(const llvm::Function &F) {
241@@ -219,13 +219,13 @@ namespace gbe
242 return offset;
243 }
244
245- class GenRemoveGEPPasss : public BasicBlockPass
246+ class GenRemoveGEPPasss : public FunctionPass
247 {
248
249 public:
250 static char ID;
251 GenRemoveGEPPasss(const ir::Unit &unit) :
252- BasicBlockPass(ID),
253+ FunctionPass(ID),
254 unit(unit) {}
255 const ir::Unit &unit;
256 void getAnalysisUsage(AnalysisUsage &AU) const {
257@@ -242,16 +242,18 @@ namespace gbe
258
259 bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
260
261- virtual bool runOnBasicBlock(BasicBlock &BB)
262+ virtual bool runOnFunction(Function &F)
263 {
264- bool changedBlock = false;
265+ bool changedAnyBlock = false;
266+ for (BasicBlock &BB : F) {
267 iplist<Instruction>::iterator I = BB.getInstList().begin();
268 for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
269 iplist<Instruction>::iterator I = nextI++;
270 if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
271- changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
272+ changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
273 }
274- return changedBlock;
275+ }
276+ return changedAnyBlock;
277 }
278 };
279
280@@ -367,7 +369,7 @@ namespace gbe
281 return true;
282 }
283
284- BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
285+ FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
286 return new GenRemoveGEPPasss(unit);
287 }
288 } /* namespace gbe */
289--- beignet-1.3.2.orig/backend/src/llvm/llvm_sampler_fix.cpp
290+++ beignet-1.3.2/backend/src/llvm/llvm_sampler_fix.cpp
291@@ -33,11 +33,13 @@ namespace gbe {
292 class SamplerFix : public FunctionPass {
293 public:
294 SamplerFix() : FunctionPass(ID) {
295+#if LLVM_VERSION_MAJOR < 10
296 #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
297 initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
298 #else
299 initializeDominatorTreePass(*PassRegistry::getPassRegistry());
300 #endif
301+#endif
302 }
303
304 bool visitCallInst(CallInst *I) {
305--- a/backend/src/llvm/llvm_gen_backend.cpp
306+++ b/backend/src/llvm/llvm_gen_backend.cpp
307@@ -575,10 +575,12 @@ namespace gbe
308 has_errors(false),
309 legacyMode(true)
310 {
311+#if LLVM_VERSION_MAJOR < 10
312 #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
313 initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
314 #else
315 initializeLoopInfoPass(*PassRegistry::getPassRegistry());
316+#endif
317 #endif
318 pass = PASS_EMIT_REGISTERS;
319 }
320--- a/backend/src/llvm/llvm_scalarize.cpp
321+++ b/backend/src/llvm/llvm_scalarize.cpp
322@@ -96,10 +96,12 @@ namespace gbe {
323
324 Scalarize() : FunctionPass(ID)
325 {
326+#if LLVM_VERSION_MAJOR < 10
327 #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
328 initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
329 #else
330 initializeDominatorTreePass(*PassRegistry::getPassRegistry());
331+#endif
332 #endif
333 }
334
This page took 0.099881 seconds and 4 git commands to generate.