This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Add tree_fits_uhwi_p tests to BIT_FIELD_REF folder
- From: Richard Sandiford <richard dot sandiford at linaro dot org>
- To: gcc-patches at gcc dot gnu dot org
- Date: Thu, 04 Jan 2018 10:06:57 +0000
- Subject: Add tree_fits_uhwi_p tests to BIT_FIELD_REF folder
- Authentication-results: sourceware.org; auth=none
The first BIT_FIELD_REF folding pattern assumed without checking that
operands satisfy tree_fits_uhwi_p. The second pattern does check this:
/* On constants we can use native encode/interpret to constant
fold (nearly) all BIT_FIELD_REFs. */
if (CONSTANT_CLASS_P (arg0)
&& can_native_interpret_type_p (type)
&& BITS_PER_UNIT == 8
&& tree_fits_uhwi_p (op1)
&& tree_fits_uhwi_p (op2))
so this patch adds the checks to the first pattern too. This is needed
for POLY_INT_CST bit positions.
Tested on aarch64-linux-gnu, x86_64-linux-gnu and powerpc64le-linux-gnu.
Also tested by comparing the before and after assembly output for at
least one target per CPU directory. OK to install?
Richard
2018-01-04 Richard Sandiford <richard.sandiford@linaro.org>
gcc/
* fold-const.c (fold_ternary_loc): Check tree_fits_uhwi_p before
using tree_to_uhwi.
Index: gcc/fold-const.c
===================================================================
--- gcc/fold-const.c 2018-01-03 21:42:34.349039784 +0000
+++ gcc/fold-const.c 2018-01-04 10:06:02.165809202 +0000
@@ -11643,7 +11643,9 @@ fold_ternary_loc (location_t loc, enum t
if (TREE_CODE (arg0) == VECTOR_CST
&& (type == TREE_TYPE (TREE_TYPE (arg0))
|| (TREE_CODE (type) == VECTOR_TYPE
- && TREE_TYPE (type) == TREE_TYPE (TREE_TYPE (arg0)))))
+ && TREE_TYPE (type) == TREE_TYPE (TREE_TYPE (arg0))))
+ && tree_fits_uhwi_p (op1)
+ && tree_fits_uhwi_p (op2))
{
tree eltype = TREE_TYPE (TREE_TYPE (arg0));
unsigned HOST_WIDE_INT width = tree_to_uhwi (TYPE_SIZE (eltype));