This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
mainline boostrap comparison failure on i686-pc-linux-gnu with gcc 3.2.3 20030502 (Red Hat Linux 3.2.3-49)
- From: Joern RENNECKE <joern dot rennecke at st dot com>
- To: gcc at gcc dot gnu dot org
- Date: Wed, 11 May 2005 17:59:11 +0100
- Subject: mainline boostrap comparison failure on i686-pc-linux-gnu with gcc 3.2.3 20030502 (Red Hat Linux 3.2.3-49)
I'm getting these errors:
Bootstrap comparison failure!
./bt-load.o differs
./expmed.o differs
build/gengtype-lex.o differs
I've picked bt-load.o for a closer look because it was the smallest
of the affected files. I've found that the register allocation order
for branch_target_load_optimize differs.
Stage 1 cc1, run from the shell, has:
;; 113 regs to allocate: 99 195 194 147 119 120 101 140 192 225 121 660
106 10
7 110 64 124 659 82 100 144 145 109 224 244 69 65 236 105 180 68 104 204
658 115
89 243 128 661 67 169 63 232 85 112 135 134 108 178 219 233 662 182 103
111 113
190 152 117 102 172 155 206 98 657 93 235 91 274 95 156 83 139 167 188
153 131
171 209 90 141 159 161 114 87 250 132 208 71 88 168 298 66 287 191 210
226 118 2
52 (2) 248 138 189 154 158 231 196 299 62 187 193 253 251 310
and stage 2 has:
;; 113 regs to allocate: 99 195 194 147 119 120 101 140 192 225 121 660
106 10
7 110 64 124 659 82 100 144 145 109 224 244 69 65 236 105 180 68 104 204
658 115
89 243 128 661 67 169 63 232 85 112 135 134 108 178 219 233 662 182 103
111 113
190 152 117 102 172 155 206 98 657 93 235 90 274 95 156 83 139 167 188
153 131
91 171 209 141 159 161 114 87 250 132 208 71 88 168 298 66 287 191 210
226 118 2
52 (2) 248 138 189 154 158 231 196 299 62 187 193 253 251 310
Note the difference of the position of registers 90 and 91. wdiff puts
it like this:
[--;;-]{++;;+} 113 regs to allocate: 99 195 194 147 119 120 101 140 192
225 121 660 106 107
110 64 124 659 82 100 144 145 109 224 244 69 65 236 105 180 68 104 204
658 115
89 243 128 661 67 169 63 232 85 112 135 134 108 178 219 233 662 182 103
111 113
190 152 117 102 172 155 206 98 657 93 235 [-90-] {+91+} 274 95 156 83
139 167 188 153 131 [-91-] 171 209 {+90+} 141 159 161 114 87 250 132 208
71 88 168 298 66 287 191 210 226 118 252 (2) 248 138 189 154 158 231 196
299 62 187 193 253 251 310
When I run the stage1 cc1 under gdb control, with the same input
arguments, its
register allocation order changes to match the stage2 cc1. The debug
information in
the stage 2 cc1 is not very useful, but still it can be demonstrated
that it stays with
the same allocation order:
(gdb) break global.c:586
Breakpoint 3 at 0x84627aa: file ../../srcw/gcc/global.c, line 586.
(gdb) cond 3 input_location.line == 1464
(gdb) run
...
Breakpoint 3, global_alloc (file=0x8d75e20) at ../../srcw/gcc/global.c:586
586 if (file)
(gdb) p (( (int *) allocno_order))[219]
$1 = 21
(gdb) p (( (int *) allocno_order))[220]
$2 = 158
(gdb) p (( (int *) allocno_order))[221]
$3 = 25
(gdb) p (( (int *) allocno_order))[222]
$4 = 77
(gdb) p ((int*)allocno)[21*17]
$5 = 90
(gdb) p ((int*)allocno)[158*17]
$6 = 274
(gdb) p ((int*)allocno)[25*17]
$7 = 95
(gdb) p ((int*)allocno)[77*17]
$8 = 156
So, I suppose I have to move to a different gcc version for the
bootstrap compiler.