@@ -14725,14 +14725,12 @@
{
int i;
- if (optimize_insn_for_size_p ())
- FAIL;
-
for (i = 2; i < 6; i++)
operands[i] = gen_reg_rtx (XFmode);
emit_move_insn (operands[3], CONST1_RTX (XFmode)); /* fld1 */
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "asin<mode>2"
[(use (match_operand:MODEF 0 "register_operand"))
@@ -14745,14 +14743,12 @@
rtx op0 = gen_reg_rtx (XFmode);
rtx op1 = gen_reg_rtx (XFmode);
- if (optimize_insn_for_size_p ())
- FAIL;
-
emit_insn (gen_extend<mode>xf2 (op1, operands[1]));
emit_insn (gen_asinxf2 (op0, op1));
emit_insn (gen_truncxf<mode>2_i387_noop (operands[0], op0));
DONE;
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "acosxf2"
[(set (match_dup 2)
@@ -14769,14 +14765,12 @@
{
int i;
- if (optimize_insn_for_size_p ())
- FAIL;
-
for (i = 2; i < 6; i++)
operands[i] = gen_reg_rtx (XFmode);
emit_move_insn (operands[3], CONST1_RTX (XFmode)); /* fld1 */
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "acos<mode>2"
[(use (match_operand:MODEF 0 "register_operand"))
@@ -14789,14 +14783,12 @@
rtx op0 = gen_reg_rtx (XFmode);
rtx op1 = gen_reg_rtx (XFmode);
- if (optimize_insn_for_size_p ())
- FAIL;
-
emit_insn (gen_extend<mode>xf2 (op1, operands[1]));
emit_insn (gen_acosxf2 (op0, op1));
emit_insn (gen_truncxf<mode>2_i387_noop (operands[0], op0));
DONE;
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_insn "fyl2xxf3_i387"
[(set (match_operand:XF 0 "register_operand" "=f")
@@ -14952,12 +14944,10 @@
"TARGET_USE_FANCY_MATH_387
&& flag_unsafe_math_optimizations"
{
- if (optimize_insn_for_size_p ())
- FAIL;
-
ix86_emit_i387_log1p (operands[0], operands[1]);
DONE;
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "log1p<mode>2"
[(use (match_operand:MODEF 0 "register_operand"))
@@ -14969,9 +14959,6 @@
{
rtx op0;
- if (optimize_insn_for_size_p ())
- FAIL;
-
op0 = gen_reg_rtx (XFmode);
operands[1] = gen_rtx_FLOAT_EXTEND (XFmode, operands[1]);
@@ -14979,7 +14966,8 @@
ix86_emit_i387_log1p (op0, operands[1]);
emit_insn (gen_truncxf<mode>2_i387_noop (operands[0], op0));
DONE;
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_insn "fxtractxf3_i387"
[(set (match_operand:XF 0 "register_operand" "=f")
@@ -15065,9 +15053,6 @@
{
rtx op0, op1;
- if (optimize_insn_for_size_p ())
- FAIL;
-
op0 = gen_reg_rtx (XFmode);
op1 = gen_reg_rtx (XFmode);
@@ -15120,9 +15105,6 @@
{
int i;
- if (optimize_insn_for_size_p ())
- FAIL;
-
for (i = 3; i < 10; i++)
operands[i] = gen_reg_rtx (XFmode);
@@ -15137,15 +15119,13 @@
{
rtx op2;
- if (optimize_insn_for_size_p ())
- FAIL;
-
op2 = gen_reg_rtx (XFmode);
emit_move_insn (op2, standard_80387_constant_rtx (5)); /* fldl2e */
emit_insn (gen_expNcorexf3 (operands[0], operands[1], op2));
DONE;
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "exp<mode>2"
[(use (match_operand:MODEF 0 "register_operand"))
@@ -15157,9 +15137,6 @@
{
rtx op0, op1;
- if (optimize_insn_for_size_p ())
- FAIL;
-
op0 = gen_reg_rtx (XFmode);
op1 = gen_reg_rtx (XFmode);
@@ -15167,7 +15144,8 @@
emit_insn (gen_expxf2 (op0, op1));
emit_insn (gen_truncxf<mode>2_i387_noop (operands[0], op0));
DONE;
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "exp10xf2"
[(use (match_operand:XF 0 "register_operand"))
@@ -15177,15 +15155,13 @@
{
rtx op2;
- if (optimize_insn_for_size_p ())
- FAIL;
-
op2 = gen_reg_rtx (XFmode);
emit_move_insn (op2, standard_80387_constant_rtx (6)); /* fldl2t */
emit_insn (gen_expNcorexf3 (operands[0], operands[1], op2));
DONE;
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "exp10<mode>2"
[(use (match_operand:MODEF 0 "register_operand"))
@@ -15197,9 +15173,6 @@
{
rtx op0, op1;
- if (optimize_insn_for_size_p ())
- FAIL;
-
op0 = gen_reg_rtx (XFmode);
op1 = gen_reg_rtx (XFmode);
@@ -15207,7 +15180,8 @@
emit_insn (gen_exp10xf2 (op0, op1));
emit_insn (gen_truncxf<mode>2_i387_noop (operands[0], op0));
DONE;
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "exp2xf2"
[(use (match_operand:XF 0 "register_operand"))
@@ -15217,15 +15191,13 @@
{
rtx op2;
- if (optimize_insn_for_size_p ())
- FAIL;
-
op2 = gen_reg_rtx (XFmode);
emit_move_insn (op2, CONST1_RTX (XFmode)); /* fld1 */
emit_insn (gen_expNcorexf3 (operands[0], operands[1], op2));
DONE;
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "exp2<mode>2"
[(use (match_operand:MODEF 0 "register_operand"))
@@ -15237,9 +15209,6 @@
{
rtx op0, op1;
- if (optimize_insn_for_size_p ())
- FAIL;
-
op0 = gen_reg_rtx (XFmode);
op1 = gen_reg_rtx (XFmode);
@@ -15247,7 +15216,8 @@
emit_insn (gen_exp2xf2 (op0, op1));
emit_insn (gen_truncxf<mode>2_i387_noop (operands[0], op0));
DONE;
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "expm1xf2"
[(set (match_dup 3) (mult:XF (match_operand:XF 1 "register_operand")
@@ -15277,9 +15247,6 @@
{
int i;
- if (optimize_insn_for_size_p ())
- FAIL;
-
for (i = 2; i < 13; i++)
operands[i] = gen_reg_rtx (XFmode);
@@ -15287,7 +15254,8 @@
= validize_mem (force_const_mem (SFmode, CONST1_RTX (SFmode))); /* fld1 */
emit_move_insn (operands[2], standard_80387_constant_rtx (5)); /* fldl2e */
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "expm1<mode>2"
[(use (match_operand:MODEF 0 "register_operand"))
@@ -15299,9 +15267,6 @@
{
rtx op0, op1;
- if (optimize_insn_for_size_p ())
- FAIL;
-
op0 = gen_reg_rtx (XFmode);
op1 = gen_reg_rtx (XFmode);
@@ -15309,7 +15274,8 @@
emit_insn (gen_expm1xf2 (op0, op1));
emit_insn (gen_truncxf<mode>2_i387_noop (operands[0], op0));
DONE;
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "ldexpxf3"
[(match_operand:XF 0 "register_operand")
@@ -15319,8 +15285,6 @@
&& flag_unsafe_math_optimizations"
{
rtx tmp1, tmp2;
- if (optimize_insn_for_size_p ())
- FAIL;
tmp1 = gen_reg_rtx (XFmode);
tmp2 = gen_reg_rtx (XFmode);
@@ -15329,7 +15293,8 @@
emit_insn (gen_fscalexf4_i387 (operands[0], tmp2,
operands[1], tmp1));
DONE;
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "ldexp<mode>3"
[(use (match_operand:MODEF 0 "register_operand"))
@@ -15352,7 +15317,8 @@
emit_insn (gen_ldexpxf3 (op0, op1, operands[2]));
emit_insn (gen_truncxf<mode>2_i387_noop (operands[0], op0));
DONE;
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "scalbxf3"
[(parallel [(set (match_operand:XF 0 " register_operand")
@@ -15365,11 +15331,9 @@
"TARGET_USE_FANCY_MATH_387
&& flag_unsafe_math_optimizations"
{
- if (optimize_insn_for_size_p ())
- FAIL;
-
operands[3] = gen_reg_rtx (XFmode);
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "scalb<mode>3"
[(use (match_operand:MODEF 0 "register_operand"))
@@ -15382,9 +15346,6 @@
{
rtx op0, op1, op2;
- if (optimize_insn_for_size_p ())
- FAIL;
-
op0 = gen_reg_rtx (XFmode);
op1 = gen_reg_rtx (XFmode);
op2 = gen_reg_rtx (XFmode);
@@ -15394,7 +15355,8 @@
emit_insn (gen_scalbxf3 (op0, op1, op2));
emit_insn (gen_truncxf<mode>2_i387_noop (operands[0], op0));
DONE;
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_expand "significandxf2"
[(parallel [(set (match_operand:XF 0 "register_operand")
@@ -15462,8 +15424,6 @@
if (TARGET_ROUND)
emit_insn (gen_sse4_1_round<mode>2
(operands[0], operands[1], GEN_INT (ROUND_MXCSR)));
- else if (optimize_insn_for_size_p ())
- FAIL;
else
ix86_expand_rint (operands[0], operands[1]);
}
@@ -15478,7 +15438,12 @@
emit_insn (gen_truncxf<mode>2_i387_noop (operands[0], op0));
}
DONE;
-})
+}
+ [(set (attr "preferred_for_size")
+ (symbol_ref "!(SSE_FLOAT_MODE_P (<MODE>mode)
+ && TARGET_SSE_MATH
+ && !flag_trapping_math)
+ || TARGET_ROUND"))])
(define_expand "round<mode>2"
[(match_operand:X87MODEF 0 "register_operand")
@@ -15490,9 +15455,6 @@
|| (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
&& !flag_trapping_math && !flag_rounding_math)"
{
- if (optimize_insn_for_size_p ())
- FAIL;
-
if (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
&& !flag_trapping_math && !flag_rounding_math)
{
@@ -15512,7 +15474,8 @@
ix86_emit_i387_round (operands[0], operands[1]);
}
DONE;
-})
+}
+ [(set_attr "preferred_for_size" "0")])
(define_insn_and_split "*fistdi2_1"
[(set (match_operand:DI 0 "nonimmediate_operand")
@@ -15746,8 +15709,9 @@
FRNDINT_ROUNDING))
(clobber (reg:CC FLAGS_REG))])]
"TARGET_USE_FANCY_MATH_387
- && flag_unsafe_math_optimizations
- && !optimize_insn_for_size_p ()")
+ && flag_unsafe_math_optimizations"
+ ""
+ [(set_attr "preferred_for_size" "0")])
(define_expand "<rounding_insn><mode>2"
[(parallel [(set (match_operand:MODEF 0 "register_operand")
@@ -15767,8 +15731,6 @@
if (TARGET_ROUND)
emit_insn (gen_sse4_1_round<mode>2
(operands[0], operands[1], GEN_INT (ROUND_<ROUNDING>)));
- else if (optimize_insn_for_size_p ())
- FAIL;
else if (TARGET_64BIT || (<MODE>mode != DFmode))
{
if (ROUND_<ROUNDING> == ROUND_FLOOR)
@@ -15796,9 +15758,6 @@
{
rtx op0, op1;
- if (optimize_insn_for_size_p ())
- FAIL;
-
op0 = gen_reg_rtx (XFmode);
op1 = gen_reg_rtx (XFmode);
emit_insn (gen_extend<mode>xf2 (op1, operands[1]));
@@ -15807,7 +15766,12 @@
emit_insn (gen_truncxf<mode>2_i387_noop (operands[0], op0));
}
DONE;
-})
+}
+ [(set (attr "preferred_for_size")
+ (symbol_ref "SSE_FLOAT_MODE_P (<MODE>mode)
+ && TARGET_SSE_MATH
+ && TARGET_ROUND
+ && !flag_trapping_math"))])
;; Rounding mode control word calculation could clobber FLAGS_REG.
(define_insn_and_split "frndintxf2_mask_pm"
new file mode 100644
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-math-errno -fno-trapping-math -msse2 -mfpmath=sse" } */
+
+float
+f1 (float f)
+{
+ return __builtin_rintf (f);
+}
+
+double
+f2 (double f)
+{
+ return __builtin_rint (f);
+}
+
+/* { dg-final { scan-assembler-times "\tucomiss\t" 1 } } */
+/* { dg-final { scan-assembler-times "\tucomisd\t" 1 } } */
new file mode 100644
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-Os -fno-math-errno -fno-trapping-math -msse2 -mfpmath=sse" } */
+
+float
+f1 (float f)
+{
+ return __builtin_rintf (f);
+}
+
+double
+f2 (double f)
+{
+ return __builtin_rint (f);
+}
+
+/* { dg-final { scan-assembler-not "\tucomiss\t" } } */
+/* { dg-final { scan-assembler-not "\tucomisd\t" } } */
new file mode 100644
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-math-errno -fno-trapping-math -msse2 -mfpmath=sse" } */
+
+float __attribute__ ((cold))
+f1 (float f)
+{
+ return __builtin_rintf (f);
+}
+
+double __attribute__ ((cold))
+f2 (double f)
+{
+ return __builtin_rint (f);
+}
+
+/* { dg-final { scan-assembler-not "\tucomiss\t" } } */
+/* { dg-final { scan-assembler-not "\tucomisd\t" } } */