mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-02 08:01:11 +03:00
More LLVM 3.2 changes.
This commit is contained in:
parent
8519f448f8
commit
fb108eed12
5 changed files with 39 additions and 28 deletions
|
@ -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];
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue