Home | History | Annotate | Download | only in compiler

Lines Matching full:cunit

512 static BasicBlock *splitBlock(CompilationUnit *cUnit,
527 cUnit->numBlocks++);
528 dvmInsertGrowableList(&cUnit->blockList, (intptr_t) bottomBlock);
596 static BasicBlock *findBlock(CompilationUnit *cUnit,
601 GrowableList *blockList = &cUnit->blockList;
613 BasicBlock *newBB = splitBlock(cUnit, codeOffset, bb,
620 bb = dvmCompilerNewBB(kDalvikByteCode, cUnit->numBlocks++);
621 dvmInsertGrowableList(&cUnit->blockList, (intptr_t) bb);
629 void dvmDumpCFG(CompilationUnit *cUnit, const char *dirPrefix)
631 const Method *method = cUnit->method;
635 sprintf(startOffset, "_%x", cUnit->entryBlock->fallThrough->startOffset);
673 int numReachableBlocks = cUnit->numReachableBlocks;
675 const GrowableList *blockList = &cUnit->blockList;
678 int blockIdx = cUnit->dfsOrder.elemList[idx];
695 dvmCompilerFullDisassembler(cUnit, mir) :
797 static bool verifyPredInfo(CompilationUnit *cUnit, BasicBlock *bb)
806 dvmGrowableListGetElement(&cUnit->blockList, blockIdx);
832 dvmDumpCFG(cUnit, "/sdcard/cfg/");
842 static void processTryCatchBlocks(CompilationUnit *cUnit)
844 const Method *meth = cUnit->method;
855 BitVector *tryBlockAddr = cUnit->tryBlockAddr;
888 findBlock(cUnit, handler->address,
902 static void processCanBranch(CompilationUnit *cUnit, BasicBlock *curBlock,
934 BasicBlock *takenBlock = findBlock(cUnit, target,
946 BasicBlock *fallthroughBlock = findBlock(cUnit,
970 findBlock(cUnit, curOffset + width,
982 static void processCanSwitch(CompilationUnit *cUnit, BasicBlock *curBlock,
985 u2 *switchData= (u2 *) (cUnit->method->insns + curOffset +
1036 BasicBlock *caseBlock = findBlock(cUnit, curOffset + targetTable[i],
1055 BasicBlock *fallthroughBlock = findBlock(cUnit,
1068 static void processCanThrow(CompilationUnit *cUnit, BasicBlock *curBlock,
1073 const Method *method = cUnit->method;
1101 BasicBlock *catchBlock = findBlock(cUnit, handler->address,
1120 cUnit->numBlocks++);
1122 dvmInsertGrowableList(&cUnit->blockList, (intptr_t) ehBlock);
1136 BasicBlock *fallthroughBlock = findBlock(cUnit,
1166 CompilationUnit cUnit;
1179 memset(&cUnit, 0, sizeof(cUnit));
1180 cUnit.method = method;
1182 cUnit.jitMode = kJitMethod;
1185 dvmInitGrowableList(&cUnit.blockList, 4);
1192 dvmInitGrowableList(&cUnit.pcReconstructionList, 8);
1197 cUnit.tryBlockAddr = tryBlockAddr;
1203 cUnit.entryBlock = entryBlock;
1204 cUnit.exitBlock = exitBlock;
1206 dvmInsertGrowableList(&cUnit.blockList, (intptr_t) entryBlock);
1207 dvmInsertGrowableList(&cUnit.blockList, (intptr_t) exitBlock);
1212 dvmInsertGrowableList(&cUnit.blockList, (intptr_t) curBlock);
1218 * accessing cUnit.
1220 cUnit.numBlocks = numBlocks;
1223 processTryCatchBlocks(&cUnit);
1242 processCanBranch(&cUnit, curBlock, insn, curOffset, width, flags,
1257 findBlock(&cUnit, curOffset + width,
1267 processCanThrow(&cUnit, curBlock, insn, curOffset, width, flags,
1270 processCanSwitch(&cUnit, curBlock, insn, curOffset, width, flags);
1273 BasicBlock *nextBlock = findBlock(&cUnit, curOffset,
1300 if (cUnit.printMe) {
1301 dvmCompilerDumpCompilationUnit(&cUnit);
1305 cUnit.numDalvikRegisters = cUnit.method->registersSize;
1309 dvmCompilerDataFlowAnalysisDispatcher(&cUnit, verifyPredInfo,
1315 dvmCompilerMethodSSATransformation(&cUnit);
1318 dvmCompilerInitializeRegAlloc(&cUnit); // Needs to happen after SSA naming
1321 dvmCompilerLocalRegAlloc(&cUnit);
1325 dvmCompilerMethodMIR2LIR(&cUnit);
1328 //dvmDumpCFG(&cUnit, "/sdcard/cfg/");
1331 if (cUnit.firstLIRInsn) {
1334 dvmCompilerAssembleLIR(&cUnit, info);
1335 cUnit.assemblerRetries++;
1336 if (cUnit.printMe && cUnit.assemblerStatus != kSuccess)
1337 ALOGD("Assembler abort #%d on %d",cUnit.assemblerRetries,
1338 cUnit.assemblerStatus);
1339 } while (cUnit.assemblerStatus == kRetryAll);
1341 if (cUnit.printMe) {
1342 dvmCompilerCodegenDump(&cUnit);
1359 static bool exhaustTrace(CompilationUnit *cUnit, BasicBlock *curBlock)
1362 const u2 *codePtr = cUnit->method->insns + curOffset;
1380 changed |= exhaustTrace(cUnit, curBlock->taken);
1382 changed |= exhaustTrace(cUnit, curBlock->fallThrough);
1402 curBlock->fallThrough = cUnit->exitBlock;
1403 dvmCompilerSetBit(cUnit->exitBlock->predecessors, curBlock->id);
1406 processCanBranch(cUnit, curBlock, insn, curOffset, width, flags,
1409 exhaustTrace(cUnit, curBlock->taken);
1412 exhaustTrace(cUnit, curBlock->fallThrough);
1417 BasicBlock *nextBlock = findBlock(cUnit, curOffset,
1433 curBlock->fallThrough == cUnit->exitBlock);
1452 static bool compileLoop(CompilationUnit *cUnit, unsigned int startOffset,
1465 cUnit->jitMode = kJitLoop;
1468 dvmInitGrowableList(&cUnit->blockList, 4);
1471 dvmInitGrowableList(&cUnit->pcReconstructionList, 8);
1478 cUnit->entryBlock = entryBlock;
1479 cUnit->exitBlock = exitBlock;
1481 dvmInsertGrowableList(&cUnit->blockList, (intptr_t) entryBlock);
1482 dvmInsertGrowableList(&cUnit->blockList, (intptr_t) exitBlock);
1488 dvmInsertGrowableList(&cUnit->blockList, (intptr_t) curBlock);
1494 * accessing cUnit.
1496 cUnit->numBlocks = numBlocks;
1499 dvmCompilerDataFlowAnalysisDispatcher(cUnit,
1503 changed = exhaustTrace(cUnit, curBlock);
1507 bb = dvmCompilerNewBB(kChainingCellBackwardBranch, cUnit->numBlocks++);
1508 dvmInsertGrowableList(&cUnit->blockList, (intptr_t) bb);
1509 cUnit->backChainBlock = bb;
1512 bb = dvmCompilerNewBB(kPCReconstruction, cUnit->numBlocks++);
1513 dvmInsertGrowableList(&cUnit->blockList, (intptr_t) bb);
1516 bb = dvmCompilerNewBB(kExceptionHandling, cUnit->numBlocks++);
1517 dvmInsertGrowableList(&cUnit->blockList, (intptr_t) bb);
1518 cUnit->puntBlock = bb;
1520 cUnit->numDalvikRegisters = cUnit->method->registersSize;
1524 dvmCompilerDataFlowAnalysisDispatcher(cUnit, verifyPredInfo,
1530 if (!dvmCompilerBuildLoop(cUnit))
1533 dvmCompilerLoopOpt(cUnit);
1539 dvmCompilerInsertBackwardChaining(cUnit);
1543 dvmCompilerMIR2LIR(cUnit, info);
1545 dvmCompilerInitializeRegAlloc(cUnit);
1548 dvmCompilerLocalRegAlloc(cUnit);
1551 dvmCompilerMIR2LIR(cUnit);
1555 if (cUnit->quitLoopMode) {
1556 if (cUnit->printMe || gDvmJit.receivedSIGUSR2) {
1558 cUnit->entryBlock->startOffset);
1565 dvmCompilerAssembleLIR(cUnit, info);
1566 cUnit->assemblerRetries++;
1567 if (cUnit->printMe && cUnit->assemblerStatus != kSuccess)
1568 ALOGD("Assembler abort #%d on %d", cUnit->assemblerRetries,
1569 cUnit->assemblerStatus);
1570 } while (cUnit->assemblerStatus == kRetryAll);
1573 if (cUnit->assemblerStatus == kRetryHalve) {
1577 if (cUnit->printMe || gDvmJit.receivedSIGUSR2) {
1578 ALOGD("Loop trace @ offset %04x", cUnit->entryBlock->startOffset);
1579 dvmCompilerCodegenDump(cUnit);
1589 if (cUnit->hasClassLiterals && info->codeAddress) {
1590 dvmJitInstallClassObjectPointers(cUnit, (char *) info->codeAddress);
1599 assert(cUnit->assemblerStatus == kSuccess);
1603 methodStats->nativeSize += cUnit->totalSize;
1651 CompilationUnit cUnit;
1673 memset(&cUnit, 0, sizeof(CompilationUnit));
1681 cUnit.bailPtr = bailPtr;
1684 cUnit.printMe = gDvmJit.printMe;
1687 cUnit.method = desc->method;
1690 cUnit.traceDesc = desc;
1691 cUnit.jitMode = kJitTrace;
1694 dvmInitGrowableList(&cUnit.pcReconstructionList, 8);
1697 blockList = &cUnit.blockList;
1771 cUnit.allSingleStep = true;
1778 cUnit.printMe = true;
1810 if (cUnit.printMe) {
1824 width = parseInsn(codePtr, &insn->dalvikInsn, cUnit.printMe);
1831 cUnit.numInsts++;
1850 if (cUnit.numInsts >= numMaxInsts) {
1913 cUnit.hasInvoke = true;
1922 return compileLoop(&cUnit, startOffset, desc, numMaxInsts,
1974 cUnit.switchOverflowPad =
2074 cUnit.puntBlock = curBB;
2076 if (cUnit.printMe) {
2092 cUnit.numBlocks = numBlocks;
2095 cUnit.instructionSet = dvmCompilerInstructionSet();
2098 if (cUnit.hasInvoke && !(gDvmJit.disableOpt & (1 << kMethodInlining))) {
2099 dvmCompilerInlineMIR(&cUnit, info);
2102 cUnit.numDalvikRegisters = cUnit.method->registersSize;
2105 dvmInitializeSSAConversion(&cUnit);
2107 dvmCompilerNonLoopAnalysis(&cUnit);
2110 dvmCompilerInitializeRegAlloc(&cUnit); // Needs to happen after SSA naming
2113 if (cUnit.printMe) {
2114 dvmCompilerDumpCompilationUnit(&cUnit);
2119 dvmCompilerLocalRegAlloc(&cUnit);
2122 dvmCompilerMIR2LIR(&cUnit);
2125 dvmCompilerMIR2LIR(&cUnit, info);
2130 dvmCompilerAssembleLIR(&cUnit, info);
2131 cUnit.assemblerRetries++;
2132 if (cUnit.printMe && cUnit.assemblerStatus != kSuccess)
2133 ALOGD("Assembler abort #%d on %d",cUnit.assemblerRetries,
2134 cUnit.assemblerStatus);
2135 } while (cUnit.assemblerStatus == kRetryAll);
2137 if (cUnit.printMe) {
2139 dvmCompilerCodegenDump(&cUnit);
2142 cUnit.numInsts);
2145 if (cUnit.assemblerStatus == kRetryHalve) {
2150 return dvmCompileTrace(desc, cUnit.numInsts / 2, info, bailPtr,
2161 if (cUnit.hasClassLiterals && info->codeAddress) {
2162 dvmJitInstallClassObjectPointers(&cUnit, (char *) info->codeAddress);
2171 assert(cUnit.assemblerStatus == kSuccess);
2173 methodStats->nativeSize += cUnit.totalSize;