Hello,
I experienced an ICE for no-scevccp-outer-16.c in our port. It seems not in
other ports so I couldn't file a bug report.
Baiscally, the problem appears after the following transformations in
expand_compound_operation (combine.c).
Enter expand_compound_operation
x:
(zero_extend:SI (subreg:HI (plus:V4HI (reg:V4HI 143 [ vect_var_.65 ])
(reg:V4HI 142 [ vect_var_.65 ])) 0))
tem = gen_lowpart (mode, XEXP (x, 0));
tem = (subreg:SI (plus:V4HI (reg:V4HI 143 [ vect_var_.65 ])
(reg:V4HI 142 [ vect_var_.65 ])) 0)
tem = simplify_shift_const (NULL_RTX, ASHIFT, mode,
tem, modewidth - pos - len);
tem = (subreg:SI (ashift:V4HI (plus:V4HI (reg:V4HI 143 [ vect_var_.65 ])
(reg:V4HI 142 [ vect_var_.65 ]))
(const_int 16 [0x10])) 0)
tem = simplify_shift_const (NULL_RTX, unsignedp ? LSHIFTRT : ASHIFTRT,
mode, tem, modewidth - len);
/projects/firepath/tools/work/bmei/gcc-head/src/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-16.c:
In function 'main':
/projects/firepath/tools/work/bmei/gcc-head/src/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-16.c:59:1:
internal compiler error: in trunc_int_for_mode, at explow.c:56
Please submit a full bug report,
#0 internal_error (gmsgid=0xe9aa77 "in %s, at %s:%d") at
../../src/gcc/diagnostic.c:707
#1 0x00000000005acf23 in fancy_abort (file=0xea8453 "../../src/gcc/explow.c",
line=56, function=0xea8440 "trunc_int_for_mode") at
../../src/gcc/diagnostic.c:763
#2 0x000000000060528b in trunc_int_for_mode (c=65535, mode=V4HImode) at
../../src/gcc/explow.c:56
#3 0x00000000005edf24 in gen_int_mode (c=65535, mode=V4HImode) at
../../src/gcc/emit-rtl.c:459
#4 0x0000000000cf22d9 in simplify_and_const_int (x=0x0, mode=V4HImode,
varop=0x2a957a8420, constop=65535) at ../../src/gcc/combine.c:9038
#5 0x0000000000cf462f in simplify_shift_const_1 (code=LSHIFTRT,
result_mode=SImode, varop=0x2a957a0600, orig_count=16) at
../../src/gcc/combine.c:10073
#6 0x0000000000cf47cf in simplify_shift_const (x=0x0, code=LSHIFTRT,
result_mode=SImode, varop=0x2a957a8408, count=16) at
../../src/gcc/combine.c:10122
#7 0x0000000000cebbf9 in expand_compound_operation (x=0x2a95789c20) at
../../src/gcc/combine.c:6517
#8 0x0000000000ce8afe in combine_simplify_rtx (x=0x2a95789c20,
op0_mode=HImode, in_dest=0) at ../../src/gcc/combine.c:5535
#9 0x0000000000ce6da5 in subst (x=0x2a95789c20, from=0x2a95781ba0,
to=0x2a957a83a8, in_dest=0, unique_copy=0) at ../../src/gcc/combine.c:4884
#10 0x0000000000ce6b53 in subst (x=0x2a957a0660, from=0x2a95781ba0,
to=0x2a957a83a8, in_dest=0, unique_copy=0) at ../../src/gcc/combine.c:4812
#11 0x0000000000ce13ed in try_combine (i3=0x2a957a1678, i2=0x2a957a1630,
i1=0x0, new_direct_jump_p=0x7fbfffeafc) at ../../src/gcc/combine.c:2963
...
It seems to me that both the gen_lowpart and simplify_shift_const do the wrong
things in handling vector type. (zero_extend:SI (subreg:HI (V4HI)) is not equal
to (subreg:SI (V4HI)), is it? simplify_shift_const produces (ashift:V4HI
(V4HI..) (16), which is not right either. Does shifting of a vector with a
const value mean shifting every element of vector or treat the vector as an
entity? Internal manual is not very clear about that.
Thanks,
Bingfeng Mei