Mercurial > projects > ldc
diff gen/tollvm.cpp @ 1192:3251ce06c820
Started seperating type resolution from the rest of codegen again, the merge had too many regressions.
author | Tomas Lindquist Olsen <tomas.l.olsen gmail.com> |
---|---|
date | Fri, 03 Apr 2009 16:34:11 +0200 |
parents | 71479f6e2a01 |
children | 3d4581761b4c |
line wrap: on
line diff
--- a/gen/tollvm.cpp Fri Apr 03 14:54:17 2009 +0200 +++ b/gen/tollvm.cpp Fri Apr 03 16:34:11 2009 +0200 @@ -22,6 +22,8 @@ #include "gen/linkage.h" #include "gen/llvm-version.h" +#include "ir/irtype.h" + bool DtoIsPassedByRef(Type* type) { Type* typ = type->toBasetype(); @@ -50,63 +52,62 @@ const LLType* DtoType(Type* t) { + if (t->irtype) + { + return t->irtype->get(); + } + assert(t); switch (t->ty) { - // integers + // basic types + case Tvoid: case Tint8: case Tuns8: - case Tchar: - return (const LLType*)LLType::Int8Ty; case Tint16: case Tuns16: - case Twchar: - return (const LLType*)LLType::Int16Ty; case Tint32: case Tuns32: - case Tdchar: - return (const LLType*)LLType::Int32Ty; case Tint64: case Tuns64: - return (const LLType*)LLType::Int64Ty; - - case Tbool: - return (const LLType*)llvm::ConstantInt::getTrue()->getType(); - - // floats case Tfloat32: - case Timaginary32: - return LLType::FloatTy; case Tfloat64: + case Tfloat80: + case Timaginary32: case Timaginary64: - return LLType::DoubleTy; - case Tfloat80: case Timaginary80: - if (global.params.cpu == ARCHx86 || global.params.cpu == ARCHx86_64) - return LLType::X86_FP80Ty; - else - return LLType::DoubleTy; - - // complex case Tcomplex32: case Tcomplex64: case Tcomplex80: - return DtoComplexType(t); + //case Tbit: + case Tbool: + case Tchar: + case Twchar: + case Tdchar: + { + t->irtype = new IrTypeBasic(t); + return t->irtype->get(); + } // pointers case Tpointer: - // getPtrToType checks for void itself - return getPtrToType(DtoType(t->nextOf())); + { + t->irtype = new IrTypePointer(t); + return t->irtype->get(); + } // arrays case Tarray: - return DtoArrayType(t); - case Tsarray: - return DtoStaticArrayType(t); + { + t->irtype = new IrTypeArray(t); + return t->irtype->get(); + } - // void - case Tvoid: - return LLType::VoidTy; + case Tsarray: + { + t->irtype = new IrTypeSArray(t); + return t->irtype->get(); + } // aggregates case Tstruct: {