[Beignet] [Patch V2] OCL20: Use spir64 as default triple.

Song, Ruiling ruiling.song at intel.com
Wed Nov 18 00:15:42 PST 2015


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:beignet-bounces at lists.freedesktop.org] On Behalf Of
> Song, Ruiling
> Sent: Wednesday, November 18, 2015 3:51 PM
> To: Yang, Rong R <rong.r.yang at intel.com>; beignet at lists.freedesktop.org
> Cc: Yang, Rong R <rong.r.yang at intel.com>
> Subject: Re: [Beignet] [Patch V2] OCL20: Use spir64 as default triple.
> 
> LGTM
> 
> > -----Original Message-----
> > From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf
> Of
> > Yang Rong
> > Sent: Wednesday, November 18, 2015 2:39 PM
> > To: beignet at lists.freedesktop.org
> > Cc: Yang, Rong R <rong.r.yang at intel.com>
> > 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 <rong.r.yang at intel.com>
> > ---
> >  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
> > Beignet at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/beignet
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list