This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
RE: [PATCH 1/n] Add conditional compare support
- From: Hans-Peter Nilsson <hp at bitrange dot com>
- To: Zhenqiang Chen <zhenqiang dot chen at arm dot com>
- Cc: Richard Earnshaw <Richard dot Earnshaw at arm dot com>, 'Richard Biener' <richard dot guenther at gmail dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Mon, 28 Oct 2013 22:37:56 -0400 (EDT)
- Subject: RE: [PATCH 1/n] Add conditional compare support
- Authentication-results: sourceware.org; auth=none
- References: <000001ce9e58$6dadf230$4909d690$ at arm dot com> <CAFiYyc25hLxrAnsOXbfqYo=Rsw_MDopxb66bygfac-CEsffOEw at mail dot gmail dot com> <521C9406 dot 6050901 at arm dot com> <CAFiYyc0zrBBUvRF0Vmv5PyvypfK75QYuc3D9AMTE+Fkh3nCq4Q at mail dot gmail dot com> <000001ceb453$ceaea3c0$6c0beb40$ at arm dot com> <523AC006 dot 5030706 at arm dot com> <000101ceb829$31ec9040$95c5b0c0$ at arm dot com> <000101cecf0b$148b33a0$3da19ae0$ at arm dot com>
On Tue, 22 Oct 2013, Zhenqiang Chen wrote:
> ChangeLog:
> 2013-10-22 Zhenqiang Chen <zhenqiang.chen@linaro.org>
>
> * config/arm/arm.c (arm_fixed_condition_code_regs, arm_ccmode_to_code,
> arm_select_dominance_ccmp_mode): New functions.
> (arm_select_dominance_cc_mode_1): New function extracted from
> arm_select_dominance_cc_mode.
> (arm_select_dominance_cc_mode): Call arm_select_dominance_cc_mode_1.
> * config/arm/arm.md (ccmp, cbranchcc4, ccmp_and, ccmp_ior,
> ccmp_ior_scc_scc, ccmp_ior_scc_scc_cmp, ccmp_and_scc_scc,
> ccmp_and_scc_scc_cmp): New.
> * config/arm/arm-protos.h (arm_select_dominance_ccmp_mode): New.
> * expr.c (ccmp_candidate_p, used_in_cond_stmt_p, expand_ccmp_expr_2,
> expand_ccmp_expr_3, expand_ccmp_expr_1, expand_ccmp_expr): New.
> (expand_expr_real_1): Handle ccmp.
> * optabs.c: Include gimple.h.
> (expand_ccmp_op): New.
> (get_rtx_code): Handle BIT_AND_EXPR and BIT_IOR_EXPR.
> * optabs.def (ccmp): New.
> * optabs.h (expand_ccmp_op): New.
> * doc/md.texi (ccmp): New index.
One thing I don't see other people mentioning, is that this
patch has just too much code inside #ifdef HAVE_ccmp ... #endif.
I couldn't actually find the part that *requires* that, i.e.
code that does something like gen_ccmp (...) but maybe it's there.
Where needed and where the conditioned code is more than a few
lines, such code is preferably transformed into "if (0)":d code
using constructs like that at builtins.c:5354:
#ifndef HAVE_atomic_clear
# define HAVE_atomic_clear 0
# define gen_atomic_clear(x,y) (gcc_unreachable (), NULL_RTX)
#endif
Right, this causes dead code, but for maintenance it's *much*
better than when only a fraction of the code being compiled for
other targets. (Also, the dead code may be eliminated by gcc.)
Unfortunately the number of examples (as above) are few compared
to the pages of #if HAVE_thisorthat'd code. :(
(And IMHO that whole construct should be the default
implementation and shouldn't have to be written manually in the
first place. But that's material for an invasive patch.)
brgds, H-P