More LLVM 3.2 changes.

This commit is contained in:
kai 2012-10-14 18:45:31 +02:00
parent 8519f448f8
commit fb108eed12
5 changed files with 39 additions and 28 deletions

View file

@ -100,8 +100,7 @@ llvm::FunctionType* DtoFunctionType(Type* type, Type* thistype, Type* nesttype,
if (f->isref) if (f->isref)
t = t->pointerTo(); t = t->pointerTo();
#endif #endif
if (llvm::Attributes atts = DtoShouldExtend(t)) a = DtoShouldExtend(t);
a = atts;
} }
#if DMDV2 #if DMDV2
fty.ret = new IrFuncTyArg(rt, f->isref, a); fty.ret = new IrFuncTyArg(rt, f->isref, a);
@ -206,7 +205,11 @@ llvm::FunctionType* DtoFunctionType(Type* type, Type* thistype, Type* nesttype,
// sext/zext // sext/zext
else if (!byref) else if (!byref)
{ {
#if LDC_LLVM_VER >= 302
a = llvm::Attributes::get(llvm::Attributes::Builder(a).addAttributes(DtoShouldExtend(argtype)));
#else
a |= DtoShouldExtend(argtype); a |= DtoShouldExtend(argtype);
#endif
} }
fty.args.push_back(new IrFuncTyArg(argtype, byref, a)); fty.args.push_back(new IrFuncTyArg(argtype, byref, a));
@ -430,7 +433,7 @@ static void set_param_attrs(TypeFunction* f, llvm::Function* func, FuncDeclarati
// handle implicit args // handle implicit args
#define ADD_PA(X) \ #define ADD_PA(X) \
if (f->fty.X) { \ if (f->fty.X) { \
if (f->fty.X->attrs) { \ if (HAS_ATTRIBUTES(f->fty.X->attrs)) { \
PAWI.Index = idx; \ PAWI.Index = idx; \
PAWI.Attrs = f->fty.X->attrs; \ PAWI.Attrs = f->fty.X->attrs; \
attrs.push_back(PAWI); \ attrs.push_back(PAWI); \
@ -472,7 +475,7 @@ static void set_param_attrs(TypeFunction* f, llvm::Function* func, FuncDeclarati
// build rest of attrs list // build rest of attrs list
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
{ {
if (attrptr[i]) if (HAS_ATTRIBUTES(attrptr[i]))
{ {
PAWI.Index = idx+i; PAWI.Index = idx+i;
PAWI.Attrs = attrptr[i]; PAWI.Attrs = attrptr[i];

View file

@ -22,6 +22,8 @@
#include "llvm/Support/IRBuilder.h" #include "llvm/Support/IRBuilder.h"
#endif #endif
#include "gen/llvmcompat.h"
#include "llvm/Support/CallSite.h" #include "llvm/Support/CallSite.h"
using llvm::IRBuilder; using llvm::IRBuilder;

View file

@ -30,4 +30,10 @@ namespace llvm {
} }
#endif #endif
#if LDC_LLVM_VER >= 302
#define HAS_ATTRIBUTES(x) (x).hasAttributes()
#else
#define HAS_ATTRIBUTES(x) (x)
#endif
#endif #endif

View file

@ -223,35 +223,35 @@ static void LLVM_D_BuildRuntimeModule()
llvm::AttrListPtr llvm::AttrListPtr
NoAttrs, NoAttrs,
Attr_NoAlias Attr_NoAlias
= NoAttrs.addAttr(0, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoAlias))), = NoAttrs.addAttr(gIR->context(), 0, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoAlias))),
Attr_NoUnwind Attr_NoUnwind
= NoAttrs.addAttr(~0U, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoUnwind))), = NoAttrs.addAttr(gIR->context(), ~0U, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoUnwind))),
Attr_ReadOnly Attr_ReadOnly
= NoAttrs.addAttr(~0U, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::ReadOnly))), = NoAttrs.addAttr(gIR->context(), ~0U, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::ReadOnly))),
Attr_ReadOnly_NoUnwind Attr_ReadOnly_NoUnwind
= Attr_ReadOnly.addAttr(~0U, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoUnwind))), = Attr_ReadOnly.addAttr(gIR->context(), ~0U, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoUnwind))),
Attr_ReadOnly_1_NoCapture Attr_ReadOnly_1_NoCapture
= Attr_ReadOnly.addAttr(1, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture))), = Attr_ReadOnly.addAttr(gIR->context(), 1, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture))),
Attr_ReadOnly_1_3_NoCapture Attr_ReadOnly_1_3_NoCapture
= Attr_ReadOnly_1_NoCapture.addAttr(3, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture))), = Attr_ReadOnly_1_NoCapture.addAttr(gIR->context(), 3, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture))),
Attr_ReadOnly_1_4_NoCapture Attr_ReadOnly_1_4_NoCapture
= Attr_ReadOnly_1_NoCapture.addAttr(4, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture))), = Attr_ReadOnly_1_NoCapture.addAttr(gIR->context(), 4, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture))),
Attr_ReadOnly_NoUnwind_1_NoCapture Attr_ReadOnly_NoUnwind_1_NoCapture
= Attr_ReadOnly_1_NoCapture.addAttr(~0U, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoUnwind))), = Attr_ReadOnly_1_NoCapture.addAttr(gIR->context(), ~0U, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoUnwind))),
Attr_ReadNone Attr_ReadNone
= NoAttrs.addAttr(~0U, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::ReadNone))), = NoAttrs.addAttr(gIR->context(), ~0U, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::ReadNone))),
Attr_1_NoCapture Attr_1_NoCapture
= NoAttrs.addAttr(1, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture))), = NoAttrs.addAttr(gIR->context(), 1, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture))),
Attr_NoAlias_1_NoCapture Attr_NoAlias_1_NoCapture
= Attr_1_NoCapture.addAttr(0, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoAlias))), = Attr_1_NoCapture.addAttr(gIR->context(), 0, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoAlias))),
Attr_NoAlias_3_NoCapture Attr_NoAlias_3_NoCapture
= Attr_NoAlias.addAttr(3, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture))), = Attr_NoAlias.addAttr(gIR->context(), 3, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture))),
Attr_1_2_NoCapture Attr_1_2_NoCapture
= Attr_1_NoCapture.addAttr(2, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture))), = Attr_1_NoCapture.addAttr(gIR->context(), 2, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture))),
Attr_1_3_NoCapture Attr_1_3_NoCapture
= Attr_1_NoCapture.addAttr(3, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture))), = Attr_1_NoCapture.addAttr(gIR->context(), 3, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture))),
Attr_1_4_NoCapture Attr_1_4_NoCapture
= Attr_1_NoCapture.addAttr(4, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture))); = Attr_1_NoCapture.addAttr(gIR->context(), 4, llvm::Attributes::get(llvm::Attributes::Builder().addAttribute(llvm::Attributes::NoCapture)));
#else #else
llvm::AttrListPtr llvm::AttrListPtr
NoAttrs, NoAttrs,

View file

@ -290,17 +290,17 @@ void DtoBuildDVarArgList(std::vector<LLValue*>& args,
llvm::AttributeWithIndex Attr; llvm::AttributeWithIndex Attr;
// specify arguments // specify arguments
args.push_back(DtoLoad(typeinfoarrayparam)); args.push_back(DtoLoad(typeinfoarrayparam));
if (llvm::Attributes atts = tf->fty.arg_arguments->attrs) { if (HAS_ATTRIBUTES(tf->fty.arg_arguments->attrs)) {
Attr.Index = argidx; Attr.Index = argidx;
Attr.Attrs = atts; Attr.Attrs = tf->fty.arg_arguments->attrs;
attrs.push_back(Attr); attrs.push_back(Attr);
} }
++argidx; ++argidx;
args.push_back(gIR->ir->CreateBitCast(mem, getPtrToType(LLType::getInt8Ty(gIR->context())), "tmp")); args.push_back(gIR->ir->CreateBitCast(mem, getPtrToType(LLType::getInt8Ty(gIR->context())), "tmp"));
if (llvm::Attributes atts = tf->fty.arg_argptr->attrs) { if (HAS_ATTRIBUTES(tf->fty.arg_argptr->attrs)) {
Attr.Index = argidx; Attr.Index = argidx;
Attr.Attrs = atts; Attr.Attrs = tf->fty.arg_argptr->attrs;
attrs.push_back(Attr); attrs.push_back(Attr);
} }
@ -311,7 +311,7 @@ void DtoBuildDVarArgList(std::vector<LLValue*>& args,
DValue* argval = DtoArgument(fnarg, static_cast<Expression*>(arguments->data[i])); DValue* argval = DtoArgument(fnarg, static_cast<Expression*>(arguments->data[i]));
args.push_back(fixArgument(argval, tf, callableTy->getParamType(argidx++), i)); args.push_back(fixArgument(argval, tf, callableTy->getParamType(argidx++), i));
if (tf->fty.args[i]->attrs) if (HAS_ATTRIBUTES(tf->fty.args[i]->attrs))
{ {
llvm::AttributeWithIndex Attr; llvm::AttributeWithIndex Attr;
Attr.Index = argidx; Attr.Index = argidx;
@ -376,7 +376,7 @@ DValue* DtoCallFunction(Loc& loc, Type* resulttype, DValue* fnval, Expressions*
llvm::AttributeWithIndex Attr; llvm::AttributeWithIndex Attr;
// return attrs // return attrs
if (tf->fty.ret->attrs) if (HAS_ATTRIBUTES(tf->fty.ret->attrs))
{ {
Attr.Index = 0; Attr.Index = 0;
Attr.Attrs = tf->fty.ret->attrs; Attr.Attrs = tf->fty.ret->attrs;
@ -462,13 +462,13 @@ DValue* DtoCallFunction(Loc& loc, Type* resulttype, DValue* fnval, Expressions*
} }
// add attributes for context argument // add attributes for context argument
if (tf->fty.arg_this && tf->fty.arg_this->attrs) if (tf->fty.arg_this && HAS_ATTRIBUTES(tf->fty.arg_this->attrs))
{ {
Attr.Index = retinptr ? 2 : 1; Attr.Index = retinptr ? 2 : 1;
Attr.Attrs = tf->fty.arg_this->attrs; Attr.Attrs = tf->fty.arg_this->attrs;
attrs.push_back(Attr); attrs.push_back(Attr);
} }
else if (tf->fty.arg_nest && tf->fty.arg_nest->attrs) else if (tf->fty.arg_nest && HAS_ATTRIBUTES(tf->fty.arg_nest->attrs))
{ {
Attr.Index = retinptr ? 2 : 1; Attr.Index = retinptr ? 2 : 1;
Attr.Attrs = tf->fty.arg_nest->attrs; Attr.Attrs = tf->fty.arg_nest->attrs;
@ -562,7 +562,7 @@ DValue* DtoCallFunction(Loc& loc, Type* resulttype, DValue* fnval, Expressions*
// add attributes // add attributes
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
{ {
if (attrptr[i]) if (HAS_ATTRIBUTES(attrptr[i]))
{ {
Attr.Index = beg + i + 1; Attr.Index = beg + i + 1;
Attr.Attrs = attrptr[i]; Attr.Attrs = attrptr[i];