This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]