示例#1
0
static void
DumpLIR(GenericPrinter& out, LNode* ins)
{
    out.printf("      ");
    out.printf("%d ", ins->id());
    ins->dump(out);
    out.printf(" <|@\n");
}
示例#2
0
void
LNode::printOperands(GenericPrinter& out)
{
    for (size_t i = 0, e = numOperands(); i < e; i++) {
        out.printf(" (%s)", getOperand(i)->toString());
        if (i != numOperands() - 1)
            out.printf(",");
    }
}
示例#3
0
static void
DumpDefinition(GenericPrinter& out, MDefinition* def)
{
    out.printf("      ");
    out.printf("%u %u ", def->id(), unsigned(def->useCount()));
    def->printName(out);
    out.printf(" ");
    def->printOpcode(out);
    out.printf(" <|@\n");
}
示例#4
0
void
MBasicBlock::dumpStack(GenericPrinter& out)
{
#ifdef DEBUG
    out.printf(" %-3s %-16s %-6s %-10s\n", "#", "name", "copyOf", "first/next");
    out.printf("-------------------------------------------\n");
    for (uint32_t i = 0; i < stackPosition_; i++) {
        out.printf(" %-3d", i);
        out.printf(" %-16p\n", (void*)slots_[i]);
    }
#endif
}
示例#5
0
void
LBlock::dump(GenericPrinter& out)
{
    out.printf("block%u:\n", mir()->id());
    for (size_t i = 0; i < numPhis(); ++i) {
        getPhi(i)->dump(out);
        out.printf("\n");
    }
    for (LInstructionIterator iter = begin(); iter != end(); iter++) {
        iter->dump(out);
        out.printf("\n");
    }
}
示例#6
0
void
LMoveGroup::printOperands(GenericPrinter& out)
{
    for (size_t i = 0; i < numMoves(); i++) {
        const LMove& move = getMove(i);
        out.printf(" [%s -> %s", move.from().toString().get(), move.to().toString().get());
#ifdef DEBUG
        out.printf(", %s", TypeChars[move.type()]);
#endif
        out.printf("]");
        if (i != numMoves() - 1)
            out.printf(",");
    }
}
示例#7
0
void
LMoveGroup::printOperands(GenericPrinter& out)
{
    for (size_t i = 0; i < numMoves(); i++) {
        const LMove& move = getMove(i);
        // Use two printfs, as LAllocation::toString is not reentrant.
        out.printf(" [%s", move.from().toString());
        out.printf(" -> %s", move.to().toString());
#ifdef DEBUG
        out.printf(", %s", TypeChars[move.type()]);
#endif
        out.printf("]");
        if (i != numMoves() - 1)
            out.printf(",");
    }
}
示例#8
0
void
LIRGraph::dump(GenericPrinter& out)
{
    for (size_t i = 0; i < numBlocks(); i++) {
        getBlock(i)->dump(out);
        out.printf("\n");
    }
}
示例#9
0
static void
QuoteString(GenericPrinter& out, const CharT* s, size_t length)
{
    const CharT* end = s + length;
    for (const CharT* t = s; t < end; s = ++t) {
        // This quote implementation is probably correct,
        // but uses \u even when not strictly necessary.
        char16_t c = *t;
        if (c == '"' || c == '\\') {
            out.printf("\\");
            out.printf("%c", char(c));
        } else if (c < ' ' || c >= 127 || !isprint(c)) {
            out.printf("\\u%04x", c);
        } else {
            out.printf("%c", char(c));
        }
    }
}
示例#10
0
void
MIRGraph::dump(GenericPrinter& out)
{
#ifdef DEBUG
    for (MBasicBlockIterator iter(begin()); iter != end(); iter++) {
        iter->dump(out);
        out.printf("\n");
    }
#endif
}
示例#11
0
void
LNode::printName(GenericPrinter& out, Opcode op)
{
    static const char * const names[] =
    {
#define LIROP(x) #x,
        LIR_OPCODE_LIST(LIROP)
#undef LIROP
    };
    const char* name = names[op];
    size_t len = strlen(name);
    for (size_t i = 0; i < len; i++)
        out.printf("%c", tolower(name[i]));
}
示例#12
0
void
MBasicBlock::dump(GenericPrinter& out)
{
#ifdef DEBUG
    out.printf("block%u:%s%s%s\n", id(),
               isLoopHeader() ? " (loop header)" : "",
               unreachable() ? " (unreachable)" : "",
               isMarked() ? " (marked)" : "");
    if (MResumePoint* resume = entryResumePoint())
        resume->dump(out);
    for (MPhiIterator iter(phisBegin()); iter != phisEnd(); iter++)
        iter->dump(out);
    for (MInstructionIterator iter(begin()); iter != end(); iter++)
        iter->dump(out);
#endif
}
示例#13
0
void
C1Spewer::spewRanges(GenericPrinter& out, BacktrackingAllocator* regalloc, LNode* ins)
{
    for (size_t k = 0; k < ins->numDefs(); k++) {
        uint32_t id = ins->getDef(k)->virtualRegister();
        VirtualRegister* vreg = &regalloc->vregs[id];

        for (LiveRange::RegisterLinkIterator iter = vreg->rangesBegin(); iter; iter++) {
            LiveRange* range = LiveRange::get(*iter);
            out.printf("%d object \"", id);
            out.printf("%s", range->bundle()->allocation().toString().get());
            out.printf("\" %d -1", id);
            out.printf(" [%u, %u[", range->from().bits(), range->to().bits());
            for (UsePositionIterator usePos(range->usesBegin()); usePos; usePos++)
                out.printf(" %u M", usePos->pos.bits());
            out.printf(" \"\"\n");
        }
    }
}
示例#14
0
void
LCovSource::exportInto(GenericPrinter& out) const
{
    // Only write if everything got recorded.
    if (!hasFilename_ || !hasTopLevelScript_)
        return;

    outSF_.exportInto(out);

    outFN_.exportInto(out);
    outFNDA_.exportInto(out);
    out.printf("FNF:%d\n", numFunctionsFound_);
    out.printf("FNH:%d\n", numFunctionsHit_);

    outBRDA_.exportInto(out);
    out.printf("BRF:%d\n", numBranchesFound_);
    out.printf("BRH:%d\n", numBranchesHit_);

    outDA_.exportInto(out);
    out.printf("LF:%d\n", numLinesInstrumented_);
    out.printf("LH:%d\n", numLinesHit_);

    out.put("end_of_record\n");
}
示例#15
0
void
LNode::dump(GenericPrinter& out)
{
    if (numDefs() != 0) {
        out.printf("{");
        for (size_t i = 0; i < numDefs(); i++) {
            out.printf("%s", getDef(i)->toString());
            if (i != numDefs() - 1)
                out.printf(", ");
        }
        out.printf("} <- ");
    }

    printName(out);
    printOperands(out);

    if (numTemps()) {
        out.printf(" t=(");
        for (size_t i = 0; i < numTemps(); i++) {
            out.printf("%s", getTemp(i)->toString());
            if (i != numTemps() - 1)
                out.printf(", ");
        }
        out.printf(")");
    }

    if (numSuccessors()) {
        out.printf(" s=(");
        for (size_t i = 0; i < numSuccessors(); i++) {
            out.printf("block%u", getSuccessor(i)->id());
            if (i != numSuccessors() - 1)
                out.printf(", ");
        }
        out.printf(")");
    }
}
示例#16
0
void
C1Spewer::spewPass(GenericPrinter& out, MBasicBlock* block)
{
    out.printf("  begin_block\n");
    out.printf("    name \"B%d\"\n", block->id());
    out.printf("    from_bci -1\n");
    out.printf("    to_bci -1\n");

    out.printf("    predecessors");
    for (uint32_t i = 0; i < block->numPredecessors(); i++) {
        MBasicBlock* pred = block->getPredecessor(i);
        out.printf(" \"B%d\"", pred->id());
    }
    out.printf("\n");

    out.printf("    successors");
    if (block->hasLastIns()) {
        for (uint32_t i = 0; i < block->numSuccessors(); i++) {
            MBasicBlock* successor = block->getSuccessor(i);
            out.printf(" \"B%d\"", successor->id());
        }
    }
    out.printf("\n");

    out.printf("    xhandlers\n");
    out.printf("    flags\n");

    if (block->lir() && block->lir()->begin() != block->lir()->end()) {
        out.printf("    first_lir_id %d\n", block->lir()->firstId());
        out.printf("    last_lir_id %d\n", block->lir()->lastId());
    }

    out.printf("    begin_states\n");

    if (block->entryResumePoint()) {
        out.printf("      begin_locals\n");
        out.printf("        size %d\n", (int)block->numEntrySlots());
        out.printf("        method \"None\"\n");
        for (uint32_t i = 0; i < block->numEntrySlots(); i++) {
            MDefinition* ins = block->getEntrySlot(i);
            out.printf("        ");
            out.printf("%d ", i);
            if (ins->isUnused())
                out.printf("unused");
            else
                ins->printName(out);
            out.printf("\n");
        }
        out.printf("      end_locals\n");
    }
    out.printf("    end_states\n");

    out.printf("    begin_HIR\n");
    for (MPhiIterator phi(block->phisBegin()); phi != block->phisEnd(); phi++)
        DumpDefinition(out, *phi);
    for (MInstructionIterator i(block->begin()); i != block->end(); i++)
        DumpDefinition(out, *i);
    out.printf("    end_HIR\n");

    if (block->lir()) {
        out.printf("    begin_LIR\n");
        for (size_t i = 0; i < block->lir()->numPhis(); i++)
            DumpLIR(out, block->lir()->getPhi(i));
        for (LInstructionIterator i(block->lir()->begin()); i != block->lir()->end(); i++)
            DumpLIR(out, *i);
        out.printf("    end_LIR\n");
    }

    out.printf("  end_block\n");
}