On Wed, Nov 29, 2023 at 10:35 AM Uros Bizjak <ubiz...@gmail.com> wrote: > > The compiler, configured with --enable-checking=yes,rtl,extra ICEs with: > > internal compiler error: RTL check: expected elt 0 type 'e' or 'u', > have 'E' (rtx unspec) in try_combine, at combine.cc:3237 > > This is > > 3236 /* Just replace the CC reg with a new mode. */ > 3237 SUBST (XEXP (*cc_use_loc, 0), newpat_dest); > 3238 undobuf.other_insn = cc_use_insn; > > in combine.cc, where *cc_use_loc is > > (unspec:DI [ > (reg:CC 17 flags) > ] UNSPEC_PUSHFL) > > combine assumes CC must be used inside of a comparison and uses XEXP (..., 0) > without checking on the RTX type of the argument. > > Skip the modification of CC-using operation if *cc_use_loc is not > COMPARISON_P. > > PR middle-end/112560 > > gcc/ChangeLog: > > * combine.cc (try_combine): Skip the modification of CC-using > operation if *cc_use_loc is not COMPARISON_P. > > Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. > > OK for master?
Don't we need to stop the attempt to combine when we cannot handle a use? Simply not adjusting another use doesn't look correct, does it? Richard. > > Uros.