[llvm-dev] Jump Threading duplicates dbg.declare intrinsics for fragments, bug?
Björn Steinbrink via llvm-dev
llvm-dev at lists.llvm.org
Tue Sep 19 05:27:54 PDT 2017
Hi,
I'm hitting an assertion "overlapping or duplicate fragments" in the
DWARF codegen in addFragmentOffset(). This originates from a
duplicated dbg.declare intrinsic, declaring the same fragment twice.
The duplicated call was generated by the jump threading pass.
I have a patch (see below) that removes simply such duplicates, but
I'm not sure whether that is the right approach.
Cheers,
Björn
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index 499780a173b..308b6bd2b9f 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -220,6 +220,13 @@ ArrayRef<DbgVariable::FrameIndexExpr>
DbgVariable::getFrameIndexExprs() const {
return A.Expr->getFragmentInfo()->OffsetInBits <
B.Expr->getFragmentInfo()->OffsetInBits;
});
+
+ auto last = std::unique(FrameIndexExprs.begin(), FrameIndexExprs.end(),
+ [](const FrameIndexExpr &A, const FrameIndexExpr &B) -> bool {
+ return A.FI == B.FI && A.Expr == B.Expr;
+ });
+ FrameIndexExprs.erase(last, FrameIndexExprs.end());
+
return FrameIndexExprs;
}
More information about the llvm-dev
mailing list