Patchwork [ARM] Fix regression.

login
register
mail settings
Submitter tejas belagod
Date Oct. 11, 2010, 4:44 p.m.
Message ID <1286815466.6030.20.camel@e102484-lin.cambridge.arm.com>
Download mbox | patch
Permalink /patch/67445/
State New
Headers show

Comments

tejas belagod - Oct. 11, 2010, 4:44 p.m.
Hi,

A bug was introduced in neon_move_hi_quad_<mode> pattern refactoring
the neon_move_(hi,lo)_<mode> patterns in neon.md as a part of the vmovn
patch. This caused some regressions, namely gcc.c-torture/990811-1.c
etc. to fail. The bug relates to incorrectly ordering the operands of
vec_concat when implementing moving to the high part of a register
(pattern neon_move_hi_quad_<mode>).

Regression tested for arm-linux-gnueabi. OK?

--
Tejas Belagod
ARM.

gcc/

2010-10-11  Tejas Belagod  <tejas.belagod@arm.com>

	* config/arm/neon.md (neon_move_hi_quad_<mode>): Fix the order
	of operands to vec_concat.
Paul Brook - Oct. 15, 2010, 2:05 p.m.
> 2010-10-11  Tejas Belagod  <tejas.belagod@arm.com>
> 
> 	* config/arm/neon.md (neon_move_hi_quad_<mode>): Fix the order
> 	of operands to vec_concat.

Ok.

Paul
tejas belagod - Oct. 18, 2010, 11:22 a.m.
On Fri, 2010-10-15 at 15:05 +0100, Paul Brook wrote:
> > 2010-10-11  Tejas Belagod  <tejas.belagod@arm.com>
> > 
> > 	* config/arm/neon.md (neon_move_hi_quad_<mode>): Fix the order
> > 	of operands to vec_concat.
> 
> Ok.


Thanks, I've checked this in.

Tejas.

Patch

diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md
index cd91573..ec05e17 100644
--- a/gcc/config/arm/neon.md
+++ b/gcc/config/arm/neon.md
@@ -1187,10 +1187,11 @@ 
 (define_insn "neon_move_hi_quad_<mode>"
   [(set (match_operand:ANY128 0 "s_register_operand" "+w")
         (vec_concat:ANY128
-          (match_operand:<V_HALF> 1 "s_register_operand" "w")
           (vec_select:<V_HALF>
 		(match_dup 0)
-	        (match_operand:ANY128 2 "vect_par_constant_low" ""))))]
+	        (match_operand:ANY128 2 "vect_par_constant_low" ""))
+          (match_operand:<V_HALF> 1 "s_register_operand" "w")))]
+	   
   "TARGET_NEON"
 {
   int dest = REGNO (operands[0]);