Index: src/IceTranslator.cpp |
diff --git a/src/IceTranslator.cpp b/src/IceTranslator.cpp |
index 59403d284e12e9a9e3da62a0ab63236d1df15ed2..05332b4498ba2b4020d06a97c7ba21f652abefbd 100644 |
--- a/src/IceTranslator.cpp |
+++ b/src/IceTranslator.cpp |
@@ -16,7 +16,9 @@ |
#include "IceCfg.h" |
#include "IceClFlags.h" |
+#include "IceDefs.h" |
#include "IceTargetLowering.h" |
+#include "llvm/IR/Module.h" |
#include <iostream> |
@@ -24,14 +26,58 @@ using namespace Ice; |
Translator::~Translator() {} |
-void Translator::translateFcn(Ice::Cfg *Fcn) { |
+namespace { |
+void setValueName(llvm::Value *V, const char *Kind, const IceString &Prefix, |
+ uint32_t &NameIndex, Ostream &errs) { |
+ if (V->hasName()) { |
+ const std::string &Name(V->getName()); |
+ if (Name.find(Prefix) == 0) { |
+ errs << "Warning: Default " << Kind << " prefix '" << Prefix |
+ << "' conflicts with name '" << Name << "'.\n"; |
+ } |
+ return; |
+ } |
+ if (NameIndex == 0) { |
+ V->setName(Prefix); |
+ ++NameIndex; |
+ return; |
+ } |
+ std::string Buffer; |
+ llvm::raw_string_ostream StrBuf(Buffer); |
+ StrBuf << Prefix << NameIndex; |
+ V->setName(StrBuf.str()); |
+ ++NameIndex; |
+} |
+} // end of anonymous namespace |
+ |
+void Translator::nameUnnamedGlobalAddresses(llvm::Module *Mod) { |
+ const IceString &GlobalPrefix = Flags.DefaultGlobalPrefix; |
+ Ostream &errs = Ctx->getStrDump(); |
+ if (!GlobalPrefix.empty()) { |
+ uint32_t NameIndex = 0; |
+ for (llvm::Module::global_iterator I = Mod->global_begin(), |
+ E = Mod->global_end(); |
+ I != E; ++I) { |
+ setValueName(I, "global", GlobalPrefix, NameIndex, errs); |
+ } |
+ } |
+ const IceString &FunctionPrefix = Flags.DefaultFunctionPrefix; |
+ if (FunctionPrefix.empty()) |
+ return; |
+ uint32_t NameIndex = 0; |
+ for (llvm::Module::iterator I = Mod->begin(), E = Mod->end(); I != E; ++I) { |
+ setValueName(I, "function", FunctionPrefix, NameIndex, errs); |
+ } |
+} |
+ |
+void Translator::translateFcn(Cfg *Fcn) { |
Func.reset(Fcn); |
if (Ctx->getFlags().DisableInternal) |
Func->setInternal(false); |
if (Ctx->getFlags().DisableTranslation) { |
Func->dump(); |
} else { |
- Ice::Timer TTranslate; |
+ Timer TTranslate; |
Func->translate(); |
if (Ctx->getFlags().SubzeroTimingEnabled) { |
std::cerr << "[Subzero timing] Translate function " |
@@ -43,7 +89,7 @@ void Translator::translateFcn(Ice::Cfg *Fcn) { |
ErrorStatus = true; |
} |
- Ice::Timer TEmit; |
+ Timer TEmit; |
Func->emit(); |
if (Ctx->getFlags().SubzeroTimingEnabled) { |
std::cerr << "[Subzero timing] Emit function " << Func->getFunctionName() |