[Bug target/112778] ICE in ppc64-linux-gnu crosscompiler in store_by_pieces since r14-5946-g1ff6d9f7428b06
linkw at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Dec 1 06:46:18 GMT 2023
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112778
Kewen Lin <linkw at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |aoliva at gcc dot gnu.org,
| |bergner at gcc dot gnu.org,
| |linkw at gcc dot gnu.org,
| |segher at gcc dot gnu.org
Ever confirmed|0 |1
Status|UNCONFIRMED |NEW
Summary|ICE in ppc64-linux-gnu |ICE in ppc64-linux-gnu
|crosscompiler in |crosscompiler in
|store_by_pieces, at |store_by_pieces since
|expr.cc:1820 |r14-5946-g1ff6d9f7428b06
Keywords|needs-bisection |
Last reconfirmed| |2023-12-01
--- Comment #1 from Kewen Lin <linkw at gcc dot gnu.org> ---
Confirmed, thanks for reporting, it starts from r14-5946-g1ff6d9f7428b06.
It looks function try_store_by_multiple_pieces has the wrong assumption. For
the code "memset (buf, 'v', 3)", it checks
+ if (max_bits < orig_max_bits
+ && xlenest + blksize >= xlenest
+ && can_store_by_pieces (xlenest + blksize,
+ builtin_memset_read_str,
+ &valc, align, true))
, succeeds and breaks. later it goes with blksize:
to = store_by_pieces (to, blksize,
constfun, constfundata,
align, true,
max_len != 0 ? RETURN_END : RETURN_BEGIN);
and fails at targetm.use_by_pieces_infrastructure_p assertion.
It's concluded that can_store_by_pieces (xlenest + blksize, ...) doesn't
necessarily means can_store_by_pieces (blksize, ...).
More information about the Gcc-bugs
mailing list