Signed-off-by: Bai Yannan <yannan....@intel.com> --- backend/src/backend/gen_context.cpp | 4 +--- backend/src/backend/gen_insn_selection.cpp | 12 +++--------- backend/src/backend/program.cpp | 4 +++- backend/src/ir/function.cpp | 7 +++++++ backend/src/ir/function.hpp | 1 + backend/src/llvm/llvm_gen_backend.cpp | 31 ++++++++++++++++++++++++++++-- 6 files changed, 44 insertions(+), 15 deletions(-)
diff --git a/backend/src/backend/gen_context.cpp b/backend/src/backend/gen_context.cpp index 411336e..9264cd9 100644 --- a/backend/src/backend/gen_context.cpp +++ b/backend/src/backend/gen_context.cpp @@ -254,6 +254,7 @@ namespace gbe void GenContext::emitLabelInstruction(const SelectionInstruction &insn) { const ir::LabelIndex label(insn.index); this->labelPos.insert(std::make_pair(label, p->store.size())); + SET_GENINSN_DBGINFO(insn); } void GenContext::emitUnaryInstruction(const SelectionInstruction &insn) { @@ -631,9 +632,6 @@ namespace gbe const GenRegister dst = ra->genReg(insn.dst(0)); const GenRegister src0 = ra->genReg(insn.src(0)); const GenRegister src1 = ra->genReg(insn.src(1)); - // debug - if(insn.dbginfo.hasdbginfo) - std::cout<<" *** "<<insn.dbginfo.line<<std::endl; switch (insn.opcode) { case SEL_OP_SEL: p->SEL(dst, src0, src1); break; diff --git a/backend/src/backend/gen_insn_selection.cpp b/backend/src/backend/gen_insn_selection.cpp index e861b7c..5ad665d 100644 --- a/backend/src/backend/gen_insn_selection.cpp +++ b/backend/src/backend/gen_insn_selection.cpp @@ -1104,26 +1104,19 @@ namespace gbe { SelectionInstruction &selinsn = *it; if(!selinsn.dbginfo.hasdbginfo) - //SET_SELINSN_DBGINFO(selinsn) - { selinsn.dbginfo.line = line; - selinsn.dbginfo.col = col; - selinsn.dbginfo.hasdbginfo = true;} - //else break; + SET_SELINSN_DBGINFO(selinsn) } else for(auto it = this->blockList.rbegin(); it!= this->blockList.rend(); it++) { SelectionBlock &block = *it; - for(auto jt = block.insnList.rbegin(); jt!= block.insnList.rend(); jt++) + for(auto jt = block.insnList.begin(); jt!= block.insnList.end(); jt++) { SelectionInstruction &selinsn = *jt; if(!selinsn.dbginfo.hasdbginfo) SET_SELINSN_DBGINFO(selinsn) - else goto OVER; } } - OVER: - ; } #undef SET_SELINSN_DBGINFO @@ -4768,6 +4761,7 @@ namespace gbe const uint32_t simdWidth = sel.ctx.getSimdWidth(); GBE_ASSERTM(label < sel.ctx.getMaxLabel(), "We reached the maximum label number which is reserved for barrier handling"); sel.LABEL(label); + SET_SELOPAQUE_DBGINFO(insn); if(!insn.getParent()->needIf) return true; diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp index af817de..e317230 100644 --- a/backend/src/backend/program.cpp +++ b/backend/src/backend/program.cpp @@ -557,8 +557,10 @@ namespace gbe { if(getenv("OCL_PROFILING")) { char * isProfiling = getenv("OCL_PROFILING"); - if(*isProfiling == '1') + if(*isProfiling == '1'){ + args.push_back("-o0"); args.push_back("-g"); + } } // The compiler invocation needs a DiagnosticsEngine so it can report problems diff --git a/backend/src/ir/function.cpp b/backend/src/ir/function.cpp index f87f23a..439b34c 100644 --- a/backend/src/ir/function.cpp +++ b/backend/src/ir/function.cpp @@ -389,6 +389,13 @@ namespace ir { return const_cast<Instruction*>(&insn); } + Instruction *BasicBlock::getSuccessorInstruction(Instruction *pos) { + for(auto it = this->begin();it != this->end();it++) + if(it == pos) + return &(*(++it)); + return &(*(--this->end())); + } + LabelIndex BasicBlock::getLabelIndex(void) const { const Instruction *first = this->getFirstInstruction(); const LabelInstruction *label = cast<LabelInstruction>(first); diff --git a/backend/src/ir/function.hpp b/backend/src/ir/function.hpp index 5d00cca..b435bbd 100644 --- a/backend/src/ir/function.hpp +++ b/backend/src/ir/function.hpp @@ -71,6 +71,7 @@ namespace ir { /*! Get successors and predecessors */ const BlockSet &getSuccessorSet(void) const { return successors; } const BlockSet &getPredecessorSet(void) const { return predecessors; } + Instruction *getSuccessorInstruction(Instruction *pos); /*! Get the label index of this block */ LabelIndex getLabelIndex(void) const; /*! Apply the given functor on all instructions */ diff --git a/backend/src/llvm/llvm_gen_backend.cpp b/backend/src/llvm/llvm_gen_backend.cpp index 1ce5e19..b75da22 100644 --- a/backend/src/llvm/llvm_gen_backend.cpp +++ b/backend/src/llvm/llvm_gen_backend.cpp @@ -203,9 +203,24 @@ if(OCL_PROFILING){ \ llvm::DebugLoc dg; \ GET_INSN_DBGLOC##FLAG(I); \ gbe::ir::BasicBlock * bb = ctx.getBlock(); \ - gbe::ir::Instruction *curI = bb->getLastInstruction(); \ - curI->setDBGInfo(dg.getLine(), dg.getCol());} + for(gbe::ir::Instruction *in = bb->getFirstInstruction(); in!=bb->getLastInstruction(); in=bb->getSuccessorInstruction(in) )\ + if(!in->DBGInfo.hasDBGInfo) in->setDBGInfo(dg.getLine(), dg.getCol());\ + } // end define SET_GENIR_DBGINFO +#define GET_PRE_LOADI_DBGINFO \ +if(OCL_PROFILING) { \ + gbe::ir::BasicBlock * tb = ctx.getBlock();\ + if(tb){gbe::ir::Instruction *curI = tb->getLastInstruction(); \ + line = curI->DBGInfo.line; \ + col = curI->DBGInfo.col;} \ +} +// end define GET_PRE_LOADI_DBGINFO +#define SET_LOADI_DBGINFO \ +if(OCL_PROFILING) { \ + gbe::ir::BasicBlock * tb = ctx.getBlock();\ + gbe::ir::Instruction *curI = tb->getLastInstruction(); \ + curI->setDBGInfo(line, col);} +// end define SET_LOADI_DBGINFO namespace gbe { @@ -1779,14 +1794,20 @@ namespace gbe } else { immIndex = ctx.newDoubleImmediate((double)0.0); } + uint line=0,col=0; + GET_PRE_LOADI_DBGINFO; ctx.LOADI(dstType, reg, immIndex); + SET_LOADI_DBGINFO; return reg; } const ir::ImmediateIndex immIndex = this->newImmediate(c, elemID); const ir::Immediate imm = ctx.getImmediate(immIndex); const ir::Register reg = ctx.reg(getFamily(imm.getType())); + uint line=0,col=0; + GET_PRE_LOADI_DBGINFO; ctx.LOADI(imm.getType(), reg, immIndex); + SET_LOADI_DBGINFO; return reg; } @@ -2510,14 +2531,20 @@ namespace gbe this->newRegister(const_cast<GlobalVariable*>(&v)); ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0); + uint line=0,col=0; + GET_PRE_LOADI_DBGINFO; ctx.LOADI(ir::TYPE_S32, reg, ctx.newIntegerImmediate(oldSlm + padding/8, ir::TYPE_S32)); + SET_LOADI_DBGINFO; } else if(addrSpace == ir::MEM_CONSTANT || v.isConstant()) { GBE_ASSERT(v.hasInitializer()); this->newRegister(const_cast<GlobalVariable*>(&v)); ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0); ir::Constant &con = unit.getConstantSet().getConstant(j ++); GBE_ASSERT(con.getName() == v.getName()); + uint line=0,col=0; + GET_PRE_LOADI_DBGINFO; ctx.LOADI(ir::TYPE_S32, reg, ctx.newIntegerImmediate(con.getOffset(), ir::TYPE_S32)); + SET_LOADI_DBGINFO; } else { if(v.getName().equals(StringRef("__gen_ocl_printf_buf"))) { ctx.getFunction().getPrintfSet()->setBufBTI(BtiMap.find(const_cast<GlobalVariable*>(&v))->second); -- 1.9.1 _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/beignet