hoy created this revision. Herald added subscribers: dexonsmith, wenlei, hiraditya. hoy requested review of this revision. Herald added projects: clang, LLVM. Herald added subscribers: llvm-commits, cfe-commits.
Funtions that are renamed under -funique-internal-linkage-names have their debug linkage name updated as well. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D93747 Files: clang/test/CodeGen/unique-internal-linkage-names.cpp llvm/include/llvm/IR/DebugInfoMetadata.h llvm/lib/Transforms/Utils/UniqueInternalLinkageNames.cpp llvm/test/Transforms/UniqueLinkageNames/unique-internal-linkage-names.ll Index: llvm/test/Transforms/UniqueLinkageNames/unique-internal-linkage-names.ll =================================================================== --- llvm/test/Transforms/UniqueLinkageNames/unique-internal-linkage-names.ll +++ llvm/test/Transforms/UniqueLinkageNames/unique-internal-linkage-names.ll @@ -32,5 +32,6 @@ !17 = !{!13} !18 = !DILocation(line: 6, column: 3, scope: !15) -; CHECK: define internal i32 @foo.__uniq.{{[0-9a-f]+}}() +; CHECK: define internal i32 @foo.__uniq.{{[0-9a-f]+}}() !dbg ![[#DBG:]] ; CHECK: ret {{.*}} @foo.__uniq.{{[0-9a-f]+}} {{.*}} +; CHECK: ![[#DBG]] = distinct !DISubprogram(name: "foo", linkageName: "foo.__uniq.{{[0-9a-f]+}}" Index: llvm/lib/Transforms/Utils/UniqueInternalLinkageNames.cpp =================================================================== --- llvm/lib/Transforms/Utils/UniqueInternalLinkageNames.cpp +++ llvm/lib/Transforms/Utils/UniqueInternalLinkageNames.cpp @@ -13,6 +13,8 @@ #include "llvm/Transforms/Utils/UniqueInternalLinkageNames.h" #include "llvm/ADT/SmallString.h" +#include "llvm/IR/DebugInfoMetadata.h" +#include "llvm/IR/MDBuilder.h" #include "llvm/IR/Module.h" #include "llvm/InitializePasses.h" #include "llvm/Support/MD5.h" @@ -31,11 +33,16 @@ // this symbol is of internal linkage type. std::string ModuleNameHash = (Twine(".__uniq.") + Twine(Str)).str(); bool Changed = false; + MDBuilder MDB(M.getContext()); // Append the module hash to all internal linkage functions. for (auto &F : M) { if (F.hasInternalLinkage()) { F.setName(F.getName() + ModuleNameHash); + if (DISubprogram *SP = F.getSubprogram()) { + auto *Name = MDB.createString(F.getName()); + SP->replaceRawLinkageName(Name); + } Changed = true; } } Index: llvm/include/llvm/IR/DebugInfoMetadata.h =================================================================== --- llvm/include/llvm/IR/DebugInfoMetadata.h +++ llvm/include/llvm/IR/DebugInfoMetadata.h @@ -2053,6 +2053,10 @@ return getNumOperands() > 10 ? getOperandAs<Metadata>(10) : nullptr; } + void replaceRawLinkageName(MDString *LinkageName) { + replaceOperandWith(3, LinkageName); + } + /// Check if this subprogram describes the given function. /// /// FIXME: Should this be looking through bitcasts? Index: clang/test/CodeGen/unique-internal-linkage-names.cpp =================================================================== --- clang/test/CodeGen/unique-internal-linkage-names.cpp +++ clang/test/CodeGen/unique-internal-linkage-names.cpp @@ -5,6 +5,7 @@ // RUN: %clang_cc1 -triple x86_64 -x c++ -O1 -S -emit-llvm -funique-internal-linkage-names -o - < %s | FileCheck %s --check-prefix=UNIQUEO1 // RUN: %clang_cc1 -triple x86_64 -x c++ -O0 -S -emit-llvm -fexperimental-new-pass-manager -funique-internal-linkage-names -o - < %s | FileCheck %s --check-prefix=UNIQUE // RUN: %clang_cc1 -triple x86_64 -x c++ -O1 -S -emit-llvm -fexperimental-new-pass-manager -funique-internal-linkage-names -o - < %s | FileCheck %s --check-prefix=UNIQUEO1 +// RUN: %clang_cc1 -triple x86_64 -x c++ -O2 -S -emit-llvm -fexperimental-new-pass-manager -funique-internal-linkage-names -debug-info-kind=limited -o - < %s | FileCheck %s --check-prefix=UNIQUEDEBUG static int glob; static int foo() { @@ -65,3 +66,5 @@ // UNIQUEO1: define weak_odr i32 ()* @_ZL4mverv.resolver() // UNIQUEO1: define internal i32 @_ZL4mverv.__uniq.{{[0-9a-f]+}}() // UNIQUEO1: define internal i32 @_ZL4mverv.sse4.2.__uniq.{{[0-9a-f]+}} +// UNIQUEDEBUG: define internal i32 @_ZL3foov.__uniq.{{[0-9a-f]+}}() [[ATTR:#[0-9]+]] !dbg ![[#DBG:]] +// UNIQUEDEBUG: ![[#DBG]] = distinct !DISubprogram(name: "foo", linkageName: "_ZL3foov.__uniq.{{[0-9a-f]+}}"
Index: llvm/test/Transforms/UniqueLinkageNames/unique-internal-linkage-names.ll =================================================================== --- llvm/test/Transforms/UniqueLinkageNames/unique-internal-linkage-names.ll +++ llvm/test/Transforms/UniqueLinkageNames/unique-internal-linkage-names.ll @@ -32,5 +32,6 @@ !17 = !{!13} !18 = !DILocation(line: 6, column: 3, scope: !15) -; CHECK: define internal i32 @foo.__uniq.{{[0-9a-f]+}}() +; CHECK: define internal i32 @foo.__uniq.{{[0-9a-f]+}}() !dbg ![[#DBG:]] ; CHECK: ret {{.*}} @foo.__uniq.{{[0-9a-f]+}} {{.*}} +; CHECK: ![[#DBG]] = distinct !DISubprogram(name: "foo", linkageName: "foo.__uniq.{{[0-9a-f]+}}" Index: llvm/lib/Transforms/Utils/UniqueInternalLinkageNames.cpp =================================================================== --- llvm/lib/Transforms/Utils/UniqueInternalLinkageNames.cpp +++ llvm/lib/Transforms/Utils/UniqueInternalLinkageNames.cpp @@ -13,6 +13,8 @@ #include "llvm/Transforms/Utils/UniqueInternalLinkageNames.h" #include "llvm/ADT/SmallString.h" +#include "llvm/IR/DebugInfoMetadata.h" +#include "llvm/IR/MDBuilder.h" #include "llvm/IR/Module.h" #include "llvm/InitializePasses.h" #include "llvm/Support/MD5.h" @@ -31,11 +33,16 @@ // this symbol is of internal linkage type. std::string ModuleNameHash = (Twine(".__uniq.") + Twine(Str)).str(); bool Changed = false; + MDBuilder MDB(M.getContext()); // Append the module hash to all internal linkage functions. for (auto &F : M) { if (F.hasInternalLinkage()) { F.setName(F.getName() + ModuleNameHash); + if (DISubprogram *SP = F.getSubprogram()) { + auto *Name = MDB.createString(F.getName()); + SP->replaceRawLinkageName(Name); + } Changed = true; } } Index: llvm/include/llvm/IR/DebugInfoMetadata.h =================================================================== --- llvm/include/llvm/IR/DebugInfoMetadata.h +++ llvm/include/llvm/IR/DebugInfoMetadata.h @@ -2053,6 +2053,10 @@ return getNumOperands() > 10 ? getOperandAs<Metadata>(10) : nullptr; } + void replaceRawLinkageName(MDString *LinkageName) { + replaceOperandWith(3, LinkageName); + } + /// Check if this subprogram describes the given function. /// /// FIXME: Should this be looking through bitcasts? Index: clang/test/CodeGen/unique-internal-linkage-names.cpp =================================================================== --- clang/test/CodeGen/unique-internal-linkage-names.cpp +++ clang/test/CodeGen/unique-internal-linkage-names.cpp @@ -5,6 +5,7 @@ // RUN: %clang_cc1 -triple x86_64 -x c++ -O1 -S -emit-llvm -funique-internal-linkage-names -o - < %s | FileCheck %s --check-prefix=UNIQUEO1 // RUN: %clang_cc1 -triple x86_64 -x c++ -O0 -S -emit-llvm -fexperimental-new-pass-manager -funique-internal-linkage-names -o - < %s | FileCheck %s --check-prefix=UNIQUE // RUN: %clang_cc1 -triple x86_64 -x c++ -O1 -S -emit-llvm -fexperimental-new-pass-manager -funique-internal-linkage-names -o - < %s | FileCheck %s --check-prefix=UNIQUEO1 +// RUN: %clang_cc1 -triple x86_64 -x c++ -O2 -S -emit-llvm -fexperimental-new-pass-manager -funique-internal-linkage-names -debug-info-kind=limited -o - < %s | FileCheck %s --check-prefix=UNIQUEDEBUG static int glob; static int foo() { @@ -65,3 +66,5 @@ // UNIQUEO1: define weak_odr i32 ()* @_ZL4mverv.resolver() // UNIQUEO1: define internal i32 @_ZL4mverv.__uniq.{{[0-9a-f]+}}() // UNIQUEO1: define internal i32 @_ZL4mverv.sse4.2.__uniq.{{[0-9a-f]+}} +// UNIQUEDEBUG: define internal i32 @_ZL3foov.__uniq.{{[0-9a-f]+}}() [[ATTR:#[0-9]+]] !dbg ![[#DBG:]] +// UNIQUEDEBUG: ![[#DBG]] = distinct !DISubprogram(name: "foo", linkageName: "_ZL3foov.__uniq.{{[0-9a-f]+}}"
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits