Skip to content

Commit

Permalink
[PGO] Stop using invalid char in instr variable names.
Browse files Browse the repository at this point in the history
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

llvm-svn: 255365
  • Loading branch information
david-xl committed Dec 11, 2015
1 parent e2ccd33 commit c79283e
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 8 deletions.
2 changes: 1 addition & 1 deletion llvm/include/llvm/ProfileData/InstrProf.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
#include <system_error>
#include <vector>

#define INSTR_PROF_INDEX_VERSION 3
#define INSTR_PROF_INDEX_VERSION 4
namespace llvm {

class Function;
Expand Down
9 changes: 5 additions & 4 deletions llvm/lib/ProfileData/InstrProf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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>:" : "__unknown__");
const char *Sep = (Version <= 3 ? ":" : "__");

std::string FuncName = RawFuncName;
if (llvm::GlobalValue::isLocalLinkage(Linkage)) {
Expand All @@ -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, "<unknown>:");
FuncName = FuncName.insert(0, Unknown);
else
FuncName = FuncName.insert(0, FileName.str() + ":");
FuncName = FuncName.insert(0, FileName.str() + Sep);
}
return FuncName;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ test_criticalEdge
2
1

<stdin>:bar
<stdin>__bar
12884901887
1
7
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/Transforms/PGOProfile/criticaledge.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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_<stdin>:bar" = private constant [11 x i8] c"<stdin>:bar"
; GEN: @"__llvm_profile_name_<stdin>__bar" = private constant [12 x i8] c"<stdin>__bar"

define i32 @test_criticalEdge(i32 %i, i32 %j) {
entry:
Expand Down Expand Up @@ -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_<stdin>: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_<stdin>__bar", i32 0, i32 0), i64 12884901887, i32 1, i32 0)
ret i32 %i
}

Expand Down
Binary file not shown.
7 changes: 7 additions & 0 deletions llvm/test/tools/llvm-profdata/compat.proftext
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,10 @@ large_numbers
# FORMATV2-NEXT: Maximum internal block count: 1000000


# RUN: llvm-profdata show %S/Inputs/compat.profdata.v4 -all-functions --counts | FileCheck %s -check-prefix=FORMATV4
# FORMATV4: instrprof.c__foo_static:
# FORMATV4-NEXT: Hash: 0x000000000000000a
# FORMATV4-NEXT: Counters: 2
# FORMATV4-NEXT: Function count: 500500
# FORMATV4-NEXT: Block counts: [180100]

0 comments on commit c79283e

Please sign in to comment.