OSDN Git Service

2007-04-16 H.J. Lu <hongjiu.lu@intel.com>
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 16 Apr 2007 13:49:14 +0000 (13:49 +0000)
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 16 Apr 2007 13:49:14 +0000 (13:49 +0000)
PR target/31582
* config/i386/i386.c (ix86_expand_vec_set_builtin): Make a
copy of source, pass it to ix86_expand_vector_set and return
it as target.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123866 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.c

index d256001..401d2a5 100644 (file)
@@ -1,5 +1,12 @@
+2007-04-16  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/31582
+       * config/i386/i386.c (ix86_expand_vec_set_builtin): Make a
+       copy of source, pass it to ix86_expand_vector_set and return
+       it as target.
+
 2007-04-16  David Ung  <davidu@mips.com>
-            Joseph Myers  <joseph@codesourcery.com>
+           Joseph Myers  <joseph@codesourcery.com>
 
        * config/mips/mips.h (PROCESSOR_74KC, PROCESSOR_74KF,
        PROCESSOR_74KX, TUNE_74K, GENERATE_MADD_MSUB): Define.
index 9f4ed75..ecc2e6b 100644 (file)
@@ -17902,7 +17902,7 @@ ix86_expand_vec_set_builtin (tree exp)
   enum machine_mode tmode, mode1;
   tree arg0, arg1, arg2;
   int elt;
-  rtx op0, op1;
+  rtx op0, op1, target;
 
   arg0 = CALL_EXPR_ARG (exp, 0);
   arg1 = CALL_EXPR_ARG (exp, 1);
@@ -17922,9 +17922,13 @@ ix86_expand_vec_set_builtin (tree exp)
   op0 = force_reg (tmode, op0);
   op1 = force_reg (mode1, op1);
 
-  ix86_expand_vector_set (true, op0, op1, elt);
+  /* OP0 is the source of these builtin functions and shouldn't be
+     modifified.  Create a copy, use it and return it as target.  */
+  target = gen_reg_rtx (tmode);
+  emit_move_insn (target, op0);
+  ix86_expand_vector_set (true, target, op1, elt);
 
-  return op0;
+  return target;
 }
 
 /* Expand an expression EXP that calls a built-in function,