------- Comment #4 from raksit at google dot com  2007-12-05 19:27 -------
For the rtl emitted on x86 processors, the combiner is almost able to optimize
the shift away. It combines and simplifies the 3 instructions down to:

Failed to match this instruction:
(set (reg:SI 64)
   (mem/s:SI (plus:SI (and:SI (reg/v:SI 59 [ x ])
               (const_int 12 [0xc]))
           (symbol_ref:SI ("array") <var_decl 0xf7ef20b0 array>)) [3
array S4 A32]))

It gives up at this point. The solution is to introduce a split to do the AND,
followed by the load. This can be done in machine-independent way by modifying
find_split_point in combine.c. Patch coming up shortly.

-raksit


-- 


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

Reply via email to