diff options
Diffstat (limited to 'lib/Bitcode/Reader')
-rw-r--r-- | lib/Bitcode/Reader/BitcodeReader.cpp | 23 | ||||
-rw-r--r-- | lib/Bitcode/Reader/BitcodeReader.h | 8 |
2 files changed, 10 insertions, 21 deletions
diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp index c86ee3048a..e948329fe8 100644 --- a/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/lib/Bitcode/Reader/BitcodeReader.cpp @@ -18,7 +18,6 @@ #include "llvm/InlineAsm.h" #include "llvm/Instructions.h" #include "llvm/Module.h" -#include "llvm/ParamAttrsList.h" #include "llvm/AutoUpgrade.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/SmallVector.h" @@ -32,11 +31,7 @@ void BitcodeReader::FreeState() { std::vector<PATypeHolder>().swap(TypeList); ValueList.clear(); - // Drop references to ParamAttrs. - for (unsigned i = 0, e = ParamAttrs.size(); i != e; ++i) - ParamAttrs[i]->dropRef(); - - std::vector<const ParamAttrsList*>().swap(ParamAttrs); + std::vector<PAListPtr>().swap(ParamAttrs); std::vector<BasicBlock*>().swap(FunctionBBs); std::vector<Function*>().swap(FunctionsWithBodies); DeferredFunctionInfo.clear(); @@ -205,7 +200,7 @@ bool BitcodeReader::ParseParamAttrBlock() { SmallVector<uint64_t, 64> Record; - ParamAttrsVector Attrs; + SmallVector<ParamAttrsWithIndex, 8> Attrs; // Read all the records. while (1) { @@ -242,13 +237,8 @@ bool BitcodeReader::ParseParamAttrBlock() { if (Record[i+1] != ParamAttr::None) Attrs.push_back(ParamAttrsWithIndex::get(Record[i], Record[i+1])); } - if (Attrs.empty()) { - ParamAttrs.push_back(0); - } else { - ParamAttrs.push_back(ParamAttrsList::get(Attrs)); - ParamAttrs.back()->addRef(); - } + ParamAttrs.push_back(PAListPtr::get(Attrs.begin(), Attrs.end())); Attrs.clear(); break; } @@ -1062,8 +1052,7 @@ bool BitcodeReader::ParseModule(const std::string &ModuleID) { Func->setCallingConv(Record[1]); bool isProto = Record[2]; Func->setLinkage(GetDecodedLinkage(Record[3])); - const ParamAttrsList *PAL = getParamAttrs(Record[4]); - Func->setParamAttrs(PAL); + Func->setParamAttrs(getParamAttrs(Record[4])); Func->setAlignment((1 << Record[5]) >> 1); if (Record[6]) { @@ -1427,7 +1416,7 @@ bool BitcodeReader::ParseFunctionBody(Function *F) { case bitc::FUNC_CODE_INST_INVOKE: { // INVOKE: [attrs, cc, normBB, unwindBB, fnty, op0,op1,op2, ...] if (Record.size() < 4) return Error("Invalid INVOKE record"); - const ParamAttrsList *PAL = getParamAttrs(Record[0]); + PAListPtr PAL = getParamAttrs(Record[0]); unsigned CCInfo = Record[1]; BasicBlock *NormalBB = getBasicBlock(Record[2]); BasicBlock *UnwindBB = getBasicBlock(Record[3]); @@ -1565,7 +1554,7 @@ bool BitcodeReader::ParseFunctionBody(Function *F) { if (Record.size() < 3) return Error("Invalid CALL record"); - const ParamAttrsList *PAL = getParamAttrs(Record[0]); + PAListPtr PAL = getParamAttrs(Record[0]); unsigned CCInfo = Record[1]; unsigned OpNum = 2; diff --git a/lib/Bitcode/Reader/BitcodeReader.h b/lib/Bitcode/Reader/BitcodeReader.h index d7df1a1b02..9a140d9524 100644 --- a/lib/Bitcode/Reader/BitcodeReader.h +++ b/lib/Bitcode/Reader/BitcodeReader.h @@ -15,6 +15,7 @@ #define BITCODE_READER_H #include "llvm/ModuleProvider.h" +#include "llvm/ParameterAttributes.h" #include "llvm/Type.h" #include "llvm/User.h" #include "llvm/Bitcode/BitstreamReader.h" @@ -24,7 +25,6 @@ namespace llvm { class MemoryBuffer; - class ParamAttrsList; class BitcodeReaderValueList : public User { std::vector<Use> Uses; @@ -93,7 +93,7 @@ class BitcodeReader : public ModuleProvider { /// ParamAttrs - The set of parameter 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. - std::vector<const ParamAttrsList*> ParamAttrs; + std::vector<PAListPtr> ParamAttrs; /// FunctionBBs - While parsing a function body, this is a list of the basic /// blocks for the function. @@ -156,10 +156,10 @@ private: if (ID >= FunctionBBs.size()) return 0; // Invalid ID return FunctionBBs[ID]; } - const ParamAttrsList *getParamAttrs(unsigned i) const { + PAListPtr getParamAttrs(unsigned i) const { if (i-1 < ParamAttrs.size()) return ParamAttrs[i-1]; - return 0; + return PAListPtr(); } /// getValueTypePair - Read a value/type pair out of the specified record from |