Index: tools/opt/opt.cpp =================================================================== --- tools/opt/opt.cpp +++ tools/opt/opt.cpp @@ -105,6 +105,12 @@ cl::desc("Strip debugger symbol info from translation unit")); static cl::opt +StripValueNames("strip-value-names", cl::desc("Remove llvm value names")); + +static cl::opt +NameValues("name-values", cl::desc("Give anonymous llvm values a name")); + +static cl::opt DisableInline("disable-inlining", cl::desc("Do not run the inliner pass")); static cl::opt @@ -281,6 +287,37 @@ GetCodeGenOptLevel()); } +static void removeValueNames(Module &Mod) { + for (Function &F : Mod) { + for (BasicBlock &BB : F) { + BB.setName(""); + for (Instruction &I : BB) + I.setName(""); + } + } +} + +static void nameValuesInFunction(Function &F) { + bool FirstBB = true; + for (BasicBlock &BB : F) { + if (!BB.hasName()) + BB.setName(FirstBB ? "entry" : "BB"); + FirstBB = false; + + for (Instruction &I : BB) { + if (I.getType()->isVoidTy()) + continue; + if (!I.hasName()) + I.setName("v"); + } + } +} + +static void nameValues(Module &Mod) { + for (Function &F : Mod) + nameValuesInFunction(F); +} + #ifdef LINK_POLLY_INTO_TOOLS namespace polly { void initializePollyPasses(llvm::PassRegistry &Registry); @@ -351,6 +388,12 @@ if (StripDebug) StripDebugInfo(*M); + if (StripValueNames) + removeValueNames(*M); + + if (NameValues) + nameValues(*M); + // Immediately run the verifier to catch any problems before starting up the // pass pipelines. Otherwise we can crash on broken code during // doInitialization().