changeset 1555:ed0cffe895ec

use the new NamedMDNode class this will need a LLVM >= r77619
author Benjamin Kramer <benny.kra@gmail.com>
date Thu, 30 Jul 2009 20:54:03 +0200
parents d6e8d5db259f
children 4897323d47b5
files gen/metadata.h gen/passes/GarbageCollect2Stack.cpp gen/typinf.cpp ir/irclass.cpp
diffstat 4 files changed, 20 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/gen/metadata.h	Thu Jul 30 15:25:10 2009 +0200
+++ b/gen/metadata.h	Thu Jul 30 20:54:03 2009 +0200
@@ -2,7 +2,7 @@
 #define LDC_GEN_METADATA_H
 
 // MDNode was moved into its own header, and contains Value*s
-#include "llvm/MDNode.h"
+#include "llvm/Metadata.h"
 typedef llvm::Value MDNodeField;
 
 // Use getNumElements() and getElement() to access elements.
--- a/gen/passes/GarbageCollect2Stack.cpp	Thu Jul 30 15:25:10 2009 +0200
+++ b/gen/passes/GarbageCollect2Stack.cpp	Thu Jul 30 20:54:03 2009 +0200
@@ -201,18 +201,18 @@
             GlobalVariable* ClassInfo = dyn_cast<GlobalVariable>(arg);
             if (!ClassInfo)
                 return false;
-            
+
             std::string metaname = CD_PREFIX;
             metaname += ClassInfo->getName();
-            
-            GlobalVariable* global = A.M.getGlobalVariable(metaname);
-            if (!global || !global->hasInitializer())
+
+            NamedMDNode* meta = A.M.getNamedMetadata(metaname);
+            if (!meta)
                 return false;
-            
-            MDNode* node = dyn_cast<MDNode>(global->getInitializer());
+
+            MDNode* node = static_cast<MDNode*>(meta->getElement(0));
             if (!node || MD_GetNumElements(node) != CD_NumFields)
                 return false;
-            
+
             // Inserting destructor calls is not implemented yet, so classes
             // with destructors are ignored for now.
             Constant* hasDestructor = dyn_cast<Constant>(MD_GetElement(node, CD_Finalize));
@@ -396,15 +396,15 @@
     
     std::string metaname = TD_PREFIX;
     metaname += ti_global->getName();
-    
-    GlobalVariable* global = M.getGlobalVariable(metaname);
-    if (!global || !global->hasInitializer())
+
+    NamedMDNode* meta = M.getNamedMetadata(metaname);
+    if (!meta)
         return NULL;
-    
-    MDNode* node = dyn_cast<MDNode>(global->getInitializer());
+
+    MDNode* node = static_cast<MDNode*>(meta->getElement(0));
     if (!node)
         return NULL;
-    
+
     if (MD_GetNumElements(node) != TD_NumFields)
         return NULL;
     if (TD_Confirm >= 0 && (!MD_GetElement(node, TD_Confirm) ||
--- a/gen/typinf.cpp	Thu Jul 30 15:25:10 2009 +0200
+++ b/gen/typinf.cpp	Thu Jul 30 20:54:03 2009 +0200
@@ -304,7 +304,7 @@
 
     // Add some metadata for use by optimization passes.
     std::string metaname = std::string(TD_PREFIX) + mangle;
-    LLGlobalVariable* meta = gIR->module->getGlobalVariable(metaname);
+    llvm::NamedMDNode* meta = gIR->module->getNamedMetadata(metaname);
     // Don't generate metadata for non-concrete types
     // (such as tuple types, slice types, typeof(expr), etc.)
     if (!meta && tid->tinfo->toBasetype()->ty < Terror) {
@@ -314,10 +314,9 @@
             mdVals[TD_Confirm] = llvm::cast<MDNodeField>(irg->value);
         mdVals[TD_Type] = llvm::UndefValue::get(DtoType(tid->tinfo));
         // Construct the metadata
-        llvm::MDNode* metadata = gIR->context().getMDNode(mdVals, TD_NumFields);
+        llvm::MetadataBase* metadata = gIR->context().getMDNode(mdVals, TD_NumFields);
         // Insert it into the module
-        new llvm::GlobalVariable(*gIR->module, metadata->getType(), true,
-            METADATA_LINKAGE_TYPE, metadata, metaname);
+        llvm::NamedMDNode::Create(metaname, &metadata, 1, gIR->module);
     }
 
     DtoDeclareTypeInfo(tid);
--- a/ir/irclass.cpp	Thu Jul 30 15:25:10 2009 +0200
+++ b/ir/irclass.cpp	Thu Jul 30 20:54:03 2009 +0200
@@ -85,10 +85,10 @@
         mdVals[CD_Finalize] = LLConstantInt::get(LLType::Int1Ty, hasDestructor);
         mdVals[CD_CustomDelete] = LLConstantInt::get(LLType::Int1Ty, hasCustomDelete);
         // Construct the metadata
-        llvm::MDNode* metadata = gIR->context().getMDNode(mdVals, CD_NumFields);
+        llvm::MetadataBase* metadata = gIR->context().getMDNode(mdVals, CD_NumFields);
         // Insert it into the module
-        new llvm::GlobalVariable(*gIR->module, metadata->getType(), true,
-            METADATA_LINKAGE_TYPE, metadata, CD_PREFIX + initname);
+        std::string metaname = CD_PREFIX + initname;
+        llvm::NamedMDNode::Create(metaname, &metadata, 1, gIR->module);
     }
 
     return classInfo;