Почему оптимизация -O3 GCC не встроена в эту функцию? - PullRequest
2 голосов
/ 27 сентября 2010

В компиляторе 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);
}

1 Ответ

8 голосов
/ 27 сентября 2010

Скорее всего, он не был встроен, потому что он слишком длинный. Длинные функции, если они встроены, на самом деле могут заставить код работать медленнее - например, регистры ЦП раздуты большим количеством переменных. В данном конкретном случае gcc решил, что быстрее не включать функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...