public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/113180] New: MIPS: bitops on an long long struct uses ins instead dins
@ 2023-12-30 14:08 syq at gcc dot gnu.org
2023-12-31 6:31 ` [Bug middle-end/113180] MIPS: bitops on an long long struct uses ins instead dins (or with -mstrict-align on aarch64) pinskia at gcc dot gnu.org
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: syq at gcc dot gnu.org @ 2023-12-30 14:08 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113180
Bug ID: 113180
Summary: MIPS: bitops on an long long struct uses ins instead
dins
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: syq at gcc dot gnu.org
Target Milestone: ---
```
struct yy {
int x:32;
int a:12;
int b:12;
int c:4;
int d:4;
};
struct yy xx (struct yy a, long long b) {
a.d = b;
return a;
}
```
One DINS is enough for this ops, while currently the result is:
```
dsra $2,$4,32
daddiu $sp,$sp,-32
ins $2,$5,28,4
sd $4,16($sp)
sw $2,20($sp)
ld $3,16($sp)
move $2,$0
sll $4,$3,0
dext $4,$4,0,32
dins $2,$4,0,32
dsrl $3,$3,32
dins $2,$3,32,32
jr $31
daddiu $sp,$sp,32
```
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug middle-end/113180] MIPS: bitops on an long long struct uses ins instead dins (or with -mstrict-align on aarch64)
2023-12-30 14:08 [Bug target/113180] New: MIPS: bitops on an long long struct uses ins instead dins syq at gcc dot gnu.org
@ 2023-12-31 6:31 ` pinskia at gcc dot gnu.org
2023-12-31 6:31 ` pinskia at gcc dot gnu.org
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-12-31 6:31 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113180
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Ever confirmed|0 |1
Component|target |middle-end
Target|mips |mips aarch64*-*-*
Status|UNCONFIRMED |NEW
Keywords| |missed-optimization
Last reconfirmed| |2023-12-31
Summary|MIPS: bitops on an long |MIPS: bitops on an long
|long struct uses ins |long struct uses ins
|instead dins |instead dins (or with
| |-mstrict-align on aarch64)
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The same issue happens on aarch64 with -mstrict-align though it is not as bad
as mips but the underlying issue is the same:
```
sub sp, sp, #32
.cfi_def_cfa_offset 32
str x0, [sp, 8]
lsr x0, x0, 32
bfi w0, w1, 28, 4
str w0, [sp, 12]
ldr x0, [sp, 8]
add sp, sp, 32
ret
```
Confirmed. there might be other bug reports which are very similar too.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug middle-end/113180] MIPS: bitops on an long long struct uses ins instead dins (or with -mstrict-align on aarch64)
2023-12-30 14:08 [Bug target/113180] New: MIPS: bitops on an long long struct uses ins instead dins syq at gcc dot gnu.org
2023-12-31 6:31 ` [Bug middle-end/113180] MIPS: bitops on an long long struct uses ins instead dins (or with -mstrict-align on aarch64) pinskia at gcc dot gnu.org
@ 2023-12-31 6:31 ` pinskia at gcc dot gnu.org
2023-12-31 6:37 ` pinskia at gcc dot gnu.org
2024-05-06 16:46 ` syq at gcc dot gnu.org
3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-12-31 6:31 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113180
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Severity|normal |enhancement
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug middle-end/113180] MIPS: bitops on an long long struct uses ins instead dins (or with -mstrict-align on aarch64)
2023-12-30 14:08 [Bug target/113180] New: MIPS: bitops on an long long struct uses ins instead dins syq at gcc dot gnu.org
2023-12-31 6:31 ` [Bug middle-end/113180] MIPS: bitops on an long long struct uses ins instead dins (or with -mstrict-align on aarch64) pinskia at gcc dot gnu.org
2023-12-31 6:31 ` pinskia at gcc dot gnu.org
@ 2023-12-31 6:37 ` pinskia at gcc dot gnu.org
2024-05-06 16:46 ` syq at gcc dot gnu.org
3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-12-31 6:37 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113180
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target|mips aarch64*-*-* |mips aarch64*-*-* arm*-*
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
arm is just as bad:
```
xx:
@ args = 8, pretend = 0, frame = 8
@ frame_needed = 0, uses_anonymous_args = 0
@ link register save eliminated.
sub sp, sp, #8
mov r3, r0
strd r1, r2, [sp]
ldr r1, [sp, #8]
ldrb r2, [sp, #7] @ zero_extendqisi2
bfi r2, r1, #4, #4
strb r2, [sp, #7]
ldrd r0, r1, [sp]
stm r3, {r0, r1}
mov r0, r3
add sp, sp, #8
@ sp needed
bx lr
```
Basically the variable a is stored to the stack and then modified and then
stored to the stack and then loaded and stored to the return location.
This is all due to STRICT alignment IIRC.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug middle-end/113180] MIPS: bitops on an long long struct uses ins instead dins (or with -mstrict-align on aarch64)
2023-12-30 14:08 [Bug target/113180] New: MIPS: bitops on an long long struct uses ins instead dins syq at gcc dot gnu.org
` (2 preceding siblings ...)
2023-12-31 6:37 ` pinskia at gcc dot gnu.org
@ 2024-05-06 16:46 ` syq at gcc dot gnu.org
3 siblings, 0 replies; 5+ messages in thread
From: syq at gcc dot gnu.org @ 2024-05-06 16:46 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113180
--- Comment #3 from YunQiang Su <syq at gcc dot gnu.org> ---
The argument `to` of `expand_assignment` differs between `strict-align` and
`no-strict-align`.
`debug_tree` states that the `strict-align` one has a `MEMREF` RTL, while
`no-strict-align` has a `reg` one.
Any idea when the RTL is generated from STMT?
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-05-06 16:46 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-30 14:08 [Bug target/113180] New: MIPS: bitops on an long long struct uses ins instead dins syq at gcc dot gnu.org
2023-12-31 6:31 ` [Bug middle-end/113180] MIPS: bitops on an long long struct uses ins instead dins (or with -mstrict-align on aarch64) pinskia at gcc dot gnu.org
2023-12-31 6:31 ` pinskia at gcc dot gnu.org
2023-12-31 6:37 ` pinskia at gcc dot gnu.org
2024-05-06 16:46 ` syq 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).