On Mon, Sep 8, 2014 at 6:41 PM, Segher Boessenkool <seg...@kernel.crashing.org> wrote: > When reload decides it needs to reload something that was assigned a > register before it will only look at the contraint, not the predicate. > This means that for the *bool<mode>3 I added with predicate logical_operand > (that is registers, and unsigned numbers that have only the low 16 or next > 16 bits set) and contraint "r,n" it will put any integer constant in "n". > That won't work. This patch splits the pattern in two, one for "r", one > for "n", solving the problem. This is not a pessimisation because constant > propagation should already have taken care of any constants we *can* handle. > > Also, this situation happens very rarely: nothing in the testsuite triggers > it, and a normal bootstrap doesn't either, but --enable-checking=release > did. It seems it doesn't happen at all with LRA, or even more rarely. > > Bootstrapped and tested on powerpc64-linux, m64,m32,m32/mpowerpc64,m64/mlra, > no regressions. Also tested with --enable-checking=release, and that now > again bootstraps. > > Okay for mainline? > > > Segher > > > 2014-09-08 Segher Boessenkool <seg...@kernel.crashing.org> > > PR target/63195 > * config/rs6000/rs6000.md (*bool<mode>3): Allow only register > operands. Split off the constant operand alternative to ... > (*bool<mode>3_imm): New.
Okay. Thanks, David