public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug rtl-optimization/55360] New: [TileGX] Passing structure by value on stack needlessly writes to and reads from memory
@ 2012-11-16 20:54 colanderman at gmail dot com
2012-11-16 23:46 ` [Bug rtl-optimization/55360] " hjl.tools at gmail dot com
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: colanderman at gmail dot com @ 2012-11-16 20:54 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55360
Bug #: 55360
Summary: [TileGX] Passing structure by value on stack
needlessly writes to and reads from memory
Classification: Unclassified
Product: gcc
Version: 4.7.2
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: rtl-optimization
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: colanderman@gmail.com
#include <stdint.h>
struct bar { uint8_t a, b, c, d; };
struct bla { unsigned long a:8, b:8, c:8, d:8; };
uint64_t bar(struct bar);
uint64_t bla(struct bla);
uint64_t foo(uint8_t a, uint8_t b, uint8_t c, uint8_t d)
{ return bar((struct bar) { a, b, c, d }); }
uint64_t baz(uint8_t a, uint8_t b, uint8_t c, uint8_t d)
{ return bla((struct bla) { a, b, c, d }); }
when compiled with "gcc -Wall -std=gnu99 -O3 -S pbv.c" produces:
.file "pbv.c"
.text
.align 8
.global foo
.type foo, @function
foo:
.LFB0:
.cfi_startproc
{
st sp, lr
.cfi_offset 55, 0
move r29, sp
addi r28, sp, -16
}
addi sp, sp, -24
.cfi_def_cfa_offset 24
{
st r28, r29
addi r11, sp, 21
addi r10, sp, 20
}
{
st1 r11, r1
addi r11, sp, 22
}
{
st1 r11, r2
addi r11, sp, 23
}
{
st1 r10, r0
movei r0, 0
}
st1 r11, r3
ld4u r10, r10
{
bfins r0, r10, 0, 0+32-1
jal bar
}
addi r29, sp, 24
ld lr, r29
{
addi sp, sp, 24
.cfi_restore 54
.cfi_restore 55
.cfi_def_cfa_offset 0
jrp lr
}
.cfi_endproc
.LFE0:
.size foo, .-foo
.align 8
.global baz
.type baz, @function
baz:
.LFB1:
.cfi_startproc
{
movei r10, 0
st sp, lr
.cfi_offset 55, 0
move r29, sp
}
{
bfins r10, r0, 0, 7
addi r28, sp, -8
}
{
bfins r10, r1, 8, 8+8-1
addi sp, sp, -16
}
.cfi_def_cfa_offset 16
{
bfins r10, r2, 16, 16+8-1
st r28, r29
}
bfins r10, r3, 24, 24+8-1
{
move r0, r10
jal bla
}
addi r29, sp, 16
ld lr, r29
{
addi sp, sp, 16
.cfi_restore 54
.cfi_restore 55
.cfi_def_cfa_offset 0
jrp lr
}
.cfi_endproc
.LFE1:
.size baz, .-baz
.ident "GCC: (GNU) 4.7.2"
.section .note.GNU-stack,"",@progbits
My expectation is that the foo and baz should compile identically, and should
use the bfins bit-arithmetic functions like baz does, rather than redundant
stores and loads to stack like foo does.
This is with a vanilla GCC 4.7.2 build on a Tilempower system (roughly CentOS
5.7).
The problem does not occur on Debian x86-64 with either GCC 4.4.6 or GCC 4.7.2.
Possibly related to http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7061 (however
that case seems to be fixed in 4.7.2).
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug rtl-optimization/55360] [TileGX] Passing structure by value on stack needlessly writes to and reads from memory
2012-11-16 20:54 [Bug rtl-optimization/55360] New: [TileGX] Passing structure by value on stack needlessly writes to and reads from memory colanderman at gmail dot com
@ 2012-11-16 23:46 ` hjl.tools at gmail dot com
2012-11-19 18:48 ` colanderman at gmail dot com
2022-11-09 15:59 ` pinskia at gcc dot gnu.org
2 siblings, 0 replies; 4+ messages in thread
From: hjl.tools at gmail dot com @ 2012-11-16 23:46 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55360
--- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> 2012-11-16 23:46:25 UTC ---
Is this related to PR 28831?
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug rtl-optimization/55360] [TileGX] Passing structure by value on stack needlessly writes to and reads from memory
2012-11-16 20:54 [Bug rtl-optimization/55360] New: [TileGX] Passing structure by value on stack needlessly writes to and reads from memory colanderman at gmail dot com
2012-11-16 23:46 ` [Bug rtl-optimization/55360] " hjl.tools at gmail dot com
@ 2012-11-19 18:48 ` colanderman at gmail dot com
2022-11-09 15:59 ` pinskia at gcc dot gnu.org
2 siblings, 0 replies; 4+ messages in thread
From: colanderman at gmail dot com @ 2012-11-19 18:48 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55360
--- Comment #2 from Chris King <colanderman at gmail dot com> 2012-11-19 18:47:39 UTC ---
Possibly, though I doubt it. PR 28831 has more to do with eliding copies of
the struct in its entirety; the problem I'm having centers around accessing
individual elements. If PR 28831 were the cause, I would expect both my test
cases (with and without bit-fields) to behave identically, however they do not.
It's possible that fixing PR 28831 may hide this bug in my particular use case
(by avoiding the stack allocation in the first place), but I believe the
difference in handling of normal fields vs. bit fields to be a distinct bug.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug rtl-optimization/55360] [TileGX] Passing structure by value on stack needlessly writes to and reads from memory
2012-11-16 20:54 [Bug rtl-optimization/55360] New: [TileGX] Passing structure by value on stack needlessly writes to and reads from memory colanderman at gmail dot com
2012-11-16 23:46 ` [Bug rtl-optimization/55360] " hjl.tools at gmail dot com
2012-11-19 18:48 ` colanderman at gmail dot com
@ 2022-11-09 15:59 ` pinskia at gcc dot gnu.org
2 siblings, 0 replies; 4+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-11-09 15:59 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55360
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Target Milestone|--- |13.0
Resolution|--- |WONTFIX
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The tile* targets were removed in r13-1267-gfc259b522c0f8b so closing as won't
fix.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-11-09 15:59 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-11-16 20:54 [Bug rtl-optimization/55360] New: [TileGX] Passing structure by value on stack needlessly writes to and reads from memory colanderman at gmail dot com
2012-11-16 23:46 ` [Bug rtl-optimization/55360] " hjl.tools at gmail dot com
2012-11-19 18:48 ` colanderman at gmail dot com
2022-11-09 15:59 ` pinskia 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).