summaryrefslogtreecommitdiffstats
path: root/llvm/lib/IR
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2013-06-01 17:51:14 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2013-06-01 17:51:14 +0000
commit7c275640e734a47fc4121590dbf772cf996aabb3 (patch)
tree8f766c55ed9be2308036ab0a665772b9b0de1e53 /llvm/lib/IR
parent320682fef8c6449ad486612616021cc9f382a857 (diff)
downloadbcm5719-llvm-7c275640e734a47fc4121590dbf772cf996aabb3.tar.gz
bcm5719-llvm-7c275640e734a47fc4121590dbf772cf996aabb3.zip
Move getRealLinkageName to a common place and remove all the duplicates of it.
Also simplify code a bit while there. No functionality change. llvm-svn: 183076
Diffstat (limited to 'llvm/lib/IR')
-rw-r--r--llvm/lib/IR/DebugInfo.cpp41
1 files changed, 16 insertions, 25 deletions
diff --git a/llvm/lib/IR/DebugInfo.cpp b/llvm/lib/IR/DebugInfo.cpp
index 68435810edd..24b061282d4 100644
--- a/llvm/lib/IR/DebugInfo.cpp
+++ b/llvm/lib/IR/DebugInfo.cpp
@@ -764,12 +764,20 @@ DIArray DICompileUnit::getImportedEntities() const {
return DIArray();
}
-/// fixupObjcLikeName - Replace contains special characters used
+/// fixupSubprogramName - Replace contains special characters used
/// in a typical Objective-C names with '.' in a given string.
-static void fixupObjcLikeName(StringRef Str, SmallVectorImpl<char> &Out) {
+static void fixupSubprogramName(DISubprogram Fn, SmallVectorImpl<char> &Out) {
+ StringRef FName =
+ Fn.getFunction() ? Fn.getFunction()->getName() : Fn.getName();
+ FName = Function::getRealLinkageName(FName);
+
+ StringRef Prefix("llvm.dbg.lv.");
+ Out.reserve(FName.size() + Prefix.size());
+ Out.append(Prefix.begin(), Prefix.end());
+
bool isObjCLike = false;
- for (size_t i = 0, e = Str.size(); i < e; ++i) {
- char C = Str[i];
+ for (size_t i = 0, e = FName.size(); i < e; ++i) {
+ char C = FName[i];
if (C == '[')
isObjCLike = true;
@@ -784,33 +792,16 @@ static void fixupObjcLikeName(StringRef Str, SmallVectorImpl<char> &Out) {
/// getFnSpecificMDNode - Return a NameMDNode, if available, that is
/// suitable to hold function specific information.
NamedMDNode *llvm::getFnSpecificMDNode(const Module &M, DISubprogram Fn) {
- SmallString<32> Name = StringRef("llvm.dbg.lv.");
- StringRef FName = "fn";
- if (Fn.getFunction())
- FName = Fn.getFunction()->getName();
- else
- FName = Fn.getName();
- char One = '\1';
- if (FName.startswith(StringRef(&One, 1)))
- FName = FName.substr(1);
- fixupObjcLikeName(FName, Name);
+ SmallString<32> Name;
+ fixupSubprogramName(Fn, Name);
return M.getNamedMetadata(Name.str());
}
/// getOrInsertFnSpecificMDNode - Return a NameMDNode that is suitable
/// to hold function specific information.
NamedMDNode *llvm::getOrInsertFnSpecificMDNode(Module &M, DISubprogram Fn) {
- SmallString<32> Name = StringRef("llvm.dbg.lv.");
- StringRef FName = "fn";
- if (Fn.getFunction())
- FName = Fn.getFunction()->getName();
- else
- FName = Fn.getName();
- char One = '\1';
- if (FName.startswith(StringRef(&One, 1)))
- FName = FName.substr(1);
- fixupObjcLikeName(FName, Name);
-
+ SmallString<32> Name;
+ fixupSubprogramName(Fn, Name);
return M.getOrInsertNamedMetadata(Name.str());
}
OpenPOWER on IntegriCloud