diff options
author | Manman Ren <manman.ren@gmail.com> | 2013-09-28 00:22:27 +0000 |
---|---|---|
committer | Manman Ren <manman.ren@gmail.com> | 2013-09-28 00:22:27 +0000 |
commit | 804f034bd18789e9bbf4c70c10189dd6dbf04128 (patch) | |
tree | 934646950d694157e4fc94e5fd7bb19a8e231697 /lib/Bitcode/Reader | |
parent | 6ff59a16a05d43fdda587ce600b5b42a63cf3d33 (diff) | |
download | external_llvm-804f034bd18789e9bbf4c70c10189dd6dbf04128.zip external_llvm-804f034bd18789e9bbf4c70c10189dd6dbf04128.tar.gz external_llvm-804f034bd18789e9bbf4c70c10189dd6dbf04128.tar.bz2 |
AutoUpgrade: upgrade from scalar TBAA format to struct-path aware TBAA format.
We treat TBAA tags as struct-path aware TBAA format when the first operand
is a MDNode and the tag has 3 or more operands.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191593 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Bitcode/Reader')
-rw-r--r-- | lib/Bitcode/Reader/BitcodeReader.cpp | 6 | ||||
-rw-r--r-- | lib/Bitcode/Reader/BitcodeReader.h | 2 |
2 files changed, 8 insertions, 0 deletions
diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp index 0c20163..e408cd1 100644 --- a/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/lib/Bitcode/Reader/BitcodeReader.cpp @@ -17,6 +17,7 @@ #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/InlineAsm.h" #include "llvm/IR/IntrinsicInst.h" +#include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" #include "llvm/IR/OperandTraits.h" #include "llvm/IR/Operator.h" @@ -2123,6 +2124,8 @@ bool BitcodeReader::ParseMetadataAttachment() { return Error("Invalid metadata kind ID"); Value *Node = MDValueList.getValueFwdRef(Record[i+1]); Inst->setMetadata(I->second, cast<MDNode>(Node)); + if (I->second == LLVMContext::MD_tbaa) + InstsWithTBAATag.push_back(Inst); } break; } @@ -3134,6 +3137,9 @@ bool BitcodeReader::MaterializeModule(Module *M, std::string *ErrInfo) { } std::vector<std::pair<Function*, Function*> >().swap(UpgradedIntrinsics); + for (unsigned I = 0, E = InstsWithTBAATag.size(); I < E; I++) + UpgradeInstWithTBAATag(InstsWithTBAATag[I]); + return false; } diff --git a/lib/Bitcode/Reader/BitcodeReader.h b/lib/Bitcode/Reader/BitcodeReader.h index 9533597..b284e8c 100644 --- a/lib/Bitcode/Reader/BitcodeReader.h +++ b/lib/Bitcode/Reader/BitcodeReader.h @@ -144,6 +144,8 @@ class BitcodeReader : public GVMaterializer { std::vector<std::pair<GlobalAlias*, unsigned> > AliasInits; std::vector<std::pair<Function*, unsigned> > FunctionPrefixes; + SmallVector<Instruction*, 64> InstsWithTBAATag; + /// MAttributes - The set of attributes by index. Index zero in the /// file is for null, and is thus not represented here. As such all indices /// are off by one. |