1 /****************************************************************************
2 * Copyright (C) 2014-2015 Intel Corporation. All Rights Reserved.
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:
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
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
25 * @brief Includes all the builder related functionality
29 ******************************************************************************/
37 //////////////////////////////////////////////////////////////////////////
38 /// @brief Contructor for Builder.
39 /// @param pJitMgr - JitManager which contains modules, function passes, etc.
40 Builder::Builder(JitManager
*pJitMgr
)
43 mVWidth
= pJitMgr
->mVWidth
;
45 mpIRBuilder
= &pJitMgr
->mBuilder
;
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);
70 if (sizeof(uint32_t*) == 4)
73 mSimdIntPtrTy
= mSimdInt32Ty
;
77 SWR_ASSERT(sizeof(uint32_t*) == 8);
79 mSimdIntPtrTy
= mSimdInt64Ty
;