Skip to content
Snippets Groups Projects
Commit 72025e38 authored by Johannes Mey's avatar Johannes Mey
Browse files

improve AST of OpenACC

parent da567ba2
No related branches found
No related tags found
No related merge requests found
......@@ -32,6 +32,13 @@ List<Variable> var_list =
}
;
List<Variable> p_var_list =
LPAREN vl:(COMMA yyValue:variable)* RPAREN
{
yyValue = new List().addAll(vl.list());
}
;
List<Expr> expr_list =
e:expr el:(COMMA yyValue:expr)*
{
......@@ -42,6 +49,7 @@ List<Expr> expr_list =
//// // An AccStmt does not have a label or a comment (unlike Fortran statements).
//// // It must, however, begin with ""!$acc" and end with a line break
//// abstract AccStmt ;
//// abstract AccAbstractDataStmt ::= AccClause* ;
// constructs ------------------------------------------------------------------
......@@ -65,7 +73,7 @@ AccParallelConstruct acc_parallel_construct =
}
;
//// AccParallelStmt:AccStmt ::= AccClause* ;
//// AccParallelStmt:AccAbstractDataStmt ;
AccParallelStmt acc_parallel_stmt =
A_P A_PARALLEL LB
{
......@@ -96,7 +104,7 @@ AccKernelsConstruct acc_kernels_construct =
}
;
//// AccKernelsStmt:AccStmt ::= AccClause* ;
//// AccKernelsStmt:AccAbstractDataStmt ;
AccKernelsStmt acc_kernels_stmt =
A_P A_KERNELS LB
{
......@@ -127,7 +135,7 @@ AccDataConstruct acc_data_construct =
}
;
//// AccDataStmt:AccStmt ::= AccClause* ;
//// AccDataStmt:AccAbstractDataStmt ;
AccDataStmt acc_data_stmt =
A_P A_DATA LB
{
......@@ -296,7 +304,7 @@ AccParallelLoopConstruct acc_parallel_loop_construct =
}
;
//// AccParallelLoopStmt:AccStmt ::= AccClause* ;
//// AccParallelLoopStmt:AccAbstractDataStmt ;
AccParallelLoopStmt acc_parallel_loop_stmt =
A_P A_PARALLEL A_LOOP LB
{
......@@ -327,7 +335,7 @@ AccKernelsLoopConstruct acc_kernels_loop_construct =
}
;
//// AccKernelsLoopStmt:AccStmt ::= AccClause* ;
//// AccKernelsLoopStmt:AccAbstractDataStmt ;
AccKernelsLoopStmt acc_kernels_loop_stmt =
A_P A_KERNELS A_LOOP LB
{
......@@ -388,9 +396,9 @@ AccExitDataDirective acc_exit_data_directive =
//// // ACC 2.10
//// AccCacheDirective:AccDirective ::= Variable* ;
AccCacheDirective acc_cache_directive =
A_P A_CACHE LPAREN vl:var_list RPAREN LB
A_P A_CACHE list:p_var_list LB
{
yyValue = new AccCacheDirective(new Opt<Label>(), new Comment(new Opt<CommentContent>()), vl);
yyValue = new AccCacheDirective(new Opt<Label>(), new Comment(new Opt<CommentContent>()), list);
}
;
......@@ -471,19 +479,9 @@ List acc_clause_list =
public AccClause acc_clause =
acc_if_clause
/ acc_reduction_clause
/ acc_copy_clause
/ acc_copyin_clause
/ acc_copyout_clause
/ acc_create_clause
/ acc_delete_clause
/ acc_device_clause
/ acc_firstprivate_clause
/ acc_pcopy_clause
/ acc_pcopyin_clause
/ acc_pcopyout_clause
/ acc_pcreate_clause
/ acc_private_clause
/ acc_present_clause
/ acc_use_device_clause
/ acc_default_none_clause
/ acc_device_type_clause
......@@ -506,8 +504,95 @@ public AccClause acc_clause =
/ acc_bind_clause
/ acc_seq_clause
/ acc_shortloop_clause
/ acc_deviceptr_clause
/ acc_auto_clause
/ acc_data_clause
;
//// abstract AccDataClause:AccClause ::= Variable* ;
AccDataClause acc_data_clause =
acc_deviceptr_clause
/ acc_present_clause
/ acc_copy_clause
/ acc_copyin_clause
/ acc_copyout_clause
/ acc_create_clause
/ acc_delete_clause
;
//// AccDeviceptrClause:AccDataClause ;
AccDeviceptrClause acc_deviceptr_clause =
A_DEVICEPTR list:p_var_list
{
yyValue = new AccDeviceptrClause(list);
}
;
//// AccPresentClause:AccDataClause ;
AccPresentClause acc_present_clause =
A_PRESENT list:p_var_list
{
yyValue = new AccPresentClause(list);
}
;
//// AccCopyClause:AccDataClause ;
//// AccPresentOrCopyClause:AccCopyClause ;
AccCopyClause acc_copy_clause =
A_COPY list:p_var_list
{
yyValue = new AccCopyClause(list);
}
/ (A_PCOPY / A_PRESENT_OR_COPY) list:p_var_list
{
yyValue = new AccPresentOrCopyClause(list);
}
;
//// AccCopyInClause:AccDataClause ;
//// AccPresentOrCopyInClause:AccCopyClause ;
AccCopyInClause acc_copyin_clause =
A_COPYIN list:p_var_list
{
yyValue = new AccCopyInClause(list);
}
/ (A_PCOPYIN / A_PRESENT_OR_COPYIN) list:p_var_list
{
yyValue = new AccPresentOrCopyInClause(list);
}
;
//// AccCopyOutClause:AccDataClause ;
//// AccPresentOrCopyOutClause:AccCopyClause ;
AccCopyOutClause acc_copyin_clause =
A_COPYOUT list:p_var_list
{
yyValue = new AccCopyOutClause(list);
}
/ (A_PCOPYOUT / A_PRESENT_OR_COPYOUT) list:p_var_list
{
yyValue = new AccPresentOrCopyOutClause(list);
}
;
//// AccCreateClause:AccDataClause ;
//// AccPresentOrCreateClause:AccCreateClause ;
AccCreateClause acc_create_clause =
A_CREATE list:p_var_list
{
yyValue = new AccCreateClause(list);
}
/ (A_PCREATE / A_PRESENT_OR_CREATE) list:p_var_list
{
yyValue = new AccPresentOrCreateClause(list);
}
;
//// AccDeleteClause:AccDataClause ;
AccDeleteClause acc_delete_clause =
A_DELETE list:p_var_list
{
yyValue = new AccDeleteClause(list);
}
;
//// AccIfClause:AccClause ::= Condition:Expr ;
......@@ -560,65 +645,9 @@ AccOperator acc_operator =
/ A_NEQV { yyValue = new AccOperatorNEqv(); }
;
//// AccDeviceptrClause:AccClause ::= Variable* ;
AccDeviceptrClause acc_deviceptr_clause =
A_DEVICEPTR LPAREN list:var_list RPAREN
{
yyValue = new AccDeviceptrClause(list);
}
;
//// AccCopyClause:AccClause ::= Variable* ;
AccCopyClause acc_copy_clause =
A_COPY LPAREN list:var_list RPAREN
{
yyValue = new AccCopyClause(list);
}
;
//// AccCopyInClause:AccClause ::= Variable* ;
AccCopyInClause acc_copyin_clause =
A_COPYIN LPAREN list:var_list RPAREN
{
yyValue = new AccCopyInClause(list);
}
;
//// AccCopyOutClause:AccClause ::= Variable* ;
AccCopyOutClause acc_copyout_clause =
A_COPYOUT LPAREN list:var_list RPAREN
{
yyValue = new AccCopyOutClause(list);
}
;
//// AccCreateClause:AccClause ::= Variable* ;
AccCreateClause acc_create_clause =
A_CREATE LPAREN list:var_list RPAREN
{
yyValue = new AccCreateClause(list);
}
;
//// AccDeleteClause:AccClause ::= Variable* ;
AccDeleteClause acc_delete_clause =
A_DELETE LPAREN list:var_list RPAREN
{
yyValue = new AccDeleteClause(list);
}
;
//// AccPresentClause:AccClause ::= Variable* ;
AccPresentClause acc_present_clause =
A_PRESENT LPAREN list:var_list RPAREN
{
yyValue = new AccPresentClause(list);
}
;
//// AccDeviceClause:AccClause ::= Variable* ;
AccDeviceClause acc_device_clause =
A_DEVICE LPAREN list:var_list RPAREN
A_DEVICE list:p_var_list
{
yyValue = new AccDeviceClause(list);
}
......@@ -626,47 +655,15 @@ AccDeviceClause acc_device_clause =
//// AccFirstPrivateClause:AccClause ::= Variable* ;
AccFirstPrivateClause acc_firstprivate_clause =
A_FIRSTPRIVATE LPAREN list:var_list RPAREN
A_FIRSTPRIVATE list:p_var_list
{
yyValue = new AccFirstPrivateClause(list);
}
;
//// AccPresentOrCopyClause:AccClause ::= Variable* ;
AccPresentOrCopyClause acc_pcopy_clause =
(A_PCOPY / A_PRESENT_OR_COPY) LPAREN list:var_list RPAREN
{
yyValue = new AccPresentOrCopyClause(list);
}
;
//// AccPresentOrCopyInClause:AccClause ::= Variable* ;
AccPresentOrCopyInClause acc_pcopyin_clause =
(A_PCOPYIN / A_PRESENT_OR_COPYIN) LPAREN list:var_list RPAREN
{
yyValue = new AccPresentOrCopyInClause(list);
}
;
//// AccPresentOrCopyOutClause:AccClause ::= Variable* ;
AccPresentOrCopyOutClause acc_pcopyout_clause =
(A_PCOPYOUT / A_PRESENT_OR_COPYOUT) LPAREN list:var_list RPAREN
{
yyValue = new AccPresentOrCopyOutClause(list);
}
;
//// AccPresentOrCreateClause:AccClause ::= Variable* ;
AccPresentOrCreateClause acc_pcreate_clause =
(A_PCREATE / A_PRESENT_OR_CREATE) LPAREN list:var_list RPAREN
{
yyValue = new AccPresentOrCreateClause(list);
}
;
//// AccPrivateClause:AccClause ::= Variable* ;
AccPrivateClause acc_private_clause =
A_PRIVATE LPAREN list:var_list RPAREN
A_PRIVATE list:p_var_list
{
yyValue = new AccPrivateClause(list);
}
......@@ -674,7 +671,7 @@ AccPrivateClause acc_private_clause =
//// AccUseDeviceClause:AccClause ::= Variable* ;
AccUseDeviceClause acc_use_device_clause =
A_USEDEVICE LPAREN list:var_list RPAREN
A_USEDEVICE list:p_var_list
{
yyValue = new AccUseDeviceClause(list);
}
......@@ -696,7 +693,7 @@ AccDeviceTypeClause acc_device_type_clause =
{
yyValue = new AccDeviceTypeStarClause();
}
/ (A_DEVICE_TYPE / A_DTYPE) LPAREN list:var_list RPAREN
/ (A_DEVICE_TYPE / A_DTYPE) list:p_var_list
{
yyValue = new AccDeviceTypeListClause(list);
}
......@@ -761,7 +758,7 @@ AccVectorLengthClause acc_vector_length_clause =
//// AccSelfClause:AccClause ::= Variable* ;
AccSelfClause acc_self_clause =
A_SELF LPAREN list:var_list RPAREN
A_SELF list:p_var_list
{
yyValue = new AccSelfClause(list);
}
......@@ -769,7 +766,7 @@ AccSelfClause acc_self_clause =
//// AccHostClause:AccClause ::= Variable* ;
AccHostClause acc_host_clause =
A_HOST LPAREN list:var_list RPAREN
A_HOST list:p_var_list
{
yyValue = new AccHostClause(list);
}
......@@ -846,7 +843,7 @@ AccVectorClause acc_vector_clause =
//// AccDeviceResidentClause:AccClause ::= Variable* ;
AccDeviceResidentClause acc_device_resident_clause =
A_DEVICE_RESIDENT LPAREN list:var_list RPAREN
A_DEVICE_RESIDENT list:p_var_list
{
yyValue = new AccDeviceResidentClause(list);
}
......@@ -854,7 +851,7 @@ AccDeviceResidentClause acc_device_resident_clause =
//// AccLinkClause:AccClause ::= Variable* ;
AccLinkClause acc_link_clause =
A_LINK LPAREN list:var_list RPAREN
A_LINK list:p_var_list
{
yyValue = new AccLinkClause(list);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment