OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/compilation-dependencies.h" | 5 #include "src/compilation-dependencies.h" |
6 #include "src/compiler/js-graph.h" | 6 #include "src/compiler/js-graph.h" |
7 #include "src/compiler/js-typed-lowering.h" | 7 #include "src/compiler/js-typed-lowering.h" |
8 #include "src/compiler/machine-operator.h" | 8 #include "src/compiler/machine-operator.h" |
9 #include "src/compiler/node-properties.h" | 9 #include "src/compiler/node-properties.h" |
10 #include "src/compiler/opcodes.h" | 10 #include "src/compiler/opcodes.h" |
(...skipping 1026 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1037 // Effects should be ordered start -> i0 -> effect_use | 1037 // Effects should be ordered start -> i0 -> effect_use |
1038 B.CheckEffectOrdering(i1); | 1038 B.CheckEffectOrdering(i1); |
1039 } | 1039 } |
1040 } | 1040 } |
1041 | 1041 |
1042 | 1042 |
1043 TEST(Int32BinopEffects) { | 1043 TEST(Int32BinopEffects) { |
1044 JSBitwiseTypedLoweringTester R; | 1044 JSBitwiseTypedLoweringTester R; |
1045 for (int j = 0; j < R.kNumberOps; j += 2) { | 1045 for (int j = 0; j < R.kNumberOps; j += 2) { |
1046 bool signed_left = R.signedness[j], signed_right = R.signedness[j + 1]; | 1046 bool signed_left = R.signedness[j], signed_right = R.signedness[j + 1]; |
1047 BinopEffectsTester B(R.ops[j], I32Type(signed_left), I32Type(signed_right)); | 1047 BinopEffectsTester B(R.ops[j], I32Type(signed_left), I32Type(signed_right), |
| 1048 JSTypedLowering::kNoFlags); |
1048 CHECK_EQ(R.ops[j + 1]->opcode(), B.result->op()->opcode()); | 1049 CHECK_EQ(R.ops[j + 1]->opcode(), B.result->op()->opcode()); |
1049 | 1050 |
1050 B.R.CheckBinop(B.result->opcode(), B.result); | 1051 B.R.CheckBinop(B.result->opcode(), B.result); |
1051 | 1052 |
1052 B.CheckNoOp(0); | 1053 B.CheckNoOp(0); |
1053 B.CheckNoOp(1); | 1054 B.CheckNoOp(1); |
1054 | 1055 |
1055 B.CheckEffectsRemoved(); | 1056 B.CheckEffectsRemoved(); |
1056 } | 1057 } |
1057 | 1058 |
1058 for (int j = 0; j < R.kNumberOps; j += 2) { | 1059 for (int j = 0; j < R.kNumberOps; j += 2) { |
1059 bool signed_left = R.signedness[j], signed_right = R.signedness[j + 1]; | 1060 bool signed_left = R.signedness[j], signed_right = R.signedness[j + 1]; |
1060 BinopEffectsTester B(R.ops[j], Type::Number(), Type::Number()); | 1061 BinopEffectsTester B(R.ops[j], Type::Number(), Type::Number(), |
| 1062 JSTypedLowering::kNoFlags); |
1061 CHECK_EQ(R.ops[j + 1]->opcode(), B.result->op()->opcode()); | 1063 CHECK_EQ(R.ops[j + 1]->opcode(), B.result->op()->opcode()); |
1062 | 1064 |
1063 B.R.CheckBinop(B.result->opcode(), B.result); | 1065 B.R.CheckBinop(B.result->opcode(), B.result); |
1064 | 1066 |
1065 B.CheckConvertedInput(NumberToI32(signed_left), 0, false); | 1067 B.CheckConvertedInput(NumberToI32(signed_left), 0, false); |
1066 B.CheckConvertedInput(NumberToI32(signed_right), 1, false); | 1068 B.CheckConvertedInput(NumberToI32(signed_right), 1, false); |
1067 | 1069 |
1068 B.CheckEffectsRemoved(); | 1070 B.CheckEffectsRemoved(); |
1069 } | 1071 } |
1070 | 1072 |
1071 for (int j = 0; j < R.kNumberOps; j += 2) { | 1073 for (int j = 0; j < R.kNumberOps; j += 2) { |
1072 bool signed_left = R.signedness[j], signed_right = R.signedness[j + 1]; | 1074 bool signed_left = R.signedness[j], signed_right = R.signedness[j + 1]; |
1073 BinopEffectsTester B(R.ops[j], Type::Number(), Type::Primitive()); | 1075 BinopEffectsTester B(R.ops[j], Type::Number(), Type::Primitive(), |
| 1076 JSTypedLowering::kNoFlags); |
1074 | 1077 |
1075 B.R.CheckBinop(B.result->opcode(), B.result); | 1078 B.R.CheckBinop(B.result->opcode(), B.result); |
1076 | 1079 |
1077 Node* i0 = B.CheckConvertedInput(NumberToI32(signed_left), 0, false); | 1080 Node* i0 = B.CheckConvertedInput(NumberToI32(signed_left), 0, false); |
1078 Node* i1 = B.CheckConvertedInput(NumberToI32(signed_right), 1, false); | 1081 Node* i1 = B.CheckConvertedInput(NumberToI32(signed_right), 1, false); |
1079 | 1082 |
1080 CHECK_EQ(B.p0, i0->InputAt(0)); | 1083 CHECK_EQ(B.p0, i0->InputAt(0)); |
1081 Node* ii1 = B.CheckConverted(IrOpcode::kJSToNumber, i1->InputAt(0), true); | 1084 Node* ii1 = B.CheckConverted(IrOpcode::kJSToNumber, i1->InputAt(0), true); |
1082 | 1085 |
1083 CHECK_EQ(B.p1, ii1->InputAt(0)); | 1086 CHECK_EQ(B.p1, ii1->InputAt(0)); |
1084 | 1087 |
1085 B.CheckEffectOrdering(ii1); | 1088 B.CheckEffectOrdering(ii1); |
1086 } | 1089 } |
1087 | 1090 |
1088 for (int j = 0; j < R.kNumberOps; j += 2) { | 1091 for (int j = 0; j < R.kNumberOps; j += 2) { |
1089 bool signed_left = R.signedness[j], signed_right = R.signedness[j + 1]; | 1092 bool signed_left = R.signedness[j], signed_right = R.signedness[j + 1]; |
1090 BinopEffectsTester B(R.ops[j], Type::Primitive(), Type::Number()); | 1093 BinopEffectsTester B(R.ops[j], Type::Primitive(), Type::Number(), |
| 1094 JSTypedLowering::kNoFlags); |
1091 | 1095 |
1092 B.R.CheckBinop(B.result->opcode(), B.result); | 1096 B.R.CheckBinop(B.result->opcode(), B.result); |
1093 | 1097 |
1094 Node* i0 = B.CheckConvertedInput(NumberToI32(signed_left), 0, false); | 1098 Node* i0 = B.CheckConvertedInput(NumberToI32(signed_left), 0, false); |
1095 Node* i1 = B.CheckConvertedInput(NumberToI32(signed_right), 1, false); | 1099 Node* i1 = B.CheckConvertedInput(NumberToI32(signed_right), 1, false); |
1096 | 1100 |
1097 Node* ii0 = B.CheckConverted(IrOpcode::kJSToNumber, i0->InputAt(0), true); | 1101 Node* ii0 = B.CheckConverted(IrOpcode::kJSToNumber, i0->InputAt(0), true); |
1098 CHECK_EQ(B.p1, i1->InputAt(0)); | 1102 CHECK_EQ(B.p1, i1->InputAt(0)); |
1099 | 1103 |
1100 CHECK_EQ(B.p0, ii0->InputAt(0)); | 1104 CHECK_EQ(B.p0, ii0->InputAt(0)); |
1101 | 1105 |
1102 B.CheckEffectOrdering(ii0); | 1106 B.CheckEffectOrdering(ii0); |
1103 } | 1107 } |
1104 | 1108 |
1105 for (int j = 0; j < R.kNumberOps; j += 2) { | 1109 for (int j = 0; j < R.kNumberOps; j += 2) { |
1106 bool signed_left = R.signedness[j], signed_right = R.signedness[j + 1]; | 1110 bool signed_left = R.signedness[j], signed_right = R.signedness[j + 1]; |
1107 BinopEffectsTester B(R.ops[j], Type::Primitive(), Type::Primitive()); | 1111 BinopEffectsTester B(R.ops[j], Type::Primitive(), Type::Primitive(), |
| 1112 JSTypedLowering::kNoFlags); |
1108 | 1113 |
1109 B.R.CheckBinop(B.result->opcode(), B.result); | 1114 B.R.CheckBinop(B.result->opcode(), B.result); |
1110 | 1115 |
1111 Node* i0 = B.CheckConvertedInput(NumberToI32(signed_left), 0, false); | 1116 Node* i0 = B.CheckConvertedInput(NumberToI32(signed_left), 0, false); |
1112 Node* i1 = B.CheckConvertedInput(NumberToI32(signed_right), 1, false); | 1117 Node* i1 = B.CheckConvertedInput(NumberToI32(signed_right), 1, false); |
1113 | 1118 |
1114 Node* ii0 = B.CheckConverted(IrOpcode::kJSToNumber, i0->InputAt(0), true); | 1119 Node* ii0 = B.CheckConverted(IrOpcode::kJSToNumber, i0->InputAt(0), true); |
1115 Node* ii1 = B.CheckConverted(IrOpcode::kJSToNumber, i1->InputAt(0), true); | 1120 Node* ii1 = B.CheckConverted(IrOpcode::kJSToNumber, i1->InputAt(0), true); |
1116 | 1121 |
1117 CHECK_EQ(B.p0, ii0->InputAt(0)); | 1122 CHECK_EQ(B.p0, ii0->InputAt(0)); |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1231 CHECK_EQ(p1, r->InputAt(1)); | 1236 CHECK_EQ(p1, r->InputAt(1)); |
1232 } | 1237 } |
1233 } | 1238 } |
1234 } | 1239 } |
1235 } | 1240 } |
1236 } | 1241 } |
1237 | 1242 |
1238 } // namespace compiler | 1243 } // namespace compiler |
1239 } // namespace internal | 1244 } // namespace internal |
1240 } // namespace v8 | 1245 } // namespace v8 |
OLD | NEW |