[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