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

Side by Side Diff: test/cctest/compiler/test-js-typed-lowering.cc

Issue 2228983002: [turbofan] Simplify BinaryOperationHints and CompareOperationHints. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix compile for realz Created 4 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 unified diff | Download patch
« no previous file with comments | « src/ic/ic-state.h ('k') | test/unittests/compiler/js-typed-lowering-unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 const Operator* unop; 44 const Operator* unop;
45 JSOperatorBuilder javascript; 45 JSOperatorBuilder javascript;
46 MachineOperatorBuilder machine; 46 MachineOperatorBuilder machine;
47 SimplifiedOperatorBuilder simplified; 47 SimplifiedOperatorBuilder simplified;
48 CommonOperatorBuilder common; 48 CommonOperatorBuilder common;
49 CompilationDependencies deps; 49 CompilationDependencies deps;
50 Graph graph; 50 Graph graph;
51 Typer typer; 51 Typer typer;
52 Node* context_node; 52 Node* context_node;
53 JSTypedLowering::Flags flags; 53 JSTypedLowering::Flags flags;
54 BinaryOperationHints const binop_hints = BinaryOperationHints::Any(); 54 BinaryOperationHint const binop_hints = BinaryOperationHint::kAny;
55 CompareOperationHints const compare_hints = CompareOperationHints::Any(); 55 CompareOperationHint const compare_hints = CompareOperationHint::kAny;
56 56
57 Node* Parameter(Type* t, int32_t index = 0) { 57 Node* Parameter(Type* t, int32_t index = 0) {
58 Node* n = graph.NewNode(common.Parameter(index), graph.start()); 58 Node* n = graph.NewNode(common.Parameter(index), graph.start());
59 NodeProperties::SetType(n, t); 59 NodeProperties::SetType(n, t);
60 return n; 60 return n;
61 } 61 }
62 62
63 Node* UndefinedConstant() { 63 Node* UndefinedConstant() {
64 Handle<HeapObject> value = isolate->factory()->undefined_value(); 64 Handle<HeapObject> value = isolate->factory()->undefined_value();
65 return graph.NewNode(common.HeapConstant(value)); 65 return graph.NewNode(common.HeapConstant(value));
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 } 240 }
241 } 241 }
242 } 242 }
243 #endif 243 #endif
244 244
245 TEST(AddNumber1) { 245 TEST(AddNumber1) {
246 JSTypedLoweringTester R; 246 JSTypedLoweringTester R;
247 for (size_t i = 0; i < arraysize(kNumberTypes); ++i) { 247 for (size_t i = 0; i < arraysize(kNumberTypes); ++i) {
248 Node* p0 = R.Parameter(kNumberTypes[i], 0); 248 Node* p0 = R.Parameter(kNumberTypes[i], 0);
249 Node* p1 = R.Parameter(kNumberTypes[i], 1); 249 Node* p1 = R.Parameter(kNumberTypes[i], 1);
250 Node* add = R.Binop(R.javascript.Add(BinaryOperationHints::Any()), p0, p1); 250 Node* add = R.Binop(R.javascript.Add(BinaryOperationHint::kAny), p0, p1);
251 Node* r = R.reduce(add); 251 Node* r = R.reduce(add);
252 252
253 R.CheckBinop(IrOpcode::kNumberAdd, r); 253 R.CheckBinop(IrOpcode::kNumberAdd, r);
254 CHECK_EQ(p0, r->InputAt(0)); 254 CHECK_EQ(p0, r->InputAt(0));
255 CHECK_EQ(p1, r->InputAt(1)); 255 CHECK_EQ(p1, r->InputAt(1));
256 } 256 }
257 } 257 }
258 258
259 TEST(NumberBinops) { 259 TEST(NumberBinops) {
260 JSTypedLoweringTester R; 260 JSTypedLoweringTester R;
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 CHECK_EQ(n, add->InputAt(0)); 568 CHECK_EQ(n, add->InputAt(0));
569 CHECK_EQ(r, add->InputAt(1)); 569 CHECK_EQ(r, add->InputAt(1));
570 R.CheckEffectInput(R.start(), effect_use); 570 R.CheckEffectInput(R.start(), effect_use);
571 } 571 }
572 } 572 }
573 573
574 TEST(StringComparison) { 574 TEST(StringComparison) {
575 JSTypedLoweringTester R; 575 JSTypedLoweringTester R;
576 576
577 const Operator* ops[] = { 577 const Operator* ops[] = {
578 R.javascript.LessThan(CompareOperationHints::Any()), 578 R.javascript.LessThan(CompareOperationHint::kAny),
579 R.simplified.StringLessThan(), 579 R.simplified.StringLessThan(),
580 R.javascript.LessThanOrEqual(CompareOperationHints::Any()), 580 R.javascript.LessThanOrEqual(CompareOperationHint::kAny),
581 R.simplified.StringLessThanOrEqual(), 581 R.simplified.StringLessThanOrEqual(),
582 R.javascript.GreaterThan(CompareOperationHints::Any()), 582 R.javascript.GreaterThan(CompareOperationHint::kAny),
583 R.simplified.StringLessThan(), 583 R.simplified.StringLessThan(),
584 R.javascript.GreaterThanOrEqual(CompareOperationHints::Any()), 584 R.javascript.GreaterThanOrEqual(CompareOperationHint::kAny),
585 R.simplified.StringLessThanOrEqual()}; 585 R.simplified.StringLessThanOrEqual()};
586 586
587 for (size_t i = 0; i < arraysize(kStringTypes); i++) { 587 for (size_t i = 0; i < arraysize(kStringTypes); i++) {
588 Node* p0 = R.Parameter(kStringTypes[i], 0); 588 Node* p0 = R.Parameter(kStringTypes[i], 0);
589 for (size_t j = 0; j < arraysize(kStringTypes); j++) { 589 for (size_t j = 0; j < arraysize(kStringTypes); j++) {
590 Node* p1 = R.Parameter(kStringTypes[j], 1); 590 Node* p1 = R.Parameter(kStringTypes[j], 1);
591 591
592 for (size_t k = 0; k < arraysize(ops); k += 2) { 592 for (size_t k = 0; k < arraysize(ops); k += 2) {
593 Node* cmp = R.Binop(ops[k], p0, p1); 593 Node* cmp = R.Binop(ops[k], p0, p1);
594 Node* r = R.reduce(cmp); 594 Node* r = R.reduce(cmp);
(...skipping 21 matching lines...) Expand all
616 if (converted->opcode() == IrOpcode::kNumberConstant) return; 616 if (converted->opcode() == IrOpcode::kNumberConstant) return;
617 CHECK_EQ(IrOpcode::kJSToNumber, converted->opcode()); 617 CHECK_EQ(IrOpcode::kJSToNumber, converted->opcode());
618 CHECK_EQ(val, converted->InputAt(0)); 618 CHECK_EQ(val, converted->InputAt(0));
619 } 619 }
620 } 620 }
621 621
622 TEST(NumberComparison) { 622 TEST(NumberComparison) {
623 JSTypedLoweringTester R; 623 JSTypedLoweringTester R;
624 624
625 const Operator* ops[] = { 625 const Operator* ops[] = {
626 R.javascript.LessThan(CompareOperationHints::Any()), 626 R.javascript.LessThan(CompareOperationHint::kAny),
627 R.simplified.NumberLessThan(), 627 R.simplified.NumberLessThan(),
628 R.javascript.LessThanOrEqual(CompareOperationHints::Any()), 628 R.javascript.LessThanOrEqual(CompareOperationHint::kAny),
629 R.simplified.NumberLessThanOrEqual(), 629 R.simplified.NumberLessThanOrEqual(),
630 R.javascript.GreaterThan(CompareOperationHints::Any()), 630 R.javascript.GreaterThan(CompareOperationHint::kAny),
631 R.simplified.NumberLessThan(), 631 R.simplified.NumberLessThan(),
632 R.javascript.GreaterThanOrEqual(CompareOperationHints::Any()), 632 R.javascript.GreaterThanOrEqual(CompareOperationHint::kAny),
633 R.simplified.NumberLessThanOrEqual()}; 633 R.simplified.NumberLessThanOrEqual()};
634 634
635 Node* const p0 = R.Parameter(Type::Number(), 0); 635 Node* const p0 = R.Parameter(Type::Number(), 0);
636 Node* const p1 = R.Parameter(Type::Number(), 1); 636 Node* const p1 = R.Parameter(Type::Number(), 1);
637 637
638 for (size_t k = 0; k < arraysize(ops); k += 2) { 638 for (size_t k = 0; k < arraysize(ops); k += 2) {
639 Node* cmp = R.Binop(ops[k], p0, p1); 639 Node* cmp = R.Binop(ops[k], p0, p1);
640 Node* r = R.reduce(cmp); 640 Node* r = R.reduce(cmp);
641 641
642 R.CheckBinop(ops[k + 1], r); 642 R.CheckBinop(ops[k + 1], r);
(...skipping 15 matching lines...) Expand all
658 Type* types[] = {Type::Number(), Type::String(), 658 Type* types[] = {Type::Number(), Type::String(),
659 Type::Union(Type::Number(), Type::String(), R.main_zone())}; 659 Type::Union(Type::Number(), Type::String(), R.main_zone())};
660 660
661 for (size_t i = 0; i < arraysize(types); i++) { 661 for (size_t i = 0; i < arraysize(types); i++) {
662 Node* p0 = R.Parameter(types[i], 0); 662 Node* p0 = R.Parameter(types[i], 0);
663 663
664 for (size_t j = 0; j < arraysize(types); j++) { 664 for (size_t j = 0; j < arraysize(types); j++) {
665 Node* p1 = R.Parameter(types[j], 1); 665 Node* p1 = R.Parameter(types[j], 1);
666 { 666 {
667 const Operator* less_than = 667 const Operator* less_than =
668 R.javascript.LessThan(CompareOperationHints::Any()); 668 R.javascript.LessThan(CompareOperationHint::kAny);
669 Node* cmp = R.Binop(less_than, p0, p1); 669 Node* cmp = R.Binop(less_than, p0, p1);
670 Node* r = R.reduce(cmp); 670 Node* r = R.reduce(cmp);
671 if (types[i]->Is(Type::String()) && types[j]->Is(Type::String())) { 671 if (types[i]->Is(Type::String()) && types[j]->Is(Type::String())) {
672 R.CheckBinop(R.simplified.StringLessThan(), r); 672 R.CheckBinop(R.simplified.StringLessThan(), r);
673 } else if ((types[i]->Is(Type::Number()) && 673 } else if ((types[i]->Is(Type::Number()) &&
674 types[j]->Is(Type::Number())) || 674 types[j]->Is(Type::Number())) ||
675 (!types[i]->Maybe(Type::String()) || 675 (!types[i]->Maybe(Type::String()) ||
676 !types[j]->Maybe(Type::String()))) { 676 !types[j]->Maybe(Type::String()))) {
677 R.CheckBinop(R.simplified.NumberLessThan(), r); 677 R.CheckBinop(R.simplified.NumberLessThan(), r);
678 } else { 678 } else {
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 804
805 // Helper function for strict and non-strict equality reductions. 805 // Helper function for strict and non-strict equality reductions.
806 void CheckEqualityReduction(JSTypedLoweringTester* R, bool strict, Node* l, 806 void CheckEqualityReduction(JSTypedLoweringTester* R, bool strict, Node* l,
807 Node* r, IrOpcode::Value expected) { 807 Node* r, IrOpcode::Value expected) {
808 for (int j = 0; j < 2; j++) { 808 for (int j = 0; j < 2; j++) {
809 Node* p0 = j == 0 ? l : r; 809 Node* p0 = j == 0 ? l : r;
810 Node* p1 = j == 1 ? l : r; 810 Node* p1 = j == 1 ? l : r;
811 811
812 { 812 {
813 const Operator* op = 813 const Operator* op =
814 strict ? R->javascript.StrictEqual(CompareOperationHints::Any()) 814 strict ? R->javascript.StrictEqual(CompareOperationHint::kAny)
815 : R->javascript.Equal(CompareOperationHints::Any()); 815 : R->javascript.Equal(CompareOperationHint::kAny);
816 Node* eq = R->Binop(op, p0, p1); 816 Node* eq = R->Binop(op, p0, p1);
817 Node* r = R->reduce(eq); 817 Node* r = R->reduce(eq);
818 R->CheckBinop(expected, r); 818 R->CheckBinop(expected, r);
819 } 819 }
820 820
821 { 821 {
822 const Operator* op = 822 const Operator* op =
823 strict ? R->javascript.StrictNotEqual(CompareOperationHints::Any()) 823 strict ? R->javascript.StrictNotEqual(CompareOperationHint::kAny)
824 : R->javascript.NotEqual(CompareOperationHints::Any()); 824 : R->javascript.NotEqual(CompareOperationHint::kAny);
825 Node* ne = R->Binop(op, p0, p1); 825 Node* ne = R->Binop(op, p0, p1);
826 Node* n = R->reduce(ne); 826 Node* n = R->reduce(ne);
827 CHECK_EQ(IrOpcode::kBooleanNot, n->opcode()); 827 CHECK_EQ(IrOpcode::kBooleanNot, n->opcode());
828 Node* r = n->InputAt(0); 828 Node* r = n->InputAt(0);
829 R->CheckBinop(expected, r); 829 R->CheckBinop(expected, r);
830 } 830 }
831 } 831 }
832 } 832 }
833 833
834 834
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
1236 CHECK_EQ(p1, r->InputAt(1)); 1236 CHECK_EQ(p1, r->InputAt(1));
1237 } 1237 }
1238 } 1238 }
1239 } 1239 }
1240 } 1240 }
1241 } 1241 }
1242 1242
1243 } // namespace compiler 1243 } // namespace compiler
1244 } // namespace internal 1244 } // namespace internal
1245 } // namespace v8 1245 } // namespace v8
OLDNEW
« no previous file with comments | « src/ic/ic-state.h ('k') | test/unittests/compiler/js-typed-lowering-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698