https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105175
Bug ID: 105175 Summary: [12 Regression] Pointless warning about missed vector optimization Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: krebbel at gcc dot gnu.org Target Milestone: --- For this code snippet extracted from Qemu source: enum { QEMU_MIGRATION_COOKIE_PERSISTENT = 1 }; struct { unsigned flags; unsigned flagsMandatory } qemuMigrationCookieGetPersistent_mig; qemuMigrationCookieGetPersistent() { qemuMigrationCookieGetPersistent_mig.flags &= QEMU_MIGRATION_COOKIE_PERSISTENT; qemuMigrationCookieGetPersistent_mig.flagsMandatory &= QEMU_MIGRATION_COOKIE_PERSISTENT; } cc1 -O3 -mno-sse t.c -Wvector-operation-performance gives me: t.c: In function ‘qemuMigrationCookieGetPersistent’: t.c:7:46: warning: vector operation will be expanded with a single scalar operation [-Wvector-operation-performance] 7 | qemuMigrationCookieGetPersistent_mig.flags &= The generated code actually looks quite decent. Both integer AND operations are merged into a 64 bit AND since https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=f31da42e047e8018ca6ad9809273bc7efb6ffcaf This appears to be a nice optimization to me. However, in tree-vect-generic.cc we then complain about this being implemented with just a scalar instruction. Apart from this being pretty confusing for the programmer who never requested anything to be vectorized I also don't see why it is a bad thing to implement a vector operation with a scalar operation as long as it is able to cover the entire vector with that. With GCC 12 we have auto-vectorization enabled already with -O2, so I expect this warning to surface much more frequently now. In particular on targets like s390 where older distros still have to build everything without hardware vector support this might be annoying. Also I'm not sure whether this warning ever points at an actual problem. To me it looks like we should just drop it altogether.