// EntryNode could meaningfully have debug info if we can find it... SelectionDAG::SelectionDAG(const TargetMachine &tm, CodeGenOptLevel OL) : TM(tm), OptLevel(OL), EntryNode(ISD::EntryToken, 0, DebugLoc(), getVTList(MVT::Other, MVT::Glue)), Root(getEntryNode()) { InsertNode(&...
最近遇到了一个Clang / LLVM产生Debug信息的问题,花费了不少的时间去研究原因,在这途中我也曾发邮件到llvm-dev mail-list /stackoverflow等,但是只有llvm-dev mail-list中的一个人理解了我的问题所在,但是不知道为何,他理解了问题以后就消失了。然后其余的一堆人都是在瞎扯,把问题还归结在Clang身上,我也是无力吐...
// important for compiling with DWARF, using option -g. i->setDebugLoc(ji->getDebugLoc()); ji++; } // The instructions' informations are now all correct 这里的代码的话主要解决两个问题,就cloneBasicBlock函数进行的克隆并不是完全的克隆,第一它不会对操作...
int64_t Offset) const { DebugLoc DL; MachineMemOperand *MMO = GetMemOperand(MBB, FI, MachineMemOperand:: MOStore); unsigned Opc = 0; Opc = xxx::ST; assert(Opc&& "Register class not handled!"); BuildMI(MBB, I, DL, get(Opc)).addReg(SrcReg, getKillRegState(isKill)) .addFrameInd...
FoldingSetNodeID ID;AddNodeIDNode(ID, Opcode,getVTList(VT), None);void*IP =nullptr;if(SDNode *E =FindNodeOrInsertPos(ID, DL, IP))returnSDValue(E,0);auto*N =newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(),getVTList(VT)); ...
Col = 0; } else LexLoc.Col++; return LastChar; } 在这组代码中,我们添加了一些关于如何跟踪“源文件”的行和列的功能。当我们对每个令牌进行lex时,我们将当前的“lexical location”设置为令牌开头的分类行和列。为此,我们使用跟踪信息的新的Advance()覆盖了之前对getchar()的所有调用,然后我们向所有AST类...
DebugLoc Loc = I->getDebugLoc(); // 将当前基本块的指令(从I到end())转移到新的基本块中 New->getInstList().splice(New->end(), this->getInstList(), I, end()); // 在当前基本块的末尾添加分支指令,跳转到新建基本块中 BranchInst *BI = BranchInst::Create(New, this); BI->setDebug...
LLVM要求DbgInfoIntrinsic的DISubprogram与其附加的DebugLoc中的DISubprogram一致,也就是上面例子中metadata !575(作为Intrinsic的第二个参数)和!dbg !585的DISubprogram一致。因为DISubprogram表示IR对应的C++代码所在的源码文件位置,如果两处不一致显然是不合理的。
获取函数CallInst*inst=contextBuilder.CreateCall(beginFun,{bbBuilder.CreateGlobalStringPtr(F.getName())});// 构造函数inst->insertBefore(beginInst);// 插入标记函数autoSP=F.getSubprogram();DebugLoc DL=DebugLoc::get(SP->getScopeLine(),0,SP);inst->setDebugLoc(DL);//设置DebugLoc,给debugger...