opt: Add option to strip or add llvm value names
authorMatthias Braun <matze@braunis.de>
Wed, 24 Jun 2015 20:03:33 +0000 (20:03 +0000)
committerMatthias Braun <matze@braunis.de>
Wed, 24 Jun 2015 20:03:33 +0000 (20:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240583 91177308-0d34-0410-b5e6-96231b3b80d8

tools/opt/opt.cpp

index 55426e7b274353fc40c8cb22b1d0889e8a3f0fca..197dc4c7fa9195fc3fe69a55eed0919ad75bb0d0 100644 (file)
@@ -104,6 +104,12 @@ static cl::opt<bool>
 StripDebug("strip-debug",
            cl::desc("Strip debugger symbol info from translation unit"));
 
+static cl::opt<bool>
+StripValueNames("strip-value-names", cl::desc("Remove llvm value names"));
+
+static cl::opt<bool>
+NameValues("name-values", cl::desc("Give anonymous llvm values a name"));
+
 static cl::opt<bool>
 DisableInline("disable-inlining", cl::desc("Do not run the inliner pass"));
 
@@ -281,6 +287,37 @@ static TargetMachine* GetTargetMachine(Triple TheTriple, StringRef CPUStr,
                                         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 @@ int main(int argc, char **argv) {
   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().