]> git.ipfire.org Git - thirdparty/gcc.git/commit
RISC-V: Fix missing boolean_expression in zmmul extension
authorLiao Shihua <shihua@iscas.ac.cn>
Fri, 24 May 2024 05:03:57 +0000 (13:03 +0800)
committerKito Cheng <kito.cheng@sifive.com>
Mon, 27 May 2024 06:50:18 +0000 (14:50 +0800)
commit06bb125521dec5648b725ddee4345b00decfdc77
treeb71cc96153674de24df58991639158eb7414d87e
parent314448fc65f40c98ee8bc02dfb54ea49d2f2c60d
RISC-V: Fix missing boolean_expression in zmmul extension

Update v1->v2
    Add testcase for this patch.

Missing boolean_expression TARGET_ZMMUL in riscv_rtx_costs() cause 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/testsuite/ChangeLog:

* gcc.target/riscv/zmmul-3.c: New test.
gcc/config/riscv/riscv.cc
gcc/testsuite/gcc.target/riscv/zmmul-3.c [new file with mode: 0644]