Currently the ARM port does constant islands on a per function basis. I'm aware of at least one other port that does this kind of optimization on the mc layer. To do such long/short jump and load optimizations, you don't need anything about registers or basic blocks. So it seems this would be better because then you can pool things on a per module basis. In the case of Mips16, the addresses or offsets into the got for functions are a common 32 bit literal and there would be a high likelihood of calling the same function multiple times in a module. Thoughts? Reed
ARM absolutely needs to know about control flow in that pass. -Jim On Oct 11, 2013, at 2:16 PM, reed kotler <rkotler at mips.com> wrote:> Currently the ARM port does constant islands on a per function basis. > > I'm aware of at least one other port that does this kind of optimization on the mc layer. > > To do such long/short jump and load optimizations, you don't need anything about registers or basic blocks. > > So it seems this would be better because then you can pool things on a per module basis. > > In the case of Mips16, the addresses or offsets into the got for functions are a common 32 bit literal and there would be a high likelihood of calling the same function multiple times in a module. > > Thoughts? > > Reed > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
On 10/11/2013 02:22 PM, Jim Grosbach wrote:> ARM absolutely needs to know about control flow in that pass.Why does it need to know about control flow? I'm asking because I don't really know much about ARM and possibly Mips16 will have the same issues. Reed> -Jim > > On Oct 11, 2013, at 2:16 PM, reed kotler <rkotler at mips.com> wrote: > >> Currently the ARM port does constant islands on a per function basis. >> >> I'm aware of at least one other port that does this kind of optimization on the mc layer. >> >> To do such long/short jump and load optimizations, you don't need anything about registers or basic blocks. >> >> So it seems this would be better because then you can pool things on a per module basis. >> >> In the case of Mips16, the addresses or offsets into the got for functions are a common 32 bit literal and there would be a high likelihood of calling the same function multiple times in a module. >> >> Thoughts? >> >> Reed >> >> >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev