This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Enable two UNSIGNED_FLOAT simplifications in simplify_unary_operation_1


On 03/20/2015 11:03 AM, Renlin Li wrote:
Hi all,

This is a simple patch to enable two simplifications for UNSIGNED_FLOAT
expression.

For the following rtx patterns, they can be simplified when the integer
x can be
represented in float mode without precision loss:

float_truncate (float x) --> float x
float_extend (float x) --> float x

Those two simplifications are also applicable to UNSIGNED_FLOAT expression.

For example, compile the following code using aarch64-none-elf toolchain
with -O1 flag.
double
f1 (uint16_t x)
{
   return (double)(float)x;
}
Before the change, the compiler generates the following code:
f1:
         uxth    w0, w0
         ucvtf   s0, w0
         fcvt    d0, s0
         ret
After the change, the following simplified asm code snipts are generated.
f1:
         uxth    w0, w0
         ucvtf   d0, w0
         ret


aarch64-none-elf regression test runs Okay. x86_64 bootstraps Okay.
Okay to commit?

gcc/ChangeLog:

2015-03-20  Renlin Li  <renlin.li@arm.com>

     * simplify-rtx.c (simplify_unary_operation_1): Fix a typo. Enable two
     simplifications for UNSIGNED_FLOAT.

gcc/testsuite/ChangeLog:

2015-03-20  Renlin Li  <renlin.li@arm.com>

     * gcc.target/aarch64/unsigned-float.c: New.
     * gcc.target/arm/unsigned-float.c: New.
OK for the trunk.
jeff


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]