On Fri, Nov 16, 2012 at 5:37 AM, Bin Cheng <bin.ch...@arm.com> wrote:
> Hi,
> This patch defines LOGICAL_OP_NON_SHORT_CIRCUIT for ARM target and prefers
> short circuit for armv6-m and Thumb2+Os.
>
> I tested the patch on arm-none-eabi on armv6-m/Thumb2 for both Os/O2. The
> patch introduces new fails on ARMv6-m:
>
> gcc/testsuite/gcc.dg/pr19105.c
> gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-4.c
> gcc/testsuite/gcc.dg/tree-ssa/vrp47.c
>         These tests depends on non-short-circuit IR, which is not generated
> because we prefer short circuit on ARMv6-m now. I modified the tests to skip
> them on ARMv6-m.
>
> gcc/testsuite/gcc.dg/uninit-pred-8_b.c
>         Root cause: tree-ssa-uninit.c computes control dependent chain for
> uses/def of variable and checks whether each use is guarded by def. It has a
> upper bound on the number of control dependent chains(MAX_NUM_CHAINS==8) and
> just retreat to false warning if the number of chains exceeds
> MAX_NUM_CHAINS. In our scenario, the number of chains exceeds MAX_NUM_CHAINS
> because we prefer short circuit now, resulting in false warning information.
> These false warning cannot be fully removed if the MAX_NUM_CHAINS exists,
> but we can improve it in following way: There are lots of invalid control
> dependent chains computed in tree-ssa-uninit.c now and should be pruned. I
> have already implemented a quick fix and it works for our scenario. I can
> take this problem once I get some time.

Please keep track of this in a separate bugzilla entry.

>
>
> This is an backend patch and not a bug fix, I am not sure whether it can go
> in trunk or I have to wait for GCC4.9?


OK for trunk.

Ramana

>
> Thanks
>
> 2012-11-16  Bin Cheng  <bin.ch...@arm.com>
>
>         * config/arm/arm-cores.def (cortex-m1, cortex-m0)
>         (cortex-m0plus): Use v6m.
>         * config/arm/arm-protos.h (tune_params): Add
>         logical_op_non_short_circuit.
>         * config/arm/arm.c (arm_slowmul_tune, arm_fastmul_tune)
>         (arm_strongarm_tune, arm_xscale_tune, arm_9e_tune, arm_v6t2_tune)
>         (arm_cortex_tune, arm_cortex_a15_tune, arm_cortex_a5_tune)
>         (arm_cortex_a9_tune, arm_fa726te_tune): Set
>         logical_op_non_short_circuit field.
>         (arm_v6m_tune): New tune_params struct.
>         * config/arm/arm.h (LOGICAL_OP_NON_SHORT_CIRCUIT): Define.
>
> gcc/testsuite/ChangeLog
> 2012-11-16  Bin Cheng  <bin.ch...@arm.com>
>
>         * gcc.dg/pr19105.c: Skip on armv6-m.
>         * gcc.dg/tree-ssa/ssa-dom-thread-4.c: Ditto.
>         * gcc.dg/tree-ssa/vrp47.c: Ditto.

Reply via email to