Improve LSR's dead-phi detection to handle use-def cycles
[oota-llvm.git] / utils / TableGen / Record.h
index a7210674e722abc3156397a82bca6a6f4ee4752c..83d358ad2ce746ed47cf96dba7e3ba6a09d72ba9 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.
 //
 //===----------------------------------------------------------------------===//
 //
@@ -509,7 +509,7 @@ public:
 class BitInit : public Init {
   bool Value;
 public:
-  BitInit(bool V) : Value(V) {}
+  explicit BitInit(bool V) : Value(V) {}
 
   bool getValue() const { return Value; }
 
@@ -526,7 +526,7 @@ public:
 class BitsInit : public Init {
   std::vector<Init*> Bits;
 public:
-  BitsInit(unsigned Size) : Bits(Size) {}
+  explicit BitsInit(unsigned Size) : Bits(Size) {}
 
   unsigned getNumBits() const { return Bits.size(); }
 
@@ -567,7 +567,7 @@ public:
 class IntInit : public Init {
   int Value;
 public:
-  IntInit(int V) : Value(V) {}
+  explicit IntInit(int V) : Value(V) {}
 
   int getValue() const { return Value; }
 
@@ -585,7 +585,7 @@ public:
 class StringInit : public Init {
   std::string Value;
 public:
-  StringInit(const std::string &V) : Value(V) {}
+  explicit StringInit(const std::string &V) : Value(V) {}
 
   const std::string &getValue() const { return Value; }
 
@@ -601,7 +601,7 @@ public:
 class CodeInit : public Init {
   std::string Value;
 public:
-  CodeInit(const std::string &V) : Value(V) {}
+  explicit CodeInit(const std::string &V) : Value(V) {}
 
   const std::string getValue() const { return Value; }
 
@@ -617,7 +617,7 @@ public:
 class ListInit : public Init {
   std::vector<Init*> Values;
 public:
-  ListInit(std::vector<Init*> &Vs) {
+  explicit ListInit(std::vector<Init*> &Vs) {
     Values.swap(Vs);
   }
 
@@ -643,6 +643,17 @@ public:
   virtual Init *resolveReferences(Record &R, const RecordVal *RV);
 
   virtual std::string getAsString() const;
+
+  typedef std::vector<Init*>::iterator       iterator;
+  typedef std::vector<Init*>::const_iterator const_iterator;
+
+  inline iterator       begin()       { return Values.begin(); }
+  inline const_iterator begin() const { return Values.begin(); }
+  inline iterator       end  ()       { return Values.end();   }
+  inline const_iterator end  () const { return Values.end();   }
+
+  inline size_t         size () const { return Values.size();  }
+  inline bool           empty() const { return Values.empty(); }
 };
 
 /// BinOpInit - !op (X, Y) - Combine two inits.
@@ -682,7 +693,7 @@ public:
 class TypedInit : public Init {
   RecTy *Ty;
 public:
-  TypedInit(RecTy *T) : Ty(T) {}
+  explicit TypedInit(RecTy *T) : Ty(T) {}
 
   RecTy *getType() const { return Ty; }
 
@@ -708,7 +719,8 @@ public:
 class VarInit : public TypedInit {
   std::string VarName;
 public:
-  VarInit(const std::string &VN, RecTy *T) : TypedInit(T), VarName(VN) {}
+  explicit VarInit(const std::string &VN, RecTy *T)
+    : TypedInit(T), VarName(VN) {}
 
   virtual Init *convertInitializerTo(RecTy *Ty) {
     return Ty->convertValue(this);
@@ -796,7 +808,7 @@ public:
 class DefInit : public Init {
   Record *Def;
 public:
-  DefInit(Record *D) : Def(D) {}
+  explicit DefInit(Record *D) : Def(D) {}
 
   virtual Init *convertInitializerTo(RecTy *Ty) {
     return Ty->convertValue(this);
@@ -887,6 +899,28 @@ public:
   virtual Init *resolveReferences(Record &R, const RecordVal *RV);
 
   virtual std::string getAsString() const;
+
+  typedef std::vector<Init*>::iterator             arg_iterator;
+  typedef std::vector<Init*>::const_iterator       const_arg_iterator;
+  typedef std::vector<std::string>::iterator       name_iterator;
+  typedef std::vector<std::string>::const_iterator const_name_iterator;
+
+  inline arg_iterator        arg_begin()       { return Args.begin(); }
+  inline const_arg_iterator  arg_begin() const { return Args.begin(); }
+  inline arg_iterator        arg_end  ()       { return Args.end();   }
+  inline const_arg_iterator  arg_end  () const { return Args.end();   }
+
+  inline size_t              arg_size () const { return Args.size();  }
+  inline bool                arg_empty() const { return Args.empty(); }
+
+  inline name_iterator       name_begin()       { return ArgNames.begin(); }
+  inline const_name_iterator name_begin() const { return ArgNames.begin(); }
+  inline name_iterator       name_end  ()       { return ArgNames.end();   }
+  inline const_name_iterator name_end  () const { return ArgNames.end();   }
+
+  inline size_t              name_size () const { return ArgNames.size();  }
+  inline bool                name_empty() const { return ArgNames.empty(); }
+
 };
 
 //===----------------------------------------------------------------------===//