[PATCH] D53811: [MSan] another take at instrumenting inline assembly - now with calls
    Dmitry Vyukov via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Mon Oct 29 06:42:04 PDT 2018
    
    
  
dvyukov added a comment.
Otherwise looks good to me.
================
Comment at: lib/Transforms/Instrumentation/MemorySanitizer.cpp:3554
       Value *Operand = CI->getOperand(i);
-      Type *OpType = Operand->getType();
-      if (!OpType->isPointerTy())
-        continue;
-      Type *ElType = OpType->getPointerElementType();
-      if (!ElType->isSized())
-        continue;
-      Value *ShadowPtr, *OriginPtr;
-      std::tie(ShadowPtr, OriginPtr) = getShadowOriginPtr(
-          Operand, IRB, ElType, /*Alignment*/ 1, /*isStore*/ true);
-      Value *CShadow = getCleanShadow(ElType);
-      IRB.CreateStore(
-          CShadow,
-          IRB.CreatePointerCast(ShadowPtr, CShadow->getType()->getPointerTo()));
+      instrumentAsmArgument(Operand, I, IRB, DL, /*isOutput*/ true);
     }
----------------
After offline discussion, it's better to move stores _before_ the asm call because the asm call can publish some memory to other threads (also consistent with the way we instrument atomic ops).
But loads should precede stores because some args can be in/out.
After we move stores to before the call, we could combine the 2 loops, but it's unclear if it's a win code-wise or not.
Repository:
  rL LLVM
https://reviews.llvm.org/D53811
    
    
More information about the llvm-commits
mailing list