diff mbox series

x86: replace "extendhfdf2" expander

Message ID 28de2fc1-79e6-6fef-400c-2991b25d13e1@suse.com
State New
Headers show
Series x86: replace "extendhfdf2" expander | expand

Commit Message

Jan Beulich July 14, 2023, 9:44 a.m. UTC
The corresponding insn serves this purpose quite fine, and leads to
slightly less (generated) code. All we need is the insn to not have a
leading * in its name, while retaining that * for "extendhfsf2".
Introduce a mode attribute in exchange to achieve that.

gcc/

	* config/i386/i386.md (extendhfdf2): Delete expander.
	(extendhf): New mode attribute.
	(*extendhf<mode>2): Use it.
---
Of course the mode attribute could as well supply the full names.

Comments

Uros Bizjak July 14, 2023, 10:10 a.m. UTC | #1
On Fri, Jul 14, 2023 at 11:44 AM Jan Beulich <jbeulich@suse.com> wrote:
>
> The corresponding insn serves this purpose quite fine, and leads to
> slightly less (generated) code. All we need is the insn to not have a
> leading * in its name, while retaining that * for "extendhfsf2".
> Introduce a mode attribute in exchange to achieve that.
>
> gcc/
>
>         * config/i386/i386.md (extendhfdf2): Delete expander.
>         (extendhf): New mode attribute.
>         (*extendhf<mode>2): Use it.

No, please leave the expander, it is there due to extendhfsf2 that
prevents effective macroization.

FYI, there is no less generated code when the named pattern is used,
the same code is generated from the named pattern as from the
expander. Source code can be shrinked, but in this particular case,
forced macroization complicates things more.

Uros.

> ---
> Of course the mode attribute could as well supply the full names.
>
> --- a/gcc/config/i386/i386.md
> +++ b/gcc/config/i386/i386.md
> @@ -5221,13 +5221,9 @@
>      }
>  })
>
> -(define_expand "extendhfdf2"
> -  [(set (match_operand:DF 0 "register_operand")
> -       (float_extend:DF
> -         (match_operand:HF 1 "nonimmediate_operand")))]
> -  "TARGET_AVX512FP16")
> +(define_mode_attr extendhf [(SF "*") (DF "")])
>
> -(define_insn "*extendhf<mode>2"
> +(define_insn "<extendhf>extendhf<mode>2"
>    [(set (match_operand:MODEF 0 "register_operand" "=v")
>          (float_extend:MODEF
>           (match_operand:HF 1 "nonimmediate_operand" "vm")))]
Jan Beulich July 14, 2023, 10:40 a.m. UTC | #2
On 14.07.2023 12:10, Uros Bizjak wrote:
> On Fri, Jul 14, 2023 at 11:44 AM Jan Beulich <jbeulich@suse.com> wrote:
>>
>> The corresponding insn serves this purpose quite fine, and leads to
>> slightly less (generated) code. All we need is the insn to not have a
>> leading * in its name, while retaining that * for "extendhfsf2".
>> Introduce a mode attribute in exchange to achieve that.
>>
>> gcc/
>>
>>         * config/i386/i386.md (extendhfdf2): Delete expander.
>>         (extendhf): New mode attribute.
>>         (*extendhf<mode>2): Use it.
> 
> No, please leave the expander, it is there due to extendhfsf2 that
> prevents effective macroization.

Well, okay then.

> FYI, there is no less generated code when the named pattern is used,
> the same code is generated from the named pattern as from the
> expander. Source code can be shrinked, but in this particular case,
> forced macroization complicates things more.

Hmm, I'm pretty sure I checked and found some reduction.

Jan
diff mbox series

Patch

--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -5221,13 +5221,9 @@ 
     }
 })
 
-(define_expand "extendhfdf2"
-  [(set (match_operand:DF 0 "register_operand")
-	(float_extend:DF
-	  (match_operand:HF 1 "nonimmediate_operand")))]
-  "TARGET_AVX512FP16")
+(define_mode_attr extendhf [(SF "*") (DF "")])
 
-(define_insn "*extendhf<mode>2"
+(define_insn "<extendhf>extendhf<mode>2"
   [(set (match_operand:MODEF 0 "register_operand" "=v")
         (float_extend:MODEF
 	  (match_operand:HF 1 "nonimmediate_operand" "vm")))]