[llvm-commits] [llvm] r71207 - in /llvm/trunk/lib/Target/PIC16: PIC16.h PIC16MemSelOpt.cpp PIC16TargetAsmInfo.cpp
Sanjiv Gupta
sanjiv.gupta at microchip.com
Thu May 7 21:50:15 PDT 2009
Author: sgupta
Date: Thu May 7 23:50:14 2009
New Revision: 71207
URL: http://llvm.org/viewvc/llvm-project?rev=71207&view=rev
Log:
Moved pic16 naming functions to correct place.
No functionality change.
Modified:
llvm/trunk/lib/Target/PIC16/PIC16.h
llvm/trunk/lib/Target/PIC16/PIC16MemSelOpt.cpp
llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp
Modified: llvm/trunk/lib/Target/PIC16/PIC16.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16.h?rev=71207&r1=71206&r2=71207&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PIC16/PIC16.h (original)
+++ llvm/trunk/lib/Target/PIC16/PIC16.h Thu May 7 23:50:14 2009
@@ -87,46 +87,93 @@
FRAME_SECTION,
AUTOS_SECTION
- };
+ };
- };
+ inline static const char *getIDName(IDs id) {
+ switch (id) {
+ default: assert(0 && "Unknown id");
+ case PREFIX_SYMBOL: return "@";
+ case FUNC_AUTOS: return ".auto.";
+ case FUNC_FRAME: return ".frame.";
+ case FUNC_TEMPS: return ".temp.";
+ case FUNC_ARGS: return ".args.";
+ case FUNC_RET: return ".ret.";
+ case FRAME_SECTION: return "fpdata";
+ case AUTOS_SECTION: return "fadata";
+ }
+ }
+
+ inline static IDs getID(const std::string &Sym) {
+ if (Sym.find(getIDName(FUNC_TEMPS)))
+ return FUNC_TEMPS;
+
+ if (Sym.find(getIDName(FUNC_FRAME)))
+ return FUNC_FRAME;
+
+ if (Sym.find(getIDName(FUNC_RET)))
+ return FUNC_RET;
+
+ if (Sym.find(getIDName(FUNC_ARGS)))
+ return FUNC_ARGS;
+
+ if (Sym.find(getIDName(FUNC_AUTOS)))
+ return FUNC_AUTOS;
- inline static const char *getIDName(PIC16ABINames::IDs id) {
- switch (id) {
- default: assert(0 && "Unknown id");
- case PIC16ABINames::PREFIX_SYMBOL: return "@";
- case PIC16ABINames::FUNC_AUTOS: return ".auto.";
- case PIC16ABINames::FUNC_FRAME: return ".frame.";
- case PIC16ABINames::FUNC_TEMPS: return ".temp.";
- case PIC16ABINames::FUNC_ARGS: return ".args.";
- case PIC16ABINames::FUNC_RET: return ".ret.";
- case PIC16ABINames::FRAME_SECTION: return "fpdata";
- case PIC16ABINames::AUTOS_SECTION: return "fadata";
+ if (Sym.find(getIDName(LIBCALL)))
+ return LIBCALL;
+
+ // It does not have any ID. So its a global.
+ assert (0 && "Could not determine ID symbol type");
}
- }
- inline static PIC16ABINames::IDs getID(const std::string &Sym) {
- if (Sym.find(getIDName(PIC16ABINames::FUNC_TEMPS)))
- return PIC16ABINames::FUNC_TEMPS;
+ // Get func name from a mangled name.
+ // In all cases func name is the first component before a '.'.
+ static inline std::string getFuncNameForSym(const std::string &Sym) {
+ const char *prefix = getIDName (PREFIX_SYMBOL);
+
+ // If this name has a prefix, func name start after prfix in that case.
+ size_t func_name_start = 0;
+ if (Sym.find(prefix, 0, strlen(prefix)) != std::string::npos)
+ func_name_start = strlen(prefix);
- if (Sym.find(getIDName(PIC16ABINames::FUNC_FRAME)))
- return PIC16ABINames::FUNC_FRAME;
+ // Position of the . after func name. That's where func name ends.
+ size_t func_name_end = Sym.find ('.', func_name_start);
- if (Sym.find(getIDName(PIC16ABINames::FUNC_RET)))
- return PIC16ABINames::FUNC_RET;
+ return Sym.substr (func_name_start, func_name_end);
+ }
- if (Sym.find(getIDName(PIC16ABINames::FUNC_ARGS)))
- return PIC16ABINames::FUNC_ARGS;
+ // Form a section name given the section type and func name.
+ static std::string
+ getSectionNameForFunc (const std::string &Fname, const IDs sec_id) {
+ std::string sec_id_string = getIDName(sec_id);
+ return sec_id_string + "." + Fname + ".#";
+ }
- if (Sym.find(getIDName(PIC16ABINames::FUNC_AUTOS)))
- return PIC16ABINames::FUNC_AUTOS;
+ // Get the section for the given external symbol names.
+ // This tries to find the type (ID) of the symbol from its mangled name
+ // and return appropriate section name for it.
+ static inline std::string getSectionNameForSym(const std::string &Sym) {
+ std::string SectionName;
+
+ IDs id = getID (Sym);
+ std::string Fname = getFuncNameForSym (Sym);
+
+ switch (id) {
+ default : assert (0 && "Could not determine external symbol type");
+ case FUNC_FRAME:
+ case FUNC_RET:
+ case FUNC_TEMPS:
+ case FUNC_ARGS: {
+ return getSectionNameForFunc (Fname, FRAME_SECTION);
+ }
+ case FUNC_AUTOS: {
+ return getSectionNameForFunc (Fname, AUTOS_SECTION);
+ }
+ }
+ }
+ }; // class PIC16ABINames.
- if (Sym.find(getIDName(PIC16ABINames::LIBCALL)))
- return PIC16ABINames::LIBCALL;
- // It does not have any ID. So its a global.
- assert (0 && "Could not determine ID symbol type");
- }
inline static const char *PIC16CondCodeToString(PIC16CC::CondCodes CC) {
Modified: llvm/trunk/lib/Target/PIC16/PIC16MemSelOpt.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16MemSelOpt.cpp?rev=71207&r1=71206&r2=71207&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PIC16/PIC16MemSelOpt.cpp (original)
+++ llvm/trunk/lib/Target/PIC16/PIC16MemSelOpt.cpp Thu May 7 23:50:14 2009
@@ -145,7 +145,7 @@
// External Symbol is generated for temp data and arguments. They are
// in fpdata.<functionname>.# section.
std::string Sym = Op.getSymbolName();
- NewBank = getSectionNameForSym(Sym);
+ NewBank = PIC16ABINames::getSectionNameForSym(Sym);
}
// If the previous and new section names are same, we don't need to
Modified: llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp?rev=71207&r1=71206&r2=71207&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp Thu May 7 23:50:14 2009
@@ -192,7 +192,7 @@
// variable and should not be printed in global data section.
std::string name = I->getName();
if (name.find(".auto.") != std::string::npos
- || name.find(".arg.") != std::string::npos)
+ || name.find(".args.") != std::string::npos)
continue;
int AddrSpace = I->getType()->getAddressSpace();
@@ -202,58 +202,6 @@
}
-// Helper routine.
-// Func name starts after prefix and followed by a .
-static std::string getFuncNameForSym(const std::string &Sym,
- PIC16ABINames::IDs PrefixType) {
-
- const char *prefix = getIDName (PIC16ABINames::PREFIX_SYMBOL);
-
- // This name may or may not start with prefix;
- // Func names start after prfix in that case.
- size_t func_name_start = 0;
- if (Sym.find(prefix, 0, strlen(prefix)) != std::string::npos)
- func_name_start = strlen(prefix);
-
- // Position of the . after func name.
- size_t func_name_end = Sym.find ('.', func_name_start);
-
- return Sym.substr (func_name_start, func_name_end);
-}
-
-// Helper routine to create a section name given the section prefix
-// and func name.
-static std::string
-getSectionNameForFunc (const std::string &Fname,
- const PIC16ABINames::IDs sec_id) {
- std::string sec_id_string = getIDName (sec_id);
- return sec_id_string + "." + Fname + ".#";
-}
-
-
-// Get the section for the given external symbol names.
-// This function is meant for only mangled external symbol names.
-std::string
-llvm::getSectionNameForSym(const std::string &Sym) {
- std::string SectionName;
-
- PIC16ABINames::IDs id = getID (Sym);
- std::string Fname = getFuncNameForSym (Sym, id);
-
- switch (id) {
- default : assert (0 && "Could not determine external symbol type");
- case PIC16ABINames::FUNC_FRAME:
- case PIC16ABINames::FUNC_RET:
- case PIC16ABINames::FUNC_TEMPS:
- case PIC16ABINames::FUNC_ARGS: {
- return getSectionNameForFunc (Fname, PIC16ABINames::FRAME_SECTION);
- }
- case PIC16ABINames::FUNC_AUTOS: {
- return getSectionNameForFunc (Fname, PIC16ABINames::AUTOS_SECTION);
- }
- }
-}
-
PIC16TargetAsmInfo::~PIC16TargetAsmInfo() {
for (unsigned i = 0; i < BSSSections.size(); i++) {
More information about the llvm-commits
mailing list