[turbofan] Use reference equal to zero instead of a smi check.
authorbmeurer <bmeurer@chromium.org>
Wed, 3 Jun 2015 05:10:44 +0000 (22:10 -0700)
committerCommit bot <commit-bot@chromium.org>
Wed, 3 Jun 2015 05:10:55 +0000 (05:10 +0000)
In typed lowering we can use the ReferenceEqual simplified operator
instead of ObjectIsSmi to check for context extensions. This generates
the desired code.

R=mstarzinger@chromium.org

Review URL: https://codereview.chromium.org/1163963003

Cr-Commit-Position: refs/heads/master@{#28776}

src/compiler/js-typed-lowering.cc
test/unittests/compiler/js-typed-lowering-unittest.cc

index fb59ce06192cf33d5d8ca69c668defd2824cd333..0f6f38cb0f38f120163956faf008373631c0b6d1 100644 (file)
@@ -942,7 +942,8 @@ Reduction JSTypedLowering::ReduceJSLoadDynamicGlobal(Node* node) {
     Node* load = graph()->NewNode(
         javascript()->LoadContext(depth, Context::EXTENSION_INDEX, false),
         context, context, effect);
-    Node* check = graph()->NewNode(simplified()->ObjectIsSmi(), load);
+    Node* check = graph()->NewNode(simplified()->ReferenceEqual(Type::Tagged()),
+                                   load, jsgraph()->ZeroConstant());
     Node* branch = graph()->NewNode(common()->Branch(BranchHint::kTrue), check,
                                     check_true);
     Node* if_true = graph()->NewNode(common()->IfTrue(), branch);
index 2cc48e797dbbc2ea4ce7ec1089ef3f69e9488733..db62a119f2be4b699b42a12a852797c892a12972 100644 (file)
@@ -918,12 +918,16 @@ TEST_F(JSTypedLoweringTest, JSLoadDynamicGlobal) {
     EXPECT_THAT(
         r.replacement(),
         IsPhi(kMachAnyTagged, _, _,
-              IsMerge(IsIfTrue(IsBranch(
-                          IsObjectIsSmi(IsLoadContext(
+              IsMerge(
+                  IsIfTrue(IsBranch(
+                      IsReferenceEqual(
+                          Type::Tagged(),
+                          IsLoadContext(
                               ContextAccess(i, Context::EXTENSION_INDEX, false),
-                              context)),
-                          control)),
-                      _)));
+                              context),
+                          IsNumberConstant(BitEq(0.0))),
+                      control)),
+                  _)));
   }
 }