| 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/compiler/common-operator.h" |    5 #include "src/compiler/common-operator.h" | 
|    6 #include "src/compiler/common-operator-reducer.h" |    6 #include "src/compiler/common-operator-reducer.h" | 
|    7 #include "src/compiler/machine-operator.h" |    7 #include "src/compiler/machine-operator.h" | 
|    8 #include "src/compiler/operator.h" |    8 #include "src/compiler/operator.h" | 
|    9 #include "src/compiler/simplified-operator.h" |    9 #include "src/compiler/simplified-operator.h" | 
|   10 #include "src/machine-type.h" |   10 #include "src/machine-type.h" | 
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  317   Node* phi = graph()->NewNode( |  317   Node* phi = graph()->NewNode( | 
|  318       common()->Phi(MachineRepresentation::kFloat64, 2), vtrue, vfalse, merge); |  318       common()->Phi(MachineRepresentation::kFloat64, 2), vtrue, vfalse, merge); | 
|  319   StrictMock<MockAdvancedReducerEditor> editor; |  319   StrictMock<MockAdvancedReducerEditor> editor; | 
|  320   EXPECT_CALL(editor, Revisit(merge)); |  320   EXPECT_CALL(editor, Revisit(merge)); | 
|  321   Reduction r = Reduce(&editor, phi); |  321   Reduction r = Reduce(&editor, phi); | 
|  322   ASSERT_TRUE(r.Changed()); |  322   ASSERT_TRUE(r.Changed()); | 
|  323   EXPECT_THAT(r.replacement(), IsFloat64Abs(p0)); |  323   EXPECT_THAT(r.replacement(), IsFloat64Abs(p0)); | 
|  324 } |  324 } | 
|  325  |  325  | 
|  326  |  326  | 
|  327 TEST_F(CommonOperatorReducerTest, PhiToFloat32Max) { |  | 
|  328   Node* p0 = Parameter(0); |  | 
|  329   Node* p1 = Parameter(1); |  | 
|  330   Node* check = graph()->NewNode(machine()->Float32LessThan(), p0, p1); |  | 
|  331   Node* branch = graph()->NewNode(common()->Branch(), check, graph()->start()); |  | 
|  332   Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |  | 
|  333   Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |  | 
|  334   Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); |  | 
|  335   Node* phi = graph()->NewNode( |  | 
|  336       common()->Phi(MachineRepresentation::kFloat32, 2), p1, p0, merge); |  | 
|  337   StrictMock<MockAdvancedReducerEditor> editor; |  | 
|  338   EXPECT_CALL(editor, Revisit(merge)); |  | 
|  339   Reduction r = Reduce(&editor, phi, MachineOperatorBuilder::kFloat32Max); |  | 
|  340   ASSERT_TRUE(r.Changed()); |  | 
|  341   EXPECT_THAT(r.replacement(), IsFloat32Max(p1, p0)); |  | 
|  342 } |  | 
|  343  |  | 
|  344  |  | 
|  345 TEST_F(CommonOperatorReducerTest, PhiToFloat64Max) { |  | 
|  346   Node* p0 = Parameter(0); |  | 
|  347   Node* p1 = Parameter(1); |  | 
|  348   Node* check = graph()->NewNode(machine()->Float64LessThan(), p0, p1); |  | 
|  349   Node* branch = graph()->NewNode(common()->Branch(), check, graph()->start()); |  | 
|  350   Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |  | 
|  351   Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |  | 
|  352   Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); |  | 
|  353   Node* phi = graph()->NewNode( |  | 
|  354       common()->Phi(MachineRepresentation::kFloat64, 2), p1, p0, merge); |  | 
|  355   StrictMock<MockAdvancedReducerEditor> editor; |  | 
|  356   EXPECT_CALL(editor, Revisit(merge)); |  | 
|  357   Reduction r = Reduce(&editor, phi, MachineOperatorBuilder::kFloat64Max); |  | 
|  358   ASSERT_TRUE(r.Changed()); |  | 
|  359   EXPECT_THAT(r.replacement(), IsFloat64Max(p1, p0)); |  | 
|  360 } |  | 
|  361  |  | 
|  362  |  | 
|  363 TEST_F(CommonOperatorReducerTest, PhiToFloat32Min) { |  | 
|  364   Node* p0 = Parameter(0); |  | 
|  365   Node* p1 = Parameter(1); |  | 
|  366   Node* check = graph()->NewNode(machine()->Float32LessThan(), p0, p1); |  | 
|  367   Node* branch = graph()->NewNode(common()->Branch(), check, graph()->start()); |  | 
|  368   Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |  | 
|  369   Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |  | 
|  370   Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); |  | 
|  371   Node* phi = graph()->NewNode( |  | 
|  372       common()->Phi(MachineRepresentation::kFloat32, 2), p0, p1, merge); |  | 
|  373   StrictMock<MockAdvancedReducerEditor> editor; |  | 
|  374   EXPECT_CALL(editor, Revisit(merge)); |  | 
|  375   Reduction r = Reduce(&editor, phi, MachineOperatorBuilder::kFloat32Min); |  | 
|  376   ASSERT_TRUE(r.Changed()); |  | 
|  377   EXPECT_THAT(r.replacement(), IsFloat32Min(p0, p1)); |  | 
|  378 } |  | 
|  379  |  | 
|  380  |  | 
|  381 TEST_F(CommonOperatorReducerTest, PhiToFloat64Min) { |  | 
|  382   Node* p0 = Parameter(0); |  | 
|  383   Node* p1 = Parameter(1); |  | 
|  384   Node* check = graph()->NewNode(machine()->Float64LessThan(), p0, p1); |  | 
|  385   Node* branch = graph()->NewNode(common()->Branch(), check, graph()->start()); |  | 
|  386   Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |  | 
|  387   Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |  | 
|  388   Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); |  | 
|  389   Node* phi = graph()->NewNode( |  | 
|  390       common()->Phi(MachineRepresentation::kFloat64, 2), p0, p1, merge); |  | 
|  391   StrictMock<MockAdvancedReducerEditor> editor; |  | 
|  392   EXPECT_CALL(editor, Revisit(merge)); |  | 
|  393   Reduction r = Reduce(&editor, phi, MachineOperatorBuilder::kFloat64Min); |  | 
|  394   ASSERT_TRUE(r.Changed()); |  | 
|  395   EXPECT_THAT(r.replacement(), IsFloat64Min(p0, p1)); |  | 
|  396 } |  | 
|  397  |  | 
|  398  |  | 
|  399 // ----------------------------------------------------------------------------- |  327 // ----------------------------------------------------------------------------- | 
|  400 // Return |  328 // Return | 
|  401  |  329  | 
|  402  |  330  | 
|  403 TEST_F(CommonOperatorReducerTest, ReturnWithPhiAndEffectPhiAndMerge) { |  331 TEST_F(CommonOperatorReducerTest, ReturnWithPhiAndEffectPhiAndMerge) { | 
|  404   Node* cond = Parameter(2); |  332   Node* cond = Parameter(2); | 
|  405   Node* branch = graph()->NewNode(common()->Branch(), cond, graph()->start()); |  333   Node* branch = graph()->NewNode(common()->Branch(), cond, graph()->start()); | 
|  406   Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |  334   Node* if_true = graph()->NewNode(common()->IfTrue(), branch); | 
|  407   Node* etrue = graph()->start(); |  335   Node* etrue = graph()->start(); | 
|  408   Node* vtrue = Parameter(0); |  336   Node* vtrue = Parameter(0); | 
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  507   Node* c0 = Float64Constant(0.0); |  435   Node* c0 = Float64Constant(0.0); | 
|  508   Node* check = graph()->NewNode(machine()->Float64LessThan(), c0, p0); |  436   Node* check = graph()->NewNode(machine()->Float64LessThan(), c0, p0); | 
|  509   Node* select = |  437   Node* select = | 
|  510       graph()->NewNode(common()->Select(MachineRepresentation::kFloat64), check, |  438       graph()->NewNode(common()->Select(MachineRepresentation::kFloat64), check, | 
|  511                        p0, graph()->NewNode(machine()->Float64Sub(), c0, p0)); |  439                        p0, graph()->NewNode(machine()->Float64Sub(), c0, p0)); | 
|  512   Reduction r = Reduce(select); |  440   Reduction r = Reduce(select); | 
|  513   ASSERT_TRUE(r.Changed()); |  441   ASSERT_TRUE(r.Changed()); | 
|  514   EXPECT_THAT(r.replacement(), IsFloat64Abs(p0)); |  442   EXPECT_THAT(r.replacement(), IsFloat64Abs(p0)); | 
|  515 } |  443 } | 
|  516  |  444  | 
|  517  |  | 
|  518 TEST_F(CommonOperatorReducerTest, SelectToFloat32Max) { |  | 
|  519   Node* p0 = Parameter(0); |  | 
|  520   Node* p1 = Parameter(1); |  | 
|  521   Node* check = graph()->NewNode(machine()->Float32LessThan(), p0, p1); |  | 
|  522   Node* select = graph()->NewNode( |  | 
|  523       common()->Select(MachineRepresentation::kFloat32), check, p1, p0); |  | 
|  524   Reduction r = Reduce(select, MachineOperatorBuilder::kFloat32Max); |  | 
|  525   ASSERT_TRUE(r.Changed()); |  | 
|  526   EXPECT_THAT(r.replacement(), IsFloat32Max(p1, p0)); |  | 
|  527 } |  | 
|  528  |  | 
|  529  |  | 
|  530 TEST_F(CommonOperatorReducerTest, SelectToFloat64Max) { |  | 
|  531   Node* p0 = Parameter(0); |  | 
|  532   Node* p1 = Parameter(1); |  | 
|  533   Node* check = graph()->NewNode(machine()->Float64LessThan(), p0, p1); |  | 
|  534   Node* select = graph()->NewNode( |  | 
|  535       common()->Select(MachineRepresentation::kFloat64), check, p1, p0); |  | 
|  536   Reduction r = Reduce(select, MachineOperatorBuilder::kFloat64Max); |  | 
|  537   ASSERT_TRUE(r.Changed()); |  | 
|  538   EXPECT_THAT(r.replacement(), IsFloat64Max(p1, p0)); |  | 
|  539 } |  | 
|  540  |  | 
|  541  |  | 
|  542 TEST_F(CommonOperatorReducerTest, SelectToFloat32Min) { |  | 
|  543   Node* p0 = Parameter(0); |  | 
|  544   Node* p1 = Parameter(1); |  | 
|  545   Node* check = graph()->NewNode(machine()->Float32LessThan(), p0, p1); |  | 
|  546   Node* select = graph()->NewNode( |  | 
|  547       common()->Select(MachineRepresentation::kFloat32), check, p0, p1); |  | 
|  548   Reduction r = Reduce(select, MachineOperatorBuilder::kFloat32Min); |  | 
|  549   ASSERT_TRUE(r.Changed()); |  | 
|  550   EXPECT_THAT(r.replacement(), IsFloat32Min(p0, p1)); |  | 
|  551 } |  | 
|  552  |  | 
|  553  |  | 
|  554 TEST_F(CommonOperatorReducerTest, SelectToFloat64Min) { |  | 
|  555   Node* p0 = Parameter(0); |  | 
|  556   Node* p1 = Parameter(1); |  | 
|  557   Node* check = graph()->NewNode(machine()->Float64LessThan(), p0, p1); |  | 
|  558   Node* select = graph()->NewNode( |  | 
|  559       common()->Select(MachineRepresentation::kFloat64), check, p0, p1); |  | 
|  560   Reduction r = Reduce(select, MachineOperatorBuilder::kFloat64Min); |  | 
|  561   ASSERT_TRUE(r.Changed()); |  | 
|  562   EXPECT_THAT(r.replacement(), IsFloat64Min(p0, p1)); |  | 
|  563 } |  | 
|  564  |  | 
|  565 }  // namespace compiler |  445 }  // namespace compiler | 
|  566 }  // namespace internal |  446 }  // namespace internal | 
|  567 }  // namespace v8 |  447 }  // namespace v8 | 
| OLD | NEW |