This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix bootstrap on SPARC/Solaris with RTL checking
> In the thread you cite, Jan says he has new checking code, but as I
> understand things, it requires this additional patch to activate:
> http://gcc.gnu.org/ml/gcc-patches/2007-06/msg02027.html
I cited the thread because of its second part, discussing REG_NOTEs containing
SUBREGs whereas the DF code only expects REGs.
> Is it possible, given the backtrace I posted here, it's fallout from the
> df merge, rather than Jan's checking code?
> http://gcc.gnu.org/ml/gcc-patches/2007-06/msg02135.html
It's a fallout of the new sharing paradigm: on the 4.2 branch, the insn:
(insn 293 292 294 25 (set (reg/v:DF 127 [ x ])
(mult:DF (subreg:DF (reg/v:DI 125 [ sh_u ]) 0)
(reg:DF 246))) 333 {muldf3} (nil)
(expr_list:REG_DEAD (reg/v:DI 125 [ sh_u ])
(expr_list:REG_DEAD (reg:DF 246)
(expr_list:REG_EQUAL (mult:DF (subreg:DF (reg/v:DI 125 [ sh_u ])
0)
(const_double:DF
9.33263618503218878990089544723817169617091446371708e-302 [0x0.8p-999]))
(nil)))))
is modified entirely by global alloc:
;; Register dispositions:
125 in 42
(insn 293 292 294 25 (set (reg/v:DF 32 %f0 [orig:127 x ] [127])
(mult:DF (reg:DF 42 %f10 [orig:125 sh_u ] [125])
(reg:DF 40 %f8 [246]))) 333 {muldf3} (nil)
(expr_list:REG_EQUAL (mult:DF (subreg:DF (reg/v:DI 42 %f10 [orig:125
sh_u ] [125]) 0)
(const_double:DF
9.33263618503218878990089544723817169617091446371708e-302 [0x0.8p-999]))
(nil)))
Now on mainline:
(insn 245 244 246 24 e_exp.c:1088 (set (reg/v:DF 128 [ x ])
(mult:DF (reg:DF 246)
(subreg:DF (reg/v:DI 126 [ sh_u ]) 0))) 333 {muldf3}
(expr_list:REG_DEAD (reg:DF 246)
(expr_list:REG_DEAD (reg/v:DI 126 [ sh_u ])
(expr_list:REG_EQUAL (mult:DF (subreg:DF (reg/v:DI 126 [ sh_u ])
0)
(const_double:DF
9.33263618503218878990089544723817169617091446371708e-302 [0x0.8p-999]))
(nil)))))
is only modified partially by global alloc:
;; Register dispositions:
126 in 42
(insn 245 244 246 23 e_exp.c:1088 (set (reg/v:DF 32 %f0 [orig:128 x ] [128])
(mult:DF (reg:DF 40 %f8 [246])
(reg:DF 42 %f10 [orig:126 sh_u ] [126]))) 333 {muldf3}
(expr_list:REG_EQUAL (mult:DF (subreg:DF (reg/v:DI 42 %f10 [orig:126 sh_u ]
[126]) 0)
(const_double:DF
9.33263618503218878990089544723817169617091446371708e-302 [0x0.8p-999]))
(nil)))
because the note is not shared with the body of the insn anymore.
--
Eric Botcazou