2330 lines
121 KiB
C++
2330 lines
121 KiB
C++
#pragma once
|
|
#include "user.h"
|
|
#include "aks_structs.h"
|
|
|
|
#define MAXTAGS 1000
|
|
#include "dvm_tag.h"
|
|
|
|
#define FORTRAN_LANG 0
|
|
#define C_LANG 1
|
|
|
|
#define RTS1 1
|
|
#define RTS2 2
|
|
|
|
#define MAX_DIMS 15 // 15 - Fortran 2008, 7 - Fortran 95, Fortran 2003
|
|
#define MAX_FUN_F90 20
|
|
#define ASYNCID_NUMB 8000
|
|
#define MAX_RED_VAR_SIZE 20
|
|
#define MAX_BLOCKS 65535
|
|
#define NO_ERR_MSG 0
|
|
#define WITH_ERR_MSG 1
|
|
#define SG_FILE_ATTR 99999
|
|
|
|
/*ACC*/
|
|
#define Ndev 3
|
|
enum{NON,HOST,CUDA};
|
|
|
|
#define HOST_DEVICE 1
|
|
#define CUDA_DEVICE 2
|
|
|
|
#define Nregim 3
|
|
|
|
enum {_ZERO_,REGION_ASYNC,REGION_COMPARE_DEBUG};
|
|
|
|
const int Ntp = 13; //number of dvm-base types (RTS1)
|
|
|
|
#include "libnum.h"
|
|
|
|
#ifdef IN_DVM_
|
|
#define EXTERN
|
|
#else
|
|
#define EXTERN extern
|
|
#endif
|
|
|
|
struct distribute_list {
|
|
distribute_list *next;
|
|
SgStatement *stdis;
|
|
};
|
|
struct stmt_list {
|
|
stmt_list *next;
|
|
SgStatement *st;
|
|
};
|
|
struct dist_symb_list {
|
|
dist_symb_list *next;
|
|
SgSymbol *symb;
|
|
};
|
|
struct align {
|
|
SgSymbol * symb;
|
|
align * next;
|
|
align * alignees;
|
|
SgStatement * align_stmt;
|
|
};
|
|
struct mod_attr{
|
|
SgSymbol *symb;
|
|
SgSymbol *symb_list;
|
|
};
|
|
struct algn_attr {
|
|
int type;
|
|
align *ref;
|
|
};
|
|
struct rem_var {
|
|
int index;
|
|
int amv;
|
|
int ncolon;
|
|
SgSymbol *buffer; /*ACC*/
|
|
};
|
|
struct rem_acc {
|
|
SgExpression *rml;
|
|
SgStatement *rmout;
|
|
int rmbuf_use[Ntp];
|
|
rem_acc *next;
|
|
};
|
|
struct group_name_list {
|
|
group_name_list *next;
|
|
SgSymbol *symb;
|
|
};
|
|
struct symb_list {
|
|
symb_list *next;
|
|
SgSymbol *symb;
|
|
};
|
|
|
|
struct base_list {
|
|
base_list *next;
|
|
SgSymbol *type_symbol;
|
|
SgSymbol *base_symbol;
|
|
SgSymbol *gpu_symbol;
|
|
};
|
|
struct D_do_list {
|
|
D_do_list *next;
|
|
int No;
|
|
int num_line;
|
|
SgLabel *end_lab;
|
|
SgSymbol *do_var;
|
|
};
|
|
struct interval_list {
|
|
interval_list *prev;
|
|
int No;
|
|
SgStatement *begin_st;
|
|
};
|
|
struct D_fragment {
|
|
D_fragment *next;
|
|
int No;
|
|
};
|
|
|
|
struct fragment_list {
|
|
int No;
|
|
SgStatement *begin_st;
|
|
int dlevel;
|
|
int elevel;
|
|
int dlevel_spec;
|
|
int elevel_spec;
|
|
fragment_list *next;
|
|
};
|
|
struct fragment_list_in {
|
|
int N1;
|
|
int N2;
|
|
int level;
|
|
fragment_list_in *next;
|
|
};
|
|
struct reduction_list {
|
|
reduction_list *next;
|
|
int red_op;
|
|
SgExpression *red_var;
|
|
int ind;
|
|
};
|
|
struct IND_ref_list {
|
|
IND_ref_list *next;
|
|
SgExpression *rmref;
|
|
SgExpression *axis[7];
|
|
SgExpression *coef[7];
|
|
SgExpression *cons[7];
|
|
int nc;
|
|
int ind;
|
|
};
|
|
|
|
struct coeffs {
|
|
SgSymbol *sc[MAX_DIMS+2];
|
|
int use;
|
|
};
|
|
|
|
struct heap_pointer_list {
|
|
heap_pointer_list *next;
|
|
SgSymbol *symb_heap;
|
|
SgSymbol *symb_p;
|
|
};
|
|
|
|
struct filename_list {
|
|
filename_list *next;
|
|
char *name;
|
|
SgSymbol *fns;
|
|
};
|
|
struct region_list {
|
|
int is_data;
|
|
int No;
|
|
SgStatement *region_dir;
|
|
SgStatement *cur_do_dir;
|
|
int Lnums;
|
|
int targets;
|
|
region_list *next;
|
|
}; /*ACC*/
|
|
|
|
struct reduction_operation_list {
|
|
SgSymbol *redvar;
|
|
SgSymbol *locvar;
|
|
SgExpression *formal_arg;
|
|
SgExpression *actual_arg;
|
|
SgExpression *value_arg;
|
|
SgExpression *dimSize_arg;
|
|
SgExpression *lowBound_arg;
|
|
SgSymbol *red_grid;
|
|
SgSymbol *loc_grid;
|
|
SgSymbol *red_init;
|
|
SgSymbol *red_host;
|
|
SgSymbol *loc_host;
|
|
/* SgSymbol *red_offset;
|
|
SgSymbol *loc_offset;
|
|
SgSymbol *red_base;
|
|
SgSymbol *loc_base;
|
|
*/
|
|
int number;
|
|
int redvar_size;
|
|
int array_red_size;
|
|
reduction_operation_list *next;
|
|
}; /*ACC*/
|
|
|
|
struct use_mode {
|
|
use_mode *next;
|
|
int in;
|
|
int out;
|
|
int mark;
|
|
}; /*ACC*/
|
|
|
|
struct local_part_list {
|
|
SgSymbol *dvm_array;
|
|
|
|
SgSymbol *local_part;
|
|
local_part_list *next;
|
|
}; /*ACC*/
|
|
|
|
const int ROOT = 1;
|
|
const int NODE = 2;
|
|
const int ALIGN_TREE = 1000;
|
|
const int ARRAY_HEADER = 1001;
|
|
//const int SHADOW_GROUP_IND = 1002;
|
|
//const int RED_GROUP_DIR = 1003;
|
|
const int SHADOW_WIDTH = 1004;
|
|
const int REMOTE_VARIABLE = 1005;
|
|
const int POINTER_ = 1006;
|
|
const int LOOP_NUMBER = 1007;
|
|
const int LOOP_INTERVAL_NUMBER = 1008;
|
|
const int ALIGN_RULE = 1009;
|
|
const int LOC_ARR = 1010;
|
|
const int DO_VARIABLE_USE = 1011;
|
|
const int INDIRECT_SUBSCRIPT = 1012;
|
|
const int BUFFER_COUNT = 1013;
|
|
const int HEAP_INDEX = 1014;
|
|
const int ARRAY_COEF = 1015;
|
|
const int RED_GROUP_VAR = 1016;
|
|
const int TASK_INDEX = 1017;
|
|
const int CONSISTENT_ARRAY_HEADER = 1018;
|
|
const int ARRAY_BASE = 1019;
|
|
const int INDEX_DELTA = 1020;
|
|
const int INIT_LOOP = 1021;
|
|
const int MODULE_STR = 1022;
|
|
const int DISTRIBUTE_ = 1023;
|
|
const int TSK_SYMBOL = 1024;
|
|
const int DEBUG_AR_INDEX = 1025;
|
|
const int DEBUG_GOTO = 1026;
|
|
const int GPU_HEADER = 1027; /*ACC*/
|
|
const int REDVAR_INDEX = 1028; /*ACC*/
|
|
const int INTENT_OF_VAR = 1029; /*ACC*/
|
|
const int STATEMENT_GROUP = 1030; /*ACC*/
|
|
const int REPLICATED_ARRAY = 1031; /*ACC*/
|
|
const int DUMMY_ARRAY = 1032; /*ACC*/
|
|
const int INSERTED_STATEMENT= 1033; /*ACC*/
|
|
const int INDEX_LIST = 1034; /*ACC*/
|
|
const int ACROSS_GROUP_IND = 1035; /*ACC*/
|
|
const int DUMMY_ARGUMENT = 1036; /*ACC*/
|
|
const int TSK_IND_VAR = 1037;
|
|
const int TSK_RENUM_ARRAY = 1038;
|
|
const int TSK_LPS_ARRAY = 1039;
|
|
const int TSK_HPS_ARRAY = 1040;
|
|
const int TSK_AUTO = 1041;
|
|
const int GRAPH_NODE = 1042;
|
|
const int LAST_STATEMENT = 1043;
|
|
const int RTC_NOT_REPLACE = 1044; /*ACC*/
|
|
const int RTC_CALLS = 1045; /*ACC*/
|
|
const int RTS2_CREATED = 1046; /*RTS2*/
|
|
const int HANDLER_HEADER = 1047; /*ACC*/
|
|
const int MODULE_USE = 1048; /*ACC*/
|
|
const int DEFERRED_SHAPE = 1049;
|
|
const int END_OF_USE_LIST = 1050; /*ACC*/
|
|
const int ROUTINE_ATTR = 1051; /*ACC*/
|
|
const int DATA_REGION_SYMB = 1052; /*ACC*/
|
|
const int REMOTE_ACCESS_BUF = 1053; /*ACC*/
|
|
|
|
const int MAX_LOOP_LEVEL = 20; // 7 - maximal number of loops in parallel loop nest
|
|
const int MAX_LOOP_NEST = 25; // maximal number of nested loops
|
|
const int MAX_FILE_NUM = 100; // maximal number of file reference in procedure
|
|
const int SIZE_IO_BUF = 262144; //4185600; // IO buffer size in elements
|
|
const int ANTIDEP = 0;
|
|
const int FLOWDEP = 1;
|
|
#define FICT_INT 2000000000 /* -2147483648 0x7FFFFFFFL*/
|
|
|
|
//enum{ Integer, Real, Double, Complex, Logical, DoubleComplex};
|
|
enum {UNIT_,FMT_,REC_,ERR_,IOSTAT_,END_,NML_,EOR_,SIZE_,ADVANCE_,POS_,IOMSG_, NUM__R};
|
|
enum {U_,FILE_,STATUS_,ER_,IOST_,ACCESS_,FORM_,RECL_,BLANK_,EXIST_,
|
|
OPENED_,NUMBER_,NAMED_,NAME_,SEQUENTIAL_,DIRECT_,NEXTREC_,FORMATTED_,
|
|
UNFORMATTED_,POSITION_,ACTION_,READWRITE_,READ_,WRITE_,DELIM_,PAD_,CONVERT_, NUM__O};
|
|
|
|
enum {SIZE,LBOUND,UBOUND,LEN,CHAR,KIND,F_INT,F_REAL,F_CHAR,F_LOGICAL,F_CMPLX,MAX_,MIN_,IAND_,IOR_,ALLOCATED_,ASSOCIATED_,NUM__F90}; //intrinsic functions of Fortran 90
|
|
|
|
enum {NEW_,REDUCTION_,SHADOW_RENEW_,SHADOW_START_,SHADOW_WAIT_,SHADOW_COMPUTE_,REMOTE_ACCESS_,CONSISTENT_,STAGE_,PRIVATE_,CUDA_BLOCK_,ACROSS_,TIE_}; //clauses of PARALLEL directive
|
|
|
|
|
|
const int Integer = 0;
|
|
const int Real = 1;
|
|
const int Double = 2;
|
|
const int Complex = 3;
|
|
const int Logical = 4;
|
|
const int DComplex = 5;
|
|
const int Character = 6;
|
|
const int Integer_1 = 7;
|
|
const int Integer_2 = 8;
|
|
const int Integer_8 = 9;
|
|
const int Logical_1 = 10;
|
|
const int Logical_2 = 11;
|
|
const int Logical_8 = 12;
|
|
|
|
#define HEADER(A) ((int*)(ORIGINAL_SYMBOL(A))->attributeValue(0,ARRAY_HEADER))
|
|
#define INDEX(A) (*((int*)(ORIGINAL_SYMBOL(A))->attributeValue(0,ARRAY_HEADER)))
|
|
#define DVM000(N) (new SgArrayRefExp(*dvmbuf, *new SgValueExp(N)))
|
|
#define SH_GROUP(S) (*((int *) (S) -> attributeValue(0, SHADOW_GROUP_IND)))
|
|
#define RED_GROUP(S) (*((int *) (S) -> attributeValue(0, RED_GROUP_IND)))
|
|
#define SHADOW_(A) ((SgExpression **)(ORIGINAL_SYMBOL(A))->attributeValue(0,SHADOW_WIDTH))
|
|
#define POINTER_DIR(A) ((SgStatement **)(ORIGINAL_SYMBOL(A))->attributeValue(0,POINTER_))
|
|
#define DISTRIBUTE_DIRECTIVE(A) ((SgStatement **)(ORIGINAL_SYMBOL(A))->attributeValue(0,DISTRIBUTE_))
|
|
#define ARRAY_BASE_SYMBOL(A) ((SgSymbol **)(ORIGINAL_SYMBOL(A))->attributeValue(0,ARRAY_BASE))
|
|
#define INDEX_SYMBOL(A) ((SgSymbol **)(A)->attributeValue(0,INDEX_DELTA))
|
|
#define INIT_LOOP_VAR(A) ((SgSymbol **)(A)->attributeValue(0,INIT_LOOP))
|
|
#define CONSISTENT_HEADER(A) (*((SgSymbol **)(ORIGINAL_SYMBOL(A))->attributeValue(0,CONSISTENT_ARRAY_HEADER)))
|
|
#define POINTER_INDEX(A) (*((int *)(A)->attributeValue(0,HEAP_INDEX)))
|
|
#define BUFFER_INDEX(A) (*((int*)(ORIGINAL_SYMBOL(A))->attributeValue(0,BUFFER_COUNT)))
|
|
#define BUFFER_COUNT_PLUS_1(A) (*((int*)(ORIGINAL_SYMBOL(A))->attributeValue(0,BUFFER_COUNT))) = (*((int*)(ORIGINAL_SYMBOL(A))->attributeValue(0,BUFFER_COUNT)))+1;
|
|
#define PS_INDEX(A) (*((int *)(A)->attributeValue(0,TASK_INDEX)))
|
|
#define DEBUG_INDEX(A) (*((int*)(ORIGINAL_SYMBOL(A))->attributeValue(0,DEBUG_AR_INDEX)))
|
|
#define TASK_SYMBOL(A) (*((SgSymbol **)(ORIGINAL_SYMBOL(A))->attributeValue(0,TSK_SYMBOL)))
|
|
#define TASK_IND_VAR(A) (*((SgSymbol **)(ORIGINAL_SYMBOL(A))->attributeValue(0,TSK_IND_VAR)))
|
|
#define TASK_RENUM_ARRAY(A) (*((SgSymbol **)(ORIGINAL_SYMBOL(A))->attributeValue(0,TSK_RENUM_ARRAY)))
|
|
#define TASK_LPS_ARRAY(A) (*((SgSymbol **)(ORIGINAL_SYMBOL(A))->attributeValue(0,TSK_LPS_ARRAY)))
|
|
#define TASK_HPS_ARRAY(A) (*((SgSymbol **)(ORIGINAL_SYMBOL(A))->attributeValue(0,TSK_HPS_ARRAY)))
|
|
#define TASK_AUTO(A) ((A)->attributeValue(0,TSK_AUTO))
|
|
#define RTS2_OBJECT(A) ((A)->attributeValue(0,RTS2_CREATED))
|
|
#define IS_LIST_END(A) ((A)->attributeValue(0,END_OF_USE_LIST))
|
|
/*#define AR_COEFFICIENTS(A) ( (A)->attributeValue(0,ARRAY_COEF) ? (coeffs *) (A)->attributeValue(0,ARRAY_COEF) : (coeffs *) (ORIGINAL_SYMBOL(A))->attributeValue(0,ARRAY_COEF))*/
|
|
#define AR_COEFFICIENTS(A) (DvmArrayCoefficients(A))
|
|
#define MAX_DVM maxdvm = (maxdvm < ndvm) ? ndvm-1 : maxdvm
|
|
#define FREE_DVM(A) maxdvm = (maxdvm < ndvm) ? ndvm-1 : maxdvm; ndvm-=A
|
|
#define SET_DVM(A) maxdvm = (maxdvm < ndvm) ? ndvm-1 : maxdvm; ndvm=A
|
|
#define FREE_HPF(A) maxhpf = (maxhpf < nhpf) ? nhpf-1 : maxhpf; nhpf-=A
|
|
#define SET_HPF(A) maxhpf = (maxhpf < nhpf) ? nhpf-1 : maxhpf; nhpf=A
|
|
#define HPF000(N) (new SgArrayRefExp(*hpfbuf, *new SgValueExp(N)))
|
|
#define IS_DUMMY(A) ((A)->thesymb->entry.var_decl.local == IO)
|
|
#define IS_TEMPLATE(A) ((A)->attributes() & TEMPLATE_BIT)
|
|
#define IN_COMMON(A) ((A)->attributes() & COMMON_BIT)
|
|
#define IN_DATA(A) ((A)->attributes() & DATA_BIT)
|
|
#define IN_EQUIVALENCE(A) ((A)->attributes() & EQUIVALENCE_BIT)
|
|
#define IS_ARRAY(A) ((A)->attributes() & DIMENSION_BIT)
|
|
#define IS_ALLOCATABLE(A) ((A)->attributes() & ALLOCATABLE_BIT)
|
|
#define IS_ALLOCATABLE_POINTER(A) (((A)->attributes() & ALLOCATABLE_BIT) || ((A)->attributes() & POINTER_BIT))
|
|
#define IS_POINTER_F90(A) ((A)->attributes() & POINTER_BIT)
|
|
#define CURRENT_SCOPE(A) (((A)->scope() == cur_func) && ((A)->thesymb->entry.var_decl.local != BY_USE) )
|
|
#define IS_BY_USE(A) ((A)->thesymb->entry.Template.base_name != 0)
|
|
/*#define ORIGINAL_SYMBOL(A) (OriginalSymbol(A)) */
|
|
#define ORIGINAL_SYMBOL(A) (IS_BY_USE(A) ? (A)->moduleSymbol() : (A))
|
|
#define IS_SAVE(A) (((A)->attributes() & SAVE_BIT) || (saveall && !IS_TEMPLATE(A) && !IN_COMMON(A) && !IS_DUMMY(A)) )
|
|
#define HAS_SAVE_ATTR(A) (((A)->attributes() & SAVE_BIT ) || saveall )
|
|
#define IS_LOCAL_VAR(A) (CURRENT_SCOPE(A) && !IN_COMMON(A) && !IS_DUMMY(A))
|
|
#define IS_POINTER(A) ((A)->attributes() & DVM_POINTER_BIT)
|
|
#define IS_SH_GROUP_NAME(A) ((A)->variant() == SHADOW_GROUP_NAME)
|
|
#define IS_RED_GROUP_NAME(A) ((A)->variant() == REDUCTION_GROUP_NAME)
|
|
#define IS_GROUP_NAME(A) (((A)->variant() == SHADOW_GROUP_NAME) || ((A)->variant() == REDUCTION_GROUP_NAME) || ((A)->variant() == REF_GROUP_NAME))
|
|
#define IS_DVM_ARRAY(A) (((A)->attributes() & DISTRIBUTE_BIT) || ((A)->attributes() & ALIGN_BIT) || ((A)->attributes() & INHERIT_BIT))
|
|
#define IS_DISTR_ARRAY(A) (((A)->attributes() & DISTRIBUTE_BIT) || ((A)->attributes() & ALIGN_BIT) || ((A)->attributes() & INHERIT_BIT))
|
|
#define IN_MODULE (cur_func->variant() == MODULE_STMT)
|
|
#define IN_MAIN_PROGRAM (cur_func->variant() == PROG_HEDR)
|
|
#define DVM_PROC_IN_MODULE(A) ((mod_attr *)(A)->attributeValue(0,MODULE_STR))
|
|
/*
|
|
#define LINE_NUMBER_BEFORE(ST,WHERE) doAssignStmtBefore(new SgValueExp((ST)->lineNumber()),WHERE); ndvm--; InsertNewStatementBefore(D_Lnumb(ndvm),WHERE)
|
|
#define LINE_NUMBER_STL_BEFORE(STL,ST,WHERE) doAssignStmtBefore(new SgValueExp((ST)->lineNumber()),WHERE); ndvm--; InsertNewStatementBefore(STL=D_Lnumb(ndvm),WHERE)
|
|
#define LINE_NUMBER_AFTER(ST,WHERE) InsertNewStatementAfter (D_Lnumb(ndvm),WHERE,(WHERE)->controlParent()); doAssignStmtBefore(new SgValueExp((ST)->lineNumber()),cur_st); ndvm--
|
|
#define LINE_NUMBER_N_AFTER(N,WHERE,CP) InsertNewStatementAfter(D_Lnumb(ndvm),WHERE,CP); doAssignStmtBefore(new SgValueExp(N),cur_st); ndvm--
|
|
*/
|
|
/*
|
|
#define LINE_NUMBER_BEFORE(ST,WHERE) doAssignStmtBefore(new SgValueExp((ST)->lineNumber()),WHERE); ndvm--; InsertNewStatementBefore((many_files ? D_FileLine(ndvm,ST) : D_Lnumb(ndvm)) ,WHERE)
|
|
#define LINE_NUMBER_STL_BEFORE(STL,ST,WHERE) doAssignStmtBefore(new SgValueExp((ST)->lineNumber()),WHERE); ndvm--; InsertNewStatementBefore(STL= (many_files ? D_FileLine(ndvm,ST) : D_Lnumb(ndvm)),WHERE)
|
|
#define LINE_NUMBER_AFTER(ST,WHERE) InsertNewStatementAfter ((many_files ? D_FileLine(ndvm,ST) : D_Lnumb(ndvm)),WHERE,(WHERE)->controlParent()); doAssignStmtBefore(new SgValueExp((ST)->lineNumber()),cur_st); ndvm--
|
|
#define LINE_NUMBER_N_AFTER(N,WHERE,CP) InsertNewStatementAfter((many_files ? D_FileLine(ndvm,CP): D_Lnumb(ndvm)),WHERE,CP); doAssignStmtBefore(new SgValueExp(N),cur_st); ndvm--
|
|
*/
|
|
/*
|
|
#define LINE_NUMBER_BEFORE(ST,WHERE) InsertNewStatementBefore(D_FileLineConst((ST)->lineNumber(),ST),WHERE)
|
|
#define LINE_NUMBER_STL_BEFORE(STL,ST,WHERE) InsertNewStatementBefore(STL= D_FileLineConst((ST)->lineNumber(),ST),WHERE)
|
|
#define LINE_NUMBER_AFTER(ST,WHERE) InsertNewStatementAfter (D_FileLineConst((ST)->lineNumber(),ST),WHERE,(WHERE)->controlParent())
|
|
#define LINE_NUMBER_AFTER_WITH_CP(ST,WHERE,CP) InsertNewStatementAfter (D_FileLineConst((ST)->lineNumber(),ST),WHERE,CP)
|
|
#define LINE_NUMBER_N_AFTER(N,WHERE,CP) InsertNewStatementAfter(D_FileLineConst(N,CP),WHERE,CP)
|
|
*/
|
|
#define LINE_NUMBER_BEFORE(ST,WHERE) InsertNewStatementBefore(Dvmh_Line((ST)->lineNumber(),ST),WHERE)
|
|
#define LINE_NUMBER_STL_BEFORE(STL,ST,WHERE) InsertNewStatementBefore(STL= Dvmh_Line((ST)->lineNumber(),ST),WHERE)
|
|
#define LINE_NUMBER_AFTER(ST,WHERE) InsertNewStatementAfter (Dvmh_Line((ST)->lineNumber(),ST),WHERE,(WHERE)->controlParent())
|
|
#define LINE_NUMBER_AFTER_WITH_CP(ST,WHERE,CP) InsertNewStatementAfter (Dvmh_Line((ST)->lineNumber(),ST),WHERE,CP)
|
|
#define LINE_NUMBER_N_AFTER(N,WHERE,CP) InsertNewStatementAfter(Dvmh_Line(N,CP),WHERE,CP)
|
|
|
|
#define LINE_NUMBER_NEXP_AFTER(NE,WHERE,CP) InsertNewStatementAfter(D_DummyFileLine(ndvm,"dvm_check"),WHERE,CP); doAssignStmtBefore((NE),cur_st); ndvm--
|
|
#define ALIGN_RULE_INDEX(A) ((int*)(A)->attributeValue(0,ALIGN_RULE))
|
|
#define INTERVAL_LINE (St_frag->begin_st->lineNumber())
|
|
#define INTERVAL_NUMBER (St_frag->No)
|
|
#define GROUP_REF(S,I) (new SgArrayRefExp(*(S),*new SgValueExp(I)))
|
|
#define IS_DO_VARIABLE_USE(E) ((SgExpression **)(E)->attributeValue(0,DO_VARIABLE_USE))
|
|
#define HEADER_SIZE(A) (2+(maxbuf+1)*2*(Rank(A)+1))
|
|
#define HSIZE(R) (2*R + 2)
|
|
#define ARRAY_ELEMENT(A,I) (new SgArrayRefExp(*A, *new SgValueExp(I)))
|
|
#define INTEGER_VALUE(E,C) ((E)->variant() == INT_VAL && (E)->valueInteger() == (C))
|
|
#define IS_INTRINSIC_TYPE(T) (!TYPE_RANGES((T)->thetype) && !TYPE_KIND_LEN((T)->thetype) && ((T)->variant() != T_DERIVED_TYPE))
|
|
#define DEBUG_STMTS_FOR_GOTO(ST) ((SgStatement **)(ST)->attributeValue(0,DEBUG_GOTO))
|
|
/* ACC */
|
|
#define HEADER_FOR_GPU(A) ((SgSymbol**)(A)->attributeValue(0,GPU_HEADER))
|
|
#define FREE_GPU(A) maxgpu = (maxgpu < ngpu) ? ngpu-1 : maxgpu; ngpu-=A
|
|
#define SET_GPU(A) maxgpu = (maxgpu < ngpu) ? ngpu-1 : maxgpu; ngpu=A
|
|
#define GPU000(N) (new SgArrayRefExp(*gpubuf, *new SgValueExp(N)))
|
|
#define IN_COMPUTE_REGION (cur_region && !cur_region->is_data && !in_checksection)
|
|
#define BY_HANDLER (ACC_program)
|
|
#define IND_REDVAR(A) (*((int *)(A)->attributeValue(0,REDVAR_INDEX)))
|
|
#define SET_NRED(A) maxred_gpu = (maxred_gpu < nred_gpu) ? nred_gpu-1 : maxred_gpu; nred_gpu=A
|
|
#define DECL(A) ((A)->thesymb->decl)
|
|
#define VAR_INTENT(A) (((int *)(A)->attributeValue(0,INTENT_OF_VAR)))
|
|
#define IN_STATEMENT_GROUP(A) ((A)->attributeValue(0,STATEMENT_GROUP))
|
|
#define HEADER_OF_REPLICATED(A) (((int *)(A)->attributeValue(0,REPLICATED_ARRAY)))
|
|
#define DUMMY_FOR_ARRAY(A) ( (SgSymbol **)(A)->attributeValue(0,DUMMY_ARRAY) )
|
|
#define DUMMY_ARG(A) ( (SgSymbol **)(A)->attributeValue(0,DUMMY_ARGUMENT) )
|
|
#define IS_CONSISTENT(A) ((A)->attributes() & CONSISTENT_BIT)
|
|
#define IS_INSERTED(A) ((A)->attributeValue(0,INSERTED_STATEMENT))
|
|
#define VECTOR_REF(V,N) (new SgArrayRefExp(*V, *new SgValueExp(N)))
|
|
#define INDEX_VECTOR(A) ( (SgSymbol **)(A)->attributeValue(0,INDEX_LIST) )
|
|
#define GROUP_INDEX(A) (((int *)(A)->attributeValue(0,ACROSS_GROUP_IND)))
|
|
#define GRAPHNODE(A) (*((graph_node **)(A)->attributeValue(0,GRAPH_NODE)))
|
|
#define ATTR_NODE(A) ((graph_node **)(A)->attributeValue(0,GRAPH_NODE))
|
|
#define HEDR(A) ((A)->thesymb->entry.Template.func_hedr)
|
|
#define FILE_LAST_STATEMENT(ST) ((SgStatement **)(ST)->attributeValue(0,LAST_STATEMENT))
|
|
#define CALLED_FUNCTIONS(ST) ((symb_list **)(ST)->attributeValue(0,RTC_CALLS))
|
|
#define INTERFACE_RTS2 (parloop_by_handler == 2)
|
|
#define CANCEL_RTS2_MODE if(parloop_by_handler == 2) parloop_by_handler = -1
|
|
#define RESUMPTION_RTS2_MODE if(parloop_by_handler == -1) parloop_by_handler = 2
|
|
#define HEADER_FOR_HANDLER(A) ( (SgSymbol **)(A)->attributeValue(0,HANDLER_HEADER) )
|
|
#define USE_STATEMENTS_ARE_REQUIRED ( (int *) first_do_par->attributeValue(0,MODULE_USE) )
|
|
#define DEFERRED_SHAPE_TEMPLATE(A) ( (ORIGINAL_SYMBOL(A))->attributeValue(0,DEFERRED_SHAPE) )
|
|
#define HAS_ROUTINE_ATTR(A) ((A)->attributeValue(0,ROUTINE_ATTR))
|
|
#define IS_REMOTE_ACCESS_BUFFER(A) ((A)->attributeValue(0,REMOTE_ACCESS_BUF))
|
|
|
|
EXTERN
|
|
SgFunctionSymb * fdvm [MAX_LIBFUN_NUM];
|
|
EXTERN
|
|
SgFunctionSymb * f90 [NUM__F90];
|
|
EXTERN
|
|
SgFunctionSymb * f90_dvm [NUM__F90];
|
|
EXTERN
|
|
const char * name_dvm [MAX_LIBFUN_NUM];
|
|
EXTERN
|
|
short fmask [MAX_LIBFUN_NUM];
|
|
EXTERN
|
|
SgVariableSymb * dvmbuf,
|
|
* hpfbuf,
|
|
* Imem,
|
|
* Rmem,
|
|
* Dmem,
|
|
* Lmem,
|
|
* Cmem,
|
|
* Chmem,
|
|
* DCmem,
|
|
* heapdvm,
|
|
* Pipe;
|
|
|
|
/*ACC*/
|
|
EXTERN
|
|
SgVariableSymb * gpubuf,
|
|
* Imem_gpu,
|
|
* Rmem_gpu,
|
|
* Dmem_gpu,
|
|
* Lmem_gpu,
|
|
* Cmem_gpu,
|
|
* Chmem_gpu,
|
|
* DCmem_gpu; /*ACC*/
|
|
|
|
|
|
EXTERN SgConstantSymb *Iconst[10];
|
|
EXTERN const char *tag[MAXTAGS];
|
|
EXTERN int max_lab; // maximal label in file
|
|
EXTERN int ndvm; // index for buffer array 'dvm000'
|
|
EXTERN int maxdvm; // size of array 'dvm000'
|
|
EXTERN int loc_distr;
|
|
EXTERN int send; //set to 1 if I/O statement require 'send' operation
|
|
EXTERN char *fin_name; //input file name
|
|
EXTERN SgStatement *cur_st; // current statement (for inserting)
|
|
EXTERN SgFile *current_file; //current file
|
|
EXTERN SgStatement *where;//used in doAssignStmt: new statement is inserted before 'where' statement
|
|
EXTERN int nio;
|
|
EXTERN SgSymbol *bufIO[Ntp],*IOstat;
|
|
EXTERN int buf_use[Ntp];
|
|
EXTERN SgSymbol *loop_var[MAX_DIMS+1]; // for generatig DO statements
|
|
EXTERN SgStatement *cur_func; // current function
|
|
EXTERN int err_cnt; // counter of errors in file
|
|
EXTERN int saveall; //= 1 if there is SAVE without name-list in current function(procedure)
|
|
EXTERN SgStatement *par_do; // first DO statement of current parallel loop
|
|
EXTERN int iplp; //dvm000 element number for storing ParLoopRef
|
|
EXTERN int irg; //dvm000 element number for storing RedGroupRef
|
|
EXTERN int irgts; //dvm000 element number for storing RedGroupRef(task_region)
|
|
EXTERN int idebrg; //dvm000 element number for storing DebRedGroupRef
|
|
EXTERN SgExpression *redgref; // reduction group reference
|
|
EXTERN SgExpression *redgrefts; // reduction group reference for TASK_REGION
|
|
EXTERN SgExpression *debredgref; // debug reduction group reference
|
|
EXTERN SgExpression *red_list; // reduction operation list in FDVM program
|
|
EXTERN SgExpression *task_red_list; // reduction operation list (in TASK_REGION directive)
|
|
EXTERN rem_acc *rma; // remote_access directive/clause list
|
|
EXTERN int iconsg; //dvm000 element number for storing ConsistGroupRef
|
|
EXTERN int iconsgts; //dvm000 element number for storing ConsistGroupRef(task_region)
|
|
EXTERN int idebcg; //dvm000 element number for storing DebRedGroupRef
|
|
EXTERN SgExpression *consgref; // consistent group reference
|
|
EXTERN SgExpression *consgrefts; // consistent group reference for TASK_REGION
|
|
EXTERN SgExpression *debconsgref; // debug reduction(consistent) group reference
|
|
EXTERN SgExpression *cons_list; // consistent array list in FDVM program
|
|
EXTERN SgExpression *task_cons_list; // consistent array list (in TASK_REGION directive)
|
|
|
|
EXTERN SgLabel *end_lab, *begin_lab; //labels for parallel loop nest
|
|
EXTERN D_do_list *cur_do;
|
|
EXTERN D_do_list *free_list;
|
|
EXTERN int Dloop_No;
|
|
EXTERN int pardo_No;
|
|
EXTERN int taskreg_No;
|
|
EXTERN int pardo_line;
|
|
EXTERN int D_end_do;
|
|
EXTERN int nfrag ; //counter of intervals for performance analizer
|
|
EXTERN interval_list *St_frag ;
|
|
EXTERN interval_list *St_loop_first;
|
|
EXTERN interval_list *St_loop_last;
|
|
EXTERN int perf_analysis ; //set to 1 by -e1
|
|
EXTERN int close_loop_interval;
|
|
EXTERN stmt_list *goto_list, *acc_return_list;
|
|
EXTERN int len_int; //set by option -bind
|
|
EXTERN int len_DvmType;//set by option -t and -bind
|
|
EXTERN int bind_;//set by option -bind
|
|
/*EXTERN D_fragment *deb[5]; //set by option -d and -e*/
|
|
EXTERN int dvm_debug ; //set to 1 by -d1 or -d2 or -d3 or -d4 flag
|
|
EXTERN int only_debug ; //set to 1 by -s flag
|
|
EXTERN int level_debug ; //set to 1 by -d1, to 2 by -d2, ...
|
|
EXTERN fragment_list_in *debug_fragment; //set by option -d
|
|
EXTERN fragment_list_in *perf_fragment; //set by option -e
|
|
EXTERN int debug_regim; //set by option -d
|
|
EXTERN int check_regim; //set by option -dc
|
|
EXTERN int dbg_if_regim; //set by option -dbif
|
|
EXTERN int deb_mpi; //set by option -dmpi
|
|
EXTERN int d_no_index; //set by option -dnoind
|
|
EXTERN int IOBufSize; //set by option -bufio
|
|
EXTERN int UnparserBufSize; //set by option -bufUnparser
|
|
EXTERN int collapse_loop_count; //set by option -collapse
|
|
EXTERN SgSymbol *dbg_var;
|
|
EXTERN int HPF_program;
|
|
EXTERN int ACC_program;
|
|
EXTERN int rmbuf_size[Ntp];
|
|
EXTERN int first_time;
|
|
EXTERN SgStatement *indep_st; //first INDEPENDENT directive of loop nest
|
|
EXTERN SgStatement *ins_st1, *ins_st2; // for INDEPENDENT loop
|
|
EXTERN SgSymbol *DoVar[MAX_LOOP_NEST], **IND_var, **IEX_var;
|
|
EXTERN int iarg; // for INDEPENDENT loop
|
|
EXTERN int nIND, nIEX; //the number of INDEPENDENT loops and enclosing loops;
|
|
EXTERN SgExpression *IND_target;
|
|
EXTERN SgExpression *IND_target_R;
|
|
EXTERN IND_ref_list *IND_refs;
|
|
EXTERN reduction_list *redl; // reduction operation list in HPF program
|
|
EXTERN int nhpf; // index for work array 'hpf000'
|
|
EXTERN int maxhpf; // size of array 'hpf000'
|
|
EXTERN int all_sh_width, no_rma, one_inquiry, only_local; // //set by option -Hflag
|
|
EXTERN SgStatement *first_hpf_exec;
|
|
EXTERN int hpf_ind;
|
|
EXTERN symb_list *dvm_ar,*registration;
|
|
EXTERN int many_files;
|
|
EXTERN int seq_loop_nest;
|
|
EXTERN int pipeline;
|
|
EXTERN symb_list *imp_loop; //input element list, that are appear in implicit loop
|
|
EXTERN heap_pointer_list *heap_point;
|
|
EXTERN filename_list *fnlist;
|
|
EXTERN int filename_num;
|
|
EXTERN SgFunctionSymb *SIZE_function;
|
|
EXTERN int in_interface; //inside the interface block > 0
|
|
EXTERN int inparloop; //set to 1 in the range of parallel loop
|
|
EXTERN SgSymbol *registration_array;
|
|
EXTERN int count_reg;
|
|
EXTERN SgSymbol *check_sum;
|
|
EXTERN int default_integer_size,default_real_size ;
|
|
EXTERN int all_replicated; //all arrays in procedure are replicated
|
|
EXTERN symb_list *if_goto;
|
|
EXTERN int nifvar;
|
|
EXTERN stmt_list *entry_list;
|
|
EXTERN SgExpression *dbif_cond, *dbif_not_cond;
|
|
EXTERN SgStatement *st_adr, *st_dstv;
|
|
EXTERN base_list *mem_use_structure;
|
|
EXTERN symb_list *sym_gpu; /* list of dvm_array with gpu-copies */ /*ACC*/
|
|
EXTERN region_list *cur_region; //current region in ACC program /*ACC*/
|
|
EXTERN int gpu_mem_use[Ntp]; /*ACC*/
|
|
//EXTERN SgSymbol *mem_symb[6],*gpu_mem_symb[6], *k_mem_symb[6]; /*ACC*/
|
|
EXTERN int ngpu; // index for work array 'gpu000' /*ACC*/
|
|
EXTERN int nkernel; // counter of kernels /*ACC*/
|
|
EXTERN int maxgpu; // size of work array 'gpu000' /*ACC*/
|
|
//EXTERN SgSymbol *s_blocks,*s_threads,*s_blocks_off; /*ACC*/
|
|
EXTERN SgSymbol *mod_gpu_symb,*loop_ref_symb; /*ACC*/
|
|
EXTERN SgSymbol*index_array_symb; /*ACC*/
|
|
EXTERN SgStatement *if_gpu,*mod_gpu,*created_unit; /*ACC*/
|
|
//EXTERN char *fname_gpu[80]; /*ACC*/
|
|
EXTERN symb_list *acc_array_list, *acc_arg_array_list; /*ACC*/
|
|
EXTERN int nred_gpu,maxred_gpu, for_kernel, for_host; /*ACC*/
|
|
EXTERN int device_flag[Ndev]; /*ACC*/
|
|
EXTERN int region_debug; //set by option -dgpu ,-dreg /*ACC*/
|
|
EXTERN int region_compare; //set by option -dgpu /*ACC*/
|
|
EXTERN SgConstantSymb *region_const[Nregim]; /*ACC*/
|
|
EXTERN SgExpression *cuda_block; /*ACC*/
|
|
EXTERN SgExpression *allocated_list; /*ACC*/
|
|
EXTERN SgStatement *first_do_par; /*ACC*/
|
|
EXTERN int in_checksection,undefined_Tcuda, cuda_functions; /*ACC*/
|
|
EXTERN symb_list *RGname_list; /*ACC*/
|
|
EXTERN int parloop_by_handler; //set to 1 by option -Opl and /*ACC*/
|
|
// to 2 by option -Opl2
|
|
//---------------------------------------------------------------------
|
|
/* dvm.cpp */
|
|
void TranslateFileDVM(SgFile *f);
|
|
void TransFunc(SgStatement *func,SgStatement* &end_of_unit) ;
|
|
void InsertDebugStat(SgStatement *func,SgStatement* &end_of_unit) ;
|
|
void DVMFileUnparse(SgFile *f) ;
|
|
void DeclareVarDVM(SgStatement *lstat, SgStatement *lstat2);
|
|
void DeclareVariableWithInitialization (SgSymbol *sym, SgType *type, SgStatement *lstat);
|
|
void doDistFormat(SgExpression *e);
|
|
//void GenDistArray (SgSymbol *das, int idisars, SgExpression **distr_list, SgExpression *ps, SgStatement *stdis);
|
|
void GenDistArray (SgSymbol *das, int idisars, SgExpression *distr_rule_list, SgExpression *ps, SgStatement *stdis);
|
|
SgExpression * doSizeArray(SgSymbol *ar, SgStatement *st);
|
|
SgExpression * doSizeFunctionArray(SgSymbol *ar, SgStatement *st);
|
|
SgExpression *doSizeArrayD(SgSymbol *ar, SgStatement *st);
|
|
SgSymbol * baseMemory(SgType *t);
|
|
int TypeSize(SgType *t);
|
|
int CharLength(SgType *t);
|
|
void TypeMemory(SgType *t);
|
|
int TypeIndex(SgType *t);
|
|
int doDisRuleArrays (SgStatement *stdist, int aster, SgExpression **distr_list);
|
|
SgExpression *doDisRules(SgStatement *stdis, int aster, int &idis);
|
|
void Align_Tree(align *root);
|
|
void AlignTree( align *root);
|
|
void GenAlignArray(align *node, align *root, int nr, SgExpression *align_rule_list, int iaxis);
|
|
void doAlignRule_1 (int rank);
|
|
int doAlignRule (SgSymbol *alignee,SgStatement *algn_st, int iaxis);
|
|
SgExpression *doAlignRules (SgSymbol *alignee, SgStatement *algn_st, int iaxis, int &nt);
|
|
int AxisNumOfDummyInExpr (SgExpression *e, SgSymbol *dim_ident[], int ni, SgExpression **eref, int use[], SgStatement *st);
|
|
void CoeffConst(SgExpression *e, SgExpression *ei, SgExpression **pcoef, SgExpression **pcons);
|
|
//void RealignArray(SgSymbol *als, SgSymbol *tgs, int iaxis, int nr, int new_sign, SgStatement *stal);
|
|
void RealignArray(SgSymbol *als, SgSymbol *tgs, int iaxis, int nr, SgExpression *align_rule_list, int new_sign, SgStatement *stal) ;
|
|
void ArrayHeader(SgSymbol *ar, int ind);
|
|
int Rank(SgSymbol *s);
|
|
SgExpression *dvm_array_ref();
|
|
SgExpression *dvm_ref(int n);
|
|
int DeleteDArFromList(SgStatement *stmt);
|
|
void ChangeArg_DistArrayRef(SgExpression *e);
|
|
void ChangeDistArrayRef(SgExpression *e);
|
|
void ChangeDistArrayRef_Left(SgExpression *e);
|
|
SgExpression *SearchDistArrayField(SgExpression *e);
|
|
SgExpression *ReplaceParameter(SgExpression *e);
|
|
SgExpression *LinearForm (SgSymbol *ar, SgExpression *el, SgExpression *erec);
|
|
SgExpression *LinearFormB (SgSymbol *ar, int ihead, int n, SgExpression *el);
|
|
SgExpression * head_ref (SgSymbol *ar, int n);
|
|
SgExpression * header_ref (SgSymbol *ar, int n);
|
|
SgExpression * header_rf (SgSymbol *ar, int ihead, int n);
|
|
SgExpression * HeaderRef (SgSymbol *ar);
|
|
SgExpression * HeaderRefInd(SgSymbol *ar, int n);
|
|
SgType* SgTypeComplex(SgFile *f);
|
|
SgType* SgTypeDoubleComplex(SgFile *f);
|
|
SgExpression *HeaderNplus1(SgSymbol * ar);
|
|
SgExpression *BufferHeaderNplus1(SgExpression * rme, int n, int ihead,SgSymbol *ar);
|
|
SgExpression *LowerBound(SgSymbol *ar, int i);
|
|
SgExpression *UpperBound(SgSymbol *ar, int i);
|
|
int ExpCompare(SgExpression *e1, SgExpression *e2);
|
|
int RedFuncNumber(SgExpression *kwe);
|
|
int RedFuncNumber_2(int num);
|
|
int VarType(SgSymbol *var);
|
|
void ShadowList (SgExpression *el, SgStatement *st,SgExpression *gref );
|
|
int doShadSizeArrayM1(SgSymbol *ar,SgExpression **shlist);
|
|
int doShadSizeArrays(SgExpression *shl, SgSymbol *ar, SgStatement *st, SgExpression **shlist);
|
|
int BoundSizeArrays(SgSymbol *das);
|
|
int NameIndex(SgType *type);
|
|
SgType *Base_Type(SgType *type);
|
|
int doAlignIteration(SgStatement *stat, SgExpression *aref);
|
|
int Alignment(SgStatement *stat, SgExpression *aref, SgExpression *axis[], SgExpression *coef[], SgExpression *cons[],int interface);
|
|
void doLoopStmt(SgStatement *st);
|
|
stmt_list *addToStmtList(stmt_list *pstmt, SgStatement *stat);
|
|
stmt_list *delFromStmtList(stmt_list *pstmt);
|
|
SgExpression * ArrayDimSize(SgSymbol *ar, int i);
|
|
void RedistributeArray(SgSymbol *das, int idisars, SgExpression *distr_rule_list, SgExpression *ps, int sign,SgExpression *dasref, SgStatement *stdis);
|
|
SgExpression * DistObjectRef (SgSymbol *ar);
|
|
SgStatement *doIfThenConstr(SgSymbol *ar);
|
|
SgExpression *Calculate(SgExpression *e);
|
|
int RemAccessRefCompare(SgExpression *e1, SgExpression *e2);
|
|
void ChangeRemAccRef(SgExpression *e, SgExpression *rve);
|
|
SgExpression *isRemAccessRef(SgExpression *e);
|
|
int CreateBufferArray(int rank, SgExpression *rme, int *amview, SgStatement *stmt);
|
|
void CopyToBuffer(int rank, int ibuf, SgExpression *rme);
|
|
void RemoteVariableList(SgSymbol *group,SgExpression *rml, SgStatement *stmt);
|
|
void RemoteVariableList1(SgSymbol *group,SgExpression *rml, SgStatement *stmt);
|
|
SgExpression *AlignmentListForRemoteDir(int nt, SgExpression *axis[], SgExpression *coef[], SgExpression *cons[]);
|
|
void DeleteBuffers(SgExpression *rml);
|
|
void AddRemoteAccess(SgExpression *rml, SgStatement *rmout);
|
|
void DelRemoteAccess();
|
|
void RemoteAccessEnd();
|
|
SgExpression *isSpecialFormExp(SgExpression *e,int i,int ind,SgExpression *vpart[],SgSymbol *do_var[]);
|
|
int isInvariantPart(SgExpression *e);
|
|
int isDependentPart(SgExpression *e,SgSymbol *do_var[]);
|
|
SgExpression *RenewSpecExp(SgExpression *e, int cnst, int ind);
|
|
int isDistObject(SgExpression *e);
|
|
SgExpression *Exprn(SgExpression *e);
|
|
int isListOfArrays(SgExpression *e, SgStatement *st);
|
|
char * AttrName(int i);
|
|
int TestShapeSpec(SgExpression *e);
|
|
void AddToGroupNameList (SgSymbol *s);
|
|
symb_list *AddToSymbList( symb_list *ls, SgSymbol *s);
|
|
symb_list *AddNewToSymbList ( symb_list *ls, SgSymbol *s);
|
|
symb_list *AddNewToSymbListEnd ( symb_list *ls, SgSymbol *s);
|
|
symb_list *MergeSymbList(symb_list *ls1, symb_list *ls2);
|
|
symb_list *CopySymbList(symb_list *ls);
|
|
void DistArrayRef(SgExpression *e, int modified, SgStatement *st);
|
|
void GoRoundEntry(SgStatement *stmt);
|
|
void BeginBlockForEntry(SgStatement *stmt);
|
|
int isInSymbList(symb_list *ls,SgSymbol *s);
|
|
void NewVarList(SgExpression *nl,SgStatement *stmt);
|
|
void TestReverse(SgExpression *e,SgStatement *st);
|
|
void TestShadowWidths(SgSymbol *ar, SgExpression * lbound[], SgExpression * ubound[], int nw, SgStatement *st);
|
|
int PointerRank(SgSymbol *p);
|
|
SgType * PointerType(SgSymbol *p);
|
|
void AssignPointer(SgStatement *ass);
|
|
void AllocateArray(SgStatement *stmt, distribute_list *distr);
|
|
void AllocateDistArray(SgSymbol *p, SgExpression *desc, SgStatement *stdis, SgStatement *stmt);
|
|
void AlignTreeAlloc( align *root,SgStatement *stmt);
|
|
void AllocateAlignArray(SgSymbol *p, SgExpression *desc, SgStatement *stmt);
|
|
void AlignAllocArray(align *node, align *root, int nr, int iaxis,SgExpression *desc, SgStatement *stmt);
|
|
void AddFirstSubscript(SgExpression *ea, SgExpression *ei);
|
|
SgExpression * PointerHeaderRef(SgExpression *pe, int ind);
|
|
void CopyHeader(SgExpression *ple, SgExpression *pre, int rank);
|
|
int TestArrayRef(SgExpression *e, SgStatement *stmt);
|
|
void AddDistSymbList(SgSymbol *s);
|
|
void initialize();
|
|
void initVariantNames();
|
|
void initLibNames();
|
|
void initMask();
|
|
void InitDVM( SgFile *f);
|
|
void StoreLowerBoundsPlus(SgSymbol *ar, SgExpression *arref);
|
|
void StoreLowerBoundsPlusFromAllocate(SgSymbol *ar,SgExpression *arref,SgExpression *lbound);
|
|
void ReplaceLowerBound(SgSymbol *ar, int i);
|
|
void ReplaceArrayBounds(SgSymbol *ar) ;
|
|
SgExpression *ConstRef(int ic);
|
|
SgExpression *SignConstRef(int ic);
|
|
int DVMTypeLength();
|
|
void ReconfPS( stmt_list *pstmt);
|
|
SgExpression *CountOfTasks(SgStatement *st);
|
|
void TestParamType(SgStatement *stmt);
|
|
SgExpression *CurrentPS ();
|
|
SgExpression *ParentPS ();
|
|
SgExpression *ReplaceFuncCall(SgExpression *e);
|
|
SgExpression *PSReference(SgStatement *st);
|
|
SgExpression *TaskPS(SgExpression *target,SgStatement *st);
|
|
SgExpression *hasOntoClause(SgStatement *stdis);
|
|
SgExpression *hasNewValueClause(SgStatement *stdis);
|
|
int RankOfSection(SgExpression *are);
|
|
void CreateTaskArray(SgSymbol *ts);
|
|
int LoopVarType(SgSymbol *var,SgStatement *st);
|
|
int LocVarType(SgSymbol *var,SgStatement *st);
|
|
void StartTask(SgStatement *stmt);
|
|
void InitGroups();
|
|
//void InsertRedVarsInGroup(SgExpression *redgref,int irv,int nred);
|
|
SgExpression * isDoVarUse (SgExpression *e, int use[], SgSymbol *ident[], int ni, int *num, SgStatement *st);
|
|
SgSymbol* isIndirectSubscript (SgExpression *e, SgSymbol *ident, SgStatement *st);
|
|
void IndirectList(SgSymbol *group, SgExpression *rml, SgStatement *stmt);
|
|
SgExpression *BufferHeader4(SgExpression * rme, int ihead);
|
|
void BeginDebugFragment(int num, SgStatement *stmt);
|
|
void EndDebugFragment();
|
|
void InitRemoteGroups();
|
|
int MinLevel(int level, int max, int is_max);
|
|
int MaxLevels(SgStatement *stmt,int *max_dlevel,int *max_elevel);
|
|
SgExpression *PointerArrElem(SgSymbol *p,SgStatement *stdis);
|
|
SgExpression *ReverseDim(SgExpression *desc,int rank);
|
|
SgExpression *DoSubscriptList(SgExpression *are,int ind);
|
|
SgExpression *doSizeArrayQuery(SgExpression *headref,int rank);
|
|
int DVMType();
|
|
int NumberOfElements(SgSymbol *ar, SgStatement *stmt, int err);
|
|
void InitHeap(SgSymbol *heap);
|
|
int isHPFprogram(char *filename);
|
|
SgExpression * HeapIndex(SgStatement *st);
|
|
SgExpression * LowerBoundOfDimension(SgArrayType *artype, int i);
|
|
int DeleteHeapFromList(SgStatement *stmt);
|
|
void InitAsyncid();
|
|
void AsyncCopyWait(SgExpression *asc);
|
|
void Triplet(SgExpression *e,SgSymbol *ar,int i, SgExpression *einit[],SgExpression *elast[],SgExpression *estep[]);
|
|
void AsynchronousCopy(SgStatement *stmt);
|
|
void CreateCoeffs(coeffs* scoef,SgSymbol *ar);
|
|
SgExpression * coef_ref (SgSymbol *ar, int n);
|
|
SgExpression * coef_ref (SgSymbol *ar, int n, SgExpression *erec);
|
|
coeffs *DvmArrayCoefficients(SgSymbol *ar);
|
|
void DeleteShadowGroups(SgStatement *stmt);
|
|
void InitShadowGroups();
|
|
int doSectionIndex(SgExpression *esec, SgSymbol *ar, SgStatement *st, int idv[], int ileft, SgExpression *lrec[], SgExpression *rrec[]);
|
|
void ShadowSectionTriplet(SgExpression *e, int i, SgExpression *einit[], SgExpression *elast[], SgExpression *estep[], SgExpression *lrec[], SgExpression *rrec[], int flag);
|
|
void AddToAligneeList(align *root, align* node);
|
|
void RegistrationList(SgStatement *stmt);
|
|
void RegistrateArg(SgExpression *ele);
|
|
int TestType(SgType *type);
|
|
filename_list *AddToFileNameList ( char *s);
|
|
filename_list *AddToFileNameList(const char *s);
|
|
char* FileNameVar(int i);
|
|
void InitFileNameVariables();
|
|
char* RedGroupVarName(SgSymbol *gr);
|
|
void CreateRedGroupVars();
|
|
void InitRedGroupVariables();
|
|
void WaitDirList();
|
|
int DefineLoopNumberForDimension(SgStatement * stat, SgExpression *ear, int loop_num[]);
|
|
SgExpression *DebReductionGroup(SgSymbol *gs);
|
|
void Reduction_Task_Region(SgStatement *stmt);
|
|
void EndReduction_Task_Region(SgStatement *stmt);
|
|
void DeleteLocTemplate(SgStatement *stmt);
|
|
void ShadowComp (SgExpression *ear, SgStatement *st, int ilh);
|
|
SgSymbol* CreateConsistentHeaderSymb(SgSymbol *ar);
|
|
void EndOfProgramUnit(SgStatement *stmt, SgStatement *func, int begin_block);
|
|
SgSymbol* BaseSymbol(SgSymbol *ar);
|
|
void InitBaseCoeffs();
|
|
void CreateIndexVariables(SgExpression *dol);
|
|
SgSymbol* IndexSymbol(SgSymbol *si);
|
|
void doAssignIndexVar(SgExpression *dol,int iout, SgExpression *init[]);
|
|
void ChangeIndexRefBySum(SgExpression *ve);
|
|
SgExpression *TestDVMArrayRef(SgExpression *e);
|
|
void ChangeArrayCoeff(SgSymbol *ar);
|
|
SgSymbol *CreateInitLoopVar(SgSymbol *dovar, SgSymbol *init);
|
|
SgSymbol* InitLoopSymbol(SgSymbol *si,SgType *t);
|
|
void DerivedTypeMemory(SgType *t);
|
|
SgSymbol* DerivedTypeBaseSymbol(SgSymbol *stype,SgType *t);
|
|
SgSymbol* CommonSymbol(SgSymbol *stype);
|
|
int StructureSize(SgSymbol *s);
|
|
void ConsistentArrayList (SgExpression *el,SgExpression *gref, SgStatement *st, SgStatement *stmt1, SgStatement *stmt2);
|
|
void ConsistentArraysStart (SgExpression *el);
|
|
void EndConsistent_Task_Region(SgStatement *stmt);
|
|
void doAxisTask(SgStatement *st, SgExpression *eref);
|
|
void Consistent_Task_Region(SgStatement *stmt);
|
|
//void TransModule(SgStatement *hedr);
|
|
void TransBlockData(SgStatement *hedr,SgStatement* &end_of_unit);
|
|
void VarDeclaration(SgStatement *stmt);
|
|
void initF90Names();
|
|
void initF90_DvmNames();
|
|
void ALLOCATEf90_arrays(SgStatement *stmt, distribute_list *distr);
|
|
void DEALLOCATEf90_arrays(SgStatement *stmt);
|
|
void ALLOCATEf90DistArray(SgSymbol *p, SgExpression *desc, SgStatement *stdis, SgStatement *stmt);
|
|
SgExpression * doSizeAllocArray(SgSymbol *ar, SgExpression *desc, SgStatement *st, int RTS_flag);
|
|
void StoreLowerBoundsPlusOfAllocatable(SgSymbol *ar,SgExpression *desc);
|
|
SgSymbol *FirstTypeField(SgType *t);
|
|
SgSymbol *baseMemoryOfDerivedType(SgType *t);
|
|
void NewSpecificationStatement(SgExpression *op, SgExpression *dvm_list, SgStatement *stmt);
|
|
void AllocatePointerHeader(SgSymbol *ar,SgStatement *stmt);
|
|
SgExpression *LeftMostField (SgExpression *e);
|
|
SgExpression *RightMostField(SgExpression *e);
|
|
int NumericTypeLength(SgType *t);
|
|
SgExpression *StringLengthExpr(SgType *t, SgSymbol *s);
|
|
SgExpression *LengthOfKindExpr(SgType *t, SgExpression *se, SgExpression *le);
|
|
SgExpression * TypeLengthExpr(SgType *t);
|
|
int IntrinsicTypeSize(SgType *t);
|
|
void DeclareVarDVMForInterface(SgStatement *lstat, symb_list *distsymb);
|
|
void DeleteShapeSpecDAr(SgStatement *stmt);
|
|
SgStatement *InterfaceBody(SgStatement *hedr);
|
|
SgStatement *InterfaceBlock(SgStatement *hedr);
|
|
SgExpression *DVMVarInitialization(SgExpression *es);
|
|
SgExpression *FileNameInitialization(SgExpression *es,char *name);
|
|
SgStatement *CreateModuleProcedure(SgStatement *mod_hedr, SgStatement *lst, SgStatement* &has_contains);
|
|
char* ModuleProcName(SgSymbol *smod);
|
|
void GenForUseStmts(SgStatement *hedr,SgStatement *where_st);
|
|
void GenForUseList(SgExpression *ul,SgStatement *stmt, SgStatement *where_st);
|
|
void GenDVMArray(SgSymbol *ar, SgStatement *stmt, SgStatement *where_st);
|
|
void GenCallForUSE(SgStatement *hedr,SgStatement *where_st);
|
|
SgStatement *MayBeDeleteModuleProc(SgStatement *mod_proc,SgStatement *end_mod);
|
|
int TestDVMDirectivesInModule(stmt_list *pstmt);
|
|
int TestDVMDirectivesInProcedure(stmt_list *pstmt);
|
|
int TestUseStmts();
|
|
int ArrayAssignment(SgStatement *stmt);
|
|
void MakeSection(SgExpression *are);
|
|
SgExpression *AsyncArrayElement(SgExpression *asc, SgExpression *ei);
|
|
SgSymbol *OriginalSymbol(SgSymbol *s);
|
|
void DistributeArrayList(SgStatement *stdis);
|
|
SgExpression *CurrentAM();
|
|
SgSymbol *TaskAMVSymbol(SgSymbol *s);
|
|
SgSymbol * CreateRegistrationArraySymbol();
|
|
SgSymbol *Rename(SgSymbol *ar, SgStatement *stmt);
|
|
SgExpression *ArraySection(SgExpression *are, SgSymbol *ar, int rank, SgStatement *stmt, int &init);
|
|
int DistrArrayAssign(SgStatement *stmt);
|
|
int AssignDistrArray(SgStatement *stmt);
|
|
SgSymbol *CheckSummaSymbol();
|
|
SgExpression *DebugIfCondition();
|
|
SgExpression *DebugIfNotCondition();
|
|
void InitDebugVar();
|
|
SgStatement *LastStatementOfDoNest(SgStatement *first_do);
|
|
void TranslateBlock (SgStatement *stat);
|
|
SgStatement *CreateCopyOfExecPartOfProcedure();
|
|
void InsertCopyOfExecPartOfProcedure(SgStatement *stc);
|
|
int lookForDVMdirectivesInBlock(SgStatement *first,SgStatement *last,int contains[] );
|
|
SgSymbol *DebugGoToSymbol(SgType *t);
|
|
int IsGoToStatement(SgStatement *stmt);
|
|
int VarType_RTS(SgSymbol *var);
|
|
int TestType_RTS(SgType *type);
|
|
void CopyDvmBegin(SgStatement *entry,SgStatement *first_dvm_exec,SgStatement *last_dvm_entry);
|
|
void DoStmtsForENTRY(SgStatement *first_dvm_exec,SgStatement *last_dvm_entry);
|
|
void StructureProcessing(SgStatement *stmt);
|
|
SgStatement *ProcessVarDecl(SgStatement *vd);
|
|
void ALLOCATEStructureComponent(SgSymbol *p, SgExpression *struct_e, SgExpression *desc, SgStatement *stmt);
|
|
void StoreLowerBoundsPlusOfAllocatableComponent(SgSymbol *ar,SgExpression *desc, SgExpression *struct_);
|
|
SgExpression * header_ref_in_structure (SgSymbol *ar, int n, SgExpression *struct_);
|
|
void MarkCoeffsAsUsed();
|
|
void LowerBoundInTriplet(SgExpression *e,SgSymbol *ar,int i, SgExpression *einit[]);
|
|
void UpperBoundInTriplet(SgExpression *e,SgSymbol *ar,int i, SgExpression *einit[]);
|
|
void DeleteSymbList(symb_list *ls);
|
|
void TranslateFromTo(SgStatement *first, SgStatement *last, int error_msg);
|
|
int isInternalOrModuleProcedure(SgStatement *header_st);
|
|
SgSymbol *LastSymbolOfFile(SgFile *f);
|
|
int TestType_DVMH(SgType *type);
|
|
int TestType_RTS2(SgType *type);
|
|
int CompareTypes(SgType *t1,SgType *t2);
|
|
int isInterfaceRTS2(SgStatement *stdis);
|
|
SgExpression *doDvmShapeList(SgSymbol *ar, SgStatement *st);
|
|
SgExpression *doShapeList(SgSymbol *ar, SgStatement *st);
|
|
SgExpression *AddElementToList(SgExpression *list, SgExpression *e);
|
|
SgExpression *ListUnion(SgExpression *list1, SgExpression *list2);
|
|
SgExpression *TypeSize_RTS2(SgType *type);
|
|
SgExpression *DeclaredShadowWidths(SgSymbol *ar);
|
|
void DerivedSpecification(SgExpression *edrv, SgStatement *stmt, SgExpression *eFunc[]);
|
|
void Shadow_Add_Directive(SgStatement *stmt);
|
|
SgExpression *CalcLinearForm(SgSymbol *ar, SgExpression *el, SgExpression *erec);
|
|
SgSymbol *IOstatSymbol();
|
|
void ShadowNames(SgSymbol *ar, int axis, SgExpression *shadow_name_list);
|
|
int TestMaxDims(SgExpression *list, SgSymbol *ar, SgStatement *stmt);
|
|
void TemplateDeclarationTest(SgStatement *stmt);
|
|
int DeferredShape(SgExpression *eShape);
|
|
void Template_Create(SgStatement *stmt);
|
|
void Template_Delete(SgStatement *stmt);
|
|
//void RenamingDvmArraysByUse(SgStatement *stmt);
|
|
void RemovingDifferentNamesOfVar(SgStatement *first);
|
|
void UpdateUseListWithDvmArrays(SgStatement *use_stmt);
|
|
char *doOutFileName(const char *fdeb_name);
|
|
int isWholeArray(SgExpression *ae);
|
|
void AnalyzeAsynchronousBlock(SgStatement *dir);
|
|
void InitFileNameVars();
|
|
void CheckInrinsicNames();
|
|
int DvmArrayRefInExpr (SgExpression *e);
|
|
int DvmArrayRefInConstruct (SgStatement *stat);
|
|
symb_list *SortingBySize(symb_list *redvar_list);
|
|
|
|
/* parloop.cpp */
|
|
int ParallelLoop(SgStatement *stmt);
|
|
int ParallelLoop_Debug(SgStatement *stmt);
|
|
void EndOfParallelLoopNest(SgStatement *stmt, SgStatement *end_stmt, SgStatement *par_do,SgStatement *func);
|
|
int TestParallelDirective(SgStatement *stmt, int nloop, int ndo, SgStatement *first_do);
|
|
int TestParallelWithoutOn(SgStatement *stmt, int flag);
|
|
void CheckClauses(SgStatement *stmt, SgExpression *clause[]);
|
|
void StoreLoopPar(SgExpression *par[], int n, int ind, SgStatement*stl);
|
|
void NewVarList(SgExpression *nl,SgStatement *stmt);
|
|
void Interface_1(SgStatement *stmt,SgExpression *clause[],SgSymbol *do_var[],SgExpression *init[],SgExpression *last[],SgExpression *step[],int nloop,int ndo,SgStatement *first_do,int iplp,int iout,SgStatement *stl,SgSymbol *newj,int ub);
|
|
void Interface_2(SgStatement *stmt,SgExpression *clause[],SgExpression *init[],SgExpression *last[],SgExpression *step[],int nloop,int ndo,SgStatement *first_do);
|
|
int doParallelLoopByHandler(int iplp, SgStatement *first, SgExpression *clause[], SgExpression *oldGroup, SgExpression *newGroup,SgExpression *oldGroup2, SgExpression *newGroup2);
|
|
int CreateParallelLoopByHandler_H2(SgExpression *init[], SgExpression *last[], SgExpression *step[], int nloop);
|
|
void MappingParallelLoop(SgStatement *stmt, int ilh );
|
|
int WhatInterface(SgStatement *stmt);
|
|
void CopyHeaderElems(SgStatement *st_after);
|
|
void ChangeLoopInitPar(SgStatement*stl,int nloop, SgExpression *do_init[],SgStatement*after);
|
|
int PositiveDoStep(SgExpression *step[], int i);
|
|
int Analyze_DO_steps(SgExpression *step[], int step_mask[],int ndo);
|
|
void CreateShadowGroupsForAccross(SgExpression *in_spec,SgExpression *out_spec,SgStatement * stmt,SgExpression *gleft,SgExpression *g,SgExpression *gright,int ag[],int all_steps,int step_mask[],SgExpression *tie_list);
|
|
int doRecurLengthArrays(SgExpression *shl, SgSymbol *ar, SgStatement *st, int rtype, int all_steps,int sign[]);
|
|
int RecurList (SgExpression *el, SgStatement *st, SgExpression *gref, int *ag,int gnum,int all_steps,int step_mask[],SgExpression *tie_list);
|
|
void DefineLoopNumberForNegStep(int step_mask[], int n,int loop_num[]);
|
|
void DefineStepSignForDimension( int step_mask[], int n, int loop_num[], int sign[] );
|
|
SgExpression *FindArrayRefWithLoopIndexes(SgSymbol *ar, SgStatement *st,SgExpression *tie_list);
|
|
void CreateShadowGroupsForAccrossNeg(SgExpression *in_spec,SgStatement * stmt,SgExpression *gleft,SgExpression *gright,int ag[],int all_positive_step,int loop_num[]);
|
|
int Recurrences(SgExpression *shl, SgExpression *lrec[], SgExpression *rrec[],int n);
|
|
int DepList (SgExpression *el, SgStatement *st, SgExpression *gref, int dep);
|
|
int doDepLengthArrays(SgExpression *shl, SgSymbol *ar, SgStatement *st, int dep);
|
|
void AcrossList(int ilh, int isOut, SgExpression *el, SgStatement *st, SgExpression *tie_clause);
|
|
SgExpression *doLowHighList(SgExpression *shl, SgSymbol *ar, SgStatement *st);
|
|
void ReceiveArray(SgExpression *spec_accr,SgStatement *parst);
|
|
void SendArray(SgExpression *spec_accr);
|
|
void ReductionList (SgExpression *el,SgExpression *gref, SgStatement *st, SgStatement *stmt1, SgStatement *stmt2, int ilh2);
|
|
void ReductionVarsStart (SgExpression *el);
|
|
void ReductionVarsWait (SgExpression *el);
|
|
void InsertReductions_H(SgExpression *red_op_list, int ilh);
|
|
int LocElemNumber(SgExpression *en);
|
|
int Reduction_Debug(SgStatement *stmt);
|
|
int TestReductionClause(SgExpression *e);
|
|
align *CopyAlignTreeNode(SgSymbol *ar);
|
|
void InOutAcross(SgExpression *e, SgExpression* e_spec[], SgStatement *stmt);
|
|
void InOutSpecification(SgExpression *ea, SgExpression* e_spec[]);
|
|
SgExpression *AxisList(SgStatement *stmt, SgExpression *tied_array_ref);
|
|
SgExpression *MappingList(SgStatement *stmt, SgExpression *aref);
|
|
SgExpression *isInTieList(SgSymbol *ar, SgExpression *tie_list);
|
|
SgExpression *FindArrayRef(SgSymbol *ar, SgStatement *st);
|
|
|
|
/* acc.cpp */
|
|
SgStatement *RegistrateDVMArray(SgSymbol *ar,int ireg,int inflag,int outflag);
|
|
void RegisterVariablesInRegion(SgExpression *evl, int intent, int irgn);
|
|
int TargetsList(SgExpression *tgs);
|
|
void ACC_ROUTINE_Directive(SgStatement *stmt);
|
|
SgStatement *ACC_REGION_Directive(SgStatement *stmt);
|
|
SgStatement *ACC_END_REGION_Directive(SgStatement *stmt);
|
|
SgStatement *ACC_DATA_REGION_Directive(SgStatement *stmt);
|
|
SgStatement *ACC_END_DATA_REGION_Directive(SgStatement *stmt);
|
|
SgStatement *ACC_DO_Directive(SgStatement *stmt);
|
|
SgStatement *ACC_Directive(SgStatement *stmt);
|
|
int isACCdirective(SgStatement *stmt);
|
|
void NewRegion(SgStatement *stmt, int n, int data_flag);
|
|
void TempVarACC(SgStatement * func );
|
|
SgSymbol* DerivedTypeGpuBaseSymbol(SgSymbol *stype,SgType *t);
|
|
void Gpu_ArrayHeader (SgSymbol *ar,int ind);
|
|
void TypeGpuMemory(SgType *t);
|
|
void DerivedTypeGpuMemory(SgType *t);
|
|
SgSymbol *baseGpuMemory(SgType *t);
|
|
SgSymbol* GpuHeaderSymbol(SgSymbol *ar);
|
|
SgExpression * GpuHeaderRef(SgSymbol *ar) ;
|
|
SgExpression * GpuHeaderRefWithInd(SgSymbol *ar,int i);
|
|
SgSymbol *baseGpuMemoryOfDerivedType(SgType *t);
|
|
void DeclareVarGPU(SgStatement *lstat, SgType *tlen);
|
|
void BlocksThreadsSymbols();
|
|
void AllocateGPUBases(SgStatement *stat);
|
|
void ACC_ParallelLoopEnd(SgStatement *pardo);
|
|
void ACC_CreateParallelLoop(int iplp,SgStatement *first_do,int nloop,SgStatement *par_dir,SgExpression *clause[],int interface);
|
|
SgStatement *doIfThenConstrForLoop_GPU(SgExpression *ref,SgStatement *endhost,SgStatement *dowhile);
|
|
SgSymbol *KernelSymbol(SgStatement *st_do);
|
|
void Blocks_Off_Symbol();
|
|
void InitializeACC();
|
|
void InitializeInFuncACC();
|
|
SgSymbol *GPUModuleSymb(SgStatement *global_st);
|
|
void CreateGPUModule();
|
|
char *filenameACC();
|
|
SgSymbol *CudaforSymb(SgStatement *global_st);
|
|
void InsertUseStatementForGpuModule();
|
|
SgStatement *CreateKernelProcedure(SgSymbol *skernel);
|
|
SgStatement *CopyBodyLoopToKernel(SgStatement *first_do);
|
|
SgType *Type_dim3();
|
|
void CudaVars();
|
|
SgExpression *CreateBlocksThreadsSpec(int size, SgSymbol *s_blocks,SgSymbol *s_threads,SgSymbol *s_stream,SgSymbol *s_shared_mem);
|
|
SgExpression *KernelCondition(SgSymbol *sind,SgSymbol *sblock,int level);
|
|
SgExpression *KernelConditionWithDoStep(SgStatement *stdo,SgSymbol *sblock, int level);
|
|
void KernelWorkSymbols();
|
|
SgSymbol *ArraySymbol(char *name,SgType *basetype, SgExpression *range,SgStatement *scope);
|
|
SgSymbol *ArraySymbol(const char *name, SgType *basetype, SgExpression *range, SgStatement *scope);
|
|
SgStatement *Assign_To_ibof(int rank);
|
|
SgExpression *ExpressionForIbof(int rank);
|
|
SgStatement *DoStmt(SgStatement *first_do,int i);
|
|
SgStatement *Assign_To_IndVar(SgStatement *dost, int il, int nloop,SgSymbol *sblock);
|
|
SgExpression *IbaseRef(SgSymbol *base, int ind);
|
|
void CreatePrivateAndUsesVarList();
|
|
SgExpression * AddToVarRefList( SgExpression *list, SgExpression *e);
|
|
SgExpression * AddListToList( SgExpression *list, SgExpression *el);
|
|
void CreateDvmArrayList();
|
|
void CreateRegionVarList();
|
|
void CreateArgumentList();
|
|
int KindOfIndexType();
|
|
void MakeDeclarationsForKernel(SgSymbol *red_count_symb, SgType *idxTypeInKernel);
|
|
void MakeDeclarationsForKernel_On_C(SgType *idxTypeInKernel);
|
|
SgSymbol *K_baseMemory(SgType *t);
|
|
char *ChangeFtoCuf(const char *fout_name);
|
|
char *ChangeFto_C_Cu(const char *fout_name);
|
|
char *ChangeFto_info_C(const char *fout_name);
|
|
char *ChangeFto_cpp(const char *fout_name);
|
|
void UpdateOnHost(SgExpression *el, SgStatement *stmt);
|
|
SgStatement *ACC_UPDATE_Directive(SgStatement *stmt);
|
|
void InsertReductions_GPU(SgExpression *red_op_list,SgStatement *do_while, int loop_ind);
|
|
SgSymbol *Var_Offset_Symbol(SgSymbol *var);
|
|
int MaxRedVarSize(SgExpression *red_op_list);
|
|
SgExpression *ThreadsGreedSize();
|
|
void InsertDoWhileForRedCount(SgStatement *cp);
|
|
void InsertDoWhileForRedCount_C(SgStatement *cp,SgSymbol *s_threads,SgSymbol *red_count_symb);
|
|
SgSymbol *RedCountSymbol(SgStatement *scope);
|
|
SgSymbol *OverallBlocksSymbol();
|
|
void AddBasesOfReductionVars();
|
|
void AddToRedVarList(SgExpression *ev,int i);
|
|
SgExpression *CreateRedOffsetVarList();
|
|
SgExpression *FindUsesInFormalArgumentList();
|
|
SgSymbol *RedOffsetSymbolInKernel(SgSymbol *s);
|
|
SgSymbol *RedBlockSymbolInKernel(SgSymbol *s,SgType *type);
|
|
void CreateReductionBlocks(SgStatement *stat,int nloop,SgExpression *red_op_list,SgSymbol *red_count_symb);
|
|
SgSymbol *IndVarInKernel(SgSymbol *s);
|
|
void ReductionBlockInKernel(SgStatement *stat,int nloop,SgSymbol *i_var,SgSymbol *j_var,SgExpression *ered, reduction_operation_list *rsl,SgSymbol *red_count_symb,int n);
|
|
void ReductionBlockInKernel_On_C_Cuda(SgStatement*, SgSymbol*, SgExpression*, reduction_operation_list*, SgIfStmt*, SgIfStmt*&, SgIfStmt*&, int&, bool withGridRed = false, bool across = false);
|
|
SgSymbol *SyncthreadsSymbol();
|
|
const char* RedFunctionInKernelC(const int num_red, const unsigned num_E, const unsigned num_IE);
|
|
SgStatement *RedOp_Assign(SgSymbol *i_var, SgSymbol *s_block, SgExpression *ered, SgSymbol *d, int k, SgExpression *ind_list);
|
|
SgExpression *RedVar_Block_Ref(SgSymbol *sblock, SgSymbol *sind);
|
|
SgExpression *RedVar_Block_2D_Ref(SgSymbol *sblock, SgSymbol *sind, SgExpression *redind);
|
|
SgExpression *RedArray_Block_Ref(SgSymbol *sblock, SgSymbol *sind, SgExpression *ind_list);
|
|
SgSymbol *RedOffsetSymbolInKernel_ToList(SgSymbol *s);
|
|
SgType *Type_For_Red_Loc(SgSymbol *redsym, SgSymbol *locsym, SgType *redtype, SgType *loctype);
|
|
SgType *TypeOfRedBlockSymbol(SgExpression *ered);
|
|
SgStatement * MakeStructDecl(SgSymbol *strc);
|
|
void TypeGpuMemoryForArray(SgType *t, int n);
|
|
SgSymbol*GpuBaseSymbolForLocArray(int n);
|
|
SgSymbol*K_GpuBaseSymbolForLocArray(int n);
|
|
SgSymbol *LocArrayBaseGpuMemory(SgType *t,int n);
|
|
SgSymbol *FormalLocationSymbol(SgSymbol *locvar, int i);
|
|
SgExpression *CreateFormalLocationList(SgSymbol *locvar, int numb);
|
|
void Do_Assign_For_Loc_Arrays();
|
|
SgSymbol *RedVarFieldSymb(SgSymbol *s_block);
|
|
SgExpression *RedLocVar_Block_Ref(SgSymbol *sblock, SgSymbol *sind, SgSymbol *d, SgExpression *field);
|
|
SgExpression *LocVarIndex(SgSymbol *sl, int i);
|
|
SgExpression *RedVarIndex(SgSymbol *sl, int i);
|
|
SgStatement *RedOp_If(SgSymbol *i_var, SgSymbol *s_block, SgExpression *ered, SgSymbol *d,int num);
|
|
SgExpression *ConditionForRedBlack(SgExpression *erb);
|
|
void AddFormalArg_For_LocArrays();
|
|
void AddActualArg_For_LocArrays();
|
|
SgExpression *CreateActualLocationList(SgSymbol *locvar, int numb);
|
|
int Create_New_File(char *file_name, SgFile *file, char *fout_name);
|
|
void UnparseTo_CufAndCu_Files(SgFile *f,FILE *fout_cuf, FILE *fout_C_cu, FILE *fout_info);
|
|
void UnparseForDynamicCompilation(FILE *fout_cpp);
|
|
void Create_C_extern_block();
|
|
void Create_info_block();
|
|
SgStatement *Create_C_Adapter_Function(SgSymbol *sadapter);
|
|
SgStatement *Create_C_Adapter_Function(SgSymbol *sadapter, int pos);
|
|
SgStatement *Create_C_Adapter_Function_For_Sequence(SgSymbol *sadapter,SgStatement *first_st);
|
|
void Prototypes();
|
|
void Typedef_Stmts(SgStatement *end_bl);
|
|
SgType *Cuda_Index_Type();
|
|
SgType *DvmhLoopRef_Type();
|
|
SgType *Dvmh_Type();
|
|
SgType * C_VoidType();
|
|
SgType * C_LongType();
|
|
SgType *C_PointerType(SgType *type);
|
|
SgType *C_ReferenceType(SgType *type);
|
|
SgSymbol *AdapterSymbol(SgStatement *st_do);
|
|
SgType *C_Derived_Type(SgSymbol *styp);
|
|
SgStatement *Create_Init_Cuda_Function();
|
|
SgStatement * makeSymbolDeclaration(SgSymbol *s);
|
|
SgStatement * makeSymbolDeclarationWithInit(SgSymbol *s,SgExpression *einit);
|
|
SgStatement * makeExternSymbolDeclaration(SgSymbol *s);
|
|
SgExpression * addDeclExpList(SgSymbol *s,SgExpression *el);
|
|
char *GpuHeaderName(SgSymbol *s) ;
|
|
SgExpression *ThreadsGridSize(SgSymbol *s_threads);
|
|
char *filename_short(SgStatement *st);
|
|
void ChangeAdapterName(SgSymbol *s);
|
|
SgSymbol *HostProcSymbol(SgStatement *st_do);
|
|
SgSymbol *IndirectFunctionSymbol(SgStatement *stmt, char *name);
|
|
void DeviceTypeConsts();
|
|
SgSymbol *DeviceTypeConst(int i);
|
|
char *ParallelLoopComment(int line);
|
|
char *SequenceComment(int line);
|
|
const char *CudaIndexTypeComment();
|
|
SgExpression *ArrayArgumentList();
|
|
SgExpression *BaseArgumentList();
|
|
void CudaBlockSize(SgExpression *cuda_block_list);
|
|
void CudaBlockSize(SgExpression *cuda_block_list,SgExpression *esize[]);
|
|
int ListElemNumber(SgExpression *list);
|
|
SgStatement *Create_Host_Across_Loop_Subroutine(SgSymbol *sHostProc);
|
|
SgStatement *Create_Host_Loop_Subroutine_Main(SgSymbol *sHostProc);
|
|
SgStatement *Create_Host_Loop_Subroutine(SgSymbol *sHostProc, int type);
|
|
char * BoundName(SgSymbol *s, int i, int isLower);
|
|
SgSymbol *DummyBoundSymbol(SgSymbol *rv, int i, int isLower, SgStatement *st_hedr);
|
|
SgExpression *CreateDummyBoundListOfArray(SgSymbol *ar, SgSymbol *new_ar, SgStatement *st_hedr);
|
|
SgExpression * DummyListForReductionArrays(SgStatement *st_hedr);
|
|
SgExpression *CreateBaseMemoryList();
|
|
SgExpression *ConstRef_F95(int ic);
|
|
SgExpression *DvmType_Ref(SgExpression *e);
|
|
int ParLoopRank();
|
|
void DeclareArrayCoefficients(SgStatement *after);
|
|
void ReplaceLoopBounds(SgStatement *first_do, int lrank,SgSymbol *s_low_bound, SgSymbol *s_high_bound, SgSymbol *s_step);
|
|
int NumberOfCoeffs(SgSymbol *sg);
|
|
void CreateStructuresForReductionInKernel();
|
|
void CompleteStructuresForReductionInKernel();
|
|
SgStatement *CreateLoopKernelProcedure(SgSymbol *skernel);
|
|
int OneSteps(int nl,SgStatement *nest);
|
|
int IConstStep(SgStatement *stdo);
|
|
SgExpression *blocksRef(SgSymbol *sblock, int ind);
|
|
SgType *CudaIndexType();
|
|
int KindOfCudaIndexType();
|
|
SgType *CudaOffsetType();
|
|
void SymbolOfCudaOffsetType();
|
|
void KernelBloksSymbol();
|
|
int IConstStep(SgStatement *stdo);
|
|
SgSymbol *RedGridSymbolInKernel(SgSymbol *s,int n,SgExpression *dimSizeArgs,SgExpression *lowBoundArgs,int is_red_or_loc_var);
|
|
SgStatement *CopyBodyLoopForCudaKernel(SgStatement *first_do, int nloop);
|
|
SgStatement *CreateIfForRedBlack(SgStatement *loop_body, int nloop);
|
|
SgExpression *CreateKernelDummyList(SgSymbol *s_red_count_k, SgType *idxTypeInKernel);
|
|
SgExpression* CreateRedDummyList();
|
|
SgExpression* CreateRedDummyList(SgType* indeTypeInKernel);
|
|
SgExpression *CreateArrayDummyList();
|
|
SgExpression* CreateArrayDummyList(SgType* indexType);
|
|
SgSymbol* KernelDummyVar(SgSymbol* s);
|
|
SgExpression *CoefficientList();
|
|
SgExpression *ArrayRefList();
|
|
SgExpression *UsedValueRef(SgSymbol *susg,SgSymbol *s);
|
|
SgType *C_Type(SgType *type);
|
|
void UsesInPrivateArrayDeclarations(SgExpression *privates);
|
|
SgExpression *UsesList(SgStatement *first,SgStatement *last);
|
|
void RefInExpr(SgExpression *e, int mode);
|
|
SgStatement *InnerMostLoop(SgStatement *dost,int nloop);
|
|
int isPrivate(SgSymbol *s);
|
|
int isReductionVar(SgSymbol *s);
|
|
void CreateStructuresForReductions(SgExpression *red_op_list);
|
|
SgExpression *isInUsesList(SgSymbol *s);
|
|
SgExpression *isInUsesListByChar(const char *symb);
|
|
//int isIntrinsicFunction(SgSymbol *sf);
|
|
//int IntrinsicInd(SgSymbol *sf);
|
|
|
|
void Call(SgSymbol *s, SgExpression *e);
|
|
void Argument(SgExpression *e, int i, SgSymbol *s);
|
|
SgSymbol *FunctionResultVar(SgStatement *func);
|
|
int isParDoIndexVar(SgSymbol *s);
|
|
SgSymbol *IntentConst(int intent);
|
|
int SectionBounds(SgExpression *are);
|
|
SgExpression *SectionBoundsList(SgExpression *are);
|
|
char *RegionComment(int line);
|
|
char *EndRegionComment(int line);
|
|
//SgExpression *DevicesExpr(int targets[]);
|
|
SgExpression *DevicesExpr(int targets);
|
|
SgStatement *ACC_ACTUAL_Directive(SgStatement *stmt);
|
|
SgStatement *ACC_GET_ACTUAL_Directive(SgStatement *stmt);
|
|
void DoPrivateList(SgStatement *par);
|
|
int AnalyzeRegion(SgStatement *reg_dir);
|
|
void MarkArraySymbol(SgSymbol *ar,int mode);
|
|
void RegisterUses(int irgn);
|
|
void RegisterDvmArrays(int irgn);
|
|
int IntentMode(SgSymbol *s);
|
|
int WhatMode(int mode,int mode_new);
|
|
void MarkAsRegistered(SgSymbol *s);
|
|
void HandlerTypeConsts();
|
|
SgSymbol *HandlerTypeConst(int i);
|
|
SgSymbol *RegionRegimConst(int regim);
|
|
int IntStepForHostHandler(SgExpression *dostep );
|
|
SgExpression *IsRedBlack(int nloop);
|
|
void FlagStatement(SgStatement *st);
|
|
SgStatement *ACC_CreateStatementGroup(SgStatement *first_st);
|
|
SgStatement *CopyBlockToKernel(SgStatement *first_st,SgStatement *last_st);
|
|
SgSymbol *isSymbolWithSameNameInTable(SgSymbol *first_in,char *name);
|
|
void ACC_RenewParLoopHeaderVars(SgStatement *first_do, int nloop);
|
|
void RefIn_LoopHeaderExpr(SgExpression *e,SgStatement *dost);
|
|
SgSymbol *RemoteAccessBufferInKernel(SgSymbol *ar,int rank);
|
|
SgSymbol *isSameNameBuffer(char *name,SgExpression *rml);
|
|
SgExpression *RemoteAccessHeaderList();
|
|
void CreateRemoteAccessBuffersUp();
|
|
void CreateRemoteAccessBuffers(SgExpression *rml, int pl_flag);
|
|
coeffs *BufferCoeffs(SgSymbol *sbuf,SgSymbol *ar);
|
|
void AddRemoteAccessBufferList_ToArrayList();
|
|
SgExpression * ExpressionListsUnion(SgExpression *list, SgExpression *alist);
|
|
SgExpression *isInExprList(SgExpression *e,SgExpression *list);
|
|
symb_list *isInSymbList(SgSymbol *s, symb_list *slist);
|
|
symb_list *SymbolListsUnion(symb_list *slist1, symb_list *slist2);
|
|
void UnregisterVariables(int begin_block);
|
|
int isDestroyable(SgSymbol *s);
|
|
int isLocal(SgSymbol *s);
|
|
//void InsertDestroyBlock(SgStatement *st);
|
|
void ACC_UnregisterDvmBuffers();
|
|
void ACC_RegisterDvmBuffer(SgExpression *bufref, int buffer_rank);
|
|
SgSymbol *isSameNameShared(char *name);
|
|
void Doublet(SgExpression *e,SgSymbol *ar,int i, SgExpression *einit[],SgExpression *elast[]);
|
|
void ACC_StoreLowerBoundsOfDvmBuffer(SgSymbol *s, SgExpression *dim[], int dim_num[], int rank, int ibuf, SgStatement *stmt);
|
|
void ACC_Before_Loadrb(SgExpression *bufref);
|
|
void ACC_Region_After_Waitrb(SgExpression *bufref);
|
|
SgExpression *BufferLowerBound(SgExpression *ei);
|
|
SgExpression *DoStart(SgSymbol *dovar);
|
|
SgExpression *ReplaceIndexRefByLoopLowerBound(SgExpression *e,SgSymbol *dovar,SgExpression *estart);
|
|
SgSymbol *DummyReplicatedArray(SgSymbol *ar,int rank);
|
|
void doStatementsToPerformByHandler(int ilh, SgSymbol *adapter_symb, SgSymbol *hostproc_symb,int is_parloop,int interface);
|
|
int CreateLoopForSequence(SgStatement *first);
|
|
void ACC_ReductionVarsAreActual();
|
|
SgExpression *DoReductionOperationList(SgStatement *par);
|
|
SgStatement *Create_Empty_Stat();
|
|
void DoHeadersForNonDvmArrays();
|
|
int HeaderForNonDvmArray(SgSymbol *s, SgStatement *stat);
|
|
SgExpression *HeaderForArrayInParallelDir(SgSymbol *ar, SgStatement *st, int err_flag);
|
|
SgSymbol *CreateReplicatedArray(SgSymbol *s);
|
|
void StoreLowerBoundsOfNonDvmArray(SgSymbol *ar);
|
|
void DeleteNonDvmArrays();
|
|
int isIn_acc_array_list(SgSymbol *s);
|
|
void TransferBlockToHostSubroutine(SgStatement *first_st,SgStatement *last_st,SgStatement *st_end);
|
|
SgStatement *Create_Host_Sequence_Subroutine(SgSymbol *sHostProc,SgStatement *first_st,SgStatement *last_st);
|
|
void MarkAsInsertedStatement(SgStatement *st);
|
|
void TestDvmObjectAssign(SgStatement *st);
|
|
void ReplaceAssignByIfForRegion(SgStatement *stmt);
|
|
SgSymbol *indexArraySymbol(SgSymbol *ar);
|
|
int MaxArrayRank();
|
|
SgSymbol *LocalPartSymbolInKernel(SgSymbol *ar);
|
|
SgSymbol *LocalPartArray(SgSymbol *ar);
|
|
SgExpression *LocalityConditionInKernel(SgSymbol *ar, SgExpression *ei[]);
|
|
void MakeDeclarationsInKernel_ForSequence(SgType*);
|
|
SgExpression *CreateKernelDummyList_ForSequence(SgType *idxTypeInKernel);
|
|
SgExpression *CreateLocalPartList();
|
|
SgExpression *CreateLocalPartList(SgType *indeTypeInKernel);
|
|
int isByValue(SgSymbol *s);
|
|
int isInByValueList(SgSymbol *s);
|
|
SgSymbol *GpuScalarAdrSymbolInAdapter(SgSymbol *s, SgStatement *st_hedr);
|
|
int CorrectIntent(SgExpression *e);
|
|
char *TestAndCorrectName(const char *name);
|
|
char *TestAndCorrectName(char *name);
|
|
SgSymbol *isSameNameInLoop(char *name);
|
|
SgSymbol *isSamePrivateVar(char *name);
|
|
SgSymbol *isSameUsedVar(char *name);
|
|
SgSymbol *isSameRedVar(char *name);
|
|
SgSymbol *isSameArray(char *name);
|
|
SgSymbol *isSameIndexVar(char *name);
|
|
SgType * C_LongLongType();
|
|
SgType * C_DvmType();
|
|
SgType * C_CudaIndexType();
|
|
char *OpenMpComment_HandlerType(int idvm);
|
|
char *OpenMpComment_InitFlags(int idvm);
|
|
void SymbolOfCudaIndexType();
|
|
SgType * C_BaseDvmType();
|
|
SgStatement *CreateLoopKernelFunction_On_C (SgSymbol *skernel);
|
|
SgStatement *Create_C_Kernel_Function(SgSymbol *sF);
|
|
void CreateBlockForCalculationThreadLoopVariables();
|
|
SgStatement *FunctionCallStatement(SgSymbol *sf );
|
|
SgStatement *AssignStatement(SgExpression *le, SgExpression *re);
|
|
SgStatement *Declaration_Statement(SgSymbol *s );
|
|
char *LoopKernelComment();
|
|
char *SequenceKernelComment(int lineno);
|
|
char *Cuda_LoopHandlerComment();
|
|
char *Cuda_SequenceHandlerComment(int lineno);
|
|
char *Host_LoopHandlerComment();
|
|
char *Host_SequenceHandlerComment(int lineno);
|
|
char *Indirect_ProcedureComment(int lineno);
|
|
void SymbolChange_InBlock(SgSymbol *snew,SgSymbol *sold, SgStatement *first_st,SgStatement *last_st);
|
|
void SymbolChange_InExpr(SgSymbol *snew, SgSymbol *sold, SgExpression *e);
|
|
//void ACC_ShadowCompute(SgExpression *shadow_compute_list, SgStatement *st_shcmp);
|
|
int isOutArray(SgSymbol *s) ;
|
|
void doStatementsForShadowCompute(int ilh, int interface);
|
|
SgSymbol *doDeviceNumVar(SgStatement *st_hedr, SgStatement *st_exec, SgSymbol *s_dev_num,SgSymbol *s_loop_ref);
|
|
char *CommentLine(const char *txt);
|
|
int WithAcrossClause();
|
|
SgExpression *CreateUsesDummyList();
|
|
SgExpression *ThreadIdxRefExpr(char *xyz);
|
|
SgExpression *ThreadIdxRefExpr(const char *xyz);
|
|
SgExpression *BlockIdxRefExpr(char *xyz);
|
|
SgExpression *BlockIdxRefExpr(const char *xyz);
|
|
SgStatement * CreateKernel_ForSequence(SgSymbol *kernel_symb, SgStatement *first_st, SgStatement *last_st, SgType *idxTypeInKernel);
|
|
SgSymbol *KernelDummyLocalPart(SgSymbol *s);
|
|
SgSymbol *KernelDummyPointerVar(SgSymbol *s);
|
|
SgStatement *CreateLoopKernel(SgSymbol *skernel, SgType *idxTypeInKernel);
|
|
SgStatement *CreateLoopKernel(SgSymbol *skernel, AnalyzeReturnGpuO1 &infoGpuO1, SgType *idxTypeInKernel);
|
|
char * DimSizeName(SgSymbol *s,int i);
|
|
SgExpression *MallocExpr(SgSymbol *var,SgExpression *eldim);
|
|
SgSymbol *FormalDimSizeSymbol(SgSymbol *var, int i);
|
|
SgSymbol *FormalLowBoundSymbol(SgSymbol *var, int i);
|
|
SgExpression *CreateFormalDimSizeList(SgSymbol *var);
|
|
SgExpression *CreateFormalLowBoundList(SgSymbol *var);
|
|
SgExpression * RangeOfRedArray(SgSymbol *s, SgExpression *lowBound, SgExpression *dimSize, int i);
|
|
void ArrayTypeForRedVariableInKernel(SgSymbol *s, SgType *type, SgExpression *dimSizeArgs, SgExpression *lowBoundArgs);
|
|
SgSymbol *RedInitValSymbolInKernel(SgSymbol *s, SgExpression *dimSizeArgs, SgExpression *lowBoundArgs);
|
|
SgSymbol *InitValSymbolForRedInAdapter(SgSymbol *s, SgStatement *st_hedr);
|
|
SgSymbol *IndexSymbolForRedVarInKernel(int i);
|
|
SgExpression *RedVarUpperBound(SgExpression *el,int i);
|
|
SgExpression *CreateIndexVarList(int N);
|
|
SgStatement *doLoopNestForReductionArray(reduction_operation_list *rl, SgStatement *ass);
|
|
SgSymbol *IndexLoopVar(int i);
|
|
SgExpression *SubscriptListOfRedArray(SgSymbol *ar);
|
|
SgSymbol *RedVariableSymbolInKernel(SgSymbol *s, SgExpression *dimSizeArgs, SgExpression *lowBoundArgs);
|
|
SgExpression *DimSizeListOfReductionArrays();
|
|
SgExpression *isConstantBound(SgSymbol *rv, int i, int isLower);
|
|
SgExpression *CreateBoundListOfArray(SgSymbol *ar);
|
|
SgExpression * BoundListOfReductionArrays();
|
|
SgStatement * makeSymbolDeclaration_T(SgStatement *st_hedr);
|
|
void CreateComplexTypeSymbols(SgStatement *st_bl);
|
|
void SaveLineNumbers(SgStatement *stat_copy);
|
|
SgSymbol *SymbolInKernel(SgSymbol *s);
|
|
SgExpression *ToInt(SgExpression *e);
|
|
void ParallelOnList(SgStatement *par);
|
|
SgExpression *ACC_GroupRef(int ind);
|
|
SgExpression *dim3FunctionCall(int i);
|
|
SgType *CudaOffsetTypeRef_Type();
|
|
int IsInLabelList(SgLabel *lab, stmt_list *labeled_list);
|
|
void ReplaceExitCycleGoto(SgStatement *block, SgStatement *stk);
|
|
int IsParDoLabel(SgLabel *lab, int pl_rank);
|
|
int isInLoop(SgStatement *stmt);
|
|
void ReplaceCaseStatement(SgStatement *first);
|
|
void FormatAndDataStatementExport(SgStatement *par_dir, SgStatement *first_do);
|
|
void AddExternStmtToBlock_C();
|
|
void GenerateStmtsForInfoFile();
|
|
char *Up_regs_Symbol_Name(SgSymbol *s_regs);
|
|
SgStatement *AssignBlocksSElement(int i,int pl_rank, SgSymbol *s_blocksS,SgSymbol *s_idxL,SgSymbol *s_idxH,SgSymbol *s_step,SgSymbol *s_threads);
|
|
char *IncludeComment(const char *txt);
|
|
char *DefineComment(char *txt);
|
|
void TypeSymbols(SgStatement *end_bl);
|
|
void GenerateEndIfDir();
|
|
void GenerateDeclarationDir();
|
|
SgStatement *Assign_To_cur_blocks(int i, int nloop);
|
|
SgStatement *Assign_To_rest_blocks(int i);
|
|
SgStatement *Assign_To_IndVar2(SgStatement *dost, int i, int nloop);
|
|
SgExpression *KernelCondition2(SgStatement *dost, int level);
|
|
void InsertAssignForReduction(SgStatement *st_where,SgSymbol *s_num_of_red_blocks,SgSymbol *s_fill_flag,SgSymbol *s_overallBlocks, SgSymbol *s_threads);
|
|
void InsertPrepareReductionCalls(SgStatement *st_where,SgSymbol *s_loop_ref,SgSymbol *s_num_of_red_blocks,SgSymbol *s_fill_flag,SgSymbol *s_red_num);
|
|
void InsertFinishReductionCalls(SgStatement *st_where,SgSymbol *s_loop_ref,SgSymbol *s_red_num);
|
|
SgStatement *IfForHeader(SgSymbol *s_restBlocks, SgSymbol *s_blocks, SgSymbol *s_max_blocks);
|
|
int testLabelUse(SgLabel *lb, int pl_rank, SgStatement *stmt);
|
|
SgExpression * LinearIndex(int ind, int L);
|
|
int TestGroupStatement(SgStatement *first,SgStatement *last);
|
|
int TestOneGroupStatement(SgStatement *stmt);
|
|
void DeclareUsedVars();
|
|
void DeclareInternalPrivateVars();
|
|
void DeclarePrivateVars();
|
|
void DeclareArrayBases();
|
|
void DeclareArrayCoeffsInKernel(SgType*);
|
|
void DeclareLocalPartVars();
|
|
void DeclareLocalPartVars(SgType*);
|
|
void DeclareDummyArgumentsForReductions(SgSymbol *red_count_symb, SgType*);
|
|
int isPrivateInRegion(SgSymbol *s);
|
|
void DeclareDoVars();
|
|
int is_acc_array(SgSymbol *s);
|
|
SgExpression *CreateArrayAdrList(SgSymbol *header_symb, SgStatement *st_host);
|
|
char *Header_DummyArgName(SgSymbol *s);
|
|
SgExpression *Dimension(SgSymbol *hs, int i, int rank);
|
|
SgSymbol *DummyDvmHeaderSymbol(SgSymbol *ar, SgStatement *st_hedr);
|
|
SgSymbol *DummyDvmArraySymbol(SgSymbol *ar,SgSymbol *header_symb);
|
|
SgSymbol *DummyDvmBufferSymbol(SgSymbol *ar, SgSymbol *header_symb);
|
|
SgExpression *ElementOfAddrArgumentList(SgSymbol *s);
|
|
SgExpression *AddrArgumentList();
|
|
void CompareReductionAndPrivateList();
|
|
void TestPrivateList();
|
|
void doNotForCuda();
|
|
char * DevicesString(int targets);
|
|
int GeneratedForCuda();
|
|
void RefInControlList(SgExpression *eoc[],int n);
|
|
void RefInControlList_Inquire(SgExpression *eoc[],int n);
|
|
void RefInIOList(SgExpression *iol, int mode);
|
|
void RefInImplicitLoop(SgExpression *eim, int mode);
|
|
SgSymbol *dvm000SymbolForHost(int host_dvm, SgStatement *hedr);
|
|
SgExpression *Red_grid_index(SgSymbol *sind);
|
|
SgExpression *BlockDimsProduct();
|
|
SgExpression *LowerShiftForArrays (SgSymbol *ar, int i, int type);
|
|
SgExpression *UpperShiftForArrays (SgSymbol *ar, int i);
|
|
SgExpression *coefProd(int i, SgExpression *ec);
|
|
SgExpression *LinearFormForRedArray (SgSymbol *ar, SgExpression *el, reduction_operation_list *rsl);
|
|
void CreateCalledFunctionDeclarations(SgStatement *st_hedr);
|
|
void CreateUseStatementsForCalledProcedures(SgStatement *st_hedr);
|
|
void CreateUseStatementsForDerivedTypes(SgStatement *st_hedr);
|
|
void CreateUseStatements(SgStatement *st_hedr);
|
|
SgStatement *CreateHostProcedure(SgSymbol *sHostProc);
|
|
void DeclareCalledFunctions();
|
|
int isForCudaRegion();
|
|
SgSymbol *CudaIndexConst();
|
|
char *CalledProcedureComment(const char *txt, SgSymbol *symb);
|
|
SgSymbol *KernelDummyArray(SgSymbol *s);
|
|
void ConstantSubstitutionInTypeSpec(SgExpression *e);
|
|
int TestLocal(SgExpression *list);
|
|
void EnterDataRegionForLocalVariables(SgStatement *st, SgStatement *first_exec, int begin_block);
|
|
void EnterDataRegionForAllocated(SgStatement *stmt);
|
|
void EnterDataRegion(SgExpression *ale,SgStatement *stmt);
|
|
void EnterDataRegionForVariablesInMainProgram(SgStatement *st);
|
|
void ExitDataRegionForVariablesInMainProgram(SgStatement *st);
|
|
void ExitDataRegion(SgExpression *ale,SgStatement *stmt);
|
|
int ExitDataRegionForAllocated(SgStatement *st,int begin_block);
|
|
void ExitDataRegionForLocalVariables(SgStatement *st, int is);
|
|
void DeclareDataRegionSaveVariables(SgStatement *lstat, SgType *tlen);
|
|
SgSymbol *DataRegionVar(SgSymbol *symb);
|
|
void ExtractCopy(SgExpression *elist);
|
|
void CleanAllocatedList();
|
|
SgStatement *CreateIndirectDistributionProcedure(SgSymbol *sProc,symb_list *paramList,symb_list *dummy_index_list,SgExpression *derived_elem_list,int flag);
|
|
SgExpression *FirstArrayElementSubscriptsForHandler(SgSymbol *ar);
|
|
SgSymbol *HeaderSymbolForHandler(SgSymbol *ar);
|
|
void TestRoutineAttribute(SgSymbol *s, SgStatement *routine_interface);
|
|
int LookForRoutineDir(SgStatement *interfaceFunc);
|
|
SgStatement *Interface(SgSymbol *s);
|
|
|
|
/* acc_analyzer.cpp */
|
|
//void Private_Vars_Analyzer(SgStatement *firstSt, SgStatement *lastSt);
|
|
//void Private_Vars_Function_Analyzer(SgStatement* start);
|
|
void Private_Vars_Project_Analyzer();
|
|
void TieList(SgStatement *par);
|
|
symb_list *isNameInSymbList(SgSymbol *s, symb_list *s_list);
|
|
SgSymbol *KernelDummyHeader(SgSymbol *s, SgType *indexTypeInKernel);
|
|
|
|
/* hpf.cpp */
|
|
int SearchDistArrayRef(SgExpression *e, SgStatement *stmt);
|
|
void BufferDistArrayRef(SgExpression *e, SgStatement *stmt);
|
|
int IndependentLoop_Debug(SgStatement *stmt);
|
|
int IndependentLoop(SgStatement *stmt);
|
|
void SkipIndepLoopNest(SgStatement *stmt);
|
|
SgExpression *ConnectNewList(SgExpression *el1, SgExpression *el2);
|
|
void IEXLoopAnalyse(SgStatement *func);
|
|
void IEXLoopBegin(SgStatement *st);
|
|
void INDLoopBegin();
|
|
int doAlignIterationIND();
|
|
void ReductionListIND1();
|
|
void ReductionListIND2(SgExpression *gref);
|
|
void ReductionListIND_Err();
|
|
void OffDoVarsOfNest(SgStatement *end_stmt);
|
|
void IND_UsedDistArrayRef(SgExpression *e, SgStatement *st);
|
|
SgExpression *IND_ModifiedDistArrayRef(SgExpression *e, SgStatement *st);
|
|
void RemoteVariableListIND();
|
|
void INDReductionDebug();
|
|
int AxisNumOfDoVarInExpr (SgExpression *e, SgSymbol *dovar_ident[], int ni, SgExpression **eref, int use[], int *pINuse, SgStatement *st);
|
|
int isNewVar(SgSymbol *s);
|
|
int isINDtarget(SgExpression *re);
|
|
IND_ref_list *isInINDrefList(SgExpression *re);
|
|
SgExpression *INDBufferHeaderNplus1(IND_ref_list *rme, SgSymbol *ar, int ni, int ihead);
|
|
void IND_DistArrayRef(SgExpression *e, SgStatement *st, IND_ref_list *el);
|
|
void BufferHeaderCopy(SgSymbol *b, int ibuf, int n, IND_ref_list *el);
|
|
void ArrayHeaderCopy(int n, IND_ref_list *el);
|
|
void InitInquiryVar(int iq);
|
|
int CompareIfReduction(SgExpression *e1, SgExpression *e2);
|
|
int ReductionFuncNumber(SgExpression *e,int expr_ind);
|
|
int IsInNewList(SgExpression *pos_red, SgExpression *newl);
|
|
int IsInReductionList(SgExpression *pos_red);
|
|
int IsReductionVariable(SgExpression *pos_red, SgExpression *newl);
|
|
int IsError(SgExpression *pos_red, SgExpression *newl, int variant);
|
|
int FindInExpr(SgExpression *red, SgExpression *expr);
|
|
int IsReductionOp(SgStatement *st, SgExpression *newl);
|
|
int IsLIFReductionOp(SgStatement *st, SgExpression *newl);
|
|
|
|
/* stmt.cpp */
|
|
void doAssignStmt (SgExpression *re);
|
|
void doAssignTo (SgExpression *le, SgExpression *re);
|
|
void doAssignTo_After (SgExpression *le, SgExpression *re);
|
|
SgExpression * LeftPart_AssignStmt (SgExpression *re);
|
|
void doAssignStmtBefore (SgExpression *re, SgStatement *current);
|
|
void doAssignStmtAfter (SgExpression *re);
|
|
void Extract_Stmt(SgStatement *st);
|
|
void InsertNewStatementBefore (SgStatement *stat, SgStatement *current);
|
|
void InsertNewStatementAfter (SgStatement *stat, SgStatement *current, SgStatement *cp);
|
|
void ReplaceByIfStmt(SgStatement *stmt);
|
|
void ReplaceAssignByIf(SgStatement *stmt);
|
|
int isDoEndStmt(SgStatement *stmt);
|
|
void ReplaceDoNestLabel(SgStatement *last_st, SgLabel *new_lab);
|
|
void ReplaceDoNestLabel_Above(SgStatement *last_st, SgStatement *from_st,SgLabel *new_lab);
|
|
void ReplaceParDoNestLabel(SgStatement *last_st, SgStatement *from_st,SgLabel *new_lab);
|
|
void ReplaceContext(SgStatement *stmt);
|
|
void LogIf_to_IfThen(SgStatement *stmt);
|
|
SgStatement *ReplaceDoLabel(SgStatement *last_st, SgLabel *new_lab);
|
|
SgStatement *ReplaceLabelOfDoStmt(SgStatement *first,SgStatement *last_st, SgLabel *new_lab);
|
|
int isParallelLoopEndStmt(SgStatement *stmt,SgStatement *first_do);
|
|
SgStatement * lastStmtOfDo(SgStatement *stdo);
|
|
SgStatement *ContinueWithLabel(SgLabel *lab);
|
|
SgStatement *doIfThenConstrForRedis(SgExpression *headref, SgStatement *stmt, int index);
|
|
SgStatement *doIfThenConstrForRealign(int iamv, SgStatement *stmt, int cond);
|
|
SgStatement *doIfThenConstrForRealign(SgExpression *headref, SgStatement *stmt, int cond);
|
|
SgStatement *doIfThenConstrForPrefetch(SgStatement *stmt);
|
|
SgStatement *doIfThenConstrForRemAcc(SgSymbol *group, SgStatement *stmt);
|
|
void doIfForReduction(SgExpression *redgref, int deb);
|
|
void doLogIfForHeap(SgSymbol *heap, int size);
|
|
SgStatement *doIfThenConstrForIND(SgExpression *e, int cnst, int cond, int has_else, SgStatement *stmt, SgStatement *cp);
|
|
SgStatement *PrintStat(SgExpression *item);
|
|
void doIfForDelete(SgSymbol *sg, SgStatement *stmt);
|
|
SgStatement *doIfForFileVariables(SgSymbol *s);
|
|
SgStatement *doIfForCreateReduction(SgSymbol *gs, int i, int flag);
|
|
void doIfForConsistent(SgExpression *gref);
|
|
SgStatement *doIfThenConstrWithArElem(SgSymbol *ar, int ind);
|
|
SgStatement *ReplaceStmt_By_IfThenConstr(SgStatement *stmt,SgExpression *econd);
|
|
void TransferStmtAfter(SgStatement *stmt, SgStatement *where);
|
|
SgStatement *CreateIfThenConstr(SgExpression *cond, SgStatement *st);
|
|
void TransferBlockIntoIfConstr(SgStatement *ifst, SgStatement *stmt1, SgStatement *stmt2);
|
|
void TransferStatementGroup(SgStatement *first_st, SgStatement *last_st, SgStatement *st_end);
|
|
void ReplaceArithIF(stmt_list *gol);
|
|
void ReplaceComputedGoTo(stmt_list *gol);
|
|
void UnparseFunctionsOfFile(SgFile *f,FILE *fout);
|
|
int isDoEndStmt_f90(SgStatement *stmt);
|
|
SgLabel * LabelOfDoStmt(SgStatement *stmt);
|
|
SgStatement * lastStmtOfIf(SgStatement *stif);
|
|
void doCallAfter(SgStatement *call);
|
|
void doCallStmt(SgStatement *call);
|
|
SgStatement *ReplaceBy_DO_ENDDO(SgStatement *first,SgStatement *last_st);
|
|
SgStatement *IncludeLine(char *str);
|
|
SgStatement *PreprocessorDirective(char *str);
|
|
SgStatement *PreprocessorDirective(const char *str);
|
|
SgStatement *ifdef_dir(char *str);
|
|
SgStatement *ifndef_dir(char *str);
|
|
SgStatement *endif_dir();
|
|
SgStatement *else_dir();
|
|
SgExpression *CalculateArrayBound(SgExpression *edim,SgSymbol *ar, int flag_private);
|
|
void ReplaceArrayBoundsInDeclaration(SgExpression *e);
|
|
int ExplicitShape(SgExpression *eShape);
|
|
SgSymbol *ArraySymbolInHostHandler(SgSymbol *ar,SgStatement *scope);
|
|
SgSymbol *DeclareSymbolInHostHandler(SgSymbol *var, SgStatement *st_hedr, SgSymbol *loc_var);
|
|
char *RegisterConstName();
|
|
int TightlyNestedLoops_Test(SgStatement *prev_do, SgStatement *dost);
|
|
SgStatement *NextExecStat(SgStatement *st);
|
|
int isExecutableDVMHdirective(SgStatement *stmt);
|
|
int isDvmSpecification (SgStatement * st);
|
|
SgStatement * lastStmtOf(SgStatement *st);
|
|
SgStatement *lastStmtOfFile(SgFile *f);
|
|
void DeleteSaveAttribute(SgStatement *stmt);
|
|
SgStatement *doIfThenConstrForOnDir(SgStatement *stmt);
|
|
SgStatement *doIfForOnDir(SgStatement *stmt, SgLabel *t_lab);
|
|
SgStatement *ReplaceOnByIf(SgStatement *stmt,SgStatement *end_stmt);
|
|
SgStatement *TestEndOn(SgStatement *stmt);
|
|
void doLogIfForAllocated(SgExpression *objref, SgStatement *stmt);
|
|
void doLogIfForIOstat(SgSymbol *s, SgExpression *espec, SgStatement *stmt);
|
|
SgStatement *doIfThenForDataRegion(SgSymbol *symb, SgStatement *stmt, SgStatement *call);
|
|
void doIfIOSTAT(SgExpression *eiostat, SgStatement *stmt, SgStatement *go_stmt);
|
|
void TransferLabelFromTo( SgStatement *from_st, SgStatement *to_st);
|
|
|
|
/* funcall.cpp */
|
|
void Get_AM();
|
|
void GetVM();
|
|
SgExpression *GetAM();
|
|
SgExpression *Reconf(SgExpression *size_array, int rank, int sign);
|
|
int BeginBlock ();
|
|
void BeginBlock_H();
|
|
void EndBlock (SgStatement *st);
|
|
SgStatement *EndBlock_H(SgStatement *st);
|
|
SgExpression * EndBl (int n);
|
|
void RTLInit ();
|
|
void RTLExit (SgStatement *st);
|
|
SgExpression * CreateAMView(SgExpression *size_array, int rank, int sign);
|
|
SgExpression * DistributeAM (SgExpression *amv, SgExpression *psref,int count, int idisars, int iparam);
|
|
SgStatement *RedistributeAM(SgExpression *ref, SgExpression *psref, int count, int idisars,int sign);
|
|
SgExpression *CreateDistArray(SgSymbol *das, SgExpression *array_header, SgExpression *size_array, int rank, int ileft, int iright, int sign, int re_sign) ;
|
|
SgExpression *AlignArray (SgExpression *array_handle,
|
|
SgExpression *template_handle,
|
|
int iaxis,
|
|
int icoeff,
|
|
int iconst);
|
|
SgStatement *RealignArr (SgExpression *array_header,
|
|
SgExpression *pattern_ref,
|
|
int iaxis,
|
|
int icoeff,
|
|
int iconst,
|
|
int new_sign );
|
|
SgStatement *StartBound(SgExpression *gref);
|
|
SgStatement *WaitBound(SgExpression *gref);
|
|
SgStatement *SendBound(SgExpression *gref);
|
|
SgStatement *ReceiveBound(SgExpression *gref);
|
|
SgExpression *DelBG(SgExpression *gref);
|
|
SgStatement *BoundFirst(int iloopref,SgExpression *gref);
|
|
SgStatement *BoundLast (int iloopref, SgExpression *gref);
|
|
SgExpression *CreateReductionGroup();
|
|
SgExpression *ReductionVar(int num_red, SgExpression *red_array, int ntype, int length, SgExpression *loc_array, int loc_length, int sign);
|
|
SgStatement *LoopReduction(int ilh, int num_red, SgExpression *red_array, int ntype, SgExpression *length, SgExpression *loc_array, SgExpression *loc_length);
|
|
SgStatement *InsertRedVar(SgExpression *gref, int irv, int iplp);
|
|
SgExpression *SaveRedVars(SgExpression *gref);
|
|
SgStatement *StartRed(SgExpression *gref);
|
|
SgStatement *WaitRed (SgExpression *gref);
|
|
SgExpression *DelRG(SgExpression *gref);
|
|
SgStatement * BeginParLoop (int iloopref, SgExpression *header, int rank, int iaxis, int nr, int iinp, int iout);
|
|
SgExpression *CreateParLoop(int rank);
|
|
SgStatement *EndParLoop(int iloopref);
|
|
SgExpression *doLoop(int iloopref);
|
|
SgExpression *GetAddres(SgSymbol * var);
|
|
SgExpression *GetAddresMem(SgExpression * em);
|
|
SgStatement *Addres(SgExpression * em);
|
|
SgExpression *GetAddresDVM(SgExpression * em);
|
|
void CreateBoundGroup(SgExpression *gref);
|
|
SgStatement *InsertArrayBound(SgExpression *gref, SgExpression *head, int ileft, int iright, int corner) ;
|
|
SgExpression *TestIOProcessor();
|
|
SgExpression *GetRank(int iref);
|
|
SgExpression *GetSize(SgExpression *ref,int axis);
|
|
SgExpression *DA_CopyTo_A(SgExpression *head, SgExpression *toar, int init_ind, int last_ind, int step_ind, int regim);
|
|
SgExpression *A_CopyTo_DA( SgExpression *fromar, SgExpression *head, int init_ind, int last_ind, int step_ind, int regim);
|
|
SgExpression *ArrayCopy(SgExpression *from_are, int from_init, int from_last, int from_step,
|
|
SgExpression *to_are, int to_init, int to_last, int to_step, int regim);
|
|
SgExpression *AsyncArrayCopy(SgExpression *from_are, int from_init, int from_last, int from_step, SgExpression *to_are, int to_init, int to_last, int to_step, int regim, SgExpression *flag);
|
|
SgExpression *WaitCopy(SgExpression *flag);
|
|
SgExpression *ReadWriteElement(SgExpression *from, SgExpression *to, int ind);
|
|
SgStatement *SendMemory(int icount, int inda, int indl);
|
|
SgStatement *CloseFiles();
|
|
SgExpression *AddHeader(SgExpression *head_new,SgExpression *head );
|
|
SgExpression *DeleteObject(SgExpression *objref);
|
|
SgExpression *TestElement(SgExpression *head, int ind);
|
|
SgExpression *HasElement(SgExpression *ar_header, int n, SgExpression *index_list);
|
|
SgExpression *CalculateLinear(SgExpression *ar_header, int n, SgExpression *index_list);
|
|
SgStatement *D_LoadVar(SgExpression *vref,int type,SgExpression *headref,SgExpression *opref);
|
|
SgStatement *D_LoadVar2(SgExpression *vref, int type, SgExpression *headref, SgExpression *opref) ;
|
|
SgStatement *D_StorVar();
|
|
SgStatement *D_PrStorVar(SgExpression *vref,int type,SgExpression *headref,SgExpression *opref);
|
|
SgStatement *D_InOutVar(SgExpression *vref, int type, SgExpression *headref);
|
|
SgStatement *D_Lnumb(int num_line);
|
|
SgStatement *D_Fname();
|
|
SgStatement *D_Begpl(int num_loop,int rank,int iinit);
|
|
//SgStatement *D_Begpl(int num_loop);
|
|
SgStatement *D_Begsl(int num_loop);
|
|
SgStatement *D_Begtr(int num_treg);
|
|
SgStatement *D_Skpbl();
|
|
SgStatement *D_Endl(int num_loop,int begin_line);
|
|
SgStatement *D_Iter(SgSymbol *do_var, int type);
|
|
SgStatement *D_Iter_I(int ind, int indtp);
|
|
SgStatement *D_Iter_ON(int ind, int type);
|
|
SgStatement *D_RmBuf(SgExpression *source_headref, SgExpression *buf_headref, int rank, int index) ;
|
|
SgStatement *St_Binter(int num_fragment, SgExpression *valvar);
|
|
SgStatement *St_Einter(int num_fragment,int begin_line);
|
|
SgStatement *St_Bsloop(int num_fragment);
|
|
SgStatement *St_Bploop(int num_fragment);
|
|
SgStatement *St_Enloop(int num_fragment,int begin_line);
|
|
SgStatement *St_Biof();
|
|
SgStatement *St_Eiof();
|
|
SgExpression *CrtPS(SgExpression *psref, int ii, int il, int sign);
|
|
SgExpression *GetAMView(SgExpression *headref);
|
|
SgExpression *GetAMR(SgExpression *amvref, SgExpression *index);
|
|
SgStatement *MapAM(SgExpression *am, SgExpression *ps);
|
|
SgExpression *RunAM(SgExpression *am);
|
|
SgStatement *StopAM();
|
|
SgStatement *MapTasks(SgExpression *taskCount,SgExpression *procCount,SgExpression *params,SgExpression *low_proc,SgExpression *high_proc,SgExpression *renum);
|
|
SgExpression *LoadBG(SgExpression *gref);
|
|
SgExpression *WaitBG(SgExpression *gref);
|
|
SgExpression *CreateBG(int st_sign,int del_sign);
|
|
SgExpression *InsertRemBuf(SgExpression *gref, SgExpression *buf);
|
|
SgStatement *CreateRemBuf(SgExpression *header,SgExpression *buffer,int st_sign,int iplp, int iaxis,int icoeff,int iconst);
|
|
SgExpression *RemoteAccessKind(SgExpression *header,SgExpression *buffer,int st_sign,int iplp,int iaxis,int icoeff,int iconst,int ilsh,int ihsh);
|
|
SgStatement *CreateRemBufP(SgExpression *header,SgExpression *buffer,int st_sign,SgExpression *psref,int icoord);
|
|
SgStatement *LoadRemBuf(SgExpression *buf);
|
|
SgStatement *WaitRemBuf(SgExpression *buf);
|
|
SgExpression *LoadIG(SgSymbol *group);
|
|
SgExpression *WaitIG(SgSymbol *group);
|
|
SgExpression *CreateIG(int st_sign,int del_sign);
|
|
SgExpression *InsertIndBuf(SgSymbol *group, SgExpression *buf);
|
|
SgExpression *CreateIndBuf(SgExpression *header,SgExpression *buffer,int st_sign,SgExpression *mehead,int iconst);
|
|
SgExpression *LoadIndBuf(SgExpression *buf);
|
|
SgExpression *WaitIndBuf(SgExpression *buf);
|
|
SgStatement *InsertArrayBoundDep(SgExpression *gref, SgExpression *head, int ileft, int iright, int max, int ishsign);
|
|
SgExpression *GetProcSys(SgExpression *amref);
|
|
SgExpression * GenBlock (SgExpression *psref, SgExpression *amv, int iweight, int icount);
|
|
SgExpression * WeightBlock(SgExpression *psref, SgExpression *amv, int iweight, int iwnumb, int icount);
|
|
SgExpression * MultBlock (SgExpression *amv, int iaxisdiv, int n);
|
|
void TypeControl();
|
|
void TypeControl_New();
|
|
SgStatement *D_Read(SgExpression *adr) ;
|
|
SgStatement *D_ReadA(SgExpression *adr,int indel, int icount) ;
|
|
SgExpression *LocIndType(int irv, int type);
|
|
SgExpression *DVM_Receive(int iplp,SgExpression *mem,int t,int is);
|
|
SgExpression *DVM_Send(int iplp,SgExpression *mem,int t,int is);
|
|
SgStatement *InitAcross(int acrtype,SgExpression *oldg, SgExpression *newg);
|
|
SgStatement *D_FileLine(int num_line, SgStatement *stmt);
|
|
SgStatement *D_DummyFileLine(int num_line, const char *fname);
|
|
SgStatement *AddBound( );
|
|
SgStatement *InsertArrayBoundSec(SgExpression *gref, SgExpression *head, int ilsec, int irsec, int iilowshs, int illowshs, int iihishs,int ilhishs, int max, int ishsign);
|
|
SgStatement *D_RegistrateArray(int rank, int type, SgExpression *headref, SgExpression *size_array,SgExpression *arref);
|
|
SgExpression *D_CreateDebRedGroup();
|
|
SgStatement *D_InsRedVar(SgExpression *dgref,int num_red, SgExpression *red_array, int ntype, int length, SgExpression *loc_array, int loc_length, int locindtype);
|
|
SgExpression *D_SaveRG(SgExpression *dgref);
|
|
SgStatement *D_CalcRG(SgExpression *dgref);
|
|
SgStatement *D_DelRG(SgExpression *dgref);
|
|
SgStatement *AddBoundShadow(SgExpression *head,int ileft,int iright );
|
|
SgExpression *CreateConsistArray(SgSymbol *cas, SgExpression *array_header, SgExpression *size_array, int rank, int sign, int re_sign);
|
|
SgExpression *FreeConsistent(SgExpression *header);
|
|
SgExpression *StartConsistent(SgExpression *header,int iplp,int iaxis,int icoeff,int iconst,int re_sign);
|
|
SgExpression *WaitConsistent(SgExpression *header);
|
|
SgExpression *CreateConsGroup(int st_sign,int del_sign);
|
|
SgExpression *WaitConsGroup(SgExpression *gref);
|
|
SgExpression *StartConsGroup(SgExpression *gref);
|
|
SgExpression *InsertConsGroup(SgExpression *gref,SgExpression *header,int iplp,int iaxis,int icoeff,int iconst,int re_sign);
|
|
SgExpression *TaskConsistent(SgExpression *header,SgExpression *amvref, int iaxis);
|
|
SgExpression *IncludeConsistentTask(SgExpression *gref,SgExpression *header,SgExpression *amvref, int iaxis,int re_sign);
|
|
SgExpression *ExstractConsGroup(SgExpression *gref, int del_sign);
|
|
|
|
SgExpression *SizeFunction(SgSymbol *ar, int i);
|
|
SgExpression *SizeFunctionWithKind(SgSymbol *ar, int i, int kind);
|
|
SgExpression *LBOUNDFunction(SgSymbol *ar, int i);
|
|
SgExpression *UBOUNDFunction(SgSymbol *ar, int i);
|
|
SgExpression *LENFunction(SgSymbol *string);
|
|
SgExpression *CHARFunction(int i);
|
|
SgExpression *KINDFunction(SgExpression *arg);
|
|
SgExpression *MaxFunction(SgExpression *arg1,SgExpression *arg2);
|
|
SgExpression *MinFunction(SgExpression *arg1,SgExpression *arg2);
|
|
SgExpression *IandFunction(SgExpression *arg1,SgExpression *arg2);
|
|
SgExpression *IorFunction(SgExpression *arg1,SgExpression *arg2);
|
|
SgExpression *AllocatedFunction(SgExpression *arg);
|
|
SgExpression *AssociatedFunction(SgExpression *arg);
|
|
SgExpression *TypeFunction(SgType *t, SgExpression *e, SgExpression *ke);
|
|
SgExpression *SummaOfDistrArray(SgExpression *headref, SgExpression *sumvarref);
|
|
SgExpression *SummaOfArray(SgExpression *are, int rank, SgExpression *size, int ntype,SgExpression *sumvarref);
|
|
SgExpression *doPLmb(int iloopref,int ino);
|
|
SgExpression *doSL(int num_loop,int iout);
|
|
SgExpression *doPLmbSEQ(int ino, int rank, int iout);
|
|
SgStatement *D_PutDebugVarAdr(SgSymbol *dbg_var, int flag);
|
|
SgExpression *RegionCreate(int flag);
|
|
SgExpression *RegistrateDataRegion();
|
|
SgStatement *RegisterScalar(int irgn,SgSymbol *c_intent,SgSymbol *s);
|
|
SgStatement *RegionRegisterScalar(int irgn,SgSymbol *c_intent,SgSymbol *s);
|
|
SgStatement *RegisterSubArray(int irgn, SgSymbol *c_intent, SgSymbol *ar, int ilow, int ihigh);
|
|
SgStatement *RegionRegisterSubArray(int irgn, SgSymbol *c_intent, SgSymbol *ar, SgExpression *index_list);
|
|
SgStatement *RegisterArray(int irgn, SgSymbol *c_intent, SgSymbol *ar);
|
|
SgStatement *RegionRegisterArray(int irgn, SgSymbol *c_intent, SgSymbol *ar);
|
|
SgStatement *RegisterBufferArray(int irgn, SgSymbol *c_intent, SgExpression *bufref, int ilow, int ihigh);
|
|
SgStatement *ActualScalar(SgSymbol *s);
|
|
SgStatement *ActualSubArray(SgSymbol *ar, int ilow, int ihigh);
|
|
SgStatement *ActualSubArray_2(SgSymbol *ar, int rank, SgExpression *index_list);
|
|
SgStatement *ActualSubVariable(SgSymbol *s, int ilow, int ihigh);
|
|
SgStatement *ActualSubVariable_2(SgSymbol *s, int rank, SgExpression *index_list);
|
|
SgStatement *GetActualScalar(SgSymbol *s);
|
|
SgStatement *GetActualSubArray(SgSymbol *ar, int ilow, int ihigh);
|
|
SgStatement *GetActualSubArray_2(SgSymbol *ar, int rank, SgExpression *index_list);
|
|
SgStatement *DestroyArray(SgExpression *objref);
|
|
SgStatement *DestroyScalar(SgExpression *objref);
|
|
SgStatement *RegistrateDVMArray(int ireg,SgExpression *header,SgExpression *gpuheader, SgExpression *gpubase,int inflag,int outflag);
|
|
SgStatement *EndRegion(int n);
|
|
SgStatement *UnRegistrateDataRegion(int n);
|
|
SgStatement *RTL_GPU_Init();
|
|
SgStatement *RTL_GPU_Finish();
|
|
SgStatement *Exit_2(int code);
|
|
SgStatement *Init_Cuda();
|
|
//SgExpression *RegistrateLoop_GPU(int irgn,int iplp,int flag_first,int flag_last);
|
|
//SgExpression *StartLoop_GPU(int il);
|
|
SgExpression *LoopCreate_H(int irgn,int iplp);
|
|
SgExpression *LoopCreate_H2(int nloop, SgExpression *paramList);
|
|
SgExpression *LoopCreate_H2(SgExpression ¶mList);
|
|
SgStatement *LoopMap(int ilh, SgExpression *desc, int rank, SgExpression *paramList);
|
|
SgStatement *LoopMap(SgExpression ¶mList);
|
|
SgExpression *AlignmentLinear(SgExpression *axis,SgExpression *multiplier,SgExpression *summand);
|
|
SgStatement *LoopStart_H(int il);
|
|
SgStatement *LoopEnd_H(int il);
|
|
SgStatement *LoopPerform_H(int il);
|
|
SgStatement *LoopPerform_H2(int il);
|
|
SgExpression *Loop_GPU(int il);
|
|
SgType *IndexType();
|
|
SgStatement *CallKernel_GPU(SgSymbol *skernel, SgExpression *blosks_threads);
|
|
//SgExpression *StartShadow_GPU(int irgn,SgExpression *gref);
|
|
SgExpression *GetActualEdges_H(SgExpression *gref);
|
|
//SgStatement *DoneShadow_GPU(int ish);
|
|
SgStatement *ShadowRenew_H(SgExpression *gref);
|
|
SgStatement *ShadowRenew_H2(SgExpression *head,int corner,int rank,SgExpression *shlist);
|
|
SgStatement *IndirectShadowRenew(SgExpression *head, int axis, SgExpression *shadow_name);
|
|
SgStatement *EndHostExec_GPU(int il);
|
|
SgStatement *UpdateDVMArrayOnHost(SgSymbol *s);
|
|
SgStatement *InsertRed_GPU(int il,int irv,SgExpression *base,SgExpression *loc_base,SgExpression *offset,SgExpression *loc_offset);
|
|
SgExpression *GetNaturalBase(SgSymbol *s_cur_dev,SgSymbol *shead); /* C */
|
|
SgExpression *FillHeader(SgSymbol *s_cur_dev,SgSymbol *sbase,SgSymbol *shead,SgSymbol *sgpuhead);/* C */
|
|
SgExpression *FillHeader_Ex(SgSymbol *s_cur_dev,SgSymbol *sbase,SgSymbol *shead,SgSymbol *sgpuhead,SgSymbol *soutType,SgSymbol *sParams);
|
|
SgExpression *LoopDoCuda(SgSymbol *s_loop_ref,SgSymbol *s_blocks,SgSymbol *s_threads,SgSymbol *s_stream, SgSymbol *s_blocks_info,SgSymbol *s_const);
|
|
SgFunctionCallExp *CallKernel(SgSymbol *skernel, SgExpression *blosks_threads);
|
|
SgExpression *RegisterReduction(SgSymbol *s_loop_ref, SgSymbol *s_var_num, SgSymbol *s_red,SgSymbol *s_loc);
|
|
SgExpression *InitReduction(SgSymbol *s_loop_ref, SgSymbol *s_var_num, SgSymbol *s_red,SgSymbol *s_loc);
|
|
SgExpression *LoopSharedNeeded(SgSymbol *s_loop_ref, SgExpression *ecount);
|
|
SgExpression *GetDeviceAddr(SgSymbol *s_cur_dev,SgSymbol *s_var);
|
|
SgStatement *RegisterHandler_H(int il,SgSymbol *dev_const, SgExpression *flag, SgSymbol *sfun,int bcount,int parcount); /* OpenMP */
|
|
SgStatement *RegisterHandler_H2(int il,SgSymbol *dev_const, SgExpression *flag, SgExpression *efun);
|
|
SgStatement *SetCudaBlock_H(int il, int ib);
|
|
SgStatement *SetCudaBlock_H2(int il, SgExpression *X, SgExpression *Y, SgExpression *Z );
|
|
SgStatement *LoopInsertReduction_H(int ilh,int irv);
|
|
SgStatement *LoopRedInit_HH(SgSymbol *loop_s, int nred, SgSymbol *sRed,SgSymbol *sLoc);
|
|
SgStatement *LoopRedPost_HH(SgSymbol *loop_s, int nred, SgSymbol *sRed,SgSymbol *sLoc);
|
|
SgStatement *LoopFillBounds_HH(SgSymbol *loop_s, SgSymbol *sBlow,SgSymbol *sBhigh,SgSymbol *sBstep);
|
|
SgExpression *LoopGetSlotCount_HH(SgSymbol *loop_s);
|
|
SgStatement *RegionForDevices(int irgn,SgExpression *devices);
|
|
SgStatement *StartRegion(int irgn);
|
|
SgStatement *RegionDestroyRb(int irgn, SgExpression *bufref);
|
|
SgStatement *RegionAfterWaitrb(int irgn, SgExpression *bufref);
|
|
SgStatement *RegionBeforeLoadrb(SgExpression *bufref);
|
|
SgStatement *ActualArray(SgSymbol *ar);
|
|
SgStatement *GetActualArray(SgExpression *objref);
|
|
SgStatement *GetActualSubVariable(SgSymbol *s, int ilow, int ihigh);
|
|
SgStatement *GetActualSubVariable_2(SgSymbol *s, int rank, SgExpression *index_list);
|
|
SgStatement *CreateDvmArrayHeader(SgSymbol *cas, SgExpression *array_header, SgExpression *size_array, int rank, int sign, int re_sign) ;
|
|
SgStatement *HandleConsistent(SgExpression *gref);
|
|
SgExpression *HasLocalElement(SgSymbol *s_loop_ref,SgSymbol *ar, SgSymbol *IndAr);
|
|
SgExpression *HasLocalElement_H2(SgSymbol *s_loop_ref, SgSymbol*ar, int n, SgExpression *index_list);
|
|
SgExpression *GetLocalPart(SgSymbol *s_loop_ref, SgSymbol *shead, SgSymbol *s_const);
|
|
SgStatement *FillLocalPart_HH(SgSymbol *loop_s, SgSymbol *shead, SgSymbol *spart);
|
|
SgStatement *SetVariableName(int irgn, SgSymbol *var);
|
|
SgStatement *SetArrayName(int irgn, SgSymbol *ar);
|
|
SgStatement *LoopShadowCompute_H(int il,SgExpression *headref);
|
|
SgStatement *LoopShadowCompute_Array(int il,SgExpression *headref);
|
|
SgStatement *ShadowCompute(int ilh,SgExpression *head,int rank,SgExpression *shlist);
|
|
SgStatement *ActualAll();
|
|
SgStatement *GetActualAll();
|
|
SgStatement *Redistribute_H(SgExpression *objref,int new_sign);
|
|
SgStatement *Realign_H(SgExpression *objref, int new_sign);
|
|
SgExpression *GetOverallStep(SgSymbol *s_loop_ref);
|
|
SgExpression *GetDeviceNum(SgSymbol *s_loop_ref);
|
|
SgExpression *FillBounds(SgSymbol *loop_s, SgSymbol *sBlow,SgSymbol *sBhigh,SgSymbol *sBstep);
|
|
SgExpression *LoopGetRemoteBuf(SgSymbol *loop_s, int n, SgSymbol *s_buf_head);
|
|
SgExpression *mallocFunction(SgExpression *arg, SgStatement *scope);
|
|
SgExpression *freeFunction(SgExpression *arg, SgStatement *scope);
|
|
SgExpression *RedPost(SgSymbol *loop_s, SgSymbol *s_var_num, SgSymbol *sRed,SgSymbol *sLoc);
|
|
SgExpression *CudaInitReduction(SgSymbol *s_loop_ref, SgSymbol *s_var_num, SgSymbol *s_dev_red, SgSymbol *s_dev_loc);
|
|
SgExpression *CudaReplicate(SgSymbol *Addr, SgSymbol *recordSize, SgSymbol *quantity, SgSymbol *devPtr);
|
|
SgStatement *LoopAcross_H(int il,SgExpression *oldGroup,SgExpression *newGroup);
|
|
SgStatement *LoopAcross_H2(int il, int isOut, SgExpression *headref, int rank, SgExpression *shlist);
|
|
SgExpression *GetDependencyMask(SgSymbol *s_loop_ref) ;
|
|
SgExpression *CudaTransform(SgSymbol *s_loop_ref, SgSymbol *s_head, SgSymbol *s_BackFlag, SgSymbol *s_headH, SgSymbol *s_addrParam);
|
|
SgExpression *CudaAutoTransform(SgSymbol *s_loop_ref, SgSymbol *s_head);
|
|
SgExpression *ApplyOffset(SgSymbol *s_head, SgSymbol *s_base, SgSymbol *s_headH) ;
|
|
SgExpression *GetConfig(SgSymbol *s_loop_ref,SgSymbol *s_shared_perThread,SgSymbol *s_regs_perThread,SgSymbol *s_threads,SgSymbol *s_stream, SgSymbol *s_shared_perBlock);
|
|
SgExpression *PrepareReduction(SgSymbol *s_loop_ref, SgSymbol *s_var_num, SgSymbol *s_count, SgSymbol *s_fill_flag, int fixedCount = 0, int fillFlag = -1);
|
|
SgExpression *FinishReduction(SgSymbol *s_loop_ref, SgSymbol *s_var_num);
|
|
SgExpression *Register_Red(SgSymbol *s_loop_ref, SgSymbol *s_var_num, SgSymbol *s_red_array, SgSymbol *s_loc_array,SgSymbol *s_offset,SgSymbol *s_loc_offset);
|
|
SgExpression *ChangeFilledBounds(SgSymbol *s_low,SgSymbol *s_high,SgSymbol *s_idx, SgSymbol *s_n,SgSymbol *s_dep,SgSymbol *s_type,SgSymbol *s_idxs);
|
|
SgStatement *D_FileLineConst(int line, SgStatement *stmt);
|
|
SgExpression *GetStage(SgStatement *first_do, int iplp);
|
|
SgStatement *SetStage(int il, SgExpression *stage);
|
|
SgExpression *GuessIndexType(SgSymbol *s_loop_ref);
|
|
SgExpression *RtcSetLang(SgSymbol *s_loop_ref, const int lang);
|
|
SgStatement *DeleteObject_H(SgExpression *objref);
|
|
SgStatement *DataEnter(SgExpression *objref,SgExpression *esize);
|
|
SgStatement *DataExit(SgExpression *objref, int saveFlag);
|
|
SgStatement *ScopeInsert(SgExpression *objref);
|
|
SgStatement *ScopeStart();
|
|
SgStatement *ScopeEnd();
|
|
SgExpression *HandlerFunc(SgSymbol *sfun, int paramCount, SgExpression *arg_list);
|
|
SgExpression *Register_Array_H2(SgExpression *ehead);
|
|
SgExpression *DvmhString(SgExpression *s);
|
|
SgExpression *DvmhConnected(SgExpression *unit, SgExpression *failIfYes);
|
|
SgExpression *DvmhStringVariable(SgExpression *v);
|
|
SgExpression *DvmhVariable(SgExpression *v);
|
|
SgExpression *VarGenHeader(SgExpression *item);
|
|
SgStatement *SaveCheckpointFilenames(SgExpression *cpName, std::vector<SgExpression *> filenames);
|
|
SgStatement *CheckFilename(SgExpression *cpName, SgExpression *filename);
|
|
SgStatement *GetNextFilename(SgExpression *cpName, SgExpression *lastFile, SgExpression *currentFile);
|
|
SgStatement *CpWait(SgExpression *cpName, SgExpression *statusVar);
|
|
SgStatement *CpSaveAsyncUnit(SgExpression *cpName, SgExpression *file, SgExpression *unit);
|
|
SgStatement *Dvmh_Line(int line, SgStatement *stmt);
|
|
SgStatement *DvmhArrayCreate(SgSymbol *das, SgExpression *array_header, int rank, SgExpression *arglist);
|
|
SgStatement *DvmhTemplateCreate(SgSymbol *das, SgExpression *array_header, int rank, SgExpression *arglist);
|
|
SgExpression *DvmhReplicated();
|
|
SgExpression *DvmhBlock(int axis);
|
|
SgExpression *DvmhWgtBlock(int axis, SgSymbol *sw, SgExpression *en);
|
|
SgExpression *DvmhGenBlock(int axis, SgSymbol *sg);
|
|
SgExpression *DvmhMultBlock(int axis, SgExpression *em);
|
|
SgExpression *DvmhIndirect(int axis, SgSymbol *smap);
|
|
SgExpression *DvmhDerived(int axis, SgExpression *derived_rhs, SgExpression *counter_func, SgExpression *filler_func);
|
|
SgStatement *DvmhDistribute(SgSymbol *das, int rank, SgExpression *distr_list);
|
|
SgStatement *DvmhRedistribute(SgSymbol *das, int rank, SgExpression *distr_list);
|
|
SgStatement *DvmhAlign(SgSymbol *als, SgSymbol *align_base, int nr, SgExpression *alignment_list);
|
|
SgStatement *DvmhRealign(SgExpression *objref, int new_sign, SgExpression *pattern_ref, int nr, SgExpression *align_list);
|
|
SgStatement *IndirectLocalize(SgExpression *ref_array, SgExpression *target_array, int iaxis);
|
|
SgExpression *DvmhExprScan(SgExpression *edummy);
|
|
SgExpression *DvmhExprConstant(SgExpression *e);
|
|
SgExpression *DvmhExprIgnore();
|
|
SgExpression *DvmhDerivedRhs(SgExpression *erhs);
|
|
SgStatement *ShadowAdd(SgExpression *templ, int iaxis, SgExpression *derived_rhs, SgExpression *counter_func, SgExpression *filler_func, SgExpression *shadow_name, int nl, SgExpression *array_list);
|
|
SgStatement *CreateDvmArrayHeader_2(SgSymbol *ar, SgExpression *array_header, int rank, SgExpression *shape_list);
|
|
SgStatement *ForgetHeader(SgExpression *objref);
|
|
SgExpression *DvmhArraySlice(int rank, SgExpression *slice_list);
|
|
SgStatement *DvmhArrayCopy( SgExpression *array_header_right, int rank_right, SgExpression *slice_list_right, SgExpression *array_header_left, int rank_left, SgExpression *slice_list_left );
|
|
SgStatement *DvmhArrayCopyWhole( SgExpression *array_header_right, SgExpression *array_header_left );
|
|
SgStatement *Correspondence_H (int il, SgExpression *hedr, SgExpression *axis_list);
|
|
SgStatement *DvmhArraySetValue( SgExpression *array_header_left, SgExpression *e_right );
|
|
SgStatement *Consistent_H (int il, SgExpression *hedr, SgExpression *axis_list);
|
|
SgStatement *LoopRemoteAccess_H (int il, SgExpression *hedr, SgSymbol *ar, SgExpression *axis_list);
|
|
SgStatement *RemoteAccess_H2 (SgExpression *buf_hedr, SgSymbol *ar, SgExpression *ar_hedr, SgExpression *axis_list);
|
|
SgStatement *GetRemoteBuf (SgSymbol *loop_s, int n, SgSymbol *s_buf_head);
|
|
|
|
/* io.cpp */
|
|
void IO_ThroughBuffer(SgSymbol *ar, SgStatement *stmt, SgExpression *eiostat);
|
|
int IOcontrol(SgExpression *e, SgExpression *ioc[],int type);
|
|
int control_list1(SgExpression *e, SgExpression *ioc[]);
|
|
int control_list_open(SgExpression *e, SgExpression *ioc[]);
|
|
int control_list_inquire (SgExpression *e, SgExpression *ioc[]);
|
|
int control_list_rw(SgExpression *e, SgExpression *ioc[]);
|
|
void InsertSendInputList(SgExpression *input_list, SgExpression * io_stat,SgStatement *stmt);
|
|
void InsertSendIOSTAT(SgExpression * eios);
|
|
void InsertSendInquire(SgExpression * eioc[]);
|
|
void ImplicitLoop(SgExpression *ein, int *pj, SgExpression *iisize[], SgExpression *iielem[],SgExpression *iinumb[], SgStatement *stmt);
|
|
SgExpression * InputItemLength (SgExpression *e, SgStatement *stmt);
|
|
SgExpression *SubstringLength(SgExpression *sub);
|
|
SgExpression *ArrayLength(SgSymbol *ar, SgStatement *stmt, int err);
|
|
SgExpression *ArrayLengthInElems(SgSymbol *ar, SgStatement *stmt, int err);
|
|
SgExpression *ElemLength(SgSymbol *ar);
|
|
SgExpression *NumbOfElem(SgExpression *es,SgExpression *el);
|
|
int TestIOList(SgExpression *iol,SgStatement *stmt,int error_msg);
|
|
int ImplicitLoopTest(SgExpression *eim,SgStatement *stmt,int error_msg);
|
|
int IOitemTest(SgExpression *e,SgStatement *stmt,int error_msg);
|
|
SgExpression *CorrectLastOpnd(SgExpression *len, SgSymbol *ar, SgExpression *bounds,SgStatement *stmt);
|
|
int hasAsterOrOneInLastDim(SgSymbol *ar);
|
|
SgSymbol *lastDimInd(SgExpression *el);
|
|
SgExpression *FirstArrayElement(SgSymbol *ar);
|
|
SgExpression *Barrier();
|
|
int SpecialKindImplicitLoop(SgExpression *el, SgExpression *ein, int *pj, SgExpression *iisize[], SgExpression *iielem[],SgExpression *iinumb[],SgStatement *stmt);
|
|
SgExpression *FirstArrayElementOfSection(SgSymbol *ar,SgExpression *einit[]);
|
|
SgExpression *FirstElementOfSection(SgExpression *ea);
|
|
int ArraySectionRank(SgExpression *ea);
|
|
int ContinuousSection(SgExpression *ea);
|
|
SgExpression *SectionLength(SgExpression *ea, SgStatement *stmt, int err);
|
|
int isColon(SgExpression *e);
|
|
int ContinuousSection(SgExpression *ea);
|
|
SgStatement *Any_IO_Statement(SgStatement *stmt);
|
|
void IoModeDirective(SgStatement *stmt, char io_modes_str[], int error_msg);
|
|
void Open_Statement(SgStatement *stmt, char io_modes_str[], int error_msg);
|
|
void Close_Statement(SgStatement *stmt, int error_msg);
|
|
void Inquiry_Statement(SgStatement *stmt, int error_msg);
|
|
void FilePosition_Statement(SgStatement *stmt, int error_msg);
|
|
void ReadWritePrint_Statement(SgStatement *stmt, int error_msg);
|
|
void ReadWrite_Statement(SgStatement *stmt, int error_msg);
|
|
void Close_RTS(SgStatement *stmt,int error_msg);
|
|
void Open_RTS(SgStatement* stmt, char* io_modes_str, int error_msg);
|
|
void FilePosition_RTS(SgStatement* stmt, int error_msg);
|
|
void ReadWrite_RTS(SgStatement *stmt, int error_msg);
|
|
void OpenClose(SgStatement *stmt, int error_msg);
|
|
void NewOpenClose(SgStatement *stmt);
|
|
void NewFilePosition(SgStatement *stmt);
|
|
void Replace_IO_Statement(SgExpression *ioc[],SgStatement *stmt);
|
|
void ReplaceByStop(int io_err, SgStatement *stmt);
|
|
int Check_Control_IO_Statement(int io_err, SgExpression *ioc[], SgStatement *stmt, int error_msg);
|
|
void FilePosition(SgStatement *stmt, int error_msg);
|
|
void NewFilePosition(SgStatement *stmt);
|
|
void Inquiry(SgStatement *stmt, int error_msg);
|
|
SgStatement *IfConnected(SgStatement *stmt, SgExpression *unit, bool suitableForNewIO);
|
|
int control_list_oc_new(SgExpression *e, SgExpression *ioc[]);
|
|
void Dvmh_Close(SgExpression *ioc[]);
|
|
void Dvmh_Open(SgExpression *ioc[], const char *io_modes_str);
|
|
void Dvmh_FilePosition(SgExpression *ioc[], int variant);
|
|
void Dvmh_ReadWrite(SgExpression **ioc, SgStatement *stmt);
|
|
void InsertGotoStmt(SgExpression *err, int index);
|
|
void OccupyDvm000Elem(SgExpression *cond, int index);
|
|
int control_list_close_new(SgExpression *e, SgExpression *ioc[]);
|
|
int control_list_open_new(SgExpression *e, SgExpression *ioc[]);
|
|
bool checkArgsClose(SgExpression **ioc, SgStatement *stmt, int error_msg);
|
|
bool checkArgsOpen(SgExpression **ioc, SgStatement *stmt, int error_msg, char const *io_modes_str);
|
|
bool checkArgsEnfileRewind(SgExpression **ioc, SgStatement *stmt, int error_msg);
|
|
bool checkArgsRW(SgExpression **ioc, SgStatement *stmt, int error_msg);
|
|
bool checkVarRefIntArg(SgExpression *arg, int i, SgStatement *stmt, int error_msg);
|
|
bool checkStringVarArg(SgExpression *arg, int i, SgStatement *stmt, int error_msg);
|
|
bool checkStringArg(SgExpression *arg, int i, SgStatement *stmt, int error_msg);
|
|
bool checkIntArg(SgExpression *arg, int i, SgStatement *stmt, int error_msg);
|
|
bool checkLabelRefArg(SgExpression *arg, SgStatement *stmt, int error_msg);
|
|
bool checkDefaultStringArg(SgExpression *arg, const char **possible_values, int count, int i, SgStatement *stmt, int error_msg);
|
|
bool checkAccessArg(SgExpression **ioc, SgStatement *stmt, int error_msg);
|
|
bool checkFormArg(SgExpression **ioc, SgStatement *stmt, int error_msg);
|
|
bool checkFormattedArgs(SgExpression **ioc, SgStatement *stmt, int error_msg);
|
|
//bool checkFileArg(SgExpression **ioc, SgStatement *stmt, int error_msg);
|
|
bool checkPosArg(SgExpression **ioc, SgStatement *stmt, int error_msg);
|
|
bool checkUnitAndNewunitArg(SgExpression **ioc, SgStatement *stmt, int error_msg);
|
|
bool checkNewunitArg(SgExpression **ioc, SgStatement *stmt, int error_msg);
|
|
bool checkReclArg(SgExpression **ioc, SgStatement *stmt, int error_msg);
|
|
bool checkStatusArg(SgExpression **ioc, SgStatement *stmt, int error_msg);
|
|
bool checkDvmModeArg(char const *io_modes_str, SgStatement *stmt, int error_msg);
|
|
const char *stringValuesOfArgs(int argNumber, SgStatement *stmt);
|
|
int FixError(const char *str, int ierr, SgSymbol *s, SgStatement *stmt, int error_msg);
|
|
SgExpression *ArrayFieldLast(SgExpression *e);
|
|
SgExpression *FirstElementOfField(SgExpression *e_RecRef);
|
|
int hasEndErrControlSpecifier(SgStatement *stmt, SgExpression *ioEnd[] );
|
|
void ChangeSpecifierByIOSTAT(SgExpression *e);
|
|
void ChangeControlList(SgStatement *stmt, SgExpression *ioEnd[] );
|
|
void ReplaceStatementWithEndErrSpecifier(SgStatement *stmt, SgExpression *ioEnd[] );
|
|
|
|
/* checkpoint.cpp */
|
|
void CP_Create_Statement(SgStatement *st, int error_msg);
|
|
void CP_Save_Statement(SgStatement *st, int error_msg);
|
|
void CP_Load_Statement(SgStatement *st, int error_msg);
|
|
void CP_Wait(SgStatement *stmt, int error_msg);
|
|
|
|
/* debug.cpp */
|
|
void D_AddToDoList (int Nloop, int Nline, SgLabel *lab, SgSymbol *var);
|
|
void D_DelFromDoList ();
|
|
SgStatement *CloseLoop(SgStatement *stmt);
|
|
int isDoVar(SgSymbol *s);
|
|
void SetDoVar(SgSymbol *s);
|
|
void OffDoVar(SgSymbol *s);
|
|
void FreeDoList();
|
|
void OpenParLoop(SgStatement *dost);
|
|
void OpenParLoop_Inter(SgStatement *dost,int ind, int indtp,SgSymbol *do_var[],int ndo);
|
|
void CloseParLoop(SgStatement *dostmt,SgStatement *stmt,SgStatement *end_stmt);
|
|
void CloseDoInParLoop(SgStatement *end_stmt);
|
|
void AddAttrLoopNumber(int No,SgStatement *stmt);
|
|
int LoopNumber(SgStatement *stmt);
|
|
SgExpression *Value(SgExpression *e);
|
|
SgExpression *Value_F95(SgExpression *e);
|
|
void LineNumber(SgStatement *st);
|
|
int OpenInterval (SgStatement *stmt);
|
|
int CloseInterval();
|
|
void ExitInterval(SgStatement *stmt);
|
|
void OverLoopAnalyse(SgStatement *func);
|
|
void FormLoopIntList(SgStatement *st);
|
|
int IntervalNumber(SgStatement *stmt);
|
|
void SeqLoopBegin(SgStatement *st);
|
|
void AddAttrIntervalNumber(SgStatement *stmt);
|
|
SgStatement *SeqLoopEnd(SgStatement *end_stmt,SgStatement *stmt);
|
|
void SeqLoopEndInParLoop(SgStatement *end_stmt,SgStatement *stmt);
|
|
void SkipParLoopNest(SgStatement *stmt);
|
|
int hasGoToIn(SgStatement *parent,SgLabel *lab_after);
|
|
int ToThisLabel(SgStatement *gost, SgLabel *lab_after);
|
|
void ReplaceGoToLabelInsideLoop(SgStatement *parent,SgStatement *lst, SgLabel *lab_after);
|
|
void ReplaceGoToInsideLoop(SgStatement *dost,SgStatement *endst, SgStatement *dst, SgStatement *est);
|
|
void DeleteGoToFromList(SgStatement *stmt);
|
|
void BeginDebugFragment(int num);
|
|
void EndDebugFragment(int num);
|
|
void DebugTaskRegion(SgStatement *stmt);
|
|
void CloseTaskRegion(SgStatement *tr_st,SgStatement *stmt);
|
|
int TypeDVM();
|
|
void ArrayRegistration ();
|
|
heap_pointer_list *HeapList(heap_pointer_list *heap_point, SgSymbol *sheap,SgSymbol *sp);
|
|
SgSymbol *HeapForPointer(SgSymbol *p);
|
|
void RegistrateAllocArray( stmt_list *alloc_st);
|
|
void AllocArrayRegistration( SgStatement *stmt);
|
|
SgStatement *Check(SgStatement *stmt);
|
|
void Registrate_Ar(SgSymbol *ar);
|
|
void Registrate_Allocatable(SgExpression *alce, SgStatement *stmt);
|
|
void AllocatableArrayRegistration (SgStatement *stmt);
|
|
void InsertStmtsBeforeGoTo(SgStatement *gotost, SgStatement *dst, SgStatement *est);
|
|
SgStatement *StmtWithLabel(SgLabel *lab);
|
|
int LineNumberOfStmtWithLabel(SgLabel *lab);
|
|
void AddDebugGotoAttribute(SgStatement *gotost,SgStatement *lnumst);
|
|
void DebugVarArrayRef(SgExpression *e,SgStatement *stmt);
|
|
void DebugVarArrayRef_Left(SgExpression *e,SgStatement *stmt,SgStatement *stcur);
|
|
void DebugArg_VarArrayRef(SgExpression *e,SgStatement *stmt);
|
|
void CheckVarArrayRef(SgExpression *e, SgStatement *stmt, SgExpression *epr);
|
|
void DebugLoop(SgStatement *stmt);
|
|
void DebugParLoop(SgStatement *stmt,int rank, int iinp);
|
|
void DebugExpression(SgExpression *e, SgStatement *stmt);
|
|
void DebugAssignStatement(SgStatement *stmt);
|
|
|
|
/* help.cpp */
|
|
SgLabel * firstLabel(SgFile *f);
|
|
int isLabel(int num) ;
|
|
SgLabel * GetLabel();
|
|
const char * header (int i);
|
|
char *UnparseExpr(SgExpression *e) ;
|
|
void printVariantName(int i);
|
|
int FragmentList(char *l, int dlevel, int elevel);
|
|
void AddToFragmentList(int num1, int num2,int dlevel,int elevel);
|
|
void Error(const char *s, const char *t, int num, SgStatement *stmt);
|
|
void err(const char *s, int num, SgStatement *stmt);
|
|
void Err_g(const char *s, const char *t, int num);
|
|
void err_p(const char *s, const char *name, int num);
|
|
void Warning(const char *s, const char *t, int num, SgStatement *stmt);
|
|
void warn(const char *s, int num, SgStatement *stmt);
|
|
void Warn_g(const char *s, const char *t, int num);
|
|
void errN(const char *s, int num, SgStatement *stmt);
|
|
void format_num (int num, char num3s[]);
|
|
SgExpression *ConnectList(SgExpression *el1, SgExpression *el2);
|
|
int is_integer_value(char *str);
|
|
char *SymbListString(symb_list *symbl);
|
|
char *baseFileName(char *name);
|
|
SgSymbol *isSameNameInProgramUnit(const char *name,SgStatement *func);
|
|
SgSymbol *isNameConcurrence(const char *name, SgStatement *func);
|
|
char *Check_Correct_Name(const char *name);
|
|
|
|
/* acc_f2c.cpp */
|
|
void Translate_Fortran_To_C(SgStatement *stat, SgStatement *last, std::vector <std::stack <SgStatement*> > &, int);
|
|
SgStatement* Translate_Fortran_To_C(SgStatement* Stmt, bool isSapforConv = false);
|
|
|
|
SgSymbol* createNewFunctionSymbol(const char *name);
|
|
void swapDimentionsInprivateList(void);
|
|
void createNewFCall(SgExpression*, SgExpression*&, const char*, int);
|
|
SgFunctionCallExp* createNewFCall(const char *name);
|
|
void convertExpr(SgExpression*, SgExpression*&);
|
|
void initSupportedVars(void);
|
|
void initF2C_FunctionCalls(void);
|
|
void initIntrinsicFunctionNames();
|
|
|
|
/* acc_across.cpp */
|
|
ArgsForKernel *Create_C_Adapter_Function_Across(SgSymbol *sadapter);
|
|
SgStatement *CreateLoopKernelAcross(SgSymbol*, ArgsForKernel*, SgType*);
|
|
SgStatement *CreateLoopKernelAcross(SgSymbol*, ArgsForKernel*, int, SgType*);
|
|
|
|
/* acc_index_analyzer.cpp */
|
|
SgExpression* analyzeArrayIndxs(SgSymbol *array, SgExpression *listIdx);
|
|
|
|
/* aks_analyzeLoops.cpp */
|
|
AnalyzeReturnGpuO1 analyzeLoopBody(int type);
|
|
|
|
/* acc_rtc.cpp */
|
|
void ACC_RTC_AddCalledProcedureComment(SgSymbol *symbK);
|
|
void ACC_RTC_CompleteAllParams();
|
|
void ACC_RTC_ConvertCudaKernel(SgStatement *cuda_kernel, const char *kernelName);
|
|
char* _RTC_convertUnparse(const char* inBuf);
|
|
symb_list *ACC_RTC_ExpandCallList(symb_list *call_list);
|
|
char *_RTC_PrototypesForKernel(symb_list *call_list);
|
|
void ACC_RTC_AddFunctionsToKernelConsts(SgStatement *first_kernel_const);
|
|
void _RTC_UnparsedFunctionsToKernelConst(SgStatement *stmt);
|
|
|
|
|
|
/* acc_utilities.cpp */
|
|
char* copyOfUnparse(const char *strUp);
|
|
char* aks_strupr(const char *str);
|
|
char* aks_strlowr(const char *str);
|
|
void correctPrivateList(int flag);
|
|
SgType *indexTypeInKernel(int rt_Type);
|
|
SgFunctionCallExp *cudaKernelCall(SgSymbol *skernel, SgExpression *specs, SgExpression *args);
|
|
void DeclareDoVars(SgType *indexType);
|
|
SgStatement* createKernelCallsInCudaHandler(SgFunctionCallExp *baseFunc, SgSymbol *s_loop_ref, SgSymbol *idxTypeInKernel, SgSymbol *s_blocks);
|
|
int isIntrinsicFunctionName(const char *name);
|
|
void addNumberOfFileToAttribute(SgProject *project);
|
|
int getIntrinsicFunctionTypeSize(const char* name);
|
|
void recExpressionPrintFdvm(SgExpression* exp);
|
|
|
|
/* calls.cpp */
|
|
void ProjectStructure(SgProject &project);
|
|
void FileStructure(SgFile *file);
|
|
void doCallGraph(SgFile *file);
|
|
SgStatement *ProgramUnit(SgStatement *first);
|
|
SgStatement *Subprogram(SgStatement *func);
|
|
void FunctionCallSearch(SgExpression *e);
|
|
void Arg_FunctionCallSearch(SgExpression *e) ;
|
|
void FunctionCallSearch_Left(SgExpression *e);
|
|
void Call_Site (SgSymbol *s, int inlined, SgStatement *stat, SgExpression *e);
|
|
SgSymbol * GetProcedureHeaderSymbol(SgSymbol *s);
|
|
void MarkAsRoutine(SgSymbol *s);
|
|
void MarkAsCalled(SgSymbol *s);
|
|
void MarkAsUserProcedure(SgSymbol *s);
|
|
void MarkAsExternalProcedure(SgSymbol *s);
|
|
void MakeFunctionCopy(SgSymbol *s);
|
|
SgStatement *HeaderStatement(SgSymbol *s);
|
|
void InsertCalledProcedureCopies();
|
|
SgStatement *InsertProcedureCopy(SgStatement *st_header, SgSymbol *sproc, int is_routine, SgStatement *after);
|
|
int FromOtherFile(SgSymbol *s);
|
|
int findParameterNumber(SgSymbol *s, char *name);
|
|
int isInParameter(SgSymbol *s, int i);
|
|
SgSymbol *ProcedureSymbol(SgSymbol *s);
|
|
int IsPureProcedure(SgSymbol *s);
|
|
int IsElementalProcedure(SgSymbol *s);
|
|
int IsRecursiveProcedure(SgSymbol *s);
|
|
int IsNoBodyProcedure(SgSymbol *s);
|
|
int isUserFunction(SgSymbol *s);
|
|
int IsInternalProcedure(SgSymbol *s);
|
|
SgExpression *FunctionDummyList(SgSymbol *s);
|
|
char *FunctionResultIdentifier(SgSymbol *sfun);
|
|
SgSymbol *isSameNameInProcedure(char *name, SgSymbol *sfun);
|
|
char *NameCheck(char *name, SgSymbol *sfun);
|
|
void InsertReturnBeforeEnd(SgStatement *new_header, SgStatement *end_st);
|
|
void ChangeReturnStmts(SgStatement *new_header, SgStatement *end_st, SgSymbol *sres);
|
|
void ExtractDeclarationStatements(SgStatement *header);
|
|
void MakeFunctionDeclarations(SgStatement *header, SgSymbol *s_last);
|
|
SgSymbol *LastSymbolOfFunction(SgStatement *header);
|
|
void ConvertArrayReferences(SgStatement *first, SgStatement *last);
|
|
void doPrototype(SgStatement *func_hedr, SgStatement *block_header, int static_flag);
|
|
SgStatement *FunctionPrototype(SgSymbol *sf);
|
|
bool CreateIntefacePrototype(SgStatement *header);
|
|
SgStatement *hasInterface(SgSymbol *s);
|
|
void SaveInterface(SgSymbol *s, SgStatement *interface);
|
|
SgStatement *TranslateProcedureHeader_To_C(SgStatement *new_header);
|
|
SgStatement *getInterface(SgSymbol *s);
|
|
SgStatement *getGenericInterface(SgSymbol *s, SgExpression *arg_list);
|
|
int CompareKind(SgType* type_arg, SgType* type_dummy);
|
|
SgExpression* TypeKindExpr(SgType* t);
|
|
SgFunctionSymb *SymbolForIntrinsicFunction(const char *name, int i, SgType *tp, SgStatement *func);
|
|
|
|
|
|
//-----------------------------------------------------------------------
|
|
extern "C" char* funparse_bfnd(...);
|
|
extern "C" char* Tool_Unparse2_LLnode(...);
|
|
extern "C" void Init_Unparser(...);
|
|
extern "C" char* UnparseBif_Char(...);
|
|
//extern "C" void UnparseProgram_ThroughAllocBuf(...);
|
|
extern "C" PTR_BFND duplicateStmtsFromTo(...);
|
|
|
|
/*OMP*/
|
|
const int COMMON_VAR = 1027; /*OMP*/
|
|
const int SAVE_VAR = 1028; /*OMP*/
|
|
const int STATIC_CONTEXT = 1029; /*OMP*/
|
|
const int DEBUG_STAT = 1030; /*OMP*/
|
|
const int FIRST_ELEM = 1031; /*OMP*/
|
|
const int FORMAL_PARAM = 1032; /*OMP*/
|
|
const int DECLARED_FUNC = 1033; /*OMP*/
|
|
const int DEBUG_LINE = 1034; /*OMP*/
|
|
EXTERN int OMP_program; /*OMP*/
|
|
EXTERN int omp_debug; //set to 1 by -d1 or -d2 or -d3 or -d4 flag
|
|
EXTERN int omp_perf; //set to 1 by -emp flag
|
|
#define D1 1
|
|
#define D2 2
|
|
#define DPERF 4
|
|
#define D3 8
|
|
#define D4 16
|
|
#define D5 32
|
|
/*Attributes for omp statements*/
|
|
const int OMP_STMT_BEFORE = 2000; /*OMP*/
|
|
const int OMP_STMT_AFTER = 2001; /*OMP*/
|
|
const int OMP_MARK = 2002; /*OMP*/
|
|
const int OMP_NEXT = 2003; /*OMP*/
|
|
const int OMP_CRITICAL = 2004; /*OMP*/
|
|
int isOmpGetNumThreads(SgExpression *); /*OMP*/
|
|
SgStatement * GetLexNextIgnoreOMP(SgStatement *st); /*OMP*/
|
|
SgSymbol *ChangeParallelDir (SgStatement *stmt); /*OMP*/
|
|
void ChangeAccrossOpenMPParam (SgStatement *stmt, SgSymbol *newj, int ub); /*OMP*/
|
|
void MarkOriginalStmt (SgStatement *func); /*OMP*/
|
|
void TranslateFileOpenMPDVM(SgFile *f); /*OMP*/
|
|
void DelAttributeFromStmt (int type, SgStatement *st); /*OMP*/
|
|
int isOmpDir (SgStatement * st); /*OMP*/
|
|
void ConvertLoopWithLabelToEnddoLoop (SgStatement *stat); /*OMP*/
|
|
#define BIT_OPENMP 1024*128*128 /* OpenMP Fortran */
|
|
|
|
// options on FDVM converter
|
|
enum OPTIONS {
|
|
AUTO_TFM = 0, ONE_THREAD, SPEED_TEST_L0, SPEED_TEST_L1, GPU_O0, GPU_O1, RTC, C_CUDA, OPT_EXP_COMP,
|
|
O_HOST, NO_CUDA, NO_BL_INFO, LOOP_ANALYSIS, PRIVATE_ANALYSIS, IO_RTS, READ_ALL, NO_REMOTE, NO_PURE_FUNC,
|
|
GPU_IRR_ACC, O_PL, O_PL2, NUM_OPT};
|
|
// ONE_THREAD - compile one thread CUDA-kernels only for across (TODO for all CUDA-kernels)
|
|
// SPEED_TEST_L0, SPEED_TEST_L1 - debug options for speed testof CUDA-kernels for across
|
|
// RTC - enable CUDA run-time compilation of all CUDA-kernels
|
|
// C_CUDA - enable Fortran to C convertation on CUDA-kernels
|
|
// OPT_EXP_COMP - compute expressions on loop analysis, it enables LOOP_ANALYSIS
|
|
// O_HOST - enable procedure optimizations for CPU
|
|
// NO_CUDA - dont generate CUDA-kernels
|
|
// NO_BL_INFO (depricated) - dont generate block information for CUDA-kernels's grid
|
|
// LOOP_ANALYSIS - enable loop analysis for all parallel loops (default: only for across parallel loops)
|
|
// PRIVATE_ANALYSIS - enable private analysis for all parallel loops
|
|
// IO_RTS - enable new interface for parallel IO operations on DVMH programs
|
|
// READ_ALL - READ statement execution by all processes
|
|
// NO_REMOTE - ignore REMOTE_ACCESS specifications (compilation mode for single processor execution)
|
|
// NUM_OPT - it is not an option, it is a maximum value of enum
|
|
|
|
class Options
|
|
{
|
|
private:
|
|
bool states[NUM_OPT];
|
|
int values[NUM_OPT];
|
|
bool freezed;
|
|
public:
|
|
Options()
|
|
{
|
|
for (int i = 0; i < NUM_OPT; ++i)
|
|
{
|
|
states[i] = false;
|
|
values[i] = -1;
|
|
}
|
|
freezed = false;
|
|
}
|
|
void setOn(const OPTIONS opt)
|
|
{
|
|
if (!freezed)
|
|
states[opt] = true;
|
|
}
|
|
void setOff(const OPTIONS opt)
|
|
{
|
|
if (!freezed) {
|
|
states[opt] = false;
|
|
values[opt] = -1;
|
|
}
|
|
}
|
|
void setValue(const OPTIONS opt, const int val)
|
|
{
|
|
if (!freezed) {
|
|
states[opt] = true;
|
|
values[opt] = val;
|
|
}
|
|
}
|
|
|
|
bool isOn(const OPTIONS opt) const { return states[opt]; }
|
|
int getValue(const OPTIONS opt) const { return values[opt]; }
|
|
|
|
void checkCombinations()
|
|
{
|
|
if (states[SPEED_TEST_L1])
|
|
states[SPEED_TEST_L0] = true;
|
|
// TODO: add warning
|
|
if (states[ONE_THREAD])
|
|
states[AUTO_TFM] = false;
|
|
|
|
if (states[GPU_O0]) {
|
|
fprintf(stderr, "switch off -gpuO0 option, this is not implemented yet\n");
|
|
states[GPU_O0] = false;
|
|
}
|
|
|
|
if (states[GPU_IRR_ACC])
|
|
{
|
|
if (states[NO_CUDA] || !states[NO_BL_INFO])
|
|
{
|
|
states[LOOP_ANALYSIS] = false;
|
|
states[OPT_EXP_COMP] = false;
|
|
states[GPU_IRR_ACC] = false;
|
|
if (states[NO_CUDA])
|
|
fprintf(stderr, "switch off -dvmIrregAnalysis option because -noCuda option is on\n");
|
|
else
|
|
fprintf(stderr, "switch off -dvmIrregAnalysis option because -noBI option is off\n");
|
|
}
|
|
else
|
|
{
|
|
states[LOOP_ANALYSIS] = true;
|
|
states[OPT_EXP_COMP] = true;
|
|
}
|
|
}
|
|
|
|
// if (states[O_PL2])
|
|
// states[O_HOST] = true;
|
|
|
|
//freeze all changes after initialization
|
|
freezed = true;
|
|
}
|
|
};
|
|
|
|
extern Options options; |