[llvm] r185383 - Debug Info: clean up usage of Verify.

David Blaikie dblaikie at gmail.com
Mon Jul 1 14:12:41 PDT 2013


On Mon, Jul 1, 2013 at 2:02 PM, Manman Ren <mren at apple.com> wrote:
> Author: mren
> Date: Mon Jul  1 16:02:01 2013
> New Revision: 185383
>
> URL: http://llvm.org/viewvc/llvm-project?rev=185383&view=rev
> Log:
> Debug Info: clean up usage of Verify.
>
> No functionality change. It should suffice to check the type of a debug info
> metadata, instead of calling Verify.
>
> Modified:
>     llvm/trunk/lib/IR/DIBuilder.cpp
>     llvm/trunk/lib/Transforms/Instrumentation/DebugIR.cpp
>
> Modified: llvm/trunk/lib/IR/DIBuilder.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DIBuilder.cpp?rev=185383&r1=185382&r2=185383&view=diff
> ==============================================================================
> --- llvm/trunk/lib/IR/DIBuilder.cpp (original)
> +++ llvm/trunk/lib/IR/DIBuilder.cpp Mon Jul  1 16:02:01 2013
> @@ -317,7 +317,7 @@ DIDerivedType DIBuilder::createMemberPoi
>  /// createReferenceType - Create debugging information entry for a reference
>  /// type.
>  DIDerivedType DIBuilder::createReferenceType(unsigned Tag, DIType RTy) {
> -  assert(RTy.Verify() && "Unable to create reference type");
> +  assert(RTy.isType() && "Unable to create reference type");
>    // References are encoded in DIDerivedType format.
>    Value *Elts[] = {
>      GetTagConstant(VMContext, Tag),
> @@ -338,7 +338,7 @@ DIDerivedType DIBuilder::createReference
>  DIDerivedType DIBuilder::createTypedef(DIType Ty, StringRef Name, DIFile File,
>                                         unsigned LineNo, DIDescriptor Context) {
>    // typedefs are encoded in DIDerivedType format.
> -  assert(Ty.Verify() && "Invalid typedef type!");
> +  assert(Ty.isType() && "Invalid typedef type!");
>    Value *Elts[] = {
>      GetTagConstant(VMContext, dwarf::DW_TAG_typedef),
>      File.getFileNode(),
> @@ -357,8 +357,8 @@ DIDerivedType DIBuilder::createTypedef(D
>  /// createFriend - Create debugging information entry for a 'friend'.
>  DIDerivedType DIBuilder::createFriend(DIType Ty, DIType FriendTy) {
>    // typedefs are encoded in DIDerivedType format.
> -  assert(Ty.Verify() && "Invalid type!");
> -  assert(FriendTy.Verify() && "Invalid friend type!");
> +  assert(Ty.isType() && "Invalid type!");
> +  assert(FriendTy.isType() && "Invalid friend type!");
>    Value *Elts[] = {
>      GetTagConstant(VMContext, dwarf::DW_TAG_friend),
>      NULL,
> @@ -378,7 +378,7 @@ DIDerivedType DIBuilder::createFriend(DI
>  /// inheritance relationship between two types.
>  DIDerivedType DIBuilder::createInheritance(
>      DIType Ty, DIType BaseTy, uint64_t BaseOffset, unsigned Flags) {
> -  assert(Ty.Verify() && "Unable to create inheritance");
> +  assert(Ty.isType() && "Unable to create inheritance");
>    // TAG_inheritance is encoded in DIDerivedType format.
>    Value *Elts[] = {
>      GetTagConstant(VMContext, dwarf::DW_TAG_inheritance),
> @@ -596,7 +596,7 @@ DICompositeType DIBuilder::createClassTy
>                                             DIArray Elements,
>                                             MDNode *VTableHolder,
>                                             MDNode *TemplateParams) {
> -  assert((!Context || Context.Verify()) &&
> +  assert((!Context || Context.isScope() || Context.isType()) &&
>           "createClassType should be called with a valid Context");
>    // TAG_class_type is encoded in DICompositeType format.
>    Value *Elts[] = {
> @@ -616,7 +616,8 @@ DICompositeType DIBuilder::createClassTy
>      TemplateParams
>    };
>    DICompositeType R(MDNode::get(VMContext, Elts));
> -  assert(R.Verify() && "createClassType should return a verifiable DIType");
> +  assert(R.isCompositeType() &&
> +         "createClassType should return a DICompositeType");
>    return R;
>  }
>
> @@ -648,7 +649,8 @@ DICompositeType DIBuilder::createStructT
>      NULL,
>    };
>    DICompositeType R(MDNode::get(VMContext, Elts));
> -  assert(R.Verify() && "createStructType should return a verifiable DIType");
> +  assert(R.isCompositeType() &&
> +         "createStructType should return a DICompositeType");
>    return R;
>  }
>
> @@ -861,8 +863,8 @@ DIType DIBuilder::createForwardDecl(unsi
>      ConstantInt::get(Type::getInt32Ty(VMContext), RuntimeLang)
>    };
>    MDNode *Node = MDNode::getTemporary(VMContext, Elts);
> -  assert(DIType(Node).Verify() &&
> -         "createForwardDecl result should be verifiable");
> +  assert(DIType(Node).isType() &&
> +         "createForwardDecl result should be a DIType");
>    return DIType(Node);

If you push DIType up to the "Node" declaration (so that Node is a
DIType instead of an MDNode *) you can avoid constructing two
temporary DITypes (one for the assert, one for the return).

>  }
>
> @@ -953,9 +955,9 @@ DIVariable DIBuilder::createLocalVariabl
>                                            bool AlwaysPreserve, unsigned Flags,
>                                            unsigned ArgNo) {
>    DIDescriptor Context(getNonCompileUnitScope(Scope));
> -  assert((!Context || Context.Verify()) &&
> +  assert((!Context || Context.isScope()) &&
>           "createLocalVariable should be called with a valid Context");
> -  assert(Ty.Verify() &&
> +  assert(Ty.isType() &&
>           "createLocalVariable should be called with a valid type");
>    Value *Elts[] = {
>      GetTagConstant(VMContext, Tag),
> @@ -976,8 +978,8 @@ DIVariable DIBuilder::createLocalVariabl
>      NamedMDNode *FnLocals = getOrInsertFnSpecificMDNode(M, Fn);
>      FnLocals->addOperand(Node);
>    }
> -  assert(DIVariable(Node).Verify() &&
> -         "createLocalVariable should return a verifiable DIVariable");
> +  assert(DIVariable(Node).isVariable() &&
> +         "createLocalVariable should return a valid DIVariable");
>    return DIVariable(Node);

Similarly here.

>  }
>
> @@ -1046,7 +1048,7 @@ DISubprogram DIBuilder::createFunction(D
>    if (isDefinition)
>      AllSubprograms.push_back(Node);
>    DISubprogram S(Node);
> -  assert(S.Verify() && "createFunction should return a valid DISubprogram");
> +  assert(S.isSubprogram() && "createFunction should return a valid DISubprogram");
>    return S;
>  }
>
> @@ -1094,7 +1096,7 @@ DISubprogram DIBuilder::createMethod(DID
>    if (isDefinition)
>      AllSubprograms.push_back(Node);
>    DISubprogram S(Node);
> -  assert(S.Verify() && "createMethod should return a valid DISubprogram");
> +  assert(S.isSubprogram() && "createMethod should return a valid DISubprogram");
>    return S;
>  }
>
>
> Modified: llvm/trunk/lib/Transforms/Instrumentation/DebugIR.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/DebugIR.cpp?rev=185383&r1=185382&r2=185383&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Instrumentation/DebugIR.cpp (original)
> +++ llvm/trunk/lib/Transforms/Instrumentation/DebugIR.cpp Mon Jul  1 16:02:01 2013
> @@ -219,7 +219,7 @@ public:
>      MDNode *Sub = Builder.createFunction(
>          DICompileUnit(CUNode), F.getName(), MangledName, DIFile(FileNode), Line,
>          Sig, Local, IsDefinition, ScopeLine, FuncFlags, IsOptimized, &F);
> -    assert(DISubprogram(Sub).Verify());
> +    assert(DISubprogram(Sub).isSubprogram());

And probably here (even better here - I'm pretty sure createFunction
returns a DISubprogram & this code is implicitly converting that back
to a raw MDNode * then explicitly converting it back to a DISubprogram
 - that seems excessive/unnecessary)

>      DEBUG(dbgs() << "create subprogram mdnode " << Sub << ": "
>                   << "\n");
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list