]> git.pld-linux.org Git - packages/beignet.git/blob - beignet-llvm10-support.patch
- added dirty llvm11-support patch, now at least builds with llvm 11
[packages/beignet.git] / beignet-llvm10-support.patch
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  
This page took 0.101629 seconds and 3 git commands to generate.