В компиляторе GCC всякий раз, когда отмечен -O3, компилятор оптимизирует, главным образом, с помощью циклического развертывания и вставки функции.
Однако, когда я скомпилировал приложение, которое имеет следующую функцию, оно не выполняло функцию Inlining. Из gprofing и gconving я мог заметить, что эта функция (comp_t_delay) не была вызвана из основного функционального блока этого приложения. Однако он вызывался из функции, вызываемой функцией, вызываемой основной функцией.
Вот код comp_t_delay (int in, int ip), который я хочу знать, почему GCC не оптимизировал его, используя -O3 (любая помощь приветствуется!):
static float
comp_t_delay(int in,int ip)
{
int sb, sib,dx, dy;
t_type_ptr st, sit;
float d_ssi;
d_ssi = 0.;
sb = net[in].node_block[0];
st = block[sb].type;
sib = net[in].node_block[ip];
sit = block[sib].type;
assert(st != NULL);
assert(sit != NULL);
dx = abs(block[sib].x - block[sb].x);
dy = abs(block[sib].y - block[sb].y);
if(st == T_IO)
{
if(sit == T_IO)
d_ssi = de_io[dx][dy];
else
d_ssi = de_iof[dx][dy];
}
else
{
if(sit == T_IO)
d_ssi = de_fio[dx][dy];
else
d_ssi = de_fb[dx][dy];
}
if(d_ssi < 0)
{
printf
("Error1\n");
exit(1);
}
if(d_ssi < 0.)
{
printf
("Error2\n");
exit(1);
}
return (d_ssi);
}