mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-25 05:22:04 +00:00
This reapplies r207130 with an additional testcase+and a missing check for
AllocaInst that was missing in one location. Debug info for optimized code: Support variables that are on the stack and described by DBG_VALUEs during their lifetime. Previously, when a variable was at a FrameIndex for any part of its lifetime, this would shadow all other DBG_VALUEs and only a single fbreg location would be emitted, which in fact is only valid for a small range and not the entire lexical scope of the variable. The included dbg-value-const-byref testcase demonstrates this. This patch fixes this by Local - emitting dbg.value intrinsics for allocas that are passed by reference - dropping all dbg.declares (they are now fully lowered to dbg.values) SelectionDAG - renamed constructors for SDDbgValue for better readability. - fix UserValue::match() to handle indirect values correctly - not inserting an MMI table entries for dbg.values that describe allocas. - lowering dbg.values that describe allocas into *indirect* DBG_VALUEs. CodeGenPrepare - leaving dbg.values for an alloca were they are (see comment) Other - regenerated/updated instcombine.ll testcase and included source rdar://problem/16679879 http://reviews.llvm.org/D3374 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207165 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -5646,21 +5646,26 @@ SDNode *SelectionDAG::getNodeIfExists(unsigned Opcode, SDVTList VTList,
|
||||
|
||||
/// getDbgValue - Creates a SDDbgValue node.
|
||||
///
|
||||
/// SDNode
|
||||
SDDbgValue *
|
||||
SelectionDAG::getDbgValue(MDNode *MDPtr, SDNode *N, unsigned R, uint64_t Off,
|
||||
SelectionDAG::getDbgValue(MDNode *MDPtr, SDNode *N, unsigned R,
|
||||
bool IsIndirect, uint64_t Off,
|
||||
DebugLoc DL, unsigned O) {
|
||||
return new (Allocator) SDDbgValue(MDPtr, N, R, Off, DL, O);
|
||||
return new (Allocator) SDDbgValue(MDPtr, N, R, IsIndirect, Off, DL, O);
|
||||
}
|
||||
|
||||
/// Constant
|
||||
SDDbgValue *
|
||||
SelectionDAG::getDbgValue(MDNode *MDPtr, const Value *C, uint64_t Off,
|
||||
DebugLoc DL, unsigned O) {
|
||||
SelectionDAG::getConstantDbgValue(MDNode *MDPtr, const Value *C,
|
||||
uint64_t Off,
|
||||
DebugLoc DL, unsigned O) {
|
||||
return new (Allocator) SDDbgValue(MDPtr, C, Off, DL, O);
|
||||
}
|
||||
|
||||
/// FrameIndex
|
||||
SDDbgValue *
|
||||
SelectionDAG::getDbgValue(MDNode *MDPtr, unsigned FI, uint64_t Off,
|
||||
DebugLoc DL, unsigned O) {
|
||||
SelectionDAG::getFrameIndexDbgValue(MDNode *MDPtr, unsigned FI, uint64_t Off,
|
||||
DebugLoc DL, unsigned O) {
|
||||
return new (Allocator) SDDbgValue(MDPtr, FI, Off, DL, O);
|
||||
}
|
||||
|
||||
@@ -6066,6 +6071,7 @@ void SelectionDAG::TransferDbgValues(SDValue From, SDValue To) {
|
||||
SDDbgValue *Dbg = *I;
|
||||
if (Dbg->getKind() == SDDbgValue::SDNODE) {
|
||||
SDDbgValue *Clone = getDbgValue(Dbg->getMDPtr(), ToNode, To.getResNo(),
|
||||
Dbg->isIndirect(),
|
||||
Dbg->getOffset(), Dbg->getDebugLoc(),
|
||||
Dbg->getOrder());
|
||||
ClonedDVs.push_back(Clone);
|
||||
|
||||
Reference in New Issue
Block a user