public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug middle-end/23135] New: find_reloads_toplev -> find_reloads_subreg_address uses wrong reload type
@ 2005-07-29 15:30 amylaar at gcc dot gnu dot org
2005-07-29 16:02 ` [Bug middle-end/23135] " amylaar at gcc dot gnu dot org
` (5 more replies)
0 siblings, 6 replies; 8+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-07-29 15:30 UTC (permalink / raw)
To: gcc-bugs
I've added a movti expander to sh.md, and found a regression for -m4 -ml
on simd-1.c with optimization options -O1, -O2, -O3 and -Os .
I've foun that a output reload address was being overwritten by
a secondary output reload.
The secondary output reload had RELOAD_FOR_OUTPUT_ADDRESS, and the
address reload had RELOAD_FOR_OUTADDR_ADDRESS, both for the same
operand. In the absence of a seond RELOAD_FOR_OUTPUT_ADDRESS
reload, these types are not supposed to conflict. The output
address reload should have used RELOAD_FOR_OUTPUT_ADDRESS.
--
Summary: find_reloads_toplev -> find_reloads_subreg_address uses
wrong reload type
Product: gcc
Version: 4.1.0
Status: UNCONFIRMED
Keywords: wrong-code
Severity: normal
Priority: P2
Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: amylaar at gcc dot gnu dot org
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23135
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug middle-end/23135] find_reloads_toplev -> find_reloads_subreg_address uses wrong reload type
2005-07-29 15:30 [Bug middle-end/23135] New: find_reloads_toplev -> find_reloads_subreg_address uses wrong reload type amylaar at gcc dot gnu dot org
@ 2005-07-29 16:02 ` amylaar at gcc dot gnu dot org
2005-07-29 16:22 ` amylaar at gcc dot gnu dot org
` (4 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-07-29 16:02 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From amylaar at gcc dot gnu dot org 2005-07-29 15:29 -------
Created an attachment (id=9385)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=9385&action=view)
context & patch
These are the patches that exposed the latent bug for sh-elf, together with the
reload bug fix.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23135
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug middle-end/23135] find_reloads_toplev -> find_reloads_subreg_address uses wrong reload type
2005-07-29 15:30 [Bug middle-end/23135] New: find_reloads_toplev -> find_reloads_subreg_address uses wrong reload type amylaar at gcc dot gnu dot org
2005-07-29 16:02 ` [Bug middle-end/23135] " amylaar at gcc dot gnu dot org
@ 2005-07-29 16:22 ` amylaar at gcc dot gnu dot org
2005-07-31 3:44 ` pinskia at gcc dot gnu dot org
` (3 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-07-29 16:22 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
URL| |http://gcc.gnu.org/ml/gcc-
| |patches/2005-
| |07/msg01968.html
Keywords| |patch
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23135
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug middle-end/23135] find_reloads_toplev -> find_reloads_subreg_address uses wrong reload type
2005-07-29 15:30 [Bug middle-end/23135] New: find_reloads_toplev -> find_reloads_subreg_address uses wrong reload type amylaar at gcc dot gnu dot org
2005-07-29 16:02 ` [Bug middle-end/23135] " amylaar at gcc dot gnu dot org
2005-07-29 16:22 ` amylaar at gcc dot gnu dot org
@ 2005-07-31 3:44 ` pinskia at gcc dot gnu dot org
2005-08-02 14:48 ` joern dot rennecke at st dot com
` (2 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-07-31 3:44 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-07-31 02:43 -------
Confirmed.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed| |1
Last reconfirmed|0000-00-00 00:00:00 |2005-07-31 02:43:04
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23135
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug middle-end/23135] find_reloads_toplev -> find_reloads_subreg_address uses wrong reload type
2005-07-29 15:30 [Bug middle-end/23135] New: find_reloads_toplev -> find_reloads_subreg_address uses wrong reload type amylaar at gcc dot gnu dot org
` (2 preceding siblings ...)
2005-07-31 3:44 ` pinskia at gcc dot gnu dot org
@ 2005-08-02 14:48 ` joern dot rennecke at st dot com
2005-08-05 16:06 ` cvs-commit at gcc dot gnu dot org
2005-08-05 16:50 ` pinskia at gcc dot gnu dot org
5 siblings, 0 replies; 8+ messages in thread
From: joern dot rennecke at st dot com @ 2005-08-02 14:48 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From joern dot rennecke at st dot com 2005-08-02 14:47 -------
Subject: Re: - RFA: fix PR middle-end/23135: synthetic testcase
I have attached a testcase that triggers the bug on mainline for sh-elf
-m4 -O2.
/* Based on execute/simd-1.c, modifed by joern.rennecke@st.com to
trigger a reload bug. Verified for gcc mainline from 20050722 13:00 UTC
for sh-elf -m4 -O2. */
#ifndef STACK_SIZE
#define STACK_SIZE (256*1024)
#endif
typedef struct { char c[STACK_SIZE/2]; } big_t;
typedef int __attribute__((vector_size (8))) vecint;
typedef int __attribute__((mode(SI))) siint;
vecint i = { 150, 100 };
vecint j = { 10, 13 };
vecint k;
union {
vecint v;
siint i[2];
} res;
void
verify (siint a1, siint a2, siint b1, siint b2, big_t big)
{
if (a1 != b1
|| a2 != b2)
abort ();
}
int
main ()
{
big_t big;
vecint k0, k1, k2, k3, k4, k5, k6, k7;
k0 = i + j;
res.v = k0;
verify (res.i[0], res.i[1], 160, 113, big);
k1 = i * j;
res.v = k1;
verify (res.i[0], res.i[1], 1500, 1300, big);
k2 = i / j;
/* This is the observed failure - reload 0 has the wrong type and thus the
conflict with reload 1 is missed:
(insn:HI 94 92 96 1 pr23135.c:46 (parallel [
(set (subreg:SI (reg:DI 253) 0)
(div:SI (reg:SI 4 r4)
(reg:SI 5 r5)))
(clobber (reg:SI 146 pr))
(clobber (reg:DF 64 fr0))
(clobber (reg:DF 66 fr2))
(use (reg:PSI 151 ))
(use (reg/f:SI 256))
]) 60 {divsi3_i4} (insn_list:REG_DEP_TRUE 90 (insn_list:REG_DEP_TRUE 89
(insn_list:REG_DEP_TRUE 42 (insn_list:REG_DEP_TRUE 83 (insn_list:REG_DEP_TRUE 92
(insn_list:REG_DEP_TRUE 91 (nil)))))))
(expr_list:REG_DEAD (reg:SI 4 r4)
(expr_list:REG_DEAD (reg:SI 5 r5)
(expr_list:REG_UNUSED (reg:DF 66 fr2)
(expr_list:REG_UNUSED (reg:DF 64 fr0)
(expr_list:REG_UNUSED (reg:SI 146 pr)
(insn_list:REG_RETVAL 91 (nil))))))))
Reloads for insn # 94
Reload 0: reload_in (SI) = (plus:SI (reg/f:SI 14 r14)
(const_int 64 [0x40]))
GENERAL_REGS, RELOAD_FOR_OUTADDR_ADDRESS (opnum = 0)
reload_in_reg: (plus:SI (reg/f:SI 14 r14)
(const_int 64 [0x40]))
reload_reg_rtx: (reg:SI 3 r3)
Reload 1: GENERAL_REGS, RELOAD_FOR_OUTPUT_ADDRESS (opnum = 0), can't combine, se
condary_reload_p
reload_reg_rtx: (reg:SI 3 r3)
Reload 2: reload_out (SI) = (mem:SI (plus:SI (plus:SI (reg/f:SI 14 r14)
(const_int 64 [0x40]))
(const_int 28 [0x1c])) [ 16 S8 A32])
FPUL_REGS, RELOAD_FOR_OUTPUT (opnum = 0)
reload_out_reg: (subreg:SI (reg:DI 253) 0)
reload_reg_rtx: (reg:SI 150 fpul)
secondary_out_reload = 1
Reload 3: reload_in (SI) = (symbol_ref:SI ("__sdivsi3_i4") [flags 0x1])
GENERAL_REGS, RELOAD_FOR_INPUT (opnum = 1), can't combine
reload_in_reg: (reg/f:SI 256)
reload_reg_rtx: (reg:SI 3 r3)
*/
res.v = k2;
verify (res.i[0], res.i[1], 15, 7, big);
k3 = i & j;
res.v = k3;
verify (res.i[0], res.i[1], 2, 4, big);
k4 = i | j;
res.v = k4;
verify (res.i[0], res.i[1], 158, 109, big);
k5 = i ^ j;
res.v = k5;
verify (res.i[0], res.i[1], 156, 105, big);
k6 = -i;
res.v = k6;
verify (res.i[0], res.i[1], -150, -100, big);
k7 = ~i;
res.v = k7;
verify (res.i[0], res.i[1], -151, -101, big);
k = k0 + k1 + k3 + k4 + k5 + k6 + k7;
res.v = k;
verify (res.i[0], res.i[1], 1675, 1430, big);
k = k0 * k1 * k3 * k4 * k5 * k6 * k7;
res.v = k;
verify (res.i[0], res.i[1], 1456467968, -1579586240, big);
k = k0 / k1 / k2 / k3 / k4 / k5 / k6 / k7;
res.v = k;
verify (res.i[0], res.i[1], 0, 0, big);
exit (0);
}
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23135
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug middle-end/23135] find_reloads_toplev -> find_reloads_subreg_address uses wrong reload type
2005-07-29 15:30 [Bug middle-end/23135] New: find_reloads_toplev -> find_reloads_subreg_address uses wrong reload type amylaar at gcc dot gnu dot org
` (3 preceding siblings ...)
2005-08-02 14:48 ` joern dot rennecke at st dot com
@ 2005-08-05 16:06 ` cvs-commit at gcc dot gnu dot org
2005-08-05 16:50 ` pinskia at gcc dot gnu dot org
5 siblings, 0 replies; 8+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2005-08-05 16:06 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From cvs-commit at gcc dot gnu dot org 2005-08-05 16:06 -------
Subject: Bug 23135
CVSROOT: /cvs/gcc
Module name: gcc
Changes by: amylaar@gcc.gnu.org 2005-08-05 16:06:35
Modified files:
gcc : ChangeLog reload.c
Log message:
PR middle-end/23135
* reload.c (find_reloads_subreg_address): Pass down TYPE
unchanged. Change all callers except find_reloads_toplev.
Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.9663&r2=2.9664
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/reload.c.diff?cvsroot=gcc&r1=1.274&r2=1.275
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23135
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug middle-end/23135] find_reloads_toplev -> find_reloads_subreg_address uses wrong reload type
2005-07-29 15:30 [Bug middle-end/23135] New: find_reloads_toplev -> find_reloads_subreg_address uses wrong reload type amylaar at gcc dot gnu dot org
` (4 preceding siblings ...)
2005-08-05 16:06 ` cvs-commit at gcc dot gnu dot org
@ 2005-08-05 16:50 ` pinskia at gcc dot gnu dot org
5 siblings, 0 replies; 8+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-08-05 16:50 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-08-05 16:50 -------
Fixed.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
Target Milestone|--- |4.1.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23135
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug middle-end/23135] find_reloads_toplev -> find_reloads_subreg_address uses wrong reload type
[not found] <bug-23135-5394@http.gcc.gnu.org/bugzilla/>
@ 2006-04-22 0:44 ` dalej at gcc dot gnu dot org
0 siblings, 0 replies; 8+ messages in thread
From: dalej at gcc dot gnu dot org @ 2006-04-22 0:44 UTC (permalink / raw)
To: gcc-bugs
------- Comment #6 from dalej at gcc dot gnu dot org 2006-04-22 00:44 -------
Subject: Bug 23135
Author: dalej
Date: Sat Apr 22 00:44:01 2006
New Revision: 113164
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=113164
Log:
2005-04-21 Dale Johannesen <dalej@apple.com>
Radar 4506160
Bring in Joern Rennecke's fix from mainline:
PR middle-end/23135
* reload.c (find_reloads_subreg_address): Pass down TYPE
unchanged. Change all callers except find_reloads_toplev.
Modified:
branches/apple-local-200502-branch/gcc/ChangeLog.apple-ppc
branches/apple-local-200502-branch/gcc/reload.c
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23135
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2006-04-22 0:44 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-07-29 15:30 [Bug middle-end/23135] New: find_reloads_toplev -> find_reloads_subreg_address uses wrong reload type amylaar at gcc dot gnu dot org
2005-07-29 16:02 ` [Bug middle-end/23135] " amylaar at gcc dot gnu dot org
2005-07-29 16:22 ` amylaar at gcc dot gnu dot org
2005-07-31 3:44 ` pinskia at gcc dot gnu dot org
2005-08-02 14:48 ` joern dot rennecke at st dot com
2005-08-05 16:06 ` cvs-commit at gcc dot gnu dot org
2005-08-05 16:50 ` pinskia at gcc dot gnu dot org
[not found] <bug-23135-5394@http.gcc.gnu.org/bugzilla/>
2006-04-22 0:44 ` dalej at gcc dot gnu dot 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).