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 _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/beignet