[Debug] Retain both sets of debug intrinsics in HoistThenElseCodeToIf
authorUlrich Weigand <ulrich.weigand@de.ibm.com>
Fri, 9 Mar 2018 21:37:07 +0000 (21:37 +0000)
committerUlrich Weigand <ulrich.weigand@de.ibm.com>
Fri, 9 Mar 2018 21:37:07 +0000 (21:37 +0000)
commitfa4e63c0d60a5f14379053fd6d05b594f40f91f6
tree54b409e218e0fe943765fa6eee1d1709ce88923f
parent735817aa1afffe7cca4a0ef4c266b0ddbdc068d3
[Debug] Retain both sets of debug intrinsics in HoistThenElseCodeToIf

When hoisting common code from the "then" and "else" branches of a condition
to before the "if", there is no need to require that debug intrinsics match
before moving them (and merging them).  Instead, we can simply always keep
all debug intrinsics from both sides of the "if".

This fixes PR36410, which describes a problem where as a result of the attempt
to merge debug locations for two debug intrinsics we end up with an invalid
intrinsic, where the scope indicated in the !dbg location no longer matches
the scope of the variable tracked by the intrinsic.

In addition, this has the benefit that we no longer throw away information
that is actually still valid, helping to generate better debug data.

Reviewed By: vsk

Differential Revision: https://reviews.llvm.org/D44312

llvm-svn: 327175
llvm/lib/Transforms/Utils/SimplifyCFG.cpp
llvm/test/Transforms/SimplifyCFG/hoist-dbgvalue-inlined.ll [new file with mode: 0644]