This patch fixes following ICE on full coverage testing of RV32. Running target riscv-sim/-march=rv32gc_zve32f/-mabi=ilp32d/-mcmodel=medlow/--param=riscv-autovec-lmul=dynamic FAIL: gcc.c-torture/compile/930120-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) Running target riscv-sim/-march=rv32gc_zve32f/-mabi=ilp32d/-mcmodel=medlow/--param=riscv-autovec-lmul=dynamic/--param=riscv-autovec-preference=fixed-vlmax FAIL: gcc.c-torture/compile/930120-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) Running target riscv-sim/-march=rv32gc_zve32f/-mabi=ilp32d/-mcmodel=medlow/--param=riscv-autovec-lmul=m2 FAIL: gcc.c-torture/compile/930120-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/pr89369.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/pr89369.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) Running target riscv-sim/-march=rv32gc_zve32f/-mabi=ilp32d/-mcmodel=medlow/--param=riscv-autovec-lmul=m2/--param=riscv-autovec-preference=fixed-vlmax FAIL: gcc.c-torture/compile/930120-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/pr89369.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/pr89369.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) Running target riscv-sim/-march=rv32gc_zve32f/-mabi=ilp32d/-mcmodel=medlow/--param=riscv-autovec-lmul=m4 FAIL: gcc.c-torture/compile/930120-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) Running target riscv-sim/-march=rv32gc_zve32f/-mabi=ilp32d/-mcmodel=medlow/--param=riscv-autovec-lmul=m4/--param=riscv-autovec-preference=fixed-vlmax FAIL: gcc.c-torture/compile/930120-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) Running target riscv-sim/-march=rv32gc_zve32f/-mabi=ilp32d/-mcmodel=medlow/--param=riscv-autovec-lmul=m8 FAIL: gcc.c-torture/compile/930120-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) Running target riscv-sim/-march=rv32gc_zve32f/-mabi=ilp32d/-mcmodel=medlow/--param=riscv-autovec-lmul=m8/--param=riscv-autovec-preference=fixed-vlmax FAIL: gcc.c-torture/compile/930120-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/930120-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/compile/pr42196-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/bswap-1.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) Running target riscv-sim/-march=rv32gc_zve32f/-mabi=ilp32d/-mcmodel=medlow/--param=riscv-autovec-preference=fixed-vlmax FAIL: gcc.c-torture/execute/20050316-2.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-2.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O1 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O2 (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -O3 -g (internal compiler error: in emit_move_insn, at expr.cc:4606) FAIL: gcc.c-torture/execute/20050316-3.c -Os (internal compiler error: in emit_move_insn, at expr.cc:4606)
These ICEs happens on: Move (subreg:DI (reg:RVVM2SI 141) 0) to (reg/v:DI 135 [ u ]) on RV32 system. Before this patch: bug.c:24:11: internal compiler error: in emit_move_insn, at expr.cc:4607 24 | r = bar (u); | ^~~~~~~ 0x12bd034 emit_move_insn(rtx_def*, rtx_def*) ../../../../gcc/gcc/expr.cc:4606 0x1c98001 riscv_legitimize_move(machine_mode, rtx_def*, rtx_def*) ../../../../gcc/gcc/config/riscv/riscv.cc:2703 0x24ed627 gen_movdi(rtx_def*, rtx_def*) ../../../../gcc/gcc/config/riscv/riscv.md:2105 0x10dca22 rtx_insn* insn_gen_fn::operator()<rtx_def*, rtx_def*>(rtx_def*, rtx_def*) const ../../../../gcc/gcc/recog.h:441 0x12bcb01 emit_move_insn_1(rtx_def*, rtx_def*) ../../../../gcc/gcc/expr.cc:4551 0x12bd91a emit_move_insn(rtx_def*, rtx_def*) ../../../../gcc/gcc/expr.cc:4721 0x128e077 store_bit_field_1 ../../../../gcc/gcc/expmed.cc:808 0x1290016 store_bit_field(rtx_def*, poly_int<2u, unsigned long>, poly_int<2u, unsigned long>, poly_int<2u, unsigned long>, poly_int<2u, unsigned long>, machine_mode, rtx_def*, bool, bool) ../../../../gcc/gcc/expmed.cc:1194 0x12cb40b store_field ../../../../gcc/gcc/expr.cc:8230 0x12c4426 expand_assignment(tree_node*, tree_node*, bool) ../../../../gcc/gcc/expr.cc:6290 0x111032f expand_gimple_stmt_1 ../../../../gcc/gcc/cfgexpand.cc:3966 0x11106ed expand_gimple_stmt ../../../../gcc/gcc/cfgexpand.cc:4064 0x1118d72 expand_gimple_basic_block ../../../../gcc/gcc/cfgexpand.cc:6120 0x111aa2c execute ../../../../gcc/gcc/cfgexpand.cc:6855 The solution is quite simple, we just need to extract index = 1 element to the highpart of the DImode register on RV32 system since DImode register consists of 2 scalar registers. After this patch: vsetivli zero,2,e32,m2,ta,ma vle32.v v2,0(a0) vslidedown.vi v4,v2,1 vmv.x.s a0,v2 vmv.x.s a1,v4 ret Tested on full coverage testing of both RV32 and RV64 no regression. Committed as it is an obvious bug fix. gcc/ChangeLog: * config/riscv/riscv.cc (riscv_legitimize_move): Fix ICE. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/bug-8.c: New test. --- gcc/config/riscv/riscv.cc | 24 +++++++++----- .../gcc.target/riscv/rvv/autovec/bug-8.c | 31 +++++++++++++++++++ 2 files changed, 47 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-8.c diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 8ae65760b6e..d9b45f17a1b 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -2693,14 +2693,22 @@ riscv_legitimize_move (machine_mode mode, rtx dest, rtx src) if (i == 1) { - rtx tmp = expand_binop (Pmode, ashl_optab, - gen_lowpart (Pmode, result), - gen_int_mode (32, Pmode), NULL_RTX, 0, - OPTAB_DIRECT); - rtx tmp2 = expand_binop (Pmode, ior_optab, tmp, int_reg, - NULL_RTX, 0, - OPTAB_DIRECT); - emit_move_insn (int_reg, tmp2); + if (UNITS_PER_WORD < mode_size) + /* If Pmode = SImode and mode = DImode, we just need to + extract element of index = 1 from the vector and move it + into the highpart of the DEST since DEST consists of 2 + scalar registers. */ + emit_move_insn (gen_highpart (smode, int_reg), result); + else + { + rtx tmp = expand_binop (Pmode, ashl_optab, + gen_lowpart (Pmode, result), + gen_int_mode (32, Pmode), + NULL_RTX, 0, OPTAB_DIRECT); + rtx tmp2 = expand_binop (Pmode, ior_optab, tmp, int_reg, + NULL_RTX, 0, OPTAB_DIRECT); + emit_move_insn (int_reg, tmp2); + } } } diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-8.c new file mode 100644 index 00000000000..07b7e1669fe --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-8.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv32gc_zve32f -mabi=ilp32d -O3 --param=riscv-autovec-lmul=m2 --param=riscv-autovec-preference=fixed-vlmax" } */ + +union U +{ + double d; + __complex__ int c; +}; + +double gd; +extern double bar (union U); + +double foo (int b, double d, int c1, int c2) +{ + union U u; + double r; + + if (b) + { + u.d = d; + r = u.d; + } + else + { + __real__ u.c = c1; + __imag__ u.c = c2; + r = bar (u); + } + + return r; +} -- 2.36.3