http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53823
--- Comment #18 from Richard Henderson <rth at gcc dot gnu.org> 2012-08-01 02:25:03 UTC --- But this is what you get when cross-compiling from i686. 3267 rtx temp = expand_mult_const (mode, op0, -coeff, NULL_RTX, (gdb) p algorithm $1 = {cost = {cost = 24, latency = 24}, ops = 7, op = {alg_m, alg_add_t2_m, alg_add_t2_m, alg_sub_t2_m, alg_sub_factor, alg_sub_factor, alg_shift, 4155963284, alg_unknown, 24, 4155924580, 144092293, 24, alg_unknown, 4294942376, 140383036, 4156006400, 167772184, 4294942392, 144092338, 148964452, 24, 4294942408, 140385161, 4156006400, 1180628613, 4155438304, 4155963284, 4155963284, 4155438304, 4155896864, 4155896864, alg_unknown, alg_unknown, alg_unknown, alg_unknown, alg_unknown, 4155967104, 4155543416, 140385398, alg_zero, 167772160, 4294942616, 149524616, alg_unknown, alg_unknown, 4294942552, 137729793, 4155963284, alg_unknown, alg_unknown, alg_unknown, alg_unknown, 4155963284, 4155896864, 4155896864, 4155896864, 4155896864, 4155438304, 4155963284, 4155963284, 4155963284, 4155963284, 4155543416}, log = "\000\004\003\005\004\004\a\367\210\237\377\377\273\227\063\b\224\367\266\367", '\000' <repeats 16 times>, "\001\000\000\000\001\000\000\000\000\000\000\000\210\220\351\b\000\000\000\000ȟ\377\377\342y5\b"} (We really ought to zero the structure first just to help debug. But log[0] and op/log past [ops] are unused and uninitialized.) The cross-compile *ought* not to affect costs, which means that we ought to be making the same algorithm choices. Which suggests that -- if this is a fully bootstrapped pa compiler -- you're looking at some part of expand_mult itself being mis-compiled. I'm going to start a build on gcc61, but even checking out the tree there has taken all day long...