https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78556
--- Comment #1 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- Sorry, should be: diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 6c28e6a..89751c5 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -6214,7 +6214,7 @@ vspltis_constant (rtx op, unsigned step, unsigned copies) bitsize /= 2; small_val = splat_val >> bitsize; mask >>= bitsize; - if (splat_val != ((small_val << bitsize) | (small_val & mask))) + if (splat_val != ((absu_hwi (small_val) << bitsize) | (small_val & mask))) return false; splat_val = small_val; }