On Fri, Nov 18, 2016 at 09:29:13AM +0000, Kyrill Tkachov wrote: > >So your COMPONENTS_FOR_BB returns both components in a pair whenever one > >of those is needed? That should work afaics. > > I mean I still want to have one component per register and since > emit_{prologue,epilogue}_components knows how to form pairs from the > components passed down to it I just need to restrict the number of > components in any particular basic block to an even number. > So say a function can wrap 5 registers: x22,x23,x24,x25,x26. > I want get_separate_components to return 5 components since in that hook > we don't know how these registers are distributed across each basic block. > components_for_bb has that information. > In components_for_bb I want to restrict the components for a basic block to > an even number, so if normally all 5 registers would be valid for wrapping > in that bb I'd only choose 4 so I could form 2 pairs. But selecting only 4 > of the 5 registers, say only x22,x23,x24,x25 leads to x26 not being saved > or restored at all, even during the normal prologue and epilogue because > x26 was marked as a component in components_for_bb and therefore omitted > from > the prologue and epilogue. > So I'm thinking x26 should be removed from the wrappable components of > a basic block by disqualify_components. I'm trying that approach now.
My suggestion was, in components_for_bb, whenever you mark x22 as needed you also mark x23 as needed, and whenever you mark x23 as needed you also mark x22. I think this is a lot simpler? Segher