In the origin, cc1 registers rvv builtins with turn on all sub vector
extensions but lto not.  It makes lto use the asynchronous DECL_MD_FUNCTION_CODE
from lto-objects.

Example:
riscv64-unknown-elf-gcc -flto gcc/testsuite/gcc.target/riscv/rvv/base/bug-10.c
-O2 -march=rv64gcv

bug-10.c: In function 'main':
bug-10.c:10:3: error: invalid argument to built-in function
   10 |   __riscv_vse32_v_i32m1 (d, vd, 1);

gcc/ChangeLog:

        * config/riscv/riscv-c.cc
        (riscv_pragma_intrinsic_flags_pollute): Move to
        riscv-vector-builtins.cc
        (riscv_pragma_intrinsic_flags_restore): Ditto
        (riscv_ext_version_value): Remove flags initialization.
        * config/riscv/riscv-vector-builtins.cc:
        (reinit_builtins): Remove handle_pragma_vector in lto_p.
        (riscv_pragma_intrinsic_flags_pollute): Cut from riscv-c.cc.
        (riscv_pragma_intrinsic_flags_restore): Ditto.
        (riscv_vector_push_setting): Backup flags.
        (riscv_vector_pop_setting): Restore flags.
        (handle_pragma_vector): Intialize flags for registering
        builtins.

Attachment: 0003-RISC-V-Fix-rvv-builtin-function-groups-registration-.patch
Description: Binary data

Reply via email to