added new directives

This commit is contained in:
ALEXks
2024-12-05 12:50:36 +03:00
parent 77c46121a2
commit 21acea498e
18 changed files with 8906 additions and 9031 deletions

View File

@@ -574,6 +574,7 @@
#define ACC_CHECKSECTION_DIR 911 /* ACC Fortran */ #define ACC_CHECKSECTION_DIR 911 /* ACC Fortran */
#define ACC_END_CHECKSECTION_DIR 912 /* ACC Fortran */ #define ACC_END_CHECKSECTION_DIR 912 /* ACC Fortran */
#define ACC_ROUTINE_DIR 913 /* ACC Fortran */ #define ACC_ROUTINE_DIR 913 /* ACC Fortran */
#define ACC_DECLARE_DIR 914 /* ACC Fortran */
#define ACC_TIE_OP 930 /* ACC Fortran */ #define ACC_TIE_OP 930 /* ACC Fortran */
#define ACC_INLOCAL_OP 931 /* ACC Fortran */ #define ACC_INLOCAL_OP 931 /* ACC Fortran */

View File

@@ -576,6 +576,7 @@ script using "tag". Run make tag.h to regenerate this file */
tag [ ACC_CHECKSECTION_DIR ] = "ACC_CHECKSECTION_DIR"; tag [ ACC_CHECKSECTION_DIR ] = "ACC_CHECKSECTION_DIR";
tag [ ACC_END_CHECKSECTION_DIR ] = "ACC_END_CHECKSECTION_DIR"; tag [ ACC_END_CHECKSECTION_DIR ] = "ACC_END_CHECKSECTION_DIR";
tag [ ACC_ROUTINE_DIR ] = "ACC_ROUTINE_DIR"; tag [ ACC_ROUTINE_DIR ] = "ACC_ROUTINE_DIR";
tag [ ACC_DECLARE_DIR ] = "ACC_DECLARE_DIR";
tag [ ACC_TIE_OP ] = "ACC_TIE_OP"; tag [ ACC_TIE_OP ] = "ACC_TIE_OP";
tag [ ACC_INLOCAL_OP ] = "ACC_INLOCAL_OP"; tag [ ACC_INLOCAL_OP ] = "ACC_INLOCAL_OP";

View File

@@ -443,6 +443,7 @@ DEFNODECODE(DUMMY_REF, "nodetext",'r',0,LLNODE, '_','_','s','_','_')
DEFNODECODE(ACC_CALL_STMT,"nodetext",'s',2,BIFNODE, '_','_','_','_','_') DEFNODECODE(ACC_CALL_STMT,"nodetext",'s',2,BIFNODE, '_','_','_','_','_')
DEFNODECODE(DVM_NEW_VALUE_DIR,"nodetext",'s',1,BIFNODE, '_','_','_','_','_') DEFNODECODE(DVM_NEW_VALUE_DIR,"nodetext",'s',1,BIFNODE, '_','_','_','_','_')
DEFNODECODE(ACC_ROUTINE_DIR,"nodetext",'s',1,BIFNODE, '_','_','_','_','_') DEFNODECODE(ACC_ROUTINE_DIR,"nodetext",'s',1,BIFNODE, '_','_','_','_','_')
DEFNODECODE(ACC_DECLARE_DIR,"nodetext",'s',1,BIFNODE, '_','_','_','_','_')
/* SAPFOR */ /* SAPFOR */
DEFNODECODE(SPF_NOINLINE_OP, "nodetext",'e',0,LLNODE, '_','_','_','_','_') DEFNODECODE(SPF_NOINLINE_OP, "nodetext",'e',0,LLNODE, '_','_','_','_','_')

View File

@@ -270,7 +270,9 @@ DEFNODECODE(ACC_CHECKSECTION_DIR, "%CMNT!DVM$%PUTTABCOMTHOSTSECTION%NL",
's',0,BIFNODE) 's',0,BIFNODE)
DEFNODECODE(ACC_END_CHECKSECTION_DIR,"%CMNT!DVM$%PUTTABCOMTEND HOSTSECTION%NL", DEFNODECODE(ACC_END_CHECKSECTION_DIR,"%CMNT!DVM$%PUTTABCOMTEND HOSTSECTION%NL",
's',0,BIFNODE) 's',0,BIFNODE)
DEFNODECODE(ACC_ROUTINE_DIR, "%CMNT!DVM$%PUTTABCOMTROUTINE %LL1%NL", DEFNODECODE(ACC_ROUTINE_DIR, "%CMNT!DVM$%PUTTABCOMTROUTINE%IF(%LL1!=%NULL), %LL1%NL",
's',1,BIFNODE)
DEFNODECODE(ACC_DECLARE_DIR, "%CMNT!DVM$%PUTTABCOMTDECLARE %LL1%NL",
's',1,BIFNODE) 's',1,BIFNODE)
DEFNODECODE(OMP_NOWAIT, "NOWAIT", DEFNODECODE(OMP_NOWAIT, "NOWAIT",

View File

@@ -107,6 +107,7 @@
#define ACC_CHECKSECTION_DIR 911 /* ACC Fortran */ #define ACC_CHECKSECTION_DIR 911 /* ACC Fortran */
#define ACC_END_CHECKSECTION_DIR 912 /* ACC Fortran */ #define ACC_END_CHECKSECTION_DIR 912 /* ACC Fortran */
#define ACC_ROUTINE_DIR 913 /* ACC Fortran */ #define ACC_ROUTINE_DIR 913 /* ACC Fortran */
#define ACC_DECLARE_DIR 914 /* ACC Fortran */
#define ACC_TIE_OP 930 /* ACC Fortran */ #define ACC_TIE_OP 930 /* ACC Fortran */
#define ACC_INLOCAL_OP 931 /* ACC Fortran */ #define ACC_INLOCAL_OP 931 /* ACC Fortran */

View File

@@ -1,10 +1,12 @@
acc_specification: acc_declare
| acc_routine
;
acc_directive: acc_region acc_directive: acc_region
| acc_end_region | acc_end_region
| acc_checksection | acc_checksection
| acc_end_checksection | acc_end_checksection
| acc_get_actual | acc_get_actual
| acc_actual | acc_actual
| acc_routine
; ;
acc_region: ACC_REGION end_spec opt_clause acc_region: ACC_REGION end_spec opt_clause
@@ -99,13 +101,45 @@ acc_end_checksection: ACC_END_CHECKSECTION
{ $$ = get_bfnd(fi,ACC_END_CHECKSECTION_DIR,SMNULL,LLNULL,LLNULL,LLNULL);} { $$ = get_bfnd(fi,ACC_END_CHECKSECTION_DIR,SMNULL,LLNULL,LLNULL,LLNULL);}
; ;
acc_routine: ACC_ROUTINE in_dcl opt_targets_clause acc_declare: ACC_DECLARE in_dcl opt_double_colon acc_declare_list
{
$$ = get_bfnd(fi,ACC_DECLARE_DIR, SMNULL, $4, LLNULL, LLNULL);
}
;
acc_declare_list: declare_var
{ $$ = make_llnd(fi,EXPR_LIST, $1, LLNULL, SMNULL); }
| acc_declare_list COMMA declare_var
{ $$ = set_ll_list($1, $3, EXPR_LIST); }
;
declare_var: name
{
PTR_SYMB s;
s = make_scalar($1,TYNULL,LOCAL);
if((s->attr & PROCESSORS_BIT) ||(s->attr & TASK_BIT) || (s->attr & TEMPLATE_BIT) || (s->attr & ALIGN_BIT) || (s->attr & DISTRIBUTE_BIT) || (s->attr & DYNAMIC_BIT) || (s->attr & HEAP_BIT)|| (s->attr & DVM_POINTER_BIT) || (s->attr & INHERIT_BIT) ||(s->attr & SHADOW_BIT))
errstr("Inconsistent declaration of identifier %s", s->ident, 16);
$$ = make_llnd(fi,VAR_REF, LLNULL, LLNULL, s);
}
;
acc_routine: ACC_ROUTINE in_dcl opt_routine_clauses
{ $$ = get_bfnd(fi,ACC_ROUTINE_DIR,SMNULL,$3,LLNULL,LLNULL);} { $$ = get_bfnd(fi,ACC_ROUTINE_DIR,SMNULL,$3,LLNULL,LLNULL);}
; ;
opt_targets_clause: needkeyword keywordoff opt_routine_clauses:
{ $$ = LLNULL; } { $$ = LLNULL;}
| needkeyword targets_clause | routine_clause_list
{ $$ = $2;} { $$ = $1;}
; ;
routine_clause_list: routine_clause
{ $$ = set_ll_list($1,LLNULL,EXPR_LIST); }
| routine_clause_list routine_clause
{ $$ = set_ll_list($1,$2,EXPR_LIST); }
;
routine_clause: COMMA needkeyword PRIVATE LEFTPAR acc_declare_list RIGHTPAR
{ $$ = make_llnd(fi,ACC_PRIVATE_OP,$5,LLNULL,SMNULL);}
| COMMA needkeyword targets_clause
{ $$ = $3;}
;

View File

@@ -269,10 +269,12 @@ static int in_vec = NO; /* set if processing array constructor */
%type <ll_node> paralleldo_clause_list paralleldo_clause %type <ll_node> paralleldo_clause_list paralleldo_clause
/* FORTRAN ACC */ /* FORTRAN ACC */
%type <bf_node> acc_specification acc_declare
%type <bf_node> acc_directive acc_region acc_end_region acc_checksection acc_end_checksection %type <bf_node> acc_directive acc_region acc_end_region acc_checksection acc_end_checksection
%type <bf_node> acc_get_actual acc_actual acc_routine %type <bf_node> acc_get_actual acc_actual acc_routine
%type <ll_node> opt_clause acc_clause_list acc_clause data_clause async_clause targets_clause %type <ll_node> opt_clause acc_clause_list acc_clause data_clause async_clause targets_clause
%type <ll_node> acc_var_list computer_list computer opt_targets_clause %type <ll_node> acc_var_list computer_list computer opt_routine_clauses routine_clause_list routine_clause
%type <ll_node> acc_declare_list declare_var
/* new clauses for PARALLEL directive */ /* new clauses for PARALLEL directive */
%type <ll_node> private_spec cuda_block_spec sizelist %type <ll_node> private_spec cuda_block_spec sizelist
@@ -852,6 +854,7 @@ spec: type_dcl
| common | common
| dimension | dimension
| dvm_specification /* FDVM */ | dvm_specification /* FDVM */
| acc_specification /* FDVM */
| external | external
| intrinsic | intrinsic
| equivalence | equivalence

File diff suppressed because it is too large Load Diff

View File

@@ -1,14 +1,13 @@
/* A Bison parser, made by GNU Bison 2.3. */ /* A Bison parser, made by GNU Bison 3.0.4. */
/* Skeleton interface for Bison's Yacc-like parsers in C /* Bison interface for Yacc-like parsers in C
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option) the Free Software Foundation, either version 3 of the License, or
any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -16,9 +15,7 @@
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program. If not, see <http://www.gnu.org/licenses/>. */
Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
/* As a special exception, you may create a larger work that contains /* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work part or all of the Bison parser skeleton and distribute that work
@@ -33,12 +30,21 @@
This special exception was added by the Free Software Foundation in This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */ version 2.2 of Bison. */
/* Tokens. */ #ifndef YY_YY_GRAM1_TAB_H_INCLUDED
# define YY_YY_GRAM1_TAB_H_INCLUDED
/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
#if YYDEBUG
extern int yydebug;
#endif
/* Token type. */
#ifndef YYTOKENTYPE #ifndef YYTOKENTYPE
# define YYTOKENTYPE # define YYTOKENTYPE
/* Put the tokens into the symbol table, so that GDB and other debuggers enum yytokentype
know about them. */ {
enum yytokentype {
PERCENT = 1, PERCENT = 1,
AMPERSAND = 2, AMPERSAND = 2,
ASTER = 3, ASTER = 3,
@@ -359,411 +365,54 @@
ACC_CUDA_BLOCK = 318, ACC_CUDA_BLOCK = 318,
ACC_ROUTINE = 319, ACC_ROUTINE = 319,
ACC_TIE = 320, ACC_TIE = 320,
BY = 321, ACC_DECLARE = 321,
IO_MODE = 322, BY = 322,
CP_CREATE = 323, IO_MODE = 323,
CP_LOAD = 324, CP_CREATE = 324,
CP_SAVE = 325, CP_LOAD = 325,
CP_WAIT = 326, CP_SAVE = 326,
FILES = 327, CP_WAIT = 327,
VARLIST = 328, FILES = 328,
STATUS = 329, VARLIST = 329,
EXITINTERVAL = 330, STATUS = 330,
TEMPLATE_CREATE = 331, EXITINTERVAL = 331,
TEMPLATE_DELETE = 332, TEMPLATE_CREATE = 332,
SPF_ANALYSIS = 333, TEMPLATE_DELETE = 333,
SPF_PARALLEL = 334, SPF_ANALYSIS = 334,
SPF_TRANSFORM = 335, SPF_PARALLEL = 335,
SPF_NOINLINE = 336, SPF_TRANSFORM = 336,
SPF_PARALLEL_REG = 337, SPF_NOINLINE = 337,
SPF_END_PARALLEL_REG = 338, SPF_PARALLEL_REG = 338,
SPF_EXPAND = 339, SPF_END_PARALLEL_REG = 339,
SPF_FISSION = 340, SPF_EXPAND = 340,
SPF_SHRINK = 341, SPF_FISSION = 341,
SPF_CHECKPOINT = 342, SPF_SHRINK = 342,
SPF_EXCEPT = 343, SPF_CHECKPOINT = 343,
SPF_FILES_COUNT = 344, SPF_EXCEPT = 344,
SPF_INTERVAL = 345, SPF_FILES_COUNT = 345,
SPF_TIME = 346, SPF_INTERVAL = 346,
SPF_ITER = 347, SPF_TIME = 347,
SPF_FLEXIBLE = 348, SPF_ITER = 348,
SPF_APPLY_REGION = 349, SPF_FLEXIBLE = 349,
SPF_APPLY_FRAGMENT = 350, SPF_APPLY_REGION = 350,
SPF_CODE_COVERAGE = 351, SPF_APPLY_FRAGMENT = 351,
SPF_UNROLL = 352, SPF_CODE_COVERAGE = 352,
SPF_MERGE = 353, SPF_UNROLL = 353,
SPF_COVER = 354, SPF_MERGE = 354,
SPF_PROCESS_PRIVATE = 355, SPF_COVER = 355,
BINARY_OP = 358, SPF_PROCESS_PRIVATE = 356,
UNARY_OP = 359 BINARY_OP = 359,
UNARY_OP = 360
}; };
#endif #endif
/* Tokens. */
#define PERCENT 1
#define AMPERSAND 2
#define ASTER 3
#define CLUSTER 4
#define COLON 5
#define COMMA 6
#define DASTER 7
#define DEFINED_OPERATOR 8
#define DOT 9
#define DQUOTE 10
#define GLOBAL_A 11
#define LEFTAB 12
#define LEFTPAR 13
#define MINUS 14
#define PLUS 15
#define POINT_TO 16
#define QUOTE 17
#define RIGHTAB 18
#define RIGHTPAR 19
#define AND 20
#define DSLASH 21
#define EQV 22
#define EQ 23
#define EQUAL 24
#define FFALSE 25
#define GE 26
#define GT 27
#define LE 28
#define LT 29
#define NE 30
#define NEQV 31
#define NOT 32
#define OR 33
#define TTRUE 34
#define SLASH 35
#define XOR 36
#define REFERENCE 37
#define AT 38
#define ACROSS 39
#define ALIGN_WITH 40
#define ALIGN 41
#define ALLOCATABLE 42
#define ALLOCATE 43
#define ARITHIF 44
#define ASSIGNMENT 45
#define ASSIGN 46
#define ASSIGNGOTO 47
#define ASYNCHRONOUS 48
#define ASYNCID 49
#define ASYNCWAIT 50
#define BACKSPACE 51
#define BAD_CCONST 52
#define BAD_SYMBOL 53
#define BARRIER 54
#define BLOCKDATA 55
#define BLOCK 56
#define BOZ_CONSTANT 57
#define BYTE 58
#define CALL 59
#define CASE 60
#define CHARACTER 61
#define CHAR_CONSTANT 62
#define CHECK 63
#define CLOSE 64
#define COMMON 65
#define COMPLEX 66
#define COMPGOTO 67
#define CONSISTENT_GROUP 68
#define CONSISTENT_SPEC 69
#define CONSISTENT_START 70
#define CONSISTENT_WAIT 71
#define CONSISTENT 72
#define CONSTRUCT_ID 73
#define CONTAINS 74
#define CONTINUE 75
#define CORNER 76
#define CYCLE 77
#define DATA 78
#define DEALLOCATE 79
#define HPF_TEMPLATE 80
#define DEBUG 81
#define DEFAULT_CASE 82
#define DEFINE 83
#define DERIVED 84
#define DIMENSION 85
#define DISTRIBUTE 86
#define DOWHILE 87
#define DOUBLEPRECISION 88
#define DOUBLECOMPLEX 89
#define DP_CONSTANT 90
#define DVM_POINTER 91
#define DYNAMIC 92
#define ELEMENTAL 93
#define ELSE 94
#define ELSEIF 95
#define ELSEWHERE 96
#define ENDASYNCHRONOUS 97
#define ENDDEBUG 98
#define ENDINTERVAL 99
#define ENDUNIT 100
#define ENDDO 101
#define ENDFILE 102
#define ENDFORALL 103
#define ENDIF 104
#define ENDINTERFACE 105
#define ENDMODULE 106
#define ENDON 107
#define ENDSELECT 108
#define ENDTASK_REGION 109
#define ENDTYPE 110
#define ENDWHERE 111
#define ENTRY 112
#define EXIT 113
#define EOLN 114
#define EQUIVALENCE 115
#define ERROR 116
#define EXTERNAL 117
#define F90 118
#define FIND 119
#define FORALL 120
#define FORMAT 121
#define FUNCTION 122
#define GATE 123
#define GEN_BLOCK 124
#define HEAP 125
#define HIGH 126
#define IDENTIFIER 127
#define IMPLICIT 128
#define IMPLICITNONE 129
#define INCLUDE_TO 130
#define INCLUDE 131
#define INDEPENDENT 132
#define INDIRECT_ACCESS 133
#define INDIRECT_GROUP 134
#define INDIRECT 135
#define INHERIT 136
#define INQUIRE 137
#define INTERFACEASSIGNMENT 138
#define INTERFACEOPERATOR 139
#define INTERFACE 140
#define INTRINSIC 141
#define INTEGER 142
#define INTENT 143
#define INTERVAL 144
#define INOUT 145
#define IN 146
#define INT_CONSTANT 147
#define LABEL 148
#define LABEL_DECLARE 149
#define LET 150
#define LOCALIZE 151
#define LOGICAL 152
#define LOGICALIF 153
#define LOOP 154
#define LOW 155
#define MAXLOC 156
#define MAX 157
#define MAP 158
#define MINLOC 159
#define MIN 160
#define MODULE_PROCEDURE 161
#define MODULE 162
#define MULT_BLOCK 163
#define NAMEEQ 164
#define NAMELIST 165
#define NEW_VALUE 166
#define NEW 167
#define NULLIFY 168
#define OCTAL_CONSTANT 169
#define ONLY 170
#define ON 171
#define ON_DIR 172
#define ONTO 173
#define OPEN 174
#define OPERATOR 175
#define OPTIONAL 176
#define OTHERWISE 177
#define OUT 178
#define OWN 179
#define PARALLEL 180
#define PARAMETER 181
#define PAUSE 182
#define PLAINDO 183
#define PLAINGOTO 184
#define POINTER 185
#define POINTERLET 186
#define PREFETCH 187
#define PRINT 188
#define PRIVATE 189
#define PRODUCT 190
#define PROGRAM 191
#define PUBLIC 192
#define PURE 193
#define RANGE 194
#define READ 195
#define REALIGN_WITH 196
#define REALIGN 197
#define REAL 198
#define REAL_CONSTANT 199
#define RECURSIVE 200
#define REDISTRIBUTE_NEW 201
#define REDISTRIBUTE 202
#define REDUCTION_GROUP 203
#define REDUCTION_START 204
#define REDUCTION_WAIT 205
#define REDUCTION 206
#define REMOTE_ACCESS_SPEC 207
#define REMOTE_ACCESS 208
#define REMOTE_GROUP 209
#define RESET 210
#define RESULT 211
#define RETURN 212
#define REWIND 213
#define SAVE 214
#define SECTION 215
#define SELECT 216
#define SEQUENCE 217
#define SHADOW_ADD 218
#define SHADOW_COMPUTE 219
#define SHADOW_GROUP 220
#define SHADOW_RENEW 221
#define SHADOW_START_SPEC 222
#define SHADOW_START 223
#define SHADOW_WAIT_SPEC 224
#define SHADOW_WAIT 225
#define SHADOW 226
#define STAGE 227
#define STATIC 228
#define STAT 229
#define STOP 230
#define SUBROUTINE 231
#define SUM 232
#define SYNC 233
#define TARGET 234
#define TASK 235
#define TASK_REGION 236
#define THEN 237
#define TO 238
#define TRACEON 239
#define TRACEOFF 240
#define TRUNC 241
#define TYPE 242
#define TYPE_DECL 243
#define UNDER 244
#define UNKNOWN 245
#define USE 246
#define VIRTUAL 247
#define VARIABLE 248
#define WAIT 249
#define WHERE 250
#define WHERE_ASSIGN 251
#define WHILE 252
#define WITH 253
#define WRITE 254
#define COMMENT 255
#define WGT_BLOCK 256
#define HPF_PROCESSORS 257
#define IOSTAT 258
#define ERR 259
#define END 260
#define OMPDVM_ATOMIC 261
#define OMPDVM_BARRIER 262
#define OMPDVM_COPYIN 263
#define OMPDVM_COPYPRIVATE 264
#define OMPDVM_CRITICAL 265
#define OMPDVM_ONETHREAD 266
#define OMPDVM_DO 267
#define OMPDVM_DYNAMIC 268
#define OMPDVM_ENDCRITICAL 269
#define OMPDVM_ENDDO 270
#define OMPDVM_ENDMASTER 271
#define OMPDVM_ENDORDERED 272
#define OMPDVM_ENDPARALLEL 273
#define OMPDVM_ENDPARALLELDO 274
#define OMPDVM_ENDPARALLELSECTIONS 275
#define OMPDVM_ENDPARALLELWORKSHARE 276
#define OMPDVM_ENDSECTIONS 277
#define OMPDVM_ENDSINGLE 278
#define OMPDVM_ENDWORKSHARE 279
#define OMPDVM_FIRSTPRIVATE 280
#define OMPDVM_FLUSH 281
#define OMPDVM_GUIDED 282
#define OMPDVM_LASTPRIVATE 283
#define OMPDVM_MASTER 284
#define OMPDVM_NOWAIT 285
#define OMPDVM_NONE 286
#define OMPDVM_NUM_THREADS 287
#define OMPDVM_ORDERED 288
#define OMPDVM_PARALLEL 289
#define OMPDVM_PARALLELDO 290
#define OMPDVM_PARALLELSECTIONS 291
#define OMPDVM_PARALLELWORKSHARE 292
#define OMPDVM_RUNTIME 293
#define OMPDVM_SECTION 294
#define OMPDVM_SECTIONS 295
#define OMPDVM_SCHEDULE 296
#define OMPDVM_SHARED 297
#define OMPDVM_SINGLE 298
#define OMPDVM_THREADPRIVATE 299
#define OMPDVM_WORKSHARE 300
#define OMPDVM_NODES 301
#define OMPDVM_IF 302
#define IAND 303
#define IEOR 304
#define IOR 305
#define ACC_REGION 306
#define ACC_END_REGION 307
#define ACC_CHECKSECTION 308
#define ACC_END_CHECKSECTION 309
#define ACC_GET_ACTUAL 310
#define ACC_ACTUAL 311
#define ACC_TARGETS 312
#define ACC_ASYNC 313
#define ACC_HOST 314
#define ACC_CUDA 315
#define ACC_LOCAL 316
#define ACC_INLOCAL 317
#define ACC_CUDA_BLOCK 318
#define ACC_ROUTINE 319
#define ACC_TIE 320
#define BY 321
#define IO_MODE 322
#define CP_CREATE 323
#define CP_LOAD 324
#define CP_SAVE 325
#define CP_WAIT 326
#define FILES 327
#define VARLIST 328
#define STATUS 329
#define EXITINTERVAL 330
#define TEMPLATE_CREATE 331
#define TEMPLATE_DELETE 332
#define SPF_ANALYSIS 333
#define SPF_PARALLEL 334
#define SPF_TRANSFORM 335
#define SPF_NOINLINE 336
#define SPF_PARALLEL_REG 337
#define SPF_END_PARALLEL_REG 338
#define SPF_EXPAND 339
#define SPF_FISSION 340
#define SPF_SHRINK 341
#define SPF_CHECKPOINT 342
#define SPF_EXCEPT 343
#define SPF_FILES_COUNT 344
#define SPF_INTERVAL 345
#define SPF_TIME 346
#define SPF_ITER 347
#define SPF_FLEXIBLE 348
#define SPF_APPLY_REGION 349
#define SPF_APPLY_FRAGMENT 350
#define SPF_CODE_COVERAGE 351
#define SPF_UNROLL 352
#define SPF_MERGE 353
#define SPF_COVER 354
#define SPF_PROCESS_PRIVATE 355
#define BINARY_OP 358
#define UNARY_OP 359
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
#line 438 "gram1.y" union YYSTYPE
{ {
#line 439 "gram1.y" /* yacc.c:1909 */
int token; int token;
char charv; char charv;
char *charp; char *charp;
@@ -773,14 +422,18 @@ typedef union YYSTYPE
PTR_TYPE data_type; PTR_TYPE data_type;
PTR_HASH hash_entry; PTR_HASH hash_entry;
PTR_LABEL label; PTR_LABEL label;
}
/* Line 1489 of yacc.c. */ #line 427 "gram1.tab.h" /* yacc.c:1909 */
#line 779 "gram1.tab.h" };
YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */ typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
#endif #endif
extern YYSTYPE yylval; extern YYSTYPE yylval;
int yyparse (void);
#endif /* !YY_YY_GRAM1_TAB_H_INCLUDED */

View File

@@ -318,41 +318,42 @@
%token ACC_CUDA_BLOCK 318 %token ACC_CUDA_BLOCK 318
%token ACC_ROUTINE 319 %token ACC_ROUTINE 319
%token ACC_TIE 320 %token ACC_TIE 320
%token BY 321 %token ACC_DECLARE 321
%token IO_MODE 322 %token BY 322
%token CP_CREATE 323 %token IO_MODE 323
%token CP_LOAD 324 %token CP_CREATE 324
%token CP_SAVE 325 %token CP_LOAD 325
%token CP_WAIT 326 %token CP_SAVE 326
%token FILES 327 %token CP_WAIT 327
%token VARLIST 328 %token FILES 328
%token STATUS 329 %token VARLIST 329
%token EXITINTERVAL 330 %token STATUS 330
%token TEMPLATE_CREATE 331 %token EXITINTERVAL 331
%token TEMPLATE_DELETE 332 %token TEMPLATE_CREATE 332
%token SPF_ANALYSIS 333 %token TEMPLATE_DELETE 333
%token SPF_PARALLEL 334 %token SPF_ANALYSIS 334
%token SPF_TRANSFORM 335 %token SPF_PARALLEL 335
%token SPF_NOINLINE 336 %token SPF_TRANSFORM 336
%token SPF_PARALLEL_REG 337 %token SPF_NOINLINE 337
%token SPF_END_PARALLEL_REG 338 %token SPF_PARALLEL_REG 338
%token SPF_EXPAND 339 %token SPF_END_PARALLEL_REG 339
%token SPF_FISSION 340 %token SPF_EXPAND 340
%token SPF_SHRINK 341 %token SPF_FISSION 341
%token SPF_CHECKPOINT 342 %token SPF_SHRINK 342
%token SPF_EXCEPT 343 %token SPF_CHECKPOINT 343
%token SPF_FILES_COUNT 344 %token SPF_EXCEPT 344
%token SPF_INTERVAL 345 %token SPF_FILES_COUNT 345
%token SPF_TIME 346 %token SPF_INTERVAL 346
%token SPF_ITER 347 %token SPF_TIME 347
%token SPF_FLEXIBLE 348 %token SPF_ITER 348
%token SPF_APPLY_REGION 349 %token SPF_FLEXIBLE 349
%token SPF_APPLY_FRAGMENT 350 %token SPF_APPLY_REGION 350
%token SPF_CODE_COVERAGE 351 %token SPF_APPLY_FRAGMENT 351
%token SPF_UNROLL 352 %token SPF_CODE_COVERAGE 352
%token SPF_MERGE 353 %token SPF_UNROLL 353
%token SPF_COVER 354 %token SPF_MERGE 354
%token SPF_PROCESS_PRIVATE 355 %token SPF_COVER 355
%token SPF_PROCESS_PRIVATE 356
%{ %{
#include <string.h> #include <string.h>
@@ -624,10 +625,12 @@ static int in_vec = NO; /* set if processing array constructor */
%type <ll_node> paralleldo_clause_list paralleldo_clause %type <ll_node> paralleldo_clause_list paralleldo_clause
/* FORTRAN ACC */ /* FORTRAN ACC */
%type <bf_node> acc_specification acc_declare
%type <bf_node> acc_directive acc_region acc_end_region acc_checksection acc_end_checksection %type <bf_node> acc_directive acc_region acc_end_region acc_checksection acc_end_checksection
%type <bf_node> acc_get_actual acc_actual acc_routine %type <bf_node> acc_get_actual acc_actual acc_routine
%type <ll_node> opt_clause acc_clause_list acc_clause data_clause async_clause targets_clause %type <ll_node> opt_clause acc_clause_list acc_clause data_clause async_clause targets_clause
%type <ll_node> acc_var_list computer_list computer opt_targets_clause %type <ll_node> acc_var_list computer_list computer opt_routine_clauses routine_clause_list routine_clause
%type <ll_node> acc_declare_list declare_var
/* new clauses for PARALLEL directive */ /* new clauses for PARALLEL directive */
%type <ll_node> private_spec cuda_block_spec sizelist %type <ll_node> private_spec cuda_block_spec sizelist
@@ -1207,6 +1210,7 @@ spec: type_dcl
| common | common
| dimension | dimension
| dvm_specification /* FDVM */ | dvm_specification /* FDVM */
| acc_specification /* FDVM */
| external | external
| intrinsic | intrinsic
| equivalence | equivalence
@@ -7845,13 +7849,15 @@ op_slash_0 : {
operator_slash = 0; operator_slash = 0;
}; };
acc_specification: acc_declare
| acc_routine
;
acc_directive: acc_region acc_directive: acc_region
| acc_end_region | acc_end_region
| acc_checksection | acc_checksection
| acc_end_checksection | acc_end_checksection
| acc_get_actual | acc_get_actual
| acc_actual | acc_actual
| acc_routine
; ;
acc_region: ACC_REGION end_spec opt_clause acc_region: ACC_REGION end_spec opt_clause
@@ -7946,16 +7952,48 @@ acc_end_checksection: ACC_END_CHECKSECTION
{ $$ = get_bfnd(fi,ACC_END_CHECKSECTION_DIR,SMNULL,LLNULL,LLNULL,LLNULL);} { $$ = get_bfnd(fi,ACC_END_CHECKSECTION_DIR,SMNULL,LLNULL,LLNULL,LLNULL);}
; ;
acc_routine: ACC_ROUTINE in_dcl opt_targets_clause acc_declare: ACC_DECLARE in_dcl opt_double_colon acc_declare_list
{
$$ = get_bfnd(fi,ACC_DECLARE_DIR, SMNULL, $4, LLNULL, LLNULL);
}
;
acc_declare_list: declare_var
{ $$ = make_llnd(fi,EXPR_LIST, $1, LLNULL, SMNULL); }
| acc_declare_list COMMA declare_var
{ $$ = set_ll_list($1, $3, EXPR_LIST); }
;
declare_var: name
{
PTR_SYMB s;
s = make_scalar($1,TYNULL,LOCAL);
if((s->attr & PROCESSORS_BIT) ||(s->attr & TASK_BIT) || (s->attr & TEMPLATE_BIT) || (s->attr & ALIGN_BIT) || (s->attr & DISTRIBUTE_BIT) || (s->attr & DYNAMIC_BIT) || (s->attr & HEAP_BIT)|| (s->attr & DVM_POINTER_BIT) || (s->attr & INHERIT_BIT) ||(s->attr & SHADOW_BIT))
errstr("Inconsistent declaration of identifier %s", s->ident, 16);
$$ = make_llnd(fi,VAR_REF, LLNULL, LLNULL, s);
}
;
acc_routine: ACC_ROUTINE in_dcl opt_routine_clauses
{ $$ = get_bfnd(fi,ACC_ROUTINE_DIR,SMNULL,$3,LLNULL,LLNULL);} { $$ = get_bfnd(fi,ACC_ROUTINE_DIR,SMNULL,$3,LLNULL,LLNULL);}
; ;
opt_targets_clause: needkeyword keywordoff opt_routine_clauses:
{ $$ = LLNULL; } { $$ = LLNULL;}
| needkeyword targets_clause | routine_clause_list
{ $$ = $2;} { $$ = $1;}
; ;
routine_clause_list: routine_clause
{ $$ = set_ll_list($1,LLNULL,EXPR_LIST); }
| routine_clause_list routine_clause
{ $$ = set_ll_list($1,$2,EXPR_LIST); }
;
routine_clause: COMMA needkeyword PRIVATE LEFTPAR acc_declare_list RIGHTPAR
{ $$ = make_llnd(fi,ACC_PRIVATE_OP,$5,LLNULL,SMNULL);}
| COMMA needkeyword targets_clause
{ $$ = $3;}
;
spf_directive: spf_analysis spf_directive: spf_analysis
| spf_parallel | spf_parallel
| spf_transform | spf_transform

View File

@@ -2214,6 +2214,9 @@ analyz()
} else if (eqn(13, nextch, "doublecomplex")) { } else if (eqn(13, nextch, "doublecomplex")) {
stkey = DOUBLECOMPLEX; stkey = DOUBLECOMPLEX;
nextch += 13; nextch += 13;
} else if (eqn(7, nextch, "declare")) { /*ACC*/
stkey = ACC_DECLARE;
nextch += 7;
} else if (eqn(2, nextch, "do")) { /*OMP*/ } else if (eqn(2, nextch, "do")) { /*OMP*/
if (OMP_program == 1) { /*OMP*/ if (OMP_program == 1) { /*OMP*/
stkey = OMPDVM_DO; /*OMP*/ stkey = OMPDVM_DO; /*OMP*/

View File

@@ -788,6 +788,7 @@ set_stat_list(old_list, stat)
case (DVM_CONSISTENT_DIR): case (DVM_CONSISTENT_DIR):
case (DVM_ASYNCID_DIR): case (DVM_ASYNCID_DIR):
case (ACC_ROUTINE_DIR): case (ACC_ROUTINE_DIR):
case (ACC_DECLARE_DIR):
case (DATA_DECL): case (DATA_DECL):
case (EXTERN_STAT): case (EXTERN_STAT):
case (INTRIN_STAT): case (INTRIN_STAT):

View File

@@ -1952,6 +1952,8 @@ copy_module_scope(sym_mod,list)
continue; continue;
if(list && in_rename_list(source,list)) if(list && in_rename_list(source,list))
continue; continue;
if(!strcmp(source->ident, "***"))
continue;
if((copy=just_look_up_sym_in_scope(cur_scope(),source->ident)) && copy->id_attr && copy->id_attr->entry.Template.tag==sym_mod->entry.Template.func_hedr->id) if((copy=just_look_up_sym_in_scope(cur_scope(),source->ident)) && copy->id_attr && copy->id_attr->entry.Template.tag==sym_mod->entry.Template.func_hedr->id)
continue; continue;
new_symb = make_local_entity(source->parent, source->variant, source->type, LOCAL); new_symb = make_local_entity(source->parent, source->variant, source->type, LOCAL);

View File

@@ -574,6 +574,7 @@
#define ACC_CHECKSECTION_DIR 911 /* ACC Fortran */ #define ACC_CHECKSECTION_DIR 911 /* ACC Fortran */
#define ACC_END_CHECKSECTION_DIR 912 /* ACC Fortran */ #define ACC_END_CHECKSECTION_DIR 912 /* ACC Fortran */
#define ACC_ROUTINE_DIR 913 /* ACC Fortran */ #define ACC_ROUTINE_DIR 913 /* ACC Fortran */
#define ACC_DECLARE_DIR 914 /* ACC Fortran */
#define ACC_TIE_OP 930 /* ACC Fortran */ #define ACC_TIE_OP 930 /* ACC Fortran */
#define ACC_INLOCAL_OP 931 /* ACC Fortran */ #define ACC_INLOCAL_OP 931 /* ACC Fortran */

View File

@@ -576,6 +576,7 @@ script using "tag". Run make tag.h to regenerate this file */
tag [ ACC_CHECKSECTION_DIR ] = "ACC_CHECKSECTION_DIR"; tag [ ACC_CHECKSECTION_DIR ] = "ACC_CHECKSECTION_DIR";
tag [ ACC_END_CHECKSECTION_DIR ] = "ACC_END_CHECKSECTION_DIR"; tag [ ACC_END_CHECKSECTION_DIR ] = "ACC_END_CHECKSECTION_DIR";
tag [ ACC_ROUTINE_DIR ] = "ACC_ROUTINE_DIR"; tag [ ACC_ROUTINE_DIR ] = "ACC_ROUTINE_DIR";
tag [ ACC_DECLARE_DIR ] = "ACC_DECLARE_DIR";
tag [ ACC_TIE_OP ] = "ACC_TIE_OP"; tag [ ACC_TIE_OP ] = "ACC_TIE_OP";
tag [ ACC_INLOCAL_OP ] = "ACC_INLOCAL_OP"; tag [ ACC_INLOCAL_OP ] = "ACC_INLOCAL_OP";

View File

@@ -318,38 +318,39 @@
#define ACC_CUDA_BLOCK 318 #define ACC_CUDA_BLOCK 318
#define ACC_ROUTINE 319 #define ACC_ROUTINE 319
#define ACC_TIE 320 #define ACC_TIE 320
#define BY 321 #define ACC_DECLARE 321
#define IO_MODE 322 #define BY 322
#define CP_CREATE 323 #define IO_MODE 323
#define CP_LOAD 324 #define CP_CREATE 324
#define CP_SAVE 325 #define CP_LOAD 325
#define CP_WAIT 326 #define CP_SAVE 326
#define FILES 327 #define CP_WAIT 327
#define VARLIST 328 #define FILES 328
#define STATUS 329 #define VARLIST 329
#define EXITINTERVAL 330 #define STATUS 330
#define TEMPLATE_CREATE 331 #define EXITINTERVAL 331
#define TEMPLATE_DELETE 332 #define TEMPLATE_CREATE 332
#define SPF_ANALYSIS 333 #define TEMPLATE_DELETE 333
#define SPF_PARALLEL 334 #define SPF_ANALYSIS 334
#define SPF_TRANSFORM 335 #define SPF_PARALLEL 335
#define SPF_NOINLINE 336 #define SPF_TRANSFORM 336
#define SPF_PARALLEL_REG 337 #define SPF_NOINLINE 337
#define SPF_END_PARALLEL_REG 338 #define SPF_PARALLEL_REG 338
#define SPF_EXPAND 339 #define SPF_END_PARALLEL_REG 339
#define SPF_FISSION 340 #define SPF_EXPAND 340
#define SPF_SHRINK 341 #define SPF_FISSION 341
#define SPF_CHECKPOINT 342 #define SPF_SHRINK 342
#define SPF_EXCEPT 343 #define SPF_CHECKPOINT 343
#define SPF_FILES_COUNT 344 #define SPF_EXCEPT 344
#define SPF_INTERVAL 345 #define SPF_FILES_COUNT 345
#define SPF_TIME 346 #define SPF_INTERVAL 346
#define SPF_ITER 347 #define SPF_TIME 347
#define SPF_FLEXIBLE 348 #define SPF_ITER 348
#define SPF_APPLY_REGION 349 #define SPF_FLEXIBLE 349
#define SPF_APPLY_FRAGMENT 350 #define SPF_APPLY_REGION 350
#define SPF_CODE_COVERAGE 351 #define SPF_APPLY_FRAGMENT 351
#define SPF_UNROLL 352 #define SPF_CODE_COVERAGE 352
#define SPF_MERGE 353 #define SPF_UNROLL 353
#define SPF_COVER 354 #define SPF_MERGE 354
#define SPF_PROCESS_PRIVATE 355 #define SPF_COVER 355
#define SPF_PROCESS_PRIVATE 356

View File

@@ -318,6 +318,7 @@ ACC_INLOCAL
ACC_CUDA_BLOCK ACC_CUDA_BLOCK
ACC_ROUTINE ACC_ROUTINE
ACC_TIE ACC_TIE
ACC_DECLARE
BY BY
IO_MODE IO_MODE
CP_CREATE CP_CREATE

View File

@@ -1,3 +1,3 @@
#pragma once #pragma once
#define VERSION_SPF "2372" #define VERSION_SPF "2373"