diff --git a/flang/lib/Lower/OpenMP.cpp b/flang/lib/Lower/OpenMP.cpp --- a/flang/lib/Lower/OpenMP.cpp +++ b/flang/lib/Lower/OpenMP.cpp @@ -181,13 +181,13 @@ omp::ClauseProcBindKind pbKind; switch (ompProcBindClause.v) { case Fortran::parser::OmpProcBindClause::Type::Master: - pbKind = omp::ClauseProcBindKind::master; + pbKind = omp::ClauseProcBindKind::Master; break; case Fortran::parser::OmpProcBindClause::Type::Close: - pbKind = omp::ClauseProcBindKind::close; + pbKind = omp::ClauseProcBindKind::Close; break; case Fortran::parser::OmpProcBindClause::Type::Spread: - pbKind = omp::ClauseProcBindKind::spread; + pbKind = omp::ClauseProcBindKind::Spread; break; } parallelOp.proc_bind_valAttr(omp::ClauseProcBindKindAttr::get( diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td --- a/llvm/include/llvm/Frontend/OpenMP/OMP.td +++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td @@ -122,13 +122,12 @@ ]; } -// static and auto are C++ keywords so need a capital to disambiguate. -def OMP_SCHEDULE_Static : ClauseVal<"Static", 2, 1> {} -def OMP_SCHEDULE_Dynamic : ClauseVal<"Dynamic", 3, 1> {} -def OMP_SCHEDULE_Guided : ClauseVal<"Guided", 4, 1> {} -def OMP_SCHEDULE_Auto : ClauseVal<"Auto", 5, 1> {} -def OMP_SCHEDULE_Runtime : ClauseVal<"Runtime", 6, 1> {} -def OMP_SCHEDULE_Default : ClauseVal<"Default", 7, 0> { let isDefault = 1; } +def OMP_SCHEDULE_Static : ClauseVal<"static", 2, 1> {} +def OMP_SCHEDULE_Dynamic : ClauseVal<"dynamic", 3, 1> {} +def OMP_SCHEDULE_Guided : ClauseVal<"guided", 4, 1> {} +def OMP_SCHEDULE_Auto : ClauseVal<"auto", 5, 1> {} +def OMP_SCHEDULE_Runtime : ClauseVal<"runtime", 6, 1> {} +def OMP_SCHEDULE_Default : ClauseVal<"default", 7, 0> { let isDefault = 1; } def OMPC_Schedule : Clause<"schedule"> { let clangClass = "OMPScheduleClause"; diff --git a/llvm/unittests/Frontend/OpenMPParsingTest.cpp b/llvm/unittests/Frontend/OpenMPParsingTest.cpp --- a/llvm/unittests/Frontend/OpenMPParsingTest.cpp +++ b/llvm/unittests/Frontend/OpenMPParsingTest.cpp @@ -73,13 +73,12 @@ TEST(OpenMPParsingTest, getScheduleKind) { EXPECT_EQ(getScheduleKind("foobar"), OMP_SCHEDULE_Default); - // FIXME: Why are these not lower case? - EXPECT_EQ(getScheduleKind("Static"), OMP_SCHEDULE_Static); - EXPECT_EQ(getScheduleKind("Dynamic"), OMP_SCHEDULE_Dynamic); - EXPECT_EQ(getScheduleKind("Guided"), OMP_SCHEDULE_Guided); - EXPECT_EQ(getScheduleKind("Auto"), OMP_SCHEDULE_Auto); - EXPECT_EQ(getScheduleKind("Runtime"), OMP_SCHEDULE_Runtime); - EXPECT_EQ(getScheduleKind("Default"), OMP_SCHEDULE_Default); + EXPECT_EQ(getScheduleKind("static"), OMP_SCHEDULE_Static); + EXPECT_EQ(getScheduleKind("dynamic"), OMP_SCHEDULE_Dynamic); + EXPECT_EQ(getScheduleKind("guided"), OMP_SCHEDULE_Guided); + EXPECT_EQ(getScheduleKind("auto"), OMP_SCHEDULE_Auto); + EXPECT_EQ(getScheduleKind("runtime"), OMP_SCHEDULE_Runtime); + EXPECT_EQ(getScheduleKind("default"), OMP_SCHEDULE_Default); } } // namespace diff --git a/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp b/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp --- a/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp +++ b/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp @@ -674,7 +674,6 @@ // Add schedule parameters if (done[scheduleClause] && !schedule.empty()) { - schedule[0] = llvm::toUpper(schedule[0]); if (Optional sched = symbolizeClauseScheduleKind(schedule)) { auto attr = ClauseScheduleKindAttr::get(parser.getContext(), *sched); @@ -999,8 +998,8 @@ LogicalResult AtomicReadOp::verify() { if (auto mo = memory_order_val()) { - if (*mo == ClauseMemoryOrderKind::acq_rel || - *mo == ClauseMemoryOrderKind::release) { + if (*mo == ClauseMemoryOrderKind::Acq_rel || + *mo == ClauseMemoryOrderKind::Release) { return emitError( "memory-order must not be acq_rel or release for atomic reads"); } @@ -1017,8 +1016,8 @@ LogicalResult AtomicWriteOp::verify() { if (auto mo = memory_order_val()) { - if (*mo == ClauseMemoryOrderKind::acq_rel || - *mo == ClauseMemoryOrderKind::acquire) { + if (*mo == ClauseMemoryOrderKind::Acq_rel || + *mo == ClauseMemoryOrderKind::Acquire) { return emitError( "memory-order must not be acq_rel or acquire for atomic writes"); } @@ -1032,8 +1031,8 @@ LogicalResult AtomicUpdateOp::verify() { if (auto mo = memory_order_val()) { - if (*mo == ClauseMemoryOrderKind::acq_rel || - *mo == ClauseMemoryOrderKind::acquire) { + if (*mo == ClauseMemoryOrderKind::Acq_rel || + *mo == ClauseMemoryOrderKind::Acquire) { return emitError( "memory-order must not be acq_rel or acquire for atomic updates"); } diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp --- a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp @@ -190,13 +190,13 @@ /// Convert ProcBindKind from MLIR-generated enum to LLVM enum. static llvm::omp::ProcBindKind getProcBindKind(omp::ClauseProcBindKind kind) { switch (kind) { - case omp::ClauseProcBindKind::close: + case omp::ClauseProcBindKind::Close: return llvm::omp::ProcBindKind::OMP_PROC_BIND_close; - case omp::ClauseProcBindKind::master: + case omp::ClauseProcBindKind::Master: return llvm::omp::ProcBindKind::OMP_PROC_BIND_master; - case omp::ClauseProcBindKind::primary: + case omp::ClauseProcBindKind::Primary: return llvm::omp::ProcBindKind::OMP_PROC_BIND_primary; - case omp::ClauseProcBindKind::spread: + case omp::ClauseProcBindKind::Spread: return llvm::omp::ProcBindKind::OMP_PROC_BIND_spread; } llvm_unreachable("Unknown ClauseProcBindKind kind"); @@ -887,15 +887,15 @@ return llvm::AtomicOrdering::Monotonic; // Default Memory Ordering switch (*ao) { - case omp::ClauseMemoryOrderKind::seq_cst: + case omp::ClauseMemoryOrderKind::Seq_cst: return llvm::AtomicOrdering::SequentiallyConsistent; - case omp::ClauseMemoryOrderKind::acq_rel: + case omp::ClauseMemoryOrderKind::Acq_rel: return llvm::AtomicOrdering::AcquireRelease; - case omp::ClauseMemoryOrderKind::acquire: + case omp::ClauseMemoryOrderKind::Acquire: return llvm::AtomicOrdering::Acquire; - case omp::ClauseMemoryOrderKind::release: + case omp::ClauseMemoryOrderKind::Release: return llvm::AtomicOrdering::Release; - case omp::ClauseMemoryOrderKind::relaxed: + case omp::ClauseMemoryOrderKind::Relaxed: return llvm::AtomicOrdering::Monotonic; } llvm_unreachable("Unknown ClauseMemoryOrderKind kind"); diff --git a/mlir/test/Dialect/OpenMP/ops.mlir b/mlir/test/Dialect/OpenMP/ops.mlir --- a/mlir/test/Dialect/OpenMP/ops.mlir +++ b/mlir/test/Dialect/OpenMP/ops.mlir @@ -135,28 +135,28 @@ "omp.wsloop" (%lb, %ub, %step, %data_var, %linear_var) ({ ^bb0(%iv: index): omp.yield - }) {operand_segment_sizes = dense<[1,1,1,1,1,0,0]> : vector<7xi32>, schedule_val = #omp<"schedulekind Static">} : + }) {operand_segment_sizes = dense<[1,1,1,1,1,0,0]> : vector<7xi32>, schedule_val = #omp<"schedulekind static">} : (index, index, index, memref, i32) -> () // CHECK: omp.wsloop (%{{.*}}) : index = (%{{.*}}) to (%{{.*}}) step (%{{.*}}) linear(%{{.*}} = %{{.*}} : memref, %{{.*}} = %{{.*}} : memref) schedule(static) "omp.wsloop" (%lb, %ub, %step, %data_var, %data_var, %linear_var, %linear_var) ({ ^bb0(%iv: index): omp.yield - }) {operand_segment_sizes = dense<[1,1,1,2,2,0,0]> : vector<7xi32>, schedule_val = #omp<"schedulekind Static">} : + }) {operand_segment_sizes = dense<[1,1,1,2,2,0,0]> : vector<7xi32>, schedule_val = #omp<"schedulekind static">} : (index, index, index, memref, memref, i32, i32) -> () // CHECK: omp.wsloop (%{{.*}}) : index = (%{{.*}}) to (%{{.*}}) step (%{{.*}}) linear(%{{.*}} = %{{.*}} : memref) schedule(dynamic = %{{.*}}) collapse(3) ordered(2) "omp.wsloop" (%lb, %ub, %step, %data_var, %linear_var, %chunk_var) ({ ^bb0(%iv: index): omp.yield - }) {operand_segment_sizes = dense<[1,1,1,1,1,0,1]> : vector<7xi32>, schedule_val = #omp<"schedulekind Dynamic">, collapse_val = 3, ordered_val = 2} : + }) {operand_segment_sizes = dense<[1,1,1,1,1,0,1]> : vector<7xi32>, schedule_val = #omp<"schedulekind dynamic">, collapse_val = 3, ordered_val = 2} : (index, index, index, memref, i32, i32) -> () // CHECK: omp.wsloop (%{{.*}}) : index = (%{{.*}}) to (%{{.*}}) step (%{{.*}}) schedule(auto) nowait "omp.wsloop" (%lb, %ub, %step) ({ ^bb0(%iv: index): omp.yield - }) {operand_segment_sizes = dense<[1,1,1,0,0,0,0]> : vector<7xi32>, nowait, schedule_val = #omp<"schedulekind Auto">} : + }) {operand_segment_sizes = dense<[1,1,1,0,0,0,0]> : vector<7xi32>, nowait, schedule_val = #omp<"schedulekind auto">} : (index, index, index) -> () return diff --git a/mlir/test/mlir-tblgen/directive-common.td b/mlir/test/mlir-tblgen/directive-common.td --- a/mlir/test/mlir-tblgen/directive-common.td +++ b/mlir/test/mlir-tblgen/directive-common.td @@ -21,8 +21,8 @@ ]; } -// CHECK: def AKindvala : I32EnumAttrCase<"vala", 0>; -// CHECK: def AKindvalb : I32EnumAttrCase<"valb", 1>; +// CHECK: def AKindvala : I32EnumAttrCase<"Vala", 0, "vala">; +// CHECK: def AKindvalb : I32EnumAttrCase<"Valb", 1, "valb">; // CHECK: def AKind: I32EnumAttr< // CHECK: "ClauseAKind", // CHECK: "AKind Clause", diff --git a/mlir/tools/mlir-tblgen/DirectiveCommonGen.cpp b/mlir/tools/mlir-tblgen/DirectiveCommonGen.cpp --- a/mlir/tools/mlir-tblgen/DirectiveCommonGen.cpp +++ b/mlir/tools/mlir-tblgen/DirectiveCommonGen.cpp @@ -70,10 +70,14 @@ if (!cval.isUserVisible()) continue; - const auto name = cval.getFormattedName(); + std::string name = cval.getFormattedName(); + std::string enumValName(name.length(), ' '); + std::transform(name.begin(), name.end(), enumValName.begin(), + llvm::toLower); + enumValName[0] = llvm::toUpper(enumValName[0]); std::string cvDef{(enumName + llvm::Twine(name)).str()}; - os << "def " << cvDef << " : I32EnumAttrCase<\"" << name << "\", " - << it.index() << ">;\n"; + os << "def " << cvDef << " : I32EnumAttrCase<\"" << enumValName << "\", " + << it.index() << ", \"" << name << "\">;\n"; cvDefs.push_back(cvDef); }