Dear guys, I want to coalesce some copies, and I would like to know if there is any method that I can call, like JoinCopy from the old (LLVM 1.9) LiveIntervals class. I found it in SimpleRegisterCoalescing (LLVM 2.1), but I do not want to call this analysis, as I have my own. basically, I can determine that two virtuals do not overlap, and I know that it is safe to join them. In the old v1.9, I simply had to do this: this->interval_analysis_->JoinCopy(mach_inst, use_eg, def_reg); best, Fernando
On Saturday 15 December 2007 18:45, Fernando Magno Quintao Pereira wrote:> Dear guys, > > I want to coalesce some copies, and I would like to know if there is > any method that I can call, like JoinCopy from the old (LLVM 1.9) > LiveIntervals class. I found it in SimpleRegisterCoalescing (LLVM 2.1), > but I do not want to call this analysis, as I have my own. > > basically, I can determine that two virtuals do not overlap, and I > know that it is safe to join them. In the old v1.9, I simply had to do > this: > > this->interval_analysis_->JoinCopy(mach_inst, use_eg, def_reg);Fernando, I had a similar requirement and did a ton of work to refactor SimpleRegisterCoalescing to break out the joining and dataflow update code into independent routines. My custom coalescer calls them to do the heavy lifting. There was quite a bit of debugging involved in this. :) I've been meaning to submit this back to upstream. This looks like a good time to do so. I'll see if I can get a draft patch soon. -Dave
On Dec 15, 2007, at 4:45 PM, Fernando Magno Quintao Pereira wrote:> > Dear guys, > > I want to coalesce some copies, and I would like to know if > there is > any method that I can call, like JoinCopy from the old (LLVM 1.9) > LiveIntervals class. I found it in SimpleRegisterCoalescing (LLVM > 2.1), > but I do not want to call this analysis, as I have my own. > > basically, I can determine that two virtuals do not overlap, and I > know that it is safe to join them. In the old v1.9, I simply had to do > this: > > this->interval_analysis_->JoinCopy(mach_inst, use_eg, def_reg);SimpleRegisterCoalescing::JoinCopy hasn't fundamentally changed from the old JoinCopy. It still does the same sort of analysis. The only change really is the interface. Evan> > > best, > > Fernando > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
Dear Dave, Evan, thank you for answering. What I did was to remove the implementation of most of the methods of SimpleRegisterCoalescing and put them in a single class (RegisterCoalescer_Impl) that is not an analysis. Any class that wants these methods, can extend this class privately, or can use a reference to an RegisterCoalescer_Impl object. I wish it would be possible to go even further: given that I know that two virtuals do not interfere, I would like to coalesce them by simply joining their interval representation. When I call JoinCopy, the method does that, but it checks again a lot of information that I already know: do not overlap, are virtuals, etc. best, Fernando> > On Dec 15, 2007, at 4:45 PM, Fernando Magno Quintao Pereira wrote: > >> >> Dear guys, >> >> I want to coalesce some copies, and I would like to know if >> there is >> any method that I can call, like JoinCopy from the old (LLVM 1.9) >> LiveIntervals class. I found it in SimpleRegisterCoalescing (LLVM >> 2.1), >> but I do not want to call this analysis, as I have my own. >> >> basically, I can determine that two virtuals do not overlap, and I >> know that it is safe to join them. In the old v1.9, I simply had to do >> this: >> >> this->interval_analysis_->JoinCopy(mach_inst, use_eg, def_reg); > > SimpleRegisterCoalescing::JoinCopy hasn't fundamentally changed from > the old JoinCopy. It still does the same sort of analysis. The only > change really is the interface. > > Evan > >> >> >> best, >> >> Fernando >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >