Esempio n. 1
0
void MachineCode::initVariableStatus()
{

    vector<BasicBlock *>  * basicBlocks = this->intermediateCode_->getBasicBlocks();

    for(size_t i = 0; i < basicBlocks->size(); i++)
    {
        IntegerHashTable<int> * statusAuxTable = this->getNewStatusAuxTable();

        BasicBlock * basicBlock  = basicBlocks->at(i);
        vector<Instruction *> * instructionVector  = basicBlock->getInstructionVector();

        for(int j = instructionVector->size() - 1; j >= 0; j--)
        {
            Instruction * instruction = instructionVector->at( j );
            vector<ArgumentInformation *> * args = instruction->getArgumentsInformation();

            ArgumentInformation * dst = args->at(0);


            if( dst != NULL )
            {
                IdentifierInformation * identifierInfo = this->getInfoFromArgument(dst->getInstructionArgument());

                if(identifierInfo != NULL)
                {
                    int status = statusAuxTable->get((int)identifierInfo);

                    dst->setStatus( status  );
                    statusAuxTable->set((int)identifierInfo, ARGUMENT_INFORMATION_STATUS_NOT_ALIVE);
                }
            }

            for(size_t k = 1; k < args->size(); k++ )
            {
                ArgumentInformation * src = args->at(k);

                if(src != NULL)
                {
                    IdentifierInformation * identifierInfo = this->getInfoFromArgument(src->getInstructionArgument());

                    if(identifierInfo != NULL)
                    {
                        int status = statusAuxTable->get((int)identifierInfo);

                        src->setStatus( status );
                        statusAuxTable->set((int)identifierInfo, j);
                    }
                }
            }
        }

        delete instructionVector;
        delete basicBlock;
        delete statusAuxTable;
    }

    delete basicBlocks;
}