https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110897
Bug ID: 110897 Summary: RISC-V: Fail to vectorize shift Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: juzhe.zhong at rivai dot ai Target Milestone: --- Since this commit: https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=29370f1387274ad5a35a020db6a5d06c0324e6c1 causes RISCV a bunch of fails related to shift vectorization: FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsra\\.wv 6 FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsrl\\.wv 5 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv32gcv.c scan-assembler-times \\tvsrl\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv32gcv.c scan-assembler-times \\tvsra\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv64gcv.c scan-assembler-times \\tvsrl\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv64gcv.c scan-assembler-times \\tvsra\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsra\\.wv 6 FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsrl\\.wv 5 FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsra\\.wv 6 FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsrl\\.wv 5 FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsra\\.wv 6 FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsrl\\.wv 5 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv32gcv.c scan-assembler-times \\tvsrl\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv32gcv.c scan-assembler-times \\tvsra\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv64gcv.c scan-assembler-times \\tvsrl\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv64gcv.c scan-assembler-times \\tvsra\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsra\\.wv 6 FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsrl\\.wv 5 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv32gcv.c scan-assembler-times \\tvsrl\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv32gcv.c scan-assembler-times \\tvsra\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv64gcv.c scan-assembler-times \\tvsrl\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv64gcv.c scan-assembler-times \\tvsra\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsra\\.wv 6 FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsrl\\.wv 5 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv32gcv.c scan-assembler-times \\tvsrl\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv32gcv.c scan-assembler-times \\tvsra\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv64gcv.c scan-assembler-times \\tvsrl\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv64gcv.c scan-assembler-times \\tvsra\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv32gcv.c scan-assembler-times \\tvsrl\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv32gcv.c scan-assembler-times \\tvsra\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsra\\.wv 6 FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsrl\\.wv 5 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv64gcv.c scan-assembler-times \\tvsrl\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv64gcv.c scan-assembler-times \\tvsra\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv32gcv.c scan-assembler-times \\tvsrl\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv32gcv.c scan-assembler-times \\tvsra\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv64gcv.c scan-assembler-times \\tvsrl\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/shift-rv64gcv.c scan-assembler-times \\tvsra\\.vv 4 FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsra\\.wv 6 FAIL: gcc.target/riscv/rvv/autovec/binop/narrow-1.c scan-assembler-times \\tvnsrl\\.wv 5 When trying this simple case: #define TEST1_TYPE(TYPE) \ __attribute__((noipa)) \ void vshl_##TYPE (TYPE *dst, TYPE *a, TYPE *b, int n) \ { \ for (int i = 0; i < n; i++) \ dst[i] = a[i] << b[i]; \ } #define TEST2_TYPE(TYPE) \ __attribute__((noipa)) \ void vshiftr_##TYPE (TYPE *dst, TYPE *a, TYPE *b, int n) \ { \ for (int i = 0; i < n; i++) \ dst[i] = a[i] >> b[i]; \ } #define TEST_ALL() \ TEST2_TYPE(uint16_t) \ TEST_ALL() rvv.c:23:1: missed: couldn't vectorize loop rvv.c:23:1: missed: not vectorized: relevant stmt not supported: patt_29 = _4 >> patt_30; It failed to vectorize. Could you tell me how to adapt RISC-V port to make it vectorized ? Thanks.