https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115881
Richard Sandiford <rsandifo at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Assignee|rsandifo at gcc dot gnu.org |unassigned at gcc dot gnu.org Status|ASSIGNED |NEW --- Comment #4 from Richard Sandiford <rsandifo at gcc dot gnu.org> --- As expected, the results weren't pretty. Things like: (define_split [(set (match_operand:SWI48 0 "register_operand") (and:SWI48 (match_dup 0) (const_int -65536))) (clobber (reg:CC FLAGS_REG))] "(TARGET_FAST_PREFIX && !TARGET_PARTIAL_REG_STALL) || optimize_function_for_size_p (cfun)" [(set (strict_low_part (match_dup 1)) (const_int 0))] "operands[1] = gen_lowpart (HImode, operands[0]);") expect to be able to generate (strict_low_part (subreg:HI (reg:DI SP) 0)) after reload, so we can't ban it outright. The fallback was going to be to make register_operand reject subregs after reload, but patterns like: (define_insn_and_split "*neg<mode>_1_slp" [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+<r>,&<r>")\ ) (neg:SWI12 (match_operand:SWI12 1 "register_operand" "0,!<r>"))) (clobber (reg:CC FLAGS_REG))] use register_operand for cases like the above. Not really sure what to do here.