[LLVMbugs] [Bug 4303] New: llvm.dbg.declare vs -instcombine
    bugzilla-daemon at cs.uiuc.edu 
    bugzilla-daemon at cs.uiuc.edu
       
    Wed Jun  3 02:09:43 PDT 2009
    
    
  
http://llvm.org/bugs/show_bug.cgi?id=4303
           Summary: llvm.dbg.declare vs -instcombine
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: Windows XP
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Core LLVM classes
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: jay.foad at antixlabs.com
                CC: llvmbugs at cs.uiuc.edu
I get a verification failure when I run this test case through -instcombine:
$ cat d.ll
define void @f() {
        %a = alloca {}
        call void @llvm.dbg.declare({}* %a, {}* null)
        ret void
}
declare void @llvm.dbg.declare({}*, {}*)
$ llvm-as -o - d.ll | opt -f -o /dev/null -instcombine
invalid llvm.dbg.declare intrinsic call
        call void @llvm.dbg.declare({ }* null, { }* null)
Broken module found, compilation aborted!
0   opt 0x0844ccc8
Stack dump:
0.      Running pass 'Function Pass Manager' on module '<stdin>'.
1.      Running pass 'Module Verifier' on function '@f'
Aborted
The problem is that -instcombine replaces the alloca with null:
  if (isa<AllocaInst>(AI) && AI.getAllocatedType()->isSized()) {
    // If alloca'ing a zero byte object, replace the alloca with a null
pointer.
    // Note that we only do this for alloca's, because malloc should allocate
    // and return a unique pointer, even for a zero byte allocation.
    if (TD->getTypeAllocSize(AI.getAllocatedType()) == 0)
      return ReplaceInstUsesWith(AI, Constant::getNullValue(AI.getType()));
    // If the alignment is 0 (unspecified), assign it the preferred alignment.
    if (AI.getAlignment() == 0)
      AI.setAlignment(TD->getPrefTypeAlignment(AI.getAllocatedType()));
  }
but -verify asserts that the first arguments to llvm.dbg.declare is non-null:
  case Intrinsic::dbg_declare:  // llvm.dbg.declare
    if (Constant *C = dyn_cast<Constant>(CI.getOperand(1)))
      Assert1(C && !isa<ConstantPointerNull>(C),
              "invalid llvm.dbg.declare intrinsic call", &CI);
    break; 
I don't think -verify should be making ad-hoc checks about debug intrinsics,
because it places too high a burden on optimisation passes to make sure they
don't break these checks. So I would vote for removing that check.
-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
    
    
More information about the llvm-bugs
mailing list