Move a bunch of code to a .cpp file, don't #include Instruction.h
authorChris Lattner <sabre@nondot.org>
Mon, 6 May 2002 17:54:50 +0000 (17:54 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 6 May 2002 17:54:50 +0000 (17:54 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2499 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ConstantHandling.h
lib/VMCore/ConstantFold.h
lib/VMCore/ConstantFolding.h

index 2203b9728d52eea25f9268f922ce898f1b36aa1d..97413c59e31c547c3cfb5c831ad28d3010169d52 100644 (file)
@@ -34,7 +34,6 @@
 #define LLVM_CONSTANTHANDLING_H
 
 #include "llvm/Constants.h"
-#include "llvm/Instruction.h"
 #include "llvm/Type.h"
 class PointerType;
 
@@ -198,47 +197,17 @@ inline ConstantBool *operator<=(const Constant &V1,
 //  Implement higher level instruction folding type instructions
 //===----------------------------------------------------------------------===//
 
-inline Constant *ConstantFoldCastInstruction(const Constant *V,
-                                             const Type *DestTy) {
-  return ConstRules::get(*V)->castTo(V, DestTy);
-}
-
-inline Constant *ConstantFoldUnaryInstruction(unsigned Opcode, 
-                                              const Constant *V) {
-  switch (Opcode) {
-  case Instruction::Not:  return ~*V;
-  }
-  return 0;
-}
-
-inline Constant *ConstantFoldBinaryInstruction(unsigned Opcode,
-                                               const Constant *V1, 
-                                               const Constant *V2) {
-  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::Rem:     return *V1 % *V2;
-
-  case Instruction::SetEQ:   return *V1 == *V2;
-  case Instruction::SetNE:   return *V1 != *V2;
-  case Instruction::SetLE:   return *V1 <= *V2;
-  case Instruction::SetGE:   return *V1 >= *V2;
-  case Instruction::SetLT:   return *V1 <  *V2;
-  case Instruction::SetGT:   return *V1 >  *V2;
-  }
-  return 0;
-}
-
-inline Constant *ConstantFoldShiftInstruction(unsigned Opcode,
-                                              const Constant *V1, 
-                                              const Constant *V2) {
-  switch (Opcode) {
-  case Instruction::Shl:     return *V1 << *V2;
-  case Instruction::Shr:     return *V1 >> *V2;
-  default:                   return 0;
-  }
-}
+// ConstantFoldInstruction - Attempt to constant fold the specified instruction.
+// If successful, the constant result is returned, if not, null is returned.
+//
+Constant *ConstantFoldInstruction(Instruction *I);
+
+// Constant fold various types of instruction...
+Constant *ConstantFoldCastInstruction(const Constant *V, const Type *DestTy);
+Constant *ConstantFoldUnaryInstruction(unsigned Opcode, const Constant *V);
+Constant *ConstantFoldBinaryInstruction(unsigned Opcode, const Constant *V1,
+                                        const Constant *V2);
+Constant *ConstantFoldShiftInstruction(unsigned Opcode, const Constant *V1,
+                                       const Constant *V2);
 
 #endif
index 2203b9728d52eea25f9268f922ce898f1b36aa1d..97413c59e31c547c3cfb5c831ad28d3010169d52 100644 (file)
@@ -34,7 +34,6 @@
 #define LLVM_CONSTANTHANDLING_H
 
 #include "llvm/Constants.h"
-#include "llvm/Instruction.h"
 #include "llvm/Type.h"
 class PointerType;
 
@@ -198,47 +197,17 @@ inline ConstantBool *operator<=(const Constant &V1,
 //  Implement higher level instruction folding type instructions
 //===----------------------------------------------------------------------===//
 
-inline Constant *ConstantFoldCastInstruction(const Constant *V,
-                                             const Type *DestTy) {
-  return ConstRules::get(*V)->castTo(V, DestTy);
-}
-
-inline Constant *ConstantFoldUnaryInstruction(unsigned Opcode, 
-                                              const Constant *V) {
-  switch (Opcode) {
-  case Instruction::Not:  return ~*V;
-  }
-  return 0;
-}
-
-inline Constant *ConstantFoldBinaryInstruction(unsigned Opcode,
-                                               const Constant *V1, 
-                                               const Constant *V2) {
-  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::Rem:     return *V1 % *V2;
-
-  case Instruction::SetEQ:   return *V1 == *V2;
-  case Instruction::SetNE:   return *V1 != *V2;
-  case Instruction::SetLE:   return *V1 <= *V2;
-  case Instruction::SetGE:   return *V1 >= *V2;
-  case Instruction::SetLT:   return *V1 <  *V2;
-  case Instruction::SetGT:   return *V1 >  *V2;
-  }
-  return 0;
-}
-
-inline Constant *ConstantFoldShiftInstruction(unsigned Opcode,
-                                              const Constant *V1, 
-                                              const Constant *V2) {
-  switch (Opcode) {
-  case Instruction::Shl:     return *V1 << *V2;
-  case Instruction::Shr:     return *V1 >> *V2;
-  default:                   return 0;
-  }
-}
+// ConstantFoldInstruction - Attempt to constant fold the specified instruction.
+// If successful, the constant result is returned, if not, null is returned.
+//
+Constant *ConstantFoldInstruction(Instruction *I);
+
+// Constant fold various types of instruction...
+Constant *ConstantFoldCastInstruction(const Constant *V, const Type *DestTy);
+Constant *ConstantFoldUnaryInstruction(unsigned Opcode, const Constant *V);
+Constant *ConstantFoldBinaryInstruction(unsigned Opcode, const Constant *V1,
+                                        const Constant *V2);
+Constant *ConstantFoldShiftInstruction(unsigned Opcode, const Constant *V1,
+                                       const Constant *V2);
 
 #endif
index 2203b9728d52eea25f9268f922ce898f1b36aa1d..97413c59e31c547c3cfb5c831ad28d3010169d52 100644 (file)
@@ -34,7 +34,6 @@
 #define LLVM_CONSTANTHANDLING_H
 
 #include "llvm/Constants.h"
-#include "llvm/Instruction.h"
 #include "llvm/Type.h"
 class PointerType;
 
@@ -198,47 +197,17 @@ inline ConstantBool *operator<=(const Constant &V1,
 //  Implement higher level instruction folding type instructions
 //===----------------------------------------------------------------------===//
 
-inline Constant *ConstantFoldCastInstruction(const Constant *V,
-                                             const Type *DestTy) {
-  return ConstRules::get(*V)->castTo(V, DestTy);
-}
-
-inline Constant *ConstantFoldUnaryInstruction(unsigned Opcode, 
-                                              const Constant *V) {
-  switch (Opcode) {
-  case Instruction::Not:  return ~*V;
-  }
-  return 0;
-}
-
-inline Constant *ConstantFoldBinaryInstruction(unsigned Opcode,
-                                               const Constant *V1, 
-                                               const Constant *V2) {
-  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::Rem:     return *V1 % *V2;
-
-  case Instruction::SetEQ:   return *V1 == *V2;
-  case Instruction::SetNE:   return *V1 != *V2;
-  case Instruction::SetLE:   return *V1 <= *V2;
-  case Instruction::SetGE:   return *V1 >= *V2;
-  case Instruction::SetLT:   return *V1 <  *V2;
-  case Instruction::SetGT:   return *V1 >  *V2;
-  }
-  return 0;
-}
-
-inline Constant *ConstantFoldShiftInstruction(unsigned Opcode,
-                                              const Constant *V1, 
-                                              const Constant *V2) {
-  switch (Opcode) {
-  case Instruction::Shl:     return *V1 << *V2;
-  case Instruction::Shr:     return *V1 >> *V2;
-  default:                   return 0;
-  }
-}
+// ConstantFoldInstruction - Attempt to constant fold the specified instruction.
+// If successful, the constant result is returned, if not, null is returned.
+//
+Constant *ConstantFoldInstruction(Instruction *I);
+
+// Constant fold various types of instruction...
+Constant *ConstantFoldCastInstruction(const Constant *V, const Type *DestTy);
+Constant *ConstantFoldUnaryInstruction(unsigned Opcode, const Constant *V);
+Constant *ConstantFoldBinaryInstruction(unsigned Opcode, const Constant *V1,
+                                        const Constant *V2);
+Constant *ConstantFoldShiftInstruction(unsigned Opcode, const Constant *V1,
+                                       const Constant *V2);
 
 #endif