Index: src/compiler/x64/instruction-selector-x64.cc |
diff --git a/src/compiler/x64/instruction-selector-x64.cc b/src/compiler/x64/instruction-selector-x64.cc |
index 306c4f24ea22f1b235903fd1d5b1a37620f080c8..4c9f09abb0512b4f32d202e230eee492f08af62d 100644 |
--- a/src/compiler/x64/instruction-selector-x64.cc |
+++ b/src/compiler/x64/instruction-selector-x64.cc |
@@ -54,91 +54,6 @@ class X64OperandGenerator FINAL : public OperandGenerator { |
}; |
-// Matches nodes of form [x * N] for N in {1,2,4,8} |
-class ScaleFactorMatcher : public NodeMatcher { |
- public: |
- explicit ScaleFactorMatcher(Node* node) |
- : NodeMatcher(node), left_(NULL), power_(0) { |
- Match(); |
- } |
- |
- bool Matches() { return left_ != NULL; } |
- int Power() { |
- DCHECK(Matches()); |
- return power_; |
- } |
- Node* Left() { |
- DCHECK(Matches()); |
- return left_; |
- } |
- |
- private: |
- void Match() { |
- if (opcode() != IrOpcode::kInt32Mul) return; |
- Int32BinopMatcher m(node()); |
- if (!m.right().HasValue()) return; |
- int32_t value = m.right().Value(); |
- switch (value) { |
- case 8: |
- power_++; // Fall through. |
- case 4: |
- power_++; // Fall through. |
- case 2: |
- power_++; // Fall through. |
- case 1: |
- break; |
- default: |
- return; |
- } |
- left_ = m.left().node(); |
- } |
- |
- Node* left_; |
- int power_; |
-}; |
- |
- |
-// Matches nodes of form: |
-// [x * N] |
-// [x * N + K] |
-// [x + K] |
-// [x] -- fallback case |
-// for N in {1,2,4,8} and K int32_t |
-class IndexAndDisplacementMatcher : public NodeMatcher { |
- public: |
- explicit IndexAndDisplacementMatcher(Node* node) |
- : NodeMatcher(node), index_node_(node), displacement_(0), power_(0) { |
- Match(); |
- } |
- |
- Node* index_node() { return index_node_; } |
- int displacement() { return displacement_; } |
- int power() { return power_; } |
- |
- private: |
- void Match() { |
- if (opcode() == IrOpcode::kInt32Add) { |
- // Assume reduction has put constant on the right. |
- Int32BinopMatcher m(node()); |
- if (m.right().HasValue()) { |
- displacement_ = m.right().Value(); |
- index_node_ = m.left().node(); |
- } |
- } |
- // Test scale factor. |
- ScaleFactorMatcher scale_matcher(index_node_); |
- if (scale_matcher.Matches()) { |
- index_node_ = scale_matcher.Left(); |
- power_ = scale_matcher.Power(); |
- } |
- } |
- |
- Node* index_node_; |
- int displacement_; |
- int power_; |
-}; |
- |
- |
class AddressingModeMatcher { |
public: |
AddressingModeMatcher(X64OperandGenerator* g, Node* base, Node* index) |