From 4caf5281bf9cbdbc13758a6f2b965b0e9ef233d3 Mon Sep 17 00:00:00 2001 From: Duncan Sands Date: Wed, 19 Sep 2012 20:29:39 +0000 Subject: [PATCH] Add support for accessing an MDNode's operands via the C binding. Patch by Anthony Bryant. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164247 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm-c/Core.h | 21 +++++++++++++++++++++ lib/VMCore/Core.cpp | 13 +++++++++++++ 2 files changed, 34 insertions(+) diff --git a/include/llvm-c/Core.h b/include/llvm-c/Core.h index 6587e770800..4d3374958b5 100644 --- a/include/llvm-c/Core.h +++ b/include/llvm-c/Core.h @@ -1868,6 +1868,27 @@ LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count); */ const char *LLVMGetMDString(LLVMValueRef V, unsigned* Len); +/** + * Obtain the number of operands from an MDNode value. + * + * @param V MDNode to get number of operands from. + * @return Number of operands of the MDNode. + */ +unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V); + +/** + * Obtain the given MDNode's operands. + * + * The passed LLVMValueRef pointer should point to enough memory to hold all of + * the operands of the given MDNode (see LLVMGetMDNodeNumOperands) as + * LLVMValueRefs. This memory will be populated with the LLVMValueRefs of the + * MDNode's operands. + * + * @param V MDNode to get the operands from. + * @param Dest Destination array for operands. + */ +void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest); + /** * @} */ diff --git a/lib/VMCore/Core.cpp b/lib/VMCore/Core.cpp index a56f1b282ba..924367deef2 100644 --- a/lib/VMCore/Core.cpp +++ b/lib/VMCore/Core.cpp @@ -568,6 +568,19 @@ const char *LLVMGetMDString(LLVMValueRef V, unsigned* Len) { return 0; } +unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V) +{ + return cast(unwrap(V))->getNumOperands(); +} + +void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest) +{ + const MDNode *N = cast(unwrap(V)); + const unsigned numOperands = N->getNumOperands(); + for (unsigned i = 0; i < numOperands; i++) + Dest[i] = wrap(N->getOperand(i)); +} + unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name) { if (NamedMDNode *N = unwrap(M)->getNamedMetadata(name)) { -- 2.34.1