1 /**************************************************************************** 2 * Copyright (C) 2014-2015 Intel Corporation. All Rights Reserved. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 * IN THE SOFTWARE. 22 * 23 * @file builder.h 24 * 25 * @brief Includes all the builder related functionality 26 * 27 * Notes: 28 * 29 ******************************************************************************/ 30 31 #include "builder.h" 32 33 namespace SwrJit 34 { 35 using namespace llvm; 36 37 ////////////////////////////////////////////////////////////////////////// 38 /// @brief Contructor for Builder. 39 /// @param pJitMgr - JitManager which contains modules, function passes, etc. Builder(JitManager * pJitMgr)40 Builder::Builder(JitManager *pJitMgr) 41 : mpJitMgr(pJitMgr) 42 { 43 mVWidth = pJitMgr->mVWidth; 44 45 mpIRBuilder = &pJitMgr->mBuilder; 46 47 mVoidTy = Type::getVoidTy(pJitMgr->mContext); 48 mFP16Ty = Type::getHalfTy(pJitMgr->mContext); 49 mFP32Ty = Type::getFloatTy(pJitMgr->mContext); 50 mDoubleTy = Type::getDoubleTy(pJitMgr->mContext); 51 mInt1Ty = Type::getInt1Ty(pJitMgr->mContext); 52 mInt8Ty = Type::getInt8Ty(pJitMgr->mContext); 53 mInt16Ty = Type::getInt16Ty(pJitMgr->mContext); 54 mInt32Ty = Type::getInt32Ty(pJitMgr->mContext); 55 mInt8PtrTy = PointerType::get(mInt8Ty, 0); 56 mInt16PtrTy = PointerType::get(mInt16Ty, 0); 57 mInt32PtrTy = PointerType::get(mInt32Ty, 0); 58 mInt64Ty = Type::getInt64Ty(pJitMgr->mContext); 59 mV4FP32Ty = StructType::get(pJitMgr->mContext, std::vector<Type*>(4, mFP32Ty), false); // vector4 float type (represented as structure) 60 mV4Int32Ty = StructType::get(pJitMgr->mContext, std::vector<Type*>(4, mInt32Ty), false); // vector4 int type 61 mSimdInt1Ty = VectorType::get(mInt1Ty, mVWidth); 62 mSimdInt16Ty = VectorType::get(mInt16Ty, mVWidth); 63 mSimdInt32Ty = VectorType::get(mInt32Ty, mVWidth); 64 mSimdInt64Ty = VectorType::get(mInt64Ty, mVWidth); 65 mSimdFP16Ty = VectorType::get(mFP16Ty, mVWidth); 66 mSimdFP32Ty = VectorType::get(mFP32Ty, mVWidth); 67 mSimdVectorTy = StructType::get(pJitMgr->mContext, std::vector<Type*>(4, mSimdFP32Ty), false); 68 mSimdVectorTRTy = StructType::get(pJitMgr->mContext, std::vector<Type*>(5, mSimdFP32Ty), false); 69 70 if (sizeof(uint32_t*) == 4) 71 { 72 mIntPtrTy = mInt32Ty; 73 mSimdIntPtrTy = mSimdInt32Ty; 74 } 75 else 76 { 77 SWR_ASSERT(sizeof(uint32_t*) == 8); 78 mIntPtrTy = mInt64Ty; 79 mSimdIntPtrTy = mSimdInt64Ty; 80 } 81 } 82 } 83