https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66489
Segher Boessenkool <segher at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |segher at gcc dot gnu.org --- Comment #4 from Segher Boessenkool <segher at gcc dot gnu.org> --- Combine does not do this because it would need to combine 2 insns into 2. This *can* be safely done (carefully). As a result combine can do more work (which is good), but lifetime of registers can get longer too (but also shorter in some cases). I don't yet know if it is a win on average. diff --git a/gcc/combine.c b/gcc/combine.c index 9861291..599d383 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -3992,8 +3992,8 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0, && XVECLEN (newpat, 0) == 2 && GET_CODE (XVECEXP (newpat, 0, 0)) == SET && GET_CODE (XVECEXP (newpat, 0, 1)) == SET - && (i1 || set_noop_p (XVECEXP (newpat, 0, 0)) - || set_noop_p (XVECEXP (newpat, 0, 1))) +// && (i1 || set_noop_p (XVECEXP (newpat, 0, 0)) +// || set_noop_p (XVECEXP (newpat, 0, 1))) && GET_CODE (SET_DEST (XVECEXP (newpat, 0, 0))) != ZERO_EXTRACT && GET_CODE (SET_DEST (XVECEXP (newpat, 0, 0))) != STRICT_LOW_PART && GET_CODE (SET_DEST (XVECEXP (newpat, 0, 1))) != ZERO_EXTRACT