[PATCH] D14199: [compiler-rt] [tsan] Unify aarch64 mapping

Dmitry Vyukov via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 5 08:20:10 PST 2015


dvyukov added inline comments.

================
Comment at: lib/tsan/rtl/tsan_platform.h:186
@@ -152,3 +185,3 @@
   return (mem >= kHeapMemBeg && mem < kHeapMemEnd) ||
          (mem >= kLoAppMemBeg && mem < kLoAppMemEnd) ||
          (mem >= kHiAppMemBeg && mem < kHiAppMemEnd);
----------------
Won't it then be faster to inline all 3 variants?

E.g. 

  struct Mapping39 {
    static const uptr kLoAppMemBeg = 0x...;
    static const uptr kLoAppMemEnd = 0x...;
    static const uptr kShadowBeg = 0x...;
    ...
  };
  
  struct Mapping42 {
    static const uptr kLoAppMemBeg = 0x...;
    static const uptr kLoAppMemEnd = 0x...;
    static const uptr kShadowBeg = 0x...;
    ...
  };
  
  template<typename Mapping>
  uptr MemToShadowImpl(uptr x) {
    return (((x) & ~(Mapping::kAppMemMsk | (kShadowCell - 1)))
        ^ Mapping::kAppMemXor) * kShadowCnt;
  }
  
  uptr MemToShadow(uptr x) {
    if (vma_size == 39)
      return MemToShadowImpl<Mapping39>(x);
    else
      return MemToShadowImpl<Mapping42>(x);
    DCHECK(0);
  }

I suspect it can be faster as it is inlinable. And probably compiler will be able to do some common expressions merging, so the code won't be too large.


http://reviews.llvm.org/D14199





More information about the llvm-commits mailing list