From c8376a93bb9853cbcedeb22d80a9b200060eaf85 Mon Sep 17 00:00:00 2001 From: Scott Manley Date: Tue, 11 Feb 2025 14:38:48 -0800 Subject: [PATCH] [Flang] Fix options for FunctionAttr pass For non-basic types GenericOptionParser::findArgStrForValue will return null when the specific values are not found. Add the enum, much like the debug-level option in AddDebugInfo to resolve this problem. Also change tuneCPU to be std::string or it will also have the same problem. --- .../flang/Optimizer/Transforms/Passes.td | 49 ++++++++++--------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/flang/include/flang/Optimizer/Transforms/Passes.td b/flang/include/flang/Optimizer/Transforms/Passes.td index 61f8b0835c958..0b6e0119c16c3 100644 --- a/flang/include/flang/Optimizer/Transforms/Passes.td +++ b/flang/include/flang/Optimizer/Transforms/Passes.td @@ -383,30 +383,33 @@ def FunctionAttr : Pass<"function-attr", "mlir::func::FuncOp"> { freeing up an additional register in numerous functions. However, this approach can make debugging unfeasible on certain machines. }]; - let options = [ - Option<"framePointerKind", "frame-pointer", - "mlir::LLVM::framePointerKind::FramePointerKind", - /*default=*/"mlir::LLVM::framePointerKind::FramePointerKind{}", - "frame pointer">, - Option<"noInfsFPMath", "no-infs-fp-math", - "bool", /*default=*/"false", - "Set the no-infs-fp-math attribute on functions in the module.">, - Option<"noNaNsFPMath", "no-nans-fp-math", - "bool", /*default=*/"false", - "Set the no-nans-fp-math attribute on functions in the module.">, - Option<"approxFuncFPMath", "approx-func-fp-math", - "bool", /*default=*/"false", + let options = + [Option<"framePointerKind", "frame-pointer", + "mlir::LLVM::framePointerKind::FramePointerKind", + /*default=*/"mlir::LLVM::framePointerKind::FramePointerKind{}", + "frame pointer", [{::llvm::cl::values( + clEnumValN(mlir::LLVM::framePointerKind::FramePointerKind::None, "None", ""), + clEnumValN(mlir::LLVM::framePointerKind::FramePointerKind::NonLeaf, "NonLeaf", ""), + clEnumValN(mlir::LLVM::framePointerKind::FramePointerKind::All, "All", ""), + clEnumValN(mlir::LLVM::framePointerKind::FramePointerKind::Reserved, "Reserved", "") + )}]>, + Option<"noInfsFPMath", "no-infs-fp-math", "bool", /*default=*/"false", + "Set the no-infs-fp-math attribute on functions in the module.">, + Option<"noNaNsFPMath", "no-nans-fp-math", "bool", /*default=*/"false", + "Set the no-nans-fp-math attribute on functions in the module.">, + Option< + "approxFuncFPMath", "approx-func-fp-math", "bool", + /*default=*/"false", "Set the approx-func-fp-math attribute on functions in the module.">, - Option<"noSignedZerosFPMath", "no-signed-zeros-fp-math", - "bool", /*default=*/"false", - "Set the no-signed-zeros-fp-math attribute on functions in the module.">, - Option<"unsafeFPMath", "unsafe-fp-math", - "bool", /*default=*/"false", - "Set the unsafe-fp-math attribute on functions in the module.">, - Option<"tuneCPU", "tune-cpu", - "llvm::StringRef", /*default=*/"llvm::StringRef{}", - "Set the tune-cpu attribute on functions in the module.">, -]; + Option<"noSignedZerosFPMath", "no-signed-zeros-fp-math", "bool", + /*default=*/"false", + "Set the no-signed-zeros-fp-math attribute on functions in the " + "module.">, + Option<"unsafeFPMath", "unsafe-fp-math", "bool", /*default=*/"false", + "Set the unsafe-fp-math attribute on functions in the module.">, + Option<"tuneCPU", "tune-cpu", "std::string", /*default=*/"", + "Set the tune-cpu attribute on functions in the module.">, + ]; } def AssumedRankOpConversion : Pass<"fir-assumed-rank-op", "mlir::ModuleOp"> {