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.