[llvm] r190216 - TBAA: add isTBAAVtableAccess to MDNode so clients can call the function
Richard Smith
richard at metafoo.co.uk
Mon Sep 30 19:05:52 PDT 2013
On Fri, Sep 6, 2013 at 3:47 PM, Manman Ren <manman.ren at gmail.com> wrote:
> Author: mren
> Date: Fri Sep 6 17:47:05 2013
> New Revision: 190216
>
> URL: http://llvm.org/viewvc/llvm-project?rev=190216&view=rev
> Log:
> TBAA: add isTBAAVtableAccess to MDNode so clients can call the function
> instead of having its own implementation.
>
> The implementation of isTBAAVtableAccess is in TypeBasedAliasAnalysis.cpp
> since it is related to the format of TBAA metadata.
>
> The path for struct-path tbaa will be exercised by
> test/Instrumentation/ThreadSanitizer/read_from_global.ll, vptr_read.ll, and
> vptr_update.ll when struct-path tbaa is on by default.
>
> Modified:
> llvm/trunk/include/llvm/IR/Metadata.h
> llvm/trunk/lib/Analysis/TypeBasedAliasAnalysis.cpp
> llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
>
> Modified: llvm/trunk/include/llvm/IR/Metadata.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Metadata.h?rev=190216&r1=190215&r2=190216&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/Metadata.h (original)
> +++ llvm/trunk/include/llvm/IR/Metadata.h Fri Sep 6 17:47:05 2013
> @@ -161,6 +161,9 @@ public:
> return V->getValueID() == MDNodeVal;
> }
>
> + /// Check whether MDNode is a vtable access.
> + bool isTBAAVtableAccess() const;
> +
> /// Methods for metadata merging.
> static MDNode *getMostGenericTBAA(MDNode *A, MDNode *B);
> static MDNode *getMostGenericFPMath(MDNode *A, MDNode *B);
>
> Modified: llvm/trunk/lib/Analysis/TypeBasedAliasAnalysis.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/TypeBasedAliasAnalysis.cpp?rev=190216&r1=190215&r2=190216&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/TypeBasedAliasAnalysis.cpp (original)
> +++ llvm/trunk/lib/Analysis/TypeBasedAliasAnalysis.cpp Fri Sep 6 17:47:05
> 2013
> @@ -458,6 +458,25 @@ TypeBasedAliasAnalysis::getModRefInfo(Im
> return AliasAnalysis::getModRefInfo(CS1, CS2);
> }
>
> +bool MDNode::isTBAAVtableAccess() const {
> + if (!EnableStructPathTBAA) {
> + if (getNumOperands() < 1) return false;
> + if (MDString *Tag1 = dyn_cast<MDString>(getOperand(0))) {
>
This is also causing a crash, for the same reason: getOperand(0) can
apparently return null here.
> + if (Tag1->getString() == "vtable pointer") return true;
> + }
> + return false;
> + }
> +
> + // For struct-path aware TBAA, we use the access type of the tag.
> + if (getNumOperands() < 2) return false;
> + MDNode *Tag = cast_or_null<MDNode>(getOperand(1));
> + if (!Tag) return false;
> + if (MDString *Tag1 = dyn_cast<MDString>(Tag->getOperand(0))) {
> + if (Tag1->getString() == "vtable pointer") return true;
> + }
> + return false;
> +}
> +
> MDNode *MDNode::getMostGenericTBAA(MDNode *A, MDNode *B) {
> if (!A || !B)
> return NULL;
>
> Modified: llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp?rev=190216&r1=190215&r2=190216&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
> (original)
> +++ llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp Fri Sep
> 6 17:47:05 2013
> @@ -240,12 +240,8 @@ bool ThreadSanitizer::doInitialization(M
> }
>
> static bool isVtableAccess(Instruction *I) {
> - if (MDNode *Tag = I->getMetadata(LLVMContext::MD_tbaa)) {
> - if (Tag->getNumOperands() < 1) return false;
> - if (MDString *Tag1 = dyn_cast<MDString>(Tag->getOperand(0))) {
> - if (Tag1->getString() == "vtable pointer") return true;
> - }
> - }
> + if (MDNode *Tag = I->getMetadata(LLVMContext::MD_tbaa))
> + return Tag->isTBAAVtableAccess();
> return false;
> }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130930/26f3ee96/attachment.html>
More information about the llvm-commits
mailing list