Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(255)

Side by Side Diff: src/compiler/store-store-elimination.cc

Issue 2252283004: [turbofan] Allow for 32-bit field offsets in store elimination. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Address feedback. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <iterator> 5 #include <iterator>
6 6
7 #include "src/compiler/store-store-elimination.h" 7 #include "src/compiler/store-store-elimination.h"
8 8
9 #include "src/compiler/all-nodes.h" 9 #include "src/compiler/all-nodes.h"
10 #include "src/compiler/js-graph.h" 10 #include "src/compiler/js-graph.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 // Assumption: every byte of a JS object is only ever accessed through one 65 // Assumption: every byte of a JS object is only ever accessed through one
66 // offset. For instance, byte 15 of a given object may be accessed using a 66 // offset. For instance, byte 15 of a given object may be accessed using a
67 // two-byte read at offset 14, or a four-byte read at offset 12, but never 67 // two-byte read at offset 14, or a four-byte read at offset 12, but never
68 // both in the same program. 68 // both in the same program.
69 // 69 //
70 // This implementation needs all dead nodes removed from the graph, and the 70 // This implementation needs all dead nodes removed from the graph, and the
71 // graph should be trimmed. 71 // graph should be trimmed.
72 72
73 namespace { 73 namespace {
74 74
75 // 16 bits was chosen fairly arbitrarily; it seems enough now. 8 bits is too 75 typedef uint32_t StoreOffset;
76 // few.
77 typedef uint16_t StoreOffset;
78 76
79 struct UnobservableStore { 77 struct UnobservableStore {
80 NodeId id_; 78 NodeId id_;
81 StoreOffset offset_; 79 StoreOffset offset_;
82 80
83 bool operator==(const UnobservableStore) const; 81 bool operator==(const UnobservableStore) const;
84 bool operator!=(const UnobservableStore) const; 82 bool operator!=(const UnobservableStore) const;
85 bool operator<(const UnobservableStore) const; 83 bool operator<(const UnobservableStore) const;
86 }; 84 };
87 85
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 Zone* const temp_zone_; 162 Zone* const temp_zone_;
165 163
166 ZoneStack<Node*> revisit_; 164 ZoneStack<Node*> revisit_;
167 ZoneVector<bool> in_revisit_; 165 ZoneVector<bool> in_revisit_;
168 // Maps node IDs to UnobservableNodeSets. 166 // Maps node IDs to UnobservableNodeSets.
169 ZoneVector<UnobservablesSet> unobservable_; 167 ZoneVector<UnobservablesSet> unobservable_;
170 ZoneSet<Node*> to_remove_; 168 ZoneSet<Node*> to_remove_;
171 const UnobservablesSet unobservables_visited_empty_; 169 const UnobservablesSet unobservables_visited_empty_;
172 }; 170 };
173 171
174 // To safely cast an offset from a FieldAccess, which has a wider range 172 // To safely cast an offset from a FieldAccess, which has a potentially wider
175 // (namely int). 173 // range (namely int).
176 StoreOffset ToOffset(int offset) { 174 StoreOffset ToOffset(int offset) {
177 CHECK(0 <= offset && offset < (1 << 8 * sizeof(StoreOffset))); 175 CHECK(0 <= offset);
178 return (StoreOffset)offset; 176 return static_cast<StoreOffset>(offset);
179 } 177 }
180 178
181 StoreOffset ToOffset(const FieldAccess& access) { 179 StoreOffset ToOffset(const FieldAccess& access) {
182 return ToOffset(access.offset); 180 return ToOffset(access.offset);
183 } 181 }
184 182
185 unsigned int RepSizeOf(MachineRepresentation rep) { 183 unsigned int RepSizeOf(MachineRepresentation rep) {
186 return 1u << ElementSizeLog2Of(rep); 184 return 1u << ElementSizeLog2Of(rep);
187 } 185 }
188 unsigned int RepSizeOf(FieldAccess access) { 186 unsigned int RepSizeOf(FieldAccess access) {
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 return !(*this == other); 559 return !(*this == other);
562 } 560 }
563 561
564 bool UnobservableStore::operator<(const UnobservableStore other) const { 562 bool UnobservableStore::operator<(const UnobservableStore other) const {
565 return (id_ < other.id_) || (id_ == other.id_ && offset_ < other.offset_); 563 return (id_ < other.id_) || (id_ == other.id_ && offset_ < other.offset_);
566 } 564 }
567 565
568 } // namespace compiler 566 } // namespace compiler
569 } // namespace internal 567 } // namespace internal
570 } // namespace v8 568 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698