As Rainer reported at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67421 Also, as described at https://gcc.gnu.org/ml/gcc-patches/2015-08/msg01147.html This patch relax the restriction on wide left shift. Previously we always honor target private pattern, so when the following check be true, we cancel the transformation. have_insn_for (ASHIFT, mode) While it's better to do a cost on generated instruction sequences to decided whether it's beneficial to honor backend pattern. Normally the generic transformation will be better. I haven't used GEN_FCN to invoke gen_* directly, instead I reused "expand_variable_shift" to let it handle all the left work. wide-shift-64 pass on sparc under the option "-mv8plus -mcpu=v9" now, and arm32 also generate better code for wide-shift-64. OK for trunk? 2015-09-03 Jiong. Wang gcc/ PR rtl-optimization/67421 * expr.c (expand_expr_real_2): Cost instrcution sequences when doing left wide shift tranformation. -- Regards, Jiong