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

            Bug ID: 116032
           Summary: [12/13/14/15 Regression] gcc.target/arm/pr40457-2.c
                    produces larger code for armv7ve+neon
           Product: gcc
           Version: 13.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: azoff at gcc dot gnu.org
  Target Milestone: ---

In test case gcc.target/arm/pr40457-2.c, scan-assembler "strd|stm" fails on
-march=armv7ve+neon as it emits vst1 instruction with a literal pool.

Below assembly was generated using: arm-none-eabi-gcc
gcc/testsuite/gcc.target/arm/pr40457-2.c -mthumb -march=armv7ve+neon
-mfloat-abi=hard -O2 -S -o -

With r12-4239-g50e20ee6e40:
        .arch armv7-a
        .arch_extension virt
        .arch_extension idiv
        .arch_extension sec
        .arch_extension mp
        .fpu neon
        .eabi_attribute 28, 1
        .eabi_attribute 20, 1
        .eabi_attribute 21, 1
        .eabi_attribute 23, 3
        .eabi_attribute 24, 1
        .eabi_attribute 25, 1
        .eabi_attribute 26, 1
        .eabi_attribute 30, 2
        .eabi_attribute 34, 1
        .eabi_attribute 18, 4
        .file   "pr40457-2.c"
        .text
        .align  1
        .align  2
        .global foo
        .syntax unified
        .thumb
        .thumb_func
        .type   foo, %function
foo:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        movs    r2, #1
        movs    r3, #0
        strd    r2, r3, [r0]
        bx      lr
        .size   foo, .-foo

        .ident  "GCC: (r12-4239-g50e20ee6e40) 12.0.0 20211008 (experimental)"



With r12-4240-g2b8453c401b:
        .arch armv7-a
        .arch_extension virt
        .arch_extension idiv
        .arch_extension sec
        .arch_extension mp
        .fpu neon
        .eabi_attribute 20, 1
        .eabi_attribute 21, 1
        .eabi_attribute 23, 3
        .eabi_attribute 24, 1
        .eabi_attribute 25, 1
        .eabi_attribute 26, 1
        .eabi_attribute 30, 2
        .eabi_attribute 34, 1
        .eabi_attribute 18, 4
        .file   "pr40457-2.c"
        .text
        .align  1
        .align  2
        .global foo
        .syntax unified
        .thumb
        .thumb_func
        .type   foo, %function
foo:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vldr    d16, .L3
        vst1.32 {d16}, [r0]
        bx      lr
.L4:
        .align  3
.L3:
        .word   1
        .word   0
        .size   foo, .-foo

        .ident  "GCC: (r12-4240-g2b8453c401b) 12.0.0 20211008 (experimental)"


I sent a patch that added the "vst1" instruction to the allowed list in the
test case in https://gcc.gnu.org/pipermail/gcc-patches/2024-July/657772.html,
but it was instead suggested to log a ticket for reviewing the SLP cost model
for arm.

Reply via email to