AffineExprIRInterface.hpp

Go to the documentation of this file.
00001 #ifndef AffineExprIRInterface_H
00002 #define AffineExprIRInterface_H
00003 
00004 #include <OpenAnalysis/MemRefExpr/MemRefExpr.hpp>
00005 #include <OpenAnalysis/ExprTree/ExprTree.hpp>
00006 #include <OpenAnalysis/Location/Location.hpp>
00007 
00008 namespace OA {
00009 namespace AffineExpr {
00010 
00011 enum OpType {
00012     OP_ADD = 0,
00013     OP_SUBTRACT,
00014     OP_MULTIPLY,
00015     OP_DIVIDE,
00016     OP_MODULO,
00017     OP_SHIFT_LEFT,
00018     OP_SHIFT_RIGHT,
00019     OP_BIT_AND,
00020     OP_BIT_OR,
00021     OP_BIT_XOR,
00022     OP_OTHER
00023 };
00024 
00025 class AffineExprIRInterface :
00026     public virtual IRHandlesIRInterface
00027 {
00028   public:
00029     AffineExprIRInterface() {}
00030     virtual ~AffineExprIRInterface() {}
00031 
00032     virtual OA_ptr<Location::Location>
00033         getLocation(ProcHandle p, SymHandle s) = 0;
00034     virtual int constValIntVal(ConstValHandle h) = 0;
00035     virtual OpType getOpType(OpHandle h) = 0;
00036     virtual OA_ptr<ExprTree> getExprTree(ExprHandle h) = 0;
00037     virtual OA_ptr<MemRefExprIterator>
00038         getMemRefExprIterator(MemRefHandle h) = 0;
00039     virtual MemRefHandle getSymMemRefHandle(SymHandle h) = 0;
00040 
00041 
00042     // needed for GCD:
00043     // !!! seperate into LoopDetection package
00044     // !!! Create interface for results.
00045     // bool isInLoop(StmtHanlde h, CFG cfg);
00046 };
00047 
00048 } } // end namespaces
00049 
00050 #endif

Generated on Sat Oct 31 05:21:19 2009 for OpenAnalysis by  doxygen 1.6.1