llvm::Type * IrTypeBasic::basic2llvm(Type* t) { llvm::LLVMContext& ctx = llvm::getGlobalContext(); switch(t->ty) { case Tvoid: return llvm::Type::getVoidTy(ctx); case Tint8: case Tuns8: case Tchar: return llvm::Type::getInt8Ty(ctx); case Tint16: case Tuns16: case Twchar: return llvm::Type::getInt16Ty(ctx); case Tint32: case Tuns32: case Tdchar: return llvm::Type::getInt32Ty(ctx); case Tint64: case Tuns64: return llvm::Type::getInt64Ty(ctx); case Tint128: case Tuns128: return llvm::IntegerType::get(ctx, 128); case Tfloat32: case Timaginary32: return llvm::Type::getFloatTy(ctx); case Tfloat64: case Timaginary64: return llvm::Type::getDoubleTy(ctx); case Tfloat80: case Timaginary80: return getReal80Type(ctx); case Tcomplex32: return getComplexType(ctx, llvm::Type::getFloatTy(ctx)); case Tcomplex64: return getComplexType(ctx, llvm::Type::getDoubleTy(ctx)); case Tcomplex80: return getComplexType(ctx, getReal80Type(ctx)); case Tbool: return llvm::Type::getInt1Ty(ctx); default: llvm_unreachable("Unknown basic type."); } }
llvm::Type * IrTypeBasic::basic2llvm(Type* t) { LLType* t2; llvm::LLVMContext& ctx = llvm::getGlobalContext(); switch(t->ty) { case Tvoid: return llvm::Type::getVoidTy(ctx); case Tint8: case Tuns8: case Tchar: return llvm::Type::getInt8Ty(ctx); case Tint16: case Tuns16: case Twchar: return llvm::Type::getInt16Ty(ctx); case Tint32: case Tuns32: case Tdchar: return llvm::Type::getInt32Ty(ctx); case Tint64: case Tuns64: return llvm::Type::getInt64Ty(ctx); /* case Tint128: case Tuns128: return llvm::IntegerType::get(llvm::getGlobalContext(), 128); */ case Tfloat32: case Timaginary32: return llvm::Type::getFloatTy(ctx); case Tfloat64: case Timaginary64: return llvm::Type::getDoubleTy(ctx); case Tfloat80: case Timaginary80: // only x86 has 80bit float if (global.params.cpu == ARCHx86 || global.params.cpu == ARCHx86_64) return llvm::Type::getX86_FP80Ty(ctx); // other platforms use 64bit reals else return llvm::Type::getDoubleTy(ctx); case Tcomplex32: { t2 = llvm::Type::getFloatTy(ctx); return getComplexType(ctx, t2); } case Tcomplex64: t2 = llvm::Type::getDoubleTy(ctx); return getComplexType(ctx, t2); case Tcomplex80: t2 = (global.params.cpu == ARCHx86 || global.params.cpu == ARCHx86_64) ? llvm::Type::getX86_FP80Ty(ctx) : llvm::Type::getDoubleTy(ctx); return getComplexType(ctx, t2); case Tbool: return llvm::Type::getInt1Ty(ctx); default: assert(0 && "not basic type"); return NULL; } }