aboutsummaryrefslogtreecommitdiff
path: root/src/compiler/node-matchers.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/node-matchers.h')
-rw-r--r--src/compiler/node-matchers.h48
1 files changed, 32 insertions, 16 deletions
diff --git a/src/compiler/node-matchers.h b/src/compiler/node-matchers.h
index c317fdd5..d2bdb8bf 100644
--- a/src/compiler/node-matchers.h
+++ b/src/compiler/node-matchers.h
@@ -489,13 +489,14 @@ struct BaseWithIndexAndDisplacementMatcher {
bool power_of_two_plus_one = false;
DisplacementMode displacement_mode = kPositiveDisplacement;
int scale = 0;
- if (m.HasIndexInput() && left->OwnedBy(node)) {
+ if (m.HasIndexInput() && left->OwnedByAddressingOperand()) {
index = m.IndexInput();
scale = m.scale();
scale_expression = left;
power_of_two_plus_one = m.power_of_two_plus_one();
bool match_found = false;
- if (right->opcode() == AddMatcher::kSubOpcode && right->OwnedBy(node)) {
+ if (right->opcode() == AddMatcher::kSubOpcode &&
+ right->OwnedByAddressingOperand()) {
AddMatcher right_matcher(right);
if (right_matcher.right().HasValue()) {
// (S + (B - D))
@@ -506,7 +507,8 @@ struct BaseWithIndexAndDisplacementMatcher {
}
}
if (!match_found) {
- if (right->opcode() == AddMatcher::kAddOpcode && right->OwnedBy(node)) {
+ if (right->opcode() == AddMatcher::kAddOpcode &&
+ right->OwnedByAddressingOperand()) {
AddMatcher right_matcher(right);
if (right_matcher.right().HasValue()) {
// (S + (B + D))
@@ -526,7 +528,8 @@ struct BaseWithIndexAndDisplacementMatcher {
}
} else {
bool match_found = false;
- if (left->opcode() == AddMatcher::kSubOpcode && left->OwnedBy(node)) {
+ if (left->opcode() == AddMatcher::kSubOpcode &&
+ left->OwnedByAddressingOperand()) {
AddMatcher left_matcher(left);
Node* left_left = left_matcher.left().node();
Node* left_right = left_matcher.right().node();
@@ -551,7 +554,8 @@ struct BaseWithIndexAndDisplacementMatcher {
}
}
if (!match_found) {
- if (left->opcode() == AddMatcher::kAddOpcode && left->OwnedBy(node)) {
+ if (left->opcode() == AddMatcher::kAddOpcode &&
+ left->OwnedByAddressingOperand()) {
AddMatcher left_matcher(left);
Node* left_left = left_matcher.left().node();
Node* left_right = left_matcher.right().node();
@@ -565,13 +569,19 @@ struct BaseWithIndexAndDisplacementMatcher {
displacement = left_right;
base = right;
} else if (m.right().HasValue()) {
- // ((S + B) + D)
- index = left_matcher.IndexInput();
- scale = left_matcher.scale();
- scale_expression = left_left;
- power_of_two_plus_one = left_matcher.power_of_two_plus_one();
- base = left_right;
- displacement = right;
+ if (left->OwnedBy(node)) {
+ // ((S + B) + D)
+ index = left_matcher.IndexInput();
+ scale = left_matcher.scale();
+ scale_expression = left_left;
+ power_of_two_plus_one = left_matcher.power_of_two_plus_one();
+ base = left_right;
+ displacement = right;
+ } else {
+ // (B + D)
+ base = left;
+ displacement = right;
+ }
} else {
// (B + B)
index = left;
@@ -584,10 +594,16 @@ struct BaseWithIndexAndDisplacementMatcher {
displacement = left_right;
base = right;
} else if (m.right().HasValue()) {
- // ((B + B) + D)
- index = left_left;
- base = left_right;
- displacement = right;
+ if (left->OwnedBy(node)) {
+ // ((B + B) + D)
+ index = left_left;
+ base = left_right;
+ displacement = right;
+ } else {
+ // (B + D)
+ base = left;
+ displacement = right;
+ }
} else {
// (B + B)
index = left;