Debug info questy (was Re: [llvm] r256003 - [ThinLTO/LTO] Don't link in unneeded metadata)

Teresa Johnson via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 6 16:11:15 PST 2016


Great, thanks for checking. Committed at r257000.
Teresa

On Wed, Jan 6, 2016 at 2:22 PM, Ahmed Bougacha <ahmed.bougacha at gmail.com> wrote:
> On Wed, Jan 6, 2016 at 1:33 PM, Teresa Johnson <tejohnson at google.com> wrote:
>> Here is the change I made which fixes the test case. I can add some
>> comments and a test case, but let me know if this looks ok otherwise.
>> As Eric noted, the DISubroutine for a() is marked as a definition,
>> which it isn't actually, but this was the behavior before this patch
>> and seems to work ok.
>
> FWIW, this patch [0] fixes the issue [1] for me.
>
> Thanks for taking care of this Teresa!
> -Ahmed
>
> [0] on r256768 and with a fix for the unrelated PR25919
> [1] llc build, OS X, -O2 -flto -g
>
>> Thanks,
>> Teresa
>>
>> diff --git a/lib/Linker/IRMover.cpp b/lib/Linker/IRMover.cpp
>> index 309690f..9900ecc 100644
>> --- a/lib/Linker/IRMover.cpp
>> +++ b/lib/Linker/IRMover.cpp
>> @@ -1211,6 +1211,12 @@ void
>> IRLinker::findNeededSubprograms(ValueToValueMapTy &ValueMap) {
>>    for (unsigned I = 0, E = CompileUnits->getNumOperands(); I != E; ++I) {
>>      auto *CU = cast<DICompileUnit>(CompileUnits->getOperand(I));
>>      assert(CU && "Expected valid compile unit");
>> +    SmallPtrSet<DISubprogram *, 8> ImportedEntitySPs;
>> +    for (auto *IE : CU->getImportedEntities()) {
>> +      assert(IE->getEntity());
>> +      if (auto *SP = dyn_cast<DISubprogram>(IE->getEntity()))
>> +        ImportedEntitySPs.insert(SP);
>> +    }
>>      for (auto *Op : CU->getSubprograms()) {
>>        // Unless we were doing function importing and deferred metadata linking,
>>        // any needed SPs should have been mapped as they would be reached
>> @@ -1218,7 +1224,7 @@ void
>> IRLinker::findNeededSubprograms(ValueToValueMapTy &ValueMap) {
>>        // function bodies, or from DILocation on inlined instructions).
>>        assert(!(ValueMap.MD()[Op] && IsMetadataLinkingPostpass) &&
>>               "DISubprogram shouldn't be mapped yet");
>> -      if (!ValueMap.MD()[Op])
>> +      if (!ValueMap.MD()[Op] && !ImportedEntitySPs.count(Op))
>>          UnneededSubprograms.insert(Op);
>>      }
>>    }



-- 
Teresa Johnson | Software Engineer | tejohnson at google.com | 408-460-2413


More information about the llvm-commits mailing list