Re: [PATCH, trivial][AArch64] Fix mode iterator for *aarch64_simd_ld1rmode pattern

2014-11-15 Thread Yangfei (Felix)
 On 13 November 2014 06:14, Yangfei (Felix) felix.y...@huawei.com wrote:
  Hi,
 
We find that the VALLDI mode iterator used in *aarch64_simd_ld1rmode
 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?
 
 OK, can you back port it to 4.9?
 Thanks
 /Marcus

Yes, committed: 
- trunk: r217573. 
- 4.9 branch: r217574. 


Re: [PATCH, trivial][AArch64] Fix mode iterator for *aarch64_simd_ld1rmode pattern

2014-11-14 Thread Marcus Shawcroft
On 13 November 2014 06:14, Yangfei (Felix) felix.y...@huawei.com wrote:
 Hi,

   We find that the VALLDI mode iterator used in *aarch64_simd_ld1rmode 
 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?

OK, can you back port it to 4.9?
Thanks
/Marcus


Re: [PATCH, trivial][AArch64] Fix mode iterator for *aarch64_simd_ld1rmode pattern

2014-11-13 Thread Joey Ye
Is there a case or PR to demonstrate the issue? If yes, better to
include it as a test case.

Thanks,
Joey

On Thu, Nov 13, 2014 at 2:14 PM, Yangfei (Felix) felix.y...@huawei.com wrote:
 Hi,

   We find that the VALLDI mode iterator used in *aarch64_simd_ld1rmode 
 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_ld1rmode): 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_ld1rmode
 -  [(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


答复: [PATCH, trivial][AArch64] Fix mode iterator for *aarch64_simd_ld1rmode pattern

2014-11-13 Thread Yangfei (Felix)
No, we noticed this issue when improving the vld1(q?)_dup intrinsics.  Thanks. 


 Is there a case or PR to demonstrate the issue? If yes, better to include it 
 as a test
 case.
 
 Thanks,
 Joey
 
 On Thu, Nov 13, 2014 at 2:14 PM, Yangfei (Felix) felix.y...@huawei.com
 wrote:
  Hi,
 
We find that the VALLDI mode iterator used in *aarch64_simd_ld1rmode
 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_ld1rmode):
 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_ld1rmode
  -  [(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


Re: 答复: [PATCH, trivial][AArch64] Fix mode iterator for *aarch64_simd_ld1rmode pattern

2014-11-13 Thread Joey Ye
Can a new case be rewritten then?

- Joey

On Fri, Nov 14, 2014 at 9:32 AM, Yangfei (Felix) felix.y...@huawei.com wrote:
 No, we noticed this issue when improving the vld1(q?)_dup intrinsics.  Thanks.


 Is there a case or PR to demonstrate the issue? If yes, better to include it 
 as a test
 case.

 Thanks,
 Joey

 On Thu, Nov 13, 2014 at 2:14 PM, Yangfei (Felix) felix.y...@huawei.com
 wrote:
  Hi,
 
We find that the VALLDI mode iterator used in *aarch64_simd_ld1rmode
 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_ld1rmode):
 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_ld1rmode
  -  [(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


Re: [PATCH, trivial][AArch64] Fix mode iterator for *aarch64_simd_ld1rmode pattern

2014-11-13 Thread Yangfei (Felix)
Hmm, I don't think so.

The pattern *aarch64_simd_ld1rmode is used for pure matching, and GCC will 
never generate a pattern as follows: 

  [(set (match_operand:DI 0 register_operand =w)
(vec_duplicate:DI
  (match_operand:DI 1 aarch64_simd_struct_operand Utv)))]


 
 Can a new case be rewritten then?
 
 - Joey
 
 On Fri, Nov 14, 2014 at 9:32 AM, Yangfei (Felix) felix.y...@huawei.com 
 wrote:
  No, we noticed this issue when improving the vld1(q?)_dup intrinsics.  
  Thanks.
 
 
  Is there a case or PR to demonstrate the issue? If yes, better to
  include it as a test case.
 
  Thanks,
  Joey
 
  On Thu, Nov 13, 2014 at 2:14 PM, Yangfei (Felix)
  felix.y...@huawei.com
  wrote:
   Hi,
  
 We find that the VALLDI mode iterator used in
   *aarch64_simd_ld1rmode
  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_ld1rmode):
  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_ld1rmode
   -  [(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


[PATCH, trivial][AArch64] Fix mode iterator for *aarch64_simd_ld1rmode pattern

2014-11-12 Thread Yangfei (Felix)
Hi,

  We find that the VALLDI mode iterator used in *aarch64_simd_ld1rmode 
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_ld1rmode): 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_ld1rmode
-  [(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