[llvm] [clang] [PGO][GlobalValue][LTO]In GlobalValues::getGlobalIdentifier, use semicolon as delimiter for local-linkage varibles. (PR #74008)

Mingming Liu via cfe-commits cfe-commits at lists.llvm.org
Thu Nov 30 23:09:13 PST 2023


================
@@ -300,12 +316,8 @@ getIRPGONameForGlobalObject(const GlobalObject &GO,
                             GlobalValue::LinkageTypes Linkage,
                             StringRef FileName) {
   SmallString<64> Name;
-  if (llvm::GlobalValue::isLocalLinkage(Linkage)) {
-    Name.append(FileName.empty() ? "<unknown>" : FileName);
-    Name.append(";");
-  }
   Mangler().getNameWithPrefix(Name, &GO, /*CannotUsePrivateLabel=*/true);
----------------
minglotus-6 wrote:

I also thought it was feasible initially. Two kinds of rough edges came up when I tried the implementation. (added some comments to document them)
a) `getIRPGONameForGlobalObject` currently mangles names currently, by passing global values to `getNameWithPrefix`.`getNameWithPrefix` with [GlobalValue parameter](https://github.com/llvm/llvm-project/blob/cf1a979ccfa722c3f9fce28c66c13a222990eac4/llvm/include/llvm/IR/Mangler.h#L33-L39) makes use of other information (e.g., [linkage](https://github.com/llvm/llvm-project/blob/cf1a979ccfa722c3f9fce28c66c13a222990eac4/llvm/lib/IR/Mangler.cpp#L123-L127), [calling-conv](https://github.com/llvm/llvm-project/blob/cf1a979ccfa722c3f9fce28c66c13a222990eac4/llvm/lib/IR/Mangler.cpp#L148-L166) of functions, etc). `getNameWithPrefix` with stringified names as parameter just [use names](https://github.com/llvm/llvm-project/blob/cf1a979ccfa722c3f9fce28c66c13a222990eac4/llvm/lib/IR/Mangler.cpp#L69-L79). For parity we might need a `getGlobalIdentifier` that takes global values (not just stringified names).
b) `getGlobalIdentifier` gets called in many places, and the `\1` handling function in Mangler does [more than dropping `\1`](https://github.com/llvm/llvm-project/blob/cf1a979ccfa722c3f9fce28c66c13a222990eac4/llvm/lib/IR/Mangler.cpp#L33-L60), so embedding Mangler's way of handling `\1` might affect all callers.



https://github.com/llvm/llvm-project/pull/74008


More information about the cfe-commits mailing list