This is an archive of the discontinued LLVM Phabricator instance.

Debug info for optimized code: Support variables that are on the stack and described by DBG_VALUEs during their lifetime.
ClosedPublic

Authored by aprantl on Apr 14 2014, 6:15 PM.

Details

Reviewers
echristo
Summary
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.cpp
- 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)
DwarfDebug
Other
- regenerated/updated instcombine-intrinsics testcase and included source

Diff Detail

Event Timeline

echristo accepted this revision.Apr 21 2014, 4:55 PM

Looks like a good incremental change to get us somewhere good for debug info. OK with the typo in the comment fixed :)

lib/CodeGen/CodeGenPrepare.cpp
3057

"where"

aprantl closed this revision.Sep 17 2014, 2:00 PM