--- Comment #13 from hjl at lucon dot org 2007-05-13 20:08 ---
Created an attachment (id=13550)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=13550&action=view)
An experimental patch
This patch works for the testcase. Testsuite results for ia32, Intel64 and ia64
are at
http://gcc
--- Comment #12 from hjl at lucon dot org 2007-05-13 06:36 ---
find_reg computes the cost of moving to target register too high. This kludge
adjusts the cost of moving to target register and seems to work for the
testcase:
--- gcc/reload1.c.sse 2007-04-27 05:46:12.0 -0700
+++
--- Comment #11 from hjl at lucon dot org 2007-05-12 22:27 ---
find_reloads gets
(insn:HI 6 3 10 2 x.i:2 (set (reg:SF 21 xmm0 [orig:58 ] [58])
(subreg:SF (reg/v:SI 5 di [orig:59 in ] [59]) 0)) 90 {*movsf_1}
(insn_list:REG_DEP_TRUE 2 (nil))
(expr_list:REG_DEAD (reg/v:SI 5 di
--- Comment #10 from hjl at lucon dot org 2007-05-12 19:03 ---
Gcc 4.3 gives the same output for
float convert1( unsigned in )
{
float f;
__builtin_memcpy( &f, &in, sizeof( in ) );
return f;
}
float convert2( unsigned in )
{
union
{
float f;
un
--- Comment #9 from steven at gcc dot gnu dot org 2007-05-12 18:47 ---
I also looked at "load" but it is fixed on the dataflow branch, which will be
merged into the trunk soon (and thereby fixing this bug).
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30961
--- Comment #8 from hjl at lucon dot org 2007-05-12 18:24 ---
The
unsigned short load( void* p )
{
unsigned short v;
__builtin_memcpy( &v, p, sizeof( v ) );
return v;
}
regression was introduced by
http://gcc.gnu.org/ml/gcc-cvs/2005-07/msg00192.html
--
hjl
--- Comment #7 from steven at gcc dot gnu dot org 2007-05-11 21:42 ---
This bug is beyond my regalloc/reload fu, so unassigning...
--
steven at gcc dot gnu dot org changed:
What|Removed |Added
---
--- Comment #6 from steven at gcc dot gnu dot org 2007-05-11 18:28 ---
Note that with SVN gcc 4.3 (20070506) lreg actually _does_ tie reg 58 and reg
21 in lreg:
;; Register 58 in 21.
;; Register 59 in 5.
But we then fail due to the confict, I think.
--
http://gcc.gnu.org/bugzilla/s
--- Comment #5 from steven at gcc dot gnu dot org 2007-05-11 18:26 ---
For gcc 3.4, same function convert, lreg:
;; Register 60 in 5.
;; Register 62 in 0.
(note:HI 2 0 27 NOTE_INSN_DELETED)
;; Start of basic block 0, registers live: 5 [di] 6 [bp] 7 [sp] 16 [argp] 20
[frame]
(note:HI 2
--- Comment #4 from steven at gcc dot gnu dot org 2007-05-11 18:22 ---
For "convert" the issue is caused by a decision that reload makes, but I don't
understand why. The .lreg dump is this:
;; Start of basic block 2, registers live: 5 [di] 6 [bp] 7 [sp] 16 [argp] 20
[frame]
;; Pred edg
--- Comment #3 from steven at gcc dot gnu dot org 2007-04-11 22:40 ---
investigating...
--
steven at gcc dot gnu dot org changed:
What|Removed |Added
AssignedTo|u
--- Comment #2 from pluto at agmk dot net 2007-04-11 20:00 ---
4.2.0-RC1 has the same bug.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30961
12 matches
Mail list logo