[llvm-branch-commits] [flang] [flang][OpenMP] Parsing context selectors for METADIRECTIVE (PR #121815)
Kiran Chandramohan via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Jan 10 02:54:35 PST 2025
================
@@ -153,6 +153,81 @@ static TypeDeclarationStmt makeIterSpecDecl(std::list<ObjectName> &&names) {
makeEntityList(std::move(names)));
}
+// --- Parsers for context traits -------------------------------------
+
+TYPE_PARSER(sourced(construct<OmpTraitPropertyName>( //
+ (space >> charLiteralConstantWithoutKind) ||
+ applyMem(&Name::ToString, Parser<Name>{}))))
+
+TYPE_PARSER(sourced(construct<OmpTraitScore>( //
+ "SCORE" >> parenthesized(scalarIntExpr))))
+
+TYPE_PARSER(sourced(construct<OmpTraitPropertyExtension::ExtensionValue>(
+ // Parse nested extension first.
+ construct<OmpTraitPropertyExtension::ExtensionValue>(
+ indirect(Parser<OmpTraitPropertyExtension>{})) ||
+ construct<OmpTraitPropertyExtension::ExtensionValue>(
+ Parser<OmpTraitPropertyName>{}) ||
+ construct<OmpTraitPropertyExtension::ExtensionValue>(scalarExpr))))
+
+TYPE_PARSER(sourced(construct<OmpTraitPropertyExtension>( //
+ Parser<OmpTraitPropertyName>{},
+ parenthesized(nonemptySeparated(
+ Parser<OmpTraitPropertyExtension::ExtensionValue>{}, ","_tok)))))
+
+TYPE_PARSER(sourced(construct<OmpTraitProperty>(
+ // Try clause first, then extension before OmpTraitPropertyName.
+ construct<OmpTraitProperty>(indirect(Parser<OmpClause>{})) ||
+ construct<OmpTraitProperty>(Parser<OmpTraitPropertyExtension>{}) ||
+ construct<OmpTraitProperty>(Parser<OmpTraitPropertyName>{}) ||
+ construct<OmpTraitProperty>(scalarExpr))))
+
+TYPE_PARSER(construct<OmpTraitSelectorName::Value>(
+ "ARCH" >> pure(OmpTraitSelectorName::Value::Arch) ||
+ "ATOMIC_DEFAULT_MEM_ORDER" >>
+ pure(OmpTraitSelectorName::Value::Atomic_Default_Mem_Order) ||
+ "CONDITION" >> pure(OmpTraitSelectorName::Value::Condition) ||
+ "DEVICE_NUM" >> pure(OmpTraitSelectorName::Value::Device_Num) ||
+ "EXTENSION" >> pure(OmpTraitSelectorName::Value::Extension) ||
+ "ISA" >> pure(OmpTraitSelectorName::Value::Isa) ||
+ "KIND" >> pure(OmpTraitSelectorName::Value::Kind) ||
+ "REQUIRES" >> pure(OmpTraitSelectorName::Value::Requires) ||
+ "SIMD" >> pure(OmpTraitSelectorName::Value::Simd) ||
+ "UID" >> pure(OmpTraitSelectorName::Value::Uid) ||
+ "VENDOR" >> pure(OmpTraitSelectorName::Value::Vendor)))
+
+TYPE_PARSER(sourced(construct<OmpTraitSelectorName>(
+ // Parse predefined names first (because of SIMD).
+ construct<OmpTraitSelectorName>(Parser<OmpTraitSelectorName::Value>{}) ||
+ construct<OmpTraitSelectorName>(OmpDirectiveNameParser{}))))
+
+TYPE_PARSER(construct<OmpTraitSelector::Properties>(
+ maybe(Parser<OmpTraitScore>{} / ":"_tok),
+ nonemptySeparated(Parser<OmpTraitProperty>{}, ","_tok)))
+
+TYPE_PARSER(sourced(construct<OmpTraitSelector>( //
+ Parser<OmpTraitSelectorName>{}, //
+ maybe(parenthesized(Parser<OmpTraitSelector::Properties>{})))))
+
+TYPE_PARSER(construct<OmpTraitSetSelectorName::Value>(
+ "CONSTRUCT" >> pure(OmpTraitSetSelectorName::Value::Construct) ||
+ "DEVICE" >> pure(OmpTraitSetSelectorName::Value::Device) ||
+ "IMPLEMENTATION" >> pure(OmpTraitSetSelectorName::Value::Implementation) ||
+ "TARGET_DEVICE" >> pure(OmpTraitSetSelectorName::Value::Target_Device) ||
+ "USER" >> pure(OmpTraitSetSelectorName::Value::User)))
+
+TYPE_PARSER(sourced(construct<OmpTraitSetSelectorName>(
+ Parser<OmpTraitSetSelectorName::Value>{})))
+
+TYPE_PARSER(sourced(construct<OmpTraitSetSelector>( //
+ Parser<OmpTraitSetSelectorName>{},
+ "=" >> braced(nonemptySeparated(Parser<OmpTraitSelector>{}, ","_tok)))))
+
+TYPE_PARSER(sourced(construct<OmpContextSelectorSpecification>(
+ nonemptySeparated(Parser<OmpTraitSetSelector>{}, ","_tok))))
+
+// Parser<OmpContextSelector> == Parser<traits::OmpContextSelectorSpecification>
----------------
kiranchandramohan wrote:
Commented code?
https://github.com/llvm/llvm-project/pull/121815
More information about the llvm-branch-commits
mailing list