diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2012-11-29 15:22:06 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2012-11-29 15:22:06 +0000 |
commit | 30484fc7042f2c9e38dba7c004cb167255aad180 (patch) | |
tree | 748547e1251f095df9b23deabb985266bff49607 | |
parent | f433cecf9695b5ef7a585ebcee65bae1d6e459b5 (diff) | |
download | bcm5719-llvm-30484fc7042f2c9e38dba7c004cb167255aad180.tar.gz bcm5719-llvm-30484fc7042f2c9e38dba7c004cb167255aad180.zip |
[msan] Handle vector manipulation instructions.
Handle insertelement, extractelement, shufflevector.
llvm-svn: 168889
-rw-r--r-- | llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp index e74ff5c57c3..4b14f44d8ec 100644 --- a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp @@ -743,6 +743,31 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> { IRB.CreateAlignedStore(getOrigin(Val), getOriginPtr(Addr, IRB), I.getAlignment()); } + // Vector manipulation. + void visitExtractElementInst(ExtractElementInst &I) { + insertCheck(I.getOperand(1), &I); + IRBuilder<> IRB(&I); + setShadow(&I, IRB.CreateExtractElement(getShadow(&I, 0), I.getOperand(1), + "_msprop")); + setOrigin(&I, getOrigin(&I, 0)); + } + + void visitInsertElementInst(InsertElementInst &I) { + insertCheck(I.getOperand(2), &I); + IRBuilder<> IRB(&I); + setShadow(&I, IRB.CreateInsertElement(getShadow(&I, 0), getShadow(&I, 1), + I.getOperand(2), "_msprop")); + setOriginForNaryOp(I); + } + + void visitShuffleVectorInst(ShuffleVectorInst &I) { + insertCheck(I.getOperand(2), &I); + IRBuilder<> IRB(&I); + setShadow(&I, IRB.CreateShuffleVector(getShadow(&I, 0), getShadow(&I, 1), + I.getOperand(2), "_msprop")); + setOriginForNaryOp(I); + } + // Casts. void visitSExtInst(SExtInst &I) { IRBuilder<> IRB(&I); |