public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/65956] New: [5/6 Regression] Another ARM overaligned arg passing issue
@ 2015-04-30 21:17 jakub at gcc dot gnu.org
  2015-04-30 21:17 ` [Bug target/65956] " jakub at gcc dot gnu.org
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: jakub at gcc dot gnu.org @ 2015-04-30 21:17 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 65956
           Summary: [5/6 Regression] Another ARM overaligned arg passing
                    issue
           Product: gcc
           Version: 5.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jakub at gcc dot gnu.org
  Target Milestone: ---

The following testcase is miscompiled at -O2 on armhfp, starting with r221348,
and in this case r221795 didn't fix it.  Just hope it is the same thing that
breaks armhfp profiledbootstrap.  The difference on the testcase is just:
        mov     r0, r5
-       ldr     r1, [sp, #24]
+       ldr     r2, [sp, #24]
        bl      fn1
which means that we pass the second argument to fn1 in a wrong register,
supposedly because the type is void * aligned to long long alignment.

struct A { char *a; int b; long long c; };
char v[3];

__attribute__((noinline, noclone)) void
fn1 (char *x, char *y)
{
  if (x != &v[1] || y != &v[2])
    __builtin_abort ();
  v[1]++;
}

__attribute__((noinline, noclone)) int
fn2 (char *x)
{
  asm volatile ("" : "+g" (x) : : "memory");
  return x == &v[0];
}

__attribute__((noinline, noclone)) void
fn3 (const char *x)
{
  if (x[0] != 0)
    __builtin_abort ();
}

static struct A
foo (const char *x, struct A y, struct A z)
{
  struct A r = { 0, 0, 0 };
  if (y.b && z.b)
    {
      if (fn2 (y.a) && fn2 (z.a))
        switch (x[0])
          {
          case '|':
            break;
          default:
            fn3 (x);
          }
      fn1 (y.a, z.a);
    }
  return r;
}

__attribute__((noinline, noclone)) int
bar (int x, struct A *y)
{
  switch (x)
    {
    case 219:
      foo ("+", y[-2], y[0]);
    case 220:
      foo ("-", y[-2], y[0]);
    }
}

int
main ()
{
  struct A a[3] = { { &v[1], 1, 1LL }, { &v[0], 0, 0LL }, { &v[2], 2, 2LL } };
  bar (220, a + 2);
  if (v[1] != 1)
    __builtin_abort ();
  return 0;
}


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

* [Bug target/65956] [5/6 Regression] Another ARM overaligned arg passing issue
  2015-04-30 21:17 [Bug target/65956] New: [5/6 Regression] Another ARM overaligned arg passing issue jakub at gcc dot gnu.org
@ 2015-04-30 21:17 ` jakub at gcc dot gnu.org
  2015-04-30 23:12 ` jakub at gcc dot gnu.org
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: jakub at gcc dot gnu.org @ 2015-04-30 21:17 UTC (permalink / raw)
  To: gcc-bugs

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |5.2


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

* [Bug target/65956] [5/6 Regression] Another ARM overaligned arg passing issue
  2015-04-30 21:17 [Bug target/65956] New: [5/6 Regression] Another ARM overaligned arg passing issue jakub at gcc dot gnu.org
  2015-04-30 21:17 ` [Bug target/65956] " jakub at gcc dot gnu.org
@ 2015-04-30 23:12 ` jakub at gcc dot gnu.org
  2015-05-11  8:16 ` jakub at gcc dot gnu.org
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: jakub at gcc dot gnu.org @ 2015-04-30 23:12 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Untested fix:

--- gcc/tree-sra.c.jj   2015-04-20 14:35:47.000000000 +0200
+++ gcc/tree-sra.c      2015-05-01 01:08:34.092636496 +0200
@@ -4427,7 +4427,11 @@ turn_representatives_into_adjustments (v
              gcc_assert (repr->base == parm);
              adj.base_index = index;
              adj.base = repr->base;
-             adj.type = repr->type;
+             /* Drop any special alignment on the type if it's not on the
+                main variant.  This avoids issues with weirdo ABIs like
+                AAPCS.  */
+             adj.type = build_qualified_type (TYPE_MAIN_VARIANT (repr->type),
+                                              TYPE_QUALS (repr->type));
              adj.alias_ptr_type = reference_alias_ptr_type (repr->expr);
              adj.offset = repr->offset;
              adj.by_ref = (POINTER_TYPE_P (TREE_TYPE (repr->base))

Though, wonder how many workaround we'll need for this AAPCS bogosity :(.


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

* [Bug target/65956] [5/6 Regression] Another ARM overaligned arg passing issue
  2015-04-30 21:17 [Bug target/65956] New: [5/6 Regression] Another ARM overaligned arg passing issue jakub at gcc dot gnu.org
  2015-04-30 21:17 ` [Bug target/65956] " jakub at gcc dot gnu.org
  2015-04-30 23:12 ` jakub at gcc dot gnu.org
@ 2015-05-11  8:16 ` jakub at gcc dot gnu.org
  2015-06-01 12:06 ` jakub at gcc dot gnu.org
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: jakub at gcc dot gnu.org @ 2015-05-11  8:16 UTC (permalink / raw)
  To: gcc-bugs

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2015-05-11
     Ever confirmed|0                           |1

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
A patch for the ARM backend instead has been posted in
https://gcc.gnu.org/ml/gcc-patches/2015-05/msg00278.html


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

* [Bug target/65956] [5/6 Regression] Another ARM overaligned arg passing issue
  2015-04-30 21:17 [Bug target/65956] New: [5/6 Regression] Another ARM overaligned arg passing issue jakub at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2015-05-11  8:16 ` jakub at gcc dot gnu.org
@ 2015-06-01 12:06 ` jakub at gcc dot gnu.org
  2015-07-06 16:58 ` alalaw01 at gcc dot gnu.org
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: jakub at gcc dot gnu.org @ 2015-06-01 12:06 UTC (permalink / raw)
  To: gcc-bugs

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P1


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

* [Bug target/65956] [5/6 Regression] Another ARM overaligned arg passing issue
  2015-04-30 21:17 [Bug target/65956] New: [5/6 Regression] Another ARM overaligned arg passing issue jakub at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  2015-06-01 12:06 ` jakub at gcc dot gnu.org
@ 2015-07-06 16:58 ` alalaw01 at gcc dot gnu.org
  2015-07-06 17:06 ` alalaw01 at gcc dot gnu.org
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: alalaw01 at gcc dot gnu.org @ 2015-07-06 16:58 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from alalaw01 at gcc dot gnu.org ---
Author: alalaw01
Date: Mon Jul  6 16:58:16 2015
New Revision: 225465

URL: https://gcc.gnu.org/viewcvs?rev=225465&root=gcc&view=rev
Log:
[ARM] PR/65956 AAPCS update for alignment attribute

gcc/:
        PR target/65956
        * config/arm/arm.c (arm_needs_doubleword_align): Drop any outer
        alignment attribute, exploring one level down for records and arrays.

gcc/testsuite/:

        * gcc.target/arm/aapcs/align1.c: New.
        * gcc.target/arm/aapcs/align_rec1.c: New.
        * gcc.target/arm/aapcs/align2.c: New.
        * gcc.target/arm/aapcs/align_rec2.c: New.
        * gcc.target/arm/aapcs/align3.c: New.
        * gcc.target/arm/aapcs/align_rec3.c: New.
        * gcc.target/arm/aapcs/align4.c: New.
        * gcc.target/arm/aapcs/align_rec4.c: New.
        * gcc.target/arm/aapcs/align_vararg1.c: New.
        * gcc.target/arm/aapcs/align_vararg2.c: New.


Added:
    trunk/gcc/testsuite/gcc.target/arm/aapcs/align1.c
    trunk/gcc/testsuite/gcc.target/arm/aapcs/align2.c
    trunk/gcc/testsuite/gcc.target/arm/aapcs/align3.c
    trunk/gcc/testsuite/gcc.target/arm/aapcs/align4.c
    trunk/gcc/testsuite/gcc.target/arm/aapcs/align_rec1.c
    trunk/gcc/testsuite/gcc.target/arm/aapcs/align_rec2.c
    trunk/gcc/testsuite/gcc.target/arm/aapcs/align_rec3.c
    trunk/gcc/testsuite/gcc.target/arm/aapcs/align_rec4.c
    trunk/gcc/testsuite/gcc.target/arm/aapcs/align_vaarg1.c
    trunk/gcc/testsuite/gcc.target/arm/aapcs/align_vaarg2.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/arm/arm.c
    trunk/gcc/testsuite/ChangeLog


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

* [Bug target/65956] [5/6 Regression] Another ARM overaligned arg passing issue
  2015-04-30 21:17 [Bug target/65956] New: [5/6 Regression] Another ARM overaligned arg passing issue jakub at gcc dot gnu.org
                   ` (4 preceding siblings ...)
  2015-07-06 16:58 ` alalaw01 at gcc dot gnu.org
@ 2015-07-06 17:06 ` alalaw01 at gcc dot gnu.org
  2015-07-06 17:32 ` alalaw01 at gcc dot gnu.org
  2015-07-06 17:38 ` alalaw01 at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: alalaw01 at gcc dot gnu.org @ 2015-07-06 17:06 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from alalaw01 at gcc dot gnu.org ---
Author: alalaw01
Date: Mon Jul  6 17:06:00 2015
New Revision: 225466

URL: https://gcc.gnu.org/viewcvs?rev=225466&root=gcc&view=rev
Log:
Fix eipa_src AAPCS issue (PR target/65956)

2015-05-05  Jakub Jelinek  <jakub@redhat.com>

        PR target/65956
        * gcc.c-torture/execute/pr65956.c: New test.


Added:
    trunk/gcc/testsuite/gcc.c-torture/execute/pr65956.c
Modified:
    trunk/gcc/testsuite/ChangeLog


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

* [Bug target/65956] [5/6 Regression] Another ARM overaligned arg passing issue
  2015-04-30 21:17 [Bug target/65956] New: [5/6 Regression] Another ARM overaligned arg passing issue jakub at gcc dot gnu.org
                   ` (5 preceding siblings ...)
  2015-07-06 17:06 ` alalaw01 at gcc dot gnu.org
@ 2015-07-06 17:32 ` alalaw01 at gcc dot gnu.org
  2015-07-06 17:38 ` alalaw01 at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: alalaw01 at gcc dot gnu.org @ 2015-07-06 17:32 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #5 from alalaw01 at gcc dot gnu.org ---
Author: alalaw01
Date: Mon Jul  6 17:32:07 2015
New Revision: 225469

URL: https://gcc.gnu.org/viewcvs?rev=225469&root=gcc&view=rev
Log:
2015-07-06  Alan Lawrence  <alan.lawrence@arm.com>

        Backport from mainline r225465
        2015-07-06  Alan Lawrence  <alan.lawrence@arm.com>

gcc/:

        PR target/65956
        * config/arm/arm.c (arm_needs_doubleword_align): Drop any outer
        alignment attribute, exploring one level down for records and arrays.

gcc/testsuite/:

        * gcc.target/arm/aapcs/align1.c: New.
        * gcc.target/arm/aapcs/align_rec1.c: New.
        * gcc.target/arm/aapcs/align2.c: New.
        * gcc.target/arm/aapcs/align_rec2.c: New.
        * gcc.target/arm/aapcs/align3.c: New.
        * gcc.target/arm/aapcs/align_rec3.c: New.
        * gcc.target/arm/aapcs/align4.c: New.
        * gcc.target/arm/aapcs/align_rec4.c: New.
        * gcc.target/arm/aapcs/align_vararg1.c: New.
        * gcc.target/arm/aapcs/align_vararg2.c: New.


Added:
    branches/gcc-5-branch/gcc/testsuite/gcc.target/arm/aapcs/align1.c
    branches/gcc-5-branch/gcc/testsuite/gcc.target/arm/aapcs/align2.c
    branches/gcc-5-branch/gcc/testsuite/gcc.target/arm/aapcs/align3.c
    branches/gcc-5-branch/gcc/testsuite/gcc.target/arm/aapcs/align4.c
    branches/gcc-5-branch/gcc/testsuite/gcc.target/arm/aapcs/align_rec1.c
    branches/gcc-5-branch/gcc/testsuite/gcc.target/arm/aapcs/align_rec2.c
    branches/gcc-5-branch/gcc/testsuite/gcc.target/arm/aapcs/align_rec3.c
    branches/gcc-5-branch/gcc/testsuite/gcc.target/arm/aapcs/align_rec4.c
    branches/gcc-5-branch/gcc/testsuite/gcc.target/arm/aapcs/align_vaarg1.c
    branches/gcc-5-branch/gcc/testsuite/gcc.target/arm/aapcs/align_vaarg2.c
Modified:
    branches/gcc-5-branch/gcc/ChangeLog
    branches/gcc-5-branch/gcc/config/arm/arm.c
    branches/gcc-5-branch/gcc/testsuite/ChangeLog


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

* [Bug target/65956] [5/6 Regression] Another ARM overaligned arg passing issue
  2015-04-30 21:17 [Bug target/65956] New: [5/6 Regression] Another ARM overaligned arg passing issue jakub at gcc dot gnu.org
                   ` (6 preceding siblings ...)
  2015-07-06 17:32 ` alalaw01 at gcc dot gnu.org
@ 2015-07-06 17:38 ` alalaw01 at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: alalaw01 at gcc dot gnu.org @ 2015-07-06 17:38 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #6 from alalaw01 at gcc dot gnu.org ---
Author: alalaw01
Date: Mon Jul  6 17:37:50 2015
New Revision: 225470

URL: https://gcc.gnu.org/viewcvs?rev=225470&root=gcc&view=rev
Log:
Backport r225466: tests from 'Fix eipa_src AAPCS issue (PR target/65956)'

2015-05-05  Jakub Jelinek  <jakub@redhat.com>

        PR target/65956
        * gcc.c-torture/execute/pr65956.c: New test.

Added:
    branches/gcc-5-branch/gcc/testsuite/gcc.c-torture/execute/pr65956.c
Modified:
    branches/gcc-5-branch/gcc/testsuite/ChangeLog


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

end of thread, other threads:[~2015-07-06 17:38 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-30 21:17 [Bug target/65956] New: [5/6 Regression] Another ARM overaligned arg passing issue jakub at gcc dot gnu.org
2015-04-30 21:17 ` [Bug target/65956] " jakub at gcc dot gnu.org
2015-04-30 23:12 ` jakub at gcc dot gnu.org
2015-05-11  8:16 ` jakub at gcc dot gnu.org
2015-06-01 12:06 ` jakub at gcc dot gnu.org
2015-07-06 16:58 ` alalaw01 at gcc dot gnu.org
2015-07-06 17:06 ` alalaw01 at gcc dot gnu.org
2015-07-06 17:32 ` alalaw01 at gcc dot gnu.org
2015-07-06 17:38 ` alalaw01 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).