Тут на самом деле есть опасность что пользователь отстрелит себе ногу. Например, в ядре очень любят ставить какой-нибудь force-inline, а в итоге размер процедуры после выполнения цепочки таких подстановок разбухнет до неимоверных размеров и станет только хуже. Тоже самое и с другими параметрами. Особенно плохо если под конкретную машину пользователь установил оптимальные эвристики, а для другой не поменял Makefile. Так что это палка о двух концах
Правильно ли я понимаю, что тут работает такой эффект:
1. Мы выполняем процедуру А, в которую собратно всё на свете, плюс, в ней есть некоторое количество ветвлений.
2. "Мёртвый в данный момент" код, который не будет выполнен на этом вызове, прокачивается через кэш, и вымывает рабочий код/данные (в зависимости от типа кэша)
Соответсвенно, если бы вместо inline остались бы вызовы, то этот "мёртвый в данный момент" код не был бы подгружен и не портил кэш?