Index: src/compiler/simd-scalar-lowering.h |
diff --git a/src/compiler/int64-lowering.h b/src/compiler/simd-scalar-lowering.h |
similarity index 52% |
copy from src/compiler/int64-lowering.h |
copy to src/compiler/simd-scalar-lowering.h |
index 66a54e9c3f9be2b2d595a4d69c0c562d197f0f0a..c10b5cdf0eb2b21018f379c30adc83408d9c6465 100644 |
--- a/src/compiler/int64-lowering.h |
+++ b/src/compiler/simd-scalar-lowering.h |
@@ -1,41 +1,40 @@ |
-// Copyright 2014 the V8 project authors. All rights reserved. |
+// Copyright 2016 the V8 project authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef V8_COMPILER_INT64_LOWERING_H_ |
-#define V8_COMPILER_INT64_LOWERING_H_ |
+#ifndef V8_COMPILER_SIMD_SCALAR_LOWERING_H_ |
+#define V8_COMPILER_SIMD_SCALAR_LOWERING_H_ |
#include "src/compiler/common-operator.h" |
#include "src/compiler/graph.h" |
#include "src/compiler/machine-operator.h" |
#include "src/compiler/node-marker.h" |
-#include "src/globals.h" |
#include "src/zone/zone-containers.h" |
namespace v8 { |
namespace internal { |
namespace compiler { |
-class V8_EXPORT_PRIVATE Int64Lowering { |
+class SimdScalarLowering { |
public: |
- Int64Lowering(Graph* graph, MachineOperatorBuilder* machine, |
- CommonOperatorBuilder* common, Zone* zone, |
- Signature<MachineRepresentation>* signature); |
+ SimdScalarLowering(Graph* graph, MachineOperatorBuilder* machine, |
+ CommonOperatorBuilder* common, Zone* zone, |
+ Signature<MachineRepresentation>* signature); |
void LowerGraph(); |
- static int GetParameterCountAfterLowering( |
- Signature<MachineRepresentation>* signature); |
- |
- static const int kLowerWordOffset; |
- static const int kHigherWordOffset; |
+ int GetParameterCountAfterLowering(); |
private: |
enum class State : uint8_t { kUnvisited, kOnStack, kVisited }; |
+ enum class SimdType : uint8_t { kInt32, kFloat32 }; |
+ |
+ static const size_t kMaxLanes = 4; |
+ |
struct Replacement { |
- Node* low; |
- Node* high; |
+ Node* node[kMaxLanes]; |
+ SimdType type; // represents what input type is expected |
}; |
Zone* zone() const { return zone_; } |
@@ -44,21 +43,16 @@ class V8_EXPORT_PRIVATE Int64Lowering { |
CommonOperatorBuilder* common() const { return common_; } |
Signature<MachineRepresentation>* signature() const { return signature_; } |
- void PrepareReplacements(Node* node); |
- void PushNode(Node* node); |
void LowerNode(Node* node); |
bool DefaultLowering(Node* node); |
- void LowerComparison(Node* node, const Operator* signed_op, |
- const Operator* unsigned_op); |
- void PrepareProjectionReplacements(Node* node); |
- |
- void ReplaceNode(Node* old, Node* new_low, Node* new_high); |
- bool HasReplacementLow(Node* node); |
- Node* GetReplacementLow(Node* node); |
- bool HasReplacementHigh(Node* node); |
- Node* GetReplacementHigh(Node* node); |
+ |
+ void ReplaceNode(Node* old, Node** new_nodes); |
+ bool HasReplacement(size_t index, Node* node); |
+ Node** GetReplacements(Node* node); |
+ Node** GetReplacementsWithType(Node* node, SimdType type); |
+ SimdType ReplacementType(Node* node); |
void PreparePhiReplacement(Node* phi); |
- void GetIndexNodes(Node* index, Node*& index_low, Node*& index_high); |
+ void SetLoweredType(Node* node, Node* output); |
struct NodeState { |
Node* node; |
@@ -74,10 +68,11 @@ class V8_EXPORT_PRIVATE Int64Lowering { |
Replacement* replacements_; |
Signature<MachineRepresentation>* signature_; |
Node* placeholder_; |
+ int parameter_count_after_lowering_; |
}; |
} // namespace compiler |
} // namespace internal |
} // namespace v8 |
-#endif // V8_COMPILER_INT64_LOWERING_H_ |
+#endif // V8_COMPILER_SIMD_SCALAR_LOWERING_H_ |