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

[Bug tree-optimization/21596] [4.0/4.1/4.2/4.3 Regression] extra temporaries when using global register variables



------- Comment #8 from amacleod at redhat dot com  2007-03-05 22:52 -------
Created an attachment (id=13150)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=13150&action=view)
proposed patch for 4.2

This is the same patch for the 4.2 compiler.  Unfortunately, its not quite good
enough because the rtl optimizers still manage to do the wrong thing.  

In mainline, life recognizes that the register is dead in the copy:
(insn 7 5 8 2 (parallel [
            (set (reg:SI 58 [ reg.27 ])                 
               (plus:SI (reg/v:SI 5 di [ reg ])
                    (const_int -4 [0xfffffffc])))
            (clobber (reg:CC 17 flags))
        ]) 148 {*addsi_1} (nil)
    (expr_list:REG_DEAD (reg/v:SI 5 di [ reg ])
        (expr_list:REG_UNUSED (reg:CC 17 flags)             (nil))))

(insn 8 7 9 2 (set (reg/v:SI 5 di [ reg ])
        (reg:SI 58 [ reg.27 ])) 34 {*movsi_1} (insn_list:REG_DEP_TRUE 7 (nil))
    (expr_list:REG_DEAD (reg:SI 58 [ reg.27 ])
        (nil)))

and combine turns it into:

(insn 8 7 9 2 (parallel [
            (set (reg/v:SI 5 di [ reg ])
                (plus:SI (reg/v:SI 5 di [ reg ])
                    (const_int -4 [0xfffffffc])))
            (clobber (reg:CC 17 flags))
        ]) 148 {*addsi_1} (nil)


on the 4.2 branch, we don't seem to get it right and combine, nor anyone else I
suppose, manages to get merge the 2 insns.   so we end up aith the same
assembly. 

Unless someone sees something in the RTL optimizers that can be tweaked that
can figure this out, there isn't much point in applying this to 4.2.

Im not planning to look into the RTL side myself, but I will see if there is
anything else TER can do to get rid of this situation in 4.2.




-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21596


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