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]