https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67295

            Bug ID: 67295
           Summary: [ARM][6 Regression] FAIL:
                    gcc.target/arm/builtin-bswap-1.c scan-assembler-times
                    revshne\\t 1
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ktkachov at gcc dot gnu.org
                CC: aoliva at gcc dot gnu.org
  Target Milestone: ---
            Target: arm*

After the big copyrename patch r226901 I'm seeing these two fails on arm:
FAIL: gcc.target/arm/builtin-bswap-1.c scan-assembler-times revshne\\t 1
FAIL: gcc.target/arm/builtin-bswap-1.c scan-assembler-times rev16ne\\t 1

The reduced part from these tests is:

extern short foos16 (short);

/* revshne */
short swaps16_cond (short x, int y)
{
  short z = x;
  if (y)
    z = __builtin_bswap16 (x);
  return foos16 (z);
}


Compile with -O2.
With the new revision we generate:
        cmp     r1, #0
        rev16ne r0, r0
        uxthne  r0, r0
.L2:
        sxth    r0, r0
        b       foos16

whereas before that we generated:
        cmp     r1, #0
        revshne r0, r0
.L2:
        b       foos16


Never mind the extra label, I think that's a practically harmless artifact of
if-conversion.
My arm-none-eabi cross compiler was configured with:
--with-arch=armv7-a --with-float=hard --with-fpu=neon-vfpv4

Note, the subsequent commit:
Author: aoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Wed Aug 19 17:00:32 2015 +0000

    [PR64164] fix regressions reported on m68k and armeb

    Defer stack slot address assignment for all parms that can't live in
    pseudos, and accept pseudos assignments in assign_param_setup_block.

    for  gcc/ChangeLog

        PR rtl-optimization/64164
        * cfgexpand.c (parm_maybe_byref_p): Renamed to...
        (parm_in_stack_slot_p): ... this.  Disregard mode, what
        matters is whether the parm will live in a pseudo or a stack
        slot.
        (expand_one_ssa_partition): Deal with params without a default
        def.  Disregard mode.
        * cfgexpand.h: Renamed function declaration.
        * tree-ssa-coalesce.c: Adjust.
        * function.c (split_complex_args): Allocate stack slot for
        unassigned parms before splitting.
        (parm_in_unassigned_mem_p): New.  Use it instead of
        parm_maybe_byref_p throughout this file.
        (assign_parm_setup_block): Use it.  Accept pseudos in the
        expand-assigned rtl.
        (assign_parm_setup_reg): Drop BLKmode requirement.
        (assign_parm_setup_stack): Allocate and fill in the address of
        unassigned MEM parms.

    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@227015
138bc75d-0d04-0410-961f-82ee72b054a4

didn't fix this.

Let me know if any more information is needed

Reply via email to