[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 06:55:10 PDT 2017

Hi Mikael,

2017-09-19 15:33 GMT+02:00 Mikael Holmén <mikael.holmen at ericsson.com>:
> A similar fix as yours was made for duplicate non-fragment dbg.declares in
> r305244 and there is a bit of discussion about it in
> https://bugs.llvm.org//show_bug.cgi?id=33157
> Maybe you've seen that?

I saw the code, but not the bug report it originated from. Thanks!

My patch had the same idea of trying not to complicate other passes
to avoid duplicate declarations.

> I've run into a case where the inliner leaves two dbg.declares (with
> different locations since they origin from two different inlined call sites)
> connected to a single alloca after alloca-merging.
> Then the inliner moves (what it thinks is) the one and only dbg.declare to
> the alloca (and thus leaves the other one in a loop). The help methods
> replaceDbgDeclareForAlloca()/replaceDbgDeclare()/FindAllocaDbgDeclare() all
> seems to think there is only one dbg.declare connected to one alloca. At
> least they all ignore all except the first one found.
> Later loop unroll comes and unrolls the loop and then suddenly we have two
> absolutely identical dbg.declares and the assert in addFragmentOffset()
> blows. Who's at fault?

Sounds like the same issue just with a different pass triggering the problem.

> There is also an existing testcase that checks that there _are_ indeed two
> dbg.declares to a single alloca:
> Transforms/Inline/alloca-dbgdeclare-merge.ll

This is different. The test doesn't check for it, but the declarations actually
describe different vars in different scopes, so that is fine.


More information about the llvm-dev mailing list