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

Unified Diff: src/IceConverter.cpp

Issue 1776473007: Subzero. Allocate global initializers from a dedicated arena. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: fixes ther llvm2ice converter; fixes the VariableDeclarationList destructor. Created 4 years, 9 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
Index: src/IceConverter.cpp
diff --git a/src/IceConverter.cpp b/src/IceConverter.cpp
index e69fd7a3a15106467839b9f9a08c204e128f079c..8455eaab7f7aa7063f6c2a40001bc7b29bb95bfa 100644
--- a/src/IceConverter.cpp
+++ b/src/IceConverter.cpp
@@ -659,13 +659,13 @@ class LLVM2ICEGlobalsConverter : public LLVM2ICEConverter {
operator=(const LLVM2ICEGlobalsConverter &) = delete;
public:
- explicit LLVM2ICEGlobalsConverter(Ice::Converter &Converter)
- : LLVM2ICEConverter(Converter) {}
+ explicit LLVM2ICEGlobalsConverter(Ice::Converter &Converter,
+ Ice::VariableDeclarationList *G)
+ : LLVM2ICEConverter(Converter), GlobalPool(G) {}
/// Converts global variables, and their initializers into ICE global variable
/// declarations, for module Mod. Returns the set of converted declarations.
- std::unique_ptr<Ice::VariableDeclarationList>
- convertGlobalsToIce(Module *Mod);
+ void convertGlobalsToIce(Module *Mod);
private:
// Adds the Initializer to the list of initializers for the Global variable
@@ -697,12 +697,11 @@ private:
report_fatal_error(StrBuf.str());
return 0;
}
+
+ Ice::VariableDeclarationList *GlobalPool;
};
-std::unique_ptr<Ice::VariableDeclarationList>
-LLVM2ICEGlobalsConverter::convertGlobalsToIce(Module *Mod) {
- std::unique_ptr<Ice::VariableDeclarationList> VariableDeclarations(
- new Ice::VariableDeclarationList);
+void LLVM2ICEGlobalsConverter::convertGlobalsToIce(Module *Mod) {
for (Module::const_global_iterator I = Mod->global_begin(),
E = Mod->global_end();
I != E; ++I) {
@@ -711,7 +710,7 @@ LLVM2ICEGlobalsConverter::convertGlobalsToIce(Module *Mod) {
Ice::GlobalDeclaration *Var = getConverter().getGlobalDeclaration(GV);
auto *VarDecl = cast<Ice::VariableDeclaration>(Var);
- VariableDeclarations->push_back(VarDecl);
+ GlobalPool->push_back(VarDecl);
if (!GV->hasInternalLinkage() && GV->hasInitializer()) {
std::string Buffer;
@@ -744,7 +743,6 @@ LLVM2ICEGlobalsConverter::convertGlobalsToIce(Module *Mod) {
addGlobalInitializer(*VarDecl, Initializer);
}
}
- return VariableDeclarations;
}
void LLVM2ICEGlobalsConverter::addGlobalInitializer(
@@ -757,7 +755,7 @@ void LLVM2ICEGlobalsConverter::addGlobalInitializer(
assert(!HasOffset && isa<IntegerType>(CDA->getElementType()) &&
(cast<IntegerType>(CDA->getElementType())->getBitWidth() == 8));
Global.addInitializer(Ice::VariableDeclaration::DataInitializer::create(
- CDA->getRawDataValues().data(), CDA->getNumElements()));
+ GlobalPool, CDA->getRawDataValues().data(), CDA->getNumElements()));
return;
}
@@ -766,7 +764,7 @@ void LLVM2ICEGlobalsConverter::addGlobalInitializer(
assert(!HasOffset && isa<IntegerType>(AT->getElementType()) &&
(cast<IntegerType>(AT->getElementType())->getBitWidth() == 8));
Global.addInitializer(Ice::VariableDeclaration::ZeroInitializer::create(
- AT->getNumElements()));
+ GlobalPool, AT->getNumElements()));
} else {
llvm_unreachable("Unhandled constant aggregate zero type");
}
@@ -788,7 +786,7 @@ void LLVM2ICEGlobalsConverter::addGlobalInitializer(
const Ice::GlobalDeclaration *Addr =
getConverter().getGlobalDeclaration(GV);
Global.addInitializer(Ice::VariableDeclaration::RelocInitializer::create(
- Addr, {Ice::RelocOffset::create(Ctx, Offset)}));
+ GlobalPool, Addr, {Ice::RelocOffset::create(Ctx, Offset)}));
return;
}
default:
@@ -890,8 +888,8 @@ void Converter::installGlobalDeclarations(Module *Mod) {
I != E; ++I) {
const GlobalVariable *GV = I;
constexpr bool NoSuppressMangling = false;
- auto *Var =
- VariableDeclaration::create(Ctx, NoSuppressMangling, GV->getLinkage());
+ auto *Var = VariableDeclaration::create(
+ GlobalDeclarationsPool.get(), NoSuppressMangling, GV->getLinkage());
Var->setAlignment(GV->getAlignment());
Var->setIsConstant(GV->isConstant());
Var->setName(GV->getName());
@@ -909,7 +907,9 @@ void Converter::installGlobalDeclarations(Module *Mod) {
}
void Converter::convertGlobals(Module *Mod) {
- lowerGlobals(LLVM2ICEGlobalsConverter(*this).convertGlobalsToIce(Mod));
+ LLVM2ICEGlobalsConverter(*this, GlobalDeclarationsPool.get())
+ .convertGlobalsToIce(Mod);
+ lowerGlobals(std::move(GlobalDeclarationsPool));
}
void Converter::convertFunctions() {

Powered by Google App Engine
This is Rietveld 408576698