示例#1
0
IndexedAbstractHeap::IndexedAbstractHeap(LContext context, AbstractHeap* parent, const char* heapName, ptrdiff_t offset, size_t elementSize)
    : m_heapForAnyIndex(parent, heapName)
    , m_heapNameLength(strlen(heapName))
    , m_offset(offset)
    , m_elementSize(elementSize)
    , m_scaleTerm(0)
    , m_canShift(false)
{
#if FTL_USES_B3
    UNUSED_PARAM(context);
#else
    // See if there is a common shift amount we could use instead of multiplying. Don't
    // try too hard. This is just a speculative optimization to reduce load on LLVM.
    for (unsigned i = 0; i < 4; ++i) {
        if (1U << i == m_elementSize) {
            if (i)
                m_scaleTerm = constInt(intPtrType(context), i, ZeroExtend);
            m_canShift = true;
            break;
        }
    }
    
    if (!m_canShift)
        m_scaleTerm = constInt(intPtrType(context), m_elementSize, ZeroExtend);
#endif
}
CommonValues::CommonValues(LContext context)
    : voidType(FTL::voidType(context))
    , boolean(int1Type(context))
    , int8(int8Type(context))
    , int16(int16Type(context))
    , int32(int32Type(context))
    , int64(int64Type(context))
    , intPtr(intPtrType(context))
    , floatType(FTL::floatType(context))
    , doubleType(FTL::doubleType(context))
    , ref8(pointerType(int8))
    , ref16(pointerType(int16))
    , ref32(pointerType(int32))
    , ref64(pointerType(int64))
    , refPtr(pointerType(intPtr))
    , refFloat(pointerType(floatType))
    , refDouble(pointerType(doubleType))
    , booleanTrue(constInt(boolean, true, ZeroExtend))
    , booleanFalse(constInt(boolean, false, ZeroExtend))
    , int8Zero(constInt(int8, 0, SignExtend))
    , int32Zero(constInt(int32, 0, SignExtend))
    , int32One(constInt(int32, 1, SignExtend))
    , int64Zero(constInt(int64, 0, SignExtend))
    , intPtrZero(constInt(intPtr, 0, SignExtend))
    , intPtrOne(constInt(intPtr, 1, SignExtend))
    , intPtrTwo(constInt(intPtr, 2, SignExtend))
    , intPtrThree(constInt(intPtr, 3, SignExtend))
    , intPtrFour(constInt(intPtr, 4, SignExtend))
    , intPtrEight(constInt(intPtr, 8, SignExtend))
    , intPtrPtr(constInt(intPtr, sizeof(void*), SignExtend))
    , doubleZero(constReal(doubleType, 0))
    , rangeKind(mdKindID(context, "range"))
    , profKind(mdKindID(context, "prof"))
    , branchWeights(mdString(context, "branch_weights"))
    , nonNegativeInt32(constInt(int32, 0, SignExtend), constInt(int32, 1ll << 31, SignExtend))
    , m_context(context)
    , m_module(0)
{
}