mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
[DebugInfo][InstCombine] Preserve DI after combining zext
When zext is EvaluatedInDifferentType, InstCombine drops the dbg.value intrinsic. This patch tries to preserve said DI, by inserting the zext's old DI in the resulting instruction. (Only for integer type for now) Differential Revision: https://reviews.llvm.org/D48331 llvm-svn: 336254
This commit is contained in:
parent
900e069df2
commit
72ae081881
@ -1079,6 +1079,17 @@ Instruction *InstCombiner::visitZExt(ZExtInst &CI) {
|
||||
Value *Res = EvaluateInDifferentType(Src, DestTy, false);
|
||||
assert(Res->getType() == DestTy);
|
||||
|
||||
// When DestTy is integer, try to preserve any debug values referring
|
||||
// to the zext being replaced.
|
||||
// TODO: This should work for vectors as well, possibly via the use
|
||||
// of DWARF fragments.
|
||||
if (DestTy->isIntegerTy()) {
|
||||
insertReplacementDbgValues(
|
||||
*Src, *Res, CI, [](DbgInfoIntrinsic &OldDII) -> DIExpression * {
|
||||
return OldDII.getExpression();
|
||||
});
|
||||
}
|
||||
|
||||
uint32_t SrcBitsKept = SrcTy->getScalarSizeInBits()-BitsToClear;
|
||||
uint32_t DestBitSize = DestTy->getScalarSizeInBits();
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt < %s -instcombine -S | FileCheck %s
|
||||
; RUN: opt -debugify -instcombine -S < %s | FileCheck %s -check-prefix DBGINFO
|
||||
|
||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32"
|
||||
|
||||
@ -8,7 +8,16 @@ define i32 @mul(i32 %x, i32 %y) {
|
||||
; CHECK-NEXT: [[C:%.*]] = mul i32 [[X:%.*]], [[Y:%.*]]
|
||||
; CHECK-NEXT: [[D:%.*]] = and i32 [[C]], 255
|
||||
; CHECK-NEXT: ret i32 [[D]]
|
||||
;
|
||||
|
||||
; Test that when zext is evaluated in different type
|
||||
; we preserve the debug information in the resulting
|
||||
; instruction.
|
||||
; DBGINFO-LABEL: @mul(
|
||||
; DBGINFO-NEXT: [[C:%.*]] = mul i32 {{.*}}
|
||||
; DBGINFO-NEXT: call void @llvm.dbg.value(metadata i32 [[C]]
|
||||
; DBGINFO-NEXT: [[D:%.*]] = and i32 {{.*}}
|
||||
; DBGINFO-NEXT: call void @llvm.dbg.value(metadata i32 [[D]]
|
||||
|
||||
%A = trunc i32 %x to i8
|
||||
%B = trunc i32 %y to i8
|
||||
%C = mul i8 %A, %B
|
||||
|
Loading…
x
Reference in New Issue
Block a user