#define LLVM_INSTRUCTION_H
#include "llvm/User.h"
-#include "Support/Annotation.h"
namespace llvm {
template<typename ValueSubClass, typename ItemParentClass, typename SymTabClass,
typename SubClass> class SymbolTableListTraits;
-class Instruction : public User, public Annotable {
+class Instruction : public User {
BasicBlock *Parent;
Instruction *Prev, *Next; // Next and Prev links for our intrusive linked list
// Specialize setName to handle symbol table majik...
virtual void setName(const std::string &name, SymbolTable *ST = 0);
+ /// mayWriteToMemory - Return true if this instruction may modify memory.
+ ///
+ virtual bool mayWriteToMemory() const { return false; }
+
/// clone() - Create a copy of 'this' instruction that is identical in all
/// ways except the following:
/// * The instruction has no parent
/// * The instruction has no name
///
virtual Instruction *clone() const = 0;
+
+ /// isIdenticalTo - Return true if the specified instruction is exactly
+ /// identical to the current one. This means that all operands match and any
+ /// extra information (e.g. load is volatile) agree.
+ bool isIdenticalTo(Instruction *I) const;
+
// Accessor methods...
//
Instruction *getPrev() { return Prev; }
const Instruction *getPrev() const { return Prev; }
- /// mayWriteToMemory - Return true if this instruction may modify memory.
+ /// removeFromParent - This method unlinks 'this' from the containing basic
+ /// block, but does not delete it.
///
- virtual bool mayWriteToMemory() const { return false; }
+ void removeFromParent();
+
+ /// eraseFromParent - This method unlinks 'this' from the containing basic
+ /// block and deletes it.
+ ///
+ void eraseFromParent();
// ---------------------------------------------------------------------------
/// Subclass classification... getOpcode() returns a member of