public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-5001] Expand: Checking available optabs for scalar modes in by pieces operations
@ 2023-10-30 3:03 HaoChen Gui
0 siblings, 0 replies; only message in thread
From: HaoChen Gui @ 2023-10-30 3:03 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:8111b5c23bd14f80607bd35af58ec31e38a0378e
commit r14-5001-g8111b5c23bd14f80607bd35af58ec31e38a0378e
Author: Haochen Gui <guihaoc@gcc.gnu.org>
Date: Mon Oct 30 10:59:51 2023 +0800
Expand: Checking available optabs for scalar modes in by pieces operations
The former patch (f08ca5903c7) examines the scalar modes by target
hook scalar_mode_supported_p. It causes some i386 regression cases
as XImode and OImode are not enabled in i386 target function. This
patch examines the scalar mode by checking if the corresponding optabs
are available for the mode.
gcc/
PR target/111449
* expr.cc (qi_vector_mode_supported_p): Rename to...
(by_pieces_mode_supported_p): ...this, and extends it to do
the checking for both scalar and vector mode.
(widest_fixed_size_mode_for_size): Call
by_pieces_mode_supported_p to examine the mode.
(op_by_pieces_d::smallest_fixed_size_mode_for_size): Likewise.
Diff:
---
gcc/expr.cc | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/gcc/expr.cc b/gcc/expr.cc
index 7aac575eff8a..ed4dbb13d893 100644
--- a/gcc/expr.cc
+++ b/gcc/expr.cc
@@ -1000,18 +1000,21 @@ can_use_qi_vectors (by_pieces_operation op)
/* Return true if optabs exists for the mode and certain by pieces
operations. */
static bool
-qi_vector_mode_supported_p (fixed_size_mode mode, by_pieces_operation op)
+by_pieces_mode_supported_p (fixed_size_mode mode, by_pieces_operation op)
{
+ if (optab_handler (mov_optab, mode) == CODE_FOR_nothing)
+ return false;
+
if ((op == SET_BY_PIECES || op == CLEAR_BY_PIECES)
- && optab_handler (vec_duplicate_optab, mode) != CODE_FOR_nothing)
- return true;
+ && VECTOR_MODE_P (mode)
+ && optab_handler (vec_duplicate_optab, mode) == CODE_FOR_nothing)
+ return false;
if (op == COMPARE_BY_PIECES
- && optab_handler (mov_optab, mode) != CODE_FOR_nothing
- && can_compare_p (EQ, mode, ccp_jump))
- return true;
+ && !can_compare_p (EQ, mode, ccp_jump))
+ return false;
- return false;
+ return true;
}
/* Return the widest mode that can be used to perform part of an
@@ -1035,7 +1038,7 @@ widest_fixed_size_mode_for_size (unsigned int size, by_pieces_operation op)
{
if (GET_MODE_SIZE (candidate) >= size)
break;
- if (qi_vector_mode_supported_p (candidate, op))
+ if (by_pieces_mode_supported_p (candidate, op))
result = candidate;
}
@@ -1049,7 +1052,7 @@ widest_fixed_size_mode_for_size (unsigned int size, by_pieces_operation op)
{
mode = tmode.require ();
if (GET_MODE_SIZE (mode) < size
- && targetm.scalar_mode_supported_p (mode))
+ && by_pieces_mode_supported_p (mode, op))
result = mode;
}
@@ -1454,7 +1457,7 @@ op_by_pieces_d::smallest_fixed_size_mode_for_size (unsigned int size)
break;
if (GET_MODE_SIZE (candidate) >= size
- && qi_vector_mode_supported_p (candidate, m_op))
+ && by_pieces_mode_supported_p (candidate, m_op))
return candidate;
}
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-10-30 3:03 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-30 3:03 [gcc r14-5001] Expand: Checking available optabs for scalar modes in by pieces operations HaoChen Gui
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).