Podczas profilowania programu skompilowanego za pomocą gcc zauważyłem funkcje takie jak foo.isra.3
. Co oznacza isra
? Zauważam, że jedna z funkcji jest wywoływana tylko w kilku miejscach, a jeden z argumentów jest zawsze podawany jako wartość literalna. Może to znaczy, że jest to wariant funkcji zoptymalizowanej pod kątem określonych argumentów?Co oznacza przyrostek funkcji GCC "isra"?
11
A
Odpowiedz
16
Według komentarzu this bug report (i podobnych uwag mogę znaleźć):
ISRA jest nazwą zmiennej, która zostanie stworzona przez IPA SRA ...
IPA SRA jest optimization option:
-fipa-sra
Wykonaj międzyprocesorową zamianę skalarną agregatów, usunięcie nieużywanych parametrów i zastąpienie parametrów przekazywanych przez odniesienie parametrami przekazywanymi przez wartość.
Włączone na poziomach -O2, -O3 i -Os.
Najprawdopodobniej jest to wersja funkcji z tymi optymalizacjami.
W przypadku, o którym wspomniałeś, możliwe jest, że zastępuje on referencję wartością przekażnika, ponieważ wie, że nie ma sensu przekazywać literału przez odniesienie.