diff options
| author | bors <bors@rust-lang.org> | 2021-03-18 11:03:49 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-03-18 11:03:49 +0000 |
| commit | 0464f638af99a7c0876e9b8f96db5bbf917e3fe2 (patch) | |
| tree | 89a7a6b48e1038e4eba84d806ea1684c15e02412 /src | |
| parent | 895a8e71b1a9fc42631f81b071bc855f7fb3e9a4 (diff) | |
| parent | 81c9a0201869009e7a443d5bd0a00c5134ba8a41 (diff) | |
| download | rust-0464f638af99a7c0876e9b8f96db5bbf917e3fe2.tar.gz rust-0464f638af99a7c0876e9b8f96db5bbf917e3fe2.zip | |
Auto merge of #77566 - Marwes:smaller_hashmap, r=Amanieu
feat: Update hashbrown to instantiate less llvm IR Includes https://github.com/rust-lang/hashbrown/pull/204 and https://github.com/rust-lang/hashbrown/pull/205 (not yet merged) which both serve to reduce the amount of IR generated for hashmaps. Inspired by the llvm-lines data gathered in https://github.com/rust-lang/rust/pull/76680 (cc `@Julian-Wollersberger)`
Diffstat (limited to 'src')
| -rw-r--r-- | src/etc/gdb_providers.py | 11 | ||||
| -rw-r--r-- | src/etc/lldb_providers.py | 2 | ||||
| -rw-r--r-- | src/etc/natvis/libstd.natvis | 28 |
3 files changed, 21 insertions, 20 deletions
diff --git a/src/etc/gdb_providers.py b/src/etc/gdb_providers.py index 2d902a9b6e0..f0ce13b269c 100644 --- a/src/etc/gdb_providers.py +++ b/src/etc/gdb_providers.py @@ -349,17 +349,18 @@ class StdHashMapProvider: self.show_values = show_values table = self.table() - capacity = int(table["bucket_mask"]) + 1 - ctrl = table["ctrl"]["pointer"] + table_inner = table["table"] + capacity = int(table_inner["bucket_mask"]) + 1 + ctrl = table_inner["ctrl"]["pointer"] - self.size = int(table["items"]) + self.size = int(table_inner["items"]) self.pair_type = table.type.template_argument(0).strip_typedefs() - self.new_layout = not table.type.has_key("data") + self.new_layout = not table_inner.type.has_key("data") if self.new_layout: self.data_ptr = ctrl.cast(self.pair_type.pointer()) else: - self.data_ptr = table["data"]["pointer"] + self.data_ptr = table_inner["data"]["pointer"] self.valid_indices = [] for idx in range(capacity): diff --git a/src/etc/lldb_providers.py b/src/etc/lldb_providers.py index ca2685ca31f..702f2e82e4e 100644 --- a/src/etc/lldb_providers.py +++ b/src/etc/lldb_providers.py @@ -563,7 +563,7 @@ class StdHashMapSyntheticProvider: # HashSet wraps either std HashMap or hashbrown::HashSet, which both # wrap hashbrown::HashMap, so either way we "unwrap" twice. hashbrown_hashmap = self.valobj.GetChildAtIndex(0).GetChildAtIndex(0) - return hashbrown_hashmap.GetChildMemberWithName("table") + return hashbrown_hashmap.GetChildMemberWithName("table").GetChildMemberWithName("table") def has_children(self): # type: () -> bool diff --git a/src/etc/natvis/libstd.natvis b/src/etc/natvis/libstd.natvis index b0542b0c633..2c05f9d7c12 100644 --- a/src/etc/natvis/libstd.natvis +++ b/src/etc/natvis/libstd.natvis @@ -26,22 +26,22 @@ --> <Type Name="std::collections::hash::map::HashMap<*,*,*>"> - <DisplayString>{{ len={base.table.items} }}</DisplayString> + <DisplayString>{{ len={base.table.table.items} }}</DisplayString> <Expand> - <Item Name="[len]">base.table.items</Item> - <Item Name="[capacity]">base.table.items + base.table.growth_left</Item> + <Item Name="[len]">base.table.table.items</Item> + <Item Name="[capacity]">base.table.table.items + base.table.table.growth_left</Item> <Item Name="[state]">base.hash_builder</Item> <CustomListItems> <Variable Name="i" InitialValue="0" /> - <Variable Name="n" InitialValue="base.table.items" /> - <Size>base.table.items</Size> + <Variable Name="n" InitialValue="base.table.table.items" /> + <Size>base.table.table.items</Size> <Loop> <Break Condition="n == 0" /> - <If Condition="(base.table.ctrl.pointer[i] & 0x80) == 0"> + <If Condition="(base.table.table.ctrl.pointer[i] & 0x80) == 0"> <!-- Bucket is populated --> <Exec>n--</Exec> - <Item Name="{((tuple<$T1, $T2>*)base.table.ctrl.pointer)[-(i + 1)].__0}">((tuple<$T1, $T2>*)base.table.ctrl.pointer)[-(i + 1)].__1</Item> + <Item Name="{((tuple<$T1, $T2>*)base.table.table.ctrl.pointer)[-(i + 1)].__0}">((tuple<$T1, $T2>*)base.table.table.ctrl.pointer)[-(i + 1)].__1</Item> </If> <Exec>i++</Exec> </Loop> @@ -50,22 +50,22 @@ </Type> <Type Name="std::collections::hash::set::HashSet<*,*>"> - <DisplayString>{{ len={base.map.table.items} }}</DisplayString> + <DisplayString>{{ len={base.map.table.table.items} }}</DisplayString> <Expand> - <Item Name="[len]">base.map.table.items</Item> - <Item Name="[capacity]">base.map.table.items + base.map.table.growth_left</Item> + <Item Name="[len]">base.map.table.table.items</Item> + <Item Name="[capacity]">base.map.table.table.items + base.map.table.table.growth_left</Item> <Item Name="[state]">base.map.hash_builder</Item> <CustomListItems> <Variable Name="i" InitialValue="0" /> - <Variable Name="n" InitialValue="base.map.table.items" /> - <Size>base.map.table.items</Size> + <Variable Name="n" InitialValue="base.map.table.table.items" /> + <Size>base.map.table.table.items</Size> <Loop> <Break Condition="n == 0" /> - <If Condition="(base.map.table.ctrl.pointer[i] & 0x80) == 0"> + <If Condition="(base.map.table.table.ctrl.pointer[i] & 0x80) == 0"> <!-- Bucket is populated --> <Exec>n--</Exec> - <Item>(($T1*)base.map.table.ctrl.pointer)[-(i + 1)]</Item> + <Item>(($T1*)base.map.table.table.ctrl.pointer)[-(i + 1)]</Item> </If> <Exec>i++</Exec> </Loop> |
