i386.c (ix86_fold_builtin): Handle IX86_BUILTIN_INFQ and IX86_BUILTIN_HUGE_VALQ here ...
authorUros Bizjak <ubizjak@gmail.com>
Thu, 20 Oct 2016 22:57:11 +0000 (00:57 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Thu, 20 Oct 2016 22:57:11 +0000 (00:57 +0200)
* config/i386/i386.c (ix86_fold_builtin): Handle IX86_BUILTIN_INFQ
and IX86_BUILTIN_HUGE_VALQ here ...
(ix86_expand_builtin): ... not here.

From-SVN: r241387

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

index f98e0793def8d0dd7f39e7e4bbaf236bab0528d4..ae08bc625c595ef50fdc769e208259a4e4f5eeb3 100644 (file)
@@ -1,3 +1,9 @@
+2016-10-21  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.c (ix86_fold_builtin): Handle IX86_BUILTIN_INFQ
+       and IX86_BUILTIN_HUGE_VALQ here ...
+       (ix86_expand_builtin): ... not here.
+
 2016-10-20  Jakub Jelinek  <jakub@redhat.com>
 
        * doc/gty.texi (for_user): Use @item next to @findex.
index 3e6f8fde127cb1c6998488f63b28aba4725fcfef..618d9741f693ef5057e387b4f217a5106b6da771 100644 (file)
@@ -33323,6 +33323,15 @@ ix86_fold_builtin (tree fndecl, int n_args,
            return NULL_TREE;
          }
 
+       case IX86_BUILTIN_INFQ:
+       case IX86_BUILTIN_HUGE_VALQ:
+         {
+           tree type = TREE_TYPE (TREE_TYPE (fndecl));
+           REAL_VALUE_TYPE inf;
+           real_inf (&inf);
+           return build_real (type, inf);
+         }
+
        default:
          break;
        }
@@ -36684,24 +36693,6 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget,
     case IX86_BUILTIN_VEC_SET_V16QI:
       return ix86_expand_vec_set_builtin (exp);
 
-    case IX86_BUILTIN_INFQ:
-    case IX86_BUILTIN_HUGE_VALQ:
-      {
-       REAL_VALUE_TYPE inf;
-       rtx tmp;
-
-       real_inf (&inf);
-       tmp = const_double_from_real_value (inf, mode);
-
-       tmp = validize_mem (force_const_mem (mode, tmp));
-
-       if (target == 0)
-         target = gen_reg_rtx (mode);
-
-       emit_move_insn (target, tmp);
-       return target;
-      }
-
     case IX86_BUILTIN_NANQ:
     case IX86_BUILTIN_NANSQ:
       return expand_call (exp, target, ignore);