http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58459
Bug ID: 58459 Summary: [4.9 regression] Loop invariant is not hoisted out of loop after r202525. Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: ysrumyan at gmail dot com We noticed significant performance regression on important bench from eembc2.0 suite which can be exhibit with attached test-case. Assembly produced compiler prior to r202525 for innermost loop: .L18: movl %esi, %ebp movl 8(%eax), %edx sall %cl, %ebp movl 12(%eax), %eax testl %ebp, %ebx <-- p->key is hoisted out of loop cmove %edx, %eax movl %ecx, %edx but assembly produced compiler after r202525 contains redundant load: .L17: movl %esi, %ebp movl 8(%eax), %edx sall %cl, %ebp movl 12(%eax), %eax testl %ebp, (%ebx) <-- p->key is not hoisted out of loop cmove %edx, %eax movl %ecx, %edx The test-case must be compiled with -Ofast -m32 -march=atom -mtune=atom options.