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"

Attachment: aarch64-fix-mode-iterator-v1.diff
Description: aarch64-fix-mode-iterator-v1.diff

Reply via email to