https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/130788
>From 5d3c1cc1d40b308b93cc47c78c6c3ca677f55155 Mon Sep 17 00:00:00 2001 From: Tom Eccles <tom.ecc...@arm.com> Date: Tue, 11 Mar 2025 15:54:35 +0000 Subject: [PATCH 1/3] [flang] Add support for -f[no-]verbose-asm This flag provides extra commentary in the assembly output. It is in CodeGenOptions to match what is done in clang, even though the backend treats it as a target option. --- clang/include/clang/Driver/Options.td | 5 +++-- clang/lib/Driver/ToolChains/Flang.cpp | 3 ++- flang/include/flang/Frontend/CodeGenOptions.def | 2 ++ flang/lib/Frontend/CompilerInvocation.cpp | 4 ++++ flang/lib/Frontend/FrontendActions.cpp | 2 ++ flang/test/Driver/verbose-asm.f90 | 16 ++++++++++++++++ 6 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 flang/test/Driver/verbose-asm.f90 diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index e69cd6b833c3a..ac6392f92f311 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3467,7 +3467,7 @@ defm use_cxa_atexit : BoolFOption<"use-cxa-atexit", PosFlag<SetTrue>>; def fno_unwind_tables : Flag<["-"], "fno-unwind-tables">, Group<f_Group>; def fno_verbose_asm : Flag<["-"], "fno-verbose-asm">, Group<f_Group>, - Visibility<[ClangOption, CC1Option]>, + Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>, MarshallingInfoNegativeFlag<CodeGenOpts<"AsmVerbose">>; def fno_working_directory : Flag<["-"], "fno-working-directory">, Group<f_Group>; def fobjc_arc : Flag<["-"], "fobjc-arc">, Group<f_Group>, @@ -4142,7 +4142,8 @@ defm use_init_array : BoolFOption<"use-init-array", PosFlag<SetTrue>>; def fno_var_tracking : Flag<["-"], "fno-var-tracking">, Group<clang_ignored_f_Group>; def fverbose_asm : Flag<["-"], "fverbose-asm">, Group<f_Group>, - HelpText<"Generate verbose assembly output">; + HelpText<"Generate verbose assembly output">, + Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>; def dA : Flag<["-"], "dA">, Alias<fverbose_asm>; defm visibility_from_dllstorageclass : BoolFOption<"visibility-from-dllstorageclass", LangOpts<"VisibilityFromDLLStorageClass">, DefaultFalse, diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index d4fea633d0edf..09b77b4aab03d 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -172,7 +172,8 @@ void Flang::addCodegenOptions(const ArgList &Args, options::OPT_finit_global_zero, options::OPT_fno_init_global_zero, options::OPT_ftime_report, options::OPT_ftime_report_EQ, options::OPT_funroll_loops, - options::OPT_fno_unroll_loops}); + options::OPT_fno_unroll_loops, options::OPT_fverbose_asm, + options::OPT_fno_verbose_asm}); } void Flang::addPicOptions(const ArgList &Args, ArgStringList &CmdArgs) const { diff --git a/flang/include/flang/Frontend/CodeGenOptions.def b/flang/include/flang/Frontend/CodeGenOptions.def index 44cb5a2cdd497..d2ff06d5fe08a 100644 --- a/flang/include/flang/Frontend/CodeGenOptions.def +++ b/flang/include/flang/Frontend/CodeGenOptions.def @@ -42,5 +42,7 @@ ENUM_CODEGENOPT(DebugInfo, llvm::codegenoptions::DebugInfoKind, 4, llvm::codeg ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary, 3, llvm::driver::VectorLibrary::NoLibrary) ///< Vector functions library to use ENUM_CODEGENOPT(FramePointer, llvm::FramePointerKind, 2, llvm::FramePointerKind::None) ///< Enable the usage of frame pointers +CODEGENOPT(AsmVerbose, 1, 0) + #undef CODEGENOPT #undef ENUM_CODEGENOPT diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index 8b07a50824899..5451006960e8b 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -254,6 +254,10 @@ static void parseCodeGenArgs(Fortran::frontend::CodeGenOptions &opts, clang::driver::options::OPT_fno_unroll_loops, (opts.OptimizationLevel > 1)); + if (args.hasFlag(clang::driver::options::OPT_fverbose_asm, + clang::driver::options::OPT_fno_verbose_asm, false)) + opts.AsmVerbose = 1; + opts.AliasAnalysis = opts.OptimizationLevel > 0; // -mframe-pointer=none/non-leaf/all option. diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp index 94de376aaf7d6..0ef2708bb42fb 100644 --- a/flang/lib/Frontend/FrontendActions.cpp +++ b/flang/lib/Frontend/FrontendActions.cpp @@ -1284,6 +1284,8 @@ void CodeGenAction::executeAction() { // given on the command-line). llvm::TargetMachine &targetMachine = ci.getTargetMachine(); + targetMachine.Options.MCOptions.AsmVerbose = codeGenOpts.AsmVerbose; + const llvm::Triple &theTriple = targetMachine.getTargetTriple(); if (llvmModule->getTargetTriple() != theTriple) { diff --git a/flang/test/Driver/verbose-asm.f90 b/flang/test/Driver/verbose-asm.f90 new file mode 100644 index 0000000000000..20e930d22bf0a --- /dev/null +++ b/flang/test/Driver/verbose-asm.f90 @@ -0,0 +1,16 @@ +! RUN: %flang -### -S -o - -fverbose-asm %s 2>&1 | FileCheck %s --check-prefix=FORWARDING +! FORWARDING: -fverbose-asm + +! RUN: %flang -S -o - -fverbose-asm %s | FileCheck %s --check-prefix=VERBOSE +! RUN: %flang_fc1 -S -o - -fverbose-asm %s | FileCheck %s --check-prefix=VERBOSE + +! RUN: %flang -S -o - %s | FileCheck %s --check-prefix=QUIET +! RUN: %flang_fc1 -S -o - %s | FileCheck %s --check-prefix=QUIET +! RUN: %flang -S -o - -fverbose-asm -fno-verbose-asm %s | FileCheck %s --check-prefix=QUIET +! RUN: %flang_fc1 -S -o - -fverbose-asm -fno-verbose-asm %s | FileCheck %s --check-prefix=QUIET + +! VERBOSE: // -- Begin function _QQmain +! QUIET-NOT: // -- Begin function _QQmain +program test + +end program >From 743b811124504844f0d867d9d0575c6311ac6eaa Mon Sep 17 00:00:00 2001 From: Tom Eccles <tom.ecc...@arm.com> Date: Tue, 11 Mar 2025 17:34:32 +0000 Subject: [PATCH 2/3] Fix windows test --- flang/test/Driver/verbose-asm.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flang/test/Driver/verbose-asm.f90 b/flang/test/Driver/verbose-asm.f90 index 20e930d22bf0a..7cadf19b32d3c 100644 --- a/flang/test/Driver/verbose-asm.f90 +++ b/flang/test/Driver/verbose-asm.f90 @@ -9,8 +9,8 @@ ! RUN: %flang -S -o - -fverbose-asm -fno-verbose-asm %s | FileCheck %s --check-prefix=QUIET ! RUN: %flang_fc1 -S -o - -fverbose-asm -fno-verbose-asm %s | FileCheck %s --check-prefix=QUIET -! VERBOSE: // -- Begin function _QQmain -! QUIET-NOT: // -- Begin function _QQmain +! VERBOSE: -- Begin function _QQmain +! QUIET-NOT: -- Begin function _QQmain program test end program >From 6f6f8670887c9eb030412a7eb720242bba2790db Mon Sep 17 00:00:00 2001 From: Tom Eccles <tom.ecc...@arm.com> Date: Wed, 12 Mar 2025 15:03:47 +0000 Subject: [PATCH 3/3] Move to target options --- flang/include/flang/Frontend/CodeGenOptions.def | 2 -- flang/include/flang/Frontend/TargetOptions.h | 3 +++ flang/lib/Frontend/CompilerInvocation.cpp | 8 ++++---- flang/lib/Frontend/FrontendActions.cpp | 3 ++- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/flang/include/flang/Frontend/CodeGenOptions.def b/flang/include/flang/Frontend/CodeGenOptions.def index d2ff06d5fe08a..44cb5a2cdd497 100644 --- a/flang/include/flang/Frontend/CodeGenOptions.def +++ b/flang/include/flang/Frontend/CodeGenOptions.def @@ -42,7 +42,5 @@ ENUM_CODEGENOPT(DebugInfo, llvm::codegenoptions::DebugInfoKind, 4, llvm::codeg ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary, 3, llvm::driver::VectorLibrary::NoLibrary) ///< Vector functions library to use ENUM_CODEGENOPT(FramePointer, llvm::FramePointerKind, 2, llvm::FramePointerKind::None) ///< Enable the usage of frame pointers -CODEGENOPT(AsmVerbose, 1, 0) - #undef CODEGENOPT #undef ENUM_CODEGENOPT diff --git a/flang/include/flang/Frontend/TargetOptions.h b/flang/include/flang/Frontend/TargetOptions.h index 4a854644e7ff6..002d8d158abd4 100644 --- a/flang/include/flang/Frontend/TargetOptions.h +++ b/flang/include/flang/Frontend/TargetOptions.h @@ -50,6 +50,9 @@ class TargetOptions { /// Extended Altivec ABI on AIX bool EnableAIXExtendedAltivecABI; + + /// Print verbose assembly + bool asmVerbose = false; }; } // end namespace Fortran::frontend diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index 5451006960e8b..a616a671f7aca 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -254,10 +254,6 @@ static void parseCodeGenArgs(Fortran::frontend::CodeGenOptions &opts, clang::driver::options::OPT_fno_unroll_loops, (opts.OptimizationLevel > 1)); - if (args.hasFlag(clang::driver::options::OPT_fverbose_asm, - clang::driver::options::OPT_fno_verbose_asm, false)) - opts.AsmVerbose = 1; - opts.AliasAnalysis = opts.OptimizationLevel > 0; // -mframe-pointer=none/non-leaf/all option. @@ -480,6 +476,10 @@ static void parseTargetArgs(TargetOptions &opts, llvm::opt::ArgList &args) { opts.EnableAIXExtendedAltivecABI = false; } } + + opts.asmVerbose = + args.hasFlag(clang::driver::options::OPT_fverbose_asm, + clang::driver::options::OPT_fno_verbose_asm, false); } // Tweak the frontend configuration based on the frontend action static void setUpFrontendBasedOnAction(FrontendOptions &opts) { diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp index 0ef2708bb42fb..46ec7550e4140 100644 --- a/flang/lib/Frontend/FrontendActions.cpp +++ b/flang/lib/Frontend/FrontendActions.cpp @@ -1220,6 +1220,7 @@ void CodeGenAction::executeAction() { clang::DiagnosticsEngine &diags = ci.getDiagnostics(); const CodeGenOptions &codeGenOpts = ci.getInvocation().getCodeGenOpts(); + const TargetOptions &targetOpts = ci.getInvocation().getTargetOpts(); Fortran::lower::LoweringOptions &loweringOpts = ci.getInvocation().getLoweringOpts(); mlir::DefaultTimingManager &timingMgr = ci.getTimingManager(); @@ -1284,7 +1285,7 @@ void CodeGenAction::executeAction() { // given on the command-line). llvm::TargetMachine &targetMachine = ci.getTargetMachine(); - targetMachine.Options.MCOptions.AsmVerbose = codeGenOpts.AsmVerbose; + targetMachine.Options.MCOptions.AsmVerbose = targetOpts.asmVerbose; const llvm::Triple &theTriple = targetMachine.getTargetTriple(); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits