------- Comment #4 from matz at gcc dot gnu dot org  2010-04-13 11:59 -------
No, we shouldn't unconditionally create REGs if the target isn't one, but
rather only if it doesn't match the predicate.  Like so, which I'm testing
right now:

Index: builtins.c
===================================================================
--- builtins.c  (revision 158160)
+++ builtins.c  (working copy)
@@ -2316,7 +2316,8 @@ expand_builtin_interclass_mathfn (tree e
       tree orig_arg = arg;
       /* Make a suitable register to place result in.  */
       if (!target
-         || GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
+         || GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp))
+         || !insn_data[icode].operand[0].predicate (target, GET_MODE
(target)))
          target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp)));

       gcc_assert (insn_data[icode].operand[0].predicate


-- 

matz at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |matz at gcc dot gnu dot org
                   |dot org                     |
             Status|NEW                         |ASSIGNED
   Last reconfirmed|2010-04-12 18:38:24         |2010-04-13 11:59:00
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43730

Reply via email to