[Bug rtl-optimization/123114] [16 Regression] ICE on valid code at -O{s, 2, 3} with -fno-tree-vrp on x86_64-linux-gnu: in decompose, at rtl.h:2330 since r16-5356
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Dec 13 22:16:52 GMT 2025
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123114
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Full untested patch:
2025-12-13 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/123114
* simplify-rtx.cc (simplify_context::simplify_relational_operation):
Verify XEXP (XEXP (op0, 0), 0) mode and use CONST0_RTX (cmp_mode)
instead of CONST0_RTX (mode).
* gcc.dg/pr123114.c: New test.
--- gcc/simplify-rtx.cc.jj 2025-12-09 10:18:55.437229339 +0100
+++ gcc/simplify-rtx.cc 2025-12-13 23:04:14.672186706 +0100
@@ -6509,8 +6509,9 @@ simplify_context::simplify_relational_op
/* only enters if op1 is 0 */
/* Verify IOR operand is NE */
&& GET_CODE (XEXP (op0, 0)) == NE
+ && GET_MODE (XEXP (XEXP (op0, 0), 0)) == cmp_mode
/* Verify second NE operand is 0 */
- && XEXP (XEXP (op0, 0), 1) == CONST0_RTX (mode))
+ && XEXP (XEXP (op0, 0), 1) == CONST0_RTX (cmp_mode))
{
rtx t = gen_rtx_IOR (cmp_mode, XEXP (XEXP (op0, 0), 0), XEXP (op0,
1));
t = gen_rtx_fmt_ee (code, mode, t, CONST0_RTX (mode));
--- gcc/testsuite/gcc.dg/pr123114.c.jj 2025-12-13 23:13:53.528178273 +0100
+++ gcc/testsuite/gcc.dg/pr123114.c 2025-12-13 23:13:25.964657498 +0100
@@ -0,0 +1,21 @@
+/* PR rtl-optimization/123114 */
+/* { dg-do compile } */
+/* { dg-options "-O3 -fno-tree-vrp" } */
+
+volatile int a, b, g;
+unsigned short e;
+int f;
+
+int
+main ()
+{
+ int c, d;
+ while (a)
+ {
+ c = e = b << 2;
+ d = f;
+ g = (c <= 0 && d) || c ? 0 : d;
+ a = g;
+ }
+ return 0;
+}
Going to test on x86_64-linux/i686-linux momentarily.
More information about the Gcc-bugs
mailing list