[llvm-commits] [dragonegg] r165948 - in /dragonegg/trunk: include/dragonegg/ABI.h include/x86/dragonegg/Target.h src/Convert.cpp src/DefaultABI.cpp src/TypeConversion.cpp

Duncan Sands baldrick at free.fr
Mon Oct 15 10:27:39 PDT 2012


Author: baldrick
Date: Mon Oct 15 12:27:39 2012
New Revision: 165948

URL: http://llvm.org/viewvc/llvm-project?rev=165948&view=rev
Log:
Get dragonegg compiling again after Bill's latest attribute changes.

Modified:
    dragonegg/trunk/include/dragonegg/ABI.h
    dragonegg/trunk/include/x86/dragonegg/Target.h
    dragonegg/trunk/src/Convert.cpp
    dragonegg/trunk/src/DefaultABI.cpp
    dragonegg/trunk/src/TypeConversion.cpp

Modified: dragonegg/trunk/include/dragonegg/ABI.h
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/include/dragonegg/ABI.h?rev=165948&r1=165947&r2=165948&view=diff
==============================================================================
--- dragonegg/trunk/include/dragonegg/ABI.h (original)
+++ dragonegg/trunk/include/dragonegg/ABI.h Mon Oct 15 12:27:39 2012
@@ -329,7 +329,7 @@
   /// should be handled.  This handles things like decimating structures into
   /// their fields.
   void HandleArgument(tree_node *type, std::vector<Type*> &ScalarElts,
-                      Attributes *Attributes = NULL);
+                      Attributes::Builder *AttrBuilder = NULL);
 
   /// HandleUnion - Handle a UNION_TYPE or QUAL_UNION_TYPE tree.
   ///

Modified: dragonegg/trunk/include/x86/dragonegg/Target.h
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/include/x86/dragonegg/Target.h?rev=165948&r1=165947&r2=165948&view=diff
==============================================================================
--- dragonegg/trunk/include/x86/dragonegg/Target.h (original)
+++ dragonegg/trunk/include/x86/dragonegg/Target.h Mon Oct 15 12:27:39 2012
@@ -30,7 +30,7 @@
 /* LLVM specific stuff for supporting calling convention output */
 #define TARGET_ADJUST_LLVM_CC(CC, type)                         \
   {                                                             \
-    tree_node *type_attributes = TYPE_ATTRIBUTES (type);              \
+    tree_node *type_attributes = TYPE_ATTRIBUTES (type);        \
     if (lookup_attribute ("stdcall", type_attributes)) {        \
       CC = CallingConv::X86_StdCall;                            \
     } else if (lookup_attribute("fastcall", type_attributes)) { \
@@ -38,12 +38,12 @@
     }                                                           \
   }
 
-#define TARGET_ADJUST_LLVM_RETATTR(Rattributes, type)           \
-  {                                                             \
-    tree_node *type_attributes = TYPE_ATTRIBUTES (type);              \
-    if (!TARGET_64BIT && (TARGET_SSEREGPARM ||                  \
-               lookup_attribute("sseregparm", type_attributes)))\
-      RAttributes |= Attributes(Attributes::InReg);             \
+#define TARGET_ADJUST_LLVM_RETATTR(type, AttrBuilder)             \
+  {                                                               \
+    tree_node *type_attributes = TYPE_ATTRIBUTES (type);          \
+    if (!TARGET_64BIT && (TARGET_SSEREGPARM ||                    \
+               lookup_attribute("sseregparm", type_attributes)))  \
+      AttrBuilder.addAttribute(Attributes::InReg);                \
   }
 
 /* LLVM specific stuff for converting gcc's `regparm` attribute to LLVM's
@@ -76,7 +76,7 @@
       local_fp_regparm = 3;                                     \
   }
 
-#define LLVM_ADJUST_REGPARM_ATTRIBUTE(PAttribute, Type, Size,   \
+#define LLVM_ADJUST_REGPARM_ATTRIBUTE(AttrBuilder, Type, Size,  \
                                       local_regparm,            \
                                       local_fp_regparm)         \
   {                                                             \
@@ -86,7 +86,7 @@
            TYPE_PRECISION(Type)==64)) {                         \
           local_fp_regparm -= 1;                                \
           if (local_fp_regparm >= 0)                            \
-            PAttribute |= Attributes(Attributes::InReg);        \
+            AttrBuilder.addAttribute(Attributes::InReg);        \
           else                                                  \
             local_fp_regparm = 0;                               \
       } else if (isa<INTEGRAL_TYPE>(Type) ||                    \
@@ -95,7 +95,7 @@
                   (Size + BITS_PER_WORD - 1) / BITS_PER_WORD;   \
           local_regparm -= words;                               \
           if (local_regparm>=0)                                 \
-            PAttribute |= Attributes(Attributes::InReg);        \
+            AttrBuilder.addAttribute(Attributes::InReg);        \
           else                                                  \
             local_regparm = 0;                                  \
       }                                                         \

Modified: dragonegg/trunk/src/Convert.cpp
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/src/Convert.cpp?rev=165948&r1=165947&r2=165948&view=diff
==============================================================================
--- dragonegg/trunk/src/Convert.cpp (original)
+++ dragonegg/trunk/src/Convert.cpp Mon Oct 15 12:27:39 2012
@@ -3246,10 +3246,9 @@
   // Work out whether to use an invoke or an ordinary call.
   if (!stmt_could_throw_p(stmt)) {
     // This call does not throw - mark it 'nounwind'.
-    Attributes::Builder B;
-    B.addAttribute(Attributes::NoUnwind);
-    PAL = PAL.addAttr(Callee->getContext(), ~0,
-                      Attributes::get(Callee->getContext(), B));
+    Attributes NoUnwind = Attributes::get(Callee->getContext(),
+                                          Attributes::NoUnwind);
+    PAL = PAL.addAttr(Callee->getContext(), ~0, NoUnwind);
   }
 
   if (!PAL.getFnAttributes().hasAttribute(Attributes::NoUnwind)) {
@@ -3339,18 +3338,17 @@
       }
     }
 
-    Attributes Attrs;
+    Attributes::Builder AttrBuilder;
 
     unsigned OldSize = CallOperands.size();
 
-    ABIConverter.HandleArgument(type, ScalarArgs, &Attrs);
+    ABIConverter.HandleArgument(type, ScalarArgs, &AttrBuilder);
 
-    if (Attrs.hasAttributes()) {
+    if (AttrBuilder.hasAttributes()) {
       // If the argument is split into multiple scalars, assign the
       // attributes to all scalars of the aggregate.
-      for (unsigned j = OldSize + 1; j <= CallOperands.size(); ++j) {
-        PAL = PAL.addAttr(Callee->getContext(), j, Attrs);
-      }
+      for (unsigned j = OldSize + 1; j <= CallOperands.size(); ++j)
+        PAL = PAL.addAttr(Context, j, Attributes::get(Context, AttrBuilder));
     }
 
     Client.clear();
@@ -5270,10 +5268,10 @@
       PassedInMemory = true;
     }
 
-    Attributes Attrs;
+    Attributes::Builder AttrBuilder;
     std::vector<Type*> ScalarArgs;
-    ABIConverter.HandleArgument(cplx_type, ScalarArgs, &Attrs);
-    assert(!Attrs.hasAttributes() && "Got attributes but none given!");
+    ABIConverter.HandleArgument(cplx_type, ScalarArgs, &AttrBuilder);
+    assert(!AttrBuilder.hasAttributes() && "Got attributes but none given!");
     Client.clear();
 
     // Create the call.

Modified: dragonegg/trunk/src/DefaultABI.cpp
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/src/DefaultABI.cpp?rev=165948&r1=165947&r2=165948&view=diff
==============================================================================
--- dragonegg/trunk/src/DefaultABI.cpp (original)
+++ dragonegg/trunk/src/DefaultABI.cpp Mon Oct 15 12:27:39 2012
@@ -192,7 +192,7 @@
 /// should be handled.  This handles things like decimating structures into
 /// their fields.
 void DefaultABI::HandleArgument(tree type, std::vector<Type*> &ScalarElts,
-                                Attributes *Attributes) {
+                                Attributes::Builder *AttrBuilder) {
   unsigned Size = 0;
   bool DontCheckAlignment = false;
   Type *Ty = ConvertType(type);
@@ -213,12 +213,9 @@
       PassInIntegerRegisters(type, ScalarElts, 0, false);
     } else if (LLVM_SHOULD_PASS_VECTOR_USING_BYVAL_ATTR(type)) {
       C.HandleByValArgument(Ty, type);
-      if (Attributes) {
-        Attributes::Builder B;
-        B.addAttribute(Attributes::ByVal);
-        B.addAlignmentAttr(LLVM_BYVAL_ALIGNMENT(type));
-        *Attributes = Attributes::get(Ty->getContext(),
-                                      B.addAttributes(*Attributes));
+      if (AttrBuilder) {
+        AttrBuilder->addAttribute(Attributes::ByVal);
+        AttrBuilder->addAlignmentAttr(LLVM_BYVAL_ALIGNMENT(type));
       }
     } else {
       C.HandleScalarArgument(Ty, type);
@@ -241,22 +238,16 @@
       PassInMixedRegisters(Ty, Elts, ScalarElts);
     else {
       C.HandleByValArgument(Ty, type);
-      if (Attributes) {
-        Attributes::Builder B;
-        B.addAttribute(Attributes::ByVal);
-        B.addAlignmentAttr(LLVM_BYVAL_ALIGNMENT(type));
-        *Attributes = Attributes::get(Ty->getContext(),
-                                      B.addAttributes(*Attributes));
+      if (AttrBuilder) {
+        AttrBuilder->addAttribute(Attributes::ByVal);
+        AttrBuilder->addAlignmentAttr(LLVM_BYVAL_ALIGNMENT(type));
       }
     }
   } else if (LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR(type, Ty)) {
     C.HandleByValArgument(Ty, type);
-    if (Attributes) {
-      Attributes::Builder B;
-      B.addAttribute(Attributes::ByVal);
-      B.addAlignmentAttr(LLVM_BYVAL_ALIGNMENT(type));
-      *Attributes = Attributes::get(Ty->getContext(),
-                                    B.addAttributes(*Attributes));
+    if (AttrBuilder) {
+      AttrBuilder->addAttribute(Attributes::ByVal);
+      AttrBuilder->addAlignmentAttr(LLVM_BYVAL_ALIGNMENT(type));
     }
   } else if (LLVM_SHOULD_PASS_AGGREGATE_IN_INTEGER_REGS(type, &Size,
                                                         &DontCheckAlignment)) {

Modified: dragonegg/trunk/src/TypeConversion.cpp
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/src/TypeConversion.cpp?rev=165948&r1=165947&r2=165948&view=diff
==============================================================================
--- dragonegg/trunk/src/TypeConversion.cpp (original)
+++ dragonegg/trunk/src/TypeConversion.cpp Mon Oct 15 12:27:39 2012
@@ -640,19 +640,17 @@
   };
 }
 
-static Attributes HandleArgumentExtension(LLVMContext &C, tree ArgTy) {
+static void HandleArgumentExtension(tree ArgTy, Attributes::Builder &AttrBuilder) {
   if (isa<BOOLEAN_TYPE>(ArgTy)) {
     if (TREE_INT_CST_LOW(TYPE_SIZE(ArgTy)) < INT_TYPE_SIZE)
-      return Attributes::get(C, Attributes::Builder().addAttribute(Attributes::ZExt));
+      AttrBuilder.addAttribute(Attributes::ZExt);
   } else if (isa<INTEGER_TYPE>(ArgTy) &&
              TREE_INT_CST_LOW(TYPE_SIZE(ArgTy)) < INT_TYPE_SIZE) {
     if (TYPE_UNSIGNED(ArgTy))
-      return Attributes::get(C, Attributes::Builder().addAttribute(Attributes::ZExt));
+      AttrBuilder.addAttribute(Attributes::ZExt);
     else
-      return Attributes::get(C, Attributes::Builder().addAttribute(Attributes::SExt));
+      AttrBuilder.addAttribute(Attributes::SExt);
   }
-
-  return Attributes();
 }
 
 /// ConvertParamListToLLVMSignature - This method is used to build the argument
@@ -683,15 +681,17 @@
   LLVMContext &Context = RetTy->getContext();
 
   // Compute whether the result needs to be zext or sext'd.
-  Attributes RAttributes = HandleArgumentExtension(Context, ReturnType);
+  Attributes::Builder RAttrBuilder;
+  HandleArgumentExtension(ReturnType, RAttrBuilder);
 
   // Allow the target to change the attributes.
 #ifdef TARGET_ADJUST_LLVM_RETATTR
-  TARGET_ADJUST_LLVM_RETATTR(RAttributes, type);
+  TARGET_ADJUST_LLVM_RETATTR(type, RAttrBuilder);
 #endif
 
-  if (RAttributes.hasAttributes())
-    Attrs.push_back(AttributeWithIndex::get(0, RAttributes));
+  if (RAttrBuilder.hasAttributes())
+    Attrs.push_back(AttributeWithIndex::get(0, Attributes::get(Context,
+                                                               RAttrBuilder)));
 
   // If this function returns via a shadow argument, the dest loc is passed
   // in as a pointer.  Mark that pointer as struct-ret and noalias.
@@ -708,31 +708,29 @@
     // Pass the static chain as the first parameter.
     ABIConverter.HandleArgument(TREE_TYPE(static_chain), ScalarArgs);
     // Mark it as the chain argument.
-    Attributes::Builder B;
-    B.addAttribute(Attributes::Nest);
-    Attrs.push_back(AttributeWithIndex::get(ArgTys.size(),
-                                            Attributes::get(Context, B)));
+    Attributes Nest = Attributes::get(Context, Attributes::Nest);
+    Attrs.push_back(AttributeWithIndex::get(ArgTys.size(), Nest));
   }
 
   for (ArrayRef<tree>::iterator I = Args.begin(), E = Args.end(); I != E; ++I) {
     tree ArgTy = TREE_TYPE(*I);
 
     // Determine if there are any attributes for this param.
-    Attributes PAttributes;
+    Attributes::Builder PAttrBuilder;
 
-    ABIConverter.HandleArgument(ArgTy, ScalarArgs, &PAttributes);
+    ABIConverter.HandleArgument(ArgTy, ScalarArgs, &PAttrBuilder);
 
     // Compute zext/sext attributes.
-    PAttributes |= HandleArgumentExtension(Context, ArgTy);
+    HandleArgumentExtension(ArgTy, PAttrBuilder);
 
     // Compute noalias attributes.
-    Attributes::Builder B;
     if (isa<ACCESS_TYPE>(ArgTy) && TYPE_RESTRICT(ArgTy))
-      B.addAttribute(Attributes::NoAlias);
+      PAttrBuilder.addAttribute(Attributes::NoAlias);
 
-    PAttributes |= Attributes::get(Context, B);
-    if (PAttributes.hasAttributes())
-      Attrs.push_back(AttributeWithIndex::get(ArgTys.size(), PAttributes));
+    if (PAttrBuilder.hasAttributes())
+      Attrs.push_back(AttributeWithIndex::get(ArgTys.size(),
+                                              Attributes::get(Context,
+                                                              PAttrBuilder)));
   }
 
   PAL = AttrListPtr::get(Attrs);
@@ -757,61 +755,61 @@
 
   // Compute attributes for return type (and function attributes).
   SmallVector<AttributeWithIndex, 8> Attrs;
-  Attributes::Builder FnAttributes;
+  Attributes::Builder FnAttrBuilder;
 
   int flags = flags_from_decl_or_type(decl ? decl : type);
 
   // Check for 'readnone' and 'readonly' function attributes.
   if (flags & ECF_CONST)
-    FnAttributes.addAttribute(Attributes::ReadNone);
+    FnAttrBuilder.addAttribute(Attributes::ReadNone);
   else if (flags & ECF_PURE)
-    FnAttributes.addAttribute(Attributes::ReadOnly);
+    FnAttrBuilder.addAttribute(Attributes::ReadOnly);
 
   // TODO: Handle ECF_LOOPING_CONST_OR_PURE
 
   // Check for 'noreturn' function attribute.
   if (flags & ECF_NORETURN)
-    FnAttributes.addAttribute(Attributes::NoReturn);
+    FnAttrBuilder.addAttribute(Attributes::NoReturn);
 
   // Check for 'nounwind' function attribute.
   if (flags & ECF_NOTHROW)
-    FnAttributes.addAttribute(Attributes::NoUnwind);
+    FnAttrBuilder.addAttribute(Attributes::NoUnwind);
 
   // Check for 'returnstwice' function attribute.
   if (flags & ECF_RETURNS_TWICE)
-    FnAttributes.addAttribute(Attributes::ReturnsTwice);
+    FnAttrBuilder.addAttribute(Attributes::ReturnsTwice);
 
   // Since they write the return value through a pointer,
   // 'sret' functions cannot be 'readnone' or 'readonly'.
   if (ABIConverter.isShadowReturn()) {
-    FnAttributes.removeAttribute(Attributes::ReadNone)
+    FnAttrBuilder.removeAttribute(Attributes::ReadNone)
       .removeAttribute(Attributes::ReadOnly);
   }
 
   // Demote 'readnone' nested functions to 'readonly' since
   // they may need to read through the static chain.
-  if (static_chain && FnAttributes.hasAttribute(Attributes::ReadNone)) {
-    FnAttributes.removeAttribute(Attributes::ReadNone);
-    FnAttributes.addAttribute(Attributes::ReadOnly);
+  if (static_chain && FnAttrBuilder.hasAttribute(Attributes::ReadNone)) {
+    FnAttrBuilder.removeAttribute(Attributes::ReadNone);
+    FnAttrBuilder.addAttribute(Attributes::ReadOnly);
   }
 
   // Compute whether the result needs to be zext or sext'd.
-  Attributes RAttributes;
   LLVMContext &Context = RetTy->getContext();
-  RAttributes |= HandleArgumentExtension(Context, TREE_TYPE(type));
+  Attributes::Builder RAttrBuilder;
+  HandleArgumentExtension(TREE_TYPE(type), RAttrBuilder);
 
   // Allow the target to change the attributes.
 #ifdef TARGET_ADJUST_LLVM_RETATTR
-  TARGET_ADJUST_LLVM_RETATTR(RAttributes, type);
+  TARGET_ADJUST_LLVM_RETATTR(type, RAttrBuilder);
 #endif
 
   // The value returned by a 'malloc' function does not alias anything.
   if (flags & ECF_MALLOC)
-    RAttributes |=
-      Attributes::get(Context, Attributes::Builder().addAttribute(Attributes::NoAlias));
+    RAttrBuilder.addAttribute(Attributes::NoAlias);
 
-  if (RAttributes.hasAttributes())
-    Attrs.push_back(AttributeWithIndex::get(0, RAttributes));
+  if (RAttrBuilder.hasAttributes())
+    Attrs.push_back(AttributeWithIndex::get(0, Attributes::get(Context,
+                                                               RAttrBuilder)));
 
   // If this function returns via a shadow argument, the dest loc is passed
   // in as a pointer.  Mark that pointer as struct-ret and noalias.
@@ -828,10 +826,8 @@
     // Pass the static chain as the first parameter.
     ABIConverter.HandleArgument(TREE_TYPE(static_chain), ScalarArgs);
     // Mark it as the chain argument.
-    Attributes::Builder B;
-    B.addAttribute(Attributes::Nest);
-    Attrs.push_back(AttributeWithIndex::get(ArgTypes.size(),
-                                            Attributes::get(Context, B)));
+    Attributes Nest = Attributes::get(Context, Attributes::Nest);
+    Attrs.push_back(AttributeWithIndex::get(ArgTypes.size(), Nest));
   }
 
 #ifdef LLVM_TARGET_ENABLE_REGPARM
@@ -867,40 +863,39 @@
         }
 
     // Determine if there are any attributes for this param.
-    Attributes PAttributes;
+    Attributes::Builder PAttrBuilder;
 
     unsigned OldSize = ArgTypes.size();
 
-    ABIConverter.HandleArgument(ArgTy, ScalarArgs, &PAttributes);
+    ABIConverter.HandleArgument(ArgTy, ScalarArgs, &PAttrBuilder);
 
     // Compute zext/sext attributes.
-    PAttributes |= HandleArgumentExtension(Context, ArgTy);
+    HandleArgumentExtension(ArgTy, PAttrBuilder);
 
     // Compute noalias attributes. If we have a decl for the function
     // inspect it for restrict qualifiers, otherwise try the argument
     // types.
     tree RestrictArgTy = (DeclArgs) ? TREE_TYPE(DeclArgs) : ArgTy;
     if (isa<ACCESS_TYPE>(RestrictArgTy) && TYPE_RESTRICT(RestrictArgTy))
-      PAttributes |=
-        Attributes::get(Context, Attributes::Builder().addAttribute(Attributes::NoAlias));
+      PAttrBuilder.addAttribute(Attributes::NoAlias);
 
 #ifdef LLVM_TARGET_ENABLE_REGPARM
     // Allow the target to mark this as inreg.
     if (isa<INTEGRAL_TYPE>(ArgTy) || isa<ACCESS_TYPE>(ArgTy) ||
         isa<REAL_TYPE>(ArgTy))
-      LLVM_ADJUST_REGPARM_ATTRIBUTE(PAttributes, ArgTy,
+      LLVM_ADJUST_REGPARM_ATTRIBUTE(PAttrBuilder, ArgTy,
                                     TREE_INT_CST_LOW(TYPE_SIZE(ArgTy)),
                                     local_regparam, local_fp_regparam);
 #endif // LLVM_TARGET_ENABLE_REGPARM
 
-    if (PAttributes.hasAttributes()) {
-      HasByVal |= PAttributes.hasAttribute(Attributes::ByVal);
+    if (PAttrBuilder.hasAttributes()) {
+      HasByVal |= PAttrBuilder.hasAttribute(Attributes::ByVal);
 
       // If the argument is split into multiple scalars, assign the
       // attributes to all scalars of the aggregate.
-      for (unsigned i = OldSize + 1; i <= ArgTypes.size(); ++i) {
-        Attrs.push_back(AttributeWithIndex::get(i, PAttributes));
-      }
+      for (unsigned i = OldSize + 1; i <= ArgTypes.size(); ++i)
+        Attrs.push_back(AttributeWithIndex::get
+                          (i, Attributes::get(Context, PAttrBuilder)));
     }
 
     if (DeclArgs)
@@ -913,13 +908,15 @@
   // write through the byval pointer argument, which LLVM does not allow for
   // readonly/readnone functions.
   if (HasByVal)
-    FnAttributes.removeAttribute(Attributes::ReadNone)
+    FnAttrBuilder.removeAttribute(Attributes::ReadNone)
       .removeAttribute(Attributes::ReadOnly);
 
   assert(RetTy && "Return type not specified!");
 
-  if (FnAttributes.hasAttributes())
-    Attrs.push_back(AttributeWithIndex::get(~0, Attributes::get(Context, FnAttributes)));
+  if (FnAttrBuilder.hasAttributes())
+    Attrs.push_back(AttributeWithIndex::get(~0,
+                                            Attributes::get(Context,
+                                                            FnAttrBuilder)));
 
   // Finally, make the function type and result attributes.
   PAL = AttrListPtr::get(Attrs);





More information about the llvm-commits mailing list