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

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
It's rhfuhf.F:ROFOCK.  Disabling vectorization fixes it.  One notable
difference
before vectorization MIN/MAX recognition caused by missing swapped comparison
handling in

/* Transform (@0 < @1 and @0 < @2) to use min,
   (@0 > @1 and @0 > @2) to use max */
(for op (lt le gt ge)
     ext (min min max max)
 (simplify
  (bit_and (op:s @0 @1) (op:s @0 @2))
  (if (INTEGRAL_TYPE_P (TREE_TYPE (@0)))
   (op @0 (ext @1 @2)))))

we'd need to add

/* Transform (@1 < @0 and @2 < @0) to use min,
   (@1 > @0 and @2 > @0) to use max */
(for op (lt le gt ge)
     ext (max max min min)
 (simplify
  (bit_and (op:s @1 @0) (op:s @2 @0))
  (if (INTEGRAL_TYPE_P (TREE_TYPE (@0)))
   (op (ext @1 @2) @0))))

plus a case for the operand order with @1 @0 @0 @2 (and adding :c to the
bit_and).

Adding the above "fixes" gamess, making the issue latent again.

Reply via email to