| //===- CLooG.h - CLooG interface --------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // CLooG[1] interface. |
| // |
| // The CLooG interface takes a Scop and generates a CLooG AST (clast). This |
| // clast can either be returned directly or it can be pretty printed to stdout. |
| // |
| // A typical clast output looks like this: |
| // |
| // for (c2 = max(0, ceild(n + m, 2); c2 <= min(511, floord(5 * n, 3)); c2++) { |
| // bb2(c2); |
| // } |
| // |
| // [1] http://www.cloog.org/ - The Chunky Loop Generator |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef POLLY_CLOOG_H |
| #define POLLY_CLOOG_H |
| |
| #include "polly/Config/config.h" |
| #ifdef CLOOG_FOUND |
| |
| #include "polly/ScopPass.h" |
| |
| #define CLOOG_INT_GMP 1 |
| #include "cloog/cloog.h" |
| |
| struct clast_name; |
| namespace llvm { |
| class raw_ostream; |
| } |
| |
| namespace polly { |
| class Scop; |
| class Cloog; |
| |
| class CloogInfo : public ScopPass { |
| Cloog *C; |
| Scop *scop; |
| |
| public: |
| static char ID; |
| CloogInfo() : ScopPass(ID), C(0) {} |
| |
| /// Write a .cloog input file |
| void dump(FILE *F); |
| |
| /// Print a source code representation of the program. |
| void pprint(llvm::raw_ostream &OS); |
| |
| /// Create the CLooG AST from this program. |
| const struct clast_root *getClast(); |
| |
| bool runOnScop(Scop &S); |
| void printScop(llvm::raw_ostream &OS) const; |
| virtual void getAnalysisUsage(AnalysisUsage &AU) const; |
| virtual void releaseMemory(); |
| }; |
| |
| // Visitor class for clasts. |
| // Only 'visitUser' has to be implemented by subclasses; the default |
| // implementations of the other methods traverse the clast recursively. |
| class ClastVisitor { |
| public: |
| virtual void visit(const clast_stmt *stmt); |
| |
| virtual void visitAssignment(const clast_assignment *stmt); |
| virtual void visitBlock(const clast_block *stmt); |
| virtual void visitFor(const clast_for *stmt); |
| virtual void visitGuard(const clast_guard *stmt); |
| |
| virtual void visitUser(const clast_user_stmt *stmt) = 0; |
| virtual ~ClastVisitor() {} |
| }; |
| } |
| |
| namespace llvm { |
| class PassRegistry; |
| void initializeCloogInfoPass(llvm::PassRegistry &); |
| } |
| |
| #endif /* CLOOG_FOUND */ |
| #endif /* POLLY_CLOOG_H */ |