Ejemplo n.º 1
0
Archivo: ir-unit.cpp Proyecto: 2bj/hhvm
IRUnit::IRUnit(Offset initialBcOffset)
  : m_nextBlockId(0)
  , m_nextOpndId(0)
  , m_nextInstId(0)
  , m_bcOff(initialBcOffset)
  , m_entry(defBlock())
{
}
Ejemplo n.º 2
0
IRUnit::IRUnit(TransContext context) : m_context(context)
{
  // Setup m_entry after property initialization, since it depends on
  // the value of m_defHint.
  // For Optimize translations, the entry block's profCount is
  // adjusted later in translateRegion.
  m_entry = defBlock();
  m_startNanos = HPHP::Timer::GetThreadCPUTimeNanos();
}
Ejemplo n.º 3
0
Block* makeExitSlow(IRGS& env) {
  auto const exit = defBlock(env, Block::Hint::Unlikely);
  BlockPusher bp(*env.irb, makeMarker(env, bcOff(env)), exit);
  interpOne(env, *env.currentNormalizedInstruction);
  // If it changes the PC, InterpOneCF will get us to the new location.
  if (!opcodeChangesPC(env.currentNormalizedInstruction->op())) {
    gen(env, Jmp, makeExit(env, nextBcOff(env)));
  }
  return exit;
}
Ejemplo n.º 4
0
Block* makeExitOpt(IRGS& env, TransID transId) {
  assertx(!isInlining(env));
  auto const targetBcOff = bcOff(env);
  auto const exit = defBlock(env, Block::Hint::Unlikely);
  BlockPusher blockPusher(*env.irb, makeMarker(env, targetBcOff), exit);
  auto const data = ReqRetranslateOptData {
    transId,
    SrcKey { curSrcKey(env), targetBcOff },
    bcSPOffset(env)
  };
  gen(env, ReqRetranslateOpt, data, sp(env), fp(env));
  return exit;
}
Ejemplo n.º 5
0
IRUnit::IRUnit(TransContext context)
  : m_context(context)
  , m_entry(defBlock())
{}