Finding DebugInfo Loss
In order to fix DebugInfo loss I need to find where and when it occurs.
Many transformations result in DI loss due to the simple fact that they change
and optimize code and thus the resulting llvm IR doesn't match the
original code.
The opt tool has the -debugify and -check-debugify flags to attach
DI to everything and then check if it's correct.
Find culprit transformations
With a simple bash script I can run tests under a transformation folder like so:
for i in $(ls ~/code/llvm/test/Transforms/$TRANSFORMATION/*.ll -1); do 
    echo -e $i":\n-------"; 
    opt -debugify -$TRANSFORMATION -check-debugify -disable-output $i;
    echo -e "-------\n"; 
done > results 2>&1
and then proceed to view the results.
For example here is the command for the LICM transformation:
for i in $(ls ~/code/llvm/test/Transforms/LICM/*.ll -1); do 
    echo -e $i":\n-------"; 
    opt -debugify -licm -check-debugify -disable-output $i; 
    echo -e "-------\n"; 
done > results 2>&1
Here is a sample of the results file:
/home/gramanas/code/llvm/test/Transforms/LICM/2003-02-27-StoreSinkPHIs.ll:
-------
CheckDebugify: PASS
-------
/home/gramanas/code/llvm/test/Transforms/LICM/2003-05-02-LoadHoist.ll:
-------
ERROR: Instruction with empty DebugLoc --   %B.lcssa = phi i32 [ %B, %Loop ]
CheckDebugify: FAIL
-------
/home/gramanas/code/llvm/test/Transforms/LICM/2004-09-14-AliasAnalysisInvalidate.ll:
-------
WARNING: Missing line 3
WARNING: Missing line 4
CheckDebugify: PASS
-------
/home/gramanas/code/llvm/test/Transforms/LICM/2003-02-28-PromoteDifferentType.ll:
-------
ERROR: Instruction with empty DebugLoc --   %P2 = bitcast i32* %P to i8*
WARNING: Missing line 3
CheckDebugify: FAIL
-------