https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121546
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Trying 2184 -> 2187:
2184: r2724:V64DF=unspec[r787:V64DF,r2722:V64SI,r2418:DI] 2
REG_DEAD r2722:V64SI
REG_EQUAL unspec[r787:V64DF,r2722:V64SI,0xffffffffffffffff] 2
2187: {r2727:SI=r2724:V64DF#0&0xff;clobber scratch;}
(insn 2184 2182 2186 5 (set (reg:V64DF 2724)
(unspec:V64DF [
(reg:V64DF 787 [ vect__8.17 ])
(reg:V64SI 2722)
(reg:DI 2418)
] UNSPEC_BPERMUTE)) "t.f90":4:46 discrim 73731 1237
{ds_bpermutev64df}
(expr_list:REG_DEAD (reg:V64SI 2722)
(expr_list:REG_EQUAL (unspec:V64DF [
(reg:V64DF 787 [ vect__8.17 ])
(reg:V64SI 2722)
(const_int -1 [0xffffffffffffffff])
] UNSPEC_BPERMUTE)
(nil))))
(insn 2187 2186 2194 5 (parallel [
(set (reg:SI 2727)
(and:SI (subreg:SI (reg:V64DF 2724) 0)
(const_int 255 [0xff])))
(clobber (scratch:BI))
]) "t.f90":4:46 discrim 73731 64 {andsi3}
(nil))
> (subreg:SI (reg:V64DF 2724) 0)
Is that even valid beforehand?