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 * 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 * 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 * 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.