Patchwork [i386] : Fix PR target/45142, split for *vec_set<mode>_0_sse2 incomplete

login
register
mail settings
Submitter Uros Bizjak
Date Aug. 1, 2010, 10:40 a.m.
Message ID <AANLkTikLp66+EXiAqV-fNL9S_LyKEUW=B8oQ7tkM+66m@mail.gmail.com>
Download mbox | patch
Permalink /patch/60447/
State New
Headers show

Comments

Uros Bizjak - Aug. 1, 2010, 10:40 a.m.
Hello!

We should also split V4SI operands in addition to V4SF.

2010-08-01  Uros Bizjak  <ubizjak@gmail.com>

	PR target/45142
	* config/i386/sse.md (vec_set<mode>_0): Do not set mode attribute for
	alternative 2.
	(vec_set<moode>_0 splitter): Use SSEMODE4S mode iterator to also
	split V4SI operands.

(There is no testcase, since the failure happens only with
non-released patch from vector-enhancement GSoC project, see PR).

Bootstrapped and regression tested on x86_64-pc-linux-gnu {,-m32}.
Also tested with the vector enhancement patch, where the patch fixes
reported failure. Patch was committed to mainline SVN.

Uros.

Patch

Index: config/i386/sse.md
===================================================================
--- config/i386/sse.md	(revision 162744)
+++ config/i386/sse.md	(working copy)
@@ -4040,7 +4040,7 @@ 
    movss\t{%2, %0|%0, %2}
    #"
   [(set_attr "type" "ssemov")
-   (set_attr "mode" "SF")])
+   (set_attr "mode" "SF,SF,*")])
 
 ;; A subset is vec_setv4sf.
 (define_insn "*vec_setv4sf_avx"
@@ -4108,16 +4108,17 @@ 
    (set_attr "mode" "V4SF")])
 
 (define_split
-  [(set (match_operand:V4SF 0 "memory_operand" "")
-	(vec_merge:V4SF
-	  (vec_duplicate:V4SF
-	    (match_operand:SF 1 "nonmemory_operand" ""))
+  [(set (match_operand:SSEMODE4S 0 "memory_operand" "")
+	(vec_merge:SSEMODE4S
+	  (vec_duplicate:SSEMODE4S
+	    (match_operand:<ssescalarmode> 1 "nonmemory_operand" ""))
 	  (match_dup 0)
 	  (const_int 1)))]
   "TARGET_SSE && reload_completed"
   [(const_int 0)]
 {
-  emit_move_insn (adjust_address (operands[0], SFmode, 0), operands[1]);
+  emit_move_insn (adjust_address (operands[0], <ssescalarmode>mode, 0),
+		  operands[1]);
   DONE;
 })