Only allow (copysign x, NEG_CONST) -> (fneg (fabs x)) simplification for constant folding [PR112483]

On targets with native copysign instructions, (copysign x, -1) is
usually more efficient than (fneg (fabs x)).  Since r14-5284, in the
middle end we always optimize (fneg (fabs x)) to (copysign x, -1), not
vice versa.  If the target does not support native fcopysign,
expand_COPYSIGN will expand it as (fneg (fabs x)) anyway.

gcc/ChangeLog:

	PR rtl-optimization/112483
	* simplify-rtx.cc (simplify_binary_operation_1) <case COPYSIGN>:
	Call simplify_unary_operation for NEG instead of
	simplify_gen_unary.
This commit is contained in:
Andrew Pinski 2023-11-13 20:18:34 +00:00 committed by Xi Ruoyao
parent 1c1ee8097c
commit 9e9279fadb
No known key found for this signature in database
GPG Key ID: ACAAD20E19E710E3

View File

@ -4392,7 +4392,7 @@ simplify_ashift:
real_convert (&f1, mode, CONST_DOUBLE_REAL_VALUE (trueop1));
rtx tmp = simplify_gen_unary (ABS, mode, op0, mode);
if (REAL_VALUE_NEGATIVE (f1))
tmp = simplify_gen_unary (NEG, mode, tmp, mode);
tmp = simplify_unary_operation (NEG, mode, tmp, mode);
return tmp;
}
if (GET_CODE (op0) == NEG || GET_CODE (op0) == ABS)