This is the mail archive of the gcc-patches@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]

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


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