Example #1
0
RegionDescPtr selectHotRegion(TransID transId,
                              MCGenerator* mcg) {
  auto const profData = jit::profData();
  assertx(profData);
  auto const& func = *profData->transRec(transId)->func();
  FuncId funcId = func.getFuncId();
  TransCFG cfg(funcId, profData, mcg->srcDB());
  assertx(regionMode() != RegionMode::Method);
  RegionDescPtr region;
  HotTransContext ctx;
  ctx.cfg = &cfg;
  ctx.profData = profData;
  ctx.tid = transId;
  ctx.maxBCInstrs = RuntimeOption::EvalJitMaxRegionInstrs;
  switch (pgoRegionMode(func)) {
    case PGORegionMode::Hottrace:
      region = selectHotTrace(ctx);
      break;

    case PGORegionMode::Hotblock:
      region = selectHotBlock(transId, profData, cfg);
      break;

    case PGORegionMode::WholeCFG:
    case PGORegionMode::HotCFG:
      region = selectHotCFG(ctx);
      break;
  }
  assertx(region);

  if (Trace::moduleEnabled(HPHP::Trace::pgo, 5)) {
    std::string dotFileName = std::string("/tmp/trans-cfg-") +
                              folly::to<std::string>(transId) + ".dot";

    std::ofstream outFile(dotFileName);
    if (outFile.is_open()) {
      cfg.print(outFile, funcId, profData);
      outFile.close();
    }

    FTRACE(5, "selectHotRegion: New Translation (file: {}) {}\n",
           dotFileName, region ? show(*region) : std::string("empty region"));
  }

  always_assert(region->instrSize() <= RuntimeOption::EvalJitMaxRegionInstrs);

  if (region->empty()) return nullptr;
  return region;
}
Example #2
0
RegionDescPtr selectHotRegion(TransID transId,
                              MCGenerator* mcg) {

  assertx(RuntimeOption::EvalJitPGO);

  const ProfData* profData = mcg->tx().profData();
  auto const& func = *(profData->transFunc(transId));
  FuncId funcId = func.getFuncId();
  TransCFG cfg(funcId, profData, mcg->tx().getSrcDB(),
               mcg->getJmpToTransIDMap());
  TransIDSet selectedTIDs;
  assertx(regionMode() != RegionMode::Method);
  RegionDescPtr region;
  HotTransContext ctx;
  ctx.cfg = &cfg;
  ctx.profData = profData;
  ctx.tid = transId;
  ctx.maxBCInstrs = RuntimeOption::EvalJitMaxRegionInstrs;
  switch (pgoRegionMode(func)) {
    case PGORegionMode::Hottrace:
      region = selectHotTrace(ctx, selectedTIDs);
      break;

    case PGORegionMode::Hotblock:
      region = selectHotBlock(transId, profData, cfg);
      break;

    case PGORegionMode::WholeCFG:
    case PGORegionMode::HotCFG:
      region = selectHotCFG(ctx, selectedTIDs);
      break;
  }
  assertx(region);

  if (Trace::moduleEnabled(HPHP::Trace::pgo, 5)) {
    std::string dotFileName = std::string("/tmp/trans-cfg-") +
                              folly::to<std::string>(transId) + ".dot";

    cfg.print(dotFileName, funcId, profData, &selectedTIDs);
    FTRACE(5, "selectHotRegion: New Translation {} (file: {}) {}\n",
           mcg->tx().profData()->curTransID(), dotFileName,
           region ? show(*region) : std::string("empty region"));
  }

  always_assert(region->instrSize() <= RuntimeOption::EvalJitMaxRegionInstrs);

  return region;
}
RegionDescPtr selectHotRegion(TransID transId,
                              TranslatorX64* tx64) {

  assert(RuntimeOption::EvalJitPGO);

  const ProfData* profData = tx64->profData();
  FuncId funcId = profData->transFuncId(transId);
  TransCFG cfg(funcId, profData, tx64->getSrcDB(), tx64->getJmpToTransIDMap());
  TransIDSet selectedTIDs;
  RegionDescPtr region = nullptr;
  RegionMode mode = regionMode();

  switch (mode) {
    case RegionMode::None:
      region = RegionDescPtr{nullptr};
      break;
    case RegionMode::HotBlock:
      region = selectHotBlock(transId, profData, cfg);
      break;
    case RegionMode::HotTrace:
      region = selectHotTrace(transId, profData, cfg, selectedTIDs);
      break;
    case RegionMode::OneBC:
    case RegionMode::Method:
    case RegionMode::Tracelet:
    case RegionMode::Legacy:
      always_assert(0 && "unsupported region mode");
  }

  if (Trace::moduleEnabled(HPHP::Trace::pgo, 5)) {
    std::string dotFileName = string("/tmp/trans-cfg-") +
                              lexical_cast<std::string>(transId) + ".dot";

    cfg.print(dotFileName, funcId, profData, &selectedTIDs);
    FTRACE(5, "selectHotRegion: New Translation {} (file: {}) {}\n",
           tx64->profData()->curTransID(), dotFileName,
           region ? show(*region) : std::string("empty region"));
  }

  return region;
}
Example #4
0
RegionDescPtr selectHotRegion(TransID transId,
                              MCGenerator* mcg) {

    assert(RuntimeOption::EvalJitPGO);

    const ProfData* profData = mcg->tx().profData();
    FuncId funcId = profData->transFuncId(transId);
    TransCFG cfg(funcId, profData, mcg->tx().getSrcDB(),
                 mcg->getJmpToTransIDMap());
    TransIDSet selectedTIDs;
    assert(regionMode() != RegionMode::Method);
    RegionDescPtr region;
    switch (pgoRegionMode()) {
    case PGORegionMode::Hottrace:
        region = selectHotTrace(transId, profData, cfg, selectedTIDs);
        break;

    case PGORegionMode::Hotblock:
        region = selectHotBlock(transId, profData, cfg);
        break;

    case PGORegionMode::WholeCFG:
        region = selectWholeCFG(transId, profData, cfg, selectedTIDs);
        break;
    }
    assert(region);

    if (Trace::moduleEnabled(HPHP::Trace::pgo, 5)) {
        std::string dotFileName = std::string("/tmp/trans-cfg-") +
                                  folly::to<std::string>(transId) + ".dot";

        cfg.print(dotFileName, funcId, profData, &selectedTIDs);
        FTRACE(5, "selectHotRegion: New Translation {} (file: {}) {}\n",
               mcg->tx().profData()->curTransID(), dotFileName,
               region ? show(*region) : std::string("empty region"));
    }

    return region;
}