This is the mail archive of the 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]

[SVE] Organisation of ARM/sve-branch

This message describes the arrangement of the patches on the SVE branch.
We've tried to make them fit a plausible submission order, with each
patch having its own covering note and rationale (but no changelog :-)).
They should also be bisect-friendly.

The patches break down into the following broad stages:

  A. General fixes

  These patches fix bugs or accidental missed optimisations that aren’t
  directly related to SVE.  Usually the changes were done as part of
  general SVE work and it only became clear later that they were fixing
  real rather than theoretical problems.

  The baseline is a couple of weeks old now and at least one these
  issues has already been fixed on trunk.

    Patches covered:
      "Move misplaced assignment in num_sign_bit_copies1"
      "Use df_read_modify_subreg_p in cprop.c"

  B. Prepare for machine mode changes

  These patches fix preexisting problems that would trigger an ICE with
  the patches from stage C.  They don’t appear to have any independent
  effect on code generation.

    Patches covered:
      "Add more subreg offset helpers"
      "Set mode of decimal floats before calling layout_type"

  C. Rework the handling of machine modes

  These patches add wrapper classes around the machine_mode enum for
  situations in which the mode has known properties, as described in
  the earlier message about variable mode sizes.

    Patches covered:
      "Add an E_ prefix to mode names and update case statements"
      "Widening optab cleanup"

  D. Prepare for the introduction of polynomial integers

  These patches fix various problems that would cause build failures
  with the patches from stage F.  They also rework interfaces to make F
  possible, including partial conversions of some macros to target hooks.

    Patches covered:
      "Add a full_integral_type_p helper function"
      "Pass slp_index down to vect_analyze_stmt"

  E. Add new tree and rtl constructs for representing variable-length vectors

  These patches add a tree VEC_DUPLICATE_EXPR to go alongside the
  existing rtl code VEC_DUPLICATE.  They also add codes for creating
  linear series and allow both duplicate and series constants to be
  treated as gimple values.

    Patches covered:
      "Add rtx const vec_duplicate helpers"
      "Treat VEC_{DUPLICATE,SERIES}_EXPR as gimple constants"

  F. Add and use a "polynomial integer" class

  These patches add a class to represent integers of the form C0 + C1*X1
  + ... + Cn*Xn, where each Ci is a compile-time constant and each
  indeterminate Xi is a runtime parameter.  See the earlier message
  about variable mode sizes for more details.

    Patches covered:
      "Add poly-int.h"
      "Use poly_int rtx accessors instead of hwi accessors"

  G. Tweak the subreg rules

  These patches divide SUBREG_REGs into REMODE_NATURAL_SIZE-sized
  independently-addressable chunks rather than UNITS_PER_WORD-sized
  independently-addressable chunks.  This is a no-op for most targets
  since the default value of REGMODE_NATURAL_SIZE is UNITS_PER_WORD.
  The only existing target to override it is 64-bit SPARC, where this
  appears to be a very minor improvement.

    Patches covered:
      "Base subreg rules on REGMODE_NATURAL_SIZE rather than UNITS_PER_WORD"
      "Prevent invalid register mode changes in combine"

  H. Prepare for the SVE port

  These patches make various changes needed before a working SVE port
  can be added.  They subdivide into target-independent changes and
  AArch64-specific changes.

    Patches covered:
      "Fix type of bitstart in vectorizable_live_operation"
      "Improve vector mask pattern handling"

      "[AArch64] Move code around"
      "[AArch64] Tighten address register subreg checks"

  I. Add the core SVE port

  This stage contains a single patch that adds the core SVE port.
  It supports existing vectorisation techniques with variable-length
  vectors, with some restrictions.

    Patch covered:
      "[AArch64] Add SVE support"

  J. Add additional SVE support

  These patches add support for new vectorisation features and improve
  the quality of the code produced for SVE in other areas (mainly ivopts).

    Patches covered:
      "Fix folding of vector mask EQ/NE expressions"
      "vect.exp testsuite changes for SVE"

I compiled the GCC testsuite on at least one target per CPU architecture
to check that there were no accidental changes in assembly code between the
end of A (which is expected to change code generation) and the end of G.


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