------- 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

Reply via email to