Create a new class, MemOperand, for describing memory references
[oota-llvm.git] / include / llvm / Function.h
index 627b47f9d9b2289f77ea7f1e653c6873dacc3abb..2c4f9d9e27dea5c85e0d4c203cccb5e876a6bee7 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.
 //
 //===----------------------------------------------------------------------===//
 //
@@ -21,7 +21,6 @@
 #include "llvm/GlobalValue.h"
 #include "llvm/BasicBlock.h"
 #include "llvm/Argument.h"
-#include "llvm/ParameterAttributes.h"
 #include "llvm/Support/Annotation.h"
 
 namespace llvm {
@@ -102,6 +101,9 @@ private:
       BuildLazyArguments();
   }
   void BuildLazyArguments() const;
+  
+  Function(const Function&); // DO NOT IMPLEMENT
+  void operator=(const Function&); // DO NOT IMPLEMENT
 public:
   /// Function ctor - If the (optional) Module argument is specified, the
   /// function is automatically inserted into the end of the function list for
@@ -153,15 +155,30 @@ public:
   /// @brief Set the parameter attributes.
   void setParamAttrs(const ParamAttrsList *attrs);
 
+  /// hasCollector/getCollector/setCollector/clearCollector - The name of the
+  /// garbage collection algorithm to use during code generation.
+  bool hasCollector() const;
+  const char *getCollector() const;
+  void setCollector(const char *Str);
+  void clearCollector();
+
   /// @brief Determine whether the function has the given attribute.
-  bool paramHasAttr(uint16_t i, ParameterAttributes attr) const {
-    return ParamAttrs && ParamAttrs->paramHasAttr(i, attr);
-  }
+  bool paramHasAttr(uint16_t i, unsigned attr) const;
+  
+  /// @brief Determine if the function cannot return.
+  bool doesNotReturn() const;
+
+  /// @brief Determine if the function cannot unwind.
+  bool doesNotThrow() const;
+
+  /// @brief Determine if the function does not access memory.
+  bool doesNotAccessMemory() const;
+
+  /// @brief Determine if the function does not access or only reads memory.
+  bool onlyReadsMemory() const;
 
   /// @brief Determine if the function returns a structure.
-  bool isStructReturn() const {
-    return paramHasAttr(1, ParamAttr::StructRet);
-  }
+  bool isStructReturn() const;
 
   /// deleteBody - This method deletes the body of the function, and converts
   /// the linkage to external.