[Bug target/98478] New: AVX512 refactoring integer mask with VnBImode
crazylht at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Dec 30 11:30:50 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98478
Bug ID: 98478
Summary: AVX512 refactoring integer mask with VnBImode
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: crazylht at gmail dot com
CC: hjl.tools at gmail dot com, wwwhhhyyy333 at gmail dot com
Target Milestone: ---
Target: x86_64-*-* i?86-*-*
When simplily add the bellow
-----
+/* For AVX512 Integer mask. */
+VECTOR_BOOL_MODE (V64BI, 64, 8);
+VECTOR_BOOL_MODE (V32BI, 32, 4);
+VECTOR_BOOL_MODE (V16BI, 16, 2);
+VECTOR_BOOL_MODE (V8BI, 8, 1);
+VECTOR_BOOL_MODE (V4BI, 4, 1);
+VECTOR_BOOL_MODE (V2BI, 2, 1);
-----
GCC failed self-test, see below
-----
simplify_gen_subreg (inner_mode, vm, mode, offset))
expected: (reg:BI 102)
actual: (nil)
cc1: internal compiler error: in assert_rtx_eq_at, at selftest-rtl.c:57
0x142f202 selftest::assert_rtx_eq_at(selftest::location const&, char const*,
rtx_def*, rtx_def*)
/export/users2/liuhongt/gcc/gnu-toolchain/master_debug/gcc/selftest-rtl.c:57
0x1459aef test_vector_ops_duplicate
/export/users2/liuhongt/gcc/gnu-toolchain/master_debug/gcc/simplify-rtx.c:7552
0x145cddd test_vector_ops
/export/users2/liuhongt/gcc/gnu-toolchain/master_debug/gcc/simplify-rtx.c:7947
0x145ce98 selftest::simplify_rtx_c_tests()
/export/users2/liuhongt/gcc/gnu-toolchain/master_debug/gcc/simplify-rtx.c:8012
0x272818f selftest::run_tests()
/export/users2/liuhongt/gcc/gnu-toolchain/master_debug/gcc/selftest-run-tests.c:118
----
SVE didn't fail this because the nunits is not constant and won't go in this
test.
if (nunits.is_constant (&const_nunits))
{
/* And again with the final element. */
rtx last_index = gen_int_mode (const_nunits - 1, word_mode);
rtx last_par = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (1, last_index));
ASSERT_RTX_PTR_EQ (scalar_reg,
simplify_binary_operation (VEC_SELECT, inner_mode,
duplicate, last_par));
/* Test a scalar subreg of a VEC_MERGE of a VEC_DUPLICATE. */
rtx vector_reg = make_test_reg (mode);
for (unsigned HOST_WIDE_INT i = 0; i < const_nunits; i++)
{
if (i >= HOST_BITS_PER_WIDE_INT)
break;
rtx mask = GEN_INT ((HOST_WIDE_INT_1U << i) | (i + 1));
rtx vm = gen_rtx_VEC_MERGE (mode, duplicate, vector_reg, mask);
poly_uint64 offset = i * GET_MODE_SIZE (inner_mode);
ASSERT_RTX_EQ (scalar_reg,
simplify_gen_subreg (inner_mode, vm,
mode, offset));
}
}
it failed to get simplify_gen_subreg (BImode, vm, V16BImode, offset), also
offset doesn't seems right.
More information about the Gcc-bugs
mailing list