[Local] replaceAllDbgUsesWith: Update debug values before RAUW
authorVedant Kumar <vsk@apple.com>
Fri, 6 Jul 2018 17:32:39 +0000 (17:32 +0000)
committerVedant Kumar <vsk@apple.com>
Fri, 6 Jul 2018 17:32:39 +0000 (17:32 +0000)
commit6379a62250cc49a9eb6f7a403eb868c08478bc87
treecc7aca68de3e1ebc68ad24593e6a988e8c8acf58
parenta212b0bc18c9095d6580de6a85740114d1e94916
[Local] replaceAllDbgUsesWith: Update debug values before RAUW

The replaceAllDbgUsesWith utility helps passes preserve debug info when
replacing one value with another.

This improves upon the existing insertReplacementDbgValues API by:

- Updating debug intrinsics in-place, while preventing use-before-def of
  the replacement value.
- Falling back to salvageDebugInfo when a replacement can't be made.
- Moving the responsibiliy for rewriting llvm.dbg.* DIExpressions into
  common utility code.

Along with the API change, this teaches replaceAllDbgUsesWith how to
create DIExpressions for three basic integer and pointer conversions:

- The no-op conversion. Applies when the values have the same width, or
  have bit-for-bit compatible pointer representations.
- Truncation. Applies when the new value is wider than the old one.
- Zero/sign extension. Applies when the new value is narrower than the
  old one.

Testing:

- check-llvm, check-clang, a stage2 `-g -O3` build of clang,
  regression/unit testing.
- This resolves a number of mis-sized dbg.value diagnostics from
  Debugify.

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

llvm-svn: 336451
12 files changed:
llvm/include/llvm/IR/DebugInfoMetadata.h
llvm/include/llvm/IR/Type.h
llvm/include/llvm/Transforms/Utils/Local.h
llvm/lib/CodeGen/AsmPrinter/DwarfExpression.cpp
llvm/lib/IR/DebugInfoMetadata.cpp
llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
llvm/lib/Transforms/Utils/Local.cpp
llvm/test/Transforms/InstCombine/alloca-cast-debuginfo.ll
llvm/test/Transforms/InstCombine/cast-mul-select.ll
llvm/test/Transforms/InstCombine/cast-set-preserve-signed-dbg-val.ll [new file with mode: 0644]
llvm/test/Transforms/InstCombine/debuginfo-variables.ll
llvm/unittests/Transforms/Utils/Local.cpp