[PATCH] D24533: Fix auto-upgrade of TBAA tags in Bitcode Reader
Duncan P. N. Exon Smith via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 13 17:48:08 PDT 2016
> On 2016-Sep-13, at 16:58, Mehdi Amini <mehdi.amini at apple.com> wrote:
>
>>
>> On Sep 13, 2016, at 4:52 PM, Duncan P. N. Exon Smith <dexonsmith at apple.com> wrote:
>>
>>
>>> On 2016-Sep-13, at 16:37, Mehdi AMINI <mehdi.amini at apple.com> wrote:
>>>
>>> mehdi_amini added a comment.
>>>
>>> Sorry forgot the test case, will update soon!
>>>
>>>
>>> https://reviews.llvm.org/D24533
>>
>>> Index: lib/Bitcode/Reader/BitcodeReader.cpp
>>> ===================================================================
>>> --- lib/Bitcode/Reader/BitcodeReader.cpp
>>> +++ lib/Bitcode/Reader/BitcodeReader.cpp
>>> @@ -4404,11 +4403,11 @@
>>> if (HasSeenOldLoopTags && I->second == LLVMContext::MD_loop)
>>> MD = upgradeInstructionLoopAttachment(*MD);
>>>
>>> - Inst->setMetadata(I->second, MD);
>>> if (I->second == LLVMContext::MD_tbaa) {
>>> - InstsWithTBAATag.push_back(Inst);
>>> - continue;
>>> + assert(!isa<TempMDTuple>() && "should load metadata before attachment");
>>
>> I don't think this compiles (perhaps you didn't try an asserts build?).
>> Two reasons: isa<>() takes an argument, and TempMDTuple is defined
>> something like this:
>> --
>> typedef std::unique_ptr<MDTuple, SomeDeleter> TempMDTuple;
>> --
>> I think you should call 'MD->isTemporary()' instead.
>
> Yes, I’m using a debug build to bugpoint the test and hit this :)
>
>
>
>>
>>> + MD = UpgradeTBAANode(Inst->getContext(), MD);
>>> }
>>> + Inst->setMetadata(I->second, MD);
>>> }
>>> break;
>>> }
>>> Index: include/llvm/IR/AutoUpgrade.h
>>> ===================================================================
>>> --- include/llvm/IR/AutoUpgrade.h
>>> +++ include/llvm/IR/AutoUpgrade.h
>>> @@ -51,6 +52,11 @@
>>> /// module is modified.
>>> bool UpgradeModuleFlags(Module &M);
>>>
>>> + /// If the given TBAA tag uses the scalar TBAA format, create a new node
>>> + /// corresponding to the upgrade to the struct-path aware TBAA format.
>>> + /// Otherwise return the \p TBAANode itself.
>>> + MDNode *UpgradeTBAANode(LLVMContext &Context, MDNode *TBAANode);
>>> +
>>> /// If the TBAA tag for the given instruction uses the scalar TBAA format,
>>> /// we upgrade it to the struct-path aware TBAA format.
>>> void UpgradeInstWithTBAATag(Instruction *I);
>>
>> Do we need this still? I know there's a caller in LLParser, but that
>> could also be updated to use this API. Even better, we could delete the
>> upgrade logic from the LLParser entirely, given that we don't support
>> reading old textual IR (that would be a separate commit though).
>>
>
> I first update the LLParser to the new API, but it hasn’t loaded all the Metadata yet, so it gets a temporary node.
It can still use this API; just inline the new definition of
UpgradeInstWithTBAATag into LLParser and delete it from AutoUpgrade.cpp.
More information about the llvm-commits
mailing list