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

Unified Diff: src/IceGlobalContext.cpp

Issue 1838753002: Subzero: Remove IceString. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Code review changes 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
« no previous file with comments | « src/IceGlobalContext.h ('k') | src/IceGlobalInits.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceGlobalContext.cpp
diff --git a/src/IceGlobalContext.cpp b/src/IceGlobalContext.cpp
index d353bfe3874352d9ee789a218c84c5ab5a115634..8ba5b9219403e59ae1f97c4a9d4d7905431fc7d0 100644
--- a/src/IceGlobalContext.cpp
+++ b/src/IceGlobalContext.cpp
@@ -43,16 +43,11 @@
namespace std {
template <> struct hash<Ice::RelocatableTuple> {
size_t operator()(const Ice::RelocatableTuple &Key) const {
- if (!Key.EmitString.empty()) {
- return hash<Ice::IceString>()(Key.EmitString);
- }
-
- // If there's no emit string, then we use the relocatable's name, plus the
- // hash of a combination of the number of OffsetExprs and the known, fixed
- // offset for the reloc. We left shift the known relocatable by 5 trying to
- // minimize the interaction between the bits in OffsetExpr.size() and
- // Key.Offset.
- return hash<Ice::IceString>()(Key.Name) +
+ // Use the relocatable's name, plus the hash of a combination of the number
+ // of OffsetExprs and the known, fixed offset for the reloc. We left shift
+ // the known relocatable by 5 trying to minimize the interaction between the
+ // bits in OffsetExpr.size() and Key.Offset.
+ return hash<Ice::SizeT>()(Key.Name.getID()) +
hash<std::size_t>()(Key.OffsetExpr.size() + (Key.Offset << 5));
}
};
@@ -218,7 +213,8 @@ public:
UndefPool Undefs;
};
-void GlobalContext::CodeStats::dump(const IceString &Name, GlobalContext *Ctx) {
+void GlobalContext::CodeStats::dump(const std::string &Name,
+ GlobalContext *Ctx) {
if (!BuildDefs::dump())
return;
OstreamLocker _(Ctx);
@@ -253,10 +249,10 @@ void GlobalContext::CodeStats::dump(const IceString &Name, GlobalContext *Ctx) {
GlobalContext::GlobalContext(Ostream *OsDump, Ostream *OsEmit, Ostream *OsError,
ELFStreamer *ELFStr)
- : ConstPool(new ConstantPool()), ErrorStatus(), StrDump(OsDump),
- StrEmit(OsEmit), StrError(OsError), ObjectWriter(),
- OptQ(/*Sequential=*/Flags.isSequential(),
- /*MaxSize=*/Flags.getNumTranslationThreads()),
+ : Strings(new StringPool()), ConstPool(new ConstantPool()), ErrorStatus(),
+ StrDump(OsDump), StrEmit(OsEmit), StrError(OsError), IntrinsicsInfo(this),
+ ObjectWriter(), OptQ(/*Sequential=*/Flags.isSequential(),
+ /*MaxSize=*/Flags.getNumTranslationThreads()),
// EmitQ is allowed unlimited size.
EmitQ(/*Sequential=*/Flags.isSequential()),
DataLowering(TargetDataLowering::createLowering(this)) {
@@ -300,7 +296,7 @@ GlobalContext::GlobalContext(Ostream *OsDump, Ostream *OsEmit, Ostream *OsError,
// Define runtime helper functions.
#define X(Tag, Name) \
RuntimeHelperFunc[static_cast<size_t>(RuntimeHelper::H_##Tag)] = \
- getConstantExternSym(Name);
+ getConstantExternSym(getGlobalString(Name));
RUNTIME_HELPER_FUNCTIONS_TABLE
#undef X
@@ -348,7 +344,8 @@ void GlobalContext::translateFunctions() {
// The Cfg has already emitted into the assembly buffer, so
// stats have been fully collected into this thread's TLS.
// Dump them before TLS is reset for the next Cfg.
- dumpStats(Func->getFunctionNameAndSize());
+ if (BuildDefs::dump())
+ dumpStats(Func->getFunctionNameAndSize());
auto Asm = Func->releaseAssembler();
// Copy relevant fields into Asm before Func is deleted.
Asm->setFunctionName(Func->getFunctionName());
@@ -409,7 +406,7 @@ void GlobalContext::saveBlockInfoPtrs() {
}
}
-void GlobalContext::lowerGlobals(const IceString &SectionSuffix) {
+void GlobalContext::lowerGlobals(const std::string &SectionSuffix) {
TimerMarker T(TimerStack::TT_emitGlobalInitializers, this);
const bool DumpGlobalVariables = BuildDefs::dump() &&
(Flags.getVerbose() & IceV_GlobalInit) &&
@@ -455,7 +452,7 @@ void GlobalContext::lowerProfileData() {
// Note: if you change this symbol, make sure to update
// runtime/szrt_profiler.c as well.
- ProfileBlockInfoVarDecl->setName("__Sz_block_profile_info");
+ ProfileBlockInfoVarDecl->setName(this, "__Sz_block_profile_info");
for (const VariableDeclaration *PBI : ProfileBlockInfos) {
if (Cfg::isProfileGlobal(*PBI)) {
@@ -478,6 +475,11 @@ void GlobalContext::lowerProfileData() {
lowerGlobals(ProfileDataSection);
}
+bool GlobalContext::matchSymbolName(const GlobalString &SymbolName,
+ const std::string &Match) {
+ return Match.empty() || Match == SymbolName.toString();
+}
+
void GlobalContext::emitItems() {
const bool Threaded = !getFlags().isSequential();
// Pending is a vector containing the reassembled, ordered list of
@@ -568,7 +570,7 @@ void GlobalContext::emitItems() {
std::unique_ptr<Assembler> Asm = Item->getAsm();
Asm->alignFunction();
- const IceString &Name = Asm->getFunctionName();
+ GlobalString Name = Asm->getFunctionName();
switch (getFlags().getOutFileType()) {
case FT_Elf:
getObjectWriter()->writeFunctionCode(Name, Asm->getInternal(),
@@ -618,6 +620,15 @@ GlobalContext::~GlobalContext() {
Dtor();
}
+void GlobalContext::dumpStrings() {
+ if (!getFlags().getDumpStrings())
+ return;
+ OstreamLocker _(this);
+ Ostream &Str = getStrDump();
+ Str << "GlobalContext strings:\n";
+ getStrings()->dump(Str);
+}
+
void GlobalContext::dumpConstantLookupCounts() {
if (!BuildDefs::dump())
return;
@@ -698,21 +709,20 @@ Constant *GlobalContext::getConstantDouble(double ConstantDouble) {
return getConstPool()->Doubles.getOrAdd(this, ConstantDouble);
}
-Constant *GlobalContext::getConstantSym(const RelocOffsetT Offset,
- const RelocOffsetArray &OffsetExpr,
- const IceString &Name,
- const IceString &EmitString) {
+Constant *GlobalContext::getConstantSymWithEmitString(
+ const RelocOffsetT Offset, const RelocOffsetArray &OffsetExpr,
+ GlobalString Name, const std::string &EmitString) {
return getConstPool()->Relocatables.getOrAdd(
this, RelocatableTuple(Offset, OffsetExpr, Name, EmitString));
}
Constant *GlobalContext::getConstantSym(RelocOffsetT Offset,
- const IceString &Name) {
+ GlobalString Name) {
constexpr char EmptyEmitString[] = "";
- return getConstantSym(Offset, {}, Name, EmptyEmitString);
+ return getConstantSymWithEmitString(Offset, {}, Name, EmptyEmitString);
}
-Constant *GlobalContext::getConstantExternSym(const IceString &Name) {
+Constant *GlobalContext::getConstantExternSym(GlobalString Name) {
constexpr RelocOffsetT Offset = 0;
return getConstPool()->ExternRelocatables.getOrAdd(
this, RelocatableTuple(Offset, {}, Name));
@@ -725,7 +735,7 @@ Constant *GlobalContext::getConstantUndef(Type Ty) {
Constant *GlobalContext::getConstantZero(Type Ty) {
Constant *Zero = ConstZeroForType[Ty];
if (Zero == nullptr)
- llvm::report_fatal_error("Unsupported constant type: " + typeIceString(Ty));
+ llvm::report_fatal_error("Unsupported constant type: " + typeStdString(Ty));
return Zero;
}
@@ -772,12 +782,9 @@ ConstantList GlobalContext::getConstantPool(Type Ty) {
case IceType_v16i8:
case IceType_v8i16:
case IceType_v4i32:
- case IceType_v4f32: {
- IceString Str;
- llvm::raw_string_ostream BaseOS(Str);
- BaseOS << "Unsupported constant type: " << Ty;
- llvm_unreachable(BaseOS.str().c_str());
- } break;
+ case IceType_v4f32:
+ llvm::report_fatal_error("Unsupported constant type: " + typeStdString(Ty));
+ break;
case IceType_void:
case IceType_NUM:
break;
@@ -789,6 +796,10 @@ ConstantList GlobalContext::getConstantExternSyms() {
return getConstPool()->ExternRelocatables.getConstantPool();
}
+GlobalString GlobalContext::getGlobalString(const std::string &Name) {
+ return GlobalString::createWithString(this, Name);
+}
+
JumpTableDataList GlobalContext::getJumpTables() {
JumpTableDataList JumpTables(*getJumpTableList());
// Make order deterministic by sorting into functions and then ID of the jump
@@ -815,14 +826,14 @@ JumpTableDataList GlobalContext::getJumpTables() {
}
JumpTableData &
-GlobalContext::addJumpTable(const IceString &FuncName, SizeT Id,
+GlobalContext::addJumpTable(GlobalString FuncName, SizeT Id,
const JumpTableData::TargetList &TargetList) {
auto JumpTableList = getJumpTableList();
JumpTableList->emplace_back(FuncName, Id, TargetList);
return JumpTableList->back();
}
-TimerStackIdT GlobalContext::newTimerStackID(const IceString &Name) {
+TimerStackIdT GlobalContext::newTimerStackID(const std::string &Name) {
if (!BuildDefs::timers())
return 0;
auto Timers = getTimers();
@@ -832,7 +843,7 @@ TimerStackIdT GlobalContext::newTimerStackID(const IceString &Name) {
}
TimerIdT GlobalContext::getTimerID(TimerStackIdT StackID,
- const IceString &Name) {
+ const std::string &Name) {
auto Timers = &ICE_TLS_GET_FIELD(TLS)->Timers;
assert(StackID < Timers->size());
return Timers->at(StackID).getTimerID(Name);
@@ -857,7 +868,7 @@ void GlobalContext::resetTimer(TimerStackIdT StackID) {
}
void GlobalContext::setTimerName(TimerStackIdT StackID,
- const IceString &NewName) {
+ const std::string &NewName) {
auto Timers = &ICE_TLS_GET_FIELD(TLS)->Timers;
assert(StackID < Timers->size());
Timers->at(StackID).setName(NewName);
@@ -898,7 +909,7 @@ std::unique_ptr<EmitterWorkItem> GlobalContext::emitQueueBlockingPop() {
return EmitQ.blockingPop();
}
-void GlobalContext::dumpStats(const IceString &Name, bool Final) {
+void GlobalContext::dumpStats(const std::string &Name, bool Final) {
if (!getFlags().getDumpStats())
return;
if (Final) {
@@ -917,10 +928,15 @@ void GlobalContext::dumpTimers(TimerStackIdT StackID, bool DumpCumulative) {
Timers->at(StackID).dump(getStrDump(), DumpCumulative);
}
+LockedPtr<StringPool>
+GlobalStringPoolTraits::getStrings(const GlobalContext *PoolOwner) {
+ return PoolOwner->getStrings();
+}
+
ClFlags GlobalContext::Flags;
TimerIdT TimerMarker::getTimerIdFromFuncName(GlobalContext *Ctx,
- const IceString &FuncName) {
+ const std::string &FuncName) {
if (!BuildDefs::timers())
return 0;
if (!Ctx->getFlags().getTimeEachFunction())
« no previous file with comments | « src/IceGlobalContext.h ('k') | src/IceGlobalInits.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698