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

Side by Side Diff: src/compiler/simd-scalar-lowering.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
« no previous file with comments | « src/compiler/simd-scalar-lowering.h ('k') | src/compiler/simplified-lowering.cc » ('j') | 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 "src/compiler/simd-scalar-lowering.h" 5 #include "src/compiler/simd-scalar-lowering.h"
6 #include "src/compiler/diamond.h" 6 #include "src/compiler/diamond.h"
7 #include "src/compiler/linkage.h" 7 #include "src/compiler/linkage.h"
8 #include "src/compiler/node-matchers.h" 8 #include "src/compiler/node-matchers.h"
9 #include "src/compiler/node-properties.h" 9 #include "src/compiler/node-properties.h"
10 10
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 case IrOpcode::kCall: { 209 case IrOpcode::kCall: {
210 replacements_[node->id()].type = SimdType::kInt32x4; 210 replacements_[node->id()].type = SimdType::kInt32x4;
211 break; 211 break;
212 } 212 }
213 FOREACH_FLOAT32X4_OPCODE(CASE_STMT) { 213 FOREACH_FLOAT32X4_OPCODE(CASE_STMT) {
214 replacements_[node->id()].type = SimdType::kFloat32x4; 214 replacements_[node->id()].type = SimdType::kFloat32x4;
215 break; 215 break;
216 } 216 }
217 FOREACH_FLOAT32X4_TO_SIMD1X4OPCODE(CASE_STMT) 217 FOREACH_FLOAT32X4_TO_SIMD1X4OPCODE(CASE_STMT)
218 FOREACH_INT32X4_TO_SIMD1X4OPCODE(CASE_STMT) { 218 FOREACH_INT32X4_TO_SIMD1X4OPCODE(CASE_STMT) {
219 replacements_[node->id()].type = SimdType::kSimd1x4; 219 replacements_[node->id()].type = SimdType::kInt32x4;
220 break; 220 break;
221 } 221 }
222 FOREACH_INT16X8_OPCODE(CASE_STMT) { 222 FOREACH_INT16X8_OPCODE(CASE_STMT) {
223 replacements_[node->id()].type = SimdType::kInt16x8; 223 replacements_[node->id()].type = SimdType::kInt16x8;
224 break; 224 break;
225 } 225 }
226 FOREACH_INT16X8_TO_SIMD1X8OPCODE(CASE_STMT) { 226 FOREACH_INT16X8_TO_SIMD1X8OPCODE(CASE_STMT) {
227 replacements_[node->id()].type = SimdType::kSimd1x8; 227 replacements_[node->id()].type = SimdType::kInt16x8;
228 break; 228 break;
229 } 229 }
230 FOREACH_INT8X16_OPCODE(CASE_STMT) { 230 FOREACH_INT8X16_OPCODE(CASE_STMT) {
231 replacements_[node->id()].type = SimdType::kInt8x16; 231 replacements_[node->id()].type = SimdType::kInt8x16;
232 break; 232 break;
233 } 233 }
234 FOREACH_INT8X16_TO_SIMD1X16OPCODE(CASE_STMT) { 234 FOREACH_INT8X16_TO_SIMD1X16OPCODE(CASE_STMT) {
235 replacements_[node->id()].type = SimdType::kSimd1x16; 235 replacements_[node->id()].type = SimdType::kInt8x16;
236 break; 236 break;
237 } 237 }
238 default: { 238 default: {
239 switch (output->opcode()) { 239 switch (output->opcode()) {
240 FOREACH_FLOAT32X4_TO_SIMD1X4OPCODE(CASE_STMT) 240 FOREACH_FLOAT32X4_TO_SIMD1X4OPCODE(CASE_STMT)
241 case IrOpcode::kF32x4SConvertI32x4: 241 case IrOpcode::kF32x4SConvertI32x4:
242 case IrOpcode::kF32x4UConvertI32x4: { 242 case IrOpcode::kF32x4UConvertI32x4: {
243 replacements_[node->id()].type = SimdType::kInt32x4; 243 replacements_[node->id()].type = SimdType::kInt32x4;
244 break; 244 break;
245 } 245 }
246 FOREACH_INT32X4_TO_SIMD1X4OPCODE(CASE_STMT) 246 FOREACH_INT32X4_TO_SIMD1X4OPCODE(CASE_STMT)
247 case IrOpcode::kI32x4SConvertF32x4: 247 case IrOpcode::kI32x4SConvertF32x4:
248 case IrOpcode::kI32x4UConvertF32x4: { 248 case IrOpcode::kI32x4UConvertF32x4: {
249 replacements_[node->id()].type = SimdType::kFloat32x4; 249 replacements_[node->id()].type = SimdType::kFloat32x4;
250 break; 250 break;
251 } 251 }
252 case IrOpcode::kS32x4Select: { 252 case IrOpcode::kS128Select: {
253 replacements_[node->id()].type = SimdType::kSimd1x4; 253 replacements_[node->id()].type = SimdType::kInt32x4;
254 break; 254 break;
255 } 255 }
256 FOREACH_INT16X8_TO_SIMD1X8OPCODE(CASE_STMT) { 256 FOREACH_INT16X8_TO_SIMD1X8OPCODE(CASE_STMT) {
257 replacements_[node->id()].type = SimdType::kInt16x8; 257 replacements_[node->id()].type = SimdType::kInt16x8;
258 break; 258 break;
259 } 259 }
260 FOREACH_INT8X16_TO_SIMD1X16OPCODE(CASE_STMT) { 260 FOREACH_INT8X16_TO_SIMD1X16OPCODE(CASE_STMT) {
261 replacements_[node->id()].type = SimdType::kInt8x16; 261 replacements_[node->id()].type = SimdType::kInt8x16;
262 break; 262 break;
263 } 263 }
264 case IrOpcode::kS16x8Select: {
265 replacements_[node->id()].type = SimdType::kSimd1x8;
266 break;
267 }
268 default: { 264 default: {
269 replacements_[node->id()].type = replacements_[output->id()].type; 265 replacements_[node->id()].type = replacements_[output->id()].type;
270 } 266 }
271 } 267 }
272 } 268 }
273 #undef CASE_STMT 269 #undef CASE_STMT
274 } 270 }
275 } 271 }
276 272
277 static int GetParameterIndexAfterLowering( 273 static int GetParameterIndexAfterLowering(
(...skipping 25 matching lines...) Expand all
303 for (int i = 0; i < static_cast<int>(signature->return_count()); ++i) { 299 for (int i = 0; i < static_cast<int>(signature->return_count()); ++i) {
304 if (signature->GetReturn(i) == MachineRepresentation::kSimd128) { 300 if (signature->GetReturn(i) == MachineRepresentation::kSimd128) {
305 result += 3; 301 result += 3;
306 } 302 }
307 } 303 }
308 return result; 304 return result;
309 } 305 }
310 306
311 int SimdScalarLowering::NumLanes(SimdType type) { 307 int SimdScalarLowering::NumLanes(SimdType type) {
312 int num_lanes = 0; 308 int num_lanes = 0;
313 if (type == SimdType::kFloat32x4 || type == SimdType::kInt32x4 || 309 if (type == SimdType::kFloat32x4 || type == SimdType::kInt32x4) {
314 type == SimdType::kSimd1x4) {
315 num_lanes = kNumLanes32; 310 num_lanes = kNumLanes32;
316 } else if (type == SimdType::kInt16x8 || type == SimdType::kSimd1x8) { 311 } else if (type == SimdType::kInt16x8) {
317 num_lanes = kNumLanes16; 312 num_lanes = kNumLanes16;
318 } else if (type == SimdType::kInt8x16 || type == SimdType::kSimd1x16) { 313 } else if (type == SimdType::kInt8x16) {
319 num_lanes = kNumLanes8; 314 num_lanes = kNumLanes8;
320 } else { 315 } else {
321 UNREACHABLE(); 316 UNREACHABLE();
322 } 317 }
323 return num_lanes; 318 return num_lanes;
324 } 319 }
325 320
326 constexpr int SimdScalarLowering::kLaneOffsets[]; 321 constexpr int SimdScalarLowering::kLaneOffsets[];
327 322
328 void SimdScalarLowering::GetIndexNodes(Node* index, Node** new_indices, 323 void SimdScalarLowering::GetIndexNodes(Node* index, Node** new_indices,
(...skipping 768 matching lines...) Expand 10 before | Expand all | Expand 10 after
1097 break; 1092 break;
1098 } 1093 }
1099 case IrOpcode::kI16x8Ne: { 1094 case IrOpcode::kI16x8Ne: {
1100 LowerNotEqual(node, SimdType::kInt16x8, machine()->Word32Equal()); 1095 LowerNotEqual(node, SimdType::kInt16x8, machine()->Word32Equal());
1101 break; 1096 break;
1102 } 1097 }
1103 case IrOpcode::kI8x16Ne: { 1098 case IrOpcode::kI8x16Ne: {
1104 LowerNotEqual(node, SimdType::kInt8x16, machine()->Word32Equal()); 1099 LowerNotEqual(node, SimdType::kInt8x16, machine()->Word32Equal());
1105 break; 1100 break;
1106 } 1101 }
1107 case IrOpcode::kS32x4Select: 1102 case IrOpcode::kS128Select: {
1108 case IrOpcode::kS16x8Select:
1109 case IrOpcode::kS8x16Select: {
1110 DCHECK(node->InputCount() == 3); 1103 DCHECK(node->InputCount() == 3);
1111 DCHECK(ReplacementType(node->InputAt(0)) == SimdType::kSimd1x4 || 1104 DCHECK(ReplacementType(node->InputAt(0)) == SimdType::kInt32x4 ||
1112 ReplacementType(node->InputAt(0)) == SimdType::kSimd1x8 || 1105 ReplacementType(node->InputAt(0)) == SimdType::kInt16x8 ||
1113 ReplacementType(node->InputAt(0)) == SimdType::kSimd1x16); 1106 ReplacementType(node->InputAt(0)) == SimdType::kInt8x16);
1114 Node** boolean_input = GetReplacements(node->InputAt(0)); 1107 Node** boolean_input = GetReplacements(node->InputAt(0));
1115 Node** rep_left = GetReplacementsWithType(node->InputAt(1), rep_type); 1108 Node** rep_left = GetReplacementsWithType(node->InputAt(1), rep_type);
1116 Node** rep_right = GetReplacementsWithType(node->InputAt(2), rep_type); 1109 Node** rep_right = GetReplacementsWithType(node->InputAt(2), rep_type);
1117 Node** rep_node = zone()->NewArray<Node*>(num_lanes); 1110 Node** rep_node = zone()->NewArray<Node*>(num_lanes);
1118 for (int i = 0; i < num_lanes; ++i) { 1111 for (int i = 0; i < num_lanes; ++i) {
1119 Diamond d(graph(), common(), 1112 Diamond d(graph(), common(),
1120 graph()->NewNode(machine()->Word32Equal(), boolean_input[i], 1113 graph()->NewNode(machine()->Word32Equal(), boolean_input[i],
1121 jsgraph_->Int32Constant(0))); 1114 jsgraph_->Int32Constant(0)));
1122 #define SELECT_CASE(sType, mType) \ 1115 #define SELECT_CASE(sType, mType) \
1123 case SimdType::k##sType: \ 1116 case SimdType::k##sType: \
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1277 UNREACHABLE(); 1270 UNREACHABLE();
1278 } 1271 }
1279 #undef PHI_CASE 1272 #undef PHI_CASE
1280 } 1273 }
1281 ReplaceNode(phi, rep_nodes, num_lanes); 1274 ReplaceNode(phi, rep_nodes, num_lanes);
1282 } 1275 }
1283 } 1276 }
1284 } // namespace compiler 1277 } // namespace compiler
1285 } // namespace internal 1278 } // namespace internal
1286 } // namespace v8 1279 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/simd-scalar-lowering.h ('k') | src/compiler/simplified-lowering.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698