Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Unified Diff: src/PNaClTranslator.cpp

Issue 1293343003: Change to use arena allocation for function-local data in parser. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix nits. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/IceDefs.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « src/IceDefs.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698