Add two new methods which can be used to enable a bunch of transformations
authorChris Lattner <sabre@nondot.org>
Mon, 15 Mar 2004 01:58:54 +0000 (01:58 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 15 Mar 2004 01:58:54 +0000 (01:58 +0000)
in common cases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12407 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/AliasAnalysis.h

index fb848ebd570c8a9a672097a378ce364a3e2ca473..5be8af899c00cf87f029dd7e61b553d108927c32 100644 (file)
@@ -100,6 +100,28 @@ public:
   ///
   virtual bool pointsToConstantMemory(const Value *P) { return false; }
 
+  /// doesNotAccessMemory - If the specified function is known to never read or
+  /// write memory, return true.
+  ///
+  /// Many optimizations (such as CSE and LICM) can be performed on calls to it,
+  /// without worrying about aliasing properties, and many functions have this
+  /// property (e.g. 'sin' and 'cos').
+  ///
+  /// This property corresponds to the GCC 'const' attribute.
+  ///
+  virtual bool doesNotAccessMemory(Function *F) { return false; }
+
+  /// onlyReadsMemory - If the specified function is known to only read from
+  /// non-volatile memory (or not access memory at all), return true.
+  ///
+  /// This property allows many common optimizations to be performed in the
+  /// absence of interfering store instructions, such as CSE of strlen calls.
+  ///
+  /// This property corresponds to the GCC 'pure' attribute.
+  ///
+  virtual bool onlyReadsMemory(Function *F) { return doesNotAccessMemory(F); }
+
+
   //===--------------------------------------------------------------------===//
   /// Simple mod/ref information...
   ///