From b6b389aaac0ff6e3d3b4002e79b47a1a14e076c7 Mon Sep 17 00:00:00 2001 From: Xinliang David Li Date: Fri, 11 Dec 2015 19:53:19 +0000 Subject: [PATCH] [PGO] Stop using invalid char in instr variable names. Before the patch, -fprofile-instr-generate compile will fail if no integrated-as is specified when the file contains any static functions (the -S output is also invalid). This patch fixed the issue. With the change, the index format version will be bumped up by 1. Backward compatibility is preserved with this change. Differential Revision: http://reviews.llvm.org/D15243 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255365 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ProfileData/InstrProf.h | 2 +- lib/ProfileData/InstrProf.cpp | 9 +++++---- .../PGOProfile/Inputs/criticaledge.proftext | 2 +- test/Transforms/PGOProfile/criticaledge.ll | 4 ++-- .../tools/llvm-profdata/Inputs/compat.profdata.v4 | Bin 0 -> 816 bytes test/tools/llvm-profdata/compat.proftext | 7 +++++++ 6 files changed, 16 insertions(+), 8 deletions(-) create mode 100644 test/tools/llvm-profdata/Inputs/compat.profdata.v4 diff --git a/include/llvm/ProfileData/InstrProf.h b/include/llvm/ProfileData/InstrProf.h index 2730cc167f7..577201542a9 100644 --- a/include/llvm/ProfileData/InstrProf.h +++ b/include/llvm/ProfileData/InstrProf.h @@ -30,7 +30,7 @@ #include #include -#define INSTR_PROF_INDEX_VERSION 3 +#define INSTR_PROF_INDEX_VERSION 4 namespace llvm { class Function; diff --git a/lib/ProfileData/InstrProf.cpp b/lib/ProfileData/InstrProf.cpp index a965a1208b5..2608847fd10 100644 --- a/lib/ProfileData/InstrProf.cpp +++ b/lib/ProfileData/InstrProf.cpp @@ -74,14 +74,15 @@ namespace llvm { std::string getPGOFuncName(StringRef RawFuncName, GlobalValue::LinkageTypes Linkage, - StringRef FileName, - uint64_t Version LLVM_ATTRIBUTE_UNUSED) { + StringRef FileName, uint64_t Version) { // Function names may be prefixed with a binary '1' to indicate // that the backend should not modify the symbols due to any platform // naming convention. Do not include that '1' in the PGO profile name. if (RawFuncName[0] == '\1') RawFuncName = RawFuncName.substr(1); + const char *Unknown = (Version <= 3 ? ":" : "__unknown__"); + const char *Sep = (Version <= 3 ? ":" : "__"); std::string FuncName = RawFuncName; if (llvm::GlobalValue::isLocalLinkage(Linkage)) { @@ -90,9 +91,9 @@ std::string getPGOFuncName(StringRef RawFuncName, // that it will stay the same, e.g., if the files are checked out from // version control in different locations. if (FileName.empty()) - FuncName = FuncName.insert(0, ":"); + FuncName = FuncName.insert(0, Unknown); else - FuncName = FuncName.insert(0, FileName.str() + ":"); + FuncName = FuncName.insert(0, FileName.str() + Sep); } return FuncName; } diff --git a/test/Transforms/PGOProfile/Inputs/criticaledge.proftext b/test/Transforms/PGOProfile/Inputs/criticaledge.proftext index f369ba7c350..eb5eb16c6cc 100644 --- a/test/Transforms/PGOProfile/Inputs/criticaledge.proftext +++ b/test/Transforms/PGOProfile/Inputs/criticaledge.proftext @@ -10,7 +10,7 @@ test_criticalEdge 2 1 -:bar +__bar 12884901887 1 7 diff --git a/test/Transforms/PGOProfile/criticaledge.ll b/test/Transforms/PGOProfile/criticaledge.ll index 7898f3b9eb1..7e0a7fd5220 100644 --- a/test/Transforms/PGOProfile/criticaledge.ll +++ b/test/Transforms/PGOProfile/criticaledge.ll @@ -5,7 +5,7 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" ; GEN: @__llvm_profile_name_test_criticalEdge = private constant [17 x i8] c"test_criticalEdge" -; GEN: @"__llvm_profile_name_:bar" = private constant [11 x i8] c":bar" +; GEN: @"__llvm_profile_name___bar" = private constant [12 x i8] c"__bar" define i32 @test_criticalEdge(i32 %i, i32 %j) { entry: @@ -99,7 +99,7 @@ return: define internal i32 @bar(i32 %i) { entry: -; GEN: call void @llvm.instrprof.increment(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @"__llvm_profile_name_:bar", i32 0, i32 0), i64 12884901887, i32 1, i32 0) +; GEN: call void @llvm.instrprof.increment(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @"__llvm_profile_name___bar", i32 0, i32 0), i64 12884901887, i32 1, i32 0) ret i32 %i } diff --git a/test/tools/llvm-profdata/Inputs/compat.profdata.v4 b/test/tools/llvm-profdata/Inputs/compat.profdata.v4 new file mode 100644 index 0000000000000000000000000000000000000000..1720c4072829ec87db96cab7ada73b6554c1d181 GIT binary patch literal 816 zcmeyLQ&5zjmf6U{00AP4*`X{5rN9WG85!;~XRPG*UH?)XDz5>hGxLf|ia>_wCCA67 z<>$v2mn4>CCUZfhnV>Yx;FkRm5e}$0Bg2}#61RO0{fJ?Piogs8nuTtN&U}dL_UuD9 z