https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111337
Bug ID: 111337
Summary: ICE in gimple-isel.cc for RISC-V port
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: juzhe.zhong at rivai dot ai
Target Milestone: ---
This following case cause ICE:
extern unsigned char a [150];
extern unsigned char b [150];
extern unsigned char c [150];
extern unsigned char d [150];
extern unsigned char e [150];
void foo () {
for (int i = 92; i <= 141; i += 2) {
int tmp = (d [i] && b [i]) <= (a [i] > c [i]);
e [i] = tmp >> b [i];
}
}
auto.c:7:6: internal compiler error: in gimple_expand_vec_cond_expr, at
gimple-isel.cc:284
7 | void foo () {
| ^~~
0x1a9e309 gimple_expand_vec_cond_expr
../../../../gcc/gcc/gimple-isel.cc:283
0x1a9ea56 execute
../../../../gcc/gcc/gimple-isel.cc:390
Bause of this piece of code:
gcc_assert (GET_MODE_CLASS (TYPE_MODE (TREE_TYPE (op0)))
== MODE_VECTOR_INT);
The statement cause such assertion FAIL was produced by "vrp2":
Before auto.c.202t.vrp2:
mask__5.33_165 = vect__3.26_157 > vect__4.31_163;
vect_patt_67.34_168 = VEC_COND_EXPR <mask__5.33_165, { 1, ... }, { 0, ... }>;
vect_patt_68.35_169 = (vector([4,4]) int) vect_patt_67.34_168;
mask__7.36_170 = vect_patt_68.35_169 >= vect_patt_66.22_152;
vect_patt_69.37_173 = VEC_COND_EXPR <mask__7.36_170, { 1, ... }, { 0, ... }>;
vect_patt_70.38_174 = (vector([4,4]) unsigned char) vect_patt_69.37_173;
vect_patt_71.39_176 = MIN_EXPR <vect_pretmp_43.16_142, { 7, ... }>;
vect_patt_72.40_177 = vect_patt_70.38_174 >> vect_patt_71.39_176;
.MASK_LEN_SCATTER_STORE (vectp_e.42_181, { 0, 2, 4, ... }, 1,
vect_patt_72.40_177, { -1, ... }, _186, 0);
auto.c.202t.vrp2:
mask__5.33_165 = vect__3.26_157 > vect__4.31_163;
vect_patt_67.34_168 = VEC_COND_EXPR <mask__5.33_165, { 1, ... }, { 0, ... }>;
vect_patt_68.35_169 = VEC_COND_EXPR <mask__5.33_165, { 1, ... }, { 0, ... }>;
mask__7.36_170 = VEC_COND_EXPR <mask__47.20_148, mask__5.33_165, { -1, ...
}>;
vect_patt_69.37_173 = VEC_COND_EXPR <mask__7.36_170, { 1, ... }, { 0, ... }>;
vect_patt_70.38_174 = VEC_COND_EXPR <mask__7.36_170, { 1, ... }, { 0, ... }>;
vect_patt_71.39_176 = MIN_EXPR <vect_pretmp_43.16_142, { 7, ... }>;
vect_patt_72.40_177 = vect_patt_70.38_174 >> vect_patt_71.39_176;
.MASK_LEN_SCATTER_STORE (vectp_e.42_181, { 0, 2, 4, ... }, 1,
vect_patt_72.40_177, { -1, ... }, _186, 0);
There is a odd STMT here:
mask__7.36_170 = VEC_COND_EXPR <mask__47.20_148, mask__5.33_165, { -1, ... }>;
It seems that it should be logical operations of MASK?