Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3692)

Unified Diff: test/compiler-unittests/change-lowering-unittest.cc

Issue 481903002: [turbofan] Support lowering of ChangeFloat64ToTagged/ChangeTaggedToInt32. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/compiler-unittests/change-lowering-unittest.cc
diff --git a/test/compiler-unittests/change-lowering-unittest.cc b/test/compiler-unittests/change-lowering-unittest.cc
index 329acfff1ef57dd83852ea854aef9afe590c0626..b10ca5ff87368ab114268463c0861099d8e4e12f 100644
--- a/test/compiler-unittests/change-lowering-unittest.cc
+++ b/test/compiler-unittests/change-lowering-unittest.cc
@@ -85,6 +85,27 @@ TARGET_TYPED_TEST(ChangeLoweringTest, ChangeBitToBool) {
}
+TARGET_TYPED_TEST(ChangeLoweringTest, ChangeFloat64ToTagged) {
+ Node* val = this->Parameter(0);
+ Node* node =
+ this->graph()->NewNode(this->simplified()->ChangeFloat64ToTagged(), val);
+ Reduction reduction = this->Reduce(node);
+ ASSERT_TRUE(reduction.Changed());
+
+ Node* finish = reduction.replacement();
+ Capture<Node*> heap_number;
+ const int32_t kValueOffset = this->kHeapNumberValueOffset - kHeapObjectTag;
+ EXPECT_THAT(
+ finish,
+ IsFinish(AllOf(CaptureEq(&heap_number),
+ this->IsAllocateHeapNumber(IsValueEffect(val),
+ this->graph()->start())),
+ IsStore(kMachFloat64, kNoWriteBarrier, CaptureEq(&heap_number),
+ IsInt32Constant(kValueOffset), val,
+ CaptureEq(&heap_number), this->graph()->start())));
+}
+
+
TARGET_TYPED_TEST(ChangeLoweringTest, StringAdd) {
Node* node = this->graph()->NewNode(this->simplified()->StringAdd(),
this->Parameter(0), this->Parameter(1));
@@ -121,29 +142,19 @@ TARGET_TEST_F(ChangeLowering32Test, ChangeInt32ToTagged) {
const int32_t kValueOffset = kHeapNumberValueOffset - kHeapObjectTag;
EXPECT_THAT(
phi,
- IsPhi(
- IsFinish(
- AllOf(
- CaptureEq(&heap_number),
- IsCall(
- _, IsHeapConstant(
- PrintableUnique<HeapObject>::CreateImmovable(
- zone(), CEntryStub(isolate(), 1).GetCode())),
- IsExternalConstant(ExternalReference(
- Runtime::FunctionForId(Runtime::kAllocateHeapNumber),
- isolate())),
- IsInt32Constant(0), IsNumberConstant(0.0),
- graph()->start(), CaptureEq(&if_true))),
- IsStore(kMachFloat64, kNoWriteBarrier, CaptureEq(&heap_number),
- IsInt32Constant(kValueOffset),
- IsChangeInt32ToFloat64(val), CaptureEq(&heap_number),
- CaptureEq(&if_true))),
- IsProjection(
- 0, AllOf(CaptureEq(&add), IsInt32AddWithOverflow(val, val))),
- IsMerge(AllOf(CaptureEq(&if_true), IsIfTrue(CaptureEq(&branch))),
- IsIfFalse(AllOf(CaptureEq(&branch),
- IsBranch(IsProjection(1, CaptureEq(&add)),
- graph()->start()))))));
+ IsPhi(IsFinish(
+ AllOf(CaptureEq(&heap_number),
+ IsAllocateHeapNumber(_, CaptureEq(&if_true))),
+ IsStore(kMachFloat64, kNoWriteBarrier, CaptureEq(&heap_number),
+ IsInt32Constant(kValueOffset),
+ IsChangeInt32ToFloat64(val), CaptureEq(&heap_number),
+ CaptureEq(&if_true))),
+ IsProjection(
+ 0, AllOf(CaptureEq(&add), IsInt32AddWithOverflow(val, val))),
+ IsMerge(AllOf(CaptureEq(&if_true), IsIfTrue(CaptureEq(&branch))),
+ IsIfFalse(AllOf(CaptureEq(&branch),
+ IsBranch(IsProjection(1, CaptureEq(&add)),
+ graph()->start()))))));
}
@@ -178,6 +189,34 @@ TARGET_TEST_F(ChangeLowering32Test, ChangeTaggedToFloat64) {
}
+TARGET_TEST_F(ChangeLowering32Test, ChangeTaggedToInt32) {
+ STATIC_ASSERT(kSmiTag == 0);
+ STATIC_ASSERT(kSmiTagSize == 1);
+
+ Node* val = Parameter(0);
+ Node* node = graph()->NewNode(simplified()->ChangeTaggedToInt32(), val);
+ Reduction reduction = Reduce(node);
+ ASSERT_TRUE(reduction.Changed());
+
+ const int32_t kShiftAmount =
+ kSmiTagSize + SmiTagging<kPointerSize>::kSmiShiftSize;
+ const int32_t kValueOffset = kHeapNumberValueOffset - kHeapObjectTag;
+ Node* phi = reduction.replacement();
+ Capture<Node*> branch, if_true;
+ EXPECT_THAT(
+ phi,
+ IsPhi(IsChangeFloat64ToInt32(
+ IsLoad(kMachFloat64, val, IsInt32Constant(kValueOffset),
+ IsControlEffect(CaptureEq(&if_true)))),
+ IsWord32Sar(val, IsInt32Constant(kShiftAmount)),
+ IsMerge(AllOf(CaptureEq(&if_true), IsIfTrue(CaptureEq(&branch))),
+ IsIfFalse(AllOf(
+ CaptureEq(&branch),
+ IsBranch(IsWord32And(val, IsInt32Constant(kSmiTagMask)),
+ graph()->start()))))));
+}
+
+
class ChangeLowering64Test : public ChangeLoweringTest<int64_t> {
public:
virtual ~ChangeLowering64Test() {}
@@ -238,6 +277,35 @@ TARGET_TEST_F(ChangeLowering64Test, ChangeTaggedToFloat64) {
IsIfFalse(CaptureEq(&branch)))));
}
+
+TARGET_TEST_F(ChangeLowering64Test, ChangeTaggedToInt32) {
+ STATIC_ASSERT(kSmiTag == 0);
+ STATIC_ASSERT(kSmiTagSize == 1);
+
+ Node* val = Parameter(0);
+ Node* node = graph()->NewNode(simplified()->ChangeTaggedToInt32(), val);
+ Reduction reduction = Reduce(node);
+ ASSERT_TRUE(reduction.Changed());
+
+ const int32_t kShiftAmount =
+ kSmiTagSize + SmiTagging<kPointerSize>::kSmiShiftSize;
+ const int32_t kValueOffset = kHeapNumberValueOffset - kHeapObjectTag;
+ Node* phi = reduction.replacement();
+ Capture<Node*> branch, if_true;
+ EXPECT_THAT(
+ phi,
+ IsPhi(IsChangeFloat64ToInt32(
+ IsLoad(kMachFloat64, val, IsInt32Constant(kValueOffset),
+ IsControlEffect(CaptureEq(&if_true)))),
+ IsConvertInt64ToInt32(
+ IsWord64Sar(val, IsInt32Constant(kShiftAmount))),
+ IsMerge(AllOf(CaptureEq(&if_true), IsIfTrue(CaptureEq(&branch))),
+ IsIfFalse(AllOf(
+ CaptureEq(&branch),
+ IsBranch(IsWord64And(val, IsInt32Constant(kSmiTagMask)),
+ graph()->start()))))));
+}
+
} // namespace compiler
} // namespace internal
} // namespace v8

Powered by Google App Engine
This is Rietveld 408576698