c99 __restrict и оптимизация компилятора

typedef struct {
    void * field1;
} s1;

void func1(void) {
    s1 my_s1;
    s1 * __restrict my_s1_ptr = &my_s1;
    *((int*)((char*)my_s1_ptr->field1 + 4))  = 0;
    *((int*)((char*)my_s1_ptr->field1 + 8))  = 1;
    *((int*)((char*)my_s1_ptr->field1 + 12)) = 2;
    *((int*)((char*)my_s1_ptr->field1 + 16)) = 3;
}

Похоже, что для версии 11.1 компилятора Intel и версии 4.6 gcc компилятор перезагружает my_s1_ptr->field1 для каждого из последних 4 операторов. Насколько я понимаю of __restrict подсказывает мне, что последние 3 загрузки должны быть избыточными и могут быть устранены. Да, я знаю, что код странный, но есть причина, по которой он структурирован таким образом. Я просто хотел бы, чтобы компилятор мог устраните избыточные нагрузки. Есть идеи, как убедить его сделать это?

6
задан Mat 2 August 2012 в 18:06
поделиться