public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/113550] New: data512_t initializers dereference a clobbered register
@ 2024-01-22 23:12 ianthompson at microsoft dot com
  2024-01-22 23:26 ` [Bug target/113550] " pinskia at gcc dot gnu.org
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: ianthompson at microsoft dot com @ 2024-01-22 23:12 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 113550
           Summary: data512_t initializers dereference a clobbered
                    register
           Product: gcc
           Version: 12.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ianthompson at microsoft dot com
  Target Milestone: ---
            Target: aarch64

Created attachment 57189
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=57189&action=edit
Additional non-minimal failing cases

When initializing or copying a data512_t, the compiler is generating code which
clobbers the register containing the source pointer of the copy. Initially
observed on Arm GNU Toolchain 12.2.Rel1, but this also reproduces on trunk.

Minimal reproduction, hits a segfault when compiled with "aarch64-none-elf-gcc
-march=armv9-a+ls64":

#include <arm_acle.h>
void test_data512_init() {
    data512_t my_value = {};
}

This code generates this assembly snippet for initializing my_value:
        adrp    x0, .LC0
        add     x0, x0, :lo12:.LC0
        ldp     x0, x1, [x0]
        ldp     x2, x3, [x0, 16]
        ldp     x4, x5, [x0, 32]
        ldp     x6, x7, [x0, 48]

Notice that the first ldp clobbers x0, redirecting the remaining 3 loads to
whatever address happens to be in val[0] of the initializer.

Similar incorrect code is generated in many other situations that involve
copying a data512_t (passing a global variable to a function, dereferencing a
data512_t*, etc). See the attached source file for the other failing cases I'm
seeing.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-01-25 12:14 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-22 23:12 [Bug target/113550] New: data512_t initializers dereference a clobbered register ianthompson at microsoft dot com
2024-01-22 23:26 ` [Bug target/113550] " pinskia at gcc dot gnu.org
2024-01-24  4:31 ` pinskia at gcc dot gnu.org
2024-01-24  7:01 ` pinskia at gcc dot gnu.org
2024-01-25 12:03 ` cvs-commit at gcc dot gnu.org
2024-01-25 12:14 ` rsandifo at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).