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/js-builtin-reducer.h" | 5 #include "src/compiler/js-builtin-reducer.h" |
6 #include "src/compiler/js-graph.h" | 6 #include "src/compiler/js-graph.h" |
7 #include "src/compiler/node-matchers.h" | 7 #include "src/compiler/node-matchers.h" |
8 #include "src/compiler/node-properties.h" | 8 #include "src/compiler/node-properties.h" |
9 #include "src/compiler/simplified-operator.h" | 9 #include "src/compiler/simplified-operator.h" |
10 #include "src/objects-inl.h" | 10 #include "src/objects-inl.h" |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 common()->Select(MachineRepresentation::kFloat64), | 161 common()->Select(MachineRepresentation::kFloat64), |
162 graph()->NewNode(machine()->Float64LessThan(), | 162 graph()->NewNode(machine()->Float64LessThan(), |
163 jsgraph()->Float64Constant(0.5), real), | 163 jsgraph()->Float64Constant(0.5), real), |
164 graph()->NewNode(machine()->Float64Sub(), integer, | 164 graph()->NewNode(machine()->Float64Sub(), integer, |
165 jsgraph()->Float64Constant(1.0)), | 165 jsgraph()->Float64Constant(1.0)), |
166 integer)); | 166 integer)); |
167 } | 167 } |
168 return NoChange(); | 168 return NoChange(); |
169 } | 169 } |
170 | 170 |
| 171 // ES6 section 20.2.2.32 Math.sqrt ( x ) |
| 172 Reduction JSBuiltinReducer::ReduceMathSqrt(Node* node) { |
| 173 JSCallReduction r(node); |
| 174 if (r.InputsMatchOne(Type::Number())) { |
| 175 // Math.sqrt(a:number) -> Float64Sqrt(a) |
| 176 Node* value = graph()->NewNode(machine()->Float64Sqrt(), r.left()); |
| 177 return Replace(value); |
| 178 } |
| 179 return NoChange(); |
| 180 } |
| 181 |
171 Reduction JSBuiltinReducer::Reduce(Node* node) { | 182 Reduction JSBuiltinReducer::Reduce(Node* node) { |
172 Reduction reduction = NoChange(); | 183 Reduction reduction = NoChange(); |
173 JSCallReduction r(node); | 184 JSCallReduction r(node); |
174 | 185 |
175 // Dispatch according to the BuiltinFunctionId if present. | 186 // Dispatch according to the BuiltinFunctionId if present. |
176 if (!r.HasBuiltinFunctionId()) return NoChange(); | 187 if (!r.HasBuiltinFunctionId()) return NoChange(); |
177 switch (r.GetBuiltinFunctionId()) { | 188 switch (r.GetBuiltinFunctionId()) { |
178 case kMathMax: | 189 case kMathMax: |
179 reduction = ReduceMathMax(node); | 190 reduction = ReduceMathMax(node); |
180 break; | 191 break; |
181 case kMathImul: | 192 case kMathImul: |
182 reduction = ReduceMathImul(node); | 193 reduction = ReduceMathImul(node); |
183 break; | 194 break; |
184 case kMathFround: | 195 case kMathFround: |
185 reduction = ReduceMathFround(node); | 196 reduction = ReduceMathFround(node); |
186 break; | 197 break; |
187 case kMathRound: | 198 case kMathRound: |
188 reduction = ReduceMathRound(node); | 199 reduction = ReduceMathRound(node); |
189 break; | 200 break; |
| 201 case kMathSqrt: |
| 202 reduction = ReduceMathSqrt(node); |
| 203 break; |
190 default: | 204 default: |
191 break; | 205 break; |
192 } | 206 } |
193 | 207 |
194 // Replace builtin call assuming replacement nodes are pure values that don't | 208 // Replace builtin call assuming replacement nodes are pure values that don't |
195 // produce an effect. Replaces {node} with {reduction} and relaxes effects. | 209 // produce an effect. Replaces {node} with {reduction} and relaxes effects. |
196 if (reduction.Changed()) ReplaceWithValue(node, reduction.replacement()); | 210 if (reduction.Changed()) ReplaceWithValue(node, reduction.replacement()); |
197 | 211 |
198 return reduction; | 212 return reduction; |
199 } | 213 } |
(...skipping 15 matching lines...) Expand all Loading... |
215 } | 229 } |
216 | 230 |
217 | 231 |
218 SimplifiedOperatorBuilder* JSBuiltinReducer::simplified() const { | 232 SimplifiedOperatorBuilder* JSBuiltinReducer::simplified() const { |
219 return jsgraph()->simplified(); | 233 return jsgraph()->simplified(); |
220 } | 234 } |
221 | 235 |
222 } // namespace compiler | 236 } // namespace compiler |
223 } // namespace internal | 237 } // namespace internal |
224 } // namespace v8 | 238 } // namespace v8 |
OLD | NEW |