Index: src/IceTranslator.cpp |
diff --git a/src/IceTranslator.cpp b/src/IceTranslator.cpp |
index 59403d284e12e9a9e3da62a0ab63236d1df15ed2..247eb9b302e03305dabe23b0ab3d6f624c4e1143 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,6 +26,41 @@ using namespace Ice; |
Translator::~Translator() {} |
+namespace { |
+static void setValueName(llvm::Value *V, const std::string &Prefix, |
+ uint32_t &NameIndex) { |
+ if (V->hasName()) { |
+ const std::string &Name(V->getName()); |
+ if (Name.find(Prefix) == 0) { |
+ std::string Buffer; |
+ llvm::raw_string_ostream StrBuf(Buffer); |
+ llvm::outs() << "Warning: Default global prefix '" << Prefix |
Jim Stichnoth
2014/09/11 22:08:19
Can you use Translator::getGlobalContext()->getStr
Karl
2014/09/12 16:29:06
Done.
|
+ << "' conflicts with name '" << Name << "'."; |
+ } |
+ return; |
+ } |
+ std::string Buffer; |
+ llvm::raw_string_ostream StrBuf(Buffer); |
+ StrBuf << Prefix << NameIndex; |
+ V->setName(StrBuf.str()); |
+ ++NameIndex; |
+} |
+} |
+ |
+void Translator::nameUnnamedGlobalAddresses(llvm::Module *Mod) { |
+ const std::string &Prefix = getFlags().DefaultGlobalPrefix; |
+ if (Prefix.empty()) return; |
+ uint32_t NameIndex = 0; |
+ for (llvm::Module::global_iterator |
+ I = Mod->global_begin(), E = Mod->global_end(); |
+ I != E; ++I) { |
+ setValueName(I, Prefix, NameIndex); |
+ } |
+ for (llvm::Module::iterator I = Mod->begin(), E = Mod->end(); I != E; ++I) { |
+ setValueName(I, Prefix, NameIndex); |
+ } |
+} |
+ |
void Translator::translateFcn(Ice::Cfg *Fcn) { |
Func.reset(Fcn); |
if (Ctx->getFlags().DisableInternal) |