]>
Commit | Line | Data |
---|---|---|
7d3d7cb5 JB |
1 | *Does not work - not in use* |
2 | ||
3 | Description: Add LLVM 10 support | |
4 | ||
5 | Remove -std=c++0x, as LLVM 10 requires at least c++14 (the default) | |
6 | Note that this triggers a gcc bug, so build with clang | |
7 | https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93299 | |
8 | ||
9 | BasicBlockPass no longer exists; as they suggest, replace it with | |
10 | FunctionPass with a loop over BasicBlocks | |
11 | https://github.com/llvm/llvm-project/commit/9f0ff0b2634bab6a5be8dace005c9eb24d386dd1#diff-bddbe5e4c647cb67298584000b67dea1 | |
12 | Return true from IntrinsicLoweringPass as it can modify its input | |
13 | (possibly a bug before?) | |
14 | ||
15 | setAlignment now takes a MaybeAlign not a uint | |
16 | ||
17 | Don't call initializeDominatorTreeWrapperPassPass and | |
18 | initializeLoopInfoWrapperPassPass, as they no longer exist | |
19 | ||
20 | Add explicit template initialization to avoid an undefined symbol | |
21 | ||
22 | ###does not work### | |
23 | Pass clang libs as a single string to prevent them being converted | |
24 | to -Wl,-Bstatic -lclang... -Wl,-Bdynamic, as that causes a | |
25 | multiply defined options crash when run | |
26 | (multiple dynamic LLVMs??) | |
27 | builtin_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 |