public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-3655] Fix ICE in pass_rpad.
@ 2021-09-18 7:52 hongtao Liu
0 siblings, 0 replies; only message in thread
From: hongtao Liu @ 2021-09-18 7:52 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:e666a0a22a5c11b5bb894a75b73b6b7f3e364e4d
commit r12-3655-ge666a0a22a5c11b5bb894a75b73b6b7f3e364e4d
Author: liuhongt <hongtao.liu@intel.com>
Date: Sat Sep 18 10:49:54 2021 +0800
Fix ICE in pass_rpad.
Besides conversion instructions, pass_rpad also handles scalar
sqrt/rsqrt/rcp/round instructions, while r12-3614 should only want to
handle conversion instructions, so fix it.
gcc/ChangeLog:
* config/i386/i386-features.c (remove_partial_avx_dependency):
Restrict TARGET_USE_VECTOR_FP_CONVERTS and
TARGET_USE_VECTOR_CONVERTS to conversion instructions only.
Diff:
---
gcc/config/i386/i386-features.c | 27 ++++++++++++++++++++++-----
1 file changed, 22 insertions(+), 5 deletions(-)
diff --git a/gcc/config/i386/i386-features.c b/gcc/config/i386/i386-features.c
index a525a83afd3..14f816feee0 100644
--- a/gcc/config/i386/i386-features.c
+++ b/gcc/config/i386/i386-features.c
@@ -2165,7 +2165,7 @@ make_pass_insert_endbr_and_patchable_area (gcc::context *ctxt)
}
/* At entry of the nearest common dominator for basic blocks with
- conversions, generate a single
+ conversions/rcp/sqrt/rsqrt/round, generate a single
vxorps %xmmN, %xmmN, %xmmN
for all
vcvtss2sd op, %xmmN, %xmmX
@@ -2211,13 +2211,27 @@ remove_partial_avx_dependency (void)
continue;
/* Convert PARTIAL_XMM_UPDATE_TRUE insns, DF -> SF, SF -> DF,
- SI -> SF, SI -> DF, DI -> SF, DI -> DF, to vec_dup and
- vec_merge with subreg. */
+ SI -> SF, SI -> DF, DI -> SF, DI -> DF, sqrt, rsqrt, rcp,
+ round, to vec_dup and vec_merge with subreg. */
rtx src = SET_SRC (set);
rtx dest = SET_DEST (set);
machine_mode dest_mode = GET_MODE (dest);
- machine_mode src_mode = GET_MODE (XEXP (src, 0));
+ bool convert_p = false;
+ switch (GET_CODE (src))
+ {
+ case FLOAT:
+ case FLOAT_EXTEND:
+ case FLOAT_TRUNCATE:
+ case UNSIGNED_FLOAT:
+ convert_p = true;
+ break;
+ default:
+ break;
+ }
+ /* Only hanlde conversion here. */
+ machine_mode src_mode
+ = convert_p ? GET_MODE (XEXP (src, 0)) : VOIDmode;
switch (src_mode)
{
case E_SFmode:
@@ -2232,8 +2246,11 @@ remove_partial_avx_dependency (void)
|| !TARGET_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY)
continue;
break;
- default:
+ case E_VOIDmode:
+ gcc_assert (!convert_p);
break;
+ default:
+ gcc_unreachable ();
}
if (!v4sf_const0)
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-09-18 7:52 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-18 7:52 [gcc r12-3655] Fix ICE in pass_rpad hongtao Liu
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).