[Beignet] [PATCH] LLVM/Clang 3.7 compatibility
linedot
linedot at xcpp.org
Sun Apr 19 04:19:14 PDT 2015
I have modified some files to allow beignet to compile with the current
git version of LLVM. I ran the utests with the -a option on an Intel HD
4000 and had mostly
successes except for
builtin_pow()
compiler_function_qualifiers()
test_load_program_from_spir()
Those are probably unrelated to the changes I made, but I haven't tested
with a lower llvm version.
I'm not sure about how to deal with the changes in ocl_mem*.ll, but for
everything in cpp code I used version guards.
The old pass managers moved to llvm/IR/LegacyPassManager.h, I have used
those and had to use some pass wrappers.
LLVMLinkerPreserveSource was removed, The value is still in the enum as
LLVMLinkerPreserveSource_Removed, but it has no effect.
>From llvm release notes: "The DataLayout is no longer optional. All the
IR level optimizations expects it to be present and the API has been
changed to use a reference instead of a pointer to make it explicit. The
Module owns the datalayout and it has to match the one attached to the
TargetMachine for generating code.". I'm not sure if that's the right
way to do this, but I passed the DataLayout from the runModulePass
function to createLoadStoreOptimizationPass() and removed addition of
DataLayout passes everywhere.
There was also a typo in llvm_to_gen.cpp: runFuntionPass -> runFunctionPass
---
backend/src/backend/gen_program.cpp | 4 +
backend/src/libocl/src/ocl_memcpy.ll | 168 +++++++++++------------
backend/src/libocl/src/ocl_memset.ll | 12 +-
backend/src/llvm/llvm_bitcode_link.cpp | 10 +-
backend/src/llvm/llvm_gen_backend.cpp | 25 +++-
backend/src/llvm/llvm_gen_backend.hpp | 4 +
backend/src/llvm/llvm_loadstore_optimization.cpp | 16 ++-
backend/src/llvm/llvm_passes.cpp | 8 ++
backend/src/llvm/llvm_sampler_fix.cpp | 8 ++
backend/src/llvm/llvm_scalarize.cpp | 4 +
backend/src/llvm/llvm_to_gen.cpp | 76 ++++++++--
backend/src/llvm/llvm_unroll.cpp | 9 ++
12 files changed, 239 insertions(+), 105 deletions(-)
diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
index f4c74f8..8b12d09 100644
--- a/backend/src/backend/gen_program.cpp
+++ b/backend/src/backend/gen_program.cpp
@@ -393,7 +393,11 @@ namespace gbe {
llvm::Module* src = (llvm::Module*)((GenProgram*)src_program)->module;
llvm::Module* dst = (llvm::Module*)((GenProgram*)dst_program)->module;
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
+#else
if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource, &errMsg)) {
+#endif
if (err != NULL && errSize != NULL && stringSize > 0u) {
strncpy(err, errMsg, stringSize-1);
err[stringSize-1] = '\0';
diff --git a/backend/src/libocl/src/ocl_memcpy.ll b/backend/src/libocl/src/ocl_memcpy.ll
index b3fadb2..dae3166 100644
--- a/backend/src/libocl/src/ocl_memcpy.ll
+++ b/backend/src/libocl/src/ocl_memcpy.ll
@@ -22,10 +22,10 @@ while.cond: ; preds = %while.body, %entry
br i1 %cmp, label %while.cond3, label %while.body
while.body: ; preds = %while.cond
- %add.ptr = getelementptr inbounds i8 addrspace(1)* %src, i32 %index.0
+ %add.ptr = getelementptr inbounds i8, i8 addrspace(1)* %src, i32 %index.0
%0 = bitcast i8 addrspace(1)* %add.ptr to i32 addrspace(1)*
- %1 = load i32 addrspace(1)* %0, align 4
- %add.ptr1 = getelementptr inbounds i8 addrspace(1)* %dst, i32 %index.0
+ %1 = load i32, i32 addrspace(1)* %0, align 4
+ %add.ptr1 = getelementptr inbounds i8, i8 addrspace(1)* %dst, i32 %index.0
%2 = bitcast i8 addrspace(1)* %add.ptr1 to i32 addrspace(1)*
store i32 %1, i32 addrspace(1)* %2, align 4
br label %while.cond
@@ -36,9 +36,9 @@ while.cond3: ; preds = %while.cond, %while.
br i1 %cmp4, label %while.body5, label %while.end7
while.body5: ; preds = %while.cond3
- %arrayidx = getelementptr inbounds i8 addrspace(1)* %src, i32 %index.1
- %3 = load i8 addrspace(1)* %arrayidx, align 1
- %arrayidx6 = getelementptr inbounds i8 addrspace(1)* %dst, i32 %index.1
+ %arrayidx = getelementptr inbounds i8, i8 addrspace(1)* %src, i32 %index.1
+ %3 = load i8, i8 addrspace(1)* %arrayidx, align 1
+ %arrayidx6 = getelementptr inbounds i8, i8 addrspace(1)* %dst, i32 %index.1
store i8 %3, i8 addrspace(1)* %arrayidx6, align 1
%inc = add i32 %index.1, 1
br label %while.cond3
@@ -58,10 +58,10 @@ while.cond: ; preds = %while.body, %entry
br i1 %cmp, label %while.cond3, label %while.body
while.body: ; preds = %while.cond
- %add.ptr = getelementptr inbounds i8 addrspace(0)* %src, i32 %index.0
+ %add.ptr = getelementptr inbounds i8, i8 addrspace(0)* %src, i32 %index.0
%0 = bitcast i8 addrspace(0)* %add.ptr to i32 addrspace(0)*
- %1 = load i32 addrspace(0)* %0, align 4
- %add.ptr1 = getelementptr inbounds i8 addrspace(1)* %dst, i32 %index.0
+ %1 = load i32, i32 addrspace(0)* %0, align 4
+ %add.ptr1 = getelementptr inbounds i8, i8 addrspace(1)* %dst, i32 %index.0
%2 = bitcast i8 addrspace(1)* %add.ptr1 to i32 addrspace(1)*
store i32 %1, i32 addrspace(1)* %2, align 4
br label %while.cond
@@ -72,9 +72,9 @@ while.cond3: ; preds = %while.cond, %while.
br i1 %cmp4, label %while.body5, label %while.end7
while.body5: ; preds = %while.cond3
- %arrayidx = getelementptr inbounds i8 addrspace(0)* %src, i32 %index.1
- %3 = load i8 addrspace(0)* %arrayidx, align 1
- %arrayidx6 = getelementptr inbounds i8 addrspace(1)* %dst, i32 %index.1
+ %arrayidx = getelementptr inbounds i8, i8 addrspace(0)* %src, i32 %index.1
+ %3 = load i8, i8 addrspace(0)* %arrayidx, align 1
+ %arrayidx6 = getelementptr inbounds i8, i8 addrspace(1)* %dst, i32 %index.1
store i8 %3, i8 addrspace(1)* %arrayidx6, align 1
%inc = add i32 %index.1, 1
br label %while.cond3
@@ -94,10 +94,10 @@ while.cond: ; preds = %while.body, %entry
br i1 %cmp, label %while.cond3, label %while.body
while.body: ; preds = %while.cond
- %add.ptr = getelementptr inbounds i8 addrspace(3)* %src, i32 %index.0
+ %add.ptr = getelementptr inbounds i8, i8 addrspace(3)* %src, i32 %index.0
%0 = bitcast i8 addrspace(3)* %add.ptr to i32 addrspace(3)*
- %1 = load i32 addrspace(3)* %0, align 4
- %add.ptr1 = getelementptr inbounds i8 addrspace(1)* %dst, i32 %index.0
+ %1 = load i32, i32 addrspace(3)* %0, align 4
+ %add.ptr1 = getelementptr inbounds i8, i8 addrspace(1)* %dst, i32 %index.0
%2 = bitcast i8 addrspace(1)* %add.ptr1 to i32 addrspace(1)*
store i32 %1, i32 addrspace(1)* %2, align 4
br label %while.cond
@@ -108,9 +108,9 @@ while.cond3: ; preds = %while.cond, %while.
br i1 %cmp4, label %while.body5, label %while.end7
while.body5: ; preds = %while.cond3
- %arrayidx = getelementptr inbounds i8 addrspace(3)* %src, i32 %index.1
- %3 = load i8 addrspace(3)* %arrayidx, align 1
- %arrayidx6 = getelementptr inbounds i8 addrspace(1)* %dst, i32 %index.1
+ %arrayidx = getelementptr inbounds i8, i8 addrspace(3)* %src, i32 %index.1
+ %3 = load i8, i8 addrspace(3)* %arrayidx, align 1
+ %arrayidx6 = getelementptr inbounds i8, i8 addrspace(1)* %dst, i32 %index.1
store i8 %3, i8 addrspace(1)* %arrayidx6, align 1
%inc = add i32 %index.1, 1
br label %while.cond3
@@ -130,10 +130,10 @@ while.cond: ; preds = %while.body, %entry
br i1 %cmp, label %while.cond3, label %while.body
while.body: ; preds = %while.cond
- %add.ptr = getelementptr inbounds i8 addrspace(1)* %src, i32 %index.0
+ %add.ptr = getelementptr inbounds i8, i8 addrspace(1)* %src, i32 %index.0
%0 = bitcast i8 addrspace(1)* %add.ptr to i32 addrspace(1)*
- %1 = load i32 addrspace(1)* %0, align 4
- %add.ptr1 = getelementptr inbounds i8 addrspace(0)* %dst, i32 %index.0
+ %1 = load i32, i32 addrspace(1)* %0, align 4
+ %add.ptr1 = getelementptr inbounds i8, i8 addrspace(0)* %dst, i32 %index.0
%2 = bitcast i8 addrspace(0)* %add.ptr1 to i32 addrspace(0)*
store i32 %1, i32 addrspace(0)* %2, align 4
br label %while.cond
@@ -144,9 +144,9 @@ while.cond3: ; preds = %while.cond, %while.
br i1 %cmp4, label %while.body5, label %while.end7
while.body5: ; preds = %while.cond3
- %arrayidx = getelementptr inbounds i8 addrspace(1)* %src, i32 %index.1
- %3 = load i8 addrspace(1)* %arrayidx, align 1
- %arrayidx6 = getelementptr inbounds i8 addrspace(0)* %dst, i32 %index.1
+ %arrayidx = getelementptr inbounds i8, i8 addrspace(1)* %src, i32 %index.1
+ %3 = load i8, i8 addrspace(1)* %arrayidx, align 1
+ %arrayidx6 = getelementptr inbounds i8, i8 addrspace(0)* %dst, i32 %index.1
store i8 %3, i8 addrspace(0)* %arrayidx6, align 1
%inc = add i32 %index.1, 1
br label %while.cond3
@@ -166,10 +166,10 @@ while.cond: ; preds = %while.body, %entry
br i1 %cmp, label %while.cond3, label %while.body
while.body: ; preds = %while.cond
- %add.ptr = getelementptr inbounds i8 addrspace(0)* %src, i32 %index.0
+ %add.ptr = getelementptr inbounds i8, i8 addrspace(0)* %src, i32 %index.0
%0 = bitcast i8 addrspace(0)* %add.ptr to i32 addrspace(0)*
- %1 = load i32 addrspace(0)* %0, align 4
- %add.ptr1 = getelementptr inbounds i8 addrspace(0)* %dst, i32 %index.0
+ %1 = load i32, i32 addrspace(0)* %0, align 4
+ %add.ptr1 = getelementptr inbounds i8, i8 addrspace(0)* %dst, i32 %index.0
%2 = bitcast i8 addrspace(0)* %add.ptr1 to i32 addrspace(0)*
store i32 %1, i32 addrspace(0)* %2, align 4
br label %while.cond
@@ -180,9 +180,9 @@ while.cond3: ; preds = %while.cond, %while.
br i1 %cmp4, label %while.body5, label %while.end7
while.body5: ; preds = %while.cond3
- %arrayidx = getelementptr inbounds i8 addrspace(0)* %src, i32 %index.1
- %3 = load i8 addrspace(0)* %arrayidx, align 1
- %arrayidx6 = getelementptr inbounds i8 addrspace(0)* %dst, i32 %index.1
+ %arrayidx = getelementptr inbounds i8, i8 addrspace(0)* %src, i32 %index.1
+ %3 = load i8, i8 addrspace(0)* %arrayidx, align 1
+ %arrayidx6 = getelementptr inbounds i8, i8 addrspace(0)* %dst, i32 %index.1
store i8 %3, i8 addrspace(0)* %arrayidx6, align 1
%inc = add i32 %index.1, 1
br label %while.cond3
@@ -202,10 +202,10 @@ while.cond: ; preds = %while.body, %entry
br i1 %cmp, label %while.cond3, label %while.body
while.body: ; preds = %while.cond
- %add.ptr = getelementptr inbounds i8 addrspace(3)* %src, i32 %index.0
+ %add.ptr = getelementptr inbounds i8, i8 addrspace(3)* %src, i32 %index.0
%0 = bitcast i8 addrspace(3)* %add.ptr to i32 addrspace(3)*
- %1 = load i32 addrspace(3)* %0, align 4
- %add.ptr1 = getelementptr inbounds i8 addrspace(0)* %dst, i32 %index.0
+ %1 = load i32, i32 addrspace(3)* %0, align 4
+ %add.ptr1 = getelementptr inbounds i8, i8 addrspace(0)* %dst, i32 %index.0
%2 = bitcast i8 addrspace(0)* %add.ptr1 to i32 addrspace(0)*
store i32 %1, i32 addrspace(0)* %2, align 4
br label %while.cond
@@ -216,9 +216,9 @@ while.cond3: ; preds = %while.cond, %while.
br i1 %cmp4, label %while.body5, label %while.end7
while.body5: ; preds = %while.cond3
- %arrayidx = getelementptr inbounds i8 addrspace(3)* %src, i32 %index.1
- %3 = load i8 addrspace(3)* %arrayidx, align 1
- %arrayidx6 = getelementptr inbounds i8 addrspace(0)* %dst, i32 %index.1
+ %arrayidx = getelementptr inbounds i8, i8 addrspace(3)* %src, i32 %index.1
+ %3 = load i8, i8 addrspace(3)* %arrayidx, align 1
+ %arrayidx6 = getelementptr inbounds i8, i8 addrspace(0)* %dst, i32 %index.1
store i8 %3, i8 addrspace(0)* %arrayidx6, align 1
%inc = add i32 %index.1, 1
br label %while.cond3
@@ -238,10 +238,10 @@ while.cond: ; preds = %while.body, %entry
br i1 %cmp, label %while.cond3, label %while.body
while.body: ; preds = %while.cond
- %add.ptr = getelementptr inbounds i8 addrspace(1)* %src, i32 %index.0
+ %add.ptr = getelementptr inbounds i8, i8 addrspace(1)* %src, i32 %index.0
%0 = bitcast i8 addrspace(1)* %add.ptr to i32 addrspace(1)*
- %1 = load i32 addrspace(1)* %0, align 4
- %add.ptr1 = getelementptr inbounds i8 addrspace(3)* %dst, i32 %index.0
+ %1 = load i32, i32 addrspace(1)* %0, align 4
+ %add.ptr1 = getelementptr inbounds i8, i8 addrspace(3)* %dst, i32 %index.0
%2 = bitcast i8 addrspace(3)* %add.ptr1 to i32 addrspace(3)*
store i32 %1, i32 addrspace(3)* %2, align 4
br label %while.cond
@@ -252,9 +252,9 @@ while.cond3: ; preds = %while.cond, %while.
br i1 %cmp4, label %while.body5, label %while.end7
while.body5: ; preds = %while.cond3
- %arrayidx = getelementptr inbounds i8 addrspace(1)* %src, i32 %index.1
- %3 = load i8 addrspace(1)* %arrayidx, align 1
- %arrayidx6 = getelementptr inbounds i8 addrspace(3)* %dst, i32 %index.1
+ %arrayidx = getelementptr inbounds i8, i8 addrspace(1)* %src, i32 %index.1
+ %3 = load i8, i8 addrspace(1)* %arrayidx, align 1
+ %arrayidx6 = getelementptr inbounds i8, i8 addrspace(3)* %dst, i32 %index.1
store i8 %3, i8 addrspace(3)* %arrayidx6, align 1
%inc = add i32 %index.1, 1
br label %while.cond3
@@ -274,10 +274,10 @@ while.cond: ; preds = %while.body, %entry
br i1 %cmp, label %while.cond3, label %while.body
while.body: ; preds = %while.cond
- %add.ptr = getelementptr inbounds i8 addrspace(0)* %src, i32 %index.0
+ %add.ptr = getelementptr inbounds i8, i8 addrspace(0)* %src, i32 %index.0
%0 = bitcast i8 addrspace(0)* %add.ptr to i32 addrspace(0)*
- %1 = load i32 addrspace(0)* %0, align 4
- %add.ptr1 = getelementptr inbounds i8 addrspace(3)* %dst, i32 %index.0
+ %1 = load i32, i32 addrspace(0)* %0, align 4
+ %add.ptr1 = getelementptr inbounds i8, i8 addrspace(3)* %dst, i32 %index.0
%2 = bitcast i8 addrspace(3)* %add.ptr1 to i32 addrspace(3)*
store i32 %1, i32 addrspace(3)* %2, align 4
br label %while.cond
@@ -288,9 +288,9 @@ while.cond3: ; preds = %while.cond, %while.
br i1 %cmp4, label %while.body5, label %while.end7
while.body5: ; preds = %while.cond3
- %arrayidx = getelementptr inbounds i8 addrspace(0)* %src, i32 %index.1
- %3 = load i8 addrspace(0)* %arrayidx, align 1
- %arrayidx6 = getelementptr inbounds i8 addrspace(3)* %dst, i32 %index.1
+ %arrayidx = getelementptr inbounds i8, i8 addrspace(0)* %src, i32 %index.1
+ %3 = load i8, i8 addrspace(0)* %arrayidx, align 1
+ %arrayidx6 = getelementptr inbounds i8, i8 addrspace(3)* %dst, i32 %index.1
store i8 %3, i8 addrspace(3)* %arrayidx6, align 1
%inc = add i32 %index.1, 1
br label %while.cond3
@@ -310,10 +310,10 @@ while.cond: ; preds = %while.body, %entry
br i1 %cmp, label %while.cond3, label %while.body
while.body: ; preds = %while.cond
- %add.ptr = getelementptr inbounds i8 addrspace(3)* %src, i32 %index.0
+ %add.ptr = getelementptr inbounds i8, i8 addrspace(3)* %src, i32 %index.0
%0 = bitcast i8 addrspace(3)* %add.ptr to i32 addrspace(3)*
- %1 = load i32 addrspace(3)* %0, align 4
- %add.ptr1 = getelementptr inbounds i8 addrspace(3)* %dst, i32 %index.0
+ %1 = load i32, i32 addrspace(3)* %0, align 4
+ %add.ptr1 = getelementptr inbounds i8, i8 addrspace(3)* %dst, i32 %index.0
%2 = bitcast i8 addrspace(3)* %add.ptr1 to i32 addrspace(3)*
store i32 %1, i32 addrspace(3)* %2, align 4
br label %while.cond
@@ -324,9 +324,9 @@ while.cond3: ; preds = %while.cond, %while.
br i1 %cmp4, label %while.body5, label %while.end7
while.body5: ; preds = %while.cond3
- %arrayidx = getelementptr inbounds i8 addrspace(3)* %src, i32 %index.1
- %3 = load i8 addrspace(3)* %arrayidx, align 1
- %arrayidx6 = getelementptr inbounds i8 addrspace(3)* %dst, i32 %index.1
+ %arrayidx = getelementptr inbounds i8, i8 addrspace(3)* %src, i32 %index.1
+ %3 = load i8, i8 addrspace(3)* %arrayidx, align 1
+ %arrayidx6 = getelementptr inbounds i8, i8 addrspace(3)* %dst, i32 %index.1
store i8 %3, i8 addrspace(3)* %arrayidx6, align 1
%inc = add i32 %index.1, 1
br label %while.cond3
@@ -354,7 +354,7 @@ while.body: ; preds = %entry, %while.body
%0 = ptrtoint i8 addrspace(1)* %src to i32
%1 = add i32 %0, %index.05
%2 = inttoptr i32 %1 to i8 addrspace(1)*
- %3 = load i8 addrspace(1)* %2, align 1
+ %3 = load i8, i8 addrspace(1)* %2, align 1
%4 = ptrtoint i8 addrspace(1)* %dst to i32
%5 = add i32 %4, %index.05
%6 = inttoptr i32 %5 to i8 addrspace(1)*
@@ -377,7 +377,7 @@ while.body: ; preds = %entry, %while.body
%0 = ptrtoint i8 addrspace(0)* %src to i32
%1 = add i32 %0, %index.05
%2 = inttoptr i32 %1 to i8 addrspace(0)*
- %3 = load i8 addrspace(0)* %2, align 1
+ %3 = load i8, i8 addrspace(0)* %2, align 1
%4 = ptrtoint i8 addrspace(1)* %dst to i32
%5 = add i32 %4, %index.05
%6 = inttoptr i32 %5 to i8 addrspace(1)*
@@ -400,7 +400,7 @@ while.body: ; preds = %entry, %while.body
%0 = ptrtoint i8 addrspace(3)* %src to i32
%1 = add i32 %0, %index.05
%2 = inttoptr i32 %1 to i8 addrspace(3)*
- %3 = load i8 addrspace(3)* %2, align 1
+ %3 = load i8, i8 addrspace(3)* %2, align 1
%4 = ptrtoint i8 addrspace(1)* %dst to i32
%5 = add i32 %4, %index.05
%6 = inttoptr i32 %5 to i8 addrspace(1)*
@@ -423,7 +423,7 @@ while.body: ; preds = %entry, %while.body
%0 = ptrtoint i8 addrspace(1)* %src to i32
%1 = add i32 %0, %index.05
%2 = inttoptr i32 %1 to i8 addrspace(1)*
- %3 = load i8 addrspace(1)* %2, align 1
+ %3 = load i8, i8 addrspace(1)* %2, align 1
%4 = ptrtoint i8 addrspace(0)* %dst to i32
%5 = add i32 %4, %index.05
%6 = inttoptr i32 %5 to i8 addrspace(0)*
@@ -446,7 +446,7 @@ while.body: ; preds = %entry, %while.body
%0 = ptrtoint i8 addrspace(0)* %src to i32
%1 = add i32 %0, %index.05
%2 = inttoptr i32 %1 to i8 addrspace(0)*
- %3 = load i8 addrspace(0)* %2, align 1
+ %3 = load i8, i8 addrspace(0)* %2, align 1
%4 = ptrtoint i8 addrspace(0)* %dst to i32
%5 = add i32 %4, %index.05
%6 = inttoptr i32 %5 to i8 addrspace(0)*
@@ -469,7 +469,7 @@ while.body: ; preds = %entry, %while.body
%0 = ptrtoint i8 addrspace(3)* %src to i32
%1 = add i32 %0, %index.05
%2 = inttoptr i32 %1 to i8 addrspace(3)*
- %3 = load i8 addrspace(3)* %2, align 1
+ %3 = load i8, i8 addrspace(3)* %2, align 1
%4 = ptrtoint i8 addrspace(0)* %dst to i32
%5 = add i32 %4, %index.05
%6 = inttoptr i32 %5 to i8 addrspace(0)*
@@ -492,7 +492,7 @@ while.body: ; preds = %entry, %while.body
%0 = ptrtoint i8 addrspace(1)* %src to i32
%1 = add i32 %0, %index.05
%2 = inttoptr i32 %1 to i8 addrspace(1)*
- %3 = load i8 addrspace(1)* %2, align 1
+ %3 = load i8, i8 addrspace(1)* %2, align 1
%4 = ptrtoint i8 addrspace(3)* %dst to i32
%5 = add i32 %4, %index.05
%6 = inttoptr i32 %5 to i8 addrspace(3)*
@@ -515,7 +515,7 @@ while.body: ; preds = %entry, %while.body
%0 = ptrtoint i8 addrspace(0)* %src to i32
%1 = add i32 %0, %index.05
%2 = inttoptr i32 %1 to i8 addrspace(0)*
- %3 = load i8 addrspace(0)* %2, align 1
+ %3 = load i8, i8 addrspace(0)* %2, align 1
%4 = ptrtoint i8 addrspace(3)* %dst to i32
%5 = add i32 %4, %index.05
%6 = inttoptr i32 %5 to i8 addrspace(3)*
@@ -538,7 +538,7 @@ while.body: ; preds = %entry, %while.body
%0 = ptrtoint i8 addrspace(3)* %src to i32
%1 = add i32 %0, %index.05
%2 = inttoptr i32 %1 to i8 addrspace(3)*
- %3 = load i8 addrspace(3)* %2, align 1
+ %3 = load i8, i8 addrspace(3)* %2, align 1
%4 = ptrtoint i8 addrspace(3)* %dst to i32
%5 = add i32 %4, %index.05
%6 = inttoptr i32 %5 to i8 addrspace(3)*
@@ -562,10 +562,10 @@ while.cond: ; preds = %while.body, %entry
br i1 %cmp, label %while.cond3, label %while.body
while.body: ; preds = %while.cond
- %add.ptr = getelementptr inbounds i8 addrspace(2)* %src, i32 %index.0
+ %add.ptr = getelementptr inbounds i8, i8 addrspace(2)* %src, i32 %index.0
%0 = bitcast i8 addrspace(2)* %add.ptr to i32 addrspace(2)*
- %1 = load i32 addrspace(2)* %0, align 4
- %add.ptr1 = getelementptr inbounds i8 addrspace(1)* %dst, i32 %index.0
+ %1 = load i32, i32 addrspace(2)* %0, align 4
+ %add.ptr1 = getelementptr inbounds i8, i8 addrspace(1)* %dst, i32 %index.0
%2 = bitcast i8 addrspace(1)* %add.ptr1 to i32 addrspace(1)*
store i32 %1, i32 addrspace(1)* %2, align 4
br label %while.cond
@@ -576,9 +576,9 @@ while.cond3: ; preds = %while.cond, %while.
br i1 %cmp4, label %while.body5, label %while.end7
while.body5: ; preds = %while.cond3
- %arrayidx = getelementptr inbounds i8 addrspace(2)* %src, i32 %index.1
- %3 = load i8 addrspace(2)* %arrayidx, align 1
- %arrayidx6 = getelementptr inbounds i8 addrspace(1)* %dst, i32 %index.1
+ %arrayidx = getelementptr inbounds i8, i8 addrspace(2)* %src, i32 %index.1
+ %3 = load i8, i8 addrspace(2)* %arrayidx, align 1
+ %arrayidx6 = getelementptr inbounds i8, i8 addrspace(1)* %dst, i32 %index.1
store i8 %3, i8 addrspace(1)* %arrayidx6, align 1
%inc = add i32 %index.1, 1
br label %while.cond3
@@ -598,10 +598,10 @@ while.cond: ; preds = %while.body, %entry
br i1 %cmp, label %while.cond3, label %while.body
while.body: ; preds = %while.cond
- %add.ptr = getelementptr inbounds i8 addrspace(2)* %src, i32 %index.0
+ %add.ptr = getelementptr inbounds i8, i8 addrspace(2)* %src, i32 %index.0
%0 = bitcast i8 addrspace(2)* %add.ptr to i32 addrspace(2)*
- %1 = load i32 addrspace(2)* %0, align 4
- %add.ptr1 = getelementptr inbounds i8 addrspace(0)* %dst, i32 %index.0
+ %1 = load i32, i32 addrspace(2)* %0, align 4
+ %add.ptr1 = getelementptr inbounds i8, i8 addrspace(0)* %dst, i32 %index.0
%2 = bitcast i8 addrspace(0)* %add.ptr1 to i32 addrspace(0)*
store i32 %1, i32 addrspace(0)* %2, align 4
br label %while.cond
@@ -612,9 +612,9 @@ while.cond3: ; preds = %while.cond, %while.
br i1 %cmp4, label %while.body5, label %while.end7
while.body5: ; preds = %while.cond3
- %arrayidx = getelementptr inbounds i8 addrspace(2)* %src, i32 %index.1
- %3 = load i8 addrspace(2)* %arrayidx, align 1
- %arrayidx6 = getelementptr inbounds i8 addrspace(0)* %dst, i32 %index.1
+ %arrayidx = getelementptr inbounds i8, i8 addrspace(2)* %src, i32 %index.1
+ %3 = load i8, i8 addrspace(2)* %arrayidx, align 1
+ %arrayidx6 = getelementptr inbounds i8, i8 addrspace(0)* %dst, i32 %index.1
store i8 %3, i8 addrspace(0)* %arrayidx6, align 1
%inc = add i32 %index.1, 1
br label %while.cond3
@@ -634,10 +634,10 @@ while.cond: ; preds = %while.body, %entry
br i1 %cmp, label %while.cond3, label %while.body
while.body: ; preds = %while.cond
- %add.ptr = getelementptr inbounds i8 addrspace(2)* %src, i32 %index.0
+ %add.ptr = getelementptr inbounds i8, i8 addrspace(2)* %src, i32 %index.0
%0 = bitcast i8 addrspace(2)* %add.ptr to i32 addrspace(2)*
- %1 = load i32 addrspace(2)* %0, align 4
- %add.ptr1 = getelementptr inbounds i8 addrspace(3)* %dst, i32 %index.0
+ %1 = load i32, i32 addrspace(2)* %0, align 4
+ %add.ptr1 = getelementptr inbounds i8, i8 addrspace(3)* %dst, i32 %index.0
%2 = bitcast i8 addrspace(3)* %add.ptr1 to i32 addrspace(3)*
store i32 %1, i32 addrspace(3)* %2, align 4
br label %while.cond
@@ -648,9 +648,9 @@ while.cond3: ; preds = %while.cond, %while.
br i1 %cmp4, label %while.body5, label %while.end7
while.body5: ; preds = %while.cond3
- %arrayidx = getelementptr inbounds i8 addrspace(2)* %src, i32 %index.1
- %3 = load i8 addrspace(2)* %arrayidx, align 1
- %arrayidx6 = getelementptr inbounds i8 addrspace(3)* %dst, i32 %index.1
+ %arrayidx = getelementptr inbounds i8, i8 addrspace(2)* %src, i32 %index.1
+ %3 = load i8, i8 addrspace(2)* %arrayidx, align 1
+ %arrayidx6 = getelementptr inbounds i8, i8 addrspace(3)* %dst, i32 %index.1
store i8 %3, i8 addrspace(3)* %arrayidx6, align 1
%inc = add i32 %index.1, 1
br label %while.cond3
@@ -669,7 +669,7 @@ while.body: ; preds = %entry, %while.body
%0 = ptrtoint i8 addrspace(2)* %src to i32
%1 = add i32 %0, %index.05
%2 = inttoptr i32 %1 to i8 addrspace(2)*
- %3 = load i8 addrspace(2)* %2, align 1
+ %3 = load i8, i8 addrspace(2)* %2, align 1
%4 = ptrtoint i8 addrspace(0)* %dst to i32
%5 = add i32 %4, %index.05
%6 = inttoptr i32 %5 to i8 addrspace(0)*
@@ -692,7 +692,7 @@ while.body: ; preds = %entry, %while.body
%0 = ptrtoint i8 addrspace(2)* %src to i32
%1 = add i32 %0, %index.05
%2 = inttoptr i32 %1 to i8 addrspace(2)*
- %3 = load i8 addrspace(2)* %2, align 1
+ %3 = load i8, i8 addrspace(2)* %2, align 1
%4 = ptrtoint i8 addrspace(1)* %dst to i32
%5 = add i32 %4, %index.05
%6 = inttoptr i32 %5 to i8 addrspace(1)*
@@ -715,7 +715,7 @@ while.body: ; preds = %entry, %while.body
%0 = ptrtoint i8 addrspace(2)* %src to i32
%1 = add i32 %0, %index.05
%2 = inttoptr i32 %1 to i8 addrspace(2)*
- %3 = load i8 addrspace(2)* %2, align 1
+ %3 = load i8, i8 addrspace(2)* %2, align 1
%4 = ptrtoint i8 addrspace(3)* %dst to i32
%5 = add i32 %4, %index.05
%6 = inttoptr i32 %5 to i8 addrspace(3)*
diff --git a/backend/src/libocl/src/ocl_memset.ll b/backend/src/libocl/src/ocl_memset.ll
index 665eac4..6506a69 100644
--- a/backend/src/libocl/src/ocl_memset.ll
+++ b/backend/src/libocl/src/ocl_memset.ll
@@ -30,7 +30,7 @@ while.cond: ; preds = %while.body, %entry
br i1 %cmp, label %while.cond10, label %while.body
while.body: ; preds = %while.cond
- %add.ptr = getelementptr inbounds i8* %dst, i32 %index.0
+ %add.ptr = getelementptr inbounds i8, i8* %dst, i32 %index.0
%0 = bitcast i8* %add.ptr to i32*
store i32 %or7, i32* %0, align 4
br label %while.cond
@@ -41,7 +41,7 @@ while.cond10: ; preds = %while.cond, %while.
br i1 %cmp11, label %while.body13, label %while.end14
while.body13: ; preds = %while.cond10
- %arrayidx = getelementptr inbounds i8* %dst, i32 %index.1
+ %arrayidx = getelementptr inbounds i8, i8* %dst, i32 %index.1
store i8 %val, i8* %arrayidx, align 1
%inc = add i32 %index.1, 1
br label %while.cond10
@@ -68,7 +68,7 @@ while.cond: ; preds = %while.body, %entry
br i1 %cmp, label %while.cond10, label %while.body
while.body: ; preds = %while.cond
- %add.ptr = getelementptr inbounds i8 addrspace(1)* %dst, i32 %index.0
+ %add.ptr = getelementptr inbounds i8, i8 addrspace(1)* %dst, i32 %index.0
%0 = bitcast i8 addrspace(1)* %add.ptr to i32 addrspace(1)*
store i32 %or7, i32 addrspace(1)* %0, align 4
br label %while.cond
@@ -79,7 +79,7 @@ while.cond10: ; preds = %while.cond, %while.
br i1 %cmp11, label %while.body13, label %while.end14
while.body13: ; preds = %while.cond10
- %arrayidx = getelementptr inbounds i8 addrspace(1)* %dst, i32 %index.1
+ %arrayidx = getelementptr inbounds i8, i8 addrspace(1)* %dst, i32 %index.1
store i8 %val, i8 addrspace(1)* %arrayidx, align 1
%inc = add i32 %index.1, 1
br label %while.cond10
@@ -106,7 +106,7 @@ while.cond: ; preds = %while.body, %entry
br i1 %cmp, label %while.cond10, label %while.body
while.body: ; preds = %while.cond
- %add.ptr = getelementptr inbounds i8 addrspace(3)* %dst, i32 %index.0
+ %add.ptr = getelementptr inbounds i8, i8 addrspace(3)* %dst, i32 %index.0
%0 = bitcast i8 addrspace(3)* %add.ptr to i32 addrspace(3)*
store i32 %or7, i32 addrspace(3)* %0, align 4
br label %while.cond
@@ -117,7 +117,7 @@ while.cond10: ; preds = %while.cond, %while.
br i1 %cmp11, label %while.body13, label %while.end14
while.body13: ; preds = %while.cond10
- %arrayidx = getelementptr inbounds i8 addrspace(3)* %dst, i32 %index.1
+ %arrayidx = getelementptr inbounds i8, i8 addrspace(3)* %dst, i32 %index.1
store i8 %val, i8 addrspace(3)* %arrayidx, align 1
%inc = add i32 %index.1, 1
br label %while.cond10
diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
index ebf4386..40040f9 100644
--- a/backend/src/llvm/llvm_bitcode_link.cpp
+++ b/backend/src/llvm/llvm_bitcode_link.cpp
@@ -25,7 +25,11 @@
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Module.h"
#include "llvm/IRReader/IRReader.h"
-#include "llvm/PassManager.h"
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+#include "llvm/IR/LegacyPassManager.h"
+#else
+#include "llvm/PassManager"
+#endif
#include "llvm/Pass.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/Support/FileSystem.h"
@@ -249,7 +253,11 @@ namespace gbe
return NULL;
}
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ llvm::legacy::PassManager passes;
+#else
llvm::PassManager passes;
+#endif
passes.add(createInternalizePass(kernels));
passes.add(createGlobalDCEPass());
diff --git a/backend/src/llvm/llvm_gen_backend.cpp b/backend/src/llvm/llvm_gen_backend.cpp
index 9f4ed48..cab9957 100644
--- a/backend/src/llvm/llvm_gen_backend.cpp
+++ b/backend/src/llvm/llvm_gen_backend.cpp
@@ -86,7 +86,12 @@
#include "llvm/IR/Instructions.h"
#endif /* LLVM_VERSION_MINOR <= 2 */
#include "llvm/Pass.h"
+
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+#include "llvm/IR/LegacyPassManager.h"
+#else
#include "llvm/PassManager.h"
+#endif
#if LLVM_VERSION_MINOR <= 2
#include "llvm/Intrinsics.h"
#include "llvm/IntrinsicInst.h"
@@ -99,7 +104,11 @@
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/STLExtras.h"
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+#include "llvm/IR/InstIterator.h"
+#else
#include "llvm/Analysis/ConstantsScanner.h"
+#endif
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/CodeGen/Passes.h"
@@ -514,14 +523,22 @@ namespace gbe
TheModule(0),
btiBase(BTI_RESERVED_NUM)
{
- initializeLoopInfoPass(*PassRegistry::getPassRegistry());
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
+#else
+ initializeLoopInfoPass(*PassRegistry::getPassRegistry());
+#endif
pass = PASS_EMIT_REGISTERS;
}
virtual const char *getPassName() const { return "Gen Back-End"; }
void getAnalysisUsage(AnalysisUsage &AU) const {
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ AU.addRequired<LoopInfoWrapperPass>();
+#else
AU.addRequired<LoopInfo>();
+#endif
AU.setPreservesAll();
}
@@ -548,7 +565,11 @@ namespace gbe
if(!bKernel) return false;
analyzePointerOrigin(F);
- LI = &getAnalysis<LoopInfo>();
+ #if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
+ #else
+ LI = &getAnalysis<LoopInfo>();
+ #endif
emitFunction(F);
phiMap.clear();
globalPointer.clear();
diff --git a/backend/src/llvm/llvm_gen_backend.hpp b/backend/src/llvm/llvm_gen_backend.hpp
index 1f16557..e87c05b 100644
--- a/backend/src/llvm/llvm_gen_backend.hpp
+++ b/backend/src/llvm/llvm_gen_backend.hpp
@@ -133,7 +133,11 @@ namespace gbe
llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
/*! Merge load/store if possible */
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ llvm::BasicBlockPass *createLoadStoreOptimizationPass(const llvm::DataLayout* DL);
+#else
llvm::BasicBlockPass *createLoadStoreOptimizationPass();
+#endif
/*! Scalarize all vector op instructions */
llvm::FunctionPass* createScalarizePass();
diff --git a/backend/src/llvm/llvm_loadstore_optimization.cpp b/backend/src/llvm/llvm_loadstore_optimization.cpp
index c6349fa..a258f55 100644
--- a/backend/src/llvm/llvm_loadstore_optimization.cpp
+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
@@ -24,7 +24,11 @@
#include "llvm/IR/Instructions.h"
#include "llvm/Pass.h"
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+#include "llvm/IR/LegacyPassManager.h"
+#else
#include "llvm/PassManager.h"
+#endif
#include "llvm/Config/llvm-config.h"
#include "llvm/ADT/DenseMap.h"
@@ -62,7 +66,11 @@ namespace gbe {
static char ID;
ScalarEvolution *SE;
const DataLayout *TD;
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ GenLoadStoreOptimization(const DataLayout* DL) : BasicBlockPass(ID), TD(DL) {}
+#else
GenLoadStoreOptimization() : BasicBlockPass(ID) {}
+#endif
void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired<ScalarEvolution>();
@@ -72,7 +80,8 @@ namespace gbe {
virtual bool runOnBasicBlock(BasicBlock &BB) {
SE = &getAnalysis<ScalarEvolution>();
- #if LLVM_VERSION_MINOR >= 5
+ #if LLVM_VERSION_MINOR == 7
+ #elif LLVM_VERSION_MINOR >= 5
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
TD = DLP ? &DLP->getDataLayout() : nullptr;
#else
@@ -278,8 +287,13 @@ namespace gbe {
return changed;
}
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ BasicBlockPass *createLoadStoreOptimizationPass(const DataLayout* DL) {
+ return new GenLoadStoreOptimization(DL);
+#else
BasicBlockPass *createLoadStoreOptimizationPass() {
return new GenLoadStoreOptimization();
+#endif
}
};
diff --git a/backend/src/llvm/llvm_passes.cpp b/backend/src/llvm/llvm_passes.cpp
index 223f61b..5b3d22f 100644
--- a/backend/src/llvm/llvm_passes.cpp
+++ b/backend/src/llvm/llvm_passes.cpp
@@ -45,7 +45,11 @@
#include "llvm/IR/Instructions.h"
#endif /* LLVM_VERSION_MINOR <= 2 */
#include "llvm/Pass.h"
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+#include "llvm/IR/LegacyPassManager.h"
+#else
#include "llvm/PassManager.h"
+#endif
#if LLVM_VERSION_MINOR <= 2
#include "llvm/Intrinsics.h"
#include "llvm/IntrinsicInst.h"
@@ -58,7 +62,11 @@
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/STLExtras.h"
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+#include "llvm/IR/InstIterator.h"
+#else
#include "llvm/Analysis/ConstantsScanner.h"
+#endif
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/CodeGen/Passes.h"
diff --git a/backend/src/llvm/llvm_sampler_fix.cpp b/backend/src/llvm/llvm_sampler_fix.cpp
index 8c76324..a2a57f4 100644
--- a/backend/src/llvm/llvm_sampler_fix.cpp
+++ b/backend/src/llvm/llvm_sampler_fix.cpp
@@ -22,7 +22,11 @@
*/
#include "llvm/IR/Instructions.h"
#include "llvm/Pass.h"
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+#include "llvm/IR/LegacyPassManager.h"
+#else
#include "llvm/PassManager.h"
+#endif
#include "llvm/Config/llvm-config.h"
#include "llvm/ADT/DenseMap.h"
@@ -40,7 +44,11 @@
#include "llvm/Support/CFG.h"
#endif
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+#include "llvm/IR/InstIterator.h"
+#else
#include "llvm/Analysis/ConstantsScanner.h"
+#endif
#include "llvm_gen_backend.hpp"
#include "ocl_common_defines.h"
diff --git a/backend/src/llvm/llvm_scalarize.cpp b/backend/src/llvm/llvm_scalarize.cpp
index bc985c6..d9475c7 100644
--- a/backend/src/llvm/llvm_scalarize.cpp
+++ b/backend/src/llvm/llvm_scalarize.cpp
@@ -128,7 +128,11 @@ namespace gbe {
Scalarize() : FunctionPass(ID)
{
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
+#else
initializeLoopInfoPass(*PassRegistry::getPassRegistry());
+#endif
#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 5
initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
#else
diff --git a/backend/src/llvm/llvm_to_gen.cpp b/backend/src/llvm/llvm_to_gen.cpp
index 4ea722a..4bae3f9 100644
--- a/backend/src/llvm/llvm_to_gen.cpp
+++ b/backend/src/llvm/llvm_to_gen.cpp
@@ -32,11 +32,19 @@
#include "llvm/IR/Module.h"
#include "llvm/IR/DataLayout.h"
#endif /* LLVM_VERSION_MINOR <= 2 */
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+#include "llvm/IR/LegacyPassManager.h"
+#else
#include "llvm/PassManager.h"
+#endif
#include "llvm/Pass.h"
#include "llvm/Analysis/Passes.h"
#include "llvm/Transforms/IPO.h"
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+#include "llvm/Analysis/TargetLibraryInfo.h"
+#else
#include "llvm/Target/TargetLibraryInfo.h"
+#endif
#include "llvm/ADT/Triple.h"
#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR <= 2
#include "llvm/Support/IRReader.h"
@@ -77,12 +85,21 @@ namespace gbe
BVAR(OCL_OUTPUT_CFG_GEN_IR, false);
using namespace llvm;
- void runFuntionPass(Module &mod, TargetLibraryInfo *libraryInfo, const DataLayout &DL)
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ void runFunctionPass(Module &mod, TargetLibraryInfoImpl *libraryInfo, const DataLayout &DL)
+#else
+ void runFunctionPass(Module &mod, TargetLibraryInfo *libraryInfo, const DataLayout &DL)
+#endif
{
- FunctionPassManager FPM(&mod);
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ llvm::legacy::FunctionPassManager FPM(&mod);
+#else
+ FunctionPassManager FPM(&mod);
+#endif
-#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 6
- FPM.add(new DataLayoutPass());
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+#elif LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR == 6
+ FPM.add(new DataLayout(DL));
#elif LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR == 5
FPM.add(new DataLayoutPass(DL));
#else
@@ -94,7 +111,12 @@ namespace gbe
#else
FPM.add(createVerifierPass());
#endif
+
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ FPM.add(new TargetLibraryInfoWrapperPass(*libraryInfo));
+#else
FPM.add(new TargetLibraryInfo(*libraryInfo));
+#endif
FPM.add(createTypeBasedAliasAnalysisPass());
FPM.add(createBasicAliasAnalysisPass());
FPM.add(createCFGSimplificationPass());
@@ -110,18 +132,27 @@ namespace gbe
FPM.doFinalization();
}
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ void runModulePass(Module &mod, TargetLibraryInfoImpl *libraryInfo, const DataLayout &DL, int optLevel, bool strictMath)
+#else
void runModulePass(Module &mod, TargetLibraryInfo *libraryInfo, const DataLayout &DL, int optLevel, bool strictMath)
+#endif
{
- llvm::PassManager MPM;
+ llvm::legacy::PassManager MPM;
-#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 6
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+#elif LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR == 6
MPM.add(new DataLayoutPass());
#elif LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR == 5
MPM.add(new DataLayoutPass(DL));
#else
MPM.add(new DataLayout(DL));
#endif
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ MPM.add(new TargetLibraryInfoWrapperPass(*libraryInfo));
+#else
MPM.add(new TargetLibraryInfo(*libraryInfo));
+#endif
MPM.add(createTypeBasedAliasAnalysisPass());
MPM.add(createBasicAliasAnalysisPass());
MPM.add(createIntrinsicLoweringPass());
@@ -199,7 +230,15 @@ namespace gbe
}
-#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 5
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+#define OUTPUT_BITCODE(STAGE, MOD) do { \
+ llvm::legacy::PassManager passes__; \
+ if (OCL_OUTPUT_LLVM_##STAGE) { \
+ passes__.add(createPrintModulePass(*o)); \
+ passes__.run(MOD); \
+ } \
+ }while(0)
+#elif LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 5
#define OUTPUT_BITCODE(STAGE, MOD) do { \
llvm::PassManager passes__; \
if (OCL_OUTPUT_LLVM_##STAGE) { \
@@ -260,15 +299,26 @@ namespace gbe
DataLayout DL(&mod);
Triple TargetTriple(mod.getTargetTriple());
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ TargetLibraryInfoImpl *libraryInfo = new TargetLibraryInfoImpl(TargetTriple);
+#else
TargetLibraryInfo *libraryInfo = new TargetLibraryInfo(TargetTriple);
+#endif
libraryInfo->disableAllFunctions();
OUTPUT_BITCODE(AFTER_LINK, mod);
- runFuntionPass(mod, libraryInfo, DL);
+ runFunctionPass(mod, libraryInfo, DL);
runModulePass(mod, libraryInfo, DL, optLevel, strictMath);
+
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR == 7
+ llvm::legacy::PassManager passes;
+#else
llvm::PassManager passes;
-#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 6
+#endif
+
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR == 7
+#elif LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR == 6
passes.add(new DataLayoutPass());
#elif LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR == 5
passes.add(new DataLayoutPass(DL));
@@ -278,9 +328,13 @@ namespace gbe
// Print the code before further optimizations
passes.add(createIntrinsicLoweringPass());
passes.add(createStripAttributesPass()); // Strip unsupported attributes and calling conventions.
- passes.add(createFunctionInliningPass(20000));
- passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
+ passes.add(createFunctionInliningPass(200000));
+ passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR == 7
+ passes.add(createLoadStoreOptimizationPass(&DL));
+#else
passes.add(createLoadStoreOptimizationPass());
+#endif
passes.add(createConstantPropagationPass());
passes.add(createPromoteMemoryToRegisterPass());
if(optLevel > 0)
diff --git a/backend/src/llvm/llvm_unroll.cpp b/backend/src/llvm/llvm_unroll.cpp
index 5d3fad8..685c297 100644
--- a/backend/src/llvm/llvm_unroll.cpp
+++ b/backend/src/llvm/llvm_unroll.cpp
@@ -40,7 +40,11 @@
#include "llvm/IR/IRBuilder.h"
#endif /* LLVM_VERSION_MINOR <= 1 */
#include "llvm/Support/raw_ostream.h"
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+#include "llvm/IR/LegacyPassManager.h"
+#else
#include "llvm/PassManager.h"
+#endif
#include "llvm/Transforms/Scalar.h"
#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Analysis/LoopPass.h"
@@ -61,8 +65,13 @@ namespace gbe {
LoopPass(ID) {}
void getAnalysisUsage(AnalysisUsage &AU) const {
+#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
+ AU.addRequired<LoopInfoWrapperPass>();
+ AU.addPreserved<LoopInfoWrapperPass>();
+#else
AU.addRequired<LoopInfo>();
AU.addPreserved<LoopInfo>();
+#endif
AU.addRequiredID(LoopSimplifyID);
AU.addPreservedID(LoopSimplifyID);
AU.addRequiredID(LCSSAID);
--
2.3.5
More information about the Beignet
mailing list