mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-12 12:48:59 +00:00
Recommit "[Support] change StringMap hash function from djbHash to xxHash"
This reverts commit 37eb9d13f891f7656f811516e765b929b169afe0.
Test failures have been fixed:
- ubsan failure fixed by 72eac42f21c0f45a27f3eaaff9364cbb5189b9e4
- warn-unsafe-buffer-usage-fixits-local-var-span.cpp fixed by
03cc52dfd1dbb4a59b479da55e87838fb93d2067 (wasn't related)
- test-output-format.ll failure was spurious, build failed at
https://lab.llvm.org/buildbot/#/builders/54/builds/3545 (b4431b2d945b6fc19b1a55ac6ce969a8e06e1e93)
but passed at
https://lab.llvm.org/buildbot/#/builders/54/builds/3546 (5ae99be0377248c74346096dc475af254a3fc799)
which is before my revert
b4431b2d94...5ae99be037
Original commit message:
Depends on https://reviews.llvm.org/D142861.
Alternative to https://reviews.llvm.org/D137601.
xxHash is much faster than djbHash. This makes a simple Rust test case with a large constant string 10% faster to compile.
Previous attempts at changing this hash function (e.g. https://reviews.llvm.org/D97396) had to be reverted due to breaking tests that depended on iteration order.
No additional tests fail with this patch compared to `main` when running `check-all` with `-DLLVM_ENABLE_PROJECTS="all"` (on a Linux host), so I hope I found everything that needs to be changed.
Differential Revision: https://reviews.llvm.org/D142862
This commit is contained in:
parent
f61c9b7569
commit
87d02e0dfd
@ -12,5 +12,5 @@
|
|||||||
|
|
||||||
# CHECK: These are the combined files, with problem files preceded by #:
|
# CHECK: These are the combined files, with problem files preceded by #:
|
||||||
|
|
||||||
# CHECK: {{.*}}Inputs/CompileError/HasError.h
|
|
||||||
# CHECK: Inputs/CompileError/Level1A.h
|
# CHECK: Inputs/CompileError/Level1A.h
|
||||||
|
# CHECK: {{.*}}Inputs/CompileError/HasError.h
|
||||||
|
@ -332,7 +332,7 @@ TEST_F(SarifDocumentWriterTest, checkSerializingArtifacts) {
|
|||||||
TEST_F(SarifDocumentWriterTest, checkSerializingCodeflows) {
|
TEST_F(SarifDocumentWriterTest, checkSerializingCodeflows) {
|
||||||
// GIVEN:
|
// GIVEN:
|
||||||
const std::string ExpectedOutput =
|
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"
|
const char *SourceText = "int foo = 0;\n"
|
||||||
"int foo = 1;\n"
|
"int foo = 1;\n"
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
// RUN: not llvm-profdata show --debug-info=%t.no.dbg 2>&1 | FileCheck %s --check-prefix NO-DBG
|
// 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
|
// NO-DBG: unable to correlate profile: could not find any profile metadata in debug info
|
||||||
|
|
||||||
// CHECK: a
|
|
||||||
// YAML: Probes:
|
// YAML: Probes:
|
||||||
// YAML: - Function Name: a
|
// YAML: - Function Name: a
|
||||||
// YAML: Linkage Name: a
|
// YAML: Linkage Name: a
|
||||||
@ -17,7 +16,6 @@
|
|||||||
// YAML: Line: [[@LINE+1]]
|
// YAML: Line: [[@LINE+1]]
|
||||||
void a() {}
|
void a() {}
|
||||||
|
|
||||||
// CHECK: b
|
|
||||||
// YAML: - Function Name: b
|
// YAML: - Function Name: b
|
||||||
// YAML: Linkage Name: b
|
// YAML: Linkage Name: b
|
||||||
// YAML: CFG Hash: 0x[[#%.1X,HASH:]]
|
// YAML: CFG Hash: 0x[[#%.1X,HASH:]]
|
||||||
@ -27,7 +25,6 @@ void a() {}
|
|||||||
// YAML: Line: [[@LINE+1]]
|
// YAML: Line: [[@LINE+1]]
|
||||||
void b() {}
|
void b() {}
|
||||||
|
|
||||||
// CHECK: main
|
|
||||||
// YAML: - Function Name: main
|
// YAML: - Function Name: main
|
||||||
// YAML: Linkage Name: main
|
// YAML: Linkage Name: main
|
||||||
// YAML: CFG Hash: 0x[[#%.1X,HASH:]]
|
// YAML: CFG Hash: 0x[[#%.1X,HASH:]]
|
||||||
@ -37,5 +34,8 @@ void b() {}
|
|||||||
// YAML: Line: [[@LINE+1]]
|
// YAML: Line: [[@LINE+1]]
|
||||||
int main() { return 0; }
|
int main() { return 0; }
|
||||||
|
|
||||||
|
// CHECK: main
|
||||||
|
// CHECK: a
|
||||||
|
// CHECK: b
|
||||||
// CHECK: Counters section size: 0x18 bytes
|
// CHECK: Counters section size: 0x18 bytes
|
||||||
// CHECK: Found 3 functions
|
// CHECK: Found 3 functions
|
||||||
|
@ -338,11 +338,11 @@ class TestGDBRemoteClient(GDBRemoteTestBase):
|
|||||||
lldb.SBError()) # error
|
lldb.SBError()) # error
|
||||||
|
|
||||||
self.assertPacketLogContains([
|
self.assertPacketLogContains([
|
||||||
"QEnvironment:PLAIN=foo",
|
|
||||||
"QEnvironmentHexEncoded:4e45454453454e433d66726f6224",
|
|
||||||
"QEnvironmentHexEncoded:4e45454453454e43323d66722a6f62",
|
|
||||||
"QEnvironmentHexEncoded:4e45454453454e43333d66726f7d62",
|
"QEnvironmentHexEncoded:4e45454453454e43333d66726f7d62",
|
||||||
"QEnvironmentHexEncoded:4e45454453454e43343d6623726f62",
|
"QEnvironmentHexEncoded:4e45454453454e43343d6623726f62",
|
||||||
|
"QEnvironment:PLAIN=foo",
|
||||||
|
"QEnvironmentHexEncoded:4e45454453454e43323d66722a6f62",
|
||||||
|
"QEnvironmentHexEncoded:4e45454453454e433d66726f6224",
|
||||||
"QEnvironment:EQUALS=foo=bar",
|
"QEnvironment:EQUALS=foo=bar",
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -386,11 +386,11 @@ class TestGDBRemoteClient(GDBRemoteTestBase):
|
|||||||
lldb.SBError()) # error
|
lldb.SBError()) # error
|
||||||
|
|
||||||
self.assertPacketLogContains([
|
self.assertPacketLogContains([
|
||||||
"QEnvironmentHexEncoded:504c41494e3d666f6f",
|
|
||||||
"QEnvironmentHexEncoded:4e45454453454e433d66726f6224",
|
|
||||||
"QEnvironmentHexEncoded:4e45454453454e43323d66722a6f62",
|
|
||||||
"QEnvironmentHexEncoded:4e45454453454e43333d66726f7d62",
|
"QEnvironmentHexEncoded:4e45454453454e43333d66726f7d62",
|
||||||
"QEnvironmentHexEncoded:4e45454453454e43343d6623726f62",
|
"QEnvironmentHexEncoded:4e45454453454e43343d6623726f62",
|
||||||
|
"QEnvironmentHexEncoded:504c41494e3d666f6f",
|
||||||
|
"QEnvironmentHexEncoded:4e45454453454e43323d66722a6f62",
|
||||||
|
"QEnvironmentHexEncoded:4e45454453454e433d66726f6224",
|
||||||
"QEnvironmentHexEncoded:455155414c533d666f6f3d626172",
|
"QEnvironmentHexEncoded:455155414c533d666f6f3d626172",
|
||||||
])
|
])
|
||||||
|
|
||||||
|
@ -11,8 +11,8 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "llvm/ADT/StringMap.h"
|
#include "llvm/ADT/StringMap.h"
|
||||||
#include "llvm/Support/DJB.h"
|
|
||||||
#include "llvm/Support/MathExtras.h"
|
#include "llvm/Support/MathExtras.h"
|
||||||
|
#include "llvm/Support/xxhash.h"
|
||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ unsigned StringMapImpl::LookupBucketFor(StringRef Name) {
|
|||||||
// Hash table unallocated so far?
|
// Hash table unallocated so far?
|
||||||
if (NumBuckets == 0)
|
if (NumBuckets == 0)
|
||||||
init(16);
|
init(16);
|
||||||
unsigned FullHashValue = djbHash(Name, 0);
|
unsigned FullHashValue = xxHash64(Name);
|
||||||
unsigned BucketNo = FullHashValue & (NumBuckets - 1);
|
unsigned BucketNo = FullHashValue & (NumBuckets - 1);
|
||||||
unsigned *HashTable = getHashTable(TheTable, NumBuckets);
|
unsigned *HashTable = getHashTable(TheTable, NumBuckets);
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ unsigned StringMapImpl::LookupBucketFor(StringRef Name) {
|
|||||||
int StringMapImpl::FindKey(StringRef Key) const {
|
int StringMapImpl::FindKey(StringRef Key) const {
|
||||||
if (NumBuckets == 0)
|
if (NumBuckets == 0)
|
||||||
return -1; // Really empty table?
|
return -1; // Really empty table?
|
||||||
unsigned FullHashValue = djbHash(Key, 0);
|
unsigned FullHashValue = xxHash64(Key);
|
||||||
unsigned BucketNo = FullHashValue & (NumBuckets - 1);
|
unsigned BucketNo = FullHashValue & (NumBuckets - 1);
|
||||||
unsigned *HashTable = getHashTable(TheTable, NumBuckets);
|
unsigned *HashTable = getHashTable(TheTable, NumBuckets);
|
||||||
|
|
||||||
|
@ -28,12 +28,12 @@
|
|||||||
|
|
||||||
; Check that all the names are present in the output
|
; Check that all the names are present in the output
|
||||||
; CHECK: Hash 0x597841
|
; CHECK: Hash 0x597841
|
||||||
; CHECK: String: 0x{{[0-9a-f]*}} "is"
|
|
||||||
; CHECK: String: 0x{{[0-9a-f]*}} "k1"
|
; CHECK: String: 0x{{[0-9a-f]*}} "k1"
|
||||||
|
; CHECK: String: 0x{{[0-9a-f]*}} "is"
|
||||||
|
|
||||||
; CHECK: Hash 0xa4b42a1e
|
; 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]*}} "_ZN4llvm16DenseMapIteratorIPNS_10MDLocationENS_6detail13DenseSetEmptyENS_10MDNodeInfoIS1_EENS3_12DenseSetPairIS2_EELb0EE23AdvancePastEmptyBucketsEv"
|
||||||
|
; CHECK: String: 0x{{[0-9a-f]*}} "_ZN5clang23DataRecursiveASTVisitorIN12_GLOBAL__N_124UnusedBackingIvarCheckerEE26TraverseCUDAKernelCallExprEPNS_18CUDAKernelCallExprE"
|
||||||
|
|
||||||
; CHECK: Hash 0xeee7c0b2
|
; CHECK: Hash 0xeee7c0b2
|
||||||
; CHECK: String: 0x{{[0-9a-f]*}} "_ZNK4llvm12LivePhysRegs5printERNS_11raw_ostreamE"
|
; CHECK: String: 0x{{[0-9a-f]*}} "_ZNK4llvm12LivePhysRegs5printERNS_11raw_ostreamE"
|
||||||
|
@ -29,21 +29,21 @@
|
|||||||
; Check that all the names are present in the output
|
; Check that all the names are present in the output
|
||||||
; CHECK: Bucket 0
|
; CHECK: Bucket 0
|
||||||
; CHECK: Hash: 0xF8CF70D
|
; CHECK: Hash: 0xF8CF70D
|
||||||
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZN4lldb7SBBlockaSERKS0_"
|
|
||||||
; CHECK: Hash: 0xF8CF70D
|
|
||||||
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZN4lldb7SBBlockC1ERKS0_"
|
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZN4lldb7SBBlockC1ERKS0_"
|
||||||
; CHECK: Hash: 0x135A482C
|
; CHECK: Hash: 0xF8CF70D
|
||||||
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZN4lldb7SBErroraSERKS0_"
|
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZN4lldb7SBBlockaSERKS0_"
|
||||||
; CHECK: Hash: 0x135A482C
|
; CHECK: Hash: 0x135A482C
|
||||||
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZN4lldb7SBErrorC1ERKS0_"
|
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZN4lldb7SBErrorC1ERKS0_"
|
||||||
|
; CHECK: Hash: 0x135A482C
|
||||||
|
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZN4lldb7SBErroraSERKS0_"
|
||||||
; CHECK-NOT: String:
|
; CHECK-NOT: String:
|
||||||
; CHECK: Bucket 1
|
; CHECK: Bucket 1
|
||||||
; CHECK-NEXT: EMPTY
|
; CHECK-NEXT: EMPTY
|
||||||
; CHECK: Bucket 2
|
; CHECK: Bucket 2
|
||||||
; CHECK: Hash: 0x2841B989
|
; CHECK: Hash: 0x2841B989
|
||||||
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZL11numCommutes"
|
|
||||||
; CHECK: Hash: 0x2841B989
|
|
||||||
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZL11NumCommutes"
|
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZL11NumCommutes"
|
||||||
|
; CHECK: Hash: 0x2841B989
|
||||||
|
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZL11numCommutes"
|
||||||
; CHECK: Hash: 0x3E190F5F
|
; CHECK: Hash: 0x3E190F5F
|
||||||
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZL9NumRemats"
|
; CHECK-NEXT:String: 0x{{[0-9a-f]*}} "_ZL9NumRemats"
|
||||||
; CHECK: Hash: 0x3E190F5F
|
; CHECK: Hash: 0x3E190F5F
|
||||||
|
@ -19,8 +19,8 @@
|
|||||||
; CHECK: .debug_pubtypes contents:
|
; CHECK: .debug_pubtypes contents:
|
||||||
; CHECK-NEXT: length = 0x0000000000000032, format = DWARF64, version = 0x0002, unit_offset =
|
; CHECK-NEXT: length = 0x0000000000000032, format = DWARF64, version = 0x0002, unit_offset =
|
||||||
; CHECK-NEXT: Offset Name
|
; CHECK-NEXT: Offset Name
|
||||||
; CHECK-NEXT: 0x00000000[[STRUCT]] "Foo"
|
|
||||||
; CHECK-NEXT: 0x00000000[[BASET]] "int"
|
; CHECK-NEXT: 0x00000000[[BASET]] "int"
|
||||||
|
; CHECK-NEXT: 0x00000000[[STRUCT]] "Foo"
|
||||||
|
|
||||||
; IR generated and reduced from:
|
; IR generated and reduced from:
|
||||||
; $ cat foo.c
|
; $ cat foo.c
|
||||||
|
@ -17,8 +17,8 @@
|
|||||||
; GPUB: .debug_gnu_pubnames contents:
|
; GPUB: .debug_gnu_pubnames contents:
|
||||||
; GPUB-NEXT: unit_offset = 0x00000000
|
; GPUB-NEXT: unit_offset = 0x00000000
|
||||||
; GPUB-NEXT: Name
|
; GPUB-NEXT: Name
|
||||||
; GPUB-NEXT: "f2"
|
|
||||||
; GPUB-NEXT: "f3"
|
; GPUB-NEXT: "f3"
|
||||||
|
; GPUB-NEXT: "f2"
|
||||||
|
|
||||||
; GPUB: .debug_gnu_pubtypes contents:
|
; GPUB: .debug_gnu_pubtypes contents:
|
||||||
; GPUB-NEXT: length = 0x0000000e, format = DWARF32, version = 0x0002, unit_offset = 0x00000000
|
; GPUB-NEXT: length = 0x0000000e, format = DWARF32, version = 0x0002, unit_offset = 0x00000000
|
||||||
|
@ -66,6 +66,8 @@
|
|||||||
|
|
||||||
; ASM: .section .debug_gnu_pubnames
|
; ASM: .section .debug_gnu_pubnames
|
||||||
; ASM: .byte 32 # Attributes: VARIABLE, EXTERNAL
|
; 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-NEXT: .asciz "global_variable" # External Name
|
||||||
|
|
||||||
; ASM: .section .debug_gnu_pubtypes
|
; ASM: .section .debug_gnu_pubtypes
|
||||||
@ -123,7 +125,7 @@
|
|||||||
; CHECK: DW_AT_name ("global_namespace_function")
|
; CHECK: DW_AT_name ("global_namespace_function")
|
||||||
; CHECK: NULL
|
; CHECK: NULL
|
||||||
|
|
||||||
; CHECK: DW_TAG_subprogram
|
; CHECK: [[F3:0x[0-9a-f]+]]: DW_TAG_subprogram
|
||||||
; CHECK: DW_AT_name ("f3")
|
; CHECK: DW_AT_name ("f3")
|
||||||
; CHECK: [[F3_Z:.*]]: DW_TAG_variable
|
; CHECK: [[F3_Z:.*]]: DW_TAG_variable
|
||||||
; CHECK: DW_AT_name ("z")
|
; CHECK: DW_AT_name ("z")
|
||||||
@ -184,7 +186,10 @@
|
|||||||
; CHECK: DW_AT_linkage_name
|
; CHECK: DW_AT_linkage_name
|
||||||
; CHECK: DW_AT_name ("global_function")
|
; 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: DW_TAG_pointer_type
|
; CHECK: DW_TAG_pointer_type
|
||||||
; CHECK: NULL
|
; CHECK: NULL
|
||||||
@ -192,40 +197,42 @@
|
|||||||
; CHECK-LABEL: .debug_gnu_pubnames contents:
|
; CHECK-LABEL: .debug_gnu_pubnames contents:
|
||||||
; CHECK-NEXT: length = {{.*}}, version = 0x0002, unit_offset = 0x00000000, unit_size = {{.*}}
|
; CHECK-NEXT: length = {{.*}}, version = 0x0002, unit_offset = 0x00000000, unit_size = {{.*}}
|
||||||
; CHECK-NEXT: Offset Linkage Kind Name
|
; 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: [[GLOBAL_FUNC]] EXTERNAL FUNCTION "global_function"
|
||||||
; CHECK-NEXT: [[NS]] EXTERNAL TYPE "ns"
|
|
||||||
; CHECK-NEXT: [[OUTER_ANON_C]] STATIC VARIABLE "outer::(anonymous namespace)::c"
|
|
||||||
; CHECK-NEXT: [[ANON_I]] STATIC VARIABLE "(anonymous namespace)::i"
|
|
||||||
; CHECK-NEXT: [[GLOB_NS_FUNC]] EXTERNAL FUNCTION "ns::global_namespace_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: [[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
|
; 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
|
; 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
|
; it's demonstrated that this is a major size concern or degrades debug info
|
||||||
; consumer behavior, feel free to change it.
|
; consumer behavior, feel free to change it.
|
||||||
; CHECK-NEXT: [[F3_Z]] STATIC VARIABLE "f3::z"
|
; 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-LABEL: debug_gnu_pubtypes contents:
|
||||||
; CHECK: Offset Linkage Kind Name
|
; CHECK: Offset Linkage Kind Name
|
||||||
|
; CHECK-NEXT: [[INT]] STATIC TYPE "int"
|
||||||
; CHECK-NEXT: [[C]] EXTERNAL TYPE "C"
|
; CHECK-NEXT: [[C]] EXTERNAL TYPE "C"
|
||||||
; CHECK-NEXT: [[UNSIGNED_INT]] STATIC TYPE "unsigned int"
|
; 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: [[NAMED_ENUM]] EXTERNAL TYPE "named_enum"
|
||||||
; CHECK-NEXT: [[INT]] STATIC TYPE "int"
|
|
||||||
; CHECK-NEXT: [[NAMED_ENUM_CLASS]] EXTERNAL TYPE "named_enum_class"
|
; CHECK-NEXT: [[NAMED_ENUM_CLASS]] EXTERNAL TYPE "named_enum_class"
|
||||||
|
; CHECK-NEXT: [[D]] EXTERNAL TYPE "ns::D"
|
||||||
|
|
||||||
%struct.C = type { i8 }
|
%struct.C = type { i8 }
|
||||||
%"struct.ns::D" = type { i32 }
|
%"struct.ns::D" = type { i32 }
|
||||||
|
@ -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/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
|
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-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: _baz, objAddr: 0x0, binAddr: 0x100007F58, size: 0x0 }
|
||||||
|
CHECK: { sym: _foo, objAddr: 0x0, binAddr: 0x100007F58, size: 0x20 }
|
||||||
|
@ -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: -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
|
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: goo:
|
||||||
MIX1-NEXT: Hash: 0x0000000000000005
|
MIX1-NEXT: Hash: 0x0000000000000005
|
||||||
MIX1-NEXT: Counters: 3
|
MIX1-NEXT: Counters: 3
|
||||||
MIX1-NOT: Block counts:
|
MIX1-NOT: Block counts:
|
||||||
MIX1-SAME: <PseudoHot>
|
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: moo:
|
||||||
MIX1-NEXT: Hash: 0x0000000000000009
|
MIX1-NEXT: Hash: 0x0000000000000009
|
||||||
MIX1-NEXT: Counters: 4
|
MIX1-NEXT: Counters: 4
|
||||||
@ -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: -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
|
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: goo:
|
||||||
MIX2-NEXT: Hash: 0x0000000000000005
|
MIX2-NEXT: Hash: 0x0000000000000005
|
||||||
MIX2-NEXT: Counters: 3
|
MIX2-NEXT: Counters: 3
|
||||||
MIX2-NOT: Block counts:
|
MIX2-NOT: Block counts:
|
||||||
MIX2-SAME: <PseudoHot>
|
MIX2-SAME: <PseudoHot>
|
||||||
|
MIX2: foo:
|
||||||
|
MIX2-NEXT: Hash: 0x0000000000000007
|
||||||
|
MIX2-NEXT: Counters: 5
|
||||||
|
MIX2-NOT: Block counts:
|
||||||
|
MIX2-SAME: <PseudoHot>
|
||||||
MIX2: moo:
|
MIX2: moo:
|
||||||
MIX2-NEXT: Hash: 0x0000000000000009
|
MIX2-NEXT: Hash: 0x0000000000000009
|
||||||
MIX2-NEXT: Counters: 4
|
MIX2-NEXT: Counters: 4
|
||||||
@ -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: -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
|
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: goo:
|
||||||
MIX3-NEXT: Hash: 0x0000000000000005
|
MIX3-NEXT: Hash: 0x0000000000000005
|
||||||
MIX3-NEXT: Counters: 3
|
MIX3-NEXT: Counters: 3
|
||||||
MIX3-NOT: Block counts:
|
MIX3-NOT: Block counts:
|
||||||
MIX3-SAME: <PseudoHot>
|
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: moo:
|
||||||
MIX3-NEXT: Hash: 0x0000000000000009
|
MIX3-NEXT: Hash: 0x0000000000000009
|
||||||
MIX3-NEXT: Counters: 4
|
MIX3-NEXT: Counters: 4
|
||||||
@ -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: -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
|
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: goo:
|
||||||
MIX4-NEXT: Hash: 0x0000000000000005
|
MIX4-NEXT: Hash: 0x0000000000000005
|
||||||
MIX4-NEXT: Counters: 3
|
MIX4-NEXT: Counters: 3
|
||||||
MIX4-NOT: Block counts:
|
MIX4-NOT: Block counts:
|
||||||
MIX4-SAME: <PseudoHot>
|
MIX4-SAME: <PseudoHot>
|
||||||
|
MIX4: foo:
|
||||||
|
MIX4-NEXT: Hash: 0x0000000000000007
|
||||||
|
MIX4-NEXT: Counters: 1
|
||||||
|
MIX4-NEXT: Block counts: [0]
|
||||||
MIX4: moo:
|
MIX4: moo:
|
||||||
MIX4-NEXT: Hash: 0x0000000000000009
|
MIX4-NEXT: Hash: 0x0000000000000009
|
||||||
MIX4-NEXT: Counters: 1
|
MIX4-NEXT: Counters: 1
|
||||||
|
@ -84,18 +84,18 @@
|
|||||||
// CHECK-NEXT: "isIncomplete": false,
|
// CHECK-NEXT: "isIncomplete": false,
|
||||||
// CHECK-NEXT: "items": [
|
// CHECK-NEXT: "items": [
|
||||||
// CHECK-NEXT: {
|
// CHECK-NEXT: {
|
||||||
// CHECK-NEXT: "detail": "builtin.unrealized_conversion_cast: !pdl.value",
|
|
||||||
// CHECK-NEXT: "insertText": "cast",
|
|
||||||
// CHECK-NEXT: "insertTextFormat": 1,
|
|
||||||
// CHECK-NEXT: "kind": 6,
|
|
||||||
// CHECK-NEXT: "label": "%cast"
|
|
||||||
// CHECK-NEXT: },
|
|
||||||
// CHECK-NEXT: {
|
|
||||||
// CHECK-NEXT: "detail": "arg #0: i32",
|
// CHECK-NEXT: "detail": "arg #0: i32",
|
||||||
// CHECK-NEXT: "insertText": "arg",
|
// CHECK-NEXT: "insertText": "arg",
|
||||||
// CHECK-NEXT: "insertTextFormat": 1,
|
// CHECK-NEXT: "insertTextFormat": 1,
|
||||||
// CHECK-NEXT: "kind": 6,
|
// CHECK-NEXT: "kind": 6,
|
||||||
// CHECK-NEXT: "label": "%arg"
|
// CHECK-NEXT: "label": "%arg"
|
||||||
|
// CHECK-NEXT: },
|
||||||
|
// CHECK-NEXT: {
|
||||||
|
// CHECK-NEXT: "detail": "builtin.unrealized_conversion_cast: !pdl.value",
|
||||||
|
// CHECK-NEXT: "insertText": "cast",
|
||||||
|
// CHECK-NEXT: "insertTextFormat": 1,
|
||||||
|
// CHECK-NEXT: "kind": 6,
|
||||||
|
// CHECK-NEXT: "label": "%cast"
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK: ]
|
// CHECK: ]
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user