Changeset 6115


Ignore:
Timestamp:
Jun 26, 2018, 3:50:39 AM (3 weeks ago)
Author:
xwa163
Message:

fix bug of lzparabix compressoin kernel

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/kernels/lzparabix/LZParabixCompressionKernel.cpp

    r6114 r6115  
    5757        inputEndPos = b->CreateUMin(inputEndPos, fileSize);
    5858        Value* outputCursor = b->getProducedItemCount("outputStream");
    59 //        b->CallPrintInt("inputCursor", inputCursor);
    6059        this->encodeBlock(b, inputCursor, inputEndPos, outputCursor);
    61 //        b->CallPrintInt("inputCursor:end", inputCursor);
     60
    6261        b->setTerminationSignal(b->CreateICmpEQ(inputEndPos, fileSize));
    6362        b->setProcessedItemCount("byteStream", inputEndPos);
     
    9695        phiOutputCursorPos->addIncoming(initOutputCursor, entryBlock);
    9796
    98 
    99 
    10097        b->CreateCondBr(
    10198                b->CreateICmpULT(phiInputCursorPos, inputEndPos),
     
    119116        // ---- updateCacheBlock
    120117        b->SetInsertPoint(updateCacheBlock);
     118
    121119        this->updateCache(b, phiPreviousBlockIndex, initBlockIndex);
     120
    122121        b->CreateBr(extractMatchInfoBlock);
    123122
    124123        // ---- encodeProcessBlock
    125124        b->SetInsertPoint(extractMatchInfoBlock);
     125
    126126        MatchInfo retMatchInfo = this->extractMatchInfo(b, phiInputCursorPos, initBlockIndex, inputEndPos);
    127127//        b->CallPrintInt("matchLength", retMatchInfo.matchLength);
     
    247247        Value* currentGlobalInputBlockIndex = b->CreateUDiv(cursorPos, b->getSize(64));
    248248
     249
     250
    249251        for (unsigned i = 0; i < 4; i++) {
    250252            BasicBlock* extractMatchInfoEntryBlock = b->CreateBasicBlock("extractMatchInfoEntryBlock");
     
    254256            b->SetInsertPoint(extractMatchInfoEntryBlock);
    255257
     258
    256259            Value* localMatchBlockIndex = b->CreateAnd(b->CreateLShr(possibleBlockIndexes, b->getInt64(i * 16)), b->getInt64(0xffff));
    257260            Value* globalMatchBlockIndex = b->CreateAdd(localMatchBlockIndex, initBlockGlobalIndex);
     
    270273
    271274            BasicBlock* scanMatchConBlock = b->CreateBasicBlock("scanMatchConBlock");
     275            BasicBlock* scanMatchBodyBlock = b->CreateBasicBlock("scanMatchBodyBlock");
    272276            BasicBlock* scanMatchExitBlock = b->CreateBasicBlock("scanMatchExitBlock");
    273277
     
    277281            // ---- scanMatchConBlock
    278282            b->SetInsertPoint(scanMatchConBlock);
     283
    279284            PHINode* phiForwardMatchLength = b->CreatePHI(b->getSizeTy(), 2);
    280285            phiForwardMatchLength->addIncoming(b->getSize(0), extractMatchInfoEntryBlock);
     
    283288            PHINode* phiMatchMask = b->CreatePHI(b->getInt64Ty(), 2);
    284289            phiMatchMask->addIncoming(b->getInt64(0), extractMatchInfoEntryBlock);
    285 
    286             Value* isMatch = b->CreateICmpEQ(
    287                     b->CreateLoad(b->CreateGEP(inputBasePtr, b->CreateAdd(b->CreateMul(globalMatchBlockIndex, b->getInt64(64)), phiMatchPos))),
    288                     b->CreateLoad(b->CreateGEP(inputBasePtr, b->CreateAdd(cursorPos, phiForwardMatchLength)))
    289             );
    290 
    291             phiForwardMatchLength->addIncoming(
    292                     b->CreateSelect(isMatch, b->CreateAdd(phiForwardMatchLength, b->getSize(1)), phiForwardMatchLength),
    293                     b->GetInsertBlock()
    294             );
    295             phiMatchPos->addIncoming(
    296                     b->CreateAdd(phiMatchPos, b->getSize(1)),
    297                     b->GetInsertBlock()
    298             );
    299 
    300             phiMatchMask->addIncoming(
    301                     b->CreateSelect(
    302                             isMatch,
    303                             b->CreateOr(phiMatchMask, b->CreateShl(b->getInt64(1), phiMatchPos)),
    304                             phiMatchMask
    305                     ),
    306                     b->GetInsertBlock()
    307             );
    308290
    309291            b->CreateCondBr(
     
    315297                            b->CreateNot(isNoMatch)
    316298                    ),
    317                     scanMatchConBlock,
     299                    scanMatchBodyBlock,
    318300                    scanMatchExitBlock
    319301            );
     302
     303            // ---- scanMatchBodyBlock
     304            b->SetInsertPoint(scanMatchBodyBlock);
     305
     306            Value* isMatch = b->CreateICmpEQ(
     307                    b->CreateLoad(b->CreateGEP(inputBasePtr, b->CreateAdd(b->CreateMul(globalMatchBlockIndex, b->getInt64(64)), phiMatchPos))),
     308                    b->CreateLoad(b->CreateGEP(inputBasePtr, b->CreateAdd(cursorPos, phiForwardMatchLength)))
     309            );
     310
     311
     312            phiForwardMatchLength->addIncoming(
     313                    b->CreateSelect(isMatch, b->CreateAdd(phiForwardMatchLength, b->getSize(1)), phiForwardMatchLength),
     314                    b->GetInsertBlock()
     315            );
     316            phiMatchPos->addIncoming(
     317                    b->CreateAdd(phiMatchPos, b->getSize(1)),
     318                    b->GetInsertBlock()
     319            );
     320
     321            phiMatchMask->addIncoming(
     322                    b->CreateSelect(
     323                            isMatch,
     324                            b->CreateOr(phiMatchMask, b->CreateShl(b->getInt64(1), phiMatchPos)),
     325                            phiMatchMask
     326                    ),
     327                    b->GetInsertBlock()
     328            );
     329
     330            b->CreateBr(scanMatchConBlock);
    320331
    321332            // ---- scanMatchExitBlock
Note: See TracChangeset for help on using the changeset viewer.