diff --git a/hphp/runtime/base/runtime_option.h b/hphp/runtime/base/runtime_option.h index 0016056cb..cece553dd 100644 --- a/hphp/runtime/base/runtime_option.h +++ b/hphp/runtime/base/runtime_option.h @@ -414,6 +414,7 @@ public: F(bool, HHIRGenericDtorHelper, true) \ F(bool, HHIRCse, true) \ F(bool, HHIRSimplification, true) \ + F(uint32_t, HHIRSimplificationMaxBlocks,1000) \ F(bool, HHIRGenOpts, true) \ F(bool, HHIRJumpOpts, true) \ F(bool, HHIRExtraOptPass, true) \ diff --git a/hphp/runtime/vm/translator/hopt/tracebuilder.cpp b/hphp/runtime/vm/translator/hopt/tracebuilder.cpp index 4f2b0cdbb..351ed72a3 100644 --- a/hphp/runtime/vm/translator/hopt/tracebuilder.cpp +++ b/hphp/runtime/vm/translator/hopt/tracebuilder.cpp @@ -1522,6 +1522,12 @@ void TraceBuilder::optimizeTrace() { m_enableCse = RuntimeOption::EvalHHIRCse; m_enableSimplification = RuntimeOption::EvalHHIRSimplification; if (!m_enableCse && !m_enableSimplification) return; + if (m_trace->getBlocks().size() > + RuntimeOption::EvalHHIRSimplificationMaxBlocks) { + // TODO CSEHash::filter is very slow for large block sizes + // t2135219 should address that + return; + } BlockList sortedBlocks = sortCfg(m_trace.get(), m_irFactory); IdomVector idoms = findDominators(sortedBlocks); clearTrackedState();