Added LLVMMetadataKind enum/pool and LLVMGetMetadataKind()
authorJan Vrany <jan.vrany@fit.cvut.cz>
Thu, 17 Sep 2015 07:28:46 +0100
changeset 40 d99596797aa1
parent 39 79e2d7745b4c
child 41 e4cbc8e75207
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.
LLVMCEXT.st
LLVMIntPredicate.st
LLVMMetadataKind.st
Make.proto
Make.spec
abbrev.stc
bc.mak
jv_llvm_s.st
libInit.cc
llvm_c_ext/include/llvm-c-ext/CoreExt.h
llvm_c_ext/lib/CoreExt.cpp
llvm_c_ext/lib/Makefile
--- 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)