-
Notifications
You must be signed in to change notification settings - Fork 12.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Flang][Driver] Deprecate Ofast #101701
[Flang][Driver] Deprecate Ofast #101701
Conversation
@llvm/pr-subscribers-flang-driver @llvm/pr-subscribers-clang-driver Author: Kiran Chandramohan (kiranchandramohan) ChangesThis is subject to agreement by the Flang community (https://discourse.llvm.org/t/rfc-deprecate-ofast-in-flang/80243). Full diff: https://github.com/llvm/llvm-project/pull/101701.diff 4 Files Affected:
diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td
index 3d8240f8357b4..e04e74de07435 100644
--- a/clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -448,6 +448,10 @@ def warn_drv_deprecated_arg_ofast : Warning<
"argument '-Ofast' is deprecated; use '-O3 -ffast-math' for the same behavior,"
" or '-O3' to enable only conforming optimizations">,
InGroup<DeprecatedOFast>;
+def warn_drv_deprecated_arg_ofast_for_flang : Warning<
+ "argument '-Ofast' is deprecated; use '-O3 -ffast-math -fstack-arrays' for the same behavior,"
+ " or '-O3 -fstack-arrays' to enable only conforming optimizations">,
+ InGroup<DeprecatedOFast>;
def warn_drv_deprecated_custom : Warning<
"argument '%0' is deprecated, %1">, InGroup<Deprecated>;
def warn_drv_assuming_mfloat_abi_is : Warning<
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index f690467bb82cd..def5a6db5e6ce 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -933,7 +933,10 @@ def O_flag : Flag<["-"], "O">, Visibility<[ClangOption, CC1Option, FC1Option]>,
def Ofast : Joined<["-"], "Ofast">, Group<O_Group>,
Visibility<[ClangOption, CC1Option, FlangOption]>,
HelpText<"Deprecated; use '-O3 -ffast-math' for the same behavior,"
- " or '-O3' to enable only conforming optimizations">;
+ " or '-O3' to enable only conforming optimizations">,
+ HelpTextForVariants<[FlangOption],
+ "Deprecated; use '-O3 -ffast-math -fstack-arrays' for the same behavior,"
+ " or '-O3 -fstack-arrays' to enable only conforming optimizations">;
def P : Flag<["-"], "P">,
Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
Group<Preprocessor_Group>,
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp
index 492d5a3021d9b..c5ec3c26aed9a 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -867,6 +867,7 @@ void Flang::ConstructJob(Compilation &C, const JobAction &JA,
D.Diag(diag::warn_O4_is_O3);
} else if (A->getOption().matches(options::OPT_Ofast)) {
CmdArgs.push_back("-O3");
+ D.Diag(diag::warn_drv_deprecated_arg_ofast_for_flang);
} else {
A->render(Args, CmdArgs);
}
diff --git a/flang/test/Driver/fast-math.f90 b/flang/test/Driver/fast-math.f90
index 47175488b98bc..e677432bc04fa 100644
--- a/flang/test/Driver/fast-math.f90
+++ b/flang/test/Driver/fast-math.f90
@@ -1,6 +1,11 @@
! Test for correct forwarding of fast-math flags from the compiler driver to the
! frontend driver
+! Check warning message for Ofast deprecation
+! RUN: %flang -Ofast -### %s -o %t 2>&1 | FileCheck %s
+! CHECK: warning: argument '-Ofast' is deprecated; use '-O3 -ffast-math -fstack-arrays' for the same behavior, or '-O3
+! -fstack-arrays' to enable only conforming optimizations [-Wdeprecated-ofast]
+
! -Ofast => -ffast-math -O3 -fstack-arrays
! RUN: %flang -Ofast -fsyntax-only -### %s -o %t 2>&1 \
! RUN: | FileCheck --check-prefix=CHECK-OFAST %s
|
60bd3cf
to
88f7792
Compare
I did not see any opposition in https://discourse.llvm.org/t/rfc-deprecate-ofast-in-flang/80243. So would like to land this before llvm 20. |
HelpTextForVariants<[FlangOption, FC1Option], | ||
"Deprecated; use '-O3 -ffast-math -fstack-arrays' for the same behavior," | ||
" or '-O3 -fstack-arrays' to enable only conforming optimizations">, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This may be out of the scope of this change, but why isn't -fstack-arrays
enabled with -O3
?
If -fstack-arrays
is not specified are array temporaries always allocated on the heap?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is currently mimicking gfortran (https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html), which runs it at Ofast.
We have not seen much benefits because Flang mostly allocates on the stack. @tblah is that right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we saw significant benefits on SNAP but not on SPEC2017 rate. I don't think we experimented with anything else.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Makes sense, thanks for the explanations.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mimicking gfortran's behavior for now seems reasonable to me. We can always update the warning message later if needed.
Thanks Kiran!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, I'm glad we're matching clang's behaviour here. Thanks!
This is subject to agreement by the Flang community (https://discourse.llvm.org/t/rfc-deprecate-ofast-in-flang/80243).