beignet patch for llvm 10
This commit is contained in:
@@ -12,6 +12,8 @@ from pisi.actionsapi import shelltools
|
||||
from pisi.actionsapi import get
|
||||
|
||||
def setup():
|
||||
shelltools.export("CC", "clang")
|
||||
shelltools.export("CXX", "clang++")
|
||||
|
||||
cmaketools.configure("-DCMAKE_INSTALL_LIBDIR=lib \
|
||||
-DOCLICD_COMPAT=1")
|
||||
|
||||
@@ -0,0 +1,319 @@
|
||||
diff -upr beignet.orig/backend/src/backend/program.cpp beignet/backend/src/backend/program.cpp
|
||||
--- beignet.orig/backend/src/backend/program.cpp 2020-04-16 03:44:21.153955099 +0300
|
||||
+++ beignet/backend/src/backend/program.cpp 2020-04-16 03:47:50.369205839 +0300
|
||||
@@ -694,9 +694,14 @@ namespace gbe {
|
||||
#endif
|
||||
);
|
||||
|
||||
+ llvm::cl::ResetAllOptionOccurrences();
|
||||
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;
|
||||
@@ -1242,8 +1247,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
|
||||
Only in beignet/backend/src/backend: program.cpp.orig
|
||||
Only in beignet.orig/backend/src: CMakeLists.txt.orig
|
||||
diff -upr beignet.orig/backend/src/llvm/llvm_gen_backend.cpp beignet/backend/src/llvm/llvm_gen_backend.cpp
|
||||
--- beignet.orig/backend/src/llvm/llvm_gen_backend.cpp 2020-04-16 03:44:21.783970632 +0300
|
||||
+++ beignet/backend/src/llvm/llvm_gen_backend.cpp 2020-04-16 03:45:04.141685867 +0300
|
||||
@@ -575,11 +575,13 @@ 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;
|
||||
}
|
||||
|
||||
diff -upr beignet.orig/backend/src/llvm/llvm_gen_backend.hpp beignet/backend/src/llvm/llvm_gen_backend.hpp
|
||||
--- beignet.orig/backend/src/llvm/llvm_gen_backend.hpp 2020-04-16 03:44:21.177289008 +0300
|
||||
+++ beignet/backend/src/llvm/llvm_gen_backend.hpp 2020-04-16 03:45:04.135019035 +0300
|
||||
@@ -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);
|
||||
diff -upr beignet.orig/backend/src/llvm/llvm_intrinsic_lowering.cpp beignet/backend/src/llvm/llvm_intrinsic_lowering.cpp
|
||||
--- beignet.orig/backend/src/llvm/llvm_intrinsic_lowering.cpp 2020-04-16 03:44:21.783970632 +0300
|
||||
+++ beignet/backend/src/llvm/llvm_intrinsic_lowering.cpp 2020-04-16 03:45:04.135019035 +0300
|
||||
@@ -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
|
||||
diff -upr beignet.orig/backend/src/llvm/llvm_loadstore_optimization.cpp beignet/backend/src/llvm/llvm_loadstore_optimization.cpp
|
||||
--- beignet.orig/backend/src/llvm/llvm_loadstore_optimization.cpp 2020-04-16 03:44:21.177289008 +0300
|
||||
+++ beignet/backend/src/llvm/llvm_loadstore_optimization.cpp 2020-04-16 03:45:38.645879307 +0300
|
||||
@@ -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);
|
||||
@@ -159,7 +163,11 @@ namespace gbe {
|
||||
values.push_back(merged[i]);
|
||||
}
|
||||
LoadInst *ld = cast<LoadInst>(first);
|
||||
+#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);
|
||||
@@ -352,7 +360,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(last);
|
||||
|
||||
@@ -466,7 +478,7 @@ namespace gbe {
|
||||
return changed;
|
||||
}
|
||||
|
||||
- BasicBlockPass *createLoadStoreOptimizationPass() {
|
||||
+ FunctionPass *createLoadStoreOptimizationPass() {
|
||||
return new GenLoadStoreOptimization();
|
||||
}
|
||||
};
|
||||
Only in beignet/backend/src/llvm: llvm_loadstore_optimization.cpp.orig
|
||||
Only in beignet/backend/src/llvm: llvm_loadstore_optimization.cpp.rej
|
||||
diff -upr beignet.orig/backend/src/llvm/llvm_passes.cpp beignet/backend/src/llvm/llvm_passes.cpp
|
||||
--- beignet.orig/backend/src/llvm/llvm_passes.cpp 2020-04-16 03:44:21.177289008 +0300
|
||||
+++ beignet/backend/src/llvm/llvm_passes.cpp 2020-04-16 03:45:04.135019035 +0300
|
||||
@@ -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 */
|
||||
diff -upr beignet.orig/backend/src/llvm/llvm_sampler_fix.cpp beignet/backend/src/llvm/llvm_sampler_fix.cpp
|
||||
--- beignet.orig/backend/src/llvm/llvm_sampler_fix.cpp 2020-04-16 03:44:21.783970632 +0300
|
||||
+++ beignet/backend/src/llvm/llvm_sampler_fix.cpp 2020-04-16 03:45:04.138352451 +0300
|
||||
@@ -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) {
|
||||
diff -upr beignet.orig/backend/src/llvm/llvm_scalarize.cpp beignet/backend/src/llvm/llvm_scalarize.cpp
|
||||
--- beignet.orig/backend/src/llvm/llvm_scalarize.cpp 2020-04-16 03:44:21.670634504 +0300
|
||||
+++ beignet/backend/src/llvm/llvm_scalarize.cpp 2020-04-16 03:45:04.141685867 +0300
|
||||
@@ -96,11 +96,13 @@ 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
|
||||
}
|
||||
|
||||
virtual bool runOnFunction(Function&);
|
||||
Only in beignet/CMake: FindLLVM.cmake.orig
|
||||
diff -upr beignet.orig/CMakeLists.txt beignet/CMakeLists.txt
|
||||
--- beignet.orig/CMakeLists.txt 2020-04-16 03:44:21.137288022 +0300
|
||||
+++ beignet/CMakeLists.txt 2020-04-16 03:45:04.131685618 +0300
|
||||
@@ -80,7 +80,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")
|
||||
diff -upr beignet.orig/utests/CMakeLists.txt beignet/utests/CMakeLists.txt
|
||||
--- beignet.orig/utests/CMakeLists.txt 2020-04-16 03:44:21.220623410 +0300
|
||||
+++ beignet/utests/CMakeLists.txt 2020-04-16 03:45:04.131685618 +0300
|
||||
@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
|
||||
# Threads
|
||||
Find_Package(Threads)
|
||||
|
||||
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
|
||||
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
|
||||
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
|
||||
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
|
||||
set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g -DGBE_DEBUG=1")
|
||||
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
|
||||
set (CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG -DGBE_DEBUG=0")
|
||||
@@ -28,6 +28,7 @@
|
||||
<Patches>
|
||||
<Patch level="0">llvm8.patch</Patch>
|
||||
<Patch level="0">llvm9.patch</Patch>
|
||||
<Patch level="1">llvm10.patch</Patch>
|
||||
</Patches>
|
||||
</Source>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user