Chromium Code Reviews

Unified Diff: test/cctest/compiler/test-machine-operator-reducer.cc

Issue 2211633003: [turbofan] Basic reductions of 64-bit machine operators. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Forgot the tests for Word64 shifts. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
« no previous file with comments | « src/compiler/machine-operator-reducer.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/compiler/test-machine-operator-reducer.cc
diff --git a/test/cctest/compiler/test-machine-operator-reducer.cc b/test/cctest/compiler/test-machine-operator-reducer.cc
index 799a80453770707a45bc958616e4778bdbb25fb3..633b8c6a8eee61318dc6d8eefd10165793f29351 100644
--- a/test/cctest/compiler/test-machine-operator-reducer.cc
+++ b/test/cctest/compiler/test-machine-operator-reducer.cc
@@ -26,6 +26,12 @@ const Operator* NewConstantOperator<int32_t>(CommonOperatorBuilder* common,
}
template <>
+const Operator* NewConstantOperator<int64_t>(CommonOperatorBuilder* common,
+ volatile int64_t value) {
+ return common->Int64Constant(value);
+}
+
+template <>
const Operator* NewConstantOperator<double>(CommonOperatorBuilder* common,
volatile double value) {
return common->Float64Constant(value);
@@ -42,6 +48,12 @@ int32_t ValueOfOperator<int32_t>(const Operator* op) {
}
template <>
+int64_t ValueOfOperator<int64_t>(const Operator* op) {
+ CHECK_EQ(IrOpcode::kInt64Constant, op->opcode());
+ return OpParameter<int64_t>(op);
+}
+
+template <>
double ValueOfOperator<double>(const Operator* op) {
CHECK_EQ(IrOpcode::kFloat64Constant, op->opcode());
return OpParameter<double>(op);
@@ -315,6 +327,24 @@ TEST(ReduceWord32Shl) {
R.CheckBinop(x, x, zero); // x << 0 => x
}
+TEST(ReduceWord64Shl) {
+ ReducerTester R;
+ R.binop = R.machine.Word64Shl();
+
+ FOR_INT64_INPUTS(i) {
+ for (int64_t y = 0; y < 64; y++) {
+ int64_t x = *i;
+ R.CheckFoldBinop<int64_t>(x << y, x, y);
+ }
+ }
+
+ R.CheckDontPutConstantOnRight(44);
+
+ Node* x = R.Parameter();
+ Node* zero = R.Constant<int64_t>(0);
+
+ R.CheckBinop(x, x, zero); // x << 0 => x
+}
TEST(ReduceWord32Shr) {
ReducerTester R;
@@ -336,6 +366,24 @@ TEST(ReduceWord32Shr) {
R.CheckBinop(x, x, zero); // x >>> 0 => x
}
+TEST(ReduceWord64Shr) {
+ ReducerTester R;
+ R.binop = R.machine.Word64Shr();
+
+ FOR_UINT64_INPUTS(i) {
+ for (uint64_t y = 0; y < 64; y++) {
+ uint64_t x = *i;
+ R.CheckFoldBinop<int64_t>(x >> y, x, y);
+ }
+ }
+
+ R.CheckDontPutConstantOnRight(44);
+
+ Node* x = R.Parameter();
+ Node* zero = R.Constant<int64_t>(0);
+
+ R.CheckBinop(x, x, zero); // x >>> 0 => x
+}
TEST(ReduceWord32Sar) {
ReducerTester R;
@@ -357,6 +405,24 @@ TEST(ReduceWord32Sar) {
R.CheckBinop(x, x, zero); // x >> 0 => x
}
+TEST(ReduceWord64Sar) {
+ ReducerTester R;
+ R.binop = R.machine.Word64Sar();
+
+ FOR_INT64_INPUTS(i) {
+ for (int64_t y = 0; y < 64; y++) {
+ int64_t x = *i;
+ R.CheckFoldBinop<int64_t>(x >> y, x, y);
+ }
+ }
+
+ R.CheckDontPutConstantOnRight(44);
+
+ Node* x = R.Parameter();
+ Node* zero = R.Constant<int64_t>(0);
+
+ R.CheckBinop(x, x, zero); // x >> 0 => x
+}
static void CheckJsShift(ReducerTester* R) {
CHECK(R->machine.Word32ShiftIsSafe());
@@ -433,6 +499,24 @@ TEST(ReduceInt32Add) {
R.CheckBinop(x, zero, x); // 0 + x => x
}
+TEST(ReduceInt64Add) {
+ ReducerTester R;
+ R.binop = R.machine.Int64Add();
+
+ FOR_INT64_INPUTS(pl) {
+ FOR_INT64_INPUTS(pr) {
+ int64_t x = *pl, y = *pr;
+ R.CheckFoldBinop<int64_t>(x + y, x, y);
+ }
+ }
+
+ R.CheckPutConstantOnRight(41);
+
+ Node* x = R.Parameter();
+ Node* zero = R.Constant<int64_t>(0);
+ R.CheckBinop(x, x, zero); // x + 0 => x
+ R.CheckBinop(x, zero, x); // 0 + x => x
+}
TEST(ReduceInt32Sub) {
ReducerTester R;
@@ -453,6 +537,30 @@ TEST(ReduceInt32Sub) {
R.CheckBinop(x, x, zero); // x - 0 => x
}
+TEST(ReduceInt64Sub) {
+ ReducerTester R;
+ R.binop = R.machine.Int64Sub();
+
+ FOR_INT64_INPUTS(pl) {
+ FOR_INT64_INPUTS(pr) {
+ int64_t x = *pl, y = *pr;
+ R.CheckFoldBinop<int64_t>(x - y, x, y);
+ }
+ }
+
+ R.CheckDontPutConstantOnRight(42);
+
+ Node* x = R.Parameter();
+ Node* zero = R.Constant<int64_t>(0);
+
+ R.CheckBinop(x, x, zero); // x - 0 => x
+ R.CheckFoldBinop<int64_t>(0, x, x); // x - x => 0
+
+ Node* k = R.Constant<int64_t>(6);
+
+ R.CheckFoldBinop<int64_t>(x, R.machine.Int64Add(), -6, x,
+ k); // x - K => x + -K
+}
TEST(ReduceInt32Mul) {
ReducerTester R;
@@ -717,13 +825,8 @@ TEST(ReduceLoadStore) {
// TODO(titzer): test MachineOperatorReducer for Word64And
// TODO(titzer): test MachineOperatorReducer for Word64Or
// TODO(titzer): test MachineOperatorReducer for Word64Xor
-// TODO(titzer): test MachineOperatorReducer for Word64Shl
-// TODO(titzer): test MachineOperatorReducer for Word64Shr
-// TODO(titzer): test MachineOperatorReducer for Word64Sar
// TODO(titzer): test MachineOperatorReducer for Word64Equal
// TODO(titzer): test MachineOperatorReducer for Word64Not
-// TODO(titzer): test MachineOperatorReducer for Int64Add
-// TODO(titzer): test MachineOperatorReducer for Int64Sub
// TODO(titzer): test MachineOperatorReducer for Int64Mul
// TODO(titzer): test MachineOperatorReducer for Int64UMul
// TODO(titzer): test MachineOperatorReducer for Int64Div
« no previous file with comments | « src/compiler/machine-operator-reducer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine