]> git.pld-linux.org Git - packages/beignet.git/blobdiff - beignet-llvm10-support.patch
- merged some Debian patches
[packages/beignet.git] / beignet-llvm10-support.patch
diff --git a/beignet-llvm10-support.patch b/beignet-llvm10-support.patch
new file mode 100644 (file)
index 0000000..7b51dd8
--- /dev/null
@@ -0,0 +1,334 @@
+*Does not work - not in use*
+
+Description: Add LLVM 10 support
+
+Remove -std=c++0x, as LLVM 10 requires at least c++14 (the default)
+Note that this triggers a gcc bug, so build with clang
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93299
+
+BasicBlockPass no longer exists; as they suggest, replace it with
+FunctionPass with a loop over BasicBlocks
+https://github.com/llvm/llvm-project/commit/9f0ff0b2634bab6a5be8dace005c9eb24d386dd1#diff-bddbe5e4c647cb67298584000b67dea1
+Return true from IntrinsicLoweringPass as it can modify its input
+(possibly a bug before?)
+
+setAlignment now takes a MaybeAlign not a uint
+
+Don't call initializeDominatorTreeWrapperPassPass and
+initializeLoopInfoWrapperPassPass, as they no longer exist
+
+Add explicit template initialization to avoid an undefined symbol
+
+###does not work###
+Pass clang libs as a single string to prevent them being converted
+to -Wl,-Bstatic -lclang... -Wl,-Bdynamic, as that causes a
+multiply defined options crash when run
+(multiple dynamic LLVMs??)
+builtin_acos_float()clang (LLVM option parsing): for the --pgo-warn-misexpect option: may only occur zero or one times!
+
+
+#--- a/CMake/FindLLVM.cmake
+#+++ b/CMake/FindLLVM.cmake
+#@@ -120,11 +120,14 @@ macro(add_one_lib name)
+# endif (LLVM_SYSTEM_LIBS_ORIG)
+# endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
+# 
+#+#something harmless because whitespace at start is an error
+#+set(CLANG_LIBRARIES "-ldl")
+# macro(add_one_lib name)
+#   FIND_LIBRARY(CLANG_LIB
+#     NAMES ${name}
+#     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
+#-  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
+#+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
+#+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
+#      unset(CLANG_LIB CACHE)
+# endmacro()
+# 
+#--- a/CMakeLists.txt
+#+++ b/CMakeLists.txt
+#@@ -79,7 +78,7 @@ elseif (COMPILER STREQUAL "CLANG")
+# elseif (COMPILER STREQUAL "ICC")
+#   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
+# endif ()
+#-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
+#+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
+# set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
+# set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
+# set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
+--- beignet-1.3.2.orig/backend/src/backend/program.cpp
++++ beignet-1.3.2/backend/src/backend/program.cpp
+@@ -695,8 +695,12 @@ namespace gbe {
+                 );
+     clang::CompilerInvocation::CreateFromArgs(*CI,
++#if LLVM_VERSION_MAJOR < 10
+                                               &args[0],
+                                               &args[0] + args.size(),
++#else
++                                              clang::ArrayRef<const char*>(args),
++#endif
+                                               Diags);
+     // Create the compiler instance
+     clang::CompilerInstance Clang;
+@@ -1248,8 +1252,12 @@ EXTEND_QUOTE:
+       // Create the compiler invocation
+       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
+       return clang::CompilerInvocation::CreateFromArgs(*CI,
++#if LLVM_VERSION_MAJOR < 10
+                                                        &args[0],
+                                                        &args[0] + args.size(),
++#else
++                                                       clang::ArrayRef<const char*>(args),
++#endif
+                                                        Diags);
+     }
+ #endif
+--- beignet-1.3.2.orig/backend/src/llvm/llvm_gen_backend.hpp
++++ beignet-1.3.2/backend/src/llvm/llvm_gen_backend.hpp
+@@ -130,10 +130,10 @@ namespace gbe
+   llvm::FunctionPass *createGenPass(ir::Unit &unit);
+   /*! Remove the GEP instructions */
+-  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
++  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
+   /*! Merge load/store if possible */
+-  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
++  llvm::FunctionPass *createLoadStoreOptimizationPass();
+   /*! Scalarize all vector op instructions */
+   llvm::FunctionPass* createScalarizePass();
+@@ -141,7 +141,7 @@ namespace gbe
+   llvm::ModulePass* createBarrierNodupPass(bool);
+   /*! Convert the Intrinsic call to gen function */
+-  llvm::BasicBlockPass *createIntrinsicLoweringPass();
++  llvm::FunctionPass *createIntrinsicLoweringPass();
+   /*! Passer the printf function call. */
+   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
+--- beignet-1.3.2.orig/backend/src/llvm/llvm_intrinsic_lowering.cpp
++++ beignet-1.3.2/backend/src/llvm/llvm_intrinsic_lowering.cpp
+@@ -29,12 +29,12 @@
+ using namespace llvm;
+ namespace gbe {
+-    class InstrinsicLowering : public BasicBlockPass
++    class InstrinsicLowering : public FunctionPass
+     {
+     public:
+       static char ID;
+       InstrinsicLowering() :
+-        BasicBlockPass(ID) {}
++        FunctionPass(ID) {}
+       void getAnalysisUsage(AnalysisUsage &AU) const {
+@@ -93,9 +93,9 @@ namespace gbe {
+         CI->eraseFromParent();
+         return NewCI;
+       }
+-      virtual bool runOnBasicBlock(BasicBlock &BB)
++      virtual bool runOnFunction(Function &F)
+       {
+-        bool changedBlock = false;
++        for (BasicBlock &BB : F) {
+         Module *M = BB.getParent()->getParent();
+         DataLayout TD(M);
+@@ -159,13 +159,14 @@ namespace gbe {
+             }
+           }
+         }
+-        return changedBlock;
++        }
++        return true;
+       }
+     };
+     char InstrinsicLowering::ID = 0;
+-    BasicBlockPass *createIntrinsicLoweringPass() {
++    FunctionPass *createIntrinsicLoweringPass() {
+       return new InstrinsicLowering();
+     }
+ } // end namespace
+--- beignet-1.3.2.orig/backend/src/llvm/llvm_loadstore_optimization.cpp
++++ beignet-1.3.2/backend/src/llvm/llvm_loadstore_optimization.cpp
+@@ -26,13 +26,13 @@
+ using namespace llvm;
+ namespace gbe {
+-  class GenLoadStoreOptimization : public BasicBlockPass {
++  class GenLoadStoreOptimization : public FunctionPass {
+   public:
+     static char ID;
+     ScalarEvolution *SE;
+     const DataLayout *TD;
+-    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
++    GenLoadStoreOptimization() : FunctionPass(ID) {}
+     void getAnalysisUsage(AnalysisUsage &AU) const {
+ #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
+@@ -45,7 +45,9 @@ namespace gbe {
+       AU.setPreservesCFG();
+     }
+-    virtual bool runOnBasicBlock(BasicBlock &BB) {
++    virtual bool runOnFunction(Function &F) {
++        bool changedAnyBlock = false;
++        for (BasicBlock &BB : F) {
+ #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
+       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
+ #else
+@@ -59,7 +61,9 @@ namespace gbe {
+       #else
+         TD = getAnalysisIfAvailable<DataLayout>();
+       #endif
+-      return optimizeLoadStore(BB);
++           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
++        }
++        return changedAnyBlock;
+     }
+     Type    *getValueType(Value *insn);
+     Value   *getPointerOperand(Value *I);
+@@ -148,7 +152,11 @@ namespace gbe {
+       values.push_back(merged[i]);
+     }
+     LoadInst *ld = cast<LoadInst>(merged[0]);
++#if LLVM_VERSION_MAJOR < 10
+     unsigned align = ld->getAlignment();
++#else
++    MaybeAlign align = ld->getAlign();
++#endif
+     unsigned addrSpace = ld->getPointerAddressSpace();
+     // insert before first load
+     Builder.SetInsertPoint(ld);
+@@ -231,7 +239,11 @@ namespace gbe {
+     unsigned addrSpace = st->getPointerAddressSpace();
++#if LLVM_VERSION_MAJOR < 10
+     unsigned align = st->getAlignment();
++#else
++    MaybeAlign align = st->getAlign();
++#endif
+     // insert before the last store
+     Builder.SetInsertPoint(merged[size-1]);
+@@ -325,7 +337,7 @@ namespace gbe {
+     return changed;
+   }
+-  BasicBlockPass *createLoadStoreOptimizationPass() {
++  FunctionPass *createLoadStoreOptimizationPass() {
+     return new GenLoadStoreOptimization();
+   }
+ };
+--- beignet-1.3.2.orig/backend/src/llvm/llvm_passes.cpp
++++ beignet-1.3.2/backend/src/llvm/llvm_passes.cpp
+@@ -37,7 +37,7 @@
+ #include "sys/map.hpp"
+ using namespace llvm;
+-
++template class cfg::Update<BasicBlock *>;
+ namespace gbe
+ {
+   bool isKernelFunction(const llvm::Function &F) {
+@@ -219,13 +219,13 @@ namespace gbe
+     return offset;
+   }
+-  class GenRemoveGEPPasss : public BasicBlockPass
++  class GenRemoveGEPPasss : public FunctionPass
+   {
+    public:
+     static char ID;
+     GenRemoveGEPPasss(const ir::Unit &unit) :
+-      BasicBlockPass(ID),
++      FunctionPass(ID),
+       unit(unit) {}
+     const ir::Unit &unit;
+     void getAnalysisUsage(AnalysisUsage &AU) const {
+@@ -242,16 +242,18 @@ namespace gbe
+     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
+-    virtual bool runOnBasicBlock(BasicBlock &BB)
++    virtual bool runOnFunction(Function &F)
+     {
+-      bool changedBlock = false;
++      bool changedAnyBlock = false;
++        for (BasicBlock &BB : F) {
+       iplist<Instruction>::iterator I = BB.getInstList().begin();
+       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
+         iplist<Instruction>::iterator I = nextI++;
+         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
+-          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
++          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
+       }
+-      return changedBlock;
++        }
++      return changedAnyBlock;
+     }
+   };
+@@ -367,7 +369,7 @@ namespace gbe
+     return true;
+   }
+-  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
++  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
+     return new GenRemoveGEPPasss(unit);
+   }
+ } /* namespace gbe */
+--- beignet-1.3.2.orig/backend/src/llvm/llvm_sampler_fix.cpp
++++ beignet-1.3.2/backend/src/llvm/llvm_sampler_fix.cpp
+@@ -33,11 +33,13 @@ namespace gbe {
+   class SamplerFix : public FunctionPass {
+   public:
+     SamplerFix() : FunctionPass(ID) {
++#if LLVM_VERSION_MAJOR < 10
+ #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
+       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
+ #else
+       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
+ #endif
++#endif
+     }
+     bool visitCallInst(CallInst *I) {
+--- a/backend/src/llvm/llvm_gen_backend.cpp
++++ b/backend/src/llvm/llvm_gen_backend.cpp
+@@ -575,10 +575,12 @@ namespace gbe
+         has_errors(false),
+         legacyMode(true)
+     {
++#if LLVM_VERSION_MAJOR < 10
+ #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
+       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
+ #else
+       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
++#endif
+ #endif
+       pass = PASS_EMIT_REGISTERS;
+     }
+--- a/backend/src/llvm/llvm_scalarize.cpp
++++ b/backend/src/llvm/llvm_scalarize.cpp
+@@ -96,10 +96,12 @@ namespace gbe {
+     Scalarize() : FunctionPass(ID)
+     {
++#if LLVM_VERSION_MAJOR < 10
+ #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
+       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
+ #else
+       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
++#endif
+ #endif
+     }
This page took 0.037141 seconds and 4 git commands to generate.