https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112674
Bug ID: 112674 Summary: [14 Regression] Compare-debug failure after recent change on c6x Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: debug Assignee: unassigned at gcc dot gnu.org Reporter: law at gcc dot gnu.org Target Milestone: --- This patch: commit 6bf66276e3e41d5d92f7b7260e98b6a111653805 Author: Richard Biener <rguent...@suse.de> Date: Wed Nov 22 11:10:41 2023 +0100 tree-optimization/112344 - wrong final value replacement When performing final value replacement chrec_apply that's used to compute the overall effect of niters to a CHREC doesn't consider that the overall increment of { -2147483648, +, 2 } doesn't fit in a signed integer when the loop iterates until the value of the IV of 20. The following fixes this mistake, carrying out the multiply and add in an unsigned type instead, avoiding undefined overflow and thus later miscompilation by path range analysis. PR tree-optimization/112344 * tree-chrec.cc (chrec_apply): Perform the overall increment calculation and increment in an unsigned type. * gcc.dg/torture/pr112344.c: New testcase. Is causing a compare-debug failure on the c6x port: c6x-sim: gcc.dg/pr65779.c (test for excess errors) I haven't dug into this any deeper. It could well be a c6x bug in the end. While it may sound similar to pr109777, pr109777 has been debugged far enough to lay the blame on the bfin backend.