Hi, We find that the VALLDI mode iterator used in *aarch64_simd_ld1r<mode> pattern is not appropriate. The reason is that it's impossible to get a new operand of DImode by vec_duplicating an operand of the same mode. So this patch just excludes the DImode and uses VALL instead. Reg-tested for aarch64-linux-gnu with QEMU. OK for the trunk?
Index: gcc/ChangeLog =================================================================== --- gcc/ChangeLog (revision 217394) +++ gcc/ChangeLog (working copy) @@ -1,3 +1,9 @@ +2014-11-13 Felix Yang <felix.y...@huawei.com> + Jiji Jiang <jiangj...@huawei.com> + + * config/aarch64/aarch64-simd.md (*aarch64_simd_ld1r<mode>): Use + VALL mode iterator instead of VALLDI. + 2014-11-11 Andrew Pinski <apin...@cavium.com> Bug target/61997 Index: gcc/config/aarch64/aarch64-simd.md =================================================================== --- gcc/config/aarch64/aarch64-simd.md (revision 217394) +++ gcc/config/aarch64/aarch64-simd.md (working copy) @@ -4936,8 +4936,8 @@ }) (define_insn "*aarch64_simd_ld1r<mode>" - [(set (match_operand:VALLDI 0 "register_operand" "=w") - (vec_duplicate:VALLDI + [(set (match_operand:VALL 0 "register_operand" "=w") + (vec_duplicate:VALL (match_operand:<VEL> 1 "aarch64_simd_struct_operand" "Utv")))] "TARGET_SIMD" "ld1r\\t{%0.<Vtype>}, %1"
aarch64-fix-mode-iterator-v1.diff
Description: aarch64-fix-mode-iterator-v1.diff