https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90491
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |missed-optimization Target| |x86_64-*-*, i?86-*-* Status|UNCONFIRMED |NEW Last reconfirmed| |2019-05-16 CC| |rguenth at gcc dot gnu.org, | |uros at gcc dot gnu.org Blocks| |53947 Summary|simple operation with |simple operation with |unsigned integer and |unsigned long integer and |conversion to float/double |conversion to float not |not vectorized |vectorized Ever confirmed|0 |1 --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- The issue is the target claims it has no support for vectorized unsigned long int to float conversion. Your int() cast makes it a signed int to float conversion which is just cvtpd2ps. What the vectorizer doesn't do but eventually could, with knowledge of the value-range of i, is first truncate the unsigned long vector to a unsigned int vector and then do the conversion to float. Or alternatively use a vector long to vector double and then vector double to vector float conversion series. Or the target could hide these tricks from us. Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53947 [Bug 53947] [meta-bug] vectorizer missed-optimizations