On 9/5/23 06:08, Tsukasa OI wrote:
From: Tsukasa OI <research_tra...@irq.a4lg.com>

Large constant cons and/or alt will trigger ICEs building GCC target
libraries (libgomp and libatomic) when the 'Zicond' extension is enabled.

For instance, zicond-ice-2.c (new test case in this commit) will cause
an ICE when SOME_NUMBER is 0x1000 or larger.  While opposite numbers
corresponding cons/alt (two temp2 variables) are checked, cons/alt
themselves are not checked and causing 2 ICEs building
GCC target libraries as of this writing:

1.  gcc/libatomic/config/posix/lock.c
2.  gcc/libgomp/fortran.c

Coercing a large value into a register will fix the issue.

It also coerce a large cons into a register on "imm, imm" case (the author
could not reproduce but possible to cause an ICE).

gcc/ChangeLog:

        * config/riscv/riscv.cc (riscv_expand_conditional_move): Force
        large constant cons/alt into a register.

gcc/testsuite/ChangeLog:

        * gcc.target/riscv/zicond-ice-2.c: New test.  This is based on
        an ICE at libat_lock_n func on gcc/libatomic/config/posix/lock.c
        but heavily minimized.
"New test." is sufficient.  No need to change it, just a note going forward.

OK.  Thanks for taking care of this.

jeff

Reply via email to