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 загрузки должны быть избыточными и могут быть устранены. Да, я знаю, что код странный, но есть причина, по которой он структурирован таким образом. Я просто хотел бы, чтобы компилятор мог устраните избыточные нагрузки. Есть идеи, как убедить его сделать это?