Use AttrBuilder for LLVM >= 3.2.

Due to a misunderstanding of the new semantics of the Attribute(s) class,
this class was used in places where class AttrBuilder should be used.
This commit is contained in:
kai
2013-02-02 14:57:01 +01:00
parent 045d50deb5
commit 9081102f24
3 changed files with 34 additions and 23 deletions

View File

@@ -72,10 +72,8 @@ llvm::FunctionType* DtoFunctionType(Type* type, Type* thistype, Type* nesttype,
else
{
Type* rt = f->next;
#if LDC_LLVM_VER >= 303
llvm::Attribute a;
#elif LDC_LLVM_VER == 302
llvm::Attributes a;
#if LDC_LLVM_VER >= 302
llvm::AttrBuilder attrBuilder;
#else
llvm::Attributes a = None;
#endif
@@ -121,8 +119,17 @@ llvm::FunctionType* DtoFunctionType(Type* type, Type* thistype, Type* nesttype,
if (f->isref)
t = t->pointerTo();
#endif
#if LDC_LLVM_VER >= 302
attrBuilder.addAttribute(DtoShouldExtend(t));
#else
a = DtoShouldExtend(t);
#endif
}
#if LDC_LLVM_VER >= 303
llvm::Attribute a = llvm::Attribute::get(gIR->context(), attrBuilder);
#elif LDC_LLVM_VER == 302
llvm::Attributes a = llvm::Attributes::get(gIR->context(), attrBuilder);
#endif
#if DMDV2
fty.ret = new IrFuncTyArg(rt, f->isref, a);
#else
@@ -202,10 +209,8 @@ llvm::FunctionType* DtoFunctionType(Type* type, Type* thistype, Type* nesttype,
#endif
Type* argtype = arg->type;
#if LDC_LLVM_VER >= 303
llvm::Attribute a;
#elif LDC_LLVM_VER == 302
llvm::Attributes a;
#if LDC_LLVM_VER >= 302
llvm::AttrBuilder attrBuilder;
#else
llvm::Attributes a = None;
#endif
@@ -222,9 +227,9 @@ llvm::FunctionType* DtoFunctionType(Type* type, Type* thistype, Type* nesttype,
else if (abi->passByVal(byref ? argtype->pointerTo() : argtype))
{
#if LDC_LLVM_VER >= 303
if (!byref) a = llvm::Attribute::get(gIR->context(), llvm::AttrBuilder(a).addAttribute(llvm::Attribute::ByVal));
if (!byref) attrBuilder.addAttribute(llvm::Attribute::ByVal);
#elif LDC_LLVM_VER == 302
if (!byref) a = llvm::Attributes::get(gIR->context(), llvm::AttrBuilder(a).addAttribute(llvm::Attributes::ByVal));
if (!byref) attrBuilder.addAttribute(llvm::Attributes::ByVal);
#else
if (!byref) a |= llvm::Attribute::ByVal;
#endif
@@ -234,15 +239,17 @@ llvm::FunctionType* DtoFunctionType(Type* type, Type* thistype, Type* nesttype,
// sext/zext
else if (!byref)
{
#if LDC_LLVM_VER >= 303
a = llvm::Attribute::get(gIR->context(), llvm::AttrBuilder(a).addAttributes(DtoShouldExtend(argtype)));
#elif LDC_LLVM_VER == 302
a = llvm::Attributes::get(gIR->context(), llvm::AttrBuilder(a).addAttributes(DtoShouldExtend(argtype)));
#if LDC_LLVM_VER >= 302
attrBuilder.addAttribute(DtoShouldExtend(argtype));
#else
a |= DtoShouldExtend(argtype);
#endif
}
#if LDC_LLVM_VER >= 303
llvm::Attribute a = llvm::Attribute::get(gIR->context(), attrBuilder);
#elif LDC_LLVM_VER == 302
llvm::Attributes a = llvm::Attributes::get(gIR->context(), attrBuilder);
#endif
fty.args.push_back(new IrFuncTyArg(argtype, byref, a));
lidx++;
}

View File

@@ -43,7 +43,9 @@ bool DtoIsPassedByRef(Type* type)
}
#if LDC_LLVM_VER >= 303
llvm::Attribute DtoShouldExtend(Type* type)
llvm::Attribute::AttrKind DtoShouldExtend(Type* type)
#elif LDC_LLVM_VER == 302
llvm::Attributes::AttrVal DtoShouldExtend(Type* type)
#else
llvm::Attributes DtoShouldExtend(Type* type)
#endif
@@ -56,9 +58,9 @@ llvm::Attributes DtoShouldExtend(Type* type)
case Tint8:
case Tint16:
#if LDC_LLVM_VER >= 303
return llvm::Attribute::get(gIR->context(), llvm::AttrBuilder().addAttribute(llvm::Attribute::SExt));
return llvm::Attribute::SExt;
#elif LDC_LLVM_VER == 302
return llvm::Attributes::get(gIR->context(), llvm::AttrBuilder().addAttribute(llvm::Attributes::SExt));
return llvm::Attributes::SExt;
#else
return llvm::Attribute::SExt;
#endif
@@ -66,18 +68,18 @@ llvm::Attributes DtoShouldExtend(Type* type)
case Tuns8:
case Tuns16:
#if LDC_LLVM_VER >= 303
return llvm::Attribute::get(gIR->context(), llvm::AttrBuilder().addAttribute(llvm::Attribute::ZExt));
return llvm::Attribute::ZExt;
#elif LDC_LLVM_VER == 302
return llvm::Attributes::get(gIR->context(), llvm::AttrBuilder().addAttribute(llvm::Attributes::ZExt));
return llvm::Attributes::ZExt;
#else
return llvm::Attribute::ZExt;
#endif
}
}
#if LDC_LLVM_VER >= 303
return llvm::Attribute();
return llvm::Attribute::None;
#elif LDC_LLVM_VER == 302
return llvm::Attributes();
return llvm::Attributes::None;
#else
return llvm::Attribute::None;
#endif

View File

@@ -35,7 +35,9 @@ bool DtoIsPassedByRef(Type* type);
// should argument be zero or sign extended
#if LDC_LLVM_VER >= 303
llvm::Attribute DtoShouldExtend(Type* type);
llvm::Attribute::AttrKind DtoShouldExtend(Type* type);
#elif LDC_LLVM_VER == 302
llvm::Attributes::AttrVal DtoShouldExtend(Type* type);
#else
llvm::Attributes DtoShouldExtend(Type* type);
#endif