Forgot to commit this file.
[oota-llvm.git] / include / llvm / Instruction.h
index 983e24579e7139e67e21d4412af0b4204fd79381..40d83059fe3d151e403097650ee100390c0517cd 100644 (file)
@@ -2,8 +2,8 @@
 //
 //                     The LLVM Compiler Infrastructure
 //
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
 //
 //===----------------------------------------------------------------------===//
 //
@@ -20,7 +20,6 @@
 namespace llvm {
 
 struct AssemblyAnnotationWriter;
-class BinaryOperator;
 
 template<typename ValueSubClass, typename ItemParentClass>
   class SymbolTableListTraits;
@@ -50,6 +49,10 @@ public:
   ///
   bool mayWriteToMemory() const;
 
+  /// mayReadFromMemory - Return true if this instruction may read memory.
+  ///
+  bool mayReadFromMemory() const;
+  
   /// clone() - Create a copy of 'this' instruction that is identical in all
   /// ways except the following:
   ///   * The instruction has no parent
@@ -72,6 +75,13 @@ public:
   /// @brief Determine if one instruction is the same operation as another.
   bool isSameOperationAs(Instruction *I) const;
 
+  /// isUsedOutsideOfBlock - Return true if there are any uses of this
+  /// instruction in blocks other than the specified block.  Note that PHI nodes
+  /// are considered to evaluate their operands in the corresponding predecessor
+  /// block.
+  bool isUsedOutsideOfBlock(const BasicBlock *BB) const;
+  
+  
   /// use_back - Specialize the methods defined in Value, as we know that an
   /// instruction can only be used by other instructions.
   Instruction       *use_back()       { return cast<Instruction>(*use_begin());}
@@ -127,13 +137,13 @@ public:
 
   /// isLogicalShift - Return true if this is a logical shift left or a logical
   /// shift right.
-  inline bool isLogicalShift() {
+  inline bool isLogicalShift() const {
     return getOpcode() == Shl || getOpcode() == LShr;
   }
 
   /// isLogicalShift - Return true if this is a logical shift left or a logical
   /// shift right.
-  inline bool isArithmeticShift() {
+  inline bool isArithmeticShift() const {
     return getOpcode() == AShr;
   }