From b5bcbc3bef1f81fe600ef1b2be919d48e19dbd33 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 20 Jul 2001 19:15:36 +0000 Subject: Add support for constant propogation of multiplies git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/ConstantFold.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/VMCore/ConstantFold.cpp b/lib/VMCore/ConstantFold.cpp index e0a4ffbfb0..e573c4b82b 100644 --- a/lib/VMCore/ConstantFold.cpp +++ b/lib/VMCore/ConstantFold.cpp @@ -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(); -- cgit v1.2.3