Add support for constant propogation of multiplies

llvm-svn: 214
diff --git a/llvm/lib/VMCore/ConstantHandling.cpp b/llvm/lib/VMCore/ConstantHandling.cpp
index e0a4ffb..e573c4b 100644
--- a/llvm/lib/VMCore/ConstantHandling.cpp
+++ b/llvm/lib/VMCore/ConstantHandling.cpp
@@ -42,6 +42,11 @@
     return SubClassName::Sub((const ArgType *)V1, (const ArgType *)V2);  
   }
 
+  virtual ConstPoolVal *mul(const ConstPoolVal *V1, 
+                            const ConstPoolVal *V2) const { 
+    return SubClassName::Mul((const ArgType *)V1, (const ArgType *)V2);  
+  }
+
   virtual ConstPoolBool *lessthan(const ConstPoolVal *V1, 
                                   const ConstPoolVal *V2) const { 
     return SubClassName::LessThan((const ArgType *)V1, (const ArgType *)V2);
@@ -56,11 +61,12 @@
   inline static ConstPoolVal *Add(const ArgType *V1, const ArgType *V2) {
     return 0;
   }
-
   inline static ConstPoolVal *Sub(const ArgType *V1, const ArgType *V2) {
     return 0;
   }
-
+  inline static ConstPoolVal *Mul(const ArgType *V1, const ArgType *V2) {
+    return 0;
+  }
   inline static ConstPoolBool *LessThan(const ArgType *V1, const ArgType *V2) {
     return 0;
   }
@@ -138,6 +144,13 @@
     return new ConstPoolClass(*Ty, Result);
   }
 
+  inline static ConstPoolVal *Mul(const ConstPoolClass *V1, 
+				   const ConstPoolClass *V2) {
+    BuiltinType Result = (BuiltinType)V1->getValue() *
+                         (BuiltinType)V2->getValue();
+    return new ConstPoolClass(*Ty, Result);
+  }
+
   inline static ConstPoolBool *LessThan(const ConstPoolClass *V1, 
                                         const ConstPoolClass *V2) {
     bool Result = (BuiltinType)V1->getValue() < (BuiltinType)V2->getValue();