i386.c (ix86_emit_swsqrtsf): Cleanup infinity filterning code.
authorUros Bizjak <ubizjak@gmail.com>
Tue, 8 Dec 2015 08:53:42 +0000 (09:53 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Tue, 8 Dec 2015 08:53:42 +0000 (09:53 +0100)
* config/i386/i386.c (ix86_emit_swsqrtsf): Cleanup
infinity filterning code.

From-SVN: r231397

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

index 918cd12fba457a6457904609b128b27e982b86f7..8e9d0167b34b5e29d7fe848d134a914412a9e34d 100644 (file)
@@ -1,3 +1,8 @@
+2015-12-08  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.c (ix86_emit_swsqrtsf): Cleanup
+       infinity filterning code.
+
 2015-12-08  Ilya Enkovich  <enkovich.gnu@gmail.com>
 
        PR tree-optimization/68766
index 1e6969f483eae31b5ab1f694117137a03af01fff..e423b3c1897a765966e9522b5e1209dc9bb4561f 100644 (file)
@@ -47827,8 +47827,7 @@ void ix86_emit_swdivsf (rtx res, rtx a, rtx b, machine_mode mode)
 /* Output code to perform a Newton-Rhapson approximation of a
    single precision floating point [reciprocal] square root.  */
 
-void ix86_emit_swsqrtsf (rtx res, rtx a, machine_mode mode,
-                        bool recip)
+void ix86_emit_swsqrtsf (rtx res, rtx a, machine_mode mode, bool recip)
 {
   rtx x0, e0, e1, e2, e3, mthree, mhalf;
   REAL_VALUE_TYPE r;
@@ -47868,12 +47867,8 @@ void ix86_emit_swsqrtsf (rtx res, rtx a, machine_mode mode,
   /* If (a == 0.0) Filter out infinity to prevent NaN for sqrt(0.0).  */
   if (!recip)
     {
-      rtx zero, mask;
-
-      zero = gen_reg_rtx (mode);
-      mask = gen_reg_rtx (mode);
-
-      zero = force_reg (mode, CONST0_RTX(mode));
+      rtx zero = force_reg (mode, CONST0_RTX(mode));
+      rtx mask;
 
       /* Handle masked compare.  */
       if (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 64)
@@ -47885,8 +47880,8 @@ void ix86_emit_swsqrtsf (rtx res, rtx a, machine_mode mode,
        }
       else
        {
+         mask = gen_reg_rtx (mode);
          emit_insn (gen_rtx_SET (mask, gen_rtx_NE (mode, zero, a)));
-
          emit_insn (gen_rtx_SET (x0, gen_rtx_AND (mode, x0, mask)));
        }
     }