Could you add a testcase to make sure zmmul will generate mul instruction? Liao Shihua <shi...@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 > >