Index: vm/jitrino/src/optimizer/inliner.h =================================================================== --- vm/jitrino/src/optimizer/inliner.h (revision 566079) +++ vm/jitrino/src/optimizer/inliner.h (working copy) @@ -193,7 +193,9 @@ int32 _inlineRecursionPenalty; int32 _inlineExactArgBonus; int32 _inlineExactAllBonus; - + + uint32 _inlineMaxNodeThreshold; + bool _inlineSkipExceptionPath; bool _inlineSkipApiMagicMethods; Method_Table* _inlineSkipMethodTable; Index: vm/jitrino/src/optimizer/inliner.cpp =================================================================== --- vm/jitrino/src/optimizer/inliner.cpp (revision 566079) +++ vm/jitrino/src/optimizer/inliner.cpp (working copy) @@ -63,6 +63,7 @@ #define INLINE_RECURSION_PENALTY 300 #define INLINE_EXACT_ARG_BONUS 0 #define INLINE_EXACT_ALL_BONUS 0 +#define INLINE_MAX_NODE_THRESHOLD 1300 #define INLINE_SKIP_EXCEPTION_PATH false #define PRAGMA_INLINE_BENEFIT (2*1000*1000*1000) @@ -109,6 +110,8 @@ _inlineExactArgBonus = argSource->getIntArg("exact_single_parameter_bonus", INLINE_EXACT_ARG_BONUS); _inlineExactAllBonus = argSource->getIntArg("exact_all_parameter_bonus", INLINE_EXACT_ALL_BONUS); + _inlineMaxNodeThreshold = argSource->getIntArg("max_node_threshold", INLINE_MAX_NODE_THRESHOLD); + _inlineSkipExceptionPath = argSource->getBoolArg("skip_exception_path", INLINE_SKIP_EXCEPTION_PATH); #if defined (_EM64T_) || defined (_IPF_) _inlineSkipApiMagicMethods = false; @@ -1152,6 +1155,9 @@ } //inline current region inlineRegion(regionNode); + if (_toplevelIRM.getFlowGraph().getNodeCount() > _inlineMaxNodeThreshold) { + break; + } } while (true); }