https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92510
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2019-11-26 CC| |jakub at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Started with r275959. Slightly cleaned up testcase: /* { dg-options "-O1 -ftree-loop-vectorize -fno-forward-propagate -fno-tree-scev-cprop" } */ int v; long int foo (long int x) { signed char i; for (i = 0; i < 8; ++i) x |= !!v; return x + i; } The ICE happens during combine of (insn 14 13 15 2 (set (subreg:DI (reg:V1DI 96 [ vect_x_12.7 ]) 0) (ne:DI (reg:CCZ 17 flags) (const_int 0 [0]))) "pr92510.c":9:7 701 {*setcc_di_1} (expr_list:REG_DEAD (reg:CCZ 17 flags) (nil))) into (insn 15 14 16 2 (parallel [ (set (reg:DI 99) (ior:DI (reg:DI 100) (subreg:DI (reg:V1DI 96 [ vect_x_12.7 ]) 0))) (clobber (reg:CC 17 flags)) ]) "pr92510.c":11:12 454 {*iordi_1} (expr_list:REG_DEAD (reg:DI 100) (expr_list:REG_UNUSED (reg:CC 17 flags) (expr_list:REG_DEAD (reg:V1DI 96 [ vect_x_12.7 ]) (nil))))) subst creates there: (ior:DI (subreg:DI (ne:V1DI (reg:CCZ 17 flags) (const_int 0 [0])) 0) (reg:DI 100)) if_then_else_cond then uses (const_int 1) as true and native_encode_rtx is unhappy about trying to interpret a VOIDmode CONST_INT as something with non-scalar mode (V1DImode).