The Assignment Tracking debug-info feature is outlined in this RFC. This first series of patches adds documentation, the changes necessary to start emitting and using the new metadata, and updates clang with an option to enable the feature. Working with the new metadata in the middle and back end will come later. There are still a few rough edges but I'm putting these patches up now hoping to get feedback on the design and implementation from the upstream community.
Add trackAssignments which adds assignment tracking metadata to a function for a specified set of variables. The intended callers are the inliner and the front end - those calls will be added in separate patches.
I've added a pass called declare-to-assign (AssignmentTrackingPass) that converts dbg.declare intrinsics to dbg.assigns using trackAssignments so that the function can be easily tested (see llvm/test/DebugInfo/Generic/track-assignments.ll). The pass could also be used by front ends to easily test out enabling assignment tracking.
There is still at least one TODO: trackAssignments (and the rest of the pipeline) currently only works for local variables backed by an alloca. Some local variables have their storage allocated by the calling function with the address passed in with a sret or byval parameter. I have a solution in mind for this but would like to tackle that after the core of the feature is accepted.
Nit: starting with "Must have..." doesn't explain it's purpose -- IMHO, better to start with "Instruction with a DIAssignID to link with this dbg.assign...".