Skip to content

Commit 0464f63

Browse files
committed
Auto merge of rust-lang#77566 - Marwes:smaller_hashmap, r=Amanieu
feat: Update hashbrown to instantiate less llvm IR Includes rust-lang/hashbrown#204 and rust-lang/hashbrown#205 (not yet merged) which both serve to reduce the amount of IR generated for hashmaps. Inspired by the llvm-lines data gathered in rust-lang#76680 (cc `@Julian-Wollersberger)`
2 parents 895a8e7 + 81c9a02 commit 0464f63

File tree

5 files changed

+34
-27
lines changed

5 files changed

+34
-27
lines changed

Cargo.lock

+12-6
Original file line numberDiff line numberDiff line change
@@ -1507,9 +1507,15 @@ dependencies = [
15071507

15081508
[[package]]
15091509
name = "hashbrown"
1510-
version = "0.9.0"
1510+
version = "0.9.1"
1511+
source = "registry+https://github.com/rust-lang/crates.io-index"
1512+
checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
1513+
1514+
[[package]]
1515+
name = "hashbrown"
1516+
version = "0.11.0"
15111517
source = "registry+https://github.com/rust-lang/crates.io-index"
1512-
checksum = "00d63df3d41950fb462ed38308eea019113ad1508da725bbedcd0fa5a85ef5f7"
1518+
checksum = "362385356d610bd1e5a408ddf8d022041774b683f345a1d2cfcb4f60f8ae2db5"
15131519
dependencies = [
15141520
"compiler_builtins",
15151521
"rustc-std-workspace-alloc",
@@ -1653,7 +1659,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
16531659
checksum = "55e2e4c765aa53a0424761bf9f41aa7a6ac1efa87238f59560640e27fca028f2"
16541660
dependencies = [
16551661
"autocfg",
1656-
"hashbrown",
1662+
"hashbrown 0.9.1",
16571663
]
16581664

16591665
[[package]]
@@ -2351,9 +2357,9 @@ dependencies = [
23512357

23522358
[[package]]
23532359
name = "once_cell"
2354-
version = "1.4.1"
2360+
version = "1.7.2"
23552361
source = "registry+https://github.com/rust-lang/crates.io-index"
2356-
checksum = "260e51e7efe62b592207e9e13a68e43692a7a279171d6ba57abd208bf23645ad"
2362+
checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3"
23572363

23582364
[[package]]
23592365
name = "opaque-debug"
@@ -4987,7 +4993,7 @@ dependencies = [
49874993
"core",
49884994
"dlmalloc",
49894995
"fortanix-sgx-abi",
4990-
"hashbrown",
4996+
"hashbrown 0.11.0",
49914997
"hermit-abi",
49924998
"libc",
49934999
"miniz_oxide",

library/std/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ libc = { version = "0.2.88", default-features = false, features = ['rustc-dep-of
2020
compiler_builtins = { version = "0.1.39" }
2121
profiler_builtins = { path = "../profiler_builtins", optional = true }
2222
unwind = { path = "../unwind" }
23-
hashbrown = { version = "0.9.0", default-features = false, features = ['rustc-dep-of-std'] }
23+
hashbrown = { version = "0.11", default-features = false, features = ['rustc-dep-of-std'] }
2424

2525
# Dependencies of the `backtrace` crate
2626
addr2line = { version = "0.14.0", optional = true, default-features = false }

src/etc/gdb_providers.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -349,17 +349,18 @@ def __init__(self, valobj, show_values=True):
349349
self.show_values = show_values
350350

351351
table = self.table()
352-
capacity = int(table["bucket_mask"]) + 1
353-
ctrl = table["ctrl"]["pointer"]
352+
table_inner = table["table"]
353+
capacity = int(table_inner["bucket_mask"]) + 1
354+
ctrl = table_inner["ctrl"]["pointer"]
354355

355-
self.size = int(table["items"])
356+
self.size = int(table_inner["items"])
356357
self.pair_type = table.type.template_argument(0).strip_typedefs()
357358

358-
self.new_layout = not table.type.has_key("data")
359+
self.new_layout = not table_inner.type.has_key("data")
359360
if self.new_layout:
360361
self.data_ptr = ctrl.cast(self.pair_type.pointer())
361362
else:
362-
self.data_ptr = table["data"]["pointer"]
363+
self.data_ptr = table_inner["data"]["pointer"]
363364

364365
self.valid_indices = []
365366
for idx in range(capacity):

src/etc/lldb_providers.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,7 @@ def table(self):
563563
# HashSet wraps either std HashMap or hashbrown::HashSet, which both
564564
# wrap hashbrown::HashMap, so either way we "unwrap" twice.
565565
hashbrown_hashmap = self.valobj.GetChildAtIndex(0).GetChildAtIndex(0)
566-
return hashbrown_hashmap.GetChildMemberWithName("table")
566+
return hashbrown_hashmap.GetChildMemberWithName("table").GetChildMemberWithName("table")
567567

568568
def has_children(self):
569569
# type: () -> bool

src/etc/natvis/libstd.natvis

+14-14
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,22 @@
2626
-->
2727

2828
<Type Name="std::collections::hash::map::HashMap&lt;*,*,*&gt;">
29-
<DisplayString>{{ len={base.table.items} }}</DisplayString>
29+
<DisplayString>{{ len={base.table.table.items} }}</DisplayString>
3030
<Expand>
31-
<Item Name="[len]">base.table.items</Item>
32-
<Item Name="[capacity]">base.table.items + base.table.growth_left</Item>
31+
<Item Name="[len]">base.table.table.items</Item>
32+
<Item Name="[capacity]">base.table.table.items + base.table.table.growth_left</Item>
3333
<Item Name="[state]">base.hash_builder</Item>
3434

3535
<CustomListItems>
3636
<Variable Name="i" InitialValue="0" />
37-
<Variable Name="n" InitialValue="base.table.items" />
38-
<Size>base.table.items</Size>
37+
<Variable Name="n" InitialValue="base.table.table.items" />
38+
<Size>base.table.table.items</Size>
3939
<Loop>
4040
<Break Condition="n == 0" />
41-
<If Condition="(base.table.ctrl.pointer[i] &amp; 0x80) == 0">
41+
<If Condition="(base.table.table.ctrl.pointer[i] &amp; 0x80) == 0">
4242
<!-- Bucket is populated -->
4343
<Exec>n--</Exec>
44-
<Item Name="{((tuple&lt;$T1, $T2&gt;*)base.table.ctrl.pointer)[-(i + 1)].__0}">((tuple&lt;$T1, $T2&gt;*)base.table.ctrl.pointer)[-(i + 1)].__1</Item>
44+
<Item Name="{((tuple&lt;$T1, $T2&gt;*)base.table.table.ctrl.pointer)[-(i + 1)].__0}">((tuple&lt;$T1, $T2&gt;*)base.table.table.ctrl.pointer)[-(i + 1)].__1</Item>
4545
</If>
4646
<Exec>i++</Exec>
4747
</Loop>
@@ -50,22 +50,22 @@
5050
</Type>
5151

5252
<Type Name="std::collections::hash::set::HashSet&lt;*,*&gt;">
53-
<DisplayString>{{ len={base.map.table.items} }}</DisplayString>
53+
<DisplayString>{{ len={base.map.table.table.items} }}</DisplayString>
5454
<Expand>
55-
<Item Name="[len]">base.map.table.items</Item>
56-
<Item Name="[capacity]">base.map.table.items + base.map.table.growth_left</Item>
55+
<Item Name="[len]">base.map.table.table.items</Item>
56+
<Item Name="[capacity]">base.map.table.table.items + base.map.table.table.growth_left</Item>
5757
<Item Name="[state]">base.map.hash_builder</Item>
5858

5959
<CustomListItems>
6060
<Variable Name="i" InitialValue="0" />
61-
<Variable Name="n" InitialValue="base.map.table.items" />
62-
<Size>base.map.table.items</Size>
61+
<Variable Name="n" InitialValue="base.map.table.table.items" />
62+
<Size>base.map.table.table.items</Size>
6363
<Loop>
6464
<Break Condition="n == 0" />
65-
<If Condition="(base.map.table.ctrl.pointer[i] &amp; 0x80) == 0">
65+
<If Condition="(base.map.table.table.ctrl.pointer[i] &amp; 0x80) == 0">
6666
<!-- Bucket is populated -->
6767
<Exec>n--</Exec>
68-
<Item>(($T1*)base.map.table.ctrl.pointer)[-(i + 1)]</Item>
68+
<Item>(($T1*)base.map.table.table.ctrl.pointer)[-(i + 1)]</Item>
6969
</If>
7070
<Exec>i++</Exec>
7171
</Loop>

0 commit comments

Comments
 (0)