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]

[PATCH, i386] Cleanup register classes


Hello!

Attached patch does three things:

1. Declares integer REX registers as GENERAL_REGS instead of NON_Q_REGS:

NON_Q_REGS declaration is 32bit x86 only; QImode lowparts of
NON_Q_REGS can't be stored to memory. 64bit x86 targets don't have
this limitation.

2. Removes EVEX_SSE_REGS and MOD4_SSE_REGS classes:

We can declare EVEX_SSE_REGS as ALL_SSE_REGS. MOD4_SSE_REGS class is
the same as ALL_SSE_REGS class, so it is redundant. The patch makes
all 512-bit SSE modes tieable. It also lowers priority of allocating
EVEX SSE registers due to their larger insn size.

3. Renames MASK_REGS to ALL_MASK_REGS and MASK_EVEX_REGS to MASK_REGS.

This is to follow SSE example, where all SSE registers form ALL_SSE_REGS class.

2018-09-23   Uros Bizjak  <ubizjak@gmail.com>

    * config/i386/i386.h (enum reg_class): Rename MASK_REGS to
    ALL_MASK_REGS and MASK_EVEX_REGS to MASK_REGS.
    (MASK_CLASS_P): Update for rename.
    (MAYBE_MASK_CLASS_P): Ditto.
    (REG_CLASS_NAMES): Update.
    (REG_CLASS_CONTENT): Update.
    * config/i386/i386.c (regclass_map): Update for MASK_REG
    and ALL_MASK_REGS rename.
    * config/i386/constraints.md (Yk): Update for rename.
    (k): Ditto.

2018-09-23   Uros Bizjak  <ubizjak@gmail.com>

    * config/i386/i386.h (enum reg_class): Remove
    EVEX_SSE_REGS and MOD4_SSE_REGS.
    (REG_CLASS_NAMES): Update.
    (REG_CLASS_CONTENT): Update.
    * config/i386/i386.c (regclass_map): Declare AVX-512 SSE
    registers as ALL_SSE_REGS.
    (ix86_additional_allocno_class_p): Remove.
    (TARGET_ADDITIONAL_ALLOCNO_CLASS_P): Remove.
    (ix86_register_priority): Lower priority of EVEX SSE registers.
    Use IN_RANGE macro where appropriate.
    (ix86_hard_regno_mode_ok): Merge AVX-5124FMAPS and
    AVX-5124VNNIW checks.
    (ix86_modes_tieable_p): Tie 512-bit SSE modes.
    * config/i386/sse.md (avx5124fmaddps_4fmaddps)
    (avx5124fmaddps_4fmaddps_mask, avx5124fmaddps_4fmaddps_maskz)
    (avx5124fmaddps_4fmaddss, avx5124fmaddps_4fmaddss_mask)
    (avx5124fmaddps_4fmaddss_maskz, avx5124fmaddps_4fnmaddps)
    (avx5124fmaddps_4fnmaddps_mask, avx5124fmaddps_4fnmaddps_maskz)
    (avx5124fmaddps_4fnmaddss, avx5124fmaddps_4fnmaddss_mask)
    (avx5124fmaddps_4fnmaddss_maskz, avx5124vnniw_vp4dpwssd)
    (avx5124vnniw_vp4dpwssd_mask, avx5124vnniw_vp4dpwssd_maskz)
    (avx5124vnniw_vp4dpwssds, avx5124vnniw_vp4dpwssds_mask)
    (avx5124vnniw_vp4dpwssds_maskz): Use "v" instead of "Yh" constraint.
    * config/i386/constraints.md (Yh): Remove.

2018-09-23   Uros Bizjak  <ubizjak@gmail.com>

    * config/i386/i386.c (regclass_map): Declare integer REX registers
    as GENERAL_REGS.

Patch was bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.

Committed to mainline, but all stand-by to solve possible regressions.

Uros.

Attachment: p.diff.txt
Description: Text document


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