This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/54133] New: regrename introduces additional dependencies
- From: "amker.cheng at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 31 Jul 2012 06:59:15 +0000
- Subject: [Bug rtl-optimization/54133] New: regrename introduces additional dependencies
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54133
Bug #: 54133
Summary: regrename introduces additional dependencies
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: rtl-optimization
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: amker.cheng@gmail.com
With test program below:
typedef struct
{
double X, Y;
} Point;
typedef struct
{
Point p1;
Point c1;
Point c2;
Point p2;
} Curve;
double bar(double t, double p0, double p1, double p2, double p3);
void foo( Curve *curve, int count )
{
int n;
int step;
Point point;
Curve c0;
double t;
for ( n = 0; n < count; ++n )
{
c0 = curve[n];
for ( step = 0; step < (10); ++step )
{
t = ((double)(step)) / (double)(10);
point.X = bar( t, c0.p1.X, c0.c1.X, c0.c2.X, c0.p2.X );
point.Y = bar( t, c0.p1.Y, c0.c1.Y, c0.c2.Y, c0.p2.Y );
}
}
}
Compiled with command line:
arm-none-eabi-gcc -mthumb -mcpu=cortex-m0 -Os -frename-registers -S
The dump before and after regrenaming are like:
1. before regrename:
(insn 157 80 158 4 (set (reg:SI 4 r4 [180])
(reg:SI 0 r0)) ../office_pointio.E:29 187 {*thumb1_movsi_insn}
(expr_list:REG_DEAD (reg:SI 0 r0)
(nil)))
(insn 158 157 147 4 (set (reg:SI 5 r5 [+4 ])
(reg:SI 1 r1 [+4 ])) ../office_pointio.E:29 187 {*thumb1_movsi_insn}
(expr_list:REG_DEAD (reg:SI 1 r1 [+4 ])
(nil)))
(insn 147 158 83 4 (set (reg:DF 2 r2)
(mem/c:DF (plus:SI (reg/f:SI 13 sp)
(const_int 40 [0x28])) [6 %sfp+-56 S8 A64]))
../office_pointio.E:30 205 {*thumb_movdf_insn}
(nil))
(insn 83 147 148 4 (set (mem:DF (reg/f:SI 13 sp) [0 S8 A64])
(reg:DF 2 r2)) ../office_pointio.E:30 205 {*thumb_movdf_insn}
(expr_list:REG_DEAD (reg:DF 2 r2)
(nil)))
(insn 148 83 84 4 (set (reg:DF 2 r2)
(mem/c:DF (plus:SI (reg/f:SI 13 sp)
(const_int 56 [0x38])) [6 %sfp+-40 S8 A64]))
../office_pointio.E:30 205 {*thumb_movdf_insn}
(nil))
(insn 84 148 149 4 (set (mem:DF (plus:SI (reg/f:SI 13 sp)
(const_int 8 [0x8])) [0 S8 A64])
(reg:DF 2 r2)) ../office_pointio.E:30 205 {*thumb_movdf_insn}
(expr_list:REG_DEAD (reg:DF 2 r2)
(nil)))
(insn 149 84 85 4 (set (reg:DF 2 r2)
(mem/c:DF (plus:SI (reg/f:SI 13 sp)
(const_int 72 [0x48])) [6 %sfp+-24 S8 A64]))
../office_pointio.E:30 205 {*thumb_movdf_insn}
(nil))
(insn 85 149 159 4 (set (mem:DF (plus:SI (reg/f:SI 13 sp)
(const_int 16 [0x10])) [0 S8 A64])
(reg:DF 2 r2)) ../office_pointio.E:30 205 {*thumb_movdf_insn}
(expr_list:REG_DEAD (reg:DF 2 r2)
(nil)))
(insn 159 85 160 4 (set (reg:SI 0 r0)
(reg:SI 4 r4 [180])) ../office_pointio.E:30 187 {*thumb1_movsi_insn}
(nil))
(insn 160 159 87 4 (set (reg:SI 1 r1 [+4 ])
(reg:SI 5 r5 [+4 ])) ../office_pointio.E:30 187 {*thumb1_movsi_insn}
(nil))
2. after regrename:
(insn 157 80 158 4 (set (reg:SI 4 r4 [180])
(reg:SI 0 r0)) ../office_pointio.E:29 187 {*thumb1_movsi_insn}
(expr_list:REG_DEAD (reg:SI 0 r0)
(nil)))
(insn 158 157 147 4 (set (reg:SI 5 r5 [+4 ])
(reg:SI 1 r1 [+4 ])) ../office_pointio.E:29 187 {*thumb1_movsi_insn}
(expr_list:REG_DEAD (reg:SI 1 r1 [+4 ])
(nil)))
(insn 147 158 83 4 (set (reg:DF 0 r0)
(mem/c:DF (plus:SI (reg/f:SI 13 sp)
(const_int 40 [0x28])) [6 %sfp+-56 S8 A64]))
../office_pointio.E:30 205 {*thumb_movdf_insn}
(nil))
(insn 83 147 148 4 (set (mem:DF (reg/f:SI 13 sp) [0 S8 A64])
(reg:DF 0 r0)) ../office_pointio.E:30 205 {*thumb_movdf_insn}
(expr_list:REG_DEAD (reg:DF 2 r2)
(nil)))
(insn 148 83 84 4 (set (reg:DF 2 r2)
(mem/c:DF (plus:SI (reg/f:SI 13 sp)
(const_int 56 [0x38])) [6 %sfp+-40 S8 A64]))
../office_pointio.E:30 205 {*thumb_movdf_insn}
(nil))
(insn 84 148 149 4 (set (mem:DF (plus:SI (reg/f:SI 13 sp)
(const_int 8 [0x8])) [0 S8 A64])
(reg:DF 2 r2)) ../office_pointio.E:30 205 {*thumb_movdf_insn}
(expr_list:REG_DEAD (reg:DF 2 r2)
(nil)))
(insn 149 84 85 4 (set (reg:DF 1 r1)
(mem/c:DF (plus:SI (reg/f:SI 13 sp)
(const_int 72 [0x48])) [6 %sfp+-24 S8 A64]))
../office_pointio.E:30 205 {*thumb_movdf_insn}
(nil))
(insn 85 149 159 4 (set (mem:DF (plus:SI (reg/f:SI 13 sp)
(const_int 16 [0x10])) [0 S8 A64])
(reg:DF 1 r1)) ../office_pointio.E:30 205 {*thumb_movdf_insn}
(expr_list:REG_DEAD (reg:DF 2 r2)
(nil)))
(insn 159 85 160 4 (set (reg:SI 0 r0)
(reg:SI 4 r4 [180])) ../office_pointio.E:30 187 {*thumb1_movsi_insn}
(nil))
(insn 160 159 87 4 (set (reg:SI 1 r1 [+4 ])
(reg:SI 5 r5 [+4 ])) ../office_pointio.E:30 187 {*thumb1_movsi_insn}
(nil))
renaming of r2 in chain(147/83) and chain(149/85) modified r0/r1, prevents insn
159/160 from deleting by hardreg_cprop/dce.