-std::string NVPTXAsmPrinter::getSymbolName(const GlobalValue *GV) const {
- // Obtain the original symbol name.
- MCSymbol *Sym = getSymbol(GV);
- std::string OriginalName;
- raw_string_ostream OriginalNameStream(OriginalName);
- Sym->print(OriginalNameStream);
- OriginalNameStream.flush();
-
- // MCSymbol already does symbol-name sanitizing, so names it produces are
- // valid for object files. The only two characters valida in that context
- // and indigestible by the PTX assembler are '.' and '@'.
- std::string CleanName;
- raw_string_ostream CleanNameStream(CleanName);
- for (unsigned I = 0, E = OriginalName.size(); I != E; ++I) {
- char C = OriginalName[I];
- if (C == '.') {
- CleanNameStream << "_$_";
- } else if (C == '@') {
- CleanNameStream << "_%_";
- } else {
- CleanNameStream << C;
- }
- }
-
- return CleanNameStream.str();
-}
-