Skip to content

[llvm] Cherry-pick StringMap performance improvements #7211

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@

# CHECK: These are the combined files, with problem files preceded by #:

# CHECK: {{.*}}Inputs/CompileError/HasError.h
# CHECK: Inputs/CompileError/Level1A.h
# CHECK: {{.*}}Inputs/CompileError/HasError.h
14 changes: 10 additions & 4 deletions clang/lib/Frontend/CompilerInvocation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -960,14 +960,20 @@ static void GenerateAnalyzerArgs(AnalyzerOptions &Opts,
AnalyzerOptions ConfigOpts;
parseAnalyzerConfigs(ConfigOpts, nullptr);

for (const auto &C : Opts.Config) {
// Sort options by key to avoid relying on StringMap iteration order.
SmallVector<std::pair<StringRef, StringRef>, 4> SortedConfigOpts;
for (const auto &C : Opts.Config)
SortedConfigOpts.emplace_back(C.getKey(), C.getValue());
llvm::sort(SortedConfigOpts, llvm::less_first());

for (const auto &[Key, Value] : SortedConfigOpts) {
// Don't generate anything that came from parseAnalyzerConfigs. It would be
// redundant and may not be valid on the command line.
auto Entry = ConfigOpts.Config.find(C.getKey());
if (Entry != ConfigOpts.Config.end() && Entry->getValue() == C.getValue())
auto Entry = ConfigOpts.Config.find(Key);
if (Entry != ConfigOpts.Config.end() && Entry->getValue() == Value)
continue;

GenerateArg(Args, OPT_analyzer_config, C.getKey() + "=" + C.getValue(), SA);
GenerateArg(Args, OPT_analyzer_config, Key + "=" + Value, SA);
}

// Nothing to generate for FullCompilerInvocation.
Expand Down
2 changes: 1 addition & 1 deletion clang/unittests/Basic/SarifTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ TEST_F(SarifDocumentWriterTest, checkSerializingArtifacts) {
TEST_F(SarifDocumentWriterTest, checkSerializingCodeflows) {
// GIVEN:
const std::string ExpectedOutput =
R"({"$schema":"https://docs.oasis-open.org/sarif/sarif/v2.1.0/cos02/schemas/sarif-schema-2.1.0.json","runs":[{"artifacts":[{"length":27,"location":{"index":1,"uri":"file:///test-header-1.h"},"mimeType":"text/plain","roles":["resultFile"]},{"length":30,"location":{"index":2,"uri":"file:///test-header-2.h"},"mimeType":"text/plain","roles":["resultFile"]},{"length":28,"location":{"index":3,"uri":"file:///test-header-3.h"},"mimeType":"text/plain","roles":["resultFile"]},{"length":41,"location":{"index":0,"uri":"file:///main.cpp"},"mimeType":"text/plain","roles":["resultFile"]}],"columnKind":"unicodeCodePoints","results":[{"codeFlows":[{"threadFlows":[{"locations":[{"importance":"essential","location":{"message":{"text":"Message #1"},"physicalLocation":{"artifactLocation":{"index":1,"uri":"file:///test-header-1.h"},"region":{"endColumn":8,"endLine":2,"startColumn":1,"startLine":1}}}},{"importance":"important","location":{"message":{"text":"Message #2"},"physicalLocation":{"artifactLocation":{"index":2,"uri":"file:///test-header-2.h"},"region":{"endColumn":8,"endLine":2,"startColumn":1,"startLine":1}}}},{"importance":"unimportant","location":{"message":{"text":"Message #3"},"physicalLocation":{"artifactLocation":{"index":3,"uri":"file:///test-header-3.h"},"region":{"endColumn":8,"endLine":2,"startColumn":1,"startLine":1}}}}]}]}],"level":"warning","locations":[{"physicalLocation":{"artifactLocation":{"index":0,"uri":"file:///main.cpp"},"region":{"endColumn":8,"endLine":2,"startColumn":5,"startLine":2}}}],"message":{"text":"Redefinition of 'foo'"},"ruleId":"clang.unittest","ruleIndex":0}],"tool":{"driver":{"fullName":"sarif test runner","informationUri":"https://clang.llvm.org/docs/UsersManual.html","language":"en-US","name":"sarif test","rules":[{"defaultConfiguration":{"enabled":true,"level":"warning","rank":-1},"fullDescription":{"text":"Example rule created during unit tests"},"id":"clang.unittest","name":"clang unit test"}],"version":"1.0.0"}}}],"version":"2.1.0"})";
R"({"$schema":"https://docs.oasis-open.org/sarif/sarif/v2.1.0/cos02/schemas/sarif-schema-2.1.0.json","runs":[{"artifacts":[{"length":28,"location":{"index":3,"uri":"file:///test-header-3.h"},"mimeType":"text/plain","roles":["resultFile"]},{"length":41,"location":{"index":0,"uri":"file:///main.cpp"},"mimeType":"text/plain","roles":["resultFile"]},{"length":30,"location":{"index":2,"uri":"file:///test-header-2.h"},"mimeType":"text/plain","roles":["resultFile"]},{"length":27,"location":{"index":1,"uri":"file:///test-header-1.h"},"mimeType":"text/plain","roles":["resultFile"]}],"columnKind":"unicodeCodePoints","results":[{"codeFlows":[{"threadFlows":[{"locations":[{"importance":"essential","location":{"message":{"text":"Message #1"},"physicalLocation":{"artifactLocation":{"index":1,"uri":"file:///test-header-1.h"},"region":{"endColumn":8,"endLine":2,"startColumn":1,"startLine":1}}}},{"importance":"important","location":{"message":{"text":"Message #2"},"physicalLocation":{"artifactLocation":{"index":2,"uri":"file:///test-header-2.h"},"region":{"endColumn":8,"endLine":2,"startColumn":1,"startLine":1}}}},{"importance":"unimportant","location":{"message":{"text":"Message #3"},"physicalLocation":{"artifactLocation":{"index":3,"uri":"file:///test-header-3.h"},"region":{"endColumn":8,"endLine":2,"startColumn":1,"startLine":1}}}}]}]}],"level":"warning","locations":[{"physicalLocation":{"artifactLocation":{"index":0,"uri":"file:///main.cpp"},"region":{"endColumn":8,"endLine":2,"startColumn":5,"startLine":2}}}],"message":{"text":"Redefinition of 'foo'"},"ruleId":"clang.unittest","ruleIndex":0}],"tool":{"driver":{"fullName":"sarif test runner","informationUri":"https://clang.llvm.org/docs/UsersManual.html","language":"en-US","name":"sarif test","rules":[{"defaultConfiguration":{"enabled":true,"level":"warning","rank":-1},"fullDescription":{"text":"Example rule created during unit tests"},"id":"clang.unittest","name":"clang unit test"}],"version":"1.0.0"}}}],"version":"2.1.0"})";

const char *SourceText = "int foo = 0;\n"
"int foo = 1;\n"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
// RUN: not llvm-profdata show --debug-info=%t.no.dbg 2>&1 | FileCheck %s --check-prefix NO-DBG
// NO-DBG: unable to correlate profile: could not find any profile metadata in debug info

// CHECK: a
// YAML: Probes:
// YAML: - Function Name: a
// YAML: Linkage Name: a
Expand All @@ -17,7 +16,6 @@
// YAML: Line: [[@LINE+1]]
void a() {}

// CHECK: b
// YAML: - Function Name: b
// YAML: Linkage Name: b
// YAML: CFG Hash: 0x[[#%.1X,HASH:]]
Expand All @@ -27,7 +25,6 @@ void a() {}
// YAML: Line: [[@LINE+1]]
void b() {}

// CHECK: main
// YAML: - Function Name: main
// YAML: Linkage Name: main
// YAML: CFG Hash: 0x[[#%.1X,HASH:]]
Expand All @@ -37,5 +34,8 @@ void b() {}
// YAML: Line: [[@LINE+1]]
int main() { return 0; }

// CHECK: main
// CHECK: a
// CHECK: b
// CHECK: Counters section size: 0x18 bytes
// CHECK: Found 3 functions
Original file line number Diff line number Diff line change
Expand Up @@ -369,16 +369,14 @@ def vRun(self, packet):
lldb.SBError(),
) # error

self.assertPacketLogContains(
[
"QEnvironment:PLAIN=foo",
"QEnvironmentHexEncoded:4e45454453454e433d66726f6224",
"QEnvironmentHexEncoded:4e45454453454e43323d66722a6f62",
"QEnvironmentHexEncoded:4e45454453454e43333d66726f7d62",
"QEnvironmentHexEncoded:4e45454453454e43343d6623726f62",
"QEnvironment:EQUALS=foo=bar",
]
)
self.assertPacketLogContains([
"QEnvironmentHexEncoded:4e45454453454e43333d66726f7d62",
"QEnvironmentHexEncoded:4e45454453454e43343d6623726f62",
"QEnvironment:PLAIN=foo",
"QEnvironmentHexEncoded:4e45454453454e43323d66722a6f62",
"QEnvironmentHexEncoded:4e45454453454e433d66726f6224",
"QEnvironment:EQUALS=foo=bar",
])

def test_launch_QEnvironmentHexEncoded_only(self):
class MyResponder(MockGDBServerResponder):
Expand Down Expand Up @@ -425,11 +423,11 @@ def QEnvironment(self, packet):

self.assertPacketLogContains(
[
"QEnvironmentHexEncoded:504c41494e3d666f6f",
"QEnvironmentHexEncoded:4e45454453454e433d66726f6224",
"QEnvironmentHexEncoded:4e45454453454e43323d66722a6f62",
"QEnvironmentHexEncoded:4e45454453454e43333d66726f7d62",
"QEnvironmentHexEncoded:4e45454453454e43343d6623726f62",
"QEnvironmentHexEncoded:504c41494e3d666f6f",
"QEnvironmentHexEncoded:4e45454453454e43323d66722a6f62",
"QEnvironmentHexEncoded:4e45454453454e433d66726f6224",
"QEnvironmentHexEncoded:455155414c533d666f6f3d626172",
]
)
Expand Down
6 changes: 3 additions & 3 deletions llvm/lib/Support/StringMap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
//===----------------------------------------------------------------------===//

#include "llvm/ADT/StringMap.h"
#include "llvm/Support/DJB.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/xxhash.h"

using namespace llvm;

Expand Down Expand Up @@ -84,7 +84,7 @@ unsigned StringMapImpl::LookupBucketFor(StringRef Name) {
// Hash table unallocated so far?
if (NumBuckets == 0)
init(16);
unsigned FullHashValue = djbHash(Name, 0);
unsigned FullHashValue = xxHash64(Name);
unsigned BucketNo = FullHashValue & (NumBuckets - 1);
unsigned *HashTable = getHashTable(TheTable, NumBuckets);

Expand Down Expand Up @@ -139,7 +139,7 @@ unsigned StringMapImpl::LookupBucketFor(StringRef Name) {
int StringMapImpl::FindKey(StringRef Key) const {
if (NumBuckets == 0)
return -1; // Really empty table?
unsigned FullHashValue = djbHash(Key, 0);
unsigned FullHashValue = xxHash64(Key);
unsigned BucketNo = FullHashValue & (NumBuckets - 1);
unsigned *HashTable = getHashTable(TheTable, NumBuckets);

Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/accel-table-hash-collisions.ll
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@

; Check that all the names are present in the output
; CHECK: Hash 0x597841
; CHECK: String: 0x{{[0-9a-f]*}} "is"
; CHECK: String: 0x{{[0-9a-f]*}} "k1"
; CHECK: String: 0x{{[0-9a-f]*}} "is"

; CHECK: Hash 0xa4b42a1e
; CHECK: String: 0x{{[0-9a-f]*}} "_ZN5clang23DataRecursiveASTVisitorIN12_GLOBAL__N_124UnusedBackingIvarCheckerEE26TraverseCUDAKernelCallExprEPNS_18CUDAKernelCallExprE"
; CHECK: String: 0x{{[0-9a-f]*}} "_ZN4llvm16DenseMapIteratorIPNS_10MDLocationENS_6detail13DenseSetEmptyENS_10MDNodeInfoIS1_EENS3_12DenseSetPairIS2_EELb0EE23AdvancePastEmptyBucketsEv"
; CHECK: String: 0x{{[0-9a-f]*}} "_ZN5clang23DataRecursiveASTVisitorIN12_GLOBAL__N_124UnusedBackingIvarCheckerEE26TraverseCUDAKernelCallExprEPNS_18CUDAKernelCallExprE"

; CHECK: Hash 0xeee7c0b2
; CHECK: String: 0x{{[0-9a-f]*}} "_ZNK4llvm12LivePhysRegs5printERNS_11raw_ostreamE"
Expand Down
12 changes: 6 additions & 6 deletions llvm/test/DebugInfo/Generic/debug-names-hash-collisions.ll
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,21 @@
; Check that all the names are present in the output
; CHECK: Bucket 0
; CHECK: Hash: 0xF8CF70D
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZN4lldb7SBBlockaSERKS0_"
; CHECK: Hash: 0xF8CF70D
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZN4lldb7SBBlockC1ERKS0_"
; CHECK: Hash: 0x135A482C
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZN4lldb7SBErroraSERKS0_"
; CHECK: Hash: 0xF8CF70D
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZN4lldb7SBBlockaSERKS0_"
; CHECK: Hash: 0x135A482C
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZN4lldb7SBErrorC1ERKS0_"
; CHECK: Hash: 0x135A482C
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZN4lldb7SBErroraSERKS0_"
; CHECK-NOT: String:
; CHECK: Bucket 1
; CHECK-NEXT: EMPTY
; CHECK: Bucket 2
; CHECK: Hash: 0x2841B989
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZL11numCommutes"
; CHECK: Hash: 0x2841B989
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZL11NumCommutes"
; CHECK: Hash: 0x2841B989
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZL11numCommutes"
; CHECK: Hash: 0x3E190F5F
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZL9NumRemats"
; CHECK: Hash: 0x3E190F5F
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/DebugInfo/X86/debug-pubtables-dwarf64.ll
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
; CHECK: .debug_pubtypes contents:
; CHECK-NEXT: length = 0x0000000000000032, format = DWARF64, version = 0x0002, unit_offset =
; CHECK-NEXT: Offset Name
; CHECK-NEXT: 0x00000000[[STRUCT]] "Foo"
; CHECK-NEXT: 0x00000000[[BASET]] "int"
; CHECK-NEXT: 0x00000000[[STRUCT]] "Foo"

; IR generated and reduced from:
; $ cat foo.c
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/DebugInfo/X86/gnu-public-names-gmlt.ll
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
; GPUB: .debug_gnu_pubnames contents:
; GPUB-NEXT: unit_offset = 0x00000000
; GPUB-NEXT: Name
; GPUB-NEXT: "f2"
; GPUB-NEXT: "f3"
; GPUB-NEXT: "f2"

; GPUB: .debug_gnu_pubtypes contents:
; GPUB-NEXT: length = 0x0000000e, format = DWARF32, version = 0x0002, unit_offset = 0x00000000
Expand Down
47 changes: 27 additions & 20 deletions llvm/test/DebugInfo/X86/gnu-public-names.ll
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@

; ASM: .section .debug_gnu_pubnames
; ASM: .byte 32 # Attributes: VARIABLE, EXTERNAL
; ASM-NEXT: .asciz "ns::global_namespace_variable" # External Name
; ASM: .byte 32 # Attributes: VARIABLE, EXTERNAL
; ASM-NEXT: .asciz "global_variable" # External Name

; ASM: .section .debug_gnu_pubtypes
Expand Down Expand Up @@ -123,7 +125,7 @@
; CHECK: DW_AT_name ("global_namespace_function")
; CHECK: NULL

; CHECK: DW_TAG_subprogram
; CHECK: [[F3:0x[0-9a-f]+]]: DW_TAG_subprogram
; CHECK: DW_AT_name ("f3")
; CHECK: [[F3_Z:.*]]: DW_TAG_variable
; CHECK: DW_AT_name ("z")
Expand Down Expand Up @@ -184,48 +186,53 @@
; CHECK: DW_AT_linkage_name
; CHECK: DW_AT_name ("global_function")

; CHECK: DW_TAG_subprogram
; CHECK: [[GLOBAL_F7:0x[0-9a-f]+]]: DW_TAG_subprogram
; CHECK: DW_AT_linkage_name
; CHECK: DW_AT_name ("f7")

; CHECK: DW_TAG_pointer_type
; CHECK: DW_TAG_pointer_type
; CHECK: NULL

; CHECK-LABEL: .debug_gnu_pubnames contents:
; CHECK-NEXT: length = {{.*}}, version = 0x0002, unit_offset = 0x00000000, unit_size = {{.*}}
; CHECK-NEXT: Offset Linkage Kind Name
; CHECK-NEXT: [[ANON_INNER_B]] STATIC VARIABLE "(anonymous namespace)::inner::b"
; CHECK-NEXT: [[MEM_FUNC]] EXTERNAL FUNCTION "C::member_function"
; CHECK-NEXT: [[OUTER]] EXTERNAL TYPE "outer"
; CHECK-NEXT: [[GLOB_NS_VAR]] EXTERNAL VARIABLE "ns::global_namespace_variable"
; CHECK-NEXT: [[GLOB_VAR]] EXTERNAL VARIABLE "global_variable"
; CHECK-NEXT: [[UNNAMED_ENUM_ENUMERATOR]] STATIC VARIABLE "unnamed_enum_enumerator"
; CHECK-NEXT: [[GLOBAL_F7]] EXTERNAL FUNCTION "f7"
; CHECK-NEXT: [[OUTER_ANON]] EXTERNAL TYPE "outer::(anonymous namespace)"
; FIXME: GCC produces enumerators as EXTERNAL, not STATIC
; CHECK-NEXT: [[NAMED_ENUM_CLASS_ENUMERATOR]] STATIC VARIABLE "named_enum_class_enumerator"
; CHECK-NEXT: [[GLOBAL_FUNC]] EXTERNAL FUNCTION "global_function"
; CHECK-NEXT: [[GLOB_NS_FUNC]] EXTERNAL FUNCTION "ns::global_namespace_function"
; CHECK-NEXT: [[NS]] EXTERNAL TYPE "ns"
; CHECK-NEXT: [[NAMED_ENUM_ENUMERATOR]] STATIC VARIABLE "named_enum_enumerator"
; CHECK-NEXT: [[ANON]] EXTERNAL TYPE "(anonymous namespace)"
; CHECK-NEXT: [[OUTER_ANON_C]] STATIC VARIABLE "outer::(anonymous namespace)::c"
; CHECK-NEXT: [[D_VAR]] EXTERNAL VARIABLE "ns::d"
; CHECK-NEXT: [[STATIC_MEM_FUNC]] EXTERNAL FUNCTION "C::static_member_function"
; CHECK-NEXT: [[STATIC_MEM_VAR]] EXTERNAL VARIABLE "C::static_member_variable"
; CHECK-NEXT: [[ANON_I]] STATIC VARIABLE "(anonymous namespace)::i"
; CHECK-NEXT: [[GLOB_NS_FUNC]] EXTERNAL FUNCTION "ns::global_namespace_function"
; CHECK-NEXT: [[ANON_INNER]] EXTERNAL TYPE "(anonymous namespace)::inner"
; CHECK-NEXT: [[F3]] EXTERNAL FUNCTION "f3"
; GCC Doesn't put local statics in pubnames, but it seems not unreasonable and
; comes out naturally from LLVM's implementation, so I'm OK with it for now. If
; it's demonstrated that this is a major size concern or degrades debug info
; consumer behavior, feel free to change it.
; CHECK-NEXT: [[F3_Z]] STATIC VARIABLE "f3::z"
; CHECK-NEXT: [[ANON]] EXTERNAL TYPE "(anonymous namespace)"
; CHECK-NEXT: [[OUTER_ANON]] EXTERNAL TYPE "outer::(anonymous namespace)"
; CHECK-NEXT: [[ANON_INNER_B]] STATIC VARIABLE "(anonymous namespace)::inner::b"
; CHECK-NEXT: [[OUTER]] EXTERNAL TYPE "outer"
; FIXME: GCC produces enumerators as EXTERNAL, not STATIC
; CHECK-NEXT: [[NAMED_ENUM_CLASS_ENUMERATOR]] STATIC VARIABLE "named_enum_class_enumerator"
; CHECK-NEXT: [[MEM_FUNC]] EXTERNAL FUNCTION "C::member_function"
; CHECK-NEXT: [[GLOB_VAR]] EXTERNAL VARIABLE "global_variable"
; CHECK-NEXT: [[GLOB_NS_VAR]] EXTERNAL VARIABLE "ns::global_namespace_variable"
; CHECK-NEXT: [[ANON_INNER]] EXTERNAL TYPE "(anonymous namespace)::inner"
; CHECK-NEXT: [[D_VAR]] EXTERNAL VARIABLE "ns::d"
; CHECK-NEXT: [[NAMED_ENUM_ENUMERATOR]] STATIC VARIABLE "named_enum_enumerator"
; CHECK-NEXT: [[STATIC_MEM_VAR]] EXTERNAL VARIABLE "C::static_member_variable"
; CHECK-NEXT: [[STATIC_MEM_FUNC]] EXTERNAL FUNCTION "C::static_member_function"
; CHECK-NEXT: [[UNNAMED_ENUM_ENUMERATOR]] STATIC VARIABLE "unnamed_enum_enumerator"

; CHECK-LABEL: debug_gnu_pubtypes contents:
; CHECK: Offset Linkage Kind Name
; CHECK-NEXT: [[INT]] STATIC TYPE "int"
; CHECK-NEXT: [[C]] EXTERNAL TYPE "C"
; CHECK-NEXT: [[UNSIGNED_INT]] STATIC TYPE "unsigned int"
; CHECK-NEXT: [[D]] EXTERNAL TYPE "ns::D"
; CHECK-NEXT: [[NAMED_ENUM]] EXTERNAL TYPE "named_enum"
; CHECK-NEXT: [[INT]] STATIC TYPE "int"
; CHECK-NEXT: [[NAMED_ENUM_CLASS]] EXTERNAL TYPE "named_enum_class"
; CHECK-NEXT: [[D]] EXTERNAL TYPE "ns::D"

%struct.C = type { i8 }
%"struct.ns::D" = type { i32 }
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/tools/dsymutil/ARM/extern-alias.test
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,5 @@ $ xcrun --sdk iphoneos clang private_extern.o main.o -target arm64-apple-ios14.0
RUN: dsymutil -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/private_extern/private_extern.out -o %t.dSYM --verbose | FileCheck %s
RUN: dsymutil -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/extern/extern.out -o %t.dSYM --verbose | FileCheck %s
CHECK-NOT: could not find object file symbol for symbol _baz
CHECK: { sym: _foo, objAddr: 0x0, binAddr: 0x100007F58, size: 0x20 }
CHECK: { sym: _baz, objAddr: 0x0, binAddr: 0x100007F58, size: 0x0 }
CHECK: { sym: _foo, objAddr: 0x0, binAddr: 0x100007F58, size: 0x20 }
34 changes: 17 additions & 17 deletions llvm/test/tools/llvm-profdata/suppl-instr-with-sample.test
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ RUN: -supplement-instr-with-sample=%p/Inputs/mix_sample.proftext \
RUN: -suppl-min-size-threshold=0 %p/Inputs/mix_instr.proftext -o %t
RUN: llvm-profdata show %t -all-functions -counts | FileCheck %s --check-prefix=MIX1

MIX1: foo:
MIX1-NEXT: Hash: 0x0000000000000007
MIX1-NEXT: Counters: 5
MIX1-NEXT: Block counts: [12, 13, 0, 0, 0]
MIX1: goo:
MIX1-NEXT: Hash: 0x0000000000000005
MIX1-NEXT: Counters: 3
MIX1-NOT: Block counts:
MIX1-SAME: <PseudoHot>
MIX1: foo:
MIX1-NEXT: Hash: 0x0000000000000007
MIX1-NEXT: Counters: 5
MIX1-NEXT: Block counts: [12, 13, 0, 0, 0]
MIX1: moo:
MIX1-NEXT: Hash: 0x0000000000000009
MIX1-NEXT: Counters: 4
Expand All @@ -27,16 +27,16 @@ RUN: -suppl-min-size-threshold=0 -zero-counter-threshold=0.5 \
RUN: -instr-prof-cold-threshold=30 %p/Inputs/mix_instr.proftext -o %t
RUN: llvm-profdata show %t -all-functions -counts | FileCheck %s --check-prefix=MIX2

MIX2: foo:
MIX2-NEXT: Hash: 0x0000000000000007
MIX2-NEXT: Counters: 5
MIX2-NOT: Block counts:
MIX2-SAME: <PseudoHot>
MIX2: goo:
MIX2-NEXT: Hash: 0x0000000000000005
MIX2-NEXT: Counters: 3
MIX2-NOT: Block counts:
MIX2-SAME: <PseudoHot>
MIX2: foo:
MIX2-NEXT: Hash: 0x0000000000000007
MIX2-NEXT: Counters: 5
MIX2-NOT: Block counts:
MIX2-SAME: <PseudoHot>
MIX2: moo:
MIX2-NEXT: Hash: 0x0000000000000009
MIX2-NEXT: Counters: 4
Expand All @@ -49,15 +49,15 @@ RUN: -suppl-min-size-threshold=0 -zero-counter-threshold=0.7 \
RUN: -instr-prof-cold-threshold=30 %p/Inputs/mix_instr.proftext -o %t
RUN: llvm-profdata show %t -all-functions -counts | FileCheck %s --check-prefix=MIX3

MIX3: foo:
MIX3-NEXT: Hash: 0x0000000000000007
MIX3-NEXT: Counters: 5
MIX3-NEXT: Block counts: [1384, 1500, 0, 0, 0]
MIX3: goo:
MIX3-NEXT: Hash: 0x0000000000000005
MIX3-NEXT: Counters: 3
MIX3-NOT: Block counts:
MIX3-SAME: <PseudoHot>
MIX3: foo:
MIX3-NEXT: Hash: 0x0000000000000007
MIX3-NEXT: Counters: 5
MIX3-NEXT: Block counts: [1384, 1500, 0, 0, 0]
MIX3: moo:
MIX3-NEXT: Hash: 0x0000000000000009
MIX3-NEXT: Counters: 4
Expand All @@ -71,15 +71,15 @@ RUN: -suppl-min-size-threshold=2 -zero-counter-threshold=0.7 \
RUN: -instr-prof-cold-threshold=30 %p/Inputs/mix_instr_small.proftext -o %t
RUN: llvm-profdata show %t -all-functions -counts | FileCheck %s --check-prefix=MIX4

MIX4: foo:
MIX4-NEXT: Hash: 0x0000000000000007
MIX4-NEXT: Counters: 1
MIX4-NEXT: Block counts: [0]
MIX4: goo:
MIX4-NEXT: Hash: 0x0000000000000005
MIX4-NEXT: Counters: 3
MIX4-NOT: Block counts:
MIX4-SAME: <PseudoHot>
MIX4: foo:
MIX4-NEXT: Hash: 0x0000000000000007
MIX4-NEXT: Counters: 1
MIX4-NEXT: Block counts: [0]
MIX4: moo:
MIX4-NEXT: Hash: 0x0000000000000009
MIX4-NEXT: Counters: 1
Expand Down
Loading