Mercurial > projects > ldc
changeset 1041:9dca7182aa75
Added some documentation for the IrFuncTyArg structure, which is key to writing ABI transformations.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Wed, 04 Mar 2009 16:13:16 +0100 |
parents | 0477f98d357e |
children | 45af482e3832 |
files | ir/irfunction.h |
diffstat | 1 files changed, 20 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ir/irfunction.h Tue Mar 03 21:20:20 2009 +0100 +++ b/ir/irfunction.h Wed Mar 04 16:13:16 2009 +0100 @@ -15,17 +15,37 @@ // 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/returnvalue type const llvm::Type* ltype; + + /** These are the final llvm attributes needed + * must be valid for the LLVM Type and byref setting */ unsigned attrs; + + /** true if the argument final argument is a reference argument + * 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 */ ABIRewrite* rewrite; + /// Helper to check is the 'inreg' attribute is set bool isInReg() const { return (attrs & llvm::Attribute::InReg) != 0; } + /// Helper to check is the 'sret' attribute is set bool isSRet() const { return (attrs & llvm::Attribute::StructRet) != 0; } + /// Helper to check is the 'byval' attribute is set bool isByVal() const { return (attrs & llvm::Attribute::ByVal) != 0; } + /** Constructor + * @param t D type of argument/returnvalue as known by the frontend + * @param byref Initial value for the 'byref' field. If true the initial LLVM Type will be of type->pointerTo() + */ IrFuncTyArg(Type* t, bool byref, unsigned a = 0); };