On Thu, May 16, 2019 at 09:25:49AM +0200, Richard Biener wrote: > On Wed, 15 May 2019, Segher Boessenkool wrote: > > > Otherwise I understand that IVOPTs doesn't properly cost > > > the doloop IV update and conditional branch. > > > > Currently it doesn't even *know* something is or isn't a doloop. > > And yeah that matters a lot for proper costing, on all targets that > > have a doloop. > > Ah, OK. So for general handling IVOPTs would add a new > candidate kind (doloop kind) which is costed differently > at the various uses.
That sounds good. > The "guessed" RTL we create for > costing also needs to properly create a proper counter reg > (IIRC it always creates pseudos right now, but here it would > need to be a hard reg so costing can properly pessimize uses > in addresses/memory?). We always use a pseudo currently; it is not turned into a hard register until after RA. Expanding as hard registers directly works really well, *if* you can put *all* uses of that hard reg into the RTl at expand time already. Indirect jumps and switch tables want to use the count register as well; this complicates things enormously. Also, sometimes a loop is mangled enough (in RTL) that it is better to use a GPR as IV. > > The different cost for a doloop is pretty easy... Might have to > > be a target hook though; on Power the decrement + compare-to-zero > > are "free", while on some other targets only the "compare" is. > > The cost for using the IV... For us we could just disallow it > > being used at all (except for the looping itself of course), but > > not sure what is optimal in general. Another hook? > > Indeed the easiest thing is to simply disallow uses of the doloop > IV outside of the increment, compare and branch (maybe have a > target hook that says whether a particular IV may be used for > a particular USE). But is that generic enough? > We'd still need to cost the spilling thing around calls of course, > but this can maybe be done incrementally. It's still RTL doloop > that ultimatively decides on the doloop use. We cannot have doloops with calls, on rs6000. This differs per target of course. We really need to get a good overview of what our various targets need. Segher