Bug 100761

Summary: [mips+msa] ICE when using __builtin_convertvector to convert from u8x8 to u8x16
Product: gcc Reporter: Evan Nemerson <evan>
Component: targetAssignee: Not yet assigned to anyone <unassigned>
Status: UNCONFIRMED ---    
Severity: normal CC: xry111
Priority: P3 Keywords: ice-on-valid-code
Version: 10.2.1   
Target Milestone: ---   
Host: Target: mips
Build: Known to work:
Known to fail: Last reconfirmed:

Description Evan Nemerson 2021-05-26 03:52:15 UTC
I'm seeing an ICE from MIPS with MSA enabled when attempting to use __builtin_convertvector to convert a vector of 8 unsigned 8-bit integers to 8 unsigned 16-bit integers.

Here is a reduced test case, courtesy of C-Reduce:


typedef char a;
typedef short b;
typedef struct {
  a c __attribute__((__vector_size__(8)));
} d;
d e;
void f() {
  b g __attribute__((__vector_size__(16))) (
      __builtin_convertvector(e.c, __typeof__(g)));
}


$ mips64el-linux-gnuabi64-g++-10 -march=loongson3a -mmsa -c -o test.o test.c
during RTL pass: expand
test.c: In function 'void f()':
test.c:8:5: internal compiler error: in mips_expand_vec_unpack, at config/mips/mips.c:21757
    8 |   b g __attribute__((__vector_size__(16))) (
      |     ^
0x7fed0d1f9d09 __libc_start_main
	../csu/libc-start.c:308
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <file:///usr/share/doc/gcc-10/README.Bugs> for instructions.


This is with GCC 10.2.1-6 from Debian:

$ mips64el-linux-gnuabi64-g++-10 --version                                  
mips64el-linux-gnuabi64-g++-10 (Debian 10.2.1-6) 10.2.1 20210110
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Original code is at https://github.com/simd-everywhere/simde/blob/7d0e2aca9458f760d7196b94bfdcf83b2178ea24/simde/x86/sse.h#L1046, SIMDE_CONVERT_VECTOR_ is defined at https://github.com/simd-everywhere/simde/blob/7d0e2aca9458f760d7196b94bfdcf83b2178ea24/simde/simde-common.h#L292-L296
Comment 1 Xi Ruoyao 2021-06-19 07:36:40 UTC
Patch proposed: https://gcc.gnu.org/pipermail/gcc-patches/2021-June/573213.html
Comment 2 GCC Commits 2021-07-09 06:29:30 UTC
The master branch has been updated by Xi Ruoyao <xry111@gcc.gnu.org>:

https://gcc.gnu.org/g:82625a42e652d52fc6bbe6070f8d0589d5e0c8ad

commit r12-2183-g82625a42e652d52fc6bbe6070f8d0589d5e0c8ad
Author: Xi Ruoyao <xry111@mengyan1223.wang>
Date:   Fri Jun 18 20:11:42 2021 +0800

    mips: check MSA support for vector modes [PR100760,PR100761,PR100762]
    
    Check if the vector mode is really supported by MSA in certain cases,
    instead of testing ISA_HAS_MSA.  Simply testing ISA_HAS_MSA can cause
    ICE when MSA is enabled besides other MIPS SIMD extensions (notably,
    Loongson MMI).
    
    gcc/
    
            PR target/100760
            PR target/100761
            PR target/100762
            * config/mips/mips.c (mips_const_insns): Use MSA_SUPPORTED_MODE_P
            instead of ISA_HAS_MSA.
            (mips_expand_vec_unpack): Likewise.
            (mips_expand_vector_init): Likewise.
    
    gcc/testsuite/
    
            PR target/100760
            PR target/100761
            PR target/100762
            * gcc.target/mips/pr100760.c: New test.
            * gcc.target/mips/pr100761.c: New test.
            * gcc.target/mips/pr100762.c: New test.