Mercurial > projects > ldc
diff ir/irfunction.h @ 1051:dc608dc33081
Make IrFuncTy a member of TypeFunction. Reset between modules compiled in the
same LDC call.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Sat, 07 Mar 2009 14:25:30 +0100 |
parents | 6bb04dbee21f |
children | 40caa8207b3e |
line wrap: on
line diff
--- a/ir/irfunction.h Fri Mar 06 21:15:13 2009 +0100 +++ b/ir/irfunction.h Sat Mar 07 14:25:30 2009 +0100 @@ -9,90 +9,6 @@ #include <stack> #include <map> -struct ABIRewrite; - -// represents a function type argument -// both explicit and implicit as well as return values -struct IrFuncTyArg : IrBase -{ - /** This is the original D type as the frontend knows it - * May NOT be rewritten!!! */ - Type* type; - - /// This is the final LLVM Type used for the parameter/return value type - const llvm::Type* ltype; - - /** These are the final LLVM attributes used for the function. - * Must be valid for the LLVM Type and byref setting */ - unsigned attrs; - - /** 'true' if the final LLVM argument is a LLVM reference type. - * Must be true when the D Type is a value type, but the final - * LLVM Type is a reference type! */ - bool byref; - - /** Pointer to the ABIRewrite structure needed to rewrite LLVM ValueS - * to match the final LLVM Type when passing arguments and getting - * return values */ - ABIRewrite* rewrite; - - /// Helper to check if the 'inreg' attribute is set - bool isInReg() const { return (attrs & llvm::Attribute::InReg) != 0; } - /// Helper to check if the 'sret' attribute is set - bool isSRet() const { return (attrs & llvm::Attribute::StructRet) != 0; } - /// Helper to check if the 'byval' attribute is set - bool isByVal() const { return (attrs & llvm::Attribute::ByVal) != 0; } - - /** @param t D type of argument/return value as known by the frontend - * @param byref Initial value for the 'byref' field. If true the initial - * LLVM Type will be of DtoType(type->pointerTo()), instead - * of just DtoType(type) */ - IrFuncTyArg(Type* t, bool byref, unsigned a = 0); -}; - -// represents a function type -struct IrFuncTy : IrBase -{ - // return value - IrFuncTyArg* ret; - - // null if not applicable - IrFuncTyArg* arg_sret; - IrFuncTyArg* arg_this; - IrFuncTyArg* arg_nest; - IrFuncTyArg* arg_arguments; - IrFuncTyArg* arg_argptr; - - // normal explicit arguments - typedef LLSmallVector<IrFuncTyArg*, 4> ArgList; - typedef ArgList::iterator ArgIter; - ArgList args; - - // C varargs - bool c_vararg; - - // range of normal parameters to reverse - bool reverseParams; - - IrFuncTy() - : ret(NULL), - arg_sret(NULL), - arg_this(NULL), - arg_nest(NULL), - arg_arguments(NULL), - arg_argptr(NULL), - c_vararg(false), - reverseParams(false) - {} - - llvm::Value* putRet(Type* dty, DValue* dval); - llvm::Value* getRet(Type* dty, DValue* dval); - - llvm::Value* putParam(Type* dty, int idx, DValue* dval); - llvm::Value* getParam(Type* dty, int idx, DValue* dval); - void getParam(Type* dty, int idx, DValue* dval, llvm::Value* lval); -}; - // represents a function struct IrFunction : IrBase {