Remove outermost loop parameter.
[official-gcc/graphite-test-results.git] / libpcp / pcp_domain.h
bloba6b9ae86bcb7400045dea0fc30691e6ada2410e9
1 // Copyright (C) 2009 Free Software Foundation, Inc.
2 // Contributed by Jan Sjodin <jan.sjodin@amd.com>.
4 // This file is part of the Polyhedral Compilation Package Library (libpcp).
6 // Libpcp is free software; you can redistribute it and/or modify it
7 // under the terms of the GNU Lesser General Public License as published by
8 // the Free Software Foundation; either version 2.1 of the License, or
9 // (at your option) any later version.
11 // Libpcp is distributed in the hope that it will be useful, but WITHOUT ANY
12 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13 // FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
14 // more details.
16 // You should have received a copy of the GNU Lesser General Public License
17 // along with libpcp; see the file COPYING.LIB. If not, write to the
18 // Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19 // MA 02110-1301, USA.
21 // As a special exception, if you link this library with other files, some
22 // of which are compiled with GCC, to produce an executable, this library
23 // does not by itself cause the resulting executable to be covered by the
24 // GNU General Public License. This exception does not however invalidate
25 // any other reasons why the executable file might be covered by the GNU
26 // General Public License.
28 #ifndef _PCP_DOMAIN_
29 #define _PCP_DOMAIN_
31 #include "pcp.h"
32 #include "pcp_map.h"
33 #include "pcp_poly.h"
34 #include "pcp_stack.h"
35 #include "pcp_visitor.h"
36 #include "pcp_expr_canonicalizer.h"
38 class PcpDomain
40 protected:
41 PcpPolyPointsetPowerset* domain;
43 void setDomain(PcpPolyPointsetPowerset* domain);
44 PcpPolyPointsetPowerset* getDomain();
46 public:
47 PcpDomain();
48 PcpDomain(PcpPolyPointsetPowerset* domain);
51 class PcpDomainMap : public PcpTreeMap<PcpStmt*, PcpDomain*>
53 protected:
54 class Visitor : public PcpVisitor
56 protected:
57 PcpDomainMap* domainMap;
58 PcpScalarContextStack* scalarContextStack;
59 PcpStack<PcpBoolExpr*>* domainExprStack;
61 void setDomainMap(PcpDomainMap* domainMap);
62 PcpDomainMap* getDomainMap();
64 void setScalarContextStack(PcpScalarContextStack* scalarContextStack);
65 PcpScalarContextStack* getScalarContextStack();
67 void setDomainExprStack(PcpStack<PcpBoolExpr*>* domainExprStack);
68 PcpStack<PcpBoolExpr*>* getDomainExprStack();
69 void debugDomainExprStack();
71 PcpExprCanonicalizer* getExprCanonicalizer();
72 PcpBoolArith* createCanonicalizedDomainExpr();
74 virtual PcpPolyLinearExpr* translateLinearExpr(PcpArith* linearExpr);
75 virtual PcpPolyConstraint* translateCompare(PcpCompare* compare);
76 virtual PcpPolyPolyhedron* translateConjunction(PcpBoolArith* conjunction);
77 virtual PcpPolyPointsetPowerset* translateCondition(PcpBoolExpr* condition);
78 public:
79 virtual void visit(PcpScop* scop);
80 virtual void visit(PcpLoop* loop);
81 virtual void visit(PcpSequence* sequence);
82 virtual void visit(PcpGuard* guard);
83 virtual void visit(PcpCopy* copy);
84 virtual void visit(PcpUserStmt* userStmt);
86 Visitor(PcpDomainMap* domainMap);
89 PcpExprCanonicalizer* exprCanonicalizer;
91 void setExprCanonicalizer(PcpExprCanonicalizer* exprCanonicalizer);
92 void buildDomainMap(PcpScop* scop);
93 public:
94 PcpExprCanonicalizer* getExprCanonicalizer();
95 PcpDomainMap(PcpScop* scop, PcpExprCanonicalizer* exprCanonicalizer);
98 #endif // _PCP_DOMAIN_