135 lines
6.3 KiB
C
135 lines
6.3 KiB
C
////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////// includes for data dep information ////////////////////////
|
|
////// FB July 94 Indiana University ///////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// the set class
|
|
#include "set.h"
|
|
|
|
#include "definesValues.h"
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
// external for the anotation system
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
#include "annotationDriver.h"
|
|
extern SgAnnotation *getTheAnnotationThatApply(SgStatement *stmt, char *kind);
|
|
extern SgAnnotation * getTheAnnotationWithString(char *kind);
|
|
extern int isAnnotationWithString(SgStatement *stmt, char *kind, int len);
|
|
extern void initAnnotationSystem(int printann);
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
// some external from loop transformations
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern int tileLoops(SgStatement *func, SgStatement *b, int *size, int nb);
|
|
extern int distributeLoopSCC(SgStatement *b, int *sccTable, int leadingdim, int numSCC);
|
|
extern int loopFusion(SgStatement *loop1,SgStatement *loop2);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// Control FLOW part of declaration
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern void controlFlow(SgStatement *stmt, SgStatement *func,
|
|
SgStatement **pred, SgStatement **suc,
|
|
int *predin,int *sucint);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// declaration for the data flow framework
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern Set *genSet[MAXNODE];
|
|
extern Set *killSet[MAXNODE];
|
|
extern Set *inSet[MAXNODE];
|
|
extern Set *outSet[MAXNODE];
|
|
|
|
extern void iterativeForwardFlowAnalysis(SgFile *file,
|
|
SgStatement *func,
|
|
Set *(*giveGenSet)(SgStatement *func,SgStatement *stmt),
|
|
Set *(*giveKillSet)(SgStatement *func,SgStatement *stmt),
|
|
int (*feq)(void *e1, void *e2),
|
|
void *(*fcomb)(void *e1, void *e2),
|
|
void (*fp)(void *e1));
|
|
|
|
extern void generalIterativeFlowAnalysis(SgFile *file,
|
|
SgStatement *func,
|
|
Set *(*transfertSet)(SgStatement *func,SgStatement *stmt, Set *setin),
|
|
int (*feq)(void *e1, void *e2),
|
|
void* (*fcomb)(void *e1, void *e2),
|
|
void (*fp)(void *e1));
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// declaration for defuse and reaching definition
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "definitionSet.h"
|
|
extern Set *makeGenSet(SgStatement *func,SgStatement *stmt);
|
|
extern Set *makeKillSet(SgStatement *func,SgStatement *stmt);
|
|
extern int symbRefEqual(void *e1, void *e2);
|
|
extern void myPrint(void *e1);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// Part for constante propagation.....
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "constanteSet.h"
|
|
extern int constPropEqual(void *e1, void *e2);
|
|
extern void constPropPrint(void *e1);
|
|
extern void * constPropCombine(void *e1, void *e2);
|
|
extern Set *transConstante(SgStatement *func,SgStatement *stmt, Set *setin);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// Part for induction variable
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "inducVar.h"
|
|
extern int inducVarEqual(void *e1, void *e2);
|
|
extern void inducVarPrint(void *e1);
|
|
extern int definitionInStmt(SgStatement *func,SgStatement *stmtin, SgExpression *defvar);
|
|
extern Set *computeConstanteInStmt(SgStatement *func,SgStatement *stmtin);
|
|
extern Set *computeInductionVariables(SgStatement *func,SgStatement *stmt);
|
|
extern Set *getAllInductionVar(SgStatement *func,
|
|
SgStatement *stmt,int level, int *num,int include);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// Part for computing array reference
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "arrayRef.h"
|
|
extern int NbLinearRef;
|
|
extern int NbNonLinearRef;
|
|
extern int linearRepArray(SgExpression *ex1, SgSymbol **symb,
|
|
int size,
|
|
int linear[MAXDIMARRAY][MAXNESTEDLOOP],
|
|
int *cst);
|
|
extern int arrayEqual(void *e1, void *e2);
|
|
extern void arrayPrint(void *e1);
|
|
extern Set *loopArrayAccessAnalysis(SgStatement *func,SgStatement *stmt,
|
|
SgSymbol **tsymb, Set **induc);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// for data dependence computation (uses omega Test)
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "dependence.h"
|
|
extern Set *computeLoopDependencies(SgStatement *func,Set *inset, SgSymbol **tsymb, Set *induc);
|
|
extern "C" void SetOmegaDebug();
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// for data dependence computation (uses omega Test)
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "depGraph.h"
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// from intrinsic.C
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern int isStmtCallToFuncNotIntrinsic(SgStatement *stmt);
|
|
extern int isSymbolIntrinsic(SgSymbol *symb);
|
|
extern int isExprCallToFuncNotIntrinsic(SgExpression *exp);
|
|
|
|
|
|
|