While doing some work on power8, I wanted to make sure that for existing systems, I was generating the same code. So I built some code and ran it through various -mcpu=xxxx options. When I built a powerpc-linuxpaired compiler, the compiler has trouble with a simple loop that should be vectorized. I traced the code to changes in the vectorizer that required the predicates for movmismalign* to accept memory operands.
In the main part of the powerpc compiler, we made this change in April, 2011, but we missed the paired floating point support, since you need to use special configuration options to enable paired floating point support. 2011-04-01 Andrew Pinski <pins...@gmail.com> Michael Meissner <meiss...@linux.vnet.ibm.com> PR target/48262 * config/rs6000/vector.md (movmisalign<mode>): Allow for memory operands, as per the specifications. * config/rs6000/altivec.md (vec_extract_evenv4si): Correct modes. (vec_extract_evenv4sf): Ditto. (vec_extract_evenv8hi): Ditto. (vec_extract_evenv16qi): Ditto. (vec_extract_oddv4si): Ditto. I will do the usual bootstrap/make check tomorrow. Assuming it has no regressions, can I check this patch it to both the 4.8 branch and trunk? 2013-09-17 Michael Meissner <meiss...@linux.vnet.ibm.com> PR target/58452 * config/rs6000/paired.md (movmisalignv2sf): Fix to allow memory operaands. Index: gcc/config/rs6000/paired.md =================================================================== --- gcc/config/rs6000/paired.md (revision 202632) +++ gcc/config/rs6000/paired.md (working copy) @@ -462,8 +462,8 @@ (define_expand "reduc_splus_v2sf" }") (define_expand "movmisalignv2sf" - [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f") - (match_operand:V2SF 1 "gpc_reg_operand" "f"))] + [(set (match_operand:V2SF 0 "nonimmediate_operand" "") + (match_operand:V2SF 1 "any_operand" ""))] "TARGET_PAIRED_FLOAT" { paired_expand_vector_move (operands); -- Michael Meissner, IBM IBM, M/S 2506R, 550 King Street, Littleton, MA 01460, USA email: meiss...@linux.vnet.ibm.com, phone: +1 (978) 899-4797