From fb108eed121407497802ec45618ff067ded9ee7c Mon Sep 17 00:00:00 2001 From: kai Date: Sun, 14 Oct 2012 18:45:31 +0200 Subject: [PATCH] More LLVM 3.2 changes. --- gen/functions.cpp | 11 +++++++---- gen/llvm.h | 2 ++ gen/llvmcompat.h | 6 ++++++ gen/runtime.cpp | 30 +++++++++++++++--------------- gen/tocall.cpp | 18 +++++++++--------- 5 files changed, 39 insertions(+), 28 deletions(-) diff --git a/gen/functions.cpp b/gen/functions.cpp index f52d7d43..9682b56a 100644 --- a/gen/functions.cpp +++ b/gen/functions.cpp @@ -100,8 +100,7 @@ llvm::FunctionType* DtoFunctionType(Type* type, Type* thistype, Type* nesttype, if (f->isref) t = t->pointerTo(); #endif - if (llvm::Attributes atts = DtoShouldExtend(t)) - a = atts; + a = DtoShouldExtend(t); } #if DMDV2 fty.ret = new IrFuncTyArg(rt, f->isref, a); @@ -206,7 +205,11 @@ llvm::FunctionType* DtoFunctionType(Type* type, Type* thistype, Type* nesttype, // sext/zext else if (!byref) { +#if LDC_LLVM_VER >= 302 + a = llvm::Attributes::get(llvm::Attributes::Builder(a).addAttributes(DtoShouldExtend(argtype))); +#else a |= DtoShouldExtend(argtype); +#endif } 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 #define ADD_PA(X) \ if (f->fty.X) { \ - if (f->fty.X->attrs) { \ + if (HAS_ATTRIBUTES(f->fty.X->attrs)) { \ PAWI.Index = idx; \ PAWI.Attrs = f->fty.X->attrs; \ attrs.push_back(PAWI); \ @@ -472,7 +475,7 @@ static void set_param_attrs(TypeFunction* f, llvm::Function* func, FuncDeclarati // build rest of attrs list for (int i = 0; i < n; i++) { - if (attrptr[i]) + if (HAS_ATTRIBUTES(attrptr[i])) { PAWI.Index = idx+i; PAWI.Attrs = attrptr[i]; diff --git a/gen/llvm.h b/gen/llvm.h index da582fe1..aa137e1b 100644 --- a/gen/llvm.h +++ b/gen/llvm.h @@ -22,6 +22,8 @@ #include "llvm/Support/IRBuilder.h" #endif +#include "gen/llvmcompat.h" + #include "llvm/Support/CallSite.h" using llvm::IRBuilder; diff --git a/gen/llvmcompat.h b/gen/llvmcompat.h index 2137bd3c..189a4b25 100644 --- a/gen/llvmcompat.h +++ b/gen/llvmcompat.h @@ -30,4 +30,10 @@ namespace llvm { } #endif +#if LDC_LLVM_VER >= 302 +#define HAS_ATTRIBUTES(x) (x).hasAttributes() +#else +#define HAS_ATTRIBUTES(x) (x) +#endif + #endif diff --git a/gen/runtime.cpp b/gen/runtime.cpp index 589603c4..2f534553 100644 --- a/gen/runtime.cpp +++ b/gen/runtime.cpp @@ -223,35 +223,35 @@ static void LLVM_D_BuildRuntimeModule() llvm::AttrListPtr NoAttrs, 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 - = 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 - = 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.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.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_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_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_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 - = 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 - = 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_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.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_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_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_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 llvm::AttrListPtr NoAttrs, diff --git a/gen/tocall.cpp b/gen/tocall.cpp index 23cd54d7..59cbea9d 100644 --- a/gen/tocall.cpp +++ b/gen/tocall.cpp @@ -290,17 +290,17 @@ void DtoBuildDVarArgList(std::vector& args, llvm::AttributeWithIndex Attr; // specify arguments 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.Attrs = atts; + Attr.Attrs = tf->fty.arg_arguments->attrs; attrs.push_back(Attr); } ++argidx; 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.Attrs = atts; + Attr.Attrs = tf->fty.arg_argptr->attrs; attrs.push_back(Attr); } @@ -311,7 +311,7 @@ void DtoBuildDVarArgList(std::vector& args, DValue* argval = DtoArgument(fnarg, static_cast(arguments->data[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; Attr.Index = argidx; @@ -376,7 +376,7 @@ DValue* DtoCallFunction(Loc& loc, Type* resulttype, DValue* fnval, Expressions* llvm::AttributeWithIndex Attr; // return attrs - if (tf->fty.ret->attrs) + if (HAS_ATTRIBUTES(tf->fty.ret->attrs)) { Attr.Index = 0; Attr.Attrs = tf->fty.ret->attrs; @@ -462,13 +462,13 @@ DValue* DtoCallFunction(Loc& loc, Type* resulttype, DValue* fnval, Expressions* } // 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.Attrs = tf->fty.arg_this->attrs; 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.Attrs = tf->fty.arg_nest->attrs; @@ -562,7 +562,7 @@ DValue* DtoCallFunction(Loc& loc, Type* resulttype, DValue* fnval, Expressions* // add attributes for (int i = 0; i < n; i++) { - if (attrptr[i]) + if (HAS_ATTRIBUTES(attrptr[i])) { Attr.Index = beg + i + 1; Attr.Attrs = attrptr[i];