On Thu, Mar 17, 2016 at 01:22:04PM -0700, Richard Henderson wrote:
> On 03/16/2016 11:35 PM, Dominik Vogt wrote:
> > How does combine get this idea (it's the only match in the
> > function)?
> >
> > Trying 7 -> 12:
> > Successfully matched this instruction:
> > (set (reg/i:DI 2 %r2)
> > (and:DI (subreg:DI (reg:SI 64) 0)
> > (const_int 4294901775 [0xffff000f])))
> > allowing combination of insns 7 and 12
>
> >From the recorded nonzero_bits.
Understood so far. Now combine tries to combine
(parallel [
(set (reg:SI 64)
(and:SI (mem:SI (reg:DI 2 %r2 [ a ]) [1 *a_2(D)+0 S4 A32])
(const_int -65521 [0xffffffffffff000f])))
(clobber (reg:CC 33 %cc))
])
and
(set (reg:DI 65)
(zero_extend:DI (reg:SI 64)))
Why does it drop the "parallel" and "clobber" in the combination;
is there a way to force combine to keep that?
Trying 6 -> 7:
Failed to match this instruction:
(set (reg:DI 65)
(and:DI (subreg:DI (mem:SI (reg:DI 2 %r2 [ a ]) [1 *a_2(D)+0 S4 A32]) 0)
(const_int 4294901775 [0xffff000f])))
(Because all "and" instructions on s390 clobber the CC, this
pattern does not match anything without the clobber.)
Ciao
Dominik ^_^ ^_^
--
Dominik Vogt
IBM Germany