[PATCH] LowerDbgDeclare - get rid of redundant dbg.values when an alloca survives optimization

Adrian Prantl aprantl at apple.com
Tue Oct 15 11:46:00 PDT 2013


On Oct 15, 2013, at 11:42, David Blaikie <dblaikie at gmail.com> wrote:

> Could you attach/paste the IR obtained without your change? I'm curious to see what dbg.values are produced.

; Function Attrs: nounwind ssp uwtable
define void @foo() #0 {
  %offset = alloca i64, align 8
  call void @llvm.dbg.declare(metadata !{i64* %offset}, metadata !10), !dbg !13
  call void @llvm.dbg.value(metadata !14, i64 0, metadata !10), !dbg !13
  store i64 0, i64* %offset, align 8, !dbg !13, !tbaa !15
  %1 = call i32 @bar(i64* %offset, i64 0) #3, !dbg !19
  %2 = icmp eq i32 %1, 0, !dbg !19
  br i1 %2, label %6, label %3, !dbg !19

; <label>:3                                       ; preds = %0
; -----> This is the one I care about:
  call void @llvm.dbg.value(metadata !{i64* %offset}, i64 0, metadata !10), !dbg !21
  %4 = load i64* %offset, align 8, !dbg !21, !tbaa !15
  %5 = call i32 @bar(i64* %offset, i64 %4) #3, !dbg !21
  br label %6, !dbg !21

; <label>:6                                       ; preds = %3, %0
  ret void, !dbg !22
}

> & a little bit of 'asking for a pony' - but is there one specific optimization you could run to demonstrate this problem rather than all of -O2?

No ponies, unfortunately. The specific optimization _is_ LowerDbgDeclare and it usually gets run by clang even if you go straight to -emit-llvm.

-- adrian



More information about the llvm-commits mailing list