Если ваша функция возвращает значение через ссылку, компилятор не может сохранить его в регистре при вызове других функций, потому что теоретически первая функция может сохранить адрес переменной, переданной ей в глобально доступной переменной, и любой последующий вызываемые функции могут изменить его, поэтому компилятор будет иметь (1) сохранить значение из регистров обратно в память перед вызовом других функций и (2) перечитать его, когда это необходимо из памяти, после любого из таких вызовов.
Если вы вернетесь по ссылке, оптимизация вашей программы будет страдать