Bug 113404 - ICE: in to_constant, at poly-int.h:588 with -march=rv64gcv -mbig-endian --param=riscv-vector-abi
Summary: ICE: in to_constant, at poly-int.h:588 with -march=rv64gcv -mbig-endian --par...
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 14.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: ice-on-valid-code
Depends on:
Blocks:
 
Reported: 2024-01-15 18:24 UTC by Zdenek Sojka
Modified: 2024-07-02 17:28 UTC (History)
1 user (show)

See Also:
Host: x86_64-pc-linux-gnu
Target: riscv64-unknown-linux-gnu
Build:
Known to work:
Known to fail: 14.0
Last reconfirmed:


Attachments
reduced testcase (85 bytes, text/plain)
2024-01-15 18:24 UTC, Zdenek Sojka
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Zdenek Sojka 2024-01-15 18:24:10 UTC
Created attachment 57088 [details]
reduced testcase

This has been reduced from gcc.target/riscv/rvv/base/float-point-dynamic-frm-66.c

Compiler output:
$ riscv64-unknown-linux-gnu-gcc -march=rv64gcv -mbig-endian --param=riscv-vector-abi a-float-point-dynamic-frm-66.i
a-float-point-dynamic-frm-66.i: In function 'test_float_point_dynamic_frm':
a-float-point-dynamic-frm-66.i:2:14: warning: ABI for the vector type is currently in experimental stage and may changes in the upcoming version of GCC. [-Wpsabi]
    2 | vfloat32m1_t test_float_point_dynamic_frm(vfloat32m1_t) {}
      |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
during RTL pass: expand
a-float-point-dynamic-frm-66.i:2:14: internal compiler error: in to_constant, at poly-int.h:588
0xab4c2c poly_int<2u, unsigned short>::to_constant() const
        /repo/gcc-trunk/gcc/poly-int.h:588
0xab4de1 poly_int<2u, unsigned short>::to_constant() const
        /repo/gcc-trunk/gcc/tree.h:4055
0xab4de1 default_function_arg_padding(machine_mode, tree_node const*)
        /repo/gcc-trunk/gcc/targhooks.cc:844
0x12e2327 locate_and_pad_parm(machine_mode, tree_node*, int, int, int, tree_node*, args_size*, locate_and_pad_arg_data*)
        /repo/gcc-trunk/gcc/function.cc:4061
0x12e2aca assign_parm_find_entry_rtl
        /repo/gcc-trunk/gcc/function.cc:2614
0x12e2c89 assign_parms
        /repo/gcc-trunk/gcc/function.cc:3693
0x12e59df expand_function_start(tree_node*)
        /repo/gcc-trunk/gcc/function.cc:5152
0x112fafb execute
        /repo/gcc-trunk/gcc/cfgexpand.cc:6739
Please submit a full bug report, with preprocessed source (by using -freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

$ riscv64-unknown-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=/repo/gcc-trunk/binary-latest-riscv64/bin/riscv64-unknown-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/repo/gcc-trunk/binary-trunk-r14-7255-20240115165927-g6c703b4eb68-checking-yes-rtl-df-extra-riscv64/bin/../libexec/gcc/riscv64-unknown-linux-gnu/14.0.1/lto-wrapper
Target: riscv64-unknown-linux-gnu
Configured with: /repo/gcc-trunk//configure --enable-languages=c,c++ --enable-valgrind-annotations --disable-nls --enable-checking=yes,rtl,df,extra --with-cloog --with-ppl --with-isl --with-isa-spec=2.2 --with-sysroot=/usr/riscv64-unknown-linux-gnu --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=riscv64-unknown-linux-gnu --with-ld=/usr/bin/riscv64-unknown-linux-gnu-ld --with-as=/usr/bin/riscv64-unknown-linux-gnu-as --disable-multilib --disable-libstdcxx-pch --prefix=/repo/gcc-trunk//binary-trunk-r14-7255-20240115165927-g6c703b4eb68-checking-yes-rtl-df-extra-riscv64
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 14.0.1 20240115 (experimental) (GCC)
Comment 1 GCC Commits 2024-01-16 03:20:45 UTC
The master branch has been updated by Pan Li <panli@gcc.gnu.org>:

https://gcc.gnu.org/g:5134d3074ad7a462b4c8e2c0bc904b5ba40b7373

commit r14-7271-g5134d3074ad7a462b4c8e2c0bc904b5ba40b7373
Author: Juzhe-Zhong <juzhe.zhong@rivai.ai>
Date:   Tue Jan 16 11:04:49 2024 +0800

    RISC-V: Report Sorry when users enable RVV in big-endian mode [PR113404]
    
    As PR113404 mentioned: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113404
    
    We have ICE when we enable RVV in big-endian mode:
    
    during RTL pass: expand
    a-float-point-dynamic-frm-66.i:2:14: internal compiler error: in to_constant, at poly-int.h:588
    0xab4c2c poly_int<2u, unsigned short>::to_constant() const
            /repo/gcc-trunk/gcc/poly-int.h:588
    0xab4de1 poly_int<2u, unsigned short>::to_constant() const
            /repo/gcc-trunk/gcc/tree.h:4055
    0xab4de1 default_function_arg_padding(machine_mode, tree_node const*)
            /repo/gcc-trunk/gcc/targhooks.cc:844
    0x12e2327 locate_and_pad_parm(machine_mode, tree_node*, int, int, int, tree_node*, args_size*, locate_and_pad_arg_data*)
            /repo/gcc-trunk/gcc/function.cc:4061
    0x12e2aca assign_parm_find_entry_rtl
            /repo/gcc-trunk/gcc/function.cc:2614
    0x12e2c89 assign_parms
            /repo/gcc-trunk/gcc/function.cc:3693
    0x12e59df expand_function_start(tree_node*)
            /repo/gcc-trunk/gcc/function.cc:5152
    0x112fafb execute
            /repo/gcc-trunk/gcc/cfgexpand.cc:6739
    
    Report users that we don't support RVV in big-endian mode for the following reasons:
    1. big-endian in RISC-V is pretty rare case.
    2. We didn't test RVV in big-endian and we don't have enough time to test it since it's stage 4 now.
    
    Naive disallow RVV in big-endian.
    
    Tested no regression, ok for trunk ?
    
    gcc/ChangeLog:
    
            PR target/113404
            * config/riscv/riscv.cc (riscv_override_options_internal): Report sorry
            for RVV in big-endian mode.
    
    gcc/testsuite/ChangeLog:
    
            PR target/113404
            * gcc.target/riscv/rvv/base/big_endian-1.c: New test.
            * gcc.target/riscv/rvv/base/big_endian-2.c: New test.
Comment 2 Jeffrey A. Law 2024-07-02 17:28:03 UTC
Fixed on the trunk.