Changeset 4828


Ignore:
Timestamp:
Oct 9, 2015, 11:59:50 AM (2 years ago)
Author:
cameron
Message:

Clean ups

Location:
icGREP/icgrep-devel/icgrep/pablo
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/pablo/carry_manager.cpp

    r4827 r4828  
    367367}
    368368
    369 Value* CarryManager::genShiftLeft64(Value* e) {
    370     Value* i128_val = mBuilder->CreateBitCast(e, mBuilder->getIntNTy(mBITBLOCK_WIDTH));
    371     return mBuilder->CreateBitCast(mBuilder->CreateShl(i128_val, 64), mBitBlockType);
    372 }
    373 
    374369Value * CarryManager::addCarryInCarryOut(int localIndex, Value* e1, Value* e2) {
    375 #if (mBITBLOCK_WIDTH == 128)
    376     Value * carryq_value = getCarryOpCarryIn(localIndex);
    377     //calculate carry through logical ops
    378     Value* carrygen = mBuilder->CreateAnd(e1, e2, "carrygen");
    379     Value* carryprop = mBuilder->CreateOr(e1, e2, "carryprop");
    380     Value* digitsum = mBuilder->CreateAdd(e1, e2, "digitsum");
    381     Value* partial = mBuilder->CreateAdd(digitsum, carryq_value, "partial");
    382     Value* digitcarry = mBuilder->CreateOr(carrygen, mBuilder->CreateAnd(carryprop, mBuilder->CreateNot(partial)));
    383     Value* mid_carry_in = genShiftLeft64(mBuilder->CreateLShr(digitcarry, 63));
    384     Value* sum = mBuilder->CreateAdd(partial, mBuilder->CreateBitCast(mid_carry_in, mBitBlockType), "sum");
    385     Value* carry_out_strm = mBuilder->CreateOr(carrygen, mBuilder->CreateAnd(carryprop, mBuilder->CreateNot(sum)));
    386     setCarryOpCarryOut(localIndex, carry_out_strm);
    387     return sum;
    388 #else
    389     //mBITBLOCK_WIDTH == 256, there is no other implementation
    390     Value * carryq_value = getCarryOpCarryIn(localIndex);
    391     Value* carrygen = mBuilder->CreateAnd(e1, e2, "carrygen");
    392     Value* carryprop = mBuilder->CreateOr(e1, e2, "carryprop");
    393     Value * sum = iBuilder->simd_add(mBITBLOCK_WIDTH, iBuilder->simd_add(mBITBLOCK_WIDTH, e1, e2), carryq_value);
    394     Value* carry_out_strm = mBuilder->CreateOr(carrygen, mBuilder->CreateAnd(carryprop, mBuilder->CreateNot(sum)));
    395     setCarryOpCarryOut(localIndex, carry_out_strm);
    396     return sum;
    397 #endif         
     370    if (mBITBLOCK_WIDTH == 128) {
     371        Value * carryq_value = getCarryOpCarryIn(localIndex);
     372        //calculate carry through logical ops
     373        Value* carrygen = mBuilder->CreateAnd(e1, e2, "carrygen");
     374        Value* carryprop = mBuilder->CreateOr(e1, e2, "carryprop");
     375        Value* digitsum = iBuilder->simd_add(64, e1, e2);
     376        Value* partial = iBuilder->simd_add(64, digitsum, carryq_value);
     377        Value* digitcarry = mBuilder->CreateOr(carrygen, mBuilder->CreateAnd(carryprop, mBuilder->CreateNot(partial)));
     378        Value* mid_carry_in = iBuilder->simd_slli(128, mBuilder->CreateLShr(digitcarry, 63), 64);
     379        Value* sum = iBuilder->simd_add(64, partial, mBuilder->CreateBitCast(mid_carry_in, mBitBlockType));
     380        Value* carry_out_strm = mBuilder->CreateOr(carrygen, mBuilder->CreateAnd(carryprop, mBuilder->CreateNot(sum)));
     381        setCarryOpCarryOut(localIndex, carry_out_strm);
     382        return sum;
     383    }
     384    else {
     385        Value * carryq_value = getCarryOpCarryIn(localIndex);
     386        Value* carrygen = mBuilder->CreateAnd(e1, e2, "carrygen");
     387        Value* carryprop = mBuilder->CreateOr(e1, e2, "carryprop");
     388        Value * sum = iBuilder->simd_add(mBITBLOCK_WIDTH, iBuilder->simd_add(mBITBLOCK_WIDTH, e1, e2), carryq_value);
     389        Value* carry_out_strm = mBuilder->CreateOr(carrygen, mBuilder->CreateAnd(carryprop, mBuilder->CreateNot(sum)));
     390        setCarryOpCarryOut(localIndex, carry_out_strm);
     391        return sum;
     392    }
    398393}
    399394
     
    428423    Value* result_value;
    429424   
    430 #if (mBITBLOCK_WIDTH == 128) && !defined(USE_LONG_INTEGER_SHIFT)
    431     Value * ahead64 = iBuilder->mvmd_dslli(64, carry_in, strm, 1);
    432     result_value = mBuilder->CreateOr(iBuilder->simd_srli(64, ahead64, 63), iBuilder->simd_slli(64, strm, 1));
    433 #else
    434     Value* advanceq_longint = mBuilder->CreateBitCast(carry_in, mBuilder->getIntNTy(mBITBLOCK_WIDTH));
    435     Value* strm_longint = mBuilder->CreateBitCast(strm, mBuilder->getIntNTy(mBITBLOCK_WIDTH));
    436     Value* adv_longint = mBuilder->CreateOr(mBuilder->CreateShl(strm_longint, 1), mBuilder->CreateLShr(advanceq_longint, mBITBLOCK_WIDTH - 1), "advance");
    437     result_value = mBuilder->CreateBitCast(adv_longint, mBitBlockType);
    438    
    439 #endif
     425    if (mBITBLOCK_WIDTH == 128) {
     426        Value * ahead64 = iBuilder->mvmd_dslli(64, carry_in, strm, 1);
     427        result_value = mBuilder->CreateOr(iBuilder->simd_srli(64, ahead64, 63), iBuilder->simd_slli(64, strm, 1));
     428    }
     429    else {
     430        Value* advanceq_longint = mBuilder->CreateBitCast(carry_in, mBuilder->getIntNTy(mBITBLOCK_WIDTH));
     431        Value* strm_longint = mBuilder->CreateBitCast(strm, mBuilder->getIntNTy(mBITBLOCK_WIDTH));
     432        Value* adv_longint = mBuilder->CreateOr(mBuilder->CreateShl(strm_longint, 1), mBuilder->CreateLShr(advanceq_longint, mBITBLOCK_WIDTH - 1), "advance");
     433        result_value = mBuilder->CreateBitCast(adv_longint, mBitBlockType);
     434    }
    440435    return result_value;
    441436}
  • icGREP/icgrep-devel/icgrep/pablo/carry_manager.h

    r4827 r4828  
    164164    void extractAndSaveCarryOutBits(Value * strm, unsigned carryBit_lo, unsigned carryBitCount);
    165165    Value * pack2bitblock(Value * pack);
    166     Value* genShiftLeft64(Value* e);
    167166
    168167
Note: See TracChangeset for help on using the changeset viewer.