Reviewers: dcarney,
Description:
[turbofan] LoadElement should not have a control input.
TEST=unittests
[email protected]
Please review this at https://codereview.chromium.org/685723002/
Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+27, -39 lines):
M src/compiler/js-typed-lowering.cc
M src/compiler/operator-properties-inl.h
M src/compiler/simplified-lowering.cc
M test/unittests/compiler/js-typed-lowering-unittest.cc
M test/unittests/compiler/node-test-utils.h
M test/unittests/compiler/node-test-utils.cc
M test/unittests/compiler/simplified-operator-reducer-unittest.cc
M test/unittests/compiler/simplified-operator-unittest.cc
Index: src/compiler/js-typed-lowering.cc
diff --git a/src/compiler/js-typed-lowering.cc
b/src/compiler/js-typed-lowering.cc
index
bb7095efee7456c1ca7f1c4fabb832da4bf1d756..e4d25bb78a657ef987eaabc4a1dd5712fb8171c0
100644
--- a/src/compiler/js-typed-lowering.cc
+++ b/src/compiler/js-typed-lowering.cc
@@ -614,11 +614,10 @@ Reduction JSTypedLowering::ReduceJSLoadProperty(Node*
node) {
bit_cast<intptr_t>(elements->external_pointer()));
Node* length = jsgraph()->Constant(byte_length /
array->element_size());
Node* effect = NodeProperties::GetEffectInput(node);
- Node* control = NodeProperties::GetControlInput(node);
Node* load = graph()->NewNode(
simplified()->LoadElement(
AccessBuilder::ForTypedArrayElement(type, true)),
- pointer, key, length, effect, control);
+ pointer, key, length, effect);
return ReplaceEagerly(node, load);
}
}
Index: src/compiler/operator-properties-inl.h
diff --git a/src/compiler/operator-properties-inl.h
b/src/compiler/operator-properties-inl.h
index
7c2ae1635ffeffb8d422ded1fa05a2fffb494a29..867d452cde9bc3eccdf1d189cace4b8908683344
100644
--- a/src/compiler/operator-properties-inl.h
+++ b/src/compiler/operator-properties-inl.h
@@ -122,7 +122,6 @@ inline int
OperatorProperties::GetControlInputCount(const Operator* op) {
case IrOpcode::kPhi:
case IrOpcode::kEffectPhi:
case IrOpcode::kLoad:
- case IrOpcode::kLoadElement:
case IrOpcode::kLoadField:
return 1;
#define OPCODE_CASE(x) case IrOpcode::k##x:
Index: src/compiler/simplified-lowering.cc
diff --git a/src/compiler/simplified-lowering.cc
b/src/compiler/simplified-lowering.cc
index
1a4ca96b072f6a1881ed2ba458fbe847ee19f1e6..edb5a2c91de49e8957f89ded458b0758036bdf45
100644
--- a/src/compiler/simplified-lowering.cc
+++ b/src/compiler/simplified-lowering.cc
@@ -1079,23 +1079,23 @@ void SimplifiedLowering::DoLoadElement(Node* node,
MachineType output_type) {
const ElementAccess& access = ElementAccessOf(node->op());
const Operator* op = machine()->Load(access.machine_type);
Node* key = node->InputAt(1);
+ Node* effect = node->InputAt(3);
Node* index = ComputeIndex(access, key);
if (access.bounds_check == kNoBoundsCheck) {
DCHECK_EQ(access.machine_type, output_type);
node->set_op(op);
node->ReplaceInput(1, index);
- node->RemoveInput(2);
+ node->ReplaceInput(2, effect);
+ node->ReplaceInput(3, graph()->start());
} else {
DCHECK_EQ(kTypedArrayBoundsCheck, access.bounds_check);
Node* base = node->InputAt(0);
Node* length = node->InputAt(2);
- Node* effect = node->InputAt(3);
- Node* control = node->InputAt(4);
Node* check = graph()->NewNode(machine()->Uint32LessThan(), key,
length);
- Node* branch =
- graph()->NewNode(common()->Branch(BranchHint::kTrue), check,
control);
+ Node* branch = graph()->NewNode(common()->Branch(BranchHint::kTrue),
check,
+ graph()->start());
Node* if_true = graph()->NewNode(common()->IfTrue(), branch);
Node* load = graph()->NewNode(op, base, index, effect, if_true);
Index: test/unittests/compiler/js-typed-lowering-unittest.cc
diff --git a/test/unittests/compiler/js-typed-lowering-unittest.cc
b/test/unittests/compiler/js-typed-lowering-unittest.cc
index
c285648ca6791580f1f0f10334e9c40357cfdf4b..af32d9458713301259b8eb73fc551e85f638f1bb
100644
--- a/test/unittests/compiler/js-typed-lowering-unittest.cc
+++ b/test/unittests/compiler/js-typed-lowering-unittest.cc
@@ -143,7 +143,7 @@ TEST_F(JSTypedLoweringTest,
JSLoadPropertyFromExternalTypedArray) {
IsLoadElement(AccessBuilder::ForTypedArrayElement(type, true),
IsIntPtrConstant(bit_cast<intptr_t>(&backing_store[0])),
key, IsNumberConstant(static_cast<double>(kLength)),
- effect, control));
+ effect));
}
}
Index: test/unittests/compiler/node-test-utils.cc
diff --git a/test/unittests/compiler/node-test-utils.cc
b/test/unittests/compiler/node-test-utils.cc
index
46ca540287e4efbd93fe0f527de703a95f191b08..6f00c37961132aee30f7f7af1ef5dcced64d6dda
100644
--- a/test/unittests/compiler/node-test-utils.cc
+++ b/test/unittests/compiler/node-test-utils.cc
@@ -403,15 +403,13 @@ class IsLoadElementMatcher FINAL : public NodeMatcher
{
const Matcher<Node*>& base_matcher,
const Matcher<Node*>& index_matcher,
const Matcher<Node*>& length_matcher,
- const Matcher<Node*>& effect_matcher,
- const Matcher<Node*>& control_matcher)
+ const Matcher<Node*>& effect_matcher)
: NodeMatcher(IrOpcode::kLoadElement),
access_matcher_(access_matcher),
base_matcher_(base_matcher),
index_matcher_(index_matcher),
length_matcher_(length_matcher),
- effect_matcher_(effect_matcher),
- control_matcher_(control_matcher) {}
+ effect_matcher_(effect_matcher) {}
virtual void DescribeTo(std::ostream* os) const OVERRIDE {
NodeMatcher::DescribeTo(os);
@@ -423,10 +421,8 @@ class IsLoadElementMatcher FINAL : public NodeMatcher {
index_matcher_.DescribeTo(os);
*os << "), length (";
length_matcher_.DescribeTo(os);
- *os << "), effect (";
+ *os << ") and effect (";
effect_matcher_.DescribeTo(os);
- *os << ") and control (";
- control_matcher_.DescribeTo(os);
*os << ")";
}
@@ -442,9 +438,7 @@ class IsLoadElementMatcher FINAL : public NodeMatcher {
PrintMatchAndExplain(NodeProperties::GetValueInput(node, 2),
"length", length_matcher_, listener) &&
PrintMatchAndExplain(NodeProperties::GetEffectInput(node), "effect",
- effect_matcher_, listener) &&
- PrintMatchAndExplain(NodeProperties::GetControlInput(node),
- "control", control_matcher_, listener));
+ effect_matcher_, listener));
}
private:
@@ -453,7 +447,6 @@ class IsLoadElementMatcher FINAL : public NodeMatcher {
const Matcher<Node*> index_matcher_;
const Matcher<Node*> length_matcher_;
const Matcher<Node*> effect_matcher_;
- const Matcher<Node*> control_matcher_;
};
@@ -813,11 +806,10 @@ Matcher<Node*> IsLoadElement(const
Matcher<ElementAccess>& access_matcher,
const Matcher<Node*>& base_matcher,
const Matcher<Node*>& index_matcher,
const Matcher<Node*>& length_matcher,
- const Matcher<Node*>& effect_matcher,
- const Matcher<Node*>& control_matcher) {
+ const Matcher<Node*>& effect_matcher) {
return MakeMatcher(new IsLoadElementMatcher(access_matcher, base_matcher,
index_matcher,
length_matcher,
- effect_matcher,
control_matcher));
+ effect_matcher));
}
Index: test/unittests/compiler/node-test-utils.h
diff --git a/test/unittests/compiler/node-test-utils.h
b/test/unittests/compiler/node-test-utils.h
index
5ce8c52055e020639ad9306f7c3b49b2d97f9b9a..f277a10dc9ac7c3fbca9e8c9e7bfd6a1dd51245f
100644
--- a/test/unittests/compiler/node-test-utils.h
+++ b/test/unittests/compiler/node-test-utils.h
@@ -77,8 +77,7 @@ Matcher<Node*> IsLoadElement(const
Matcher<ElementAccess>& access_matcher,
const Matcher<Node*>& base_matcher,
const Matcher<Node*>& index_matcher,
const Matcher<Node*>& length_matcher,
- const Matcher<Node*>& effect_matcher,
- const Matcher<Node*>& control_matcher);
+ const Matcher<Node*>& effect_matcher);
Matcher<Node*> IsStoreElement(const Matcher<ElementAccess>& access_matcher,
const Matcher<Node*>& base_matcher,
const Matcher<Node*>& index_matcher,
Index: test/unittests/compiler/simplified-operator-reducer-unittest.cc
diff --git
a/test/unittests/compiler/simplified-operator-reducer-unittest.cc
b/test/unittests/compiler/simplified-operator-reducer-unittest.cc
index
2b4097b3084bbd45169ac027ad17fb89c45b4195..465ee84b4f037691669fb17d25260e305f96275b
100644
--- a/test/unittests/compiler/simplified-operator-reducer-unittest.cc
+++ b/test/unittests/compiler/simplified-operator-reducer-unittest.cc
@@ -490,46 +490,45 @@ TEST_F(SimplifiedOperatorReducerTest,
LoadElementWithConstantKeyAndLength) {
access_nocheck.bounds_check = kNoBoundsCheck;
Node* const base = Parameter(0);
Node* const effect = graph()->start();
- Node* const control = graph()->start();
{
Node* const key = NumberConstant(-42.0);
Node* const length = NumberConstant(100.0);
Reduction r =
Reduce(graph()->NewNode(simplified()->LoadElement(access),
- base, key, length, effect,
control));
+ base, key, length, effect));
ASSERT_FALSE(r.Changed());
}
{
Node* const key = NumberConstant(-0.0);
Node* const length = NumberConstant(1.0);
Reduction r =
Reduce(graph()->NewNode(simplified()->LoadElement(access),
- base, key, length, effect,
control));
+ base, key, length, effect));
ASSERT_TRUE(r.Changed());
- EXPECT_THAT(r.replacement(), IsLoadElement(access_nocheck, base, key,
- length, effect, control));
+ EXPECT_THAT(r.replacement(),
+ IsLoadElement(access_nocheck, base, key, length, effect));
}
{
Node* const key = NumberConstant(0);
Node* const length = NumberConstant(1);
Reduction r =
Reduce(graph()->NewNode(simplified()->LoadElement(access),
- base, key, length, effect,
control));
+ base, key, length, effect));
ASSERT_TRUE(r.Changed());
- EXPECT_THAT(r.replacement(), IsLoadElement(access_nocheck, base, key,
- length, effect, control));
+ EXPECT_THAT(r.replacement(),
+ IsLoadElement(access_nocheck, base, key, length, effect));
}
{
Node* const key = NumberConstant(42.2);
Node* const length = NumberConstant(128);
Reduction r =
Reduce(graph()->NewNode(simplified()->LoadElement(access),
- base, key, length, effect,
control));
+ base, key, length, effect));
ASSERT_TRUE(r.Changed());
- EXPECT_THAT(r.replacement(), IsLoadElement(access_nocheck, base, key,
- length, effect, control));
+ EXPECT_THAT(r.replacement(),
+ IsLoadElement(access_nocheck, base, key, length, effect));
}
{
Node* const key = NumberConstant(39.2);
Node* const length = NumberConstant(32.0);
Reduction r =
Reduce(graph()->NewNode(simplified()->LoadElement(access),
- base, key, length, effect,
control));
+ base, key, length, effect));
ASSERT_FALSE(r.Changed());
}
}
Index: test/unittests/compiler/simplified-operator-unittest.cc
diff --git a/test/unittests/compiler/simplified-operator-unittest.cc
b/test/unittests/compiler/simplified-operator-unittest.cc
index
8c5a91815d3f33899c0bfa749637eeb979ef6576..dcabc1ac74cbd214603058469a539ca89cf60c3b
100644
--- a/test/unittests/compiler/simplified-operator-unittest.cc
+++ b/test/unittests/compiler/simplified-operator-unittest.cc
@@ -177,8 +177,8 @@ TEST_P(SimplifiedElementAccessOperatorTest,
LoadElement) {
EXPECT_EQ(3, OperatorProperties::GetValueInputCount(op));
EXPECT_EQ(1, OperatorProperties::GetEffectInputCount(op));
- EXPECT_EQ(1, OperatorProperties::GetControlInputCount(op));
- EXPECT_EQ(5, OperatorProperties::GetTotalInputCount(op));
+ EXPECT_EQ(0, OperatorProperties::GetControlInputCount(op));
+ EXPECT_EQ(4, OperatorProperties::GetTotalInputCount(op));
EXPECT_EQ(1, OperatorProperties::GetValueOutputCount(op));
EXPECT_EQ(1, OperatorProperties::GetEffectOutputCount(op));
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.