changeset 1343:c21a6654cce2

Update for metadata changes in LLVM trunk.
author Frits van Bommel <fvbommel wxs.nl>
date Mon, 11 May 2009 11:59:22 +0200
parents 16d9afa22df4
children 3297edb697eb
files gen/metadata.h gen/passes/GarbageCollect2Stack.cpp gen/passes/StripMetaData.cpp gen/typinf.cpp ir/irclass.cpp
diffstat 5 files changed, 38 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/gen/metadata.h	Sun May 10 22:26:04 2009 +0200
+++ b/gen/metadata.h	Mon May 11 11:59:22 2009 +0200
@@ -6,6 +6,33 @@
 #if LLVM_REV >= 68420
 // Yay, we have metadata!
 
+// The metadata interface is still in flux...
+#if LLVM_REV >= 71407
+    // MDNode was moved into its own header, and contains Value*s
+    #include "llvm/MDNode.h"
+    typedef llvm::Value MDNodeField;
+    
+    // Use getNumElements() and getElement() to access elements.
+    inline unsigned MD_GetNumElements(llvm::MDNode* N) {
+        return N->getNumElements();
+    }
+    inline MDNodeField* MD_GetElement(llvm::MDNode* N, unsigned i) {
+        return N->getElement(i);
+    }
+#else
+    // MDNode is in Constants.h, and contains Constant*s
+    #include "llvm/Constants.h"
+    typedef llvm::Constant MDNodeField;
+    
+    // Use getNumOperands() and getOperand() to access elements.
+    inline unsigned MD_GetNumElements(llvm::MDNode* N) {
+        return N->getNumOperands();
+    }
+    inline MDNodeField* MD_GetElement(llvm::MDNode* N, unsigned i) {
+        return N->getOperand(i);
+    }
+#endif
+
 #define USE_METADATA
 #define METADATA_LINKAGE_TYPE  llvm::GlobalValue::WeakODRLinkage
 
--- a/gen/passes/GarbageCollect2Stack.cpp	Sun May 10 22:26:04 2009 +0200
+++ b/gen/passes/GarbageCollect2Stack.cpp	Mon May 11 11:59:22 2009 +0200
@@ -202,16 +202,16 @@
                 return false;
             
             MDNode* node = dyn_cast<MDNode>(global->getInitializer());
-            if (!node || node->getNumOperands() != CD_NumFields)
+            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>(node->getOperand(CD_Finalize));
+            Constant* hasDestructor = dyn_cast<Constant>(MD_GetElement(node, CD_Finalize));
             // We can't stack-allocate if the class has a custom deallocator
             // (Custom allocators don't get turned into this runtime call, so
             // those can be ignored)
-            Constant* hasCustomDelete = dyn_cast<Constant>(node->getOperand(CD_CustomDelete));
+            Constant* hasCustomDelete = dyn_cast<Constant>(MD_GetElement(node, CD_CustomDelete));
             if (hasDestructor == NULL || hasCustomDelete == NULL)
                 return false;
             
@@ -219,7 +219,7 @@
                     != ConstantInt::getFalse())
                 return false;
             
-            Ty = node->getOperand(CD_BodyType)->getType();
+            Ty = MD_GetElement(node, CD_BodyType)->getType();
             return true;
         }
         
@@ -366,6 +366,8 @@
             IRBuilder<> Builder(BB, Inst);
             Value* newVal = info->promote(CS, Builder, A);
             
+            DEBUG(DOUT << "Promoted to: " << *newVal);
+            
             // Make sure the type is the same as it was before, and replace all
             // uses of the runtime call with the alloca.
             if (newVal->getType() != Inst->getType())
@@ -395,11 +397,11 @@
     if (!node)
         return NULL;
     
-    if (node->getNumOperands() != TD_NumFields ||
-            (TD_Confirm >= 0 && node->getOperand(TD_Confirm)->stripPointerCasts() != ti_global))
+    if (MD_GetNumElements(node) != TD_NumFields ||
+            (TD_Confirm >= 0 && MD_GetElement(node, TD_Confirm)->stripPointerCasts() != ti_global))
         return NULL;
     
-    return node->getOperand(TD_Type)->getType();
+    return MD_GetElement(node, TD_Type)->getType();
 }
 
 
--- a/gen/passes/StripMetaData.cpp	Sun May 10 22:26:04 2009 +0200
+++ b/gen/passes/StripMetaData.cpp	Mon May 11 11:59:22 2009 +0200
@@ -30,7 +30,6 @@
 
 #include "llvm/Pass.h"
 #include "llvm/Module.h"
-#include "llvm/Constants.h"
 #include "llvm/ADT/Statistic.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/Debug.h"
--- a/gen/typinf.cpp	Sun May 10 22:26:04 2009 +0200
+++ b/gen/typinf.cpp	Mon May 11 11:59:22 2009 +0200
@@ -294,7 +294,7 @@
     // (such as tuple types, slice types, typeof(expr), etc.)
     if (!meta && tid->tinfo->toBasetype()->ty < Terror) {
         // Construct the fields
-        LLConstant* mdVals[TD_NumFields];
+        MDNodeField* mdVals[TD_NumFields];
         if (TD_Confirm >= 0)
             mdVals[TD_Confirm] = llvm::cast<LLConstant>(irg->value);
         mdVals[TD_Type] = llvm::UndefValue::get(DtoType(tid->tinfo));
--- a/ir/irclass.cpp	Sun May 10 22:26:04 2009 +0200
+++ b/ir/irclass.cpp	Mon May 11 11:59:22 2009 +0200
@@ -82,7 +82,7 @@
         bool hasDestructor = (classdecl->dtor != NULL);
         bool hasCustomDelete = (classdecl->aggDelete != NULL);
         // Construct the fields
-        LLConstant* mdVals[CD_NumFields];
+        MDNodeField* mdVals[CD_NumFields];
         mdVals[CD_BodyType] = llvm::UndefValue::get(bodyType);
         mdVals[CD_Finalize] = LLConstantInt::get(LLType::Int1Ty, hasDestructor);
         mdVals[CD_CustomDelete] = LLConstantInt::get(LLType::Int1Ty, hasCustomDelete);