[Bug tree-optimization/105175] [12 Regression] Pointless warning about missed vector optimization

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Apr 6 08:17:21 GMT 2022


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105175

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|rtl-optimization            |tree-optimization
   Last reconfirmed|                            |2022-04-06
   Target Milestone|---                         |12.0
             Target|                            |x86_64-*-*
             Status|UNCONFIRMED                 |ASSIGNED
           Keywords|                            |diagnostic,
                   |                            |missed-optimization
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
I think the issue is that the vectorizer generates

   <bb 2> [local count: 1073741824]:
+  vect__1.5_8 = MEM <vector(2) unsigned int> [(unsigned int
*)&qemuMigrationCookieGetPersistent_mig];
+  vect__2.6_9 = vect__1.5_8 & { 1, 1 };
   _1 = qemuMigrationCookieGetPersistent_mig.flags;
   _2 = _1 & 1;
-  qemuMigrationCookieGetPersistent_mig.flags = _2;
   _3 = qemuMigrationCookieGetPersistent_mig.flagsMandatory;
   _4 = _3 & 1;
-  qemuMigrationCookieGetPersistent_mig.flagsMandatory = _4;
+  MEM <vector(2) unsigned int> [(unsigned int
*)&qemuMigrationCookieGetPersistent_mig] = vect__2.6_9;

but appearantly it does not check availability of the bitwise AND V2SImode
operation.  vector lowering recognizes this missing operation and lowers
it to

+  long unsigned int _6;
+  long unsigned int _7;
+  vector(2) unsigned int _11;

   <bb 2> [local count: 1073741824]:
   vect__1.5_8 = MEM <vector(2) unsigned int> [(unsigned int
*)&qemuMigrationCookieGetPersistent_mig];
-  vect__2.6_9 = vect__1.5_8 & { 1, 1 };
+  _7 = VIEW_CONVERT_EXPR<long unsigned int>(vect__1.5_8);
+  _6 = _7 & 4294967297;
+  _11 = VIEW_CONVERT_EXPR<vector(2) unsigned int>(_6);
+  vect__2.6_9 = _11;

_maybe_ V2SImode is also a real thing now even with -mno-sse, but the
AND is cut out (or not implemented).

That is, this is probably a vectorizer missed target check.


More information about the Gcc-bugs mailing list