gcc - GNU Compiler Collection (original) (raw)
| author | Xi Ruoyao xry111@xry111.site | 2026-04-07 04:03:09 +0800 |
|---|---|---|
| committer | Xi Ruoyao xry111@xry111.site | 2026-04-09 09:19:15 +0800 |
| commit | 7f1e96ee025ab481cf0893b3a4ce82909b22d8f9 (patch) | |
| tree | 77281cc1d8c62966e03bd682ac31bcbb5336efa0 | |
| parent | Daily bump. (diff) |
ifcvt: reject use of ctrap post reload [PR 105192]HEADtrunkmaster
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.
| -rw-r--r-- | gcc/ifcvt.cc | 2 |
|---|---|---|
| -rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr105192.c | 9 |
2 files changed, 10 insertions, 1 deletions
| diff --git a/gcc/ifcvt.cc b/gcc/ifcvt.ccindex 7f5af2ca9159..c151146c1b22 100644--- a/gcc/ifcvt.cc+++ b/gcc/ifcvt.cc | |||
|---|---|---|---|
| @@ -5180,7 +5180,7 @@ find_if_header (basic_block test_bb, int pass) | |||
| 5180 | && cond_exec_find_if_block (&ce_info)) | 5180 | && cond_exec_find_if_block (&ce_info)) |
| 5181 | goto success; | 5181 | goto success; |
| 5182 | 5182 | ||
| 5183 | if (targetm.have_trap () | 5183 | if (!reload_completed && targetm.have_trap () |
| 5184 | && optab_handler (ctrap_optab, word_mode) != CODE_FOR_nothing | 5184 | && optab_handler (ctrap_optab, word_mode) != CODE_FOR_nothing |
| 5185 | && find_cond_trap (test_bb, then_edge, else_edge)) | 5185 | && find_cond_trap (test_bb, then_edge, else_edge)) |
| 5186 | goto success; | 5186 | goto success; |
| diff --git a/gcc/testsuite/gcc.c-torture/compile/pr105192.c b/gcc/testsuite/gcc.c-torture/compile/pr105192.cnew file mode 100644index 000000000000..0cc615052182--- /dev/null+++ b/gcc/testsuite/gcc.c-torture/compile/pr105192.c | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | /* { dg-additional-options "-fno-if-conversion -fharden-compares" } */ | ||
| 2 | |||
| 3 | int a, b; | ||
| 4 | |||
| 5 | void | ||
| 6 | foo (void) | ||
| 7 | { | ||
| 8 | b = a % 0 > 0; | ||
| 9 | } |