Здравствуйте, Sinclair, Вы писали:
S>Я, если честно, не понимаю, откуда он (дотнет) берёт такие глубины стека. Там же вполне себе прямолинейный код, два вложенных цикла. Ну, выражение там есть. Откуда там эти тысячи-то? Едва ли 20 maxstack должен быть.
Я полагаю это исходит из SSA формы и получается что каждый блок имеет свои входы-выходы. (Ну или чего-то подобного. У меня сложилось впечатление что он их назначает исходя из загрузок на IL-стэк.) Вот они и считаются temp locals. Вот когда их становится дохрена — тут мы и упираемся в лимит. Теоретически он должен был схлопнуть их но вместо этого он отлистывает rsp на внушительное расстояние (может он там и не использует большую часть). И это расстояние вдвое меньше в последней версии. Но, что-то он схлопывает. Когда не упирается в лимит.

Я получал дампы вызывая один бенчмарк *Scalar но финальный асм бодро напихан какими-то векторными инструкциями. Если еще раз полезу — то надо будет вызывать отдельным примером, потому что есть риск что что-то идет не так. По крайней мере я себя чувствую некомфортно. Еще если бы я представлял что там должно быть... а так, ну вижу асм, ну и толку. Заодно сграбить unsafe.

Я пытался натравить kdiff3 на логи, но он сказал нечего там и пытаться смотреть (крешнулся

).
В общем сейчас остался осадок что чего-то недопонял. Надо переждать, мож чего интересного еще
S>Всё равно не понимаю, куда он тормозит при исполнении. Я сейчас вывожу ручки для отключения оптимизаций; можно будет попробовать сгенерировать код, максимально близкий к UnsafeSauvolaScalar.
Ты разглядел последние два (новых) столбика в последних запусках? (Бранчинг)