https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119834
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org,
| |krebbel at gcc dot gnu.org,
| |stefansf at gcc dot gnu.org
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(define_insn "*clrmem_short"
[(set (match_operand:BLK 0 "memory_operand" "=Q,Q,Q,Q")
(const_int 0))
(use (match_operand 1 "nonmemory_operand" "n,a,a,a"))
(use (match_operand 2 "immediate_operand" "X,R,X,X"))
(clobber (match_scratch:P 3 "=X,X,X,&a"))
(clobber (reg:CC CC_REGNUM))]
"(GET_MODE (operands[1]) == Pmode || GET_MODE (operands[1]) == VOIDmode)"
"#"
[(set_attr "type" "cs")
(set_attr "cpu_facility" "*,*,z10,cpu_zarch")])
operands[1] is a CONST_INT, so that feels like the first alternative, but the
first
CLOBBER is a REG rather than SCRATCH, so maybe during RA it was first the 4th
alternative and then a CONST_INT propagated to that?
If so, I wonder if all the
(clobber (scratch))
cases in all the s390.md define_split patterns shouldn't be instead either
(clobber (match_scratch 3))
or
(clobber (match_operand 3 "scratch_operand"))
so that they don't fail to split if it isn't SCRATCH but some REG (and just
ignore it in that case).