Don't propagate debug locations to instructions for materializing

constants, since they may not be emited near the other instructions
which get the same line, and this confuses debug info.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108302 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2010-07-14 01:07:44 +00:00
parent 7dbf7d8b1c
commit a10b8494a5
3 changed files with 17 additions and 9 deletions

View File

@ -106,12 +106,17 @@ public:
/// into the current block.
void recomputeInsertPt();
struct SavePoint {
MachineBasicBlock::iterator InsertPt;
DebugLoc DL;
};
/// enterLocalValueArea - Prepare InsertPt to begin inserting instructions
/// into the local value area and return the old insert position.
MachineBasicBlock::iterator enterLocalValueArea();
SavePoint enterLocalValueArea();
/// leaveLocalValueArea - Reset InsertPt to the given old insert position
void leaveLocalValueArea(MachineBasicBlock::iterator OldInsertPt);
/// leaveLocalValueArea - Reset InsertPt to the given old insert position.
void leaveLocalValueArea(SavePoint Old);
virtual ~FastISel();

View File

@ -135,7 +135,7 @@ unsigned FastISel::getRegForValue(const Value *V) {
!FuncInfo.StaticAllocaMap.count(cast<AllocaInst>(V))))
return FuncInfo.InitializeRegForValue(V);
MachineBasicBlock::iterator SaveInsertPt = enterLocalValueArea();
SavePoint SaveInsertPt = enterLocalValueArea();
// Materialize the value in a register. Emit any instructions in the
// local value area.
@ -286,18 +286,21 @@ void FastISel::recomputeInsertPt() {
++FuncInfo.InsertPt;
}
MachineBasicBlock::iterator FastISel::enterLocalValueArea() {
FastISel::SavePoint FastISel::enterLocalValueArea() {
MachineBasicBlock::iterator OldInsertPt = FuncInfo.InsertPt;
recomputeInsertPt();
return OldInsertPt;
DL = DebugLoc();
SavePoint SP = { OldInsertPt, DL };
return SP;
}
void FastISel::leaveLocalValueArea(MachineBasicBlock::iterator OldInsertPt) {
void FastISel::leaveLocalValueArea(SavePoint OldInsertPt) {
if (FuncInfo.InsertPt != FuncInfo.MBB->begin())
LastLocalValue = llvm::prior(FuncInfo.InsertPt);
// Restore the previous insert position.
FuncInfo.InsertPt = OldInsertPt;
FuncInfo.InsertPt = OldInsertPt.InsertPt;
DL = OldInsertPt.DL;
}
/// SelectBinaryOp - Select and emit code for a binary operator instruction,

View File

@ -540,7 +540,7 @@ bool X86FastISel::X86SelectAddress(const Value *V, X86AddressMode &AM) {
StubAM.GVOpFlags = GVFlags;
// Prepare for inserting code in the local-value area.
MachineBasicBlock::iterator SaveInsertPt = enterLocalValueArea();
SavePoint SaveInsertPt = enterLocalValueArea();
if (TLI.getPointerTy() == MVT::i64) {
Opc = X86::MOV64rm;