The Arm port has never had the compare elimination pass enabled by
adding a definition of TARGET_FLAGS_REGNUM. But just adding this is
insufficient because the target uses COND_EXEC and compare-elim is not
yet set up to handle this.
This seems to be quite simple, since we just need to recognize
COND_EXEC in insns when scanning for uses of the condition code
register.
This is a partial mitigation for the code quality regression
reported in PR target/123604.
gcc/ChangeLog:
PR target/123604
* compare-elim.cc (find_flags_uses_in_insn): Handle COND_EXEC.
* config/arm/arm.cc (TARGET_FLAGS_REGNUM): Define.
x = SET_SRC (x);
if (GET_CODE (x) == IF_THEN_ELSE)
x = XEXP (x, 0);
+ if (GET_CODE (x) == COND_EXEC)
+ x = COND_EXEC_TEST (x);
if (COMPARISON_P (x)
&& loc == &XEXP (x, 0)
&& XEXP (x, 1) == const0_rtx)
#undef TARGET_VECTORIZE_GET_MASK_MODE
#define TARGET_VECTORIZE_GET_MASK_MODE arm_get_mask_mode
+
+#undef TARGET_FLAGS_REGNUM
+#define TARGET_FLAGS_REGNUM CC_REGNUM
\f
/* Obstack for minipool constant handling. */
static struct obstack minipool_obstack;