Added LLVMMetadataKind enum/pool and LLVMGetMetadataKind()
This may be used by Smalltalk code to retrive concrete type of metadata node
such as DILocation, DIFile and so on.
--- a/LLVMCEXT.st Wed Sep 16 06:29:15 2015 +0100
+++ b/LLVMCEXT.st Thu Sep 17 07:28:46 2015 +0100
@@ -453,6 +453,15 @@
self primitiveFailed
!
+GetMedadataKind: MD
+ "@param MD: LLVMMetadataRef
+ @return: LLVMMetadataKind
+ "
+
+ <cdecl: int32 "LLVMGetMetadataKind" ( LLVMMetadata ) >
+ self primitiveFailed
+!
+
MDNode2: C _: MDs _: Count
"@param C: LLVMContextRef
@param MDs: *LLVMMetadataRef
--- a/LLVMIntPredicate.st Wed Sep 16 06:29:15 2015 +0100
+++ b/LLVMIntPredicate.st Thu Sep 17 07:28:46 2015 +0100
@@ -109,5 +109,12 @@
^LLVMIntULT
! !
+!LLVMIntPredicate class methodsFor:'documentation'!
+
+version_HG
+
+ ^ '$Changeset: <not expanded> $'
+! !
+
LLVMIntPredicate initialize!
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMMetadataKind.st Thu Sep 17 07:28:46 2015 +0100
@@ -0,0 +1,216 @@
+"
+ Copyright (C) 2015-now Jan Vrany
+
+ This code is not an open-source (yet). You may use this code
+ for your own experiments and projects, given that:
+
+ * all modification to the code will be sent to the
+ original author for inclusion in future releases
+ * this is not used in any commercial software
+
+ This license is provisional and may (will) change in
+ a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+SharedPool subclass:#LLVMMetadataKind
+ instanceVariableNames:''
+ classVariableNames:'MDTupleKind DILocationKind GenericDINodeKind DISubrangeKind
+ DIEnumeratorKind DIBasicTypeKind DIDerivedTypeKind
+ DICompositeTypeKind DISubroutineTypeKind DIFileKind
+ DICompileUnitKind DISubprogramKind DILexicalBlockKind
+ DILexicalBlockFileKind DINamespaceKind DIModuleKind
+ DITemplateTypeParameterKind DITemplateValueParameterKind
+ DIGlobalVariableKind DILocalVariableKind DIExpressionKind
+ DIObjCPropertyKind DIImportedEntityKind ConstantAsMetadataKind
+ LocalAsMetadataKind MDStringKind'
+ poolDictionaries:''
+ category:'LLVM-S-Core-Constants'
+!
+
+!LLVMMetadataKind class methodsFor:'documentation'!
+
+copyright
+"
+ Copyright (C) 2015-now Jan Vrany
+
+ This code is not an open-source (yet). You may use this code
+ for your own experiments and projects, given that:
+
+ * all modification to the code will be sent to the
+ original author for inclusion in future releases
+ * this is not used in any commercial software
+
+ This license is provisional and may (will) change in
+ a future.
+"
+! !
+
+!LLVMMetadataKind class methodsFor:'initialization'!
+
+initialize
+
+ MDTupleKind := 0.
+ DILocationKind := 1.
+ GenericDINodeKind := 2.
+ DISubrangeKind := 3.
+ DIEnumeratorKind := 4.
+ DIBasicTypeKind := 5.
+ DIDerivedTypeKind := 6.
+ DICompositeTypeKind := 7.
+ DISubroutineTypeKind := 8.
+ DIFileKind := 9.
+ DICompileUnitKind := 10.
+ DISubprogramKind := 11.
+ DILexicalBlockKind := 12.
+ DILexicalBlockFileKind := 13.
+ DINamespaceKind := 14.
+ DIModuleKind := 15.
+ DITemplateTypeParameterKind := 16.
+ DITemplateValueParameterKind := 17.
+ DIGlobalVariableKind := 18.
+ DILocalVariableKind := 19.
+ DIExpressionKind := 20.
+ DIObjCPropertyKind := 21.
+ DIImportedEntityKind := 22.
+ ConstantAsMetadataKind := 23.
+ LocalAsMetadataKind := 24.
+ MDStringKind := 25.
+! !
+
+!LLVMMetadataKind class methodsFor:'constants'!
+
+ConstantAsMetadataKind
+
+ ^ConstantAsMetadataKind
+!
+
+DIBasicTypeKind
+
+ ^DIBasicTypeKind
+!
+
+DICompileUnitKind
+
+ ^DICompileUnitKind
+!
+
+DICompositeTypeKind
+
+ ^DICompositeTypeKind
+!
+
+DIDerivedTypeKind
+
+ ^DIDerivedTypeKind
+!
+
+DIEnumeratorKind
+
+ ^DIEnumeratorKind
+!
+
+DIExpressionKind
+
+ ^DIExpressionKind
+!
+
+DIFileKind
+
+ ^DIFileKind
+!
+
+DIGlobalVariableKind
+
+ ^DIGlobalVariableKind
+!
+
+DIImportedEntityKind
+
+ ^DIImportedEntityKind
+!
+
+DILexicalBlockFileKind
+
+ ^DILexicalBlockFileKind
+!
+
+DILexicalBlockKind
+
+ ^DILexicalBlockKind
+!
+
+DILocalVariableKind
+
+ ^DILocalVariableKind
+!
+
+DILocationKind
+
+ ^DILocationKind
+!
+
+DIModuleKind
+
+ ^DIModuleKind
+!
+
+DINamespaceKind
+
+ ^DINamespaceKind
+!
+
+DIObjCPropertyKind
+
+ ^DIObjCPropertyKind
+!
+
+DISubprogramKind
+
+ ^DISubprogramKind
+!
+
+DISubrangeKind
+
+ ^DISubrangeKind
+!
+
+DISubroutineTypeKind
+
+ ^DISubroutineTypeKind
+!
+
+DITemplateTypeParameterKind
+
+ ^DITemplateTypeParameterKind
+!
+
+DITemplateValueParameterKind
+
+ ^DITemplateValueParameterKind
+!
+
+GenericDINodeKind
+
+ ^GenericDINodeKind
+!
+
+LocalAsMetadataKind
+
+ ^LocalAsMetadataKind
+!
+
+MDStringKind
+
+ ^MDStringKind
+!
+
+MDTupleKind
+
+ ^MDTupleKind
+! !
+
+
+LLVMMetadataKind initialize!
--- a/Make.proto Wed Sep 16 06:29:15 2015 +0100
+++ b/Make.proto Thu Sep 17 07:28:46 2015 +0100
@@ -147,6 +147,7 @@
$(OUTDIR)LLVMIntPredicate.$(O) LLVMIntPredicate.$(H): LLVMIntPredicate.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
$(OUTDIR)LLVMLandingPadClauseTy.$(O) LLVMLandingPadClauseTy.$(H): LLVMLandingPadClauseTy.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
$(OUTDIR)LLVMLinkage.$(O) LLVMLinkage.$(H): LLVMLinkage.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
+$(OUTDIR)LLVMMetadataKind.$(O) LLVMMetadataKind.$(H): LLVMMetadataKind.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
$(OUTDIR)LLVMModuleFlagBehavior.$(O) LLVMModuleFlagBehavior.$(H): LLVMModuleFlagBehavior.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
$(OUTDIR)LLVMObjectArray.$(O) LLVMObjectArray.$(H): LLVMObjectArray.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
$(OUTDIR)LLVMOpcode.$(O) LLVMOpcode.$(H): LLVMOpcode.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
--- a/Make.spec Wed Sep 16 06:29:15 2015 +0100
+++ b/Make.spec Thu Sep 17 07:28:46 2015 +0100
@@ -68,6 +68,7 @@
LLVMIntPredicate \
LLVMLandingPadClauseTy \
LLVMLinkage \
+ LLVMMetadataKind \
LLVMModuleFlagBehavior \
LLVMObjectArray \
LLVMOpcode \
@@ -142,6 +143,7 @@
$(OUTDIR_SLASH)LLVMIntPredicate.$(O) \
$(OUTDIR_SLASH)LLVMLandingPadClauseTy.$(O) \
$(OUTDIR_SLASH)LLVMLinkage.$(O) \
+ $(OUTDIR_SLASH)LLVMMetadataKind.$(O) \
$(OUTDIR_SLASH)LLVMModuleFlagBehavior.$(O) \
$(OUTDIR_SLASH)LLVMObjectArray.$(O) \
$(OUTDIR_SLASH)LLVMOpcode.$(O) \
--- a/abbrev.stc Wed Sep 16 06:29:15 2015 +0100
+++ b/abbrev.stc Thu Sep 17 07:28:46 2015 +0100
@@ -18,8 +18,8 @@
LLVMIntPredicate LLVMIntPredicate jv:llvm_s 'LLVM-S-Core-Constants' 0
LLVMLandingPadClauseTy LLVMLandingPadClauseTy jv:llvm_s 'LLVM-S-Core-Constants' 0
LLVMLinkage LLVMLinkage jv:llvm_s 'LLVM-S-Core-Constants' 0
+LLVMMetadataKind LLVMMetadataKind jv:llvm_s 'LLVM-S-Core-Constants' 0
LLVMModuleFlagBehavior LLVMModuleFlagBehavior jv:llvm_s 'LLVM-S-Core-Constants' 0
-LLVMModuleTests LLVMModuleTests jv:llvm_s 'LLVM-S-Core-Tests' 1
LLVMObjectArray LLVMObjectArray jv:llvm_s 'LLVM-S-Core' 0
LLVMOpcode LLVMOpcode jv:llvm_s 'LLVM-S-Core-Constants' 0
LLVMRealPredicate LLVMRealPredicate jv:llvm_s 'LLVM-S-Core-Constants' 0
@@ -28,7 +28,6 @@
LLVMVerifierFailureAction LLVMVerifierFailureAction jv:llvm_s 'LLVM-S-Core-Constants' 0
LLVMVisibility LLVMVisibility jv:llvm_s 'LLVM-S-Core-Constants' 0
jv_llvm_s jv_llvm_s jv:llvm_s '* Projects & Packages *' 3
-LLVMExamples LLVMExamples jv:llvm_s 'LLVM-S-Core-Examples' 1
LLVMObject LLVMObject jv:llvm_s 'LLVM-S-Internal' 0
LLVMTypeError LLVMTypeError jv:llvm_s 'LLVM-S-Core-Exceptions' 1
LLVMBasicBlock LLVMBasicBlock jv:llvm_s 'LLVM-S-Core' 0
@@ -72,3 +71,5 @@
LLVMTypeVector LLVMTypeVector jv:llvm_s 'LLVM-S-Core-Types' 0
LLVMTypeX86_FP80 LLVMTypeX86_FP80 jv:llvm_s 'LLVM-S-Core-Types' 0
LLVMTypeX86_MMX LLVMTypeX86_MMX jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMExamples LLVMExamples jv:llvm_s 'LLVM-S-Core-Examples' 1
+LLVMModuleTests LLVMModuleTests jv:llvm_s 'LLVM-S-Core-Tests' 1
--- a/bc.mak Wed Sep 16 06:29:15 2015 +0100
+++ b/bc.mak Thu Sep 17 07:28:46 2015 +0100
@@ -89,6 +89,7 @@
$(OUTDIR)LLVMIntPredicate.$(O) LLVMIntPredicate.$(H): LLVMIntPredicate.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
$(OUTDIR)LLVMLandingPadClauseTy.$(O) LLVMLandingPadClauseTy.$(H): LLVMLandingPadClauseTy.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
$(OUTDIR)LLVMLinkage.$(O) LLVMLinkage.$(H): LLVMLinkage.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
+$(OUTDIR)LLVMMetadataKind.$(O) LLVMMetadataKind.$(H): LLVMMetadataKind.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
$(OUTDIR)LLVMModuleFlagBehavior.$(O) LLVMModuleFlagBehavior.$(H): LLVMModuleFlagBehavior.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
$(OUTDIR)LLVMObjectArray.$(O) LLVMObjectArray.$(H): LLVMObjectArray.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
$(OUTDIR)LLVMOpcode.$(O) LLVMOpcode.$(H): LLVMOpcode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
--- a/jv_llvm_s.st Wed Sep 16 06:29:15 2015 +0100
+++ b/jv_llvm_s.st Thu Sep 17 07:28:46 2015 +0100
@@ -76,7 +76,7 @@
by searching along the inheritance chain of all of my classes."
^ #(
- #'stx:goodies/sunit' "TestAsserter - superclass of LLVMExamples"
+ #'stx:goodies/sunit' "stx_goodies_sunit - extended"
#'stx:libbasic' "ArrayedCollection - superclass of LLVMObjectArray"
)
!
@@ -155,8 +155,8 @@
LLVMIntPredicate
LLVMLandingPadClauseTy
LLVMLinkage
+ LLVMMetadataKind
LLVMModuleFlagBehavior
- (LLVMModuleTests autoload)
LLVMObjectArray
LLVMOpcode
LLVMRealPredicate
@@ -165,7 +165,6 @@
LLVMVerifierFailureAction
LLVMVisibility
#'jv_llvm_s'
- (LLVMExamples autoload)
LLVMObject
LLVMTypeError
LLVMBasicBlock
@@ -209,6 +208,8 @@
LLVMTypeVector
#'LLVMTypeX86_FP80'
#'LLVMTypeX86_MMX'
+ (LLVMExamples autoload)
+ (LLVMModuleTests autoload)
)
!
--- a/libInit.cc Wed Sep 16 06:29:15 2015 +0100
+++ b/libInit.cc Thu Sep 17 07:28:46 2015 +0100
@@ -44,6 +44,7 @@
_LLVMIntPredicate_Init(pass,__pRT__,snd);
_LLVMLandingPadClauseTy_Init(pass,__pRT__,snd);
_LLVMLinkage_Init(pass,__pRT__,snd);
+_LLVMMetadataKind_Init(pass,__pRT__,snd);
_LLVMModuleFlagBehavior_Init(pass,__pRT__,snd);
_LLVMObjectArray_Init(pass,__pRT__,snd);
_LLVMOpcode_Init(pass,__pRT__,snd);
--- a/llvm_c_ext/include/llvm-c-ext/CoreExt.h Wed Sep 16 06:29:15 2015 +0100
+++ b/llvm_c_ext/include/llvm-c-ext/CoreExt.h Thu Sep 17 07:28:46 2015 +0100
@@ -151,6 +151,70 @@
void LLVMModuleAddModuleFlag(LLVMModuleRef M, LLVMModuleFlagBehavior Behavior, const char *Key, LLVMMetadataRef Val);
/**
+ * @defgroup metadatatypec Metadata - Types
+ *
+ * Set of functions to query metadata node type (such as
+ * DILocation, DIFile and so on
+ */
+
+/**
+ * Metadata kind ID definition
+ *
+ * \see llvm::MetadataKind
+ * \see LLVMGetMetadataKind()
+ */
+
+/* Following enum definition is copy-paste from <llvm/IR/Metadata.h> */
+enum LLVMMetadataKind {
+ MDTupleKind,
+ DILocationKind,
+ GenericDINodeKind,
+ DISubrangeKind,
+ DIEnumeratorKind,
+ DIBasicTypeKind,
+ DIDerivedTypeKind,
+ DICompositeTypeKind,
+ DISubroutineTypeKind,
+ DIFileKind,
+ DICompileUnitKind,
+ DISubprogramKind,
+ DILexicalBlockKind,
+ DILexicalBlockFileKind,
+ DINamespaceKind,
+ DIModuleKind,
+ DITemplateTypeParameterKind,
+ DITemplateValueParameterKind,
+ DIGlobalVariableKind,
+ DILocalVariableKind,
+ DIExpressionKind,
+ DIObjCPropertyKind,
+ DIImportedEntityKind,
+ ConstantAsMetadataKind,
+ LocalAsMetadataKind,
+ MDStringKind
+ };
+
+
+/**
+ * Return metadata kind ID for given metadata node
+ *
+ * \param MD metadata node whose kind ID is queried
+ * \return Metadata kind ID
+ *
+ * \see llvm::MetadataKind
+ * \see LLVMMetadataKind
+ *
+ */
+LLVMMetadataKind LLVMGetMetadataKind(LLVMMetadataRef MD);
+
+
+/**
+ * }
+ */ // end of @defgroup metadatatypec Metadata - Types
+
+
+
+/**
* @defgroup metadataconv Metadata - Value Conversions
*
* Set of functions to convert metadata to values and back.
--- a/llvm_c_ext/lib/CoreExt.cpp Wed Sep 16 06:29:15 2015 +0100
+++ b/llvm_c_ext/lib/CoreExt.cpp Thu Sep 17 07:28:46 2015 +0100
@@ -113,6 +113,10 @@
unwrap(M)->addModuleFlag((Module::ModFlagBehavior)Behavior, StringRef(Key), unwrap(Val));
}
+LLVMMetadataKind LLVMGetMetadataKind(LLVMMetadataRef MD) {
+ return (LLVMMetadataKind)(unwrap(MD)->getMetadataID());
+}
+
LLVMValueRef LLVMMetadataAsValue(LLVMMetadataRef MD) {
return LLVMMetadataAsValueInContext(LLVMGetGlobalContext(), MD);
}
--- a/llvm_c_ext/lib/Makefile Wed Sep 16 06:29:15 2015 +0100
+++ b/llvm_c_ext/lib/Makefile Thu Sep 17 07:28:46 2015 +0100
@@ -5,7 +5,7 @@
ARCHIVE = libLLVM-C-EXT.a
-LLVM_CONFIG=llvm-config-3.8
+LLVM_CONFIG ?= llvm-config-3.8
CXXFLAGS_LLVM = $(shell $(LLVM_CONFIG) --cxxflags) -O0
LDFLAGS_LLVM = $(shell $(LLVM_CONFIG) --ldflags)
@@ -32,4 +32,4 @@
$(AR) r $(ARCHIVE) $(OBJECTS)
clean:
- rm -f $(OBJECTS) $(LIBRARY) $(ARCHIVE)
\ No newline at end of file
+ rm -f $(OBJECTS) $(LIBRARY) $(ARCHIVE)