On Thu, Jul 9, 2015 at 10:17 PM, Jakub Jelinek <ja...@redhat.com> wrote: > On Thu, Jul 09, 2015 at 10:13:49PM +0200, Uros Bizjak wrote: >> I was under impression that peephole2 pass doesn't see subregs of hard >> regs (all x86 predicates are written in this way). Even documentation >> somehow agrees with this: >> >> '(subreg:M1 REG:M2 BYTENUM)' >> >> 'subreg' expressions are used to refer to a register in a machine >> mode other than its natural one, or to refer to one register of a >> multi-part 'reg' that actually refers to several registers. >> >> Each pseudo register has a natural mode. If it is necessary to >> operate on it in a different mode, the register must be enclosed in >> a 'subreg'. >> >> There are currently three supported types for the first operand of >> a 'subreg': >> >> [...] >> >> * hard registers It is seldom necessary to wrap hard registers >> in 'subreg's; such registers would normally reduce to a single >> 'reg' rtx. This use of 'subreg's is discouraged and may not >> be supported in the future. >> >> So, I'd say that generating naked SUBREG after reload should be >> avoided and gen_lowpart should be used in the code above. > > There is also: > emit_insn (gen_sse2_loadld (operands[3], CONST0_RTX (V4SImode), > gen_rtx_SUBREG (SImode, operands[1], 0))); > emit_insn (gen_sse2_loadld (operands[4], CONST0_RTX (V4SImode), > gen_rtx_SUBREG (SImode, operands[1], 4))); > in some splitters (also post-reload).
These won't hit the peephole2, changed by the patch, but let's fix these before they start to break. Uros.