Hi Sanjiv, The PIC16TargetAsmInfo::getBSSSectionForGlobal apparently does magic that reinterprets the "section" field of a global in a strange way: // If GV has a sectin name or section address create that section now. if (GV->hasSection()) { std::string SectName = GV->getSection(); // If address for a variable is specified, get the address and create // section. std::string AddrStr = "Address="; if (SectName.compare(0, AddrStr.length(), AddrStr) == 0) { std::string SectAddr = SectName.substr(AddrStr.length()); S = CreateSectionForGlobal(GV, SectAddr); } Why isn't the front-end handling this, replacing all uses of the global with the address? Does PIC allow initializing random sections of globals like this? I need to heavily refactor all this code, and since there are no testcases at all for PIC16, I'm afraid of breaking something. -Chris
Alireza.Moshtaghi at microchip.com
2009-Jul-20 23:18 UTC
[LLVMdev] PIC16TargetAsmInfo::getBSSSectionForGlobal
Substituting the uses of a global with an absolute address would make all accesses to that global through pointer, which is very inefficient on PIC16. So we don't change the code generation for that global; instead we only pass the address information to the linker (home made linker) through some assembly directives. What are you trying to do? Are you trying to change the logic of this part or it is only simple refactoring? Regards Ali> -----Original Message----- > From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu]On> Behalf Of Chris Lattner > Sent: Monday, July 20, 2009 3:21 PM > To: Sanjiv Kumar Gupta - I00171 > Cc: LLVM Developers Mailing List > Subject: [LLVMdev] PIC16TargetAsmInfo::getBSSSectionForGlobal > > > Hi Sanjiv, > > The PIC16TargetAsmInfo::getBSSSectionForGlobal apparently does magic > that reinterprets the "section" field of a global in a strange way: > > // If GV has a sectin name or section address create that section > now. > if (GV->hasSection()) { > std::string SectName = GV->getSection(); > // If address for a variable is specified, get the address and > create > // section. > std::string AddrStr = "Address="; > if (SectName.compare(0, AddrStr.length(), AddrStr) == 0) { > std::string SectAddr = SectName.substr(AddrStr.length()); > S = CreateSectionForGlobal(GV, SectAddr); > } > > Why isn't the front-end handling this, replacing all uses of the > global with the address? Does PIC allow initializing random sections > of globals like this? I need to heavily refactor all this code, and > since there are no testcases at all for PIC16, I'm afraid of breaking > something. > > -Chris > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
On Jul 20, 2009, at 4:18 PM, Alireza.Moshtaghi at microchip.com wrote:> Substituting the uses of a global with an absolute address would make > all accesses to that global through pointer, which is very inefficient > on PIC16. So we don't change the code generation for that global; > instead we only pass the address information to the linker (home made > linker) through some assembly directives. > What are you trying to do? Are you trying to change the logic of this > part or it is only simple refactoring?My short term goal is to make TargetAsmInfo not depend on libvmcore. This means that no methods in it should take GlobalValue*'s for example. There is a suite of GV classification methods that need to be moved somewhere else, probably in TargetLowering or asmprinter. One method in particular (SectionForGlobal) is virtual and only re- implemented for PIC16, which makes it an obvious candidate for changing. I don't really understand all the section handling logic, but I have to untangle it. It doesn't seem like it is properly factored somehow, so I'd like to simplify it while I'm moving stuff. I don't want to break PIC16, but again, there are no testcases! -Chris> > Regards > Ali > >> -----Original Message----- >> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev- >> bounces at cs.uiuc.edu] > On >> Behalf Of Chris Lattner >> Sent: Monday, July 20, 2009 3:21 PM >> To: Sanjiv Kumar Gupta - I00171 >> Cc: LLVM Developers Mailing List >> Subject: [LLVMdev] PIC16TargetAsmInfo::getBSSSectionForGlobal >> >> >> Hi Sanjiv, >> >> The PIC16TargetAsmInfo::getBSSSectionForGlobal apparently does magic >> that reinterprets the "section" field of a global in a strange way: >> >> // If GV has a sectin name or section address create that section >> now. >> if (GV->hasSection()) { >> std::string SectName = GV->getSection(); >> // If address for a variable is specified, get the address and >> create >> // section. >> std::string AddrStr = "Address="; >> if (SectName.compare(0, AddrStr.length(), AddrStr) == 0) { >> std::string SectAddr = SectName.substr(AddrStr.length()); >> S = CreateSectionForGlobal(GV, SectAddr); >> } >> >> Why isn't the front-end handling this, replacing all uses of the >> global with the address? Does PIC allow initializing random sections >> of globals like this? I need to heavily refactor all this code, and >> since there are no testcases at all for PIC16, I'm afraid of breaking >> something. >> >> -Chris >> _______________________________________________ >> 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