This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Retain TYPE_MODE more often for BIT_FIELD_REFs in get_inner_referece


> I see.  So I misremember seeing aggregate typed BIT_FIELD_REFs
> (that was probably VIEW_CONVERTs then...).  Still the GIMPLE verifier
> only has
> 
>           else if (!INTEGRAL_TYPE_P (TREE_TYPE (expr))
>                    && TYPE_MODE (TREE_TYPE (expr)) != BLKmode
>                    && maybe_ne (GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE
> (expr))),
>                                 size))
>             {
>               error ("mode size of non-integral result does not "
>                      "match field size of %qs",
>                      code_name);
>               return true;
>             }
> 
> it doesn't verify that besides integral typed expressions only
> vector typed expressions are allowed.

I think that the !INTEGRAL_TYPE_P is simply the opposite of the first case:

	  if (INTEGRAL_TYPE_P (TREE_TYPE (t))
	      && maybe_ne (TYPE_PRECISION (TREE_TYPE (t)), size))
	    {
	      error ("integral result type precision does not match "
		     "field size of BIT_FIELD_REF");
	      return t;
	    }

> Anyhow - the original patch succeeded bootstrapping and testing.
> The way I proposed it:
> 
>       /* For vector types, with the correct size of access, use the mode
> of
>          inner type.  */
>       if (((TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == VECTOR_TYPE
>             && TREE_TYPE (exp) == TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp,
> 0))))
> 
>            || !INTEGRAL_TYPE_P (TREE_TYPE (exp)))
> 
>           && tree_int_cst_equal (size_tree, TYPE_SIZE (TREE_TYPE (exp))))
>         mode = TYPE_MODE (TREE_TYPE (exp));
> 
> matches in sofar that we only restrict integer types (not modes) and
> for integer types allow extracts from vectors (the preexisting
> check for a matching component type is a bit too strict I guess).

IMO if the !VECTOR_TYPE case cannot be covered, changes in this delicate area 
ought to be restricted to VECTOR_TYPE.

-- 
Eric Botcazou


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]