On 18/05/18 21:34, Michael Collison wrote:
> This patch improves additional cases of FP to integer conversions.
> 
> Example 1:
> 
> unsigned long
> f7 (double x)
> {
>   return (unsigned) y;
> }
> 
> 
> At -O2
> 
> Trunk generates:
> 
> f7:
>       fcvtzu  w0, d0
>       uxtw    x0, w0
>       ret
> 
> With the patch we can merge the zero-extend and reduce the sequence to one 
> instruction at -O2
> 
> f7:
>       fcvtzu  x0, d0
>       ret
>       
> Bootstrapped and regression tested on aarch64-linux-gnu. Okay for trunk?
> 
> 2018-05-15  Michael Collison  <michael.colli...@arm.com>
> 
>       * config/aarch64/aarch64.md:
>       (*fix_to_zero_extenddfdi2): New pattern.
>       * gcc.target/aarch64/fix_extend1.c: New testcase.
> 

OK, either with, or without, Richard S's testsuite change.

R.
> 
> gnutools-6527-pt1.patch
> 
> 
> From 69f5f84710a709ae1db6d09b9326a6c804011057 Mon Sep 17 00:00:00 2001
> From: Michael Collison <michael.colli...@arm.com>
> Date: Fri, 11 May 2018 06:22:49 +0100
> Subject: [PATCH 1/2] Patch 1 to improve fp to int conversions
> 
> 
> diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
> index 32a0e1f..b37b56e 100644
> --- a/gcc/config/aarch64/aarch64.md
> +++ b/gcc/config/aarch64/aarch64.md
> @@ -5113,6 +5113,16 @@
>    [(set_attr "type" "f_cvtf2i")]
>  )
>  
> +(define_insn "*fix_to_zero_extend<mode>di2"
> +  [(set (match_operand:DI 0 "register_operand" "=r")
> +     (zero_extend:DI
> +      (unsigned_fix:SI
> +       (match_operand:GPF 1 "register_operand" "w"))))]
> +  "TARGET_FLOAT"
> +  "fcvtzu\t%w0, %<s>1"
> +  [(set_attr "type" "f_cvtf2i")]
> +)
> +
>  (define_insn "<optab><fcvt_target><GPF:mode>2"
>    [(set (match_operand:GPF 0 "register_operand" "=w,w")
>          (FLOATUORS:GPF (match_operand:<FCVT_TARGET> 1 "register_operand" 
> "w,r")))]
> diff --git a/gcc/testsuite/gcc.target/aarch64/fix_extend1.c 
> b/gcc/testsuite/gcc.target/aarch64/fix_extend1.c
> new file mode 100644
> index 0000000..3a251d0
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/fix_extend1.c
> @@ -0,0 +1,17 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2" } */
> +
> +unsigned long
> +f7 (double x)
> +{
> +  return (unsigned) x;
> +}
> +
> +unsigned long
> +f7_2 (float x)
> +{
> +  return (unsigned) x;
> +}
> +
> +/* { dg-final { scan-assembler "fcvtzu\\tw\[0-9\]+, d\[0-9\]+" } } */
> +/* { dg-final { scan-assembler "fcvtzu\\tw\[0-9\]+, s\[0-9\]+" } } */
> 

Reply via email to