The contents of the SymTabValue class have been incorporated into the
[oota-llvm.git] / lib / VMCore / ConstantFolding.h
index 261174577c4f1c32db3475d6155f882ec65f554e..1479fe01ef889d6bfee42aa4b32c480874145227 100644 (file)
@@ -30,8 +30,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_OPT_CONSTANTHANDLING_H
-#define LLVM_OPT_CONSTANTHANDLING_H
+#ifndef LLVM_CONSTANTHANDLING_H
+#define LLVM_CONSTANTHANDLING_H
 
 #include "llvm/ConstantVals.h"
 #include "llvm/Instruction.h"
@@ -73,6 +73,8 @@ public:
                         const Constant *V2) const = 0;
   virtual Constant *mul(const Constant *V1, 
                         const Constant *V2) const = 0;
+  virtual Constant *div(const Constant *V1, 
+                        const Constant *V2) const = 0;
 
   virtual ConstantBool *lessthan(const Constant *V1, 
                                  const Constant *V2) const = 0;
@@ -146,6 +148,11 @@ inline Constant *operator*(const Constant &V1, const Constant &V2) {
   return ConstRules::get(V1)->mul(&V1, &V2);
 }
 
+inline Constant *operator/(const Constant &V1, const Constant &V2) {
+  assert(V1.getType() == V2.getType() && "Constant types must be identical!");
+  return ConstRules::get(V1)->div(&V1, &V2);
+}
+
 inline ConstantBool *operator<(const Constant &V1, 
                                const Constant &V2) {
   assert(V1.getType() == V2.getType() && "Constant types must be identical!");
@@ -197,6 +204,8 @@ inline Constant *ConstantFoldBinaryInstruction(unsigned Opcode,
   switch (Opcode) {
   case Instruction::Add:     return *V1 + *V2;
   case Instruction::Sub:     return *V1 - *V2;
+  case Instruction::Mul:     return *V1 * *V2;
+  case Instruction::Div:     return *V1 / *V2;
 
   case Instruction::SetEQ:   return *V1 == *V2;
   case Instruction::SetNE:   return *V1 != *V2;