Please hold a little bit. I find many cases failed after apply the patch. This may be caused by instruction selection part not supporting 64bit address well.
Thanks! Ruiling > -----Original Message----- > From: Beignet [mailto:[email protected]] On Behalf Of > Song, Ruiling > Sent: Wednesday, November 18, 2015 3:51 PM > To: Yang, Rong R <[email protected]>; [email protected] > Cc: Yang, Rong R <[email protected]> > Subject: Re: [Beignet] [Patch V2] OCL20: Use spir64 as default triple. > > LGTM > > > -----Original Message----- > > From: Beignet [mailto:[email protected]] On Behalf > Of > > Yang Rong > > Sent: Wednesday, November 18, 2015 2:39 PM > > To: [email protected] > > Cc: Yang, Rong R <[email protected]> > > Subject: [Beignet] [Patch V2] OCL20: Use spir64 as default triple. > > > > And enable 64bits pointer. > > TODO: Need support both 64bits and 32bits pointer > > > > V2: getType for pointer type is another patch, remove it. > > Signed-off-by: Yang Rong <[email protected]> > > --- > > backend/src/backend/context.cpp | 2 +- > > backend/src/backend/gen_program.cpp | 4 ++-- > > backend/src/backend/program.cpp | 6 +++--- > > backend/src/libocl/CMakeLists.txt | 8 ++++---- > > backend/src/libocl/src/ocl_barrier.ll | 4 ++-- > > backend/src/libocl/src/ocl_clz.ll | 4 ++-- > > backend/src/llvm/llvm_gen_backend.cpp | 2 +- > > backend/src/llvm/llvm_passes.cpp | 4 ++-- > > 8 files changed, 17 insertions(+), 17 deletions(-) > > > > diff --git a/backend/src/backend/context.cpp > > b/backend/src/backend/context.cpp > > index a02771a..9236022 100644 > > --- a/backend/src/backend/context.cpp > > +++ b/backend/src/backend/context.cpp > > @@ -321,7 +321,7 @@ namespace gbe > > Context::Context(const ir::Unit &unit, const std::string &name) : > > unit(unit), fn(*unit.getFunction(name)), name(name), liveness(NULL), > > dag(NULL), useDWLabel(false) > > { > > - GBE_ASSERT(unit.getPointerSize() == ir::POINTER_32_BITS); > > + GBE_ASSERT(unit.getPointerSize() == ir::POINTER_32_BITS || > > unit.getPointerSize() == ir::POINTER_64_BITS); > > this->liveness = GBE_NEW(ir::Liveness, const_cast<ir::Function&>(fn), > > true); > > this->dag = GBE_NEW(ir::FunctionDAG, *this->liveness); > > // r0 (GEN_REG_SIZE) is always set by the HW and used at the end by > EOT > > diff --git a/backend/src/backend/gen_program.cpp > > b/backend/src/backend/gen_program.cpp > > index bb22542..9f82702 100644 > > --- a/backend/src/backend/gen_program.cpp > > +++ b/backend/src/backend/gen_program.cpp > > @@ -302,8 +302,8 @@ namespace gbe { > > #endif > > // if load 32 bit spir binary, the triple should be > > spir-unknown-unknown. > > llvm::Triple triple(module->getTargetTriple()); > > - if(triple.getArchName() == "spir" && triple.getVendorName() == > > "unknown" && triple.getOSName() == "unknown"){ > > - module->setTargetTriple("spir"); > > + if(triple.getArchName() == "spir64" && triple.getVendorName() == > > "unknown" && triple.getOSName() == "unknown"){ > > + module->setTargetTriple("spir64"); > > } > > releaseLLVMContextLock(); > > if(module == NULL){ > > diff --git a/backend/src/backend/program.cpp > > b/backend/src/backend/program.cpp > > index 3c4b1fd..36af95f 100644 > > --- a/backend/src/backend/program.cpp > > +++ b/backend/src/backend/program.cpp > > @@ -116,7 +116,7 @@ namespace gbe { > > BVAR(OCL_STRICT_CONFORMANCE, true); > > > > bool Program::buildFromLLVMFile(const char *fileName, const void* > > module, std::string &error, int optLevel) { > > - ir::Unit *unit = new ir::Unit(); > > + ir::Unit *unit = new ir::Unit(ir::POINTER_64_BITS); > > llvm::Module * cloned_module = NULL; > > if(module){ > > cloned_module = llvm::CloneModule((llvm::Module*)module); > > @@ -131,7 +131,7 @@ namespace gbe { > > //use optLevel 0 to try again. > > if(!unit->getValid()) { > > delete unit; //clear unit > > - unit = new ir::Unit(); > > + unit = new ir::Unit(ir::POINTER_64_BITS); > > if(cloned_module){ > > //suppose file exists and llvmToGen will not return false. > > llvmToGen(*unit, fileName, cloned_module, 0, > > OCL_STRICT_CONFORMANCE); > > @@ -549,7 +549,7 @@ namespace gbe { > > args.push_back("-x"); > > args.push_back("cl"); > > args.push_back("-triple"); > > - args.push_back("spir"); > > + args.push_back("spir64"); > > #endif /* LLVM_VERSION_MINOR <= 2 */ > > args.push_back("stringInput.cl"); > > args.push_back("-ffp-contract=off"); > > diff --git a/backend/src/libocl/CMakeLists.txt > > b/backend/src/libocl/CMakeLists.txt > > index 1c6d75b..f90fbdc 100644 > > --- a/backend/src/libocl/CMakeLists.txt > > +++ b/backend/src/libocl/CMakeLists.txt > > @@ -136,8 +136,8 @@ MACRO(ADD_CL_TO_BC_TARGET _file) > > STRING(REGEX REPLACE "${LIBOCL_BINARY_DIR}/src/\(o.*\)\\.cl" > > "${OCL_OBJECT_DIR}/\\1.bc" output_name ${_file}) > > ADD_CUSTOM_COMMAND(OUTPUT ${output_name} > > COMMAND mkdir -p ${OCL_OBJECT_DIR}/ > > - #COMMAND echo ${LLVM_INSTALL_DIR}clang -cc1 > > ${CLANG_OCL_FLAGS} -I ${LIBOCL_BINARY_DIR}/include/ -emit-llvm-bc - > > triple spir -o ${output_name} -x cl ${_file} > > - COMMAND ${CLANG_EXECUTABLE} -cc1 ${CLANG_OCL_FLAGS} -I > > ${OCL_OBJECT_DIR}/include/ -emit-llvm-bc -triple spir -o ${output_name} - > x > > cl ${_file} > > + #COMMAND echo ${LLVM_INSTALL_DIR}clang -cc1 > > ${CLANG_OCL_FLAGS} -I ${LIBOCL_BINARY_DIR}/include/ -emit-llvm-bc - > > triple spir64 -o ${output_name} -x cl ${_file} > > + COMMAND ${CLANG_EXECUTABLE} -cc1 ${CLANG_OCL_FLAGS} -I > > ${OCL_OBJECT_DIR}/include/ -emit-llvm-bc -triple spir64 -o ${output_name} > > -x cl ${_file} > > DEPENDS ${_file} ${OCL_HEADER_FILES} > > COMMENT "Compiling ${_file}" > > ) > > @@ -201,14 +201,14 @@ ADD_CUSTOM_COMMAND(OUTPUT > > ${OCL_OBJECT_DIR}/beignet.bc > > > > ADD_CUSTOM_COMMAND(OUTPUT > ${OCL_OBJECT_DIR}/beignet.local.pch > > COMMAND mkdir -p ${OCL_OBJECT_DIR} > > - COMMAND ${CLANG_EXECUTABLE} -cc1 ${CLANG_OCL_FLAGS} -triple > > spir -I ${OCL_OBJECT_DIR}/include/ -emit-pch -x cl -cl-std=CL2.0 > > ${OCL_OBJECT_DIR}/include/ocl.h -o > ${OCL_OBJECT_DIR}/beignet.local.pch > > + COMMAND ${CLANG_EXECUTABLE} -cc1 ${CLANG_OCL_FLAGS} -triple > > spir64 -I ${OCL_OBJECT_DIR}/include/ -emit-pch -x cl -cl-std=CL2.0 > > ${OCL_OBJECT_DIR}/include/ocl.h -o > ${OCL_OBJECT_DIR}/beignet.local.pch > > DEPENDS ${OCL_HEADER_FILES} > > COMMENT "Generate the pch file: > ${OCL_OBJECT_DIR}/beignet.local.pch" > > ) > > > > ADD_CUSTOM_COMMAND(OUTPUT ${OCL_OBJECT_DIR}/beignet.pch > > COMMAND mkdir -p ${OCL_OBJECT_DIR} > > - COMMAND ${CLANG_EXECUTABLE} -cc1 ${CLANG_OCL_FLAGS} -triple > > spir -I ${OCL_OBJECT_DIR}/include/ --relocatable-pch -emit-pch -isysroot > > ${LIBOCL_BINARY_DIR} -x cl -cl-std=CL2.0 > ${OCL_OBJECT_DIR}/include/ocl.h - > > o ${OCL_OBJECT_DIR}/beignet.pch > > + COMMAND ${CLANG_EXECUTABLE} -cc1 ${CLANG_OCL_FLAGS} -triple > > spir64 -I ${OCL_OBJECT_DIR}/include/ --relocatable-pch -emit-pch -isysroot > > ${LIBOCL_BINARY_DIR} -x cl -cl-std=CL2.0 > ${OCL_OBJECT_DIR}/include/ocl.h - > > o ${OCL_OBJECT_DIR}/beignet.pch > > DEPENDS ${OCL_HEADER_FILES} > > COMMENT "Generate the pch file: ${OCL_OBJECT_DIR}/beignet.pch" > > ) > > diff --git a/backend/src/libocl/src/ocl_barrier.ll > > b/backend/src/libocl/src/ocl_barrier.ll > > index 2765a71..31087ba 100644 > > --- a/backend/src/libocl/src/ocl_barrier.ll > > +++ b/backend/src/libocl/src/ocl_barrier.ll > > @@ -4,8 +4,8 @@ > > ;#define CLK_LOCAL_MEM_FENCE (1 << 0) > > ;#define CLK_GLOBAL_MEM_FENCE (1 << 1) > > > > -target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128- > > v192:256-v256:256-v512:512-v1024:1024" > > -target triple = "spir" > > +target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128- > > v192:256-v256:256-v512:512-v1024:1024" > > +target triple = "spir64" > > > > declare i32 @_get_local_mem_fence() nounwind alwaysinline > > declare i32 @_get_global_mem_fence() nounwind alwaysinline > > diff --git a/backend/src/libocl/src/ocl_clz.ll > b/backend/src/libocl/src/ocl_clz.ll > > index 9522881..19f4e35 100644 > > --- a/backend/src/libocl/src/ocl_clz.ll > > +++ b/backend/src/libocl/src/ocl_clz.ll > > @@ -1,5 +1,5 @@ > > -target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128- > > v192:256-v256:256-v512:512-v1024:1024" > > -target triple = "spir" > > +target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128- > > v192:256-v256:256-v512:512-v1024:1024" > > +target triple = "spir64" > > > > declare i8 @llvm.ctlz.i8(i8, i1) > > declare i16 @llvm.ctlz.i16(i16, i1) > > diff --git a/backend/src/llvm/llvm_gen_backend.cpp > > b/backend/src/llvm/llvm_gen_backend.cpp > > index 39665b8..3ce4407 100644 > > --- a/backend/src/llvm/llvm_gen_backend.cpp > > +++ b/backend/src/llvm/llvm_gen_backend.cpp > > @@ -480,7 +480,7 @@ namespace gbe > > LI(0), > > TheModule(0), > > btiBase(BTI_RESERVED_NUM), > > - legacyMode(true) > > + legacyMode(false) > > { > > #if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >=7 > > initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry()); > > diff --git a/backend/src/llvm/llvm_passes.cpp > > b/backend/src/llvm/llvm_passes.cpp > > index d5d965b..5f97f75 100644 > > --- a/backend/src/llvm/llvm_passes.cpp > > +++ b/backend/src/llvm/llvm_passes.cpp > > @@ -253,7 +253,7 @@ namespace gbe > > ConstantInt::get(IntegerType::get(GEPInst->getContext(), > > ptrSize), > > size); > > > > Value *operand = GEPInst->getOperand(op); > > - > > +#if 0 > > //HACK TODO: Inserted by type replacement.. this code could break > > something???? > > if(getTypeByteSize(unit, operand->getType())>4) > > { > > @@ -277,7 +277,7 @@ namespace gbe > > "", GEPInst); > > } > > } > > - > > +#endif > > Value* tmpMul = operand; > > if (size != 1) { > > tmpMul = BinaryOperator::Create(Instruction::Mul, newConstSize, > > operand, > > -- > > 1.9.1 > > > > _______________________________________________ > > Beignet mailing list > > [email protected] > > http://lists.freedesktop.org/mailman/listinfo/beignet > _______________________________________________ > Beignet mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
