2024-06-01 12:34  Jeff Law <jeffreya...@gmail.com> wrote:
>
>
>
>On 5/30/24 5:38 AM, Xiao Zeng wrote:
>> 1 In the previous patch, the libcall for BF16 was implemented:
>> <https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=8c7cee80eb50792e57d514be1418c453ddd1073e>
>>
>> 2 Riscv provides Zfbfmin extension, which completes the "Scalar BF16 
>> Converts":
>> <https://github.com/riscv/riscv-bfloat16/blob/main/doc/riscv-bfloat16-zfbfmin.adoc>
>>
>> 3 Implemented replacing libcall with Zfbfmin extension instruction.
>>
>> 4 Reused previous testcases in:
>> <https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=8c7cee80eb50792e57d514be1418c453ddd1073e>
>>
>> gcc/ChangeLog:
>>
>> * config/riscv/riscv.cc (riscv_output_move): Handle BFmode move
>> for zfbfmin.
>> * config/riscv/riscv.md (truncsfbf2): New pattern for BFmode.
>> (trunchfbf2): Dotto.
>> (truncdfbf2): Dotto.
>> (trunctfbf2): Dotto.
>> (extendbfsf2): Dotto.
>> (*movhf_hardfloat): Add BFmode.
>> (*mov<mode>_hardfloat): Dotto.
>>
>> gcc/testsuite/ChangeLog:
>>
>> * gcc.target/riscv/zfbfmin-bf16_arithmetic.c: New test.
>> * gcc.target/riscv/zfbfmin-bf16_comparison.c: New test.
>> * gcc.target/riscv/zfbfmin-bf16_float_libcall_convert.c: New test.
>> * gcc.target/riscv/zfbfmin-bf16_integer_libcall_convert.c: New test.
>> ---
>
>>
>
>
>
>> +
>> +;; The conversion of HF/DF/TF to BF needs to be done with SF if there is a
>> +;; chance to generate at least one instruction, otherwise just using
>> +;; libfunc __trunc[h|d|t]fbf2.
>> +(define_expand "trunchfbf2"
>> +  [(set (match_operand:BF    0 "register_operand" "=f")
>> +    (float_truncate:BF
>> +       (match_operand:HF 1 "register_operand" " f")))]
>> +  "TARGET_ZFBFMIN"
>> +  {
>> +    convert_move (operands[0],
>> +      convert_modes (SFmode, HFmode, operands[1], 0), 0);
>> +    DONE;
>> +  }
>> +  [(set_attr "type" "fcvt")
>> +   (set_attr "mode" "BF")])
>I would suggest using a mode iterator to avoid explicit pattern duplication. 

>
>Essentially a mode iterator allows you to specify that the pattern
>should be repeated over a series of modes. 
Yes, this will make the code look more concise and avoid redundancy.

>
>It looks like you've deine a conversion from HF, DF, TF.  
Yes.

>So you define an iterator that includes just those modes. 
Yes.

>You would use the mode iterator rather than BF, DF or TF in your pattern.
Fixed.

>
>That just fixes the mode in the pattern. 
>You also need to have the name automagically adjust as well.  Use <mode> in 
>the name.  so the name
>would be somethig like trunc<mode>bf2. 
Of course, this is necessary.

>
>When you want to reference the mode in code you can do something like
>E_<MODE>mode 
Yes.

>
>And that will map down to HFmode, BFmode, TFmode appropriately.
>
>I suspect you can do something similar for the extension patterns.
>
>In fact, it looks like you did this for the move<mode>hardfloat pattern.
>
>Jeff 
Thank you for Jeff's suggestion. v2 has already been uploaded.
<https://patchwork.sourceware.org/project/gcc/patch/20240601074547.80271-1-zengx...@eswincomputing.com/>

Thanks
Xiao Zeng

Reply via email to