------- Additional Comments From uros at kss-loka dot si 2004-12-21 13:47 ------- The problem here is that case RTX_COMPARE:/case RTX_COMM_COMPARE: in fold_rtx() in cse.c is not 'vector safe'. The testcase from comment #3 will trigger these parts of RTX_COMPARE case:
/* See if the two operands are the same. */ if (folded_arg0 == folded_arg1 ... Operands are the same, (reg:V4HI 62 [ D.1293 ]) and (reg:V4HI 62 [ D.1293 ]). /* Sadly two equal NaNs are not equivalent. */ if (!HONOR_NANS (mode_arg0)) return ((code == EQ || code == LE || code == GE || code == LEU || code == GEU || code == UNEQ || code == UNLE || code == UNGE || code == ORDERED) ? true_rtx : false_rtx); V4HI mode obviously does not HONOR_NANS and (code == EQ). A 'true_rtx' is returned, but a _vector_ of trues would be more appropriate in this case. I guess the RTX_COMPARE case should be recoded for vector support, or patch from comment #7 should be used to prevent VECTOR_MODES from entering this code. Uros. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17767