Fix RTL frontend handling of const_vectors

The RTL frontend makes sure that CONST_INTs use shared rtxes where
appropriate.  We should do the same thing for CONST_VECTORs,
reusing CONST0_RTX, CONST1_RTX and CONSTM1_RTX.  This also has
the effect of setting CONST_VECTOR_NELTS_PER_PATTERN and
CONST_VECTOR_NPATTERNS.

While looking at where to add that, I noticed we had some dead #includes
in read-rtl.c.  Some of the stuff that read-rtl-function.c does was once
in that file instead.

gcc/
	* read-rtl.c: Remove dead !GENERATOR_FILE block.
	* read-rtl-function.c (function_reader::consolidate_singletons):
	Generate canonical CONST_VECTORs.
This commit is contained in:
Richard Sandiford 2021-11-04 08:28:44 +00:00
parent bc9c8e5f8a
commit 95318d469f
2 changed files with 3 additions and 6 deletions

View File

@ -1498,6 +1498,9 @@ function_reader::consolidate_singletons (rtx x)
case CONST_INT:
return gen_rtx_CONST_INT (GET_MODE (x), INTVAL (x));
case CONST_VECTOR:
return gen_rtx_CONST_VECTOR (GET_MODE (x), XVEC (x, 0));
default:
break;
}

View File

@ -36,12 +36,6 @@ along with GCC; see the file COPYING3. If not see
#include "read-md.h"
#include "gensupport.h"
#ifndef GENERATOR_FILE
#include "function.h"
#include "memmodel.h"
#include "emit-rtl.h"
#endif
/* One element in a singly-linked list of (integer, string) pairs. */
struct map_value {
struct map_value *next;