[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