示例#1
0
文件: opt.cpp 项目: kooler/hiphop-php
void optimizeTrace(Trace* trace, IRFactory* irFactory) {
  if (RuntimeOption::EvalHHIRMemOpt) {
    optimizeMemoryAccesses(trace, irFactory);
  }
  if (RuntimeOption::EvalDumpIR > 5) {
    std::cout << "----- HHIR before DCE -----\n";
    trace->print(std::cout, false);
    std::cout << "---------------------------\n";
  }
  eliminateDeadCode(trace, irFactory);
}
示例#2
0
void optimizeTrace(Trace* trace, IRFactory* irFactory) {
    if (RuntimeOption::EvalHHIRMemOpt) {
        optimizeMemoryAccesses(trace, irFactory);
        if (RuntimeOption::EvalDumpIR > 5) {
            std::cout << "----- HHIR after MemElim -----\n";
            trace->print(std::cout, false);
            std::cout << "---------------------------\n";
        }
    }
    if (RuntimeOption::EvalHHIRDeadCodeElim) {
        eliminateDeadCode(trace, irFactory);
        optimizeJumps(trace, irFactory);
        if (RuntimeOption::EvalDumpIR > 5) {
            std::cout << "----- HHIR after DCE -----\n";
            trace->print(std::cout, false);
            std::cout << "---------------------------\n";
        }
    }
    if (RuntimeOption::EvalHHIRGenerateAsserts) {
        insertRefCountAsserts(trace, irFactory);
    }
}
示例#3
0
void optimizeTrace(Trace* trace, TraceBuilder* traceBuilder) {
  IRFactory* irFactory = traceBuilder->getIrFactory();
  if (RuntimeOption::EvalHHIRMemOpt) {
    optimizeMemoryAccesses(trace, irFactory);
    if (RuntimeOption::EvalDumpIR > 5) {
      std::cout << "----- HHIR after MemElim -----\n";
      trace->print(std::cout);
      std::cout << "---------------------------\n";
    }
    assert(JIT::checkCfg(trace, *irFactory));
  }
  if (RuntimeOption::EvalHHIRDeadCodeElim) {
    eliminateDeadCode(trace, irFactory);
    if (RuntimeOption::EvalDumpIR > 5) {
      std::cout << "----- HHIR after DCE -----\n";
      trace->print(std::cout);
      std::cout << "---------------------------\n";
    }
    assert(JIT::checkCfg(trace, *irFactory));
  }
  if (RuntimeOption::EvalHHIRExtraOptPass
      && (RuntimeOption::EvalHHIRCse
          || RuntimeOption::EvalHHIRSimplification)) {
    traceBuilder->optimizeTrace();
    if (RuntimeOption::EvalDumpIR > 5) {
      std::cout << "----- HHIR after CSE/Simplification -----\n";
      trace->print(std::cout);
      std::cout << "---------------------------\n";
    }
    assert(JIT::checkCfg(trace, *irFactory));
    // Cleanup any dead code left around by CSE/Simplification
    // Ideally, this would be controlled by a flag returned
    // by optimzeTrace indicating whether DCE is necessary
    if (RuntimeOption::EvalHHIRDeadCodeElim) {
      eliminateDeadCode(trace, irFactory);
      if (RuntimeOption::EvalDumpIR > 5) {
        std::cout << "----- HHIR after DCE -----\n";
        trace->print(std::cout);
        std::cout << "---------------------------\n";
      }
      assert(JIT::checkCfg(trace, *irFactory));
    }
  }
  if (RuntimeOption::EvalHHIRJumpOpts) {
    optimizeJumps(trace, irFactory);
    if (RuntimeOption::EvalDumpIR > 5) {
      std::cout << "----- HHIR after jump opts -----\n";
      trace->print(std::cout);
      std::cout << "---------------------------\n";
    }
    assert(JIT::checkCfg(trace, *irFactory));
  }
  if (RuntimeOption::EvalHHIRGenerateAsserts) {
    insertAsserts(trace, irFactory);
    if (RuntimeOption::EvalDumpIR > 5) {
      std::cout << "----- HHIR after inserting RefCnt asserts -----\n";
      trace->print(std::cout);
      std::cout << "---------------------------\n";
    }
    assert(JIT::checkCfg(trace, *irFactory));
  }
}