Index: src/PNaClTranslator.cpp |
diff --git a/src/PNaClTranslator.cpp b/src/PNaClTranslator.cpp |
index 7bbee75ab03525d6b2de0736e4de1b2493ff1ac8..259c62e2007a0244771720a8796c6202adf26616 100644 |
--- a/src/PNaClTranslator.cpp |
+++ b/src/PNaClTranslator.cpp |
@@ -166,8 +166,6 @@ class TopLevelParser : public NaClBitcodeParser { |
TopLevelParser &operator=(const TopLevelParser &) = delete; |
public: |
- typedef std::vector<Ice::FunctionDeclaration *> FunctionDeclarationListType; |
- |
TopLevelParser(Ice::Translator &Translator, NaClBitstreamCursor &Cursor, |
Ice::ErrorCode &ErrorStatus) |
: NaClBitcodeParser(Cursor), Translator(Translator), |
@@ -247,16 +245,16 @@ public: |
/// Sets the next function ID to the given LLVM function. |
void setNextFunctionID(Ice::FunctionDeclaration *Fcn) { |
- FunctionDeclarationList.push_back(Fcn); |
+ FunctionDeclarations.push_back(Fcn); |
} |
/// Returns the value id that should be associated with the the |
/// current function block. Increments internal counters during call |
/// so that it will be in correct position for next function block. |
NaClBcIndexSize_t getNextFunctionBlockValueID() { |
- size_t NumDeclaredFunctions = FunctionDeclarationList.size(); |
+ size_t NumDeclaredFunctions = FunctionDeclarations.size(); |
while (NextDefiningFunctionID < NumDeclaredFunctions && |
- FunctionDeclarationList[NextDefiningFunctionID]->isProto()) |
+ FunctionDeclarations[NextDefiningFunctionID]->isProto()) |
++NextDefiningFunctionID; |
if (NextDefiningFunctionID >= NumDeclaredFunctions) |
Fatal("More function blocks than defined function addresses"); |
@@ -265,8 +263,8 @@ public: |
/// Returns the function associated with ID. |
Ice::FunctionDeclaration *getFunctionByID(NaClBcIndexSize_t ID) { |
- if (ID < FunctionDeclarationList.size()) |
- return FunctionDeclarationList[ID]; |
+ if (ID < FunctionDeclarations.size()) |
+ return FunctionDeclarations[ID]; |
return reportGetFunctionByIDError(ID); |
} |
@@ -288,19 +286,19 @@ public: |
void createValueIDs() { |
assert(VariableDeclarations); |
ValueIDConstants.reserve(VariableDeclarations->size() + |
- FunctionDeclarationList.size()); |
+ FunctionDeclarations.size()); |
createValueIDsForFunctions(); |
createValueIDsForGlobalVars(); |
} |
/// Returns the number of function declarations in the bitcode file. |
- size_t getNumFunctionIDs() const { return FunctionDeclarationList.size(); } |
+ size_t getNumFunctionIDs() const { return FunctionDeclarations.size(); } |
/// Returns the number of global declarations (i.e. IDs) defined in |
/// the bitcode file. |
size_t getNumGlobalIDs() const { |
if (VariableDeclarations) { |
- return FunctionDeclarationList.size() + VariableDeclarations->size(); |
+ return FunctionDeclarations.size() + VariableDeclarations->size(); |
} else { |
return ValueIDConstants.size(); |
} |
@@ -324,7 +322,7 @@ public: |
/// Returns the global declaration (variable or function) with the |
/// given Index. |
Ice::GlobalDeclaration *getGlobalDeclarationByID(NaClBcIndexSize_t Index) { |
- size_t NumFunctionIds = FunctionDeclarationList.size(); |
+ size_t NumFunctionIds = FunctionDeclarations.size(); |
if (Index < NumFunctionIds) |
return getFunctionByID(Index); |
else |
@@ -353,18 +351,17 @@ private: |
// The types associated with each type ID. |
std::vector<ExtendedType> TypeIDValues; |
// The set of functions (prototype and defined). |
- FunctionDeclarationListType FunctionDeclarationList; |
- // The ID of the next possible defined function ID in |
- // FunctionDeclarationList. FunctionDeclarationList is filled |
- // first. It's the set of functions (either defined or isproto). Then |
- // function definitions are encountered/parsed and |
- // NextDefiningFunctionID is incremented to track the next |
- // actually-defined function. |
+ Ice::FunctionDeclarationList FunctionDeclarations; |
+ // The ID of the next possible defined function ID in FunctionDeclarations. |
+ // FunctionDeclarations is filled first. It's the set of functions (either |
+ // defined or isproto). Then function definitions are encountered/parsed and |
+ // NextDefiningFunctionID is incremented to track the next actually-defined |
+ // function. |
size_t NextDefiningFunctionID = 0; |
// The set of global variables. |
std::unique_ptr<Ice::VariableDeclarationList> VariableDeclarations; |
// Relocatable constants associated with global declarations. |
- std::vector<Ice::Constant *> ValueIDConstants; |
+ Ice::ConstantList ValueIDConstants; |
// Error recovery value to use when getFuncSigTypeByID fails. |
Ice::FuncSigType UndefinedFuncSigType; |
// The block parser currently being applied. Used for error |
@@ -427,7 +424,7 @@ private: |
getTranslator().getFlags().getDefaultFunctionPrefix(); |
if (!FunctionPrefix.empty()) { |
NaClBcIndexSize_t NameIndex = 0; |
- for (Ice::FunctionDeclaration *Func : FunctionDeclarationList) { |
+ for (Ice::FunctionDeclaration *Func : FunctionDeclarations) { |
installDeclarationName(Func, FunctionPrefix, "function", NameIndex); |
} |
} |
@@ -448,7 +445,7 @@ private: |
// Converts function declarations into constant value IDs. |
void createValueIDsForFunctions() { |
- for (const Ice::FunctionDeclaration *Func : FunctionDeclarationList) { |
+ for (const Ice::FunctionDeclaration *Func : FunctionDeclarations) { |
Ice::Constant *C = nullptr; |
if (!isIRGenerationDisabled()) { |
C = getConstantSym(Func->getName(), Func->getSuppressMangling(), |
@@ -524,10 +521,10 @@ TopLevelParser::reportGetFunctionByIDError(NaClBcIndexSize_t ID) { |
raw_string_ostream StrBuf(Buffer); |
StrBuf << "Function index " << ID |
<< " not allowed. Out of range. Must be less than " |
- << FunctionDeclarationList.size(); |
+ << FunctionDeclarations.size(); |
blockError(StrBuf.str()); |
- if (!FunctionDeclarationList.empty()) |
- return FunctionDeclarationList[0]; |
+ if (!FunctionDeclarations.empty()) |
+ return FunctionDeclarations[0]; |
Fatal(); |
} |
@@ -1233,9 +1230,10 @@ public: |
getTranslator().getContext()->pushTimer(TimerID, StackID); |
} |
- if (!isIRGenerationDisabled()) |
- Func = Ice::Cfg::create(getTranslator().getContext(), |
- getTranslator().getNextSequenceNumber()); |
+ // Note: The Cfg is created, even when IR generation is disabled. This |
+ // is done to install a CfgLocalAllocator for various internal containers. |
+ Func = Ice::Cfg::create(getTranslator().getContext(), |
+ getTranslator().getNextSequenceNumber()); |
Ice::Cfg::setCurrentCfg(Func.get()); |
// TODO(kschimpf) Clean up API to add a function signature to |
@@ -1336,7 +1334,7 @@ private: |
size_t CachedNumGlobalValueIDs; |
// Holds operands local to the function block, based on indices |
// defined in the bitcode file. |
- std::vector<Ice::Operand *> LocalOperands; |
+ Ice::OperandList LocalOperands; |
// Holds the index within LocalOperands corresponding to the next |
// instruction that generates a value. |
NaClBcIndexSize_t NextLocalInstIndex; |