// Problem: gcc optimizer produces duplicate "shl" instructions // use gcc test1.cpp -o test1 -O3 -g // then use gcc test1, disas main struct zz1s{ int a; int b; int c; int d; }; long var1 = 0; zz1s zz1[50]; int main() { zz1[var1].a = 0; zz1[var1+1].a = 0; zz1[var1+2].a = 0; zz1[var1+3].a = 0; zz1[var1+4].a = 0; zz1[var1+5].a = 0; zz1[var1+6].a = 0; zz1[var1+7].a = 0; return 0; } /* (gdb) disas main Dump of assembler code for function main(): 0x00000000004003c0 <+0>: mov 0x2008d9(%rip),%rax # 0x600ca0 0x00000000004003c7 <+7>: mov %rax,%rdx 0x00000000004003ca <+10>: shl $0x4,%rdx 0x00000000004003ce <+14>: movl $0x0,0x600980(%rdx) 0x00000000004003d8 <+24>: mov %rax,%rdx 0x00000000004003db <+27>: shl $0x4,%rdx 0x00000000004003df <+31>: movl $0x0,0x600990(%rdx) 0x00000000004003e9 <+41>: mov %rax,%rdx 0x00000000004003ec <+44>: shl $0x4,%rdx 0x00000000004003f0 <+48>: movl $0x0,0x6009a0(%rdx) 0x00000000004003fa <+58>: mov %rax,%rdx 0x00000000004003fd <+61>: shl $0x4,%rdx 0x0000000000400401 <+65>: movl $0x0,0x6009b0(%rdx) 0x000000000040040b <+75>: mov %rax,%rdx 0x000000000040040e <+78>: shl $0x4,%rdx 0x0000000000400412 <+82>: movl $0x0,0x6009c0(%rdx) 0x000000000040041c <+92>: mov %rax,%rdx 0x000000000040041f <+95>: shl $0x4,%rdx 0x0000000000400423 <+99>: movl $0x0,0x6009d0(%rdx) 0x000000000040042d <+109>: mov %rax,%rdx 0x0000000000400430 <+112>: xor %eax,%eax 0x0000000000400432 <+114>: shl $0x4,%rdx 0x0000000000400436 <+118>: movl $0x0,0x6009e0(%rdx) 0x0000000000400440 <+128>: movl $0x0,0x6009f0(%rdx) 0x000000000040044a <+138>: retq */