From dae742fae9978c524ec849a90d0b40a9682fb172 Mon Sep 17 00:00:00 2001
From: KOLANICH <kolan_n@mail.ru>
Date: Mon, 22 Jun 2020 15:53:45 +0300
Subject: [PATCH] Fixing llvm11 support due to recent changes:
https://github.com/llvm/llvm-project/commit/4f04db4b5439f390c48408f9b94875810e88ffc6
https://github.com/llvm/llvm-project/commit/a58b62b4a2b96c31b49338b262b609db746449e8
https://github.com/llvm/llvm-project/commit/4aae4e3f48b9156755c4cfc7ad63fe2a7029d9d7
.
---
lib/llvmopencl/HandleSamplerInitialization.cc | 4 +++
lib/llvmopencl/HandleSamplerInitialization.h | 1 -
lib/llvmopencl/Workgroup.cc | 35 +++++++++++++++++--
lib/llvmopencl/WorkitemLoops.cc | 4 +++
4 files changed, 41 insertions(+), 3 deletions(-)
diff --git a/lib/llvmopencl/HandleSamplerInitialization.cc b/lib/llvmopencl/HandleSamplerInitialization.cc
index 4cbc5617..5d65c48f 100644
--- a/lib/llvmopencl/HandleSamplerInitialization.cc
+++ b/lib/llvmopencl/HandleSamplerInitialization.cc
@@ -79,7 +79,11 @@ HandleSamplerInitialization::runOnFunction(Function &F) {
// get the type of the return value of __translate_sampler
// this may not always be opencl.sampler_t, it could be a remapped type.
+#ifdef LLVM_OLDER_THAN_11_0
Type *type = C->getCalledValue()->getType();
+#else
+ Type *type = C->getCalledOperand()->getType();
+#endif
PointerType *pt = dyn_cast<PointerType>(type);
FunctionType *ft = dyn_cast<FunctionType>(pt->getPointerElementType());
Type *rettype = ft->getReturnType();
diff --git a/lib/llvmopencl/HandleSamplerInitialization.h b/lib/llvmopencl/HandleSamplerInitialization.h
index e8274e50..dc7539e2 100644
--- a/lib/llvmopencl/HandleSamplerInitialization.h
+++ b/lib/llvmopencl/HandleSamplerInitialization.h
@@ -27,7 +27,6 @@
IGNORE_COMPILER_WARNING("-Wunused-parameter")
#include <llvm/IR/Function.h>
-#include <llvm/PassAnalysisSupport.h>
#include <llvm/Pass.h>
POP_COMPILER_DIAGS
diff --git a/lib/llvmopencl/Workgroup.cc b/lib/llvmopencl/Workgroup.cc
index 357049a1..0ae2f34c 100644
--- a/lib/llvmopencl/Workgroup.cc
+++ b/lib/llvmopencl/Workgroup.cc
@@ -35,7 +35,9 @@ IGNORE_COMPILER_WARNING("-Wunused-parameter")
#include <llvm/Analysis/ConstantFolding.h>
#include <llvm/IR/BasicBlock.h>
+#ifdef LLVM_OLDER_THAN_11_0
#include <llvm/IR/CallSite.h>
+#endif
#include <llvm/IR/Constants.h>
#include <llvm/IR/DerivedTypes.h>
#include <llvm/IR/IRBuilder.h>
@@ -517,10 +519,15 @@ static void replacePrintfCalls(Value *pb, Value *pbp, Value *pbc, bool isKernel,
for (unsigned i = 0; i < j; ++i)
ops.push_back(CallInstr->getOperand(i));
- CallSite CS(CallInstr);
CallInst *NewCI = CallInst::Create(poclPrintf, ops);
NewCI->setCallingConv(poclPrintf->getCallingConv());
+#ifdef LLVM_OLDER_THAN_11_0
+ CallSite CS(CallInstr);
NewCI->setTailCall(CS.isTailCall());
+#else
+ auto *CB = dyn_cast<CallBase>(CallInstr);
+ NewCI->setTailCall(CB->isTailCall());
+#endif
replaceCIMap.insert(
std::pair<CallInst *, CallInst *>(CallInstr, NewCI));
@@ -719,7 +726,11 @@ Workgroup::createWrapper(Function *F, FunctionMapping &printfCache) {
// needed for printf
InlineFunctionInfo IFI;
+#ifdef LLVM_OLDER_THAN_11_0
InlineFunction(c, IFI);
+#else
+ InlineFunction(*c, IFI);
+#endif
if (currentPoclDevice->device_side_printf) {
Function *poclPrintf = M->getFunction("__pocl_printf");
@@ -989,7 +1000,11 @@ Workgroup::createDefaultWorkgroupLauncher(llvm::Function *F) {
new llvm::AllocaInst(ArgElementType, ParamType->getAddressSpace(),
ConstantInt::get(IntegerType::get(*C, 32), 1),
#ifndef LLVM_OLDER_THAN_10_0
+#ifndef LLVM_OLDER_THAN_11_0
+ llvm::Align(
+#else
llvm::MaybeAlign(
+#endif
#endif
MAX_EXTENDED_ALIGNMENT
#ifndef LLVM_OLDER_THAN_10_0
@@ -1012,7 +1027,11 @@ Workgroup::createDefaultWorkgroupLauncher(llvm::Function *F) {
Arg = new llvm::AllocaInst(ArgElementType, ParamType->getAddressSpace(),
ElementCount,
#ifndef LLVM_OLDER_THAN_10_0
+#ifndef LLVM_OLDER_THAN_11_0
+ llvm::Align(
+#else
llvm::MaybeAlign(
+#endif
#endif
MAX_EXTENDED_ALIGNMENT
#ifndef LLVM_OLDER_THAN_10_0
@@ -1213,7 +1232,11 @@ Workgroup::createArgBufferWorkgroupLauncher(Function *Func,
unwrap(ArgElementType), LLVMGetPointerAddressSpace(ParamType),
unwrap(LLVMConstInt(Int32Type, 1, 0)),
#ifndef LLVM_OLDER_THAN_10_0
+#ifndef LLVM_OLDER_THAN_11_0
+ llvm::Align(
+#else
llvm::MaybeAlign(
+#endif
#endif
MAX_EXTENDED_ALIGNMENT
#ifndef LLVM_OLDER_THAN_10_0
@@ -1248,7 +1271,11 @@ Workgroup::createArgBufferWorkgroupLauncher(Function *Func,
unwrap(LLVMGetElementType(ParamType)),
LLVMGetPointerAddressSpace(ParamType), unwrap(ElementCount),
#ifndef LLVM_OLDER_THAN_10_0
+#ifndef LLVM_OLDER_THAN_11_0
+ llvm::Align(
+#else
llvm::MaybeAlign(
+#endif
#endif
MAX_EXTENDED_ALIGNMENT
#ifndef LLVM_OLDER_THAN_10_0
@@ -1362,7 +1389,11 @@ Workgroup::createGridLauncher(Function *KernFunc, Function *WGFunc,
LLVMBuildRetVoid(Builder);
InlineFunctionInfo IFI;
- InlineFunction(dyn_cast<CallInst>(llvm::unwrap(Call)), IFI);
+#ifndef LLVM_OLDER_THAN_11_0
+ InlineFunction(*dyn_cast<CallInst>(llvm::unwrap(Call)), IFI);
+#else
+ InlineFunction(dyn_cast<CallInst>(llvm::unwrap(Call)), IFI);
+#endif
}
/**
diff --git a/lib/llvmopencl/WorkitemLoops.cc b/lib/llvmopencl/WorkitemLoops.cc
index 69daa3fa..64294111 100644
--- a/lib/llvmopencl/WorkitemLoops.cc
+++ b/lib/llvmopencl/WorkitemLoops.cc
@@ -990,7 +990,11 @@ WorkitemLoops::GetContextArray(llvm::Instruction *instruction,
size. */
Alloca->setAlignment(
#ifndef LLVM_OLDER_THAN_10_0
+#ifndef LLVM_OLDER_THAN_11_0
+ llvm::Align(
+#else
llvm::MaybeAlign(
+#endif
#endif
CONTEXT_ARRAY_ALIGN
#ifndef LLVM_OLDER_THAN_10_0
--
2.26.2