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

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

Issue 2919203002: [WASM] Eliminate SIMD boolean vector types. (Closed)
Patch Set: Restore DCHECKs in AssembleMove/Swap now that we're back to 1 SIMD representation. Created 3 years, 6 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
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 "src/compiler/load-elimination.h" 5 #include "src/compiler/load-elimination.h"
6 6
7 #include "src/compiler/common-operator.h" 7 #include "src/compiler/common-operator.h"
8 #include "src/compiler/js-graph.h" 8 #include "src/compiler/js-graph.h"
9 #include "src/compiler/node-properties.h" 9 #include "src/compiler/node-properties.h"
10 #include "src/compiler/simplified-operator.h" 10 #include "src/compiler/simplified-operator.h"
(...skipping 801 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 Node* const index = NodeProperties::GetValueInput(node, 1); 812 Node* const index = NodeProperties::GetValueInput(node, 1);
813 Node* const effect = NodeProperties::GetEffectInput(node); 813 Node* const effect = NodeProperties::GetEffectInput(node);
814 Node* const control = NodeProperties::GetControlInput(node); 814 Node* const control = NodeProperties::GetControlInput(node);
815 AbstractState const* state = node_states_.Get(effect); 815 AbstractState const* state = node_states_.Get(effect);
816 if (state == nullptr) return NoChange(); 816 if (state == nullptr) return NoChange();
817 817
818 // Only handle loads that do not require truncations. 818 // Only handle loads that do not require truncations.
819 ElementAccess const& access = ElementAccessOf(node->op()); 819 ElementAccess const& access = ElementAccessOf(node->op());
820 switch (access.machine_type.representation()) { 820 switch (access.machine_type.representation()) {
821 case MachineRepresentation::kNone: 821 case MachineRepresentation::kNone:
822 case MachineRepresentation::kSimd1x4:
823 case MachineRepresentation::kSimd1x8:
824 case MachineRepresentation::kSimd1x16:
825 case MachineRepresentation::kBit: 822 case MachineRepresentation::kBit:
826 UNREACHABLE(); 823 UNREACHABLE();
827 break; 824 break;
828 case MachineRepresentation::kWord8: 825 case MachineRepresentation::kWord8:
829 case MachineRepresentation::kWord16: 826 case MachineRepresentation::kWord16:
830 case MachineRepresentation::kWord32: 827 case MachineRepresentation::kWord32:
831 case MachineRepresentation::kWord64: 828 case MachineRepresentation::kWord64:
832 case MachineRepresentation::kFloat32: 829 case MachineRepresentation::kFloat32:
833 // TODO(turbofan): Add support for doing the truncations. 830 // TODO(turbofan): Add support for doing the truncations.
834 break; 831 break;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
872 state->LookupElement(object, index, access.machine_type.representation()); 869 state->LookupElement(object, index, access.machine_type.representation());
873 if (old_value == new_value) { 870 if (old_value == new_value) {
874 // This store is fully redundant. 871 // This store is fully redundant.
875 return Replace(effect); 872 return Replace(effect);
876 } 873 }
877 // Kill all potentially aliasing elements. 874 // Kill all potentially aliasing elements.
878 state = state->KillElement(object, index, zone()); 875 state = state->KillElement(object, index, zone());
879 // Only record the new value if the store doesn't have an implicit truncation. 876 // Only record the new value if the store doesn't have an implicit truncation.
880 switch (access.machine_type.representation()) { 877 switch (access.machine_type.representation()) {
881 case MachineRepresentation::kNone: 878 case MachineRepresentation::kNone:
882 case MachineRepresentation::kSimd1x4:
883 case MachineRepresentation::kSimd1x8:
884 case MachineRepresentation::kSimd1x16:
885 case MachineRepresentation::kBit: 879 case MachineRepresentation::kBit:
886 UNREACHABLE(); 880 UNREACHABLE();
887 break; 881 break;
888 case MachineRepresentation::kWord8: 882 case MachineRepresentation::kWord8:
889 case MachineRepresentation::kWord16: 883 case MachineRepresentation::kWord16:
890 case MachineRepresentation::kWord32: 884 case MachineRepresentation::kWord32:
891 case MachineRepresentation::kWord64: 885 case MachineRepresentation::kWord64:
892 case MachineRepresentation::kFloat32: 886 case MachineRepresentation::kFloat32:
893 // TODO(turbofan): Add support for doing the truncations. 887 // TODO(turbofan): Add support for doing the truncations.
894 break; 888 break;
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
1085 return field_index - 1; 1079 return field_index - 1;
1086 } 1080 }
1087 1081
1088 // static 1082 // static
1089 int LoadElimination::FieldIndexOf(FieldAccess const& access) { 1083 int LoadElimination::FieldIndexOf(FieldAccess const& access) {
1090 MachineRepresentation rep = access.machine_type.representation(); 1084 MachineRepresentation rep = access.machine_type.representation();
1091 switch (rep) { 1085 switch (rep) {
1092 case MachineRepresentation::kNone: 1086 case MachineRepresentation::kNone:
1093 case MachineRepresentation::kBit: 1087 case MachineRepresentation::kBit:
1094 case MachineRepresentation::kSimd128: 1088 case MachineRepresentation::kSimd128:
1095 case MachineRepresentation::kSimd1x4:
1096 case MachineRepresentation::kSimd1x8:
1097 case MachineRepresentation::kSimd1x16:
1098 UNREACHABLE(); 1089 UNREACHABLE();
1099 break; 1090 break;
1100 case MachineRepresentation::kWord32: 1091 case MachineRepresentation::kWord32:
1101 case MachineRepresentation::kWord64: 1092 case MachineRepresentation::kWord64:
1102 if (rep != MachineType::PointerRepresentation()) { 1093 if (rep != MachineType::PointerRepresentation()) {
1103 return -1; // We currently only track pointer size fields. 1094 return -1; // We currently only track pointer size fields.
1104 } 1095 }
1105 break; 1096 break;
1106 case MachineRepresentation::kWord8: 1097 case MachineRepresentation::kWord8:
1107 case MachineRepresentation::kWord16: 1098 case MachineRepresentation::kWord16:
(...skipping 21 matching lines...) Expand all
1129 return jsgraph()->common(); 1120 return jsgraph()->common();
1130 } 1121 }
1131 1122
1132 Graph* LoadElimination::graph() const { return jsgraph()->graph(); } 1123 Graph* LoadElimination::graph() const { return jsgraph()->graph(); }
1133 1124
1134 Factory* LoadElimination::factory() const { return jsgraph()->factory(); } 1125 Factory* LoadElimination::factory() const { return jsgraph()->factory(); }
1135 1126
1136 } // namespace compiler 1127 } // namespace compiler
1137 } // namespace internal 1128 } // namespace internal
1138 } // namespace v8 1129 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/js-native-context-specialization.cc ('k') | src/compiler/machine-graph-verifier.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698