From 7b3ed76a639627f66349cc128bc0505524f0f377 Mon Sep 17 00:00:00 2001 From: Chen Li Date: Tue, 4 Aug 2015 04:41:34 +0000 Subject: [PATCH] Introduce enum value for previously defined metadata -- make.implicit Summary: This patch adds enum value for an existing metadata type -- make.implicit. Using preassigned enum will be helpful to get compile time type checking and avoid string construction and comparison. The patch also changes uses of make.implicit from string metadata to enum metadata. There is no functionality change. Reviewers: reames Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D11698 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243954 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/LLVMContext.h | 3 ++- lib/CodeGen/ImplicitNullChecks.cpp | 3 ++- lib/IR/LLVMContext.cpp | 6 ++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/include/llvm/IR/LLVMContext.h b/include/llvm/IR/LLVMContext.h index e6c22090ab6..e58f2a9b01e 100644 --- a/include/llvm/IR/LLVMContext.h +++ b/include/llvm/IR/LLVMContext.h @@ -60,7 +60,8 @@ public: MD_mem_parallel_loop_access = 10, // "llvm.mem.parallel_loop_access" MD_nonnull = 11, // "nonnull" MD_dereferenceable = 12, // "dereferenceable" - MD_dereferenceable_or_null = 13 // "dereferenceable_or_null" + MD_dereferenceable_or_null = 13, // "dereferenceable_or_null" + MD_make_implicit = 14 // "make.implicit" }; /// getMDKindID - Return a unique non-zero ID for the specified metadata kind. diff --git a/lib/CodeGen/ImplicitNullChecks.cpp b/lib/CodeGen/ImplicitNullChecks.cpp index fbe057791c5..26e536cae2f 100644 --- a/lib/CodeGen/ImplicitNullChecks.cpp +++ b/lib/CodeGen/ImplicitNullChecks.cpp @@ -38,6 +38,7 @@ #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/IR/BasicBlock.h" #include "llvm/IR/Instruction.h" +#include "llvm/IR/LLVMContext.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/Target/TargetSubtargetInfo.h" @@ -134,7 +135,7 @@ bool ImplicitNullChecks::analyzeBlockForNullChecks( MDNode *BranchMD = MBB.getBasicBlock() - ? MBB.getBasicBlock()->getTerminator()->getMetadata("make.implicit") + ? MBB.getBasicBlock()->getTerminator()->getMetadata(LLVMContext::MD_make_implicit) : nullptr; if (!BranchMD) return false; diff --git a/lib/IR/LLVMContext.cpp b/lib/IR/LLVMContext.cpp index 6d799e4b965..59680f5eef5 100644 --- a/lib/IR/LLVMContext.cpp +++ b/lib/IR/LLVMContext.cpp @@ -104,6 +104,12 @@ LLVMContext::LLVMContext() : pImpl(new LLVMContextImpl(*this)) { assert(DereferenceableOrNullID == MD_dereferenceable_or_null && "dereferenceable_or_null kind id drifted"); (void)DereferenceableOrNullID; + + // Create the 'make.implicit' metadata kind. + unsigned MakeImplicitID = getMDKindID("make.implicit"); + assert(MakeImplicitID == MD_make_implicit && + "make.implicit kind id drifted"); + (void)MakeImplicitID; } LLVMContext::~LLVMContext() { delete pImpl; } -- 2.34.1