Add support for constant propogation of multiplies
authorChris Lattner <sabre@nondot.org>
Fri, 20 Jul 2001 19:15:36 +0000 (19:15 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 20 Jul 2001 19:15:36 +0000 (19:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/ConstantFold.cpp

index e0a4ffbfb059ba3d2178eb37676b4aeb46481e49..e573c4b82ba20460371fe1e52e874b2473413b89 100644 (file)
@@ -42,6 +42,11 @@ class TemplateRules : public ConstRules {
     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 @@ class TemplateRules : public ConstRules {
   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 @@ struct DirectRules
     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();