[PATCH, i386, MPX, 1/X] Support of Intel MPX ISA. 1/2 Bound type and modes
Jeff Law
law@redhat.com
Wed Oct 23 05:42:00 GMT 2013
On 09/17/13 02:18, Ilya Enkovich wrote:
> Hi,
>
> Here is a patch introducing new type and mode for bounds. It is a part of MPX ISA support patch (http://gcc.gnu.org/ml/gcc-patches/2013-07/msg01094.html).
>
> Bootstrapped and tested on linux-x86_64. Is it OK for trunk?
>
> Thanks,
> Ilya
> --
>
> gcc/
>
> 2013-09-16 Ilya Enkovich <ilya.enkovich@intel.com>
>
> * mode-classes.def (MODE_BOUND): New.
> * tree.def (BOUND_TYPE): New.
> * genmodes.c (complete_mode): Support MODE_BOUND.
> (BOUND_MODE): New.
> (make_bound_mode): New.
> * machmode.h (BOUND_MODE_P): New.
> * stor-layout.c (int_mode_for_mode): Support MODE_BOUND.
> (layout_type): Support BOUND_TYPE.
> * tree-pretty-print.c (dump_generic_node): Support BOUND_TYPE.
> * tree.c (build_int_cst_wide): Support BOUND_TYPE.
> (type_contains_placeholder_1): Likewise.
> * tree.h (BOUND_TYPE_P): New.
> * varasm.c (output_constant): Support BOUND_TYPE.
> * doc/rtl.texi (MODE_BOUND): New.
Mostly OK. Just a few minor things that should be fixed or at least
clarified.
>
> diff --git a/gcc/doc/rtl.texi b/gcc/doc/rtl.texi
> index 1d62223..02b1214 100644
> --- a/gcc/doc/rtl.texi
> +++ b/gcc/doc/rtl.texi
> @@ -1382,6 +1382,10 @@ any @code{CC_MODE} modes listed in the @file{@var{machine}-modes.def}.
> @xref{Jump Patterns},
> also see @ref{Condition Code}.
>
> +@findex MODE_BOUND
> +@item MODE_BOUND
> +Bound modes class. Used to represent values of pointer bounds.
I can't help but feel more is needed here -- without going into the
details of the MPX implementation we ought to say something about how
these differ from the more normal integer modes. Drawing from the brief
discussion between Richard & myself earlier today should give some ideas
on how to improve this.
I'd probably use MODE_POINTER_BOUNDS which is a bit more descriptive.
We wouldn't want someone to (for example) think this stuff relates to
array bounds. Obviously a change to MODE_POINTER_BOUNDS would propagate
into other places where you use "BOUND" without a "POINTER"
qualification, such as "BOUND_MODE_P" which we'd change to
POINTER_BOUNDS_MODE_P.
> diff --git a/gcc/mode-classes.def b/gcc/mode-classes.def
> index 7207ef7..c5ea215 100644
> --- a/gcc/mode-classes.def
> +++ b/gcc/mode-classes.def
> @@ -21,6 +21,7 @@ along with GCC; see the file COPYING3. If not see
> DEF_MODE_CLASS (MODE_RANDOM), /* other */ \
> DEF_MODE_CLASS (MODE_CC), /* condition code in a register */ \
> DEF_MODE_CLASS (MODE_INT), /* integer */ \
> + DEF_MODE_CLASS (MODE_BOUND), /* bounds */ \
> DEF_MODE_CLASS (MODE_PARTIAL_INT), /* integer with padding bits */ \
> DEF_MODE_CLASS (MODE_FRACT), /* signed fractional number */ \
> DEF_MODE_CLASS (MODE_UFRACT), /* unsigned fractional number */ \
Does genmodes do the right thing WRT MAX_INT_MODE and MIN_INT_MODE?
I'd be more comfortable if MODE_POINTER_BOUNDS wasn't sitting between
MODE_INT and MODE_PARTIAL_INT. I'm not aware of code that iterates over
these things that would get confused, but ISTM putting
MODE_POINTER_BOUNDS after MODE_PARTIAL_INT is marginally safer.
> diff --git a/gcc/tree.c b/gcc/tree.c
> index b469b97..bbbe16e 100644
> --- a/gcc/tree.c
> +++ b/gcc/tree.c
> @@ -1197,6 +1197,7 @@ build_int_cst_wide (tree type, unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi)
>
> case INTEGER_TYPE:
> case OFFSET_TYPE:
> + case BOUND_TYPE:
> if (TYPE_UNSIGNED (type))
> {
> /* Cache 0..N */
So here you're effectively treading POINTER_BOUNDS_TYPE like an integer.
I'm guessing there's a number of flags that may not be relevant for
your type and which you might want to repurpose (again, I haven't looked
at the entire patchset). If so, you want to be real careful here since
you'll be looking at (for example) TYPE_UNSIGNED which may not have any
real meaning for POINTER_BOUNDS_TYPE.
Overall, it seems fairly reasonable -- the biggest concern of mine is in
the last comment. Are you going to be repurposing various flag bits in
the type? If so, then we have to be more careful in code like above.
Jeff
More information about the Gcc-patches
mailing list