Author: Jeremy Morse Date: 2021-11-30T12:40:59Z New Revision: 651122fc4ac92b93f36aab3b194de21065a0c48e
URL: https://github.com/llvm/llvm-project/commit/651122fc4ac92b93f36aab3b194de21065a0c48e DIFF: https://github.com/llvm/llvm-project/commit/651122fc4ac92b93f36aab3b194de21065a0c48e.diff LOG: [DebugInfo][InstrRef] Pre-land on-by-default-for-x86 changes Over in D114631 and [0] there's a plan for turning instruction referencing on by default for x86. This patch adds / removes all the relevant bits of code, with the aim that the final patch is extremely small, for an easy revert. It should just be a condition in CommandFlags.cpp and removing the XFail on instr-ref-flag.ll. [0] https://lists.llvm.org/pipermail/llvm-dev/2021-November/153653.html Added: llvm/test/DebugInfo/X86/instr-ref-flag.ll Modified: clang/include/clang/Driver/Options.td llvm/include/llvm/CodeGen/CommandFlags.h llvm/lib/CodeGen/CommandFlags.cpp Removed: clang/test/Driver/debug-var-experimental-switch.c ################################################################################ diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index cf314bc73bf31..724eedd05da44 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -5180,10 +5180,6 @@ defm debug_pass_manager : BoolOption<"f", "debug-pass-manager", CodeGenOpts<"DebugPassManager">, DefaultFalse, PosFlag<SetTrue, [], "Prints debug information for the new pass manager">, NegFlag<SetFalse, [], "Disables debug printing for the new pass manager">>; -def fexperimental_debug_variable_locations : Flag<["-"], - "fexperimental-debug-variable-locations">, - HelpText<"Use experimental new value-tracking variable locations">, - MarshallingInfoFlag<CodeGenOpts<"ValueTrackingVariableLocations">>; def fverify_debuginfo_preserve : Flag<["-"], "fverify-debuginfo-preserve">, HelpText<"Enable Debug Info Metadata preservation testing in " diff --git a/clang/test/Driver/debug-var-experimental-switch.c b/clang/test/Driver/debug-var-experimental-switch.c deleted file mode 100644 index 9c7a782e9e2bb..0000000000000 --- a/clang/test/Driver/debug-var-experimental-switch.c +++ /dev/null @@ -1,2 +0,0 @@ -// RUN: %clang -Xclang -fexperimental-debug-variable-locations -fsyntax-only -disable-llvm-passes %s -int main() {} diff --git a/llvm/include/llvm/CodeGen/CommandFlags.h b/llvm/include/llvm/CodeGen/CommandFlags.h index ed3cd54df2727..73d39fecc268d 100644 --- a/llvm/include/llvm/CodeGen/CommandFlags.h +++ b/llvm/include/llvm/CodeGen/CommandFlags.h @@ -130,6 +130,7 @@ bool getEnableMachineFunctionSplitter(); bool getEnableDebugEntryValues(); bool getValueTrackingVariableLocations(); +Optional<bool> getExplicitValueTrackingVariableLocations(); bool getForceDwarfFrameSection(); @@ -170,6 +171,10 @@ void setFunctionAttributes(StringRef CPU, StringRef Features, Function &F); /// Set function attributes of functions in Module M based on CPU, /// Features, and command line flags. void setFunctionAttributes(StringRef CPU, StringRef Features, Module &M); + +/// Should value-tracking variable locations / instruction referencing be +/// enabled by default for this triple? +bool getDefaultValueTrackingVariableLocations(const llvm::Triple &T); } // namespace codegen } // namespace llvm diff --git a/llvm/lib/CodeGen/CommandFlags.cpp b/llvm/lib/CodeGen/CommandFlags.cpp index a1ff02178ffae..ecf3d931fc33b 100644 --- a/llvm/lib/CodeGen/CommandFlags.cpp +++ b/llvm/lib/CodeGen/CommandFlags.cpp @@ -90,7 +90,7 @@ CGOPT(bool, EnableAddrsig) CGOPT(bool, EmitCallSiteInfo) CGOPT(bool, EnableMachineFunctionSplitter) CGOPT(bool, EnableDebugEntryValues) -CGOPT(bool, ValueTrackingVariableLocations) +CGOPT_EXP(bool, ValueTrackingVariableLocations) CGOPT(bool, ForceDwarfFrameSection) CGOPT(bool, XRayOmitFunctionIndex) CGOPT(bool, DebugStrictDwarf) @@ -534,12 +534,17 @@ codegen::InitTargetOptionsFromCodeGenFlags(const Triple &TheTriple) { Options.EmitAddrsig = getEnableAddrsig(); Options.EmitCallSiteInfo = getEmitCallSiteInfo(); Options.EnableDebugEntryValues = getEnableDebugEntryValues(); - Options.ValueTrackingVariableLocations = getValueTrackingVariableLocations(); Options.ForceDwarfFrameSection = getForceDwarfFrameSection(); Options.XRayOmitFunctionIndex = getXRayOmitFunctionIndex(); Options.DebugStrictDwarf = getDebugStrictDwarf(); Options.LoopAlignment = getAlignLoops(); + if (auto Opt = getExplicitValueTrackingVariableLocations()) + Options.ValueTrackingVariableLocations = *Opt; + else + Options.ValueTrackingVariableLocations = + getDefaultValueTrackingVariableLocations(TheTriple); + Options.MCOptions = mc::InitMCTargetOptionsFromFlags(); Options.ThreadModel = getThreadModel(); @@ -692,3 +697,7 @@ void codegen::setFunctionAttributes(StringRef CPU, StringRef Features, for (Function &F : M) setFunctionAttributes(CPU, Features, F); } + +bool codegen::getDefaultValueTrackingVariableLocations(const llvm::Triple &T) { + return false; +} diff --git a/llvm/test/DebugInfo/X86/instr-ref-flag.ll b/llvm/test/DebugInfo/X86/instr-ref-flag.ll new file mode 100644 index 0000000000000..b496bc418dec9 --- /dev/null +++ b/llvm/test/DebugInfo/X86/instr-ref-flag.ll @@ -0,0 +1,50 @@ +; RUN: llc %s -o - -stop-before=finalize-isel -march=x86-64 \ +; RUN: | FileCheck %s --check-prefixes=INSTRREFON +; RUN: llc %s -o - -stop-before=finalize-isel -march=x86-64 \ +; RUN: -experimental-debug-variable-locations=true \ +; RUN: | FileCheck %s --check-prefixes=INSTRREFON + +; RUN: llc %s -o - -stop-before=finalize-isel -march=x86-64 \ +; RUN: -experimental-debug-variable-locations=false \ +; RUN: | FileCheck %s --check-prefixes=INSTRREFOFF \ +; RUN: --implicit-check-not=DBG_INSTR_REF + +;; This test checks that for an x86 triple, instruction referencing is used +;; by llc by default, and that it can be turned explicitly on or off as +;; desired. + +;; XFail it for pre-landing the patch, and to allow a minimal delta if it +;; has to be reverted. +; XFAIL: * + +; INSTRREFON: DBG_INSTR_REF +; INSTRREFOFF: DBG_VALUE + +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-unknown" + +define hidden i32 @foo(i32 %a) local_unnamed_addr !dbg !7 { + %b = add i32 %a, 1 + call void @llvm.dbg.value(metadata i32 %b, metadata !11, metadata !DIExpression()), !dbg !12 + ret i32 %b, !dbg !12 +} + +; Function Attrs: nofree nosync nounwind readnone speculatable willreturn +declare void @llvm.dbg.value(metadata, metadata, metadata) + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!3, !4, !5, !6} + +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug) +!1 = !DIFile(filename: "foo.cpp", directory: ".") +!2 = !DIBasicType(name: "int", size: 8, encoding: DW_ATE_signed) +!3 = !{i32 2, !"Dwarf Version", i32 4} +!4 = !{i32 2, !"Debug Info Version", i32 3} +!5 = !{i32 1, !"wchar_size", i32 2} +!6 = !{i32 7, !"PIC Level", i32 2} +!7 = distinct !DISubprogram(name: "foo", linkageName: "foo", scope: !1, file: !1, line: 6, type: !8, scopeLine: 6, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !10) +!8 = !DISubroutineType(types: !9) +!9 = !{!2, !2} +!10 = !{!11} +!11 = !DILocalVariable(name: "baz", scope: !7, file: !1, line: 7, type: !2) +!12 = !DILocation(line: 10, scope: !7) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits