[llvm-commits] [llvm] r82077 - /llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
Devang Patel
dpatel at apple.com
Wed Sep 16 13:39:11 PDT 2009
Author: dpatel
Date: Wed Sep 16 15:39:11 2009
New Revision: 82077
URL: http://llvm.org/viewvc/llvm-project?rev=82077&view=rev
Log:
At iSel time, update DebugLoc based on debug info attached with an instruction.
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=82077&r1=82076&r2=82077&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Wed Sep 16 15:39:11 2009
@@ -16,6 +16,7 @@
#include "SelectionDAGBuild.h"
#include "llvm/CodeGen/SelectionDAGISel.h"
#include "llvm/Analysis/AliasAnalysis.h"
+#include "llvm/ANalysis/DebugInfo.h"
#include "llvm/Constants.h"
#include "llvm/CallingConv.h"
#include "llvm/DerivedTypes.h"
@@ -370,12 +371,25 @@
BasicBlock::iterator Begin,
BasicBlock::iterator End) {
SDL->setCurrentBasicBlock(BB);
+ Metadata &TheMetadata = LLVMBB->getParent()->getContext().getMetadata();
+ MDKindID MDDbgKind = TheMetadata.getMDKind("dbg");
// Lower all of the non-terminator instructions. If a call is emitted
// as a tail call, cease emitting nodes for this block.
- for (BasicBlock::iterator I = Begin; I != End && !SDL->HasTailCall; ++I)
+ for (BasicBlock::iterator I = Begin; I != End && !SDL->HasTailCall; ++I) {
+ if (MDDbgKind) {
+ // Update DebugLoc if debug information is attached with this
+ // instruction.
+ if (MDNode *Dbg =
+ dyn_cast_or_null<MDNode>(TheMetadata.getMD(MDDbgKind, I))) {
+ DILocation DILoc(Dbg);
+ DebugLoc Loc = ExtractDebugLocation(DILoc, MF->getDebugLocInfo());
+ SDL->setCurDebugLoc(Loc);
+ }
+ }
if (!isa<TerminatorInst>(I))
SDL->visit(*I);
+ }
if (!SDL->HasTailCall) {
// Ensure that all instructions which are used outside of their defining
@@ -640,6 +654,9 @@
#endif
);
+ Metadata &TheMetadata = Fn.getContext().getMetadata();
+ MDKindID MDDbgKind = TheMetadata.getMDKind("dbg");
+
// Iterate over all basic blocks in the function.
for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) {
BasicBlock *LLVMBB = &*I;
@@ -722,6 +739,18 @@
FastIS->startNewBlock(BB);
// Do FastISel on as many instructions as possible.
for (; BI != End; ++BI) {
+ if (MDDbgKind) {
+ // Update DebugLoc if debug information is attached with this
+ // instruction.
+ if (MDNode *Dbg =
+ dyn_cast_or_null<MDNode>(TheMetadata.getMD(MDDbgKind, BI))) {
+ DILocation DILoc(Dbg);
+ DebugLoc Loc = ExtractDebugLocation(DILoc,
+ MF.getDebugLocInfo());
+ FastIS->setCurDebugLoc(Loc);
+ }
+ }
+
// Just before the terminator instruction, insert instructions to
// feed PHI nodes in successor blocks.
if (isa<TerminatorInst>(BI))
More information about the llvm-commits
mailing list