[gcc r16-5356] [PR rtl-optimization/122575] Fix mode on optimized IOR comparison

Jeff Law law@gcc.gnu.org
Mon Nov 17 17:50:18 GMT 2025


https://gcc.gnu.org/g:2e1d74b27283b5c20b0e1611c358dbf4e62db54f

commit r16-5356-g2e1d74b27283b5c20b0e1611c358dbf4e62db54f
Author: Jeff Law <jlaw@ventanamicro.com>
Date:   Mon Nov 17 10:40:46 2025 -0700

    [PR rtl-optimization/122575] Fix mode on optimized IOR comparison
    
    As Andrew P recognized, we were using the wrong mode when simplifying certain
    equality tests like (eq (ior (ne x 0 (y)).  Sam took Andrew's suggestion and
    verified it fixed the problem he was stumbling over.
    
    So even though I haven't recreated the problem, I'm reasonably confident we've
    got the right fix.  I've bootstrapped and regression tested on x86.
    
            PR rtl-optimization/122575
    gcc/
            * simplify-rtx.cc (simplify_context::simplify_relational_operation_1):
            Use correct mode for simplified IOR expression inside equality
            conditional.

Diff:
---
 gcc/simplify-rtx.cc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc
index 2f7ad2de1d19..86baeb06ad48 100644
--- a/gcc/simplify-rtx.cc
+++ b/gcc/simplify-rtx.cc
@@ -6500,10 +6500,10 @@ simplify_context::simplify_relational_operation_1 (rtx_code code,
 	  /* only enters if op1 is 0 */
 	  /* Verify IOR operand is NE */
 	  && GET_CODE (XEXP (op0, 0)) == NE
-	  /* Verfiy second NE operand is 0 */
+	  /* Verify second NE operand is 0 */
 	  && XEXP (XEXP (op0, 0), 1) == CONST0_RTX (mode))
 	{
-	  rtx t = gen_rtx_IOR (mode, XEXP (XEXP (op0, 0), 0), XEXP (op0, 1));
+	  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));
 	  return t;
 	}


More information about the Gcc-cvs mailing list