Add interfaces to update value numbering results
authorChris Lattner <sabre@nondot.org>
Sun, 23 May 2004 21:11:17 +0000 (21:11 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 23 May 2004 21:11:17 +0000 (21:11 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13677 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/ValueNumbering.h

index 965e87fe97ccf7b12082147dd86c19439a58c7dd..8190b3fc7a52af57c716a36b44749d3e8f063973 100644 (file)
@@ -39,13 +39,30 @@ struct ValueNumbering {
 
   ///===-------------------------------------------------------------------===//
   /// Interfaces to update value numbering analysis information as the client
-  /// changes the program
+  /// changes the program.
   ///
 
-  /// deleteInstruction - Clients should invoke this method when they delete an
-  /// instruction from the program.  This allows the analysis implementations to
-  /// avoid having dangling pointers in their representation.
-  virtual void deleteInstruction(Instruction *I) {}
+  /// deleteValue - This method should be called whenever an LLVM Value is
+  /// deleted from the program, for example when an instruction is found to be
+  /// redundant and is eliminated.
+  ///
+  virtual void deleteValue(Value *V) {}
+
+  /// copyValue - This method should be used whenever a preexisting value in the
+  /// program is copied or cloned, introducing a new value.  Note that analysis
+  /// implementations should tolerate clients that use this method to introduce
+  /// the same value multiple times: if the analysis already knows about a
+  /// value, it should ignore the request.
+  ///
+  virtual void copyValue(Value *From, Value *To) {}
+
+  /// replaceWithNewValue - This method is the obvious combination of the two
+  /// above, and it provided as a helper to simplify client code.
+  ///
+  void replaceWithNewValue(Value *Old, Value *New) {
+    copyValue(Old, New);
+    deleteValue(Old);
+  }
 };
 
 extern void BasicValueNumberingStub();