Skip to content

Commit 1f3dd83

Browse files
committed
Revert "[DebugInfo] Correctly handle salvaged casts and split fragments at ISel"
Reverted due to build failure on windows bots. This reverts commit bb1b0bc.
1 parent bad6a76 commit 1f3dd83

File tree

11 files changed

+19
-156
lines changed

11 files changed

+19
-156
lines changed

llvm/include/llvm/IR/DebugInfoMetadata.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2552,11 +2552,6 @@ class DIExpression : public MDNode {
25522552
return 0;
25532553
}
25542554

2555-
using ExtOps = std::array<uint64_t, 6>;
2556-
2557-
/// Returns the ops for a zero- or sign-extension in a DIExpression.
2558-
static ExtOps getExtOps(unsigned FromSize, unsigned ToSize, bool Signed);
2559-
25602555
/// Append a zero- or sign-extension to \p Expr. Converts the expression to a
25612556
/// stack value if it isn't one already.
25622557
static DIExpression *appendExt(const DIExpression *Expr, unsigned FromSize,

llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5571,26 +5571,8 @@ bool SelectionDAGBuilder::EmitFuncArgumentDbgValue(
55715571
= [&](ArrayRef<std::pair<unsigned, unsigned>> SplitRegs) {
55725572
unsigned Offset = 0;
55735573
for (auto RegAndSize : SplitRegs) {
5574-
// If the expression is already a fragment, the current register
5575-
// offset+size might extend beyond the fragment. In this case, only
5576-
// the register bits that are inside the fragment are relevant.
5577-
int RegFragmentSizeInBits = RegAndSize.second;
5578-
if (auto ExprFragmentInfo = Expr->getFragmentInfo()) {
5579-
uint64_t ExprFragmentSizeInBits = ExprFragmentInfo->SizeInBits;
5580-
// The register is entirely outside the expression fragment,
5581-
// so is irrelevant for debug info.
5582-
if (Offset >= ExprFragmentSizeInBits)
5583-
break;
5584-
// The register is partially outside the expression fragment, only
5585-
// the low bits within the fragment are relevant for debug info.
5586-
if (Offset + RegFragmentSizeInBits > ExprFragmentSizeInBits) {
5587-
RegFragmentSizeInBits = ExprFragmentSizeInBits - Offset;
5588-
}
5589-
}
5590-
55915574
auto FragmentExpr = DIExpression::createFragmentExpression(
5592-
Expr, Offset, RegFragmentSizeInBits);
5593-
Offset += RegAndSize.second;
5575+
Expr, Offset, RegAndSize.second);
55945576
// If a valid fragment expression cannot be created, the variable's
55955577
// correct value cannot be determined and so it is set as Undef.
55965578
if (!FragmentExpr) {
@@ -5603,6 +5585,7 @@ bool SelectionDAGBuilder::EmitFuncArgumentDbgValue(
56035585
FuncInfo.ArgDbgValues.push_back(
56045586
BuildMI(MF, DL, TII->get(TargetOpcode::DBG_VALUE), false,
56055587
RegAndSize.first, Variable, *FragmentExpr));
5588+
Offset += RegAndSize.second;
56065589
}
56075590
};
56085591

llvm/lib/IR/DebugInfoMetadata.cpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,18 +1196,13 @@ bool DIExpression::isConstant() const {
11961196
return true;
11971197
}
11981198

1199-
DIExpression::ExtOps DIExpression::getExtOps(unsigned FromSize, unsigned ToSize,
1200-
bool Signed) {
1201-
dwarf::TypeKind TK = Signed ? dwarf::DW_ATE_signed : dwarf::DW_ATE_unsigned;
1202-
DIExpression::ExtOps Ops({dwarf::DW_OP_LLVM_convert, FromSize, TK,
1203-
dwarf::DW_OP_LLVM_convert, ToSize, TK});
1204-
return Ops;
1205-
}
1206-
12071199
DIExpression *DIExpression::appendExt(const DIExpression *Expr,
12081200
unsigned FromSize, unsigned ToSize,
12091201
bool Signed) {
1210-
return appendToStack(Expr, getExtOps(FromSize, ToSize, Signed));
1202+
dwarf::TypeKind TK = Signed ? dwarf::DW_ATE_signed : dwarf::DW_ATE_unsigned;
1203+
uint64_t Ops[] = {dwarf::DW_OP_LLVM_convert, FromSize, TK,
1204+
dwarf::DW_OP_LLVM_convert, ToSize, TK};
1205+
return appendToStack(Expr, Ops);
12111206
}
12121207

12131208
DIGlobalVariableExpression *

llvm/lib/Transforms/Utils/Local.cpp

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1676,30 +1676,18 @@ DIExpression *llvm::salvageDebugInfoImpl(Instruction &I,
16761676
};
16771677

16781678
// initializer-list helper for applying operators to the source DIExpression.
1679-
auto applyOps = [&](ArrayRef<uint64_t> Opcodes) -> DIExpression * {
1680-
SmallVector<uint64_t, 8> Ops(Opcodes.begin(), Opcodes.end());
1679+
auto applyOps =
1680+
[&](std::initializer_list<uint64_t> Opcodes) -> DIExpression * {
1681+
SmallVector<uint64_t, 8> Ops(Opcodes);
16811682
return doSalvage(Ops);
16821683
};
16831684

16841685
if (auto *CI = dyn_cast<CastInst>(&I)) {
16851686
// No-op casts and zexts are irrelevant for debug info.
16861687
if (CI->isNoopCast(DL) || isa<ZExtInst>(&I))
16871688
return SrcDIExpr;
1688-
1689-
Type *Type = CI->getType();
1690-
// Casts other than Trunc or SExt to scalar types cannot be salvaged.
1691-
if (Type->isVectorTy() || (!isa<TruncInst>(&I) && !isa<SExtInst>(&I)))
1692-
return nullptr;
1693-
1694-
Value *FromValue = CI->getOperand(0);
1695-
unsigned FromTypeBitSize = FromValue->getType()->getScalarSizeInBits();
1696-
unsigned ToTypeBitSize = Type->getScalarSizeInBits();
1697-
1698-
return applyOps(DIExpression::getExtOps(FromTypeBitSize, ToTypeBitSize,
1699-
isa<SExtInst>(&I)));
1700-
}
1701-
1702-
if (auto *GEP = dyn_cast<GetElementPtrInst>(&I)) {
1689+
return nullptr;
1690+
} else if (auto *GEP = dyn_cast<GetElementPtrInst>(&I)) {
17031691
unsigned BitWidth =
17041692
M.getDataLayout().getIndexSizeInBits(GEP->getPointerAddressSpace());
17051693
// Rewrite a constant GEP into a DIExpression.

llvm/test/CodeGen/ARM/fragmented-args-multiple-regs.ll

Lines changed: 0 additions & 72 deletions
This file was deleted.

llvm/test/DebugInfo/X86/dbg-value-dropped-instcombine.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
; }
2222

2323
; CHECK: define dso_local i64 @foo
24-
; CHECK: @llvm.dbg.value(metadata i64 {{.*}}, metadata ![[BEE:[0-9]+]], metadata !DIExpression(DW_OP_LLVM_fragment, 0, 32)),
25-
; CHECK: @llvm.dbg.value(metadata i64 {{.*}}, metadata ![[BEE]], metadata !DIExpression({{.*}}, DW_OP_LLVM_fragment, 32, 32)),
24+
; CHECK: @llvm.dbg.value({{.*}}, metadata ![[BEE:[0-9]+]], metadata !DIExpression(DW_OP_LLVM_fragment, 0, 32)),
25+
; CHECK: @llvm.dbg.value(metadata i32 undef, metadata ![[BEE]], metadata !DIExpression(DW_OP_LLVM_fragment, 32, 32)),
2626

2727
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
2828
target triple = "x86_64-unknown-unknown"

llvm/test/DebugInfo/salvage-cast-debug-info.ll

Lines changed: 0 additions & 25 deletions
This file was deleted.

llvm/test/Transforms/EarlyCSE/debug-info-undef.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ entry:
1010
%0 = load i8, i8* @a, align 1, !dbg !19, !tbaa !20
1111
%conv = sext i8 %0 to i16, !dbg !19
1212

13-
; 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
13+
; CHECK: call void @llvm.dbg.value(metadata i16 undef, metadata !17, metadata !DIExpression()), !dbg !18
1414
; CHECK-NEXT: call i32 (...) @optimize_me_not()
1515

1616
call void @llvm.dbg.value(metadata i16 %conv, metadata !17, metadata !DIExpression()), !dbg !18

llvm/test/Transforms/InstCombine/cast-mul-select.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ define i32 @mul(i32 %x, i32 %y) {
1313
; we preserve the debug information in the resulting
1414
; instruction.
1515
; DBGINFO-LABEL: @mul(
16-
; DBGINFO-NEXT: call void @llvm.dbg.value(metadata i32 %x
17-
; DBGINFO-NEXT: call void @llvm.dbg.value(metadata i32 %y
16+
; DBGINFO-NEXT: call void @llvm.dbg.value(metadata i8 undef
17+
; DBGINFO-NEXT: call void @llvm.dbg.value(metadata i8 undef
1818
; DBGINFO-NEXT: [[C:%.*]] = mul i32 {{.*}}
1919
; DBGINFO-NEXT: [[D:%.*]] = and i32 {{.*}}
2020
; DBGINFO-NEXT: call void @llvm.dbg.value(metadata i32 [[C]]

llvm/test/Transforms/InstCombine/pr43893.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,9 @@ entry:
1313
;CHECK: call void @llvm.dbg.value(metadata i32 -8
1414
;CHECK: call void @llvm.dbg.value(metadata i32 undef
1515
%conv = sext i8 %dec to i32, !dbg !17
16-
%udiv = udiv i32 %conv, 4, !dbg !17
17-
call void @llvm.dbg.value(metadata i32 %udiv, metadata !18, metadata !DIExpression()), !dbg !19
16+
call void @llvm.dbg.value(metadata i32 %conv, metadata !18, metadata !DIExpression()), !dbg !19
1817
call void @llvm.dbg.value(metadata i32 -8, metadata !20, metadata !DIExpression()), !dbg !19
19-
call void @llvm.dbg.value(metadata i32 %udiv, metadata !20, metadata !DIExpression()), !dbg !19
18+
call void @llvm.dbg.value(metadata i32 %conv, metadata !20, metadata !DIExpression()), !dbg !19
2019
store i8 0, i8* @b, align 1, !dbg !21
2120
%cmp = icmp sgt i32 %conv, 0, !dbg !22
2221
%conv1 = zext i1 %cmp to i32, !dbg !22

0 commit comments

Comments
 (0)