diff options
author | Vedant Kumar <vsk@apple.com> | 2018-05-24 23:00:21 +0000 |
---|---|---|
committer | Vedant Kumar <vsk@apple.com> | 2018-05-24 23:00:21 +0000 |
commit | 40399a213d3c494933bd903bb02dba5c1f574363 (patch) | |
tree | a22ce6751da42bef8ec1dcf8a43508ebf894d181 | |
parent | 1328cf4b8dae60fc5cc904e42c4039276e7b5ead (diff) | |
download | bcm5719-llvm-40399a213d3c494933bd903bb02dba5c1f574363.tar.gz bcm5719-llvm-40399a213d3c494933bd903bb02dba5c1f574363.zip |
[DebugInfo] Maintain DI when converting GEP to bitcast
When a GEP with all zero indices is converted to bitcast, its DI wasn't
copied over to the newly created instruction. This patch fixes that bug.
Patch by Kareem Ergawy!
Differential Revision: https://reviews.llvm.org/D47347
llvm-svn: 333235
-rw-r--r-- | llvm/lib/CodeGen/CodeGenPrepare.cpp | 1 | ||||
-rw-r--r-- | llvm/test/DebugInfo/X86/bitcast-di.ll (renamed from llvm/test/DebugInfo/X86/sink-bitcast-di.ll) | 12 |
2 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp index 1b8d5b32930..cafcd37c339 100644 --- a/llvm/lib/CodeGen/CodeGenPrepare.cpp +++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp @@ -6559,6 +6559,7 @@ bool CodeGenPrepare::optimizeInst(Instruction *I, bool &ModifiedDT) { /// The GEP operand must be a pointer, so must its result -> BitCast Instruction *NC = new BitCastInst(GEPI->getOperand(0), GEPI->getType(), GEPI->getName(), GEPI); + NC->setDebugLoc(GEPI->getDebugLoc()); GEPI->replaceAllUsesWith(NC); GEPI->eraseFromParent(); ++NumGEPsElim; diff --git a/llvm/test/DebugInfo/X86/sink-bitcast-di.ll b/llvm/test/DebugInfo/X86/bitcast-di.ll index 23ff051bde5..5bb790b05d0 100644 --- a/llvm/test/DebugInfo/X86/sink-bitcast-di.ll +++ b/llvm/test/DebugInfo/X86/bitcast-di.ll @@ -3,6 +3,8 @@ 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" target triple = "x86_64-unknown-linux-gnu" +@x = external global [1 x [2 x <4 x float>]] + declare void @foo(i32) declare void @slowpath(i32, i32*) @@ -33,4 +35,14 @@ rare.1: br label %fallthrough } +; Is DI maitained when a GEP with all zero indices gets converted to bitcast? +define void @test2() { +; CHECK-LABEL: @test2 +load.i145: +; CHECK: bitcast [1 x [2 x <4 x float>]]* @x to [2 x <4 x float>]*, !dbg ![[castLoc2:[0-9]+]] + %x_offset = getelementptr [1 x [2 x <4 x float>]], [1 x [2 x <4 x float>]]* @x, i32 0, i64 0 + ret void +} + ; CHECK: ![[castLoc]] = !DILocation(line: 2 +; CHECK: ![[castLoc2]] = !DILocation(line: 11
\ No newline at end of file |