Le jeudi 06 janvier 2011 à 09:29 -0800, Richard Henderson a écrit : > On 01/06/2011 06:58 AM, Frederic Riss wrote: > > 136 is a pseudo. I have movdf and movsf patterns that accepts > > constants. > > This one statement is suspicious to me. Do I read from this that > you have fp move patterns that accept constants but not registers?
No , I was just pointing out that they don't reject constants because the pattern in question was moving a constant. > Move patterns are special in that they *must* handle everything, > modulo some constants which reload can spill to memory. Yes I learned that a few weeks ago while working on improving my testsuite results (although this particular error was only causing a few obscure failures in the C++ tests). > The other piece of advice that I can give from elsewhere in this > thread is that you should never match or generate SUBREG by hand. > You should always use the gen_lowpart, gen_highpart, simplify_gen_subreg > interfaces. Those will greatly simplify the double-subreg issues > that you have been having. Yeah, Ian pointed me at those. I'll update my code. > Finally, do you actually have dedicated hard registers for fp? If > yours is a soft-fp target -- or one of the rare targets that does > hard fp out of the general register set -- consider totally eliminating > the fp move patterns. Once upon a time gcc required them even for > soft-fp, but we've gotten much better with introduction of the > lower-subreg pass. Not that too many existing ports have been updated > for that pass, leading others to conclude that the patterns are still > required... This is quite interesting. I'll remove the patterns and see what happens. Thanks for all the advice! Fred