On Fri, 9 Jun 2023, Jiufu Guo wrote:
> Hi,
>
> As checking the code, there is a "gcc_assert (SCALAR_INT_MODE_P (mode))"
> in "try_const_anchors".
> This assert seems correct because the function try_const_anchors cares
> about integer values currently, and modes other than SCALAR_INT_MODE_P
> are not needed to support.
>
> This patch makes sure SCALAR_INT_MODE_P when calling try_const_anchors.
>
> This patch is raised when drafting below one.
> https://gcc.gnu.org/pipermail/gcc-patches/2022-October/603530.html.
> With that patch, "{[%1:DI]=0;} stack_tie" with BLKmode runs into
> try_const_anchors, and hits the assert/ice.
>
> Boostrap and regtest pass on ppc64{,le} and x86_64.
> Is this ok for trunk?
Iff the correct fix at all (how can a CONST_INT have BLKmode?) then
I suggest to instead fix try_const_anchors to change
/* CONST_INT is used for CC modes, but we should leave those alone. */
if (GET_MODE_CLASS (mode) == MODE_CC)
return NULL_RTX;
gcc_assert (SCALAR_INT_MODE_P (mode));
to
/* CONST_INT is used for CC modes, leave any non-scalar-int mode alone. */
if (!SCALAR_INT_MODE_P (mode))
return NULL_RTX;
but as said I wonder how we arrive at a BLKmode CONST_INT and whether
we should have fended this off earlier. Can you share more complete
RTL of that stack_tie?
>
> BR,
> Jeff (Jiufu Guo)
>
> gcc/ChangeLog:
>
> * cse.cc (cse_insn): Add SCALAR_INT_MODE_P condition.
>
> ---
> gcc/cse.cc | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/gcc/cse.cc b/gcc/cse.cc
> index 2bb63ac4105..f213fa0faf7 100644
> *** a/gcc/cse.cc
> --- b/gcc/cse.cc
> ***************
> *** 5003,5009 ****
> if (targetm.const_anchor
> && !src_related
> && src_const
> ! && GET_CODE (src_const) == CONST_INT)
> {
> src_related = try_const_anchors (src_const, mode);
> src_related_is_const_anchor = src_related != NULL_RTX;
> - -
> --- 5003,5010 ----
> if (targetm.const_anchor
> && !src_related
> && src_const
> ! && GET_CODE (src_const) == CONST_INT
> ! && SCALAR_INT_MODE_P (mode))
> {
> src_related = try_const_anchors (src_const, mode);
> src_related_is_const_anchor = src_related != NULL_RTX;
> 2.39.3
>
>
--
Richard Biener <[email protected]>
SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg,
Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman;
HRB 36809 (AG Nuernberg)