https://gcc.gnu.org/g:a26a9a2665ba10b2ecc2413c69c29cf96e0d5908

commit r14-12512-ga26a9a2665ba10b2ecc2413c69c29cf96e0d5908
Author: Xi Ruoyao <[email protected]>
Date:   Tue Apr 7 04:03:09 2026 +0800

    ifcvt: reject use of ctrap post reload [PR 105192]
    
    The ctrap expanders of several targets can end up creating pseudos.  And
    it would be really counter-intuitive to disallow a define_expand to
    generate pseudos.  So don't invoke the expander post reload.
    
            PR target/105192
    
    gcc/
    
            * ifcvt.cc (find_if_header): Don't attempt to use ctrap expander
            after reload.
    
    gcc/testsuite/
    
            * gcc.c-torture/compile/pr105192.c: New test.
    
    (cherry picked from commit 7f1e96ee025ab481cf0893b3a4ce82909b22d8f9)

Diff:
---
 gcc/ifcvt.cc                                   | 2 +-
 gcc/testsuite/gcc.c-torture/compile/pr105192.c | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/gcc/ifcvt.cc b/gcc/ifcvt.cc
index 6b9f5c0a6b71..5698f807e90f 100644
--- a/gcc/ifcvt.cc
+++ b/gcc/ifcvt.cc
@@ -4930,7 +4930,7 @@ find_if_header (basic_block test_bb, int pass)
       && cond_exec_find_if_block (&ce_info))
     goto success;
 
-  if (targetm.have_trap ()
+  if (!reload_completed && targetm.have_trap ()
       && optab_handler (ctrap_optab, word_mode) != CODE_FOR_nothing
       && find_cond_trap (test_bb, then_edge, else_edge))
     goto success;
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr105192.c 
b/gcc/testsuite/gcc.c-torture/compile/pr105192.c
new file mode 100644
index 000000000000..0cc615052182
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr105192.c
@@ -0,0 +1,9 @@
+/* { dg-additional-options "-fno-if-conversion -fharden-compares" } */
+
+int a, b;
+
+void
+foo (void)
+{
+  b = a % 0 > 0;
+}

Reply via email to