From: peter klausler Date: Fri, 12 Jul 2019 16:30:19 +0000 (-0700) Subject: [flang] Refinements; builds and passes tests again X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bdec2cd8c955b97aa00325957e77653fd5bc50df;p=platform%2Fupstream%2Fllvm.git [flang] Refinements; builds and passes tests again Original-commit: flang-compiler/f18@a83410a4400a05b2b21e0207c605b5351bda6dbe Reviewed-on: https://github.com/flang-compiler/f18/pull/569 Tree-same-pre-rewrite: false --- diff --git a/flang/lib/parser/openmp-grammar.h b/flang/lib/parser/openmp-grammar.h index 3fc6a58..c499978 100644 --- a/flang/lib/parser/openmp-grammar.h +++ b/flang/lib/parser/openmp-grammar.h @@ -39,33 +39,34 @@ // OpenMP Directives and Clauses namespace Fortran::parser { +constexpr auto startOmpLine = skipStuffBeforeStatement >> "!$OMP "_sptok; constexpr auto endOmpLine = space >> endOfLine; // OpenMP Clauses // DEFAULT (PRIVATE | FIRSTPRIVATE | SHARED | NONE ) TYPE_PARSER(construct( - "PRIVATE"_id >> pure(OmpDefaultClause::Type::Private) || - "FIRSTPRIVATE"_id >> pure(OmpDefaultClause::Type::Firstprivate) || - "SHARED"_id >> pure(OmpDefaultClause::Type::Shared) || - "NONE"_id >> pure(OmpDefaultClause::Type::None))) + "PRIVATE" >> pure(OmpDefaultClause::Type::Private) || + "FIRSTPRIVATE" >> pure(OmpDefaultClause::Type::Firstprivate) || + "SHARED" >> pure(OmpDefaultClause::Type::Shared) || + "NONE" >> pure(OmpDefaultClause::Type::None))) // PROC_BIND(CLOSE | MASTER | SPREAD) TYPE_PARSER(construct( - "CLOSE"_id >> pure(OmpProcBindClause::Type::Close) || - "MASTER"_id >> pure(OmpProcBindClause::Type::Master) || - "SPREAD"_id >> pure(OmpProcBindClause::Type::Spread))) + "CLOSE" >> pure(OmpProcBindClause::Type::Close) || + "MASTER" >> pure(OmpProcBindClause::Type::Master) || + "SPREAD" >> pure(OmpProcBindClause::Type::Spread))) // MAP ([ [map-type-modifier[,]] map-type : ] list) // map-type-modifier -> ALWAYS // map-type -> TO | FROM | TOFROM | ALLOC | RELEASE | DELETE TYPE_PARSER(construct( - maybe("ALWAYS"_id >> construct() / maybe(","_tok)), + maybe("ALWAYS" >> construct() / maybe(","_tok)), "TO"_id >> pure(OmpMapType::Type::To) / ":"_tok || - "FROM"_id >> pure(OmpMapType::Type::From) / ":"_tok || - "TOFROM"_id >> pure(OmpMapType::Type::Tofrom) / ":"_tok || - "ALLOC"_id >> pure(OmpMapType::Type::Alloc) / ":"_tok || - "RELEASE"_id >> pure(OmpMapType::Type::Release) / ":"_tok || - "DELETE"_id >> pure(OmpMapType::Type::Delete) / ":"_tok)) + "FROM" >> pure(OmpMapType::Type::From) / ":"_tok || + "TOFROM" >> pure(OmpMapType::Type::Tofrom) / ":"_tok || + "ALLOC" >> pure(OmpMapType::Type::Alloc) / ":"_tok || + "RELEASE" >> pure(OmpMapType::Type::Release) / ":"_tok || + "DELETE" >> pure(OmpMapType::Type::Delete) / ":"_tok)) TYPE_PARSER(construct( maybe(Parser{}), Parser{})) @@ -75,37 +76,36 @@ TYPE_PARSER(construct( // kind -> STATIC | DYNAMIC | GUIDED | AUTO | RUNTIME // chunk_size -> ScalarIntExpr TYPE_PARSER(construct( - "MONOTONIC"_id >> pure(OmpScheduleModifierType::ModType::Monotonic) || - "NONMONOTONIC"_id >> pure(OmpScheduleModifierType::ModType::Nonmonotonic) || - "SIMD"_id >> pure(OmpScheduleModifierType::ModType::Simd))) + "MONOTONIC" >> pure(OmpScheduleModifierType::ModType::Monotonic) || + "NONMONOTONIC" >> pure(OmpScheduleModifierType::ModType::Nonmonotonic) || + "SIMD" >> pure(OmpScheduleModifierType::ModType::Simd))) TYPE_PARSER(construct(Parser{}, - maybe(","_tok >> Parser{}) / ":"_tok)) + maybe("," >> Parser{}) / ":")) TYPE_PARSER(construct(maybe(Parser{}), - "STATIC"_id >> pure(OmpScheduleClause::ScheduleType::Static) || - "DYNAMIC"_id >> pure(OmpScheduleClause::ScheduleType::Dynamic) || - "GUIDED"_id >> pure(OmpScheduleClause::ScheduleType::Guided) || - "AUTO"_id >> pure(OmpScheduleClause::ScheduleType::Auto) || - "RUNTIME"_id >> pure(OmpScheduleClause::ScheduleType::Runtime), - maybe(","_tok >> scalarIntExpr))) + "STATIC" >> pure(OmpScheduleClause::ScheduleType::Static) || + "DYNAMIC" >> pure(OmpScheduleClause::ScheduleType::Dynamic) || + "GUIDED" >> pure(OmpScheduleClause::ScheduleType::Guided) || + "AUTO" >> pure(OmpScheduleClause::ScheduleType::Auto) || + "RUNTIME" >> pure(OmpScheduleClause::ScheduleType::Runtime), + maybe("," >> scalarIntExpr))) // IF(directive-name-modifier: scalar-logical-expr) TYPE_PARSER(construct( - maybe( - ("PARALLEL"_id >> pure(OmpIfClause::DirectiveNameModifier::Parallel) || - "TARGET ENTER DATA"_id >> - pure(OmpIfClause::DirectiveNameModifier::TargetEnterData) || - "TARGET EXIT DATA"_id >> - pure(OmpIfClause::DirectiveNameModifier::TargetExitData) || - "TARGET DATA"_id >> - pure(OmpIfClause::DirectiveNameModifier::TargetData) || - "TARGET UPDATE"_id >> - pure(OmpIfClause::DirectiveNameModifier::TargetUpdate) || - "TARGET"_id >> pure(OmpIfClause::DirectiveNameModifier::Target) || - "TASKLOOP"_id >> pure(OmpIfClause::DirectiveNameModifier::Taskloop) || - "TASK"_id >> pure(OmpIfClause::DirectiveNameModifier::Task)) / - ":"_tok), + maybe(("PARALLEL" >> pure(OmpIfClause::DirectiveNameModifier::Parallel) || + "TARGET ENTER DATA" >> + pure(OmpIfClause::DirectiveNameModifier::TargetEnterData) || + "TARGET EXIT DATA" >> + pure(OmpIfClause::DirectiveNameModifier::TargetExitData) || + "TARGET DATA" >> + pure(OmpIfClause::DirectiveNameModifier::TargetData) || + "TARGET UPDATE" >> + pure(OmpIfClause::DirectiveNameModifier::TargetUpdate) || + "TARGET" >> pure(OmpIfClause::DirectiveNameModifier::Target) || + "TASK"_id >> pure(OmpIfClause::DirectiveNameModifier::Taskloop) || + "TASKLOOP" >> pure(OmpIfClause::DirectiveNameModifier::Task)) / + ":"), scalarLogicalExpr)) TYPE_PARSER( @@ -113,7 +113,7 @@ TYPE_PARSER( construct(Parser{})) TYPE_PARSER(construct( - Parser{} / ":"_tok, nonemptyList(designator))) + Parser{} / ":", nonemptyList(designator))) // DEPEND(SOURCE | SINK : vec | (IN | OUT | INOUT) : list TYPE_PARSER(construct( @@ -122,33 +122,33 @@ TYPE_PARSER(construct( TYPE_PARSER( construct(name, maybe(Parser{}))) -TYPE_PARSER(construct( - "INOUT"_id >> pure(OmpDependenceType::Type::Inout) || - "IN"_id >> pure(OmpDependenceType::Type::In) || - "OUT"_id >> pure(OmpDependenceType::Type::Out))) +TYPE_PARSER( + construct("IN"_id >> pure(OmpDependenceType::Type::In) || + "INOUT" >> pure(OmpDependenceType::Type::Inout) || + "OUT" >> pure(OmpDependenceType::Type::Out))) TYPE_CONTEXT_PARSER("Omp Depend clause"_en_US, construct(construct( - "SINK"_id_tok >> ":"_tok >> nonemptyList(Parser{}))) || + "SINK :" >> nonemptyList(Parser{}))) || construct( - construct("SOURCE"_id)) || + construct("SOURCE"_tok)) || construct(construct( - Parser{}, ":"_tok >> nonemptyList(designator)))) + Parser{}, ":" >> nonemptyList(designator)))) // linear-modifier TYPE_PARSER( - construct("REF"_id >> pure(OmpLinearModifier::Type::Ref) || - "VAL"_id >> pure(OmpLinearModifier::Type::Val) || - "UVAL"_id >> pure(OmpLinearModifier::Type::Uval))) + construct("REF" >> pure(OmpLinearModifier::Type::Ref) || + "VAL" >> pure(OmpLinearModifier::Type::Val) || + "UVAL" >> pure(OmpLinearModifier::Type::Uval))) // LINEAR(list: linear-step) TYPE_CONTEXT_PARSER("Omp LINEAR clause"_en_US, construct( construct(construct( Parser{}, parenthesized(nonemptyList(name)), - maybe(":"_tok >> scalarIntConstantExpr))) || + maybe(":" >> scalarIntConstantExpr))) || construct(construct( - nonemptyList(name), maybe(":"_tok >> scalarIntConstantExpr))))) + nonemptyList(name), maybe(":" >> scalarIntConstantExpr))))) // ALIGNED(list: alignment) TYPE_PARSER(construct( @@ -166,18 +166,16 @@ TYPE_PARSER("ALIGNED" >> parenthesized(Parser{}))) || "COPYPRIVATE" >> construct(construct( (parenthesized(Parser{})))) || - "DEFAULTMAP" >> - construct(construct( - parenthesized("TOFROM"_tok >> ":"_tok >> "SCALAR"_tok))) || - "DEFAULT" >> + "DEFAULT"_id >> construct(parenthesized(Parser{})) || + "DEFAULTMAP" >> construct(construct( + "( TOFROM : SCALAR )"_tok)) || "DEPEND" >> construct(parenthesized(Parser{})) || "DEVICE" >> construct(construct( parenthesized(scalarIntExpr))) || - "DIST_SCHEDULE" >> - construct(construct( - parenthesized("STATIC"_tok >> ","_tok >> scalarIntExpr))) || + "DIST_SCHEDULE" >> construct(construct( + parenthesized("STATIC ," >> scalarIntExpr))) || "FINAL" >> construct( construct(parenthesized(scalarIntExpr))) || "FIRSTPRIVATE" >> construct(construct( @@ -224,9 +222,9 @@ TYPE_PARSER("ALIGNED" >> construct(parenthesized(Parser{})) || "SHARED" >> construct(construct( parenthesized(Parser{}))) || + "SIMD"_id >> construct(construct()) || "SIMDLEN" >> construct(construct( parenthesized(scalarIntConstantExpr))) || - "SIMD" >> construct(construct()) || "THREADS" >> construct(construct()) || "THREAD_LIMIT" >> construct(construct( parenthesized(scalarIntExpr))) || @@ -256,15 +254,15 @@ TYPE_PARSER("DISTRIBUTE PARALLEL DO SIMD" >> construct()) || "DISTRIBUTE" >> construct( construct()) || + "DO SIMD" >> + construct(construct()) || + "DO" >> construct(construct()) || "PARALLEL DO SIMD" >> construct( construct()) || "PARALLEL DO" >> construct( construct()) || "SIMD" >> construct(construct()) || - "DO SIMD" >> - construct(construct()) || - "DO" >> construct(construct()) || "TARGET PARALLEL DO SIMD" >> construct( construct()) || @@ -350,21 +348,21 @@ TYPE_PARSER("MASTER" >> construct()) || "TARGET" >> construct(construct()) || + "TASK"_id >> + construct(construct()) || "TASKGROUP" >> construct( construct()) || - "TASK" >> - construct(construct()) || "TEAMS" >> construct(construct())) -TYPE_PARSER(construct("INITIALIZER"_tok >> - parenthesized("OMP_PRIV"_tok >> "="_tok >> indirect(expr)))) +TYPE_PARSER(construct( + "INITIALIZER" >> parenthesized("OMP_PRIV =" >> indirect(expr)))) // Declare Reduction Construct TYPE_PARSER(construct( - "("_tok >> Parser{} / ":"_tok, - nonemptyList(Parser{}) / ":"_tok, - Parser{} / ")"_tok, + "(" >> Parser{} / ":", + nonemptyList(Parser{}) / ":", + Parser{} / ")", maybe(Parser{}))) // declare-target-map-type @@ -392,48 +390,40 @@ TYPE_PARSER(construct(Parser{}) || parenthesized(optionalList(actualArgSpec)))))) // OMP END ATOMIC -TYPE_PARSER(construct("!$OMP "_sptok >> "END ATOMIC"_tok)) +TYPE_PARSER(construct(startOmpLine >> "END ATOMIC"_tok)) // OMP [SEQ_CST] ATOMIC READ [SEQ_CST] TYPE_PARSER(construct( - maybe( - "SEQ_CST"_tok >> construct() / maybe(","_tok)), + maybe("SEQ_CST" >> construct() / maybe(","_tok)), "READ" >> maybe(","_tok) >> - maybe("SEQ_CST"_tok >> construct()) / - endOmpLine, + maybe("SEQ_CST" >> construct()) / endOmpLine, statement(assignmentStmt), maybe(Parser{} / endOmpLine))) // OMP ATOMIC [SEQ_CST] CAPTURE [SEQ_CST] TYPE_PARSER(construct( - maybe("SEQ_CST"_tok >> - construct() / maybe(","_tok)), + maybe("SEQ_CST" >> construct() / maybe(","_tok)), "CAPTURE" >> maybe(","_tok) >> - maybe("SEQ_CST"_tok >> construct()) / - endOmpLine, + maybe("SEQ_CST" >> construct()) / endOmpLine, statement(assignmentStmt), statement(assignmentStmt), Parser{} / endOmpLine)) // OMP ATOMIC [SEQ_CST] UPDATE [SEQ_CST] TYPE_PARSER(construct( - maybe("SEQ_CST"_tok >> - construct() / maybe(","_tok)), + maybe("SEQ_CST" >> construct() / maybe(","_tok)), "UPDATE" >> maybe(","_tok) >> - maybe("SEQ_CST"_tok >> construct()) / - endOmpLine, + maybe("SEQ_CST" >> construct()) / endOmpLine, statement(assignmentStmt), maybe(Parser{} / endOmpLine))) // OMP ATOMIC [SEQ_CST] TYPE_PARSER(construct( - maybe("SEQ_CST"_tok >> construct()) / endOmpLine, + maybe("SEQ_CST" >> construct()) / endOmpLine, statement(assignmentStmt), maybe(Parser{} / endOmpLine))) // ATOMIC [SEQ_CST] WRITE [SEQ_CST] TYPE_PARSER(construct( - maybe( - "SEQ_CST"_tok >> construct() / maybe(","_tok)), + maybe("SEQ_CST" >> construct() / maybe(","_tok)), "WRITE" >> maybe(","_tok) >> - maybe("SEQ_CST"_tok >> construct()) / - endOmpLine, + maybe("SEQ_CST" >> construct()) / endOmpLine, statement(assignmentStmt), maybe(Parser{} / endOmpLine))) // Atomic Construct @@ -445,22 +435,22 @@ TYPE_PARSER("ATOMIC" >> construct(Parser{}))) // OMP CRITICAL -TYPE_PARSER("!$OMP "_sptok >> "END"_tok >> "CRITICAL"_tok >> +TYPE_PARSER(startOmpLine >> "END CRITICAL"_tok >> construct(maybe(parenthesized(name)))) -TYPE_PARSER("CRITICAL" >> - construct(maybe(parenthesized(name)), - maybe("HINT"_tok >> construct( - parenthesized(constantExpr))) / - endOmpLine, - block, Parser{} / endOmpLine)) +TYPE_PARSER( + "CRITICAL" >> construct(maybe(parenthesized(name)), + maybe("HINT" >> construct( + parenthesized(constantExpr))) / + endOmpLine, + block, Parser{} / endOmpLine)) // Declare Simd construct TYPE_PARSER(construct( maybe(parenthesized(name)), Parser{})) // Declarative construct & Threadprivate directive -TYPE_PARSER(!"!$OMP END"_tok >> "!$OMP "_tok >> +TYPE_PARSER(startOmpLine >> ("DECLARE REDUCTION" >> construct( construct( @@ -497,15 +487,15 @@ TYPE_PARSER("TASKWAIT" >> construct() / endOmpLine) TYPE_PARSER("TASKYIELD" >> construct() / endOmpLine) // OMP SINGLE -TYPE_PARSER(skipStuffBeforeStatement >> "!$OMP "_sptok >> "END"_tok >> - construct("SINGLE"_tok >> Parser{})) +TYPE_PARSER(startOmpLine >> "END"_tok >> + construct("SINGLE" >> Parser{})) TYPE_PARSER("SINGLE" >> construct(Parser{} / endOmpLine, block, Parser{} / endOmpLine)) -TYPE_PARSER(skipStuffBeforeStatement >> "!$OMP "_sptok >> "END"_tok >> - construct("WORKSHARE"_tok)) +TYPE_PARSER( + startOmpLine >> "END"_tok >> construct("WORKSHARE"_tok)) // OMP WORKSHARE TYPE_PARSER("WORKSHARE" >> @@ -520,10 +510,9 @@ TYPE_PARSER(construct(maybe(construct("NOWAIT"_tok)))) TYPE_PARSER(construct(maybe(construct("NOWAIT"_tok)))) // OMP END SECTIONS [NOWAIT] -TYPE_PARSER(skipStuffBeforeStatement >> "!$OMP "_sptok >> "END"_tok >> - "SECTIONS"_tok >> +TYPE_PARSER(startOmpLine >> "END SECTIONS"_tok >> construct( - maybe("NOWAIT"_tok >> construct()) / endOmpLine)) + maybe("NOWAIT" >> construct()) / endOmpLine)) // OMP SECTIONS TYPE_PARSER("SECTIONS" >> @@ -531,10 +520,9 @@ TYPE_PARSER("SECTIONS" >> Parser{} / endOmpLine, block, Parser{})) // OMP END PARALLEL SECTIONS [NOWAIT] -TYPE_PARSER(skipStuffBeforeStatement >> "!$OMP "_sptok >> "END"_tok >> - "PARALLEL SECTIONS"_tok >> +TYPE_PARSER(startOmpLine >> "END PARALLEL SECTIONS"_tok >> construct( - maybe("NOWAIT"_tok >> construct()) / endOmpLine)) + maybe("NOWAIT" >> construct()) / endOmpLine)) // OMP PARALLEL SECTIONS TYPE_PARSER("PARALLEL SECTIONS" >> construct( @@ -542,7 +530,7 @@ TYPE_PARSER("PARALLEL SECTIONS" >> construct( block, Parser{})) TYPE_CONTEXT_PARSER("OpenMP construct"_en_US, - skipStuffBeforeStatement >> "!$OMP "_sptok >> !"END"_tok >> + startOmpLine >> (construct( indirect(Parser{})) || construct( @@ -573,15 +561,15 @@ TYPE_CONTEXT_PARSER("OpenMP construct"_en_US, indirect(Parser{})) || construct( indirect(Parser{})) || - "SECTION"_tok >> endOmpLine >> + "SECTION" >> endOmpLine >> construct(construct()))) // END OMP Block directives -TYPE_PARSER(skipStuffBeforeStatement >> "!$OMP "_sptok >> "END"_tok >> +TYPE_PARSER(startOmpLine >> "END"_tok >> construct(indirect(Parser{}))) // END OMP Loop directives -TYPE_PARSER(skipStuffBeforeStatement >> "!$OMP "_sptok >> "END"_tok >> +TYPE_PARSER(startOmpLine >> "END"_tok >> (construct( "DO SIMD" >> indirect(Parser{}) / endOmpLine) || construct(