Combine is trying to find this instruction (when compiling _popcountsi2 from
libgcc2.c for my i8086 experiment):
(set (subreg:QI (reg:HI 30) 0)
(mem/s/u:QI (plus:HI (subreg:HI (zero_extract:SI (subreg:HI (reg/v:SI 22 [
x ]) 0)
(const_int 8 [0x8])
(const_int 8 [0x8])) 0)
(reg/f:HI 25)) [0 __popcount_tab S1 A8]))
The part
(subreg:HI (zero_extract:SI (subreg:HI (reg/v:SI 22 [ x ]) 0)
(const_int 8 [0x8])
(const_int 8 [0x8])) 0)
should, IMHO, be simplified to
(zero_extract:HI (subreg:HI (reg/v:SI 22 [ x ]) 0)
(const_int 8 [0x8])
(const_int 8 [0x8]))
or perhaps
(subreg:HI (zero_extract:SI (reg/v:SI 22 [ x ])
(const_int 8 [0x8])
(const_int 8 [0x8])) 0)
or maybe even
(zero_extract:HI (reg/v:SI 22 [ x ])
(const_int 8 [0x8])
(const_int 8 [0x8]))
which seems to be the simplest way of saying "zero extend byte 1 of
register 22 to 16 bits".
Also, is there a function for simplifying a zero_extract?
--
Rask Ingemann Lambertsen