forked from OSchip/llvm-project
Revert "[CodeView] Add option to disable inline line tables."
because it breaks compiler-rt tests.
This reverts commit 6d03890384
.
This commit is contained in:
parent
6d03890384
commit
004ed2b0d1
|
@ -136,8 +136,6 @@ CODEGENOPT(FatalWarnings , 1, 0) ///< Set when -Wa,--fatal-warnings is
|
|||
///< enabled.
|
||||
CODEGENOPT(NoWarn , 1, 0) ///< Set when -Wa,--no-warn is enabled.
|
||||
CODEGENOPT(EnableSegmentedStacks , 1, 0) ///< Set when -fsplit-stack is enabled.
|
||||
CODEGENOPT(NoInlineLineTables, 1, 0) ///< Whether debug info should contain
|
||||
///< inline line tables.
|
||||
CODEGENOPT(NoImplicitFloat , 1, 0) ///< Set when -mno-implicit-float is enabled.
|
||||
CODEGENOPT(NoInfsFPMath , 1, 0) ///< Assume FP arguments, results not +-Inf.
|
||||
CODEGENOPT(NoSignedZeros , 1, 0) ///< Allow ignoring the signedness of FP zero
|
||||
|
|
|
@ -1984,9 +1984,6 @@ def gcodeview_ghash : Flag<["-"], "gcodeview-ghash">,
|
|||
HelpText<"Emit type record hashes in a .debug$H section">,
|
||||
Flags<[CC1Option, CoreOption]>;
|
||||
def gno_codeview_ghash : Flag<["-"], "gno-codeview-ghash">, Flags<[CoreOption]>;
|
||||
def ginline_line_tables : Flag<["-"], "ginline-line-tables">, Flags<[CoreOption]>;
|
||||
def gno_inline_line_tables : Flag<["-"], "gno-inline-line-tables">,
|
||||
Flags<[CC1Option, CoreOption]>, HelpText<"Don't emit inline line tables">;
|
||||
|
||||
// Equivalent to our default dwarf version. Forces usual dwarf emission when
|
||||
// CodeView is enabled.
|
||||
|
|
|
@ -764,10 +764,6 @@ void CodeGenFunction::StartFunction(GlobalDecl GD,
|
|||
Fn->addFnAttr("no-jump-tables",
|
||||
llvm::toStringRef(CGM.getCodeGenOpts().NoUseJumpTables));
|
||||
|
||||
// Add no-inline-line-tables value.
|
||||
if (CGM.getCodeGenOpts().NoInlineLineTables)
|
||||
Fn->addFnAttr("no-inline-line-tables");
|
||||
|
||||
// Add profile-sample-accurate value.
|
||||
if (CGM.getCodeGenOpts().ProfileSampleAccurate)
|
||||
Fn->addFnAttr("profile-sample-accurate");
|
||||
|
|
|
@ -3296,12 +3296,6 @@ static void RenderDebugOptions(const ToolChain &TC, const Driver &D,
|
|||
}
|
||||
}
|
||||
|
||||
// Omit inline line tables if requested.
|
||||
if (!Args.hasFlag(options::OPT_ginline_line_tables,
|
||||
options::OPT_gno_inline_line_tables, false)) {
|
||||
CmdArgs.push_back("-gno-inline-line-tables");
|
||||
}
|
||||
|
||||
// Adjust the debug info kind for the given toolchain.
|
||||
TC.adjustDebugInfoKind(DebugInfoKind, Args);
|
||||
|
||||
|
|
|
@ -806,7 +806,6 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
|||
Opts.RecordCommandLine = Args.getLastArgValue(OPT_record_command_line);
|
||||
Opts.MergeAllConstants = Args.hasArg(OPT_fmerge_all_constants);
|
||||
Opts.NoCommon = Args.hasArg(OPT_fno_common);
|
||||
Opts.NoInlineLineTables = Args.hasArg(OPT_gno_inline_line_tables);
|
||||
Opts.NoImplicitFloat = Args.hasArg(OPT_no_implicit_float);
|
||||
Opts.OptimizeSize = getOptimizationLevelSize(Args);
|
||||
Opts.SimplifyLibCalls = !(Args.hasArg(OPT_fno_builtin) ||
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
// RUN: %clang_cc1 -triple x86_64-windows-msvc -debug-info-kind=limited \
|
||||
// RUN: -gno-inline-line-tables -emit-llvm -o - %s | FileCheck %s
|
||||
|
||||
int x;
|
||||
__attribute((always_inline)) void f() {
|
||||
x += 1;
|
||||
}
|
||||
int main() {
|
||||
f();
|
||||
x += 2;
|
||||
return x;
|
||||
}
|
||||
|
||||
// Check that clang emits the location of the call site and not the inlined
|
||||
// function in the debug info.
|
||||
// CHECK: define dso_local i32 @main()
|
||||
// CHECK: %{{.+}} = load i32, i32* @x, align 4, !dbg [[DbgLoc:![0-9]+]]
|
||||
|
||||
// Check that the no-inline-line-tables attribute is added.
|
||||
// CHECK: attributes #0 = {{.*}}"no-inline-line-tables"{{.*}}
|
||||
// CHECK: attributes #1 = {{.*}}"no-inline-line-tables"{{.*}}
|
||||
|
||||
// CHECK: [[DbgLoc]] = !DILocation(line: 9,
|
||||
// CHECK-NOT: inlinedAt:
|
|
@ -1452,13 +1452,6 @@ example:
|
|||
``naked``
|
||||
This attribute disables prologue / epilogue emission for the
|
||||
function. This can have very system-specific consequences.
|
||||
``"no-inline-line-tables"``
|
||||
When this attribute is set to true, the inliner discards source locations
|
||||
when inlining code and instead uses the source location of the call site.
|
||||
Breakpoints set on code that was inlined into the current function will
|
||||
not fire during the execution of the inlined call sites. If the debugger
|
||||
stops inside an inlined call site, it will appear to be stopped at the
|
||||
outermost inlined call site.
|
||||
``no-jump-tables``
|
||||
When this attribute is set to true, the jump tables and lookup tables that
|
||||
can be generated from a switch case lowering are disabled.
|
||||
|
|
|
@ -220,7 +220,6 @@ def NoInfsFPMath : StrBoolAttr<"no-infs-fp-math">;
|
|||
def NoNansFPMath : StrBoolAttr<"no-nans-fp-math">;
|
||||
def UnsafeFPMath : StrBoolAttr<"unsafe-fp-math">;
|
||||
def NoJumpTables : StrBoolAttr<"no-jump-tables">;
|
||||
def NoInlineLineTables : StrBoolAttr<"no-inline-line-tables">;
|
||||
def ProfileSampleAccurate : StrBoolAttr<"profile-sample-accurate">;
|
||||
|
||||
class CompatRule<string F> {
|
||||
|
|
|
@ -1405,10 +1405,6 @@ static void fixupLineNumbers(Function *Fn, Function::iterator FI,
|
|||
// other.
|
||||
DenseMap<const MDNode *, MDNode *> IANodes;
|
||||
|
||||
// Check if we are not generating inline line tables and want to use
|
||||
// the call site location instead.
|
||||
bool NoInlineLineTables = Fn->hasFnAttribute("no-inline-line-tables");
|
||||
|
||||
for (; FI != Fn->end(); ++FI) {
|
||||
for (BasicBlock::iterator BI = FI->begin(), BE = FI->end();
|
||||
BI != BE; ++BI) {
|
||||
|
@ -1420,22 +1416,20 @@ static void fixupLineNumbers(Function *Fn, Function::iterator FI,
|
|||
BI->setMetadata(LLVMContext::MD_loop, NewLoopID);
|
||||
}
|
||||
|
||||
if (!NoInlineLineTables)
|
||||
if (DebugLoc DL = BI->getDebugLoc()) {
|
||||
DebugLoc IDL =
|
||||
inlineDebugLoc(DL, InlinedAtNode, BI->getContext(), IANodes);
|
||||
BI->setDebugLoc(IDL);
|
||||
continue;
|
||||
}
|
||||
if (DebugLoc DL = BI->getDebugLoc()) {
|
||||
DebugLoc IDL =
|
||||
inlineDebugLoc(DL, InlinedAtNode, BI->getContext(), IANodes);
|
||||
BI->setDebugLoc(IDL);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (CalleeHasDebugInfo && !NoInlineLineTables)
|
||||
if (CalleeHasDebugInfo)
|
||||
continue;
|
||||
|
||||
// If the inlined instruction has no line number, or if inline info
|
||||
// is not being generated, make it look as if it originates from the call
|
||||
// location. This is important for ((__always_inline, __nodebug__))
|
||||
// functions which must use caller location for all instructions in their
|
||||
// function body.
|
||||
// If the inlined instruction has no line number, make it look as if it
|
||||
// originates from the call location. This is important for
|
||||
// ((__always_inline__, __nodebug__)) functions which must use caller
|
||||
// location for all instructions in their function body.
|
||||
|
||||
// Don't update static allocas, as they may get moved later.
|
||||
if (auto *AI = dyn_cast<AllocaInst>(BI))
|
||||
|
@ -1444,19 +1438,6 @@ static void fixupLineNumbers(Function *Fn, Function::iterator FI,
|
|||
|
||||
BI->setDebugLoc(TheCallDL);
|
||||
}
|
||||
|
||||
// Remove debug info intrinsics if we're not keeping inline info.
|
||||
if (NoInlineLineTables) {
|
||||
BasicBlock::iterator BI = FI->begin();
|
||||
while (BI != FI->end()) {
|
||||
if (isa<DbgInfoIntrinsic>(BI)) {
|
||||
BI = BI->eraseFromParent();
|
||||
continue;
|
||||
}
|
||||
++BI;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,99 +0,0 @@
|
|||
; RUN: opt < %s -inline -S | FileCheck %s
|
||||
|
||||
; This tests that functions with the attribute `no-inline-line-tables` have the
|
||||
; correct debug information when they are inlined.
|
||||
|
||||
; ModuleID = 't.c'
|
||||
source_filename = "t.c"
|
||||
target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-unknown-windows-msvc"
|
||||
|
||||
; Function Attrs: alwaysinline nounwind
|
||||
define dso_local i32 @f(i32 %x) #0 !dbg !7 {
|
||||
entry:
|
||||
%x.addr = alloca i32, align 4
|
||||
store i32 %x, i32* %x.addr, align 4
|
||||
call void @llvm.dbg.declare(metadata i32* %x.addr, metadata !12, metadata !DIExpression()), !dbg !13
|
||||
%0 = load i32, i32* %x.addr, align 4, !dbg !14
|
||||
ret i32 %0, !dbg !14
|
||||
}
|
||||
|
||||
; Function Attrs: nounwind readnone speculatable willreturn
|
||||
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
|
||||
|
||||
; Function Attrs: alwaysinline nounwind
|
||||
define i32 @g(i32 %x) #0 !dbg !15 {
|
||||
entry:
|
||||
%x.addr = alloca i32, align 4
|
||||
store i32 %x, i32* %x.addr, align 4
|
||||
call void @llvm.dbg.declare(metadata i32* %x.addr, metadata !16, metadata !DIExpression()), !dbg !17
|
||||
br label %L, !dbg !17
|
||||
|
||||
L: ; preds = %entry
|
||||
call void @llvm.dbg.label(metadata !18), !dbg !19
|
||||
store i32 42, i32* %x.addr, align 4, !dbg !20
|
||||
%0 = load i32, i32* %x.addr, align 4, !dbg !21
|
||||
ret i32 %0, !dbg !21
|
||||
}
|
||||
|
||||
; Function Attrs: nounwind readnone speculatable willreturn
|
||||
declare void @llvm.dbg.label(metadata) #1
|
||||
|
||||
; Check that debug info for inlined code uses the call location and that debug
|
||||
; intrinsics are removed.
|
||||
; Function Attrs: noinline nounwind optnone
|
||||
define i32 @main() #2 !dbg !22 {
|
||||
entry:
|
||||
; CHECK-LABEL: @main()
|
||||
; CHECK-NOT: @f
|
||||
; CHECK-NOT: @llvm.dbg.declare
|
||||
; CHECK: %{{[0-9]+}} = load i32, i32* %x.addr.i, align 4, !dbg ![[VAR1:[0-9]+]]
|
||||
%call = call i32 @f(i32 3), !dbg !25
|
||||
|
||||
; Another test for inlining debug intrinsics where the intrinsic appears at the
|
||||
; start of the basic block.
|
||||
; CHECK-NOT: @g
|
||||
; CHECK-NOT: @llvm.dbg.label
|
||||
; CHECK: %{{[0-9]+}} = load i32, i32* %x.addr.i1, align 4, !dbg ![[VAR2:[0-9]+]]
|
||||
%call1 = call i32 @g(i32 340), !dbg !26
|
||||
ret i32 0, !dbg !27
|
||||
}
|
||||
|
||||
; CHECK: ![[VAR1]] = !DILocation(line: 10, scope: ![[SCOPE:[0-9]+]])
|
||||
; CHECK: ![[VAR2]] = !DILocation(line: 11, scope: ![[SCOPE]])
|
||||
|
||||
attributes #0 = { alwaysinline nounwind "no-inline-line-tables" }
|
||||
attributes #2 = { noinline nounwind optnone "no-inline-line-tables"}
|
||||
|
||||
!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 10.0.0 (https://github.com/llvm/llvm-project.git 03ec3a12a94bbbaa11999b6da3a43221a5aa54a5)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None)
|
||||
!1 = !DIFile(filename: "<stdin>", directory: "/usr/local/google/home/akhuang/testing/inline-line-tables", checksumkind: CSK_MD5, checksum: "38a4785b48742d3ea655b8f3461436a4")
|
||||
!2 = !{}
|
||||
!3 = !{i32 2, !"CodeView", i32 1}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = !{i32 1, !"wchar_size", i32 4}
|
||||
!6 = !{!"clang version 10.0.0 (https://github.com/llvm/llvm-project.git 03ec3a12a94bbbaa11999b6da3a43221a5aa54a5)"}
|
||||
!7 = distinct !DISubprogram(name: "f", scope: !8, file: !8, line: 1, type: !9, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
|
||||
!8 = !DIFile(filename: "t.c", directory: "/usr/local/google/home/akhuang/testing/inline-line-tables", checksumkind: CSK_MD5, checksum: "38a4785b48742d3ea655b8f3461436a4")
|
||||
!9 = !DISubroutineType(types: !10)
|
||||
!10 = !{!11, !11}
|
||||
!11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
!12 = !DILocalVariable(name: "x", arg: 1, scope: !7, file: !8, line: 1, type: !11)
|
||||
!13 = !DILocation(line: 1, scope: !7)
|
||||
!14 = !DILocation(line: 2, scope: !7)
|
||||
!15 = distinct !DISubprogram(name: "g", scope: !8, file: !8, line: 4, type: !9, scopeLine: 4, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
|
||||
!16 = !DILocalVariable(name: "x", arg: 1, scope: !15, file: !8, line: 4, type: !11)
|
||||
!17 = !DILocation(line: 4, scope: !15)
|
||||
!18 = !DILabel(scope: !15, name: "L", file: !8, line: 5)
|
||||
!19 = !DILocation(line: 5, scope: !15)
|
||||
!20 = !DILocation(line: 6, scope: !15)
|
||||
!21 = !DILocation(line: 7, scope: !15)
|
||||
!22 = distinct !DISubprogram(name: "main", scope: !8, file: !8, line: 9, type: !23, scopeLine: 9, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
|
||||
!23 = !DISubroutineType(types: !24)
|
||||
!24 = !{!11}
|
||||
!25 = !DILocation(line: 10, scope: !22)
|
||||
!26 = !DILocation(line: 11, scope: !22)
|
||||
!27 = !DILocation(line: 12, scope: !22)
|
Loading…
Reference in New Issue