From 3749668cd8f4d7c1c36de8ec75ca51f95ec1e4e8 Mon Sep 17 00:00:00 2001 From: Bob Haarman Date: Tue, 21 May 2019 11:53:41 +0000 Subject: [PATCH] Revert r360902 "Resubmit: [Salvage] Change salvage debug info ..." This reverts commit rr360902. It caused an assertion failure in lib/IR/DebugInfoMetadata.cpp: Assertion `(OffsetInBits + SizeInBits <= FragmentSizeInBits) && "new fragment outside of original fragment"' failed. PR41931. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@361246 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Utils/Local.cpp | 23 ++--------------- test/DebugInfo/salvage-cast-debug-info.ll | 25 ------------------- test/Transforms/EarlyCSE/debug-info-undef.ll | 2 +- .../Transforms/InstCombine/cast-mul-select.ll | 2 -- .../InstCombine/unavailable-debug.ll | 2 +- 5 files changed, 4 insertions(+), 50 deletions(-) delete mode 100755 test/DebugInfo/salvage-cast-debug-info.ll diff --git a/lib/Transforms/Utils/Local.cpp b/lib/Transforms/Utils/Local.cpp index d6dbb919e1e..91d33cb0f20 100644 --- a/lib/Transforms/Utils/Local.cpp +++ b/lib/Transforms/Utils/Local.cpp @@ -1690,27 +1690,8 @@ DIExpression *llvm::salvageDebugInfoImpl(Instruction &I, // No-op casts and zexts are irrelevant for debug info. if (CI->isNoopCast(DL) || isa(&I)) return SrcDIExpr; - - Type *Type = CI->getType(); - // Casts other than Trunc or SExt to scalar types cannot be salvaged. - if (Type->isVectorTy() || (!isa(&I) && !isa(&I))) - return nullptr; - - Value *FromValue = CI->getOperand(0); - unsigned FromTypeBitSize = FromValue->getType()->getScalarSizeInBits(); - - unsigned ToTypeBitSize = Type->getScalarSizeInBits(); - - // The result of the cast will be sign extended iff the instruction is a - // SExt; signedness is otherwise irrelevant on the expression stack. - unsigned Encoding = - isa(&I) ? dwarf::DW_ATE_signed : dwarf::DW_ATE_unsigned; - - return applyOps({dwarf::DW_OP_LLVM_convert, FromTypeBitSize, Encoding, - dwarf::DW_OP_LLVM_convert, ToTypeBitSize, Encoding}); - } - - if (auto *GEP = dyn_cast(&I)) { + return nullptr; + } else if (auto *GEP = dyn_cast(&I)) { unsigned BitWidth = M.getDataLayout().getIndexSizeInBits(GEP->getPointerAddressSpace()); // Rewrite a constant GEP into a DIExpression. diff --git a/test/DebugInfo/salvage-cast-debug-info.ll b/test/DebugInfo/salvage-cast-debug-info.ll deleted file mode 100755 index 1c8196a6589..00000000000 --- a/test/DebugInfo/salvage-cast-debug-info.ll +++ /dev/null @@ -1,25 +0,0 @@ -; RUN: opt %s -debugify -early-cse -S | FileCheck %s -define i32 @foo(i64 %nose, i32 %more) { -; CHECK-LABEL: @foo( -; CHECK: call void @llvm.dbg.value(metadata i64 %nose, metadata [[V1:![0-9]+]], metadata !DIExpression(DW_OP_LLVM_convert, 64, DW_ATE_unsigned, DW_OP_LLVM_convert, 32, DW_ATE_unsigned -; CHECK: call void @llvm.dbg.value(metadata i64 %nose.shift, metadata [[V2:![0-9]+]] -; CHECK: call void @llvm.dbg.value(metadata i64 %nose.shift, metadata [[V3:![0-9]+]], metadata !DIExpression(DW_OP_LLVM_convert, 64, DW_ATE_unsigned, DW_OP_LLVM_convert, 32, DW_ATE_unsigned - -entry: - %nose.trunc = trunc i64 %nose to i32 - %nose.shift = lshr i64 %nose, 32 - %nose.trunc.2 = trunc i64 %nose.shift to i32 - %add = add nsw i32 %more, 1 - ret i32 %add -} - -!llvm.module.flags = !{!0, !1} -!llvm.ident = !{!2} - -!0 = !{i32 1, !"wchar_size", i32 2} -!1 = !{i32 7, !"PIC Level", i32 2} -!2 = !{!"clang version 9.0.0 "} - -; CHECK: [[V1]] = !DILocalVariable( -; CHECK: [[V2]] = !DILocalVariable( -; CHECK: [[V3]] = !DILocalVariable( diff --git a/test/Transforms/EarlyCSE/debug-info-undef.ll b/test/Transforms/EarlyCSE/debug-info-undef.ll index b0fb8ff75ad..4615aa264b6 100644 --- a/test/Transforms/EarlyCSE/debug-info-undef.ll +++ b/test/Transforms/EarlyCSE/debug-info-undef.ll @@ -10,7 +10,7 @@ entry: %0 = load i8, i8* @a, align 1, !dbg !19, !tbaa !20 %conv = sext i8 %0 to i16, !dbg !19 -; CHECK: call void @llvm.dbg.value(metadata i8 %0, metadata !17, metadata !DIExpression(DW_OP_LLVM_convert, 8, DW_ATE_signed, DW_OP_LLVM_convert, 16, DW_ATE_signed, DW_OP_stack_value)), !dbg !18 +; CHECK: call void @llvm.dbg.value(metadata i16 undef, metadata !17, metadata !DIExpression()), !dbg !18 ; CHECK-NEXT: call i32 (...) @optimize_me_not() call void @llvm.dbg.value(metadata i16 %conv, metadata !17, metadata !DIExpression()), !dbg !18 diff --git a/test/Transforms/InstCombine/cast-mul-select.ll b/test/Transforms/InstCombine/cast-mul-select.ll index f82d2fd285f..c501fd8d04c 100644 --- a/test/Transforms/InstCombine/cast-mul-select.ll +++ b/test/Transforms/InstCombine/cast-mul-select.ll @@ -13,8 +13,6 @@ define i32 @mul(i32 %x, i32 %y) { ; we preserve the debug information in the resulting ; instruction. ; DBGINFO-LABEL: @mul( -; DBGINFO-NEXT: call void @llvm.dbg.value(metadata i32 %x -; DBGINFO-NEXT: call void @llvm.dbg.value(metadata i32 %y ; DBGINFO-NEXT: [[C:%.*]] = mul i32 {{.*}} ; DBGINFO-NEXT: [[D:%.*]] = and i32 {{.*}} ; DBGINFO-NEXT: call void @llvm.dbg.value(metadata i32 [[C]] diff --git a/test/Transforms/InstCombine/unavailable-debug.ll b/test/Transforms/InstCombine/unavailable-debug.ll index e3f0d7cf22d..703c1c2898f 100644 --- a/test/Transforms/InstCombine/unavailable-debug.ll +++ b/test/Transforms/InstCombine/unavailable-debug.ll @@ -2,7 +2,7 @@ ; Make sure to update the debug value after dead code elimination. ; CHECK: %call = call signext i8 @b(i32 6), !dbg !39 -; CHECK-NEXT: call void @llvm.dbg.value(metadata i8 %call, metadata !30, metadata !DIExpression(DW_OP_LLVM_convert, 8, DW_ATE_signed, DW_OP_LLVM_convert, 32, DW_ATE_signed, DW_OP_stack_value)), !dbg !38 +; CHECK-NEXT: call void @llvm.dbg.value(metadata i32 undef, metadata !30, metadata !DIExpression()), !dbg !38 @e = common local_unnamed_addr global i8 0, align 1, !dbg !0 @c = common local_unnamed_addr global i32 0, align 4, !dbg !6 -- 2.50.1