diff --git a/tools/opt/Makefile b/tools/opt/Makefile
index 604e4766e15..7998a29097b 100644
--- a/tools/opt/Makefile
+++ b/tools/opt/Makefile
@@ -1,6 +1,6 @@
 LEVEL = ../..
 TOOLNAME = opt
-USEDLIBS = opt bcreader bcwriter asmwriter analysis vmcore support instrument
+USEDLIBS = opt bcreader bcwriter asmwriter analysis vmcore support instrument transforms
 
 include $(LEVEL)/Makefile.common
 
diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp
index 7563c397772..757194d89b1 100644
--- a/tools/opt/opt.cpp
+++ b/tools/opt/opt.cpp
@@ -13,13 +13,14 @@
 #include "llvm/Optimizations/AllOpts.h"
 #include "llvm/Transforms/Instrumentation/TraceValues.h"
 #include "llvm/Transforms/PrintModulePass.h"
+#include "llvm/Transforms/ConstantMerge.h"
 #include <fstream>
 
 using namespace opt;
 
 enum Opts {
   // Basic optimizations
-  dce, constprop, inlining, strip, mstrip,
+  dce, constprop, inlining, mergecons, strip, mstrip,
 
   // Miscellaneous Transformations
   trace, tracem, print,
@@ -35,6 +36,7 @@ struct {
   { dce      , new opt::DeadCodeElimination() },
   { constprop, new opt::ConstantPropogation() }, 
   { inlining , new opt::MethodInlining() },
+  { mergecons, new ConstantMerge() },
   { strip    , new opt::SymbolStripping() },
   { mstrip   , new opt::FullSymbolStripping() },
   { indvars  , new opt::InductionVariableCannonicalize() },
@@ -55,6 +57,7 @@ cl::EnumList<enum Opts> OptimizationList(cl::NoFlags,
   clEnumVal(dce      , "Dead Code Elimination"),
   clEnumVal(constprop, "Simple Constant Propogation"),
  clEnumValN(inlining , "inline", "Method Integration"),
+  clEnumVal(mergecons, "Merge identical global constants"),
   clEnumVal(strip    , "Strip Symbols"),
   clEnumVal(mstrip   , "Strip Module Symbols"),
   clEnumVal(indvars  , "Simplify Induction Variables"),