http://gcc.gnu.org/bugzilla/show_bug.cgi?id=61114
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Tejas Belagod from comment #5) > So, does that mean the folded value 120 is in the wrong place? The fix that > I'm testing swaps the first and last elements of the const vector {120, 0, > 0, 0}. > > PS: Sorry, my statement "The final folded value is extracted from the LSB > which are bits 32:96 on BE systems" should have read "The final folded value > is extracted from the LSB which are bits 96..127 on BE systems" if that > caused confusion. But that's the bug. The final value should _always_ be extracted from 0..31. That is, the folding is perfectly ok given the description of REDUC_PLUS_EXPR. So - it looks like the target does something wrong for expansion of REDUC_PLUS_EXPR.