Program Listing for File DomainInfo.h

Program Listing for File DomainInfo.h#

Return to documentation for file (src/midend/programTransformation/loopProcessing/depInfo/DomainInfo.h)

#ifndef DOMAIN_DEP_INTERFACE
#define DOMAIN_DEP_INTERFACE

#include <DepInfo.h>
#include <LatticeElemList.h>

class DomainCond :  protected DepInfo
{
 public:
  DomainCond( int loops);
  DomainCond() : DepInfo() {}
  DomainCond (const DomainCond &that) : DepInfo(that) {}
  DomainCond( DepInfo &dep, DepDirection dir);
  DomainCond& operator = ( const DomainCond &that)
      { DepInfo :: operator =(that); return *this; }

  int NumOfLoops() const { return DepInfo::rows(); }
  bool IsTop() const;
  bool IsBottom() const;
  std::string toString() const;

  const DepRel& Entry(int index1, int index2) const
    { return DepInfo::Entry(index1, index2); }
  DepRel& Entry(int index1, int index2)
    { return DepInfo::Entry(index1, index2); }
  bool ClosureCond();
  void SetLoopRel(int index1, int index2, const DepRel &r) ;
  void Initialize( const DepRel &r);

  bool operator < (const DomainCond &that) const
    { return DepInfo :: operator < (that); }
  bool operator <= (const DomainCond &that) const
    { return DepInfo :: operator <= (that); }
  bool operator |= (const DomainCond &that);
  bool operator &= (const DomainCond &that);

  bool operator ==( const DomainCond &that) const
     { return DepInfo::operator==(that); }
  bool operator != (const DomainCond &that) const
     { return ! operator ==(that); }

  void InsertLoop( int level);
  void RemoveLoop( int level);
  void RestrictDepInfo( DepInfo &dep, DepDirection dir) const;
  void MergeLoop( int index1, int index2);
  void SwapLoop( int index1, int index2);
  void AlignLoop( int index1, int align);
};
typedef IteratorImpl<DomainCond> DomainCondConstIteratorImpl;
typedef IteratorImpl<DomainCond&> DomainCondUpdateIteratorImpl;
typedef IteratorWrap<DomainCond,DomainCondConstIteratorImpl> DomainCondConstIterator;
typedef IteratorWrap<DomainCond&, DomainCondUpdateIteratorImpl> DomainCondUpdateIterator;

DomainCond operator | ( const DomainCond &d1, const DomainCond &d2) ;
DomainCond operator & ( const DomainCond &d1, const DomainCond &d2) ;

class DomainInfoImpl : public LatticeElemList <DomainCond>
{
  void operator =(const DomainInfoImpl& that) {}
 public:
  DomainInfoImpl() {}
  DomainInfoImpl( const DomainInfoImpl &that)
    : LatticeElemList <DomainCond>(that) {}
  virtual ~DomainInfoImpl() {}
  DomainInfoImpl* Clone() const { return new DomainInfoImpl(*this); }
 friend class CountRefHandle<DomainInfoImpl>;
};

class DomainInfo : protected CountRefHandle <DomainInfoImpl>
{
 public:
   DomainInfo();
   DomainInfo(DomainCond c) ;

   int NumOfConds() const;
   int NumOfLoops() const;
   DepRel GetLoopRel( int i1, int i2) const;

   bool AddCond( const DomainCond &c) ;
   bool operator |= (const DomainInfo &that);
   void UpdateDomainCond( bool (*Update)(DomainCond &info) );

   bool IsTop() const;
   bool IsBottom() const;
   std::string toString() const;

   DomainCondConstIterator GetConstIterator() const;
   DomainCondUpdateIterator GetUpdateIterator();
};

DomainInfo  operator & ( const DomainInfo &d1, const DomainInfo &d2) ;
DomainInfo  operator | ( const DomainInfo &d1, const DomainInfo &d2) ;
DomainInfo  operator - ( const DomainInfo &d1, const DomainInfo &d2) ;
void RestrictDepDomain (DepInfo &dep, const DomainInfo &domain,
                        DepDirection dir);

#endif