[clang] d9b9621 - Reland D73534: [DebugInfo] Enable the debug entry values feature by default

Djordje via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 23 00:56:24 PDT 2020


(+ CCing some debug info folks as well)

Hi David,

OK, I agree, my apologize.

The patch enables the whole feature by default and removes the experimental option that has been used during the implementation.
We tested the code (and the assertions regarding the feature itself) by using the experimental option on some large projects, but since the feature became that huge (and new patches regarding the feature are coming every day -- which is nice), it is impossible to test everything.

The Debug Entry Values implementation grows these days, and new functionalities comes in, but it has all been tested with the experimental option, so committing this particular patch imposes all the cases developers oversighted during the implementation.

My impression is that, before adding new functionalities to the feature, we should make sure the D73534 is stable and gets stuck. We should have done it before, but I think that is the lesson learned here.

In general, experimental options are very good up to the some point, but if the feature being tested grows a lot, a "breakpoint" should be set up and take care the experimental option is removed and the code is well tested on the real cases out there, and then moving to the next stage of the implementation.

Besides this, CISCO is using the feature ON by default for some time, and we have good experience there. This really improves the debugging user experience while debugging the "optimized" code.

Best regards,
Djordje

On 22.3.20. 16:30, David Blaikie wrote:
> Also, this patch was reverted and recommitted several times (more than I think would be ideal) - please include more details in the commit message about what went wrong, what was fixed, what testing was missed in the first place and done in subsequent precommit validation (& is there anything more broadly we could learn from this patches story to avoid this kind of revert/recommit repetition in the future?)
>
> On Sat, Mar 21, 2020 at 8:13 PM David Blaikie <dblaikie at gmail.com <mailto:dblaikie at gmail.com>> wrote:
>
>     Please include the "Differential Revision" line so that Phab picks up commits like this and ties them into the review (& also makes it conveniently clickable to jump from the commit mail to the review)
>
>     On Thu, Mar 19, 2020 at 5:58 AM Djordje Todorovic via cfe-commits <cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>> wrote:
>
>
>         Author: Djordje Todorovic
>         Date: 2020-03-19T13:57:30+01:00
>         New Revision: d9b962100942c71a4c26debaa716f7ab0c4ea8a1
>
>         URL: https://github.com/llvm/llvm-project/commit/d9b962100942c71a4c26debaa716f7ab0c4ea8a1
>         DIFF: https://github.com/llvm/llvm-project/commit/d9b962100942c71a4c26debaa716f7ab0c4ea8a1.diff
>
>         LOG: Reland D73534: [DebugInfo] Enable the debug entry values feature by default
>
>         The issue that was causing the build failures was fixed with the D76164.
>
>         Added:
>             llvm/test/DebugInfo/X86/no-entry-values-with-O0.ll
>
>         Modified:
>             clang/include/clang/Basic/CodeGenOptions.def
>             clang/include/clang/Driver/CC1Options.td
>             clang/lib/CodeGen/BackendUtil.cpp
>             clang/lib/CodeGen/CGDebugInfo.cpp
>             clang/lib/Frontend/CompilerInvocation.cpp
>             clang/test/CodeGen/debug-info-extern-call.c
>             clang/test/CodeGenCXX/dbg-info-all-calls-described.cpp
>             lldb/packages/Python/lldbsuite/test/decorators.py
>             lldb/test/API/functionalities/param_entry_vals/basic_entry_values_x86_64/Makefile
>             llvm/include/llvm/Target/TargetMachine.h
>             llvm/include/llvm/Target/TargetOptions.h
>             llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>             llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h
>             llvm/lib/CodeGen/CommandFlags.cpp
>             llvm/lib/CodeGen/LiveDebugValues.cpp
>             llvm/lib/CodeGen/TargetOptionsImpl.cpp
>             llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
>             llvm/lib/Target/ARM/ARMTargetMachine.cpp
>             llvm/lib/Target/X86/X86TargetMachine.cpp
>             llvm/test/CodeGen/MIR/Hexagon/bundled-call-site-info.mir
>             llvm/test/CodeGen/MIR/X86/call-site-info-error4.mir
>             llvm/test/CodeGen/X86/call-site-info-output.ll
>             llvm/test/DebugInfo/AArch64/dbgcall-site-float-entry-value.ll
>             llvm/test/DebugInfo/MIR/AArch64/dbgcall-site-orr-moves.mir
>             llvm/test/DebugInfo/MIR/ARM/call-site-info-vmovd.mir
>             llvm/test/DebugInfo/MIR/ARM/call-site-info-vmovs.mir
>             llvm/test/DebugInfo/MIR/ARM/dbgcall-site-propagated-value.mir
>             llvm/test/DebugInfo/MIR/Hexagon/dbgcall-site-instr-before-bundled-call.mir
>             llvm/test/DebugInfo/MIR/Hexagon/live-debug-values-bundled-entry-values.mir
>             llvm/test/DebugInfo/MIR/SystemZ/call-site-lzer.mir
>             llvm/test/DebugInfo/MIR/X86/DW_OP_entry_value.mir
>             llvm/test/DebugInfo/MIR/X86/call-site-gnu-vs-dwarf5-attrs.mir
>             llvm/test/DebugInfo/MIR/X86/callsite-stack-value.mir
>             llvm/test/DebugInfo/MIR/X86/dbgcall-site-copy-super-sub.mir
>             llvm/test/DebugInfo/MIR/X86/dbgcall-site-interpretation.mir
>             llvm/test/DebugInfo/MIR/X86/dbgcall-site-lea-interpretation.mir
>             llvm/test/DebugInfo/MIR/X86/dbgcall-site-partial-describe.mir
>             llvm/test/DebugInfo/MIR/X86/dbgcall-site-reference.mir
>             llvm/test/DebugInfo/MIR/X86/dbgcall-site-reg-shuffle.mir
>             llvm/test/DebugInfo/MIR/X86/dbgcall-site-two-fwd-reg-defs.mir
>             llvm/test/DebugInfo/MIR/X86/dbginfo-entryvals.mir
>             llvm/test/DebugInfo/MIR/X86/debug-call-site-param.mir
>             llvm/test/DebugInfo/MIR/X86/entry-value-of-modified-param.mir
>             llvm/test/DebugInfo/MIR/X86/entry-values-diamond-bbs.mir
>             llvm/test/DebugInfo/MIR/X86/propagate-entry-value-cross-bbs.mir
>             llvm/test/DebugInfo/MIR/X86/unreachable-block-call-site.mir
>             llvm/test/DebugInfo/X86/dbg-value-range.ll
>             llvm/test/DebugInfo/X86/dbg-value-regmask-clobber.ll
>             llvm/test/DebugInfo/X86/dbgcall-site-64-bit-imms.ll
>             llvm/test/DebugInfo/X86/dbgcall-site-zero-valued-imms.ll
>             llvm/test/DebugInfo/X86/loclists-dwp.ll
>             llvm/test/tools/llvm-locstats/locstats.ll
>
>         Removed:
>
>
>
>         ################################################################################
>         diff  --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def
>         index 3c8b0eeb47a5..e047054447f3 100644
>         --- a/clang/include/clang/Basic/CodeGenOptions.def
>         +++ b/clang/include/clang/Basic/CodeGenOptions.def
>         @@ -63,7 +63,6 @@ CODEGENOPT(ExperimentalNewPassManager, 1, 0) ///< Enables the new, experimental
>          CODEGENOPT(DebugPassManager, 1, 0) ///< Prints debug information for the new
>                                             ///< pass manager.
>          CODEGENOPT(DisableRedZone    , 1, 0) ///< Set when -mno-red-zone is enabled.
>         -CODEGENOPT(EnableDebugEntryValues, 1, 0) ///< Emit call site parameter dbg info
>          CODEGENOPT(EmitCallSiteInfo, 1, 0) ///< Emit call site info only in the case of
>                                             ///< '-g' + 'O>0' level.
>          CODEGENOPT(IndirectTlsSegRefs, 1, 0) ///< Set when -mno-tls-direct-seg-refs
>
>         diff  --git a/clang/include/clang/Driver/CC1Options.td b/clang/include/clang/Driver/CC1Options.td
>         index b7a2826d8fcb..cc30893703df 100644
>         --- a/clang/include/clang/Driver/CC1Options.td
>         +++ b/clang/include/clang/Driver/CC1Options.td
>         @@ -388,8 +388,6 @@ def flto_visibility_public_std:
>          def flto_unit: Flag<["-"], "flto-unit">,
>              HelpText<"Emit IR to support LTO unit features (CFI, whole program vtable opt)">;
>          def fno_lto_unit: Flag<["-"], "fno-lto-unit">;
>         -def femit_debug_entry_values : Flag<["-"], "femit-debug-entry-values">,
>         -    HelpText<"Enables debug info about call site parameter's entry values">;
>          def fdebug_pass_manager : Flag<["-"], "fdebug-pass-manager">,
>              HelpText<"Prints debug information for the new pass manager">;
>          def fno_debug_pass_manager : Flag<["-"], "fno-debug-pass-manager">,
>
>         diff  --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp
>         index 28e4ecc7b4bf..e8f2524a25d5 100644
>         --- a/clang/lib/CodeGen/BackendUtil.cpp
>         +++ b/clang/lib/CodeGen/BackendUtil.cpp
>         @@ -491,7 +491,6 @@ static void initTargetOptions(llvm::TargetOptions &Options,
>            Options.DebuggerTuning = CodeGenOpts.getDebuggerTuning();
>            Options.EmitStackSizeSection = CodeGenOpts.StackSizeSection;
>            Options.EmitAddrsig = CodeGenOpts.Addrsig;
>         -  Options.EnableDebugEntryValues = CodeGenOpts.EnableDebugEntryValues;
>            Options.ForceDwarfFrameSection = CodeGenOpts.ForceDwarfFrameSection;
>            Options.EmitCallSiteInfo = CodeGenOpts.EmitCallSiteInfo;
>
>
>         diff  --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp
>         index 94dab4c85614..eeb1927177c5 100644
>         --- a/clang/lib/CodeGen/CGDebugInfo.cpp
>         +++ b/clang/lib/CodeGen/CGDebugInfo.cpp
>         @@ -4883,8 +4883,7 @@ llvm::DINode::DIFlags CGDebugInfo::getCallSiteRelatedAttrs() const {
>                (CGM.getCodeGenOpts().getDebuggerTuning() == llvm::DebuggerKind::LLDB ||
>                 CGM.getCodeGenOpts().getDebuggerTuning() == llvm::DebuggerKind::GDB);
>
>         -  if (!SupportsDWARFv4Ext && CGM.getCodeGenOpts().DwarfVersion < 5 &&
>         -      !CGM.getCodeGenOpts().EnableDebugEntryValues)
>         +  if (!SupportsDWARFv4Ext && CGM.getCodeGenOpts().DwarfVersion < 5)
>              return llvm::DINode::FlagZero;
>
>            return llvm::DINode::FlagAllCallsDescribed;
>
>         diff  --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
>         index e2b24f0cfcea..2e432ad9ce14 100644
>         --- a/clang/lib/Frontend/CompilerInvocation.cpp
>         +++ b/clang/lib/Frontend/CompilerInvocation.cpp
>         @@ -788,10 +788,8 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
>
>            llvm::Triple T(TargetOpts.Triple);
>            if (Opts.OptimizationLevel > 0 && Opts.hasReducedDebugInfo() &&
>         -      llvm::is_contained(DebugEntryValueArchs, T.getArch())) {
>         -    Opts.EnableDebugEntryValues = Args.hasArg(OPT_femit_debug_entry_values);
>         +      llvm::is_contained(DebugEntryValueArchs, T.getArch()))
>              Opts.EmitCallSiteInfo = true;
>         -  }
>
>            Opts.DisableO0ImplyOptNone = Args.hasArg(OPT_disable_O0_optnone);
>            Opts.DisableRedZone = Args.hasArg(OPT_disable_red_zone);
>
>         diff  --git a/clang/test/CodeGen/debug-info-extern-call.c b/clang/test/CodeGen/debug-info-extern-call.c
>         index da3764f7359e..072e578b5898 100644
>         --- a/clang/test/CodeGen/debug-info-extern-call.c
>         +++ b/clang/test/CodeGen/debug-info-extern-call.c
>         @@ -1,7 +1,7 @@
>          // When entry values are emitted, expect a subprogram for extern decls so that
>          // the dwarf generator can describe call site parameters at extern call sites.
>          //
>         -// RUN: %clang -Xclang -femit-debug-entry-values -g -O2 -target x86_64-none-linux-gnu -S -emit-llvm %s -o - \
>         +// RUN: %clang -g -O2 -target x86_64-none-linux-gnu -S -emit-llvm %s -o - \
>          // RUN:   | FileCheck %s -check-prefix=DECLS-FOR-EXTERN
>
>          // Similarly, when the debugger tuning is gdb, expect a subprogram for extern
>
>         diff  --git a/clang/test/CodeGenCXX/dbg-info-all-calls-described.cpp b/clang/test/CodeGenCXX/dbg-info-all-calls-described.cpp
>         index 72caf119f869..e64e07cdb748 100644
>         --- a/clang/test/CodeGenCXX/dbg-info-all-calls-described.cpp
>         +++ b/clang/test/CodeGenCXX/dbg-info-all-calls-described.cpp
>         @@ -15,13 +15,6 @@
>          // RUN: | FileCheck %s -check-prefix=HAS-ATTR \
>          // RUN:     -implicit-check-not=DISubprogram -implicit-check-not=DIFlagAllCallsDescribed
>
>         -// Supported: DWARF4 + GDB tuning by using '-femit-debug-entry-values'
>         -// RUN: %clang_cc1 -femit-debug-entry-values -emit-llvm -triple x86_64-linux-gnu \
>         -// RUN:   %s -o - -O1 -disable-llvm-passes -debugger-tuning=gdb \
>         -// RUN:   -debug-info-kind=standalone -dwarf-version=4 \
>         -// RUN: | FileCheck %s -check-prefix=HAS-ATTR \
>         -// RUN:     -implicit-check-not=DIFlagAllCallsDescribed
>         -
>          // Note: DIFlagAllCallsDescribed may have been enabled prematurely when tuning
>          // for GDB under -gdwarf-4 in https://reviews.llvm.org/D69743. It's possible
>          // this should have been 'Unsupported' until entry values emission was enabled
>         @@ -34,15 +27,15 @@
>          // RUN: | FileCheck %s -check-prefix=HAS-ATTR \
>          // RUN:     -implicit-check-not=DIFlagAllCallsDescribed
>
>         -// Supported: DWARF4 + LLDB tuning by using '-femit-debug-entry-values'
>         -// RUN: %clang_cc1 -femit-debug-entry-values -emit-llvm -triple x86_64-linux-gnu \
>         +// Supported: DWARF4 + LLDB, -O1
>         +// RUN: %clang_cc1 -emit-llvm -triple x86_64-linux-gnu \
>          // RUN:   %s -o - -O1 -disable-llvm-passes -debugger-tuning=lldb \
>          // RUN:   -debug-info-kind=standalone -dwarf-version=4 \
>          // RUN: | FileCheck %s -check-prefix=HAS-ATTR \
>          // RUN:     -implicit-check-not=DIFlagAllCallsDescribed
>
>         -// Unsupported: -O0 + '-femit-debug-entry-values'
>         -// RUN: %clang_cc1 -femit-debug-entry-values -emit-llvm -triple x86_64-linux-gnu \
>         +// Unsupported: -O0
>         +// RUN: %clang_cc1 -emit-llvm -triple x86_64-linux-gnu \
>          // RUN:   %s -o - -O0 -disable-llvm-passes -debugger-tuning=gdb \
>          // RUN:   -debug-info-kind=standalone -dwarf-version=4 \
>          // RUN: | FileCheck %s -check-prefix=NO-ATTR
>
>         diff  --git a/lldb/packages/Python/lldbsuite/test/decorators.py b/lldb/packages/Python/lldbsuite/test/decorators.py
>         index 32ae8ee9b000..cc28ae901634 100644
>         --- a/lldb/packages/Python/lldbsuite/test/decorators.py
>         +++ b/lldb/packages/Python/lldbsuite/test/decorators.py
>         @@ -702,7 +702,7 @@ def is_compiler_clang_with_call_site_info(self):
>
>                  f = tempfile.NamedTemporaryFile()
>                  cmd = "echo 'int main() {}' | " \
>         -              "%s -g -glldb -O1 -Xclang -femit-debug-entry-values -S -emit-llvm -x c -o %s -" % (compiler_path, f.name <http://f.name>)
>         +              "%s -g -glldb -O1 -S -emit-llvm -x c -o %s -" % (compiler_path, f.name <http://f.name>)
>                  if os.popen(cmd).close() is not None:
>                      return "Compiler can't compile with call site info enabled"
>
>
>         diff  --git a/lldb/test/API/functionalities/param_entry_vals/basic_entry_values_x86_64/Makefile b/lldb/test/API/functionalities/param_entry_vals/basic_entry_values_x86_64/Makefile
>         index db8fa57abb91..ab505a684126 100644
>         --- a/lldb/test/API/functionalities/param_entry_vals/basic_entry_values_x86_64/Makefile
>         +++ b/lldb/test/API/functionalities/param_entry_vals/basic_entry_values_x86_64/Makefile
>         @@ -1,3 +1,3 @@
>          CXX_SOURCES := main.cpp
>         -CXXFLAGS_EXTRAS := -O2 -glldb -Xclang -femit-debug-entry-values
>         +CXXFLAGS_EXTRAS := -O2 -glldb
>          include Makefile.rules
>
>         diff  --git a/llvm/include/llvm/Target/TargetMachine.h b/llvm/include/llvm/Target/TargetMachine.h
>         index fdf1313e5491..c2e14d14d351 100644
>         --- a/llvm/include/llvm/Target/TargetMachine.h
>         +++ b/llvm/include/llvm/Target/TargetMachine.h
>         @@ -237,6 +237,9 @@ class TargetMachine {
>            void setSupportsDefaultOutlining(bool Enable) {
>              Options.SupportsDefaultOutlining = Enable;
>            }
>         +  void setSupportsDebugEntryValues(bool Enable) {
>         +    Options.SupportsDebugEntryValues = Enable;
>         +  }
>
>            bool shouldPrintMachineCode() const { return Options.PrintMachineCode; }
>
>
>         diff  --git a/llvm/include/llvm/Target/TargetOptions.h b/llvm/include/llvm/Target/TargetOptions.h
>         index 9378e290bed1..7282040a352f 100644
>         --- a/llvm/include/llvm/Target/TargetOptions.h
>         +++ b/llvm/include/llvm/Target/TargetOptions.h
>         @@ -134,8 +134,8 @@ namespace llvm {
>                    EmulatedTLS(false), ExplicitEmulatedTLS(false), EnableIPRA(false),
>                    EmitStackSizeSection(false), EnableMachineOutliner(false),
>                    SupportsDefaultOutlining(false), EmitAddrsig(false),
>         -          EmitCallSiteInfo(false), EnableDebugEntryValues(false),
>         -          ForceDwarfFrameSection(false) {}
>         +          EmitCallSiteInfo(false), SupportsDebugEntryValues(false),
>         +          EnableDebugEntryValues(false), ForceDwarfFrameSection(false) {}
>
>              /// PrintMachineCode - This flag is enabled when the -print-machineinstrs
>              /// option is specified on the command line, and should enable debugging
>         @@ -286,8 +286,16 @@ namespace llvm {
>              /// info, and it is restricted only to optimized code. This can be used for
>              /// something else, so that should be controlled in the frontend.
>              unsigned EmitCallSiteInfo : 1;
>         -    /// Emit debug info about parameter's entry values.
>         -    unsigned EnableDebugEntryValues : 1;
>         +    /// Set if the target supports the debug entry values by default.
>         +    unsigned SupportsDebugEntryValues : 1;
>         +    /// When set to true, the EnableDebugEntryValues option forces production
>         +    /// of debug entry values even if the target does not officially support
>         +    /// it. Useful for testing purposes only. This flag should never be checked
>         +    /// directly, always use \ref ShouldEmitDebugEntryValues instead.
>         +     unsigned EnableDebugEntryValues : 1;
>         +    /// NOTE: There are targets that still do not support the debug entry values
>         +    /// production.
>         +    bool ShouldEmitDebugEntryValues() const;
>
>              /// Emit DWARF debug frame section.
>              unsigned ForceDwarfFrameSection : 1;
>
>         diff  --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>         index 7efeb1a3736a..7b469d496b70 100644
>         --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>         +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>         @@ -95,6 +95,10 @@ static cl::opt<bool> UseDwarfRangesBaseAddressSpecifier(
>              "use-dwarf-ranges-base-address-specifier", cl::Hidden,
>              cl::desc("Use base address specifiers in debug_ranges"), cl::init(false));
>
>         +static cl::opt<bool> EmitDwarfDebugEntryValues(
>         +    "emit-debug-entry-values", cl::Hidden,
>         +    cl::desc("Emit the debug entry values"), cl::init(false));
>         +
>          static cl::opt<bool> GenerateARangeSection("generate-arange-section",
>                                                     cl::Hidden,
>                                                     cl::desc("Generate dwarf aranges"),
>         @@ -419,6 +423,12 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
>            // a monolithic string offsets table without any header.
>            UseSegmentedStringOffsetsTable = DwarfVersion >= 5;
>
>         +  // Emit call-site-param debug info for GDB and LLDB, if the target supports
>         +  // the debug entry values feature. It can also be enabled explicitly.
>         +  EmitDebugEntryValues = (Asm->TM.Options.ShouldEmitDebugEntryValues() &&
>         +                          (tuneForGDB() || tuneForLLDB())) ||
>         +                         EmitDwarfDebugEntryValues;
>         +
>            Asm->OutStreamer->getContext().setDwarfVersion(DwarfVersion);
>          }
>
>         @@ -886,9 +896,8 @@ void DwarfDebug::constructCallSiteEntryDIEs(const DISubprogram &SP,
>                DIE &CallSiteDIE = CU.constructCallSiteEntryDIE(ScopeDIE, CalleeDIE,
>                                                                IsTail, PCAddr, CallReg);
>
>         -      // GDB and LLDB support call site parameter debug info.
>         -      if (Asm->TM.Options.EnableDebugEntryValues &&
>         -          (tuneForGDB() || tuneForLLDB())) {
>         +      // Optionally emit call-site-param debug info.
>         +      if (emitDebugEntryValues()) {
>                  ParamSet Params;
>                  // Try to interpret values of call site parameters.
>                  collectCallSiteParameters(&MI, Params);
>
>         diff  --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h
>         index a44960589d89..882fc739d792 100644
>         --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h
>         +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h
>         @@ -386,6 +386,11 @@ class DwarfDebug : public DebugHandlerBase {
>            /// a monolithic sequence of string offsets.
>            bool UseSegmentedStringOffsetsTable;
>
>         +  /// Enable production of call site parameters needed to print the debug entry
>         +  /// values. Useful for testing purposes when a debugger does not support the
>         +  /// feature yet.
>         +  bool EmitDebugEntryValues;
>         +
>            /// Separated Dwarf Variables
>            /// In general these will all be for bits that are left in the
>            /// original object file, rather than things that are meant
>         @@ -708,6 +713,10 @@ class DwarfDebug : public DebugHandlerBase {
>              return UseSegmentedStringOffsetsTable;
>            }
>
>         +  bool emitDebugEntryValues() const {
>         +    return EmitDebugEntryValues;
>         +  }
>         +
>            bool shareAcrossDWOCUs() const;
>
>            /// Returns the Dwarf Version.
>
>         diff  --git a/llvm/lib/CodeGen/CommandFlags.cpp b/llvm/lib/CodeGen/CommandFlags.cpp
>         index 7acb84df582f..d5dc49a91177 100644
>         --- a/llvm/lib/CodeGen/CommandFlags.cpp
>         +++ b/llvm/lib/CodeGen/CommandFlags.cpp
>         @@ -380,7 +380,7 @@ codegen::RegisterCodeGenFlags::RegisterCodeGenFlags() {
>
>            static cl::opt<bool> EnableDebugEntryValues(
>                "debug-entry-values",
>         -      cl::desc("Emit debug info about parameter's entry values"),
>         +      cl::desc("Enable debug info for the debug entry values."),
>                cl::init(false));
>            CGBINDOPT(EnableDebugEntryValues);
>
>
>         diff  --git a/llvm/lib/CodeGen/LiveDebugValues.cpp b/llvm/lib/CodeGen/LiveDebugValues.cpp
>         index 94c5cc58ac1e..a013c419b7c7 100644
>         --- a/llvm/lib/CodeGen/LiveDebugValues.cpp
>         +++ b/llvm/lib/CodeGen/LiveDebugValues.cpp
>         @@ -1125,7 +1125,7 @@ void LiveDebugValues::transferRegisterDef(
>
>            if (auto *TPC = getAnalysisIfAvailable<TargetPassConfig>()) {
>              auto &TM = TPC->getTM<TargetMachine>();
>         -    if (TM.Options.EnableDebugEntryValues)
>         +    if (TM.Options.ShouldEmitDebugEntryValues())
>                emitEntryValues(MI, OpenRanges, VarLocIDs, Transfers, KillSet);
>            }
>          }
>         @@ -1630,7 +1630,7 @@ void LiveDebugValues::recordEntryValue(const MachineInstr &MI,
>                                                 VarLocMap &VarLocIDs) {
>            if (auto *TPC = getAnalysisIfAvailable<TargetPassConfig>()) {
>              auto &TM = TPC->getTM<TargetMachine>();
>         -    if (!TM.Options.EnableDebugEntryValues)
>         +    if (!TM.Options.ShouldEmitDebugEntryValues())
>                return;
>            }
>
>
>         diff  --git a/llvm/lib/CodeGen/TargetOptionsImpl.cpp b/llvm/lib/CodeGen/TargetOptionsImpl.cpp
>         index d794a261ecb2..4866d4c171c0 100644
>         --- a/llvm/lib/CodeGen/TargetOptionsImpl.cpp
>         +++ b/llvm/lib/CodeGen/TargetOptionsImpl.cpp
>         @@ -45,3 +45,9 @@ bool TargetOptions::DisableFramePointerElim(const MachineFunction &MF) const {
>          bool TargetOptions::HonorSignDependentRoundingFPMath() const {
>            return !UnsafeFPMath && HonorSignDependentRoundingFPMathOption;
>          }
>         +
>         +/// NOTE: There are targets that still do not support the debug entry values
>         +/// production.
>         +bool TargetOptions::ShouldEmitDebugEntryValues() const {
>         +  return SupportsDebugEntryValues || EnableDebugEntryValues;
>         +}
>
>         diff  --git a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
>         index a5676d286ebe..62ae04a07808 100644
>         --- a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
>         +++ b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
>         @@ -309,6 +309,9 @@ AArch64TargetMachine::AArch64TargetMachine(const Target &T, const Triple &TT,
>
>            // AArch64 supports default outlining behaviour.
>            setSupportsDefaultOutlining(true);
>         +
>         +  // AArch64 supports the debug entry values.
>         +  setSupportsDebugEntryValues(true);
>          }
>
>          AArch64TargetMachine::~AArch64TargetMachine() = default;
>
>         diff  --git a/llvm/lib/Target/ARM/ARMTargetMachine.cpp b/llvm/lib/Target/ARM/ARMTargetMachine.cpp
>         index 84876eda33a6..63aa65267ef2 100644
>         --- a/llvm/lib/Target/ARM/ARMTargetMachine.cpp
>         +++ b/llvm/lib/Target/ARM/ARMTargetMachine.cpp
>         @@ -243,6 +243,9 @@ ARMBaseTargetMachine::ARMBaseTargetMachine(const Target &T, const Triple &TT,
>              this->Options.NoTrapAfterNoreturn = true;
>            }
>
>         +  // ARM supports the debug entry values.
>         +  setSupportsDebugEntryValues(true);
>         +
>            initAsmInfo();
>          }
>
>
>         diff  --git a/llvm/lib/Target/X86/X86TargetMachine.cpp b/llvm/lib/Target/X86/X86TargetMachine.cpp
>         index 22b4e2805a5e..0cfa7bb04771 100644
>         --- a/llvm/lib/Target/X86/X86TargetMachine.cpp
>         +++ b/llvm/lib/Target/X86/X86TargetMachine.cpp
>         @@ -232,6 +232,9 @@ X86TargetMachine::X86TargetMachine(const Target &T, const Triple &TT,
>
>            setMachineOutliner(true);
>
>         +  // x86 supports the debug entry values.
>         +  setSupportsDebugEntryValues(true);
>         +
>            initAsmInfo();
>          }
>
>
>         diff  --git a/llvm/test/CodeGen/MIR/Hexagon/bundled-call-site-info.mir b/llvm/test/CodeGen/MIR/Hexagon/bundled-call-site-info.mir
>         index fec542223fc9..e4100543d3c7 100644
>         --- a/llvm/test/CodeGen/MIR/Hexagon/bundled-call-site-info.mir
>         +++ b/llvm/test/CodeGen/MIR/Hexagon/bundled-call-site-info.mir
>         @@ -1,3 +1,5 @@
>         +# We do not support the call site info for the target now, so we use the experimental option (-emit-call-site-info -debug-entry-values).
>         +
>          # RUN: llc -emit-call-site-info -debug-entry-values -run-pass=none -verify-machineinstrs -o - %s | FileCheck %s
>
>          # Verify that it is possible to read and write MIR where a callSites entry
>
>         diff  --git a/llvm/test/CodeGen/MIR/X86/call-site-info-error4.mir b/llvm/test/CodeGen/MIR/X86/call-site-info-error4.mir
>         index 2472aa707e16..d5bd82c71080 100644
>         --- a/llvm/test/CodeGen/MIR/X86/call-site-info-error4.mir
>         +++ b/llvm/test/CodeGen/MIR/X86/call-site-info-error4.mir
>         @@ -1,5 +1,5 @@
>         -# RUN: not llc -mtriple=x86_64-- -run-pass none %s -o - 2>&1 | FileCheck %s
>         -# CHECK: Call site info provided but not used
>         +# RUN: llc -emit-call-site-info -mtriple=x86_64-- -run-pass none %s -o - 2>&1 | FileCheck %s
>         +# CHECK-NOT: Call site info provided but not used
>          --- |
>            define dso_local i32 @baa(i32 %a) local_unnamed_addr {
>            entry:
>
>         diff  --git a/llvm/test/CodeGen/X86/call-site-info-output.ll b/llvm/test/CodeGen/X86/call-site-info-output.ll
>         index a0438f0c2b98..0686f184b526 100644
>         --- a/llvm/test/CodeGen/X86/call-site-info-output.ll
>         +++ b/llvm/test/CodeGen/X86/call-site-info-output.ll
>         @@ -1,6 +1,6 @@
>          ; Test call site info MIR printer and parser.Parser assertions and machine
>          ; verifier will check the rest;
>         -; RUN: llc -emit-call-site-info -debug-entry-values %s -stop-before=finalize-isel -o %t.mir
>         +; RUN: llc -emit-call-site-info %s -stop-before=finalize-isel -o %t.mir
>          ; RUN: cat %t.mir | FileCheck %s
>          ; CHECK: name: fn2
>          ; CHECK: callSites:
>         @@ -10,7 +10,7 @@
>          ; CHECK-NEXT:   arg: 0, reg: '$edi'
>          ; CHECK-NEXT:   arg: 1, reg: '$esi'
>          ; CHECK-NEXT:   arg: 2, reg: '$edx'
>         -; RUN: llc -emit-call-site-info -debug-entry-values %t.mir -run-pass=finalize-isel -o -| FileCheck %s --check-prefix=PARSER
>         +; RUN: llc -emit-call-site-info %t.mir -run-pass=finalize-isel -o -| FileCheck %s --check-prefix=PARSER
>          ; Verify that we are able to parse output mir and that we are getting the same result.
>          ; PARSER: name: fn2
>          ; PARSER: callSites:
>
>         diff  --git a/llvm/test/DebugInfo/AArch64/dbgcall-site-float-entry-value.ll b/llvm/test/DebugInfo/AArch64/dbgcall-site-float-entry-value.ll
>         index a925cd0c1452..3b91d17dc628 100644
>         --- a/llvm/test/DebugInfo/AArch64/dbgcall-site-float-entry-value.ll
>         +++ b/llvm/test/DebugInfo/AArch64/dbgcall-site-float-entry-value.ll
>         @@ -1,4 +1,4 @@
>         -; RUN: llc -mtriple aarch64-linux-gnu -emit-call-site-info -debug-entry-values -filetype=obj -o - %s | llvm-dwarfdump - | FileCheck %s
>         +; RUN: llc -mtriple aarch64-linux-gnu -emit-call-site-info -filetype=obj -o - %s | llvm-dwarfdump - | FileCheck %s
>
>          ; Based on the following C reproducer:
>          ;
>
>         diff  --git a/llvm/test/DebugInfo/MIR/AArch64/dbgcall-site-orr-moves.mir b/llvm/test/DebugInfo/MIR/AArch64/dbgcall-site-orr-moves.mir
>         index ed2a7d903885..e3ee2cac4fa9 100644
>         --- a/llvm/test/DebugInfo/MIR/AArch64/dbgcall-site-orr-moves.mir
>         +++ b/llvm/test/DebugInfo/MIR/AArch64/dbgcall-site-orr-moves.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -emit-call-site-info -debug-entry-values -start-after=livedebugvalues -filetype=obj -o - %s | llvm-dwarfdump - | FileCheck %s
>         +# RUN: llc -emit-call-site-info -start-after=livedebugvalues -filetype=obj -o - %s | llvm-dwarfdump - | FileCheck %s
>
>          # Based on the following C reproducer:
>          #
>
>         diff  --git a/llvm/test/DebugInfo/MIR/ARM/call-site-info-vmovd.mir b/llvm/test/DebugInfo/MIR/ARM/call-site-info-vmovd.mir
>         index bd42c229d29c..8f7f789eb8fb 100644
>         --- a/llvm/test/DebugInfo/MIR/ARM/call-site-info-vmovd.mir
>         +++ b/llvm/test/DebugInfo/MIR/ARM/call-site-info-vmovd.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -O1 -emit-call-site-info -debug-entry-values -filetype=obj -mtriple thumbv7em-apple-unknown-macho -start-after=machineverifier %s -o %t.o
>         +# RUN: llc -O1 -emit-call-site-info -filetype=obj -mtriple thumbv7em-apple-unknown-macho -start-after=machineverifier %s -o %t.o
>          # RUN: llvm-dwarfdump %t.o | FileCheck %s
>
>          # Crash test, reduced from:
>
>         diff  --git a/llvm/test/DebugInfo/MIR/ARM/call-site-info-vmovs.mir b/llvm/test/DebugInfo/MIR/ARM/call-site-info-vmovs.mir
>         index 2cf7e4d1c87f..e3f1031796a0 100644
>         --- a/llvm/test/DebugInfo/MIR/ARM/call-site-info-vmovs.mir
>         +++ b/llvm/test/DebugInfo/MIR/ARM/call-site-info-vmovs.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -O1 -emit-call-site-info -debug-entry-values -filetype=obj -mtriple thumbv7em-apple-unknown-macho -start-after=machineverifier %s -o %t.o
>         +# RUN: llc -O1 -emit-call-site-info -filetype=obj -mtriple thumbv7em-apple-unknown-macho -start-after=machineverifier %s -o %t.o
>          # RUN: llvm-dwarfdump %t.o | FileCheck %s
>
>          # Crash test, reduced from:
>
>         diff  --git a/llvm/test/DebugInfo/MIR/ARM/dbgcall-site-propagated-value.mir b/llvm/test/DebugInfo/MIR/ARM/dbgcall-site-propagated-value.mir
>         index 5b84d9e9627f..b25b1c90d634 100644
>         --- a/llvm/test/DebugInfo/MIR/ARM/dbgcall-site-propagated-value.mir
>         +++ b/llvm/test/DebugInfo/MIR/ARM/dbgcall-site-propagated-value.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -emit-call-site-info -debug-entry-values -run-pass=livedebugvalues -o - %s | FileCheck %s
>         +# RUN: llc -run-pass=livedebugvalues -o - %s | FileCheck %s
>
>          # Based on the following C reproducer:
>          #
>         @@ -106,10 +106,6 @@
>          name:            caller
>          alignment:       4
>          tracksRegLiveness: true
>         -callSites:
>         -  - { bb: 0, offset: 6 }
>         -  - { bb: 0, offset: 9, fwdArgRegs:
>         -      - { arg: 0, reg: '$r0' } }
>          body:             |
>            bb.0:
>              liveins: $lr
>
>         diff  --git a/llvm/test/DebugInfo/MIR/Hexagon/dbgcall-site-instr-before-bundled-call.mir b/llvm/test/DebugInfo/MIR/Hexagon/dbgcall-site-instr-before-bundled-call.mir
>         index 3ae23d4189bf..9baa815a0458 100644
>         --- a/llvm/test/DebugInfo/MIR/Hexagon/dbgcall-site-instr-before-bundled-call.mir
>         +++ b/llvm/test/DebugInfo/MIR/Hexagon/dbgcall-site-instr-before-bundled-call.mir
>         @@ -1,4 +1,6 @@
>         -# RUN: llc -mtriple hexagon -emit-call-site-info -debug-entry-values -start-after=machineverifier -filetype=obj %s -o - | llvm-dwarfdump - | FileCheck %s
>         +# We do not support the call site info for the target now, so we use the experimental option (-emit-call-site-info -debug-entry-values).
>         +
>         +# RUN: llc -emit-call-site-info -debug-entry-values -mtriple hexagon -start-after=machineverifier -filetype=obj %s -o - | llvm-dwarfdump - | FileCheck %s
>
>          # Based on the following C reproducer:
>          #
>
>         diff  --git a/llvm/test/DebugInfo/MIR/Hexagon/live-debug-values-bundled-entry-values.mir b/llvm/test/DebugInfo/MIR/Hexagon/live-debug-values-bundled-entry-values.mir
>         index 8bb0b3202acd..2ed3672c2ec3 100644
>         --- a/llvm/test/DebugInfo/MIR/Hexagon/live-debug-values-bundled-entry-values.mir
>         +++ b/llvm/test/DebugInfo/MIR/Hexagon/live-debug-values-bundled-entry-values.mir
>         @@ -1,3 +1,5 @@
>         +# We do not support the call site info for the target now, so we use the experimental option (-emit-call-site-info -debug-entry-values).
>         +
>          # RUN: llc -emit-call-site-info -debug-entry-values -run-pass=livedebugvalues -o - %s | FileCheck %s
>
>          # Verify that the entry values for the input parameters are inserted after the
>
>         diff  --git a/llvm/test/DebugInfo/MIR/SystemZ/call-site-lzer.mir b/llvm/test/DebugInfo/MIR/SystemZ/call-site-lzer.mir
>         index 3cf41467f7f9..f173c9d780fa 100644
>         --- a/llvm/test/DebugInfo/MIR/SystemZ/call-site-lzer.mir
>         +++ b/llvm/test/DebugInfo/MIR/SystemZ/call-site-lzer.mir
>         @@ -1,3 +1,5 @@
>         +# We do not support the call site info for the target now, so we use the experimental option (-emit-call-site-info -debug-entry-values).
>         +
>          # RUN: llc -emit-call-site-info -debug-entry-values -start-after=livedebugvalues -o - %s | FileCheck %s
>
>          # This test would previously trigger an assertion when trying to describe the
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/DW_OP_entry_value.mir b/llvm/test/DebugInfo/MIR/X86/DW_OP_entry_value.mir
>         index 4e5a07321d42..f7f74b628d16 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/DW_OP_entry_value.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/DW_OP_entry_value.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -emit-call-site-info -debug-entry-values -start-before=livedebugvalues -mtriple=x86_64-apple-darwin -o %t %s -filetype=obj
>         +# RUN: llc -start-before=livedebugvalues -mtriple=x86_64-apple-darwin -o %t %s -filetype=obj
>          # RUN: llvm-dwarfdump %t | FileCheck %s
>          #
>          # int global;
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/call-site-gnu-vs-dwarf5-attrs.mir b/llvm/test/DebugInfo/MIR/X86/call-site-gnu-vs-dwarf5-attrs.mir
>         index 891fbb60b36e..63d03050918f 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/call-site-gnu-vs-dwarf5-attrs.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/call-site-gnu-vs-dwarf5-attrs.mir
>         @@ -1,17 +1,21 @@
>          # Test the call site encoding in DWARF5 vs GNU extensions.
>          #
>         -# RUN: llc -dwarf-version 4 -debugger-tune=gdb -emit-call-site-info -debug-entry-values -filetype=obj \
>         +# RUN: llc -emit-call-site-info -dwarf-version 4 -debugger-tune=gdb -filetype=obj \
>          # RUN:     -mtriple=x86_64-unknown-unknown -start-after=machineverifier -o - %s  \
>          # RUN:     | llvm-dwarfdump - | FileCheck %s -check-prefixes=CHECK-GNU
>          #
>         -# RUN: llc -dwarf-version 5 -debugger-tune=lldb -emit-call-site-info -debug-entry-values -filetype=obj \
>         +# RUN: llc -emit-call-site-info -dwarf-version 5 -debugger-tune=lldb -filetype=obj \
>          # RUN:     -mtriple=x86_64-unknown-unknown -start-after=machineverifier -o - %s   \
>          # RUN:     | llvm-dwarfdump - | FileCheck %s -check-prefixes=CHECK-DWARF5
>          #
>         -# RUN: llc -dwarf-version 5 -emit-call-site-info -debug-entry-values -filetype=obj \
>         +# RUN: llc -emit-call-site-info -dwarf-version 5 -filetype=obj \
>          # RUN:     -mtriple=x86_64-unknown-unknown -start-after=machineverifier -o - %s   \
>          # RUN:     | llvm-dwarfdump - | FileCheck %s -check-prefixes=CHECK-DWARF5
>          #
>         +# RUN: llc -emit-call-site-info -dwarf-version 5 -filetype=obj -debugger-tune=sce \
>         +# RUN:     -emit-debug-entry-values -debug-entry-values -mtriple=x86_64-unknown-unknown \
>         +# RUN:     -start-after=machineverifier -o - %s | llvm-dwarfdump - | FileCheck %s -check-prefixes=CHECK-DWARF5
>         +#
>          # This is based on the following reproducer:
>          #
>          # extern void fn();
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/callsite-stack-value.mir b/llvm/test/DebugInfo/MIR/X86/callsite-stack-value.mir
>         index 6d69f0630202..5b9ecf08150b 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/callsite-stack-value.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/callsite-stack-value.mir
>         @@ -1,5 +1,5 @@
>          # RUN: llc -start-after=livedebugvalues -mtriple=x86_64-apple-darwin -o - %s -filetype=obj \
>         -# RUN:   -emit-call-site-info -debug-entry-values | llvm-dwarfdump - | FileCheck %s -implicit-check-not=call_site_parameter
>         +# RUN:   -emit-call-site-info | llvm-dwarfdump - | FileCheck %s -implicit-check-not=call_site_parameter
>
>          # CHECK: DW_TAG_formal_parameter
>          # CHECK-NEXT: DW_AT_location
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-copy-super-sub.mir b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-copy-super-sub.mir
>         index 01a2b887a60b..347a0ec09bb2 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-copy-super-sub.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-copy-super-sub.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -emit-call-site-info -debug-entry-values -start-after=livedebugvalues -filetype=obj %s -o -| llvm-dwarfdump -| FileCheck %s
>         +# RUN: llc -emit-call-site-info -start-after=livedebugvalues -filetype=obj %s -o -| llvm-dwarfdump -| FileCheck %s
>
>          # Based on the following reproducer:
>          #
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-interpretation.mir b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-interpretation.mir
>         index d6c6b3018462..b142313871eb 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-interpretation.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-interpretation.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -emit-call-site-info -debug-entry-values -start-after=machineverifier -filetype=obj %s -o -| llvm-dwarfdump -| FileCheck %s
>         +# RUN: llc -emit-call-site-info -start-after=machineverifier -filetype=obj %s -o -| llvm-dwarfdump -| FileCheck %s
>          #
>          # CHECK:        DW_TAG_GNU_call_site
>          # CHECK-NEXT:     DW_AT_abstract_origin {{.*}} "foo"
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-lea-interpretation.mir b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-lea-interpretation.mir
>         index 4d88fa9aab74..79e40b65c420 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-lea-interpretation.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-lea-interpretation.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -emit-call-site-info -debug-entry-values -start-after=machineverifier -filetype=obj %s -o -| llvm-dwarfdump -| FileCheck %s
>         +# RUN: llc -emit-call-site-info -start-after=machineverifier -filetype=obj %s -o -| llvm-dwarfdump -| FileCheck %s
>          # CHECK:        DW_TAG_GNU_call_site
>          # CHECK-NEXT:     DW_AT_abstract_origin {{.*}} "foo")
>          # CHECK-NEXT:     DW_AT_low_pc {{.*}}
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-partial-describe.mir b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-partial-describe.mir
>         index b97785d650c9..f0902bbe41d6 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-partial-describe.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-partial-describe.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -emit-call-site-info -debug-entry-values -start-before=livedebugvalues -filetype=obj -o - %s \
>         +# RUN: llc -emit-call-site-info -start-before=livedebugvalues -filetype=obj -o - %s \
>          # RUN:     | llvm-dwarfdump - | FileCheck %s --implicit-check-not=DW_TAG_GNU_call_site_parameter
>
>          --- |
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-reference.mir b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-reference.mir
>         index 81af598ba194..73927772ca08 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-reference.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-reference.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -emit-call-site-info -debug-entry-values -start-before=livedebugvalues -filetype=obj -o - %s | llvm-dwarfdump - | FileCheck %s
>         +# RUN: llc -start-before=livedebugvalues -filetype=obj -o - %s | llvm-dwarfdump - | FileCheck %s
>
>          # Based on the following C++ code:
>          # struct A { A(A &) {} };
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-reg-shuffle.mir b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-reg-shuffle.mir
>         index 1baf66393c49..27a03193e816 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-reg-shuffle.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-reg-shuffle.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -emit-call-site-info -debug-entry-values -start-before=livedebugvalues -filetype=obj -o - %s \
>         +# RUN: llc -emit-call-site-info -start-before=livedebugvalues -filetype=obj -o - %s \
>          # RUN:     | llvm-dwarfdump - | FileCheck %s --implicit-check-not=DW_TAG_GNU_call_site_parameter
>
>          --- |
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-two-fwd-reg-defs.mir b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-two-fwd-reg-defs.mir
>         index ac97da66a397..c1bdbd0783ac 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-two-fwd-reg-defs.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-two-fwd-reg-defs.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -O1 -emit-call-site-info -debug-entry-values -start-after=livedebugvalues -filetype=obj %s -o - | llvm-dwarfdump - | FileCheck %s
>         +# RUN: llc -O1 -emit-call-site-info -start-after=livedebugvalues -filetype=obj %s -o - | llvm-dwarfdump - | FileCheck %s
>
>          # Based on the following C reproducer:
>          #
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/dbginfo-entryvals.mir b/llvm/test/DebugInfo/MIR/X86/dbginfo-entryvals.mir
>         index 9346b513cf48..302cce20a15a 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/dbginfo-entryvals.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/dbginfo-entryvals.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -emit-call-site-info -debug-entry-values -run-pass=livedebugvalues -verify-machineinstrs -march=x86-64 -o - %s | FileCheck %s
>         +# RUN: llc -run-pass=livedebugvalues -verify-machineinstrs -march=x86-64 -o - %s | FileCheck %s
>          #
>          #extern void fn2(int);
>          #
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/debug-call-site-param.mir b/llvm/test/DebugInfo/MIR/X86/debug-call-site-param.mir
>         index 2a78919afd43..c5ca4f1b2a14 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/debug-call-site-param.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/debug-call-site-param.mir
>         @@ -2,8 +2,8 @@
>          # When the debugger tuning is set to gdb, use GNU opcodes.
>          # For lldb, use the standard DWARF5 opcodes.
>
>         -# RUN: llc -emit-call-site-info -debug-entry-values -debugger-tune=gdb -filetype=obj -mtriple=x86_64-unknown-unknown -start-after=machineverifier -o - %s | llvm-dwarfdump - | FileCheck %s -check-prefixes=CHECK-GNU
>         -# RUN: llc -emit-call-site-info -debug-entry-values -debugger-tune=lldb -filetype=obj -mtriple=x86_64-unknown-unknown -start-after=machineverifier -o - %s | llvm-dwarfdump - | FileCheck %s -check-prefixes=CHECK-DWARF5
>         +# RUN: llc -emit-call-site-info -debugger-tune=gdb -filetype=obj -mtriple=x86_64-unknown-unknown -start-after=machineverifier -o - %s | llvm-dwarfdump - | FileCheck %s -check-prefixes=CHECK-GNU
>         +# RUN: llc -emit-call-site-info -debugger-tune=lldb -filetype=obj -mtriple=x86_64-unknown-unknown -start-after=machineverifier -o - %s | llvm-dwarfdump - | FileCheck %s -check-prefixes=CHECK-DWARF5
>          #
>          # extern void foo(int *a, int b, int c, int d, int e, int f);
>          # extern int getVal();
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/entry-value-of-modified-param.mir b/llvm/test/DebugInfo/MIR/X86/entry-value-of-modified-param.mir
>         index 541a2155578e..0dd63ae98009 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/entry-value-of-modified-param.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/entry-value-of-modified-param.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -emit-call-site-info -debug-entry-values -run-pass=livedebugvalues -march=x86-64 -o - %s | FileCheck %s
>         +# RUN: llc -run-pass=livedebugvalues -march=x86-64 -o - %s | FileCheck %s
>          #
>          #extern void fn1 (int, int, int);
>          #
>         @@ -85,11 +85,6 @@
>          ---
>          name:            fn2
>          alignment:       16
>         -callSites:
>         -  - { bb: 0, offset: 14, fwdArgRegs:
>         -      - { arg: 0, reg: '$edi' }
>         -      - { arg: 1, reg: '$esi' }
>         -      - { arg: 2, reg: '$edx' } }
>          body:             |
>            bb.0.entry:
>              liveins: $edi, $esi, $rbx
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/entry-values-diamond-bbs.mir b/llvm/test/DebugInfo/MIR/X86/entry-values-diamond-bbs.mir
>         index 042d76058a22..fc7bd93d0223 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/entry-values-diamond-bbs.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/entry-values-diamond-bbs.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -emit-call-site-info -debug-entry-values -run-pass=livedebugvalues -march=x86-64 -o - %s | FileCheck %s
>         +# RUN: llc -run-pass=livedebugvalues -march=x86-64 -o - %s | FileCheck %s
>          #
>          # The test case was artificially adjusted, in order to make proper diamond basic
>          # block structure relevant to the debug entry values propagation.
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/propagate-entry-value-cross-bbs.mir b/llvm/test/DebugInfo/MIR/X86/propagate-entry-value-cross-bbs.mir
>         index c5af863954bf..34f80f5ca2a3 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/propagate-entry-value-cross-bbs.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/propagate-entry-value-cross-bbs.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -emit-call-site-info -debug-entry-values -run-pass=livedebugvalues -march=x86-64 -o - %s | FileCheck %s
>         +# RUN: llc -run-pass=livedebugvalues -march=x86-64 -o - %s | FileCheck %s
>          #
>          #extern void fn1 (int, int, int);
>          #__attribute__((noinline))
>         @@ -110,15 +110,6 @@
>          ---
>          name:            fn2
>          alignment:       16
>         -callSites:
>         -  - { bb: 0, offset: 20, fwdArgRegs:
>         -      - { arg: 0, reg: '$edi' }
>         -      - { arg: 1, reg: '$esi' }
>         -      - { arg: 2, reg: '$edx' } }
>         -  - { bb: 3, offset: 2, fwdArgRegs:
>         -      - { arg: 0, reg: '$edi' }
>         -      - { arg: 1, reg: '$esi' }
>         -      - { arg: 2, reg: '$edx' } }
>          body:             |
>            bb.0.entry:
>              successors: %bb.1(0x40000000), %bb.2(0x40000000)
>
>         diff  --git a/llvm/test/DebugInfo/MIR/X86/unreachable-block-call-site.mir b/llvm/test/DebugInfo/MIR/X86/unreachable-block-call-site.mir
>         index ea9c12b5a192..bfc5c2be127e 100644
>         --- a/llvm/test/DebugInfo/MIR/X86/unreachable-block-call-site.mir
>         +++ b/llvm/test/DebugInfo/MIR/X86/unreachable-block-call-site.mir
>         @@ -1,4 +1,4 @@
>         -# RUN: llc -mtriple=x86_64-pc-linux -emit-call-site-info -debug-entry-values -run-pass=unreachable-mbb-elimination -o - %s | FileCheck %s
>         +# RUN: llc -emit-call-site-info -mtriple=x86_64-pc-linux -run-pass=unreachable-mbb-elimination -o - %s | FileCheck %s
>
>          # Verify that the call site information for the call residing in the eliminated
>          # block is removed. This test case would previously trigger an assertion when
>
>         diff  --git a/llvm/test/DebugInfo/X86/dbg-value-range.ll b/llvm/test/DebugInfo/X86/dbg-value-range.ll
>         index e0cfe5f15ee9..9159d2aac780 100644
>         --- a/llvm/test/DebugInfo/X86/dbg-value-range.ll
>         +++ b/llvm/test/DebugInfo/X86/dbg-value-range.ll
>         @@ -56,6 +56,6 @@ declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
>          ;CHECK-NEXT:   .quad   [[CLOBBER_OFF]]
>          ;CHECK-NEXT:  .short 1 ## Loc expr size
>          ;CHECK-NEXT:   .byte   85 ## DW_OP_reg
>         -;CHECK-NEXT:   .quad   0
>         +;CHECK:        .quad  0
>          ;CHECK-NEXT:   .quad   0
>          !24 = !{i32 1, !"Debug Info Version", i32 3}
>
>         diff  --git a/llvm/test/DebugInfo/X86/dbg-value-regmask-clobber.ll b/llvm/test/DebugInfo/X86/dbg-value-regmask-clobber.ll
>         index 440498a9d8dd..425a6cb38c41 100644
>         --- a/llvm/test/DebugInfo/X86/dbg-value-regmask-clobber.ll
>         +++ b/llvm/test/DebugInfo/X86/dbg-value-regmask-clobber.ll
>         @@ -9,8 +9,7 @@
>          ; ASM: movl $1, x(%rip)
>          ; ASM: callq clobber
>          ; ASM-NEXT: [[argc_range_end:.Ltmp[0-9]+]]:
>         -; Previously LiveDebugValues would claim argc was still in ecx after the call.
>         -; ASM-NOT: #DEBUG_VALUE: main:argc
>         +; ASM: #DEBUG_VALUE: main:argc <- [DW_OP_LLVM_entry_value 1] $ecx
>
>          ; argc is the first debug location.
>          ; ASM: .Ldebug_loc1:
>         @@ -23,7 +22,8 @@
>          ; DWARF: .debug_info contents:
>          ; DWARF:  DW_TAG_formal_parameter
>          ; DWARF-NEXT:    DW_AT_location ({{0x.*}}
>         -; DWARF-NEXT:      [0x0000000000000000, 0x0000000000000013): DW_OP_reg2 RCX)
>         +; DWARF-NEXT:    [0x0000000000000000, 0x0000000000000013): DW_OP_reg2 RCX
>         +; DWARF-NEXT:    [0x0000000000000013, 0x0000000000000043): DW_OP_GNU_entry_value(DW_OP_reg2 RCX), DW_OP_stack_value
>          ; DWARF-NEXT:    DW_AT_name ("argc")
>
>          ; ModuleID = 't.cpp'
>
>         diff  --git a/llvm/test/DebugInfo/X86/dbgcall-site-64-bit-imms.ll b/llvm/test/DebugInfo/X86/dbgcall-site-64-bit-imms.ll
>         index b8cd9574cc63..f12dfa6196c1 100644
>         --- a/llvm/test/DebugInfo/X86/dbgcall-site-64-bit-imms.ll
>         +++ b/llvm/test/DebugInfo/X86/dbgcall-site-64-bit-imms.ll
>         @@ -1,4 +1,4 @@
>         -; RUN: llc -O1 -emit-call-site-info -debug-entry-values -filetype=obj -o - %s | llvm-dwarfdump - | FileCheck %s
>         +; RUN: llc -emit-call-site-info -O1 -filetype=obj -o - %s | llvm-dwarfdump - | FileCheck %s
>
>          ; Verify that the 64-bit call site immediates are not truncated.
>          ;
>
>         diff  --git a/llvm/test/DebugInfo/X86/dbgcall-site-zero-valued-imms.ll b/llvm/test/DebugInfo/X86/dbgcall-site-zero-valued-imms.ll
>         index 5d37774f55d6..dc8c418117c7 100644
>         --- a/llvm/test/DebugInfo/X86/dbgcall-site-zero-valued-imms.ll
>         +++ b/llvm/test/DebugInfo/X86/dbgcall-site-zero-valued-imms.ll
>         @@ -1,4 +1,4 @@
>         -; RUN: llc -O3 -emit-call-site-info -debug-entry-values -filetype=obj -o - %s | llvm-dwarfdump - | FileCheck %s
>         +; RUN: llc -emit-call-site-info -O3 -filetype=obj -o - %s | llvm-dwarfdump - | FileCheck %s
>
>          target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
>          target triple = "x86_64-unknown-linux-gnu"
>
>         diff  --git a/llvm/test/DebugInfo/X86/loclists-dwp.ll b/llvm/test/DebugInfo/X86/loclists-dwp.ll
>         index 91f838876338..a972c8094c5f 100644
>         --- a/llvm/test/DebugInfo/X86/loclists-dwp.ll
>         +++ b/llvm/test/DebugInfo/X86/loclists-dwp.ll
>         @@ -19,10 +19,12 @@
>          ; void b(int i) { asm("" : : : "rdi"); }
>
>          ; CHECK:      DW_AT_location [DW_FORM_sec_offset]   (0x00000000
>         -; CHECK-NEXT: DW_LLE_startx_length (0x0000000000000000, 0x0000000000000006): DW_OP_reg5 RDI)
>         +; CHECK-NEXT: DW_LLE_startx_length (0x0000000000000000, 0x0000000000000006): DW_OP_reg5 RDI
>         +; CHECK-NEXT: DW_LLE_startx_length (0x0000000000000001, 0x0000000000000002): DW_OP_GNU_entry_value(DW_OP_reg5 RDI), DW_OP_stack_value)
>
>          ; CHECK:      DW_AT_location [DW_FORM_sec_offset]   (0x00000000
>         -; CHECK-NEXT: DW_LLE_startx_length (0x0000000000000000, 0x0000000000000000): DW_OP_reg5 RDI)
>         +; CHECK-NEXT: DW_LLE_startx_length (0x0000000000000000, 0x0000000000000000): DW_OP_reg5 RDI
>         +; CHECK-NEXT: DW_LLE_startx_length (0x0000000000000001, 0x0000000000000001): DW_OP_GNU_entry_value(DW_OP_reg5 RDI), DW_OP_stack_value)
>
>          target triple = "x86_64-unknown-linux-gnu"
>
>
>         diff  --git a/llvm/test/DebugInfo/X86/no-entry-values-with-O0.ll b/llvm/test/DebugInfo/X86/no-entry-values-with-O0.ll
>         new file mode 100644
>         index 000000000000..8ba22b7b6e51
>         --- /dev/null
>         +++ b/llvm/test/DebugInfo/X86/no-entry-values-with-O0.ll
>         @@ -0,0 +1,88 @@
>         +; RUN: llc -O0  -dwarf-version=5 -debugger-tune=lldb -march=x86-64 -filetype=obj < %s \
>         +; RUN:  | llvm-dwarfdump - | FileCheck --implicit-check-not=DW_OP_entry_value %s
>         +; RUN: llc -O0  -dwarf-version=5 -debugger-tune=gdb -march=x86-64 -filetype=obj < %s \
>         +; RUN:  | llvm-dwarfdump - | FileCheck --implicit-check-not=DW_OP_entry_value %s
>         +
>         +; The call-site-params are created iff corresponding DISubprogram contains
>         +; the AllCallsDescribed DIFlag.
>         +; CHECK-NOT: DW_TAG_call_site_param
>         +
>         +; Genarated with:
>         +; clang -gdwarf-5 -O0 test.c -S -emit-llvm
>         +;
>         +; ModuleID = 'test.c'
>         +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
>         +target triple = "x86_64-unknown-linux-gnu"
>         +
>         +; Function Attrs: noinline nounwind optnone uwtable
>         +define dso_local void @fn1(i32 %x, i32 %y) !dbg !7 {
>         +entry:
>         +  %x.addr = alloca i32, align 4
>         +  %y.addr = alloca i32, align 4
>         +  %u = alloca i32, align 4
>         +  %a = alloca i32, align 4
>         +  store i32 %x, i32* %x.addr, align 4
>         +  call void @llvm.dbg.declare(metadata i32* %x.addr, metadata !11, metadata !DIExpression()), !dbg !12
>         +  store i32 %y, i32* %y.addr, align 4
>         +  call void @llvm.dbg.declare(metadata i32* %y.addr, metadata !13, metadata !DIExpression()), !dbg !14
>         +  call void @llvm.dbg.declare(metadata i32* %u, metadata !15, metadata !DIExpression()), !dbg !16
>         +  %0 = load i32, i32* %x.addr, align 4, !dbg !16
>         +  %1 = load i32, i32* %y.addr, align 4, !dbg !16
>         +  %add = add nsw i32 %0, %1, !dbg !16
>         +  store i32 %add, i32* %u, align 4, !dbg !16
>         +  %2 = load i32, i32* %x.addr, align 4, !dbg !17
>         +  %cmp = icmp sgt i32 %2, 1, !dbg !17
>         +  br i1 %cmp, label %if.then, label %if.else, !dbg !16
>         +
>         +if.then:                                          ; preds = %entry
>         +  %3 = load i32, i32* %u, align 4, !dbg !17
>         +  %add1 = add nsw i32 %3, 1, !dbg !17
>         +  store i32 %add1, i32* %u, align 4, !dbg !17
>         +  br label %if.end, !dbg !17
>         +
>         +if.else:                                          ; preds = %entry
>         +  %4 = load i32, i32* %u, align 4, !dbg !17
>         +  %add2 = add nsw i32 %4, 2, !dbg !17
>         +  store i32 %add2, i32* %u, align 4, !dbg !17
>         +  br label %if.end
>         +
>         +if.end:                                           ; preds = %if.else, %if.then
>         +  call void @llvm.dbg.declare(metadata i32* %a, metadata !19, metadata !DIExpression()), !dbg !16
>         +  store i32 7, i32* %a, align 4, !dbg !16
>         +  %5 = load i32, i32* %a, align 4, !dbg !16
>         +  call void @fn2(i32 %5), !dbg !16
>         +  %6 = load i32, i32* %u, align 4, !dbg !16
>         +  %dec = add nsw i32 %6, -1, !dbg !16
>         +  store i32 %dec, i32* %u, align 4, !dbg !16
>         +  ret void, !dbg !16
>         +}
>         +
>         +; Function Attrs: nounwind readnone speculatable willreturn
>         +declare void @llvm.dbg.declare(metadata, metadata, metadata)
>         +
>         +declare dso_local void @fn2(i32)
>         +
>         +!llvm.dbg.cu <http://llvm.dbg.cu> = !{!0}
>         +!llvm.module.flags = !{!3, !4, !5}
>         +!llvm.ident = !{!6}
>         +
>         +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 11.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, splitDebugInlining: false, nameTableKind: None)
>         +!1 = !DIFile(filename: "test.c", directory: "/")
>         +!2 = !{}
>         +!3 = !{i32 7, !"Dwarf Version", i32 5}
>         +!4 = !{i32 2, !"Debug Info Version", i32 3}
>         +!5 = !{i32 1, !"wchar_size", i32 4}
>         +!6 = !{!"clang version 11.0.0"}
>         +!7 = distinct !DISubprogram(name: "fn1", scope: !1, file: !1, line: 5, type: !8, scopeLine: 5, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
>         +!8 = !DISubroutineType(types: !9)
>         +!9 = !{null, !10, !10}
>         +!10 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
>         +!11 = !DILocalVariable(name: "x", arg: 1, scope: !7, file: !1, line: 5, type: !10)
>         +!12 = !DILocation(line: 5, column: 10, scope: !7)
>         +!13 = !DILocalVariable(name: "y", arg: 2, scope: !7, file: !1, line: 5, type: !10)
>         +!14 = !DILocation(line: 5, column: 17, scope: !7)
>         +!15 = !DILocalVariable(name: "u", scope: !7, file: !1, line: 6, type: !10)
>         +!16 = !DILocation(line: 6, column: 7, scope: !7)
>         +!17 = !DILocation(line: 7, column: 7, scope: !18)
>         +!18 = distinct !DILexicalBlock(scope: !7, file: !1, line: 7, column: 7)
>         +!19 = !DILocalVariable(name: "a", scope: !7, file: !1, line: 11, type: !10)
>
>         diff  --git a/llvm/test/tools/llvm-locstats/locstats.ll b/llvm/test/tools/llvm-locstats/locstats.ll
>         index f16635d2e8e4..fd28679f3ec1 100644
>         --- a/llvm/test/tools/llvm-locstats/locstats.ll
>         +++ b/llvm/test/tools/llvm-locstats/locstats.ll
>         @@ -9,9 +9,9 @@
>          ; LOCSTATS: [10%,20%) 0 0%
>          ; LOCSTATS: [20%,30%) 1 11%
>          ; LOCSTATS: [30%,40%) 0 0%
>         -; LOCSTATS: [40%,50%) 1 11%
>         -; LOCSTATS: [50%,60%) 1 11%
>         -; LOCSTATS: [60%,70%) 1 11%
>         +; LOCSTATS: [40%,50%) 0 0%
>         +; LOCSTATS: [50%,60%) 0 0%
>         +; LOCSTATS: [60%,70%) 3 33%
>          ; LOCSTATS: [70%,80%) 0 0%
>          ; LOCSTATS: [80%,90%) 2 22%
>          ; LOCSTATS: [90%,100%) 1 11%
>
>
>
>         _______________________________________________
>         cfe-commits mailing list
>         cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>
>         https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>



More information about the cfe-commits mailing list