* [PATCH] RISC-V: Fix missing boolean_expression in zmmul extension
@ 2024-05-23 10:45 Liao Shihua
2024-05-23 13:12 ` Kito Cheng
0 siblings, 1 reply; 2+ messages in thread
From: Liao Shihua @ 2024-05-23 10:45 UTC (permalink / raw)
To: gcc-patches; +Cc: kito.cheng, jeffreyalaw, jiawei, Liao Shihua
Missing boolean_expression TARGET_ZMMUL in riscv_rtx_costs() casuse different instructions when multiplying an integer with a constant.
( https://github.com/riscv-collab/riscv-gnu-toolchain/issues/1482 )
int foo(int *ib) {
*ib = *ib * 33938;
return 0;
}
rv64im:
lw a4,0(a1)
li a5,32768
addiw a5,a5,1170
mulw a5,a5,a4
sw a5,0(a1)
ret
rv64i_zmmul:
lw a4,0(a1)
slliw a5,a4,5
addw a5,a5,a4
slliw a5,a5,3
addw a5,a5,a4
slliw a5,a5,3
addw a5,a5,a4
slliw a5,a5,3
addw a5,a5,a4
slliw a5,a5,1
sw a5,0(a1)
ret
Fixed.
gcc/ChangeLog:
* config/riscv/riscv.cc (riscv_rtx_costs): Add TARGET_ZMMUL.
---
gcc/config/riscv/riscv.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index 85df5b7ab49..580ae007181 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -3753,7 +3753,7 @@ riscv_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno ATTRIBUTE_UN
case MULT:
if (float_mode_p)
*total = tune_param->fp_mul[mode == DFmode];
- else if (!TARGET_MUL)
+ else if (!(TARGET_MUL || TARGET_ZMMUL))
/* Estimate the cost of a library call. */
*total = COSTS_N_INSNS (speed ? 32 : 6);
else if (GET_MODE_SIZE (mode).to_constant () > UNITS_PER_WORD)
--
2.34.1
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] RISC-V: Fix missing boolean_expression in zmmul extension
2024-05-23 10:45 [PATCH] RISC-V: Fix missing boolean_expression in zmmul extension Liao Shihua
@ 2024-05-23 13:12 ` Kito Cheng
0 siblings, 0 replies; 2+ messages in thread
From: Kito Cheng @ 2024-05-23 13:12 UTC (permalink / raw)
To: Liao Shihua; +Cc: GCC Patches, Jeff Law, jiawei
[-- Attachment #1: Type: text/plain, Size: 1838 bytes --]
Could you add a testcase to make sure zmmul will generate mul instruction?
Liao Shihua <shihua@iscas.ac.cn> 於 2024年5月23日 週四 18:48 寫道:
> Missing boolean_expression TARGET_ZMMUL in riscv_rtx_costs() casuse
> different instructions when multiplying an integer with a constant.
> ( https://github.com/riscv-collab/riscv-gnu-toolchain/issues/1482 )
>
> int foo(int *ib) {
> *ib = *ib * 33938;
> return 0;
> }
>
> rv64im:
> lw a4,0(a1)
> li a5,32768
> addiw a5,a5,1170
> mulw a5,a5,a4
> sw a5,0(a1)
> ret
>
> rv64i_zmmul:
> lw a4,0(a1)
> slliw a5,a4,5
> addw a5,a5,a4
> slliw a5,a5,3
> addw a5,a5,a4
> slliw a5,a5,3
> addw a5,a5,a4
> slliw a5,a5,3
> addw a5,a5,a4
> slliw a5,a5,1
> sw a5,0(a1)
> ret
>
> Fixed.
>
> gcc/ChangeLog:
>
> * config/riscv/riscv.cc (riscv_rtx_costs): Add TARGET_ZMMUL.
>
> ---
> gcc/config/riscv/riscv.cc | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
> index 85df5b7ab49..580ae007181 100644
> --- a/gcc/config/riscv/riscv.cc
> +++ b/gcc/config/riscv/riscv.cc
> @@ -3753,7 +3753,7 @@ riscv_rtx_costs (rtx x, machine_mode mode, int
> outer_code, int opno ATTRIBUTE_UN
> case MULT:
> if (float_mode_p)
> *total = tune_param->fp_mul[mode == DFmode];
> - else if (!TARGET_MUL)
> + else if (!(TARGET_MUL || TARGET_ZMMUL))
> /* Estimate the cost of a library call. */
> *total = COSTS_N_INSNS (speed ? 32 : 6);
> else if (GET_MODE_SIZE (mode).to_constant () > UNITS_PER_WORD)
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-05-23 13:12 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-23 10:45 [PATCH] RISC-V: Fix missing boolean_expression in zmmul extension Liao Shihua
2024-05-23 13:12 ` Kito Cheng
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).