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

--- Comment #7 from Igor Zamyatin <izamyatin at gmail dot com> 2011-09-14 
14:30:35 UTC ---
In RTL everythin is vice-versa, additional instruction appears:

For the "bad" case couple instructions are responsible for cb load (asmcons
dump):

(insn 52 51 53 5 (set (reg:QI 83 [ D.2685 ])
          (mem:QI (plus:SI (reg/v/f:SI 75 [ inptr1 ])
                  (reg/v:SI 117 [ col ])) [0 MEM[base: inptr1_19, index:
col_90, offset: 0B]+0 S1 A8])) ../test_bad_4_6.c:42 66 {*movqi_internal}
       (nil))

and later 

 (insn 62 61 122 5 (parallel [
              (set (reg:SI 152 [ D.2685 ])
                  (zero_extend:SI (reg:QI 83 [ D.2685 ])))
              (clobber (reg:CC 17 flags))
          ]) ../test_bad_4_6.c:47 123 {*zero_extendqisi2_movzbl_and}
       (expr_list:REG_DEAD (reg:QI 83 [ D.2685 ])
          (expr_list:REG_UNUSED (reg:CC 17 flags)
              (nil))))


while in "good" case only one:

(insn 52 51 53 5 (parallel [
            (set (reg/v:SI 84 [ cb ])
                (zero_extend:SI (mem:QI (plus:SI (reg/v/f:SI 75 [ inptr1 ])
                            (reg/v:SI 119 [ col ])) [0 MEM[base: inptr1_19,
index: col_90, offset: 0B]+0 S1 A8])))
            (clobber (reg:CC 17 flags))
        ]) ../test_good_4_6.c:42 123 {*zero_extendqisi2_movzbl_and}
     (expr_list:REG_UNUSED (reg:CC 17 flags)
        (nil)))

 And life ranges in "bad" case became splitted:

 a34(r152): [71..82]
  ....
  a38(r83): [83..92]

 And in "good" case only:

  a34(r84): [71..90]

Reply via email to