Jeff Kunkel
2010-Sep-03 17:46 UTC
[LLVMdev] [LLVMDev] [Question] How do I get the number of machine registers.
It's not too much of a problem then. I can make a DenseMap between the registers and my registers. It's just one more intermediate step for a lookup. I wish to mimic all the of the registers on the machine with my std::vector<RegisterInfo> RegisterIndexes; vector. Then when a register is used I can assign it easily. I know about alias register and those are taken care of ever so cleverly. If this can be done without an extra lookup, it would improve performance. I have one too many as is in some parts. Thanks, Jeff Kunkel On Fri, Sep 3, 2010 at 12:57 PM, Jim Grosbach <grosbach at apple.com> wrote:> TargetRegisterInfo::getNumRegs(). > > Generally, it's best not to make any assumptions about the internal > ordering or numbering if you can avoid it. What are you looking to do? > > -Jim > > On Sep 3, 2010, at 9:37 AM, Jeff Kunkel wrote: > > > How do I get the total number of machine registers? I have currently a > MachineFunction and some derivatives. > > > > How are the machine registers ordered internally? Can I index them off of > a zero based array or do I have to create a map to have them be zero based? > > > > Thanks, > > Jeff Kunkel > > _______________________________________________ > > LLVM Developers mailing list > > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100903/6d0e2021/attachment.html>
Jim Grosbach
2010-Sep-03 18:54 UTC
[LLVMdev] [LLVMDev] [Question] How do I get the number of machine registers.
On Sep 3, 2010, at 10:46 AM, Jeff Kunkel wrote:> It's not too much of a problem then. I can make a DenseMap between the registers and my registers. It's just one more intermediate step for a lookup. > > I wish to mimic all the of the registers on the machine with my std::vector<RegisterInfo> RegisterIndexes; vector. Then when a register is used I can assign it easily. I know about alias register and those are taken care of ever so cleverly.Is this because you want to control the order in which the physical registers are allocated? If so, it'll normally be better to use the TargetRegisterClass::allocation_order_begin() and allocation_order_end() functions to control that. These can be overridden directly in the .td file (see the ARMRegisterInfo.td file for examples) if you want. Other pieces of the compiler also use those iterators to walk the available registers in a register class for local allocation needs, so it's best to keep that logic together (the register scavenger and the anti-dependency breaker, in particular, use them). Within a register class, the registers will be sorted by name, so if they're named generically ("R0, R1, R2..."), they'll be ordered as you'd expect (including knowing that R10 > R1, I believe). The default allocation order just has begin() be the first register of the class and end() be one past the last register in the class (i.e., it's all the registers in the register class, in order). One thing to keep in mind is that the an allocator should explicitly check for reserved registers and avoid allocating them. Allocation orders are not required to omit reserved registers (although some do). See the recent series of patches the RegAlloc*.cpp for reference. Regards, Jim> > If this can be done without an extra lookup, it would improve performance. I have one too many as is in some parts. > > Thanks, > Jeff Kunkel > > On Fri, Sep 3, 2010 at 12:57 PM, Jim Grosbach <grosbach at apple.com> wrote: > TargetRegisterInfo::getNumRegs(). > > Generally, it's best not to make any assumptions about the internal ordering or numbering if you can avoid it. What are you looking to do? > > -Jim > > On Sep 3, 2010, at 9:37 AM, Jeff Kunkel wrote: > > > How do I get the total number of machine registers? I have currently a MachineFunction and some derivatives. > > > > How are the machine registers ordered internally? Can I index them off of a zero based array or do I have to create a map to have them be zero based? > > > > Thanks, > > Jeff Kunkel > > _______________________________________________ > > LLVM Developers mailing list > > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >
Jeff Kunkel
2010-Sep-03 19:10 UTC
[LLVMdev] [LLVMDev] [Question] How do I get the number of machine registers.
I am using allocation_order_begin() and allocation_order_end(). Thank you about the caveat about reserved registers. On Fri, Sep 3, 2010 at 2:54 PM, Jim Grosbach <grosbach at apple.com> wrote:> > On Sep 3, 2010, at 10:46 AM, Jeff Kunkel wrote: > > > It's not too much of a problem then. I can make a DenseMap between the > registers and my registers. It's just one more intermediate step for a > lookup. > > > > I wish to mimic all the of the registers on the machine with my > std::vector<RegisterInfo> RegisterIndexes; vector. Then when a register is > used I can assign it easily. I know about alias register and those are taken > care of ever so cleverly. > > Is this because you want to control the order in which the physical > registers are allocated? If so, it'll normally be better to use the > TargetRegisterClass::allocation_order_begin() and allocation_order_end() > functions to control that. These can be overridden directly in the .td file > (see the ARMRegisterInfo.td file for examples) if you want. Other pieces of > the compiler also use those iterators to walk the available registers in a > register class for local allocation needs, so it's best to keep that logic > together (the register scavenger and the anti-dependency breaker, in > particular, use them). > > Within a register class, the registers will be sorted by name, so if > they're named generically ("R0, R1, R2..."), they'll be ordered as you'd > expect (including knowing that R10 > R1, I believe). The default allocation > order just has begin() be the first register of the class and end() be one > past the last register in the class (i.e., it's all the registers in the > register class, in order). > > One thing to keep in mind is that the an allocator should explicitly check > for reserved registers and avoid allocating them. Allocation orders are not > required to omit reserved registers (although some do). See the recent > series of patches the RegAlloc*.cpp for reference. > > Regards, > Jim > > > > > If this can be done without an extra lookup, it would improve > performance. I have one too many as is in some parts. > > > > Thanks, > > Jeff Kunkel > > > > On Fri, Sep 3, 2010 at 12:57 PM, Jim Grosbach <grosbach at apple.com> > wrote: > > TargetRegisterInfo::getNumRegs(). > > > > Generally, it's best not to make any assumptions about the internal > ordering or numbering if you can avoid it. What are you looking to do? > > > > -Jim > > > > On Sep 3, 2010, at 9:37 AM, Jeff Kunkel wrote: > > > > > How do I get the total number of machine registers? I have currently a > MachineFunction and some derivatives. > > > > > > How are the machine registers ordered internally? Can I index them off > of a zero based array or do I have to create a map to have them be zero > based? > > > > > > Thanks, > > > Jeff Kunkel > > > _______________________________________________ > > > LLVM Developers mailing list > > > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > > > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > > > > > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100903/1451acfa/attachment.html>
Reasonably Related Threads
- [LLVMdev] [LLVMDev] [Question] How do I get the number of machine registers.
- [LLVMdev] [LLVMDev] [Question] How do I get the number of machine registers.
- [LLVMdev] [LLVMDev] [Question] How do I get the number of machine registers.
- [LLVMdev] [LLVMDev] [Question] The TargetRegisterClass has a confusing method.
- [LLVMdev] allocation_order_begin takes non-const reference for MachineFunction