| 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-typed-lowering.h" | 5 #include "src/compiler/js-typed-lowering.h" |
| 6 | 6 |
| 7 #include "src/builtins/builtins-utils.h" | 7 #include "src/builtins/builtins-utils.h" |
| 8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
| 9 #include "src/compilation-dependencies.h" | 9 #include "src/compilation-dependencies.h" |
| 10 #include "src/compiler/access-builder.h" | 10 #include "src/compiler/access-builder.h" |
| (...skipping 1908 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1919 Node* element = effect = graph()->NewNode( | 1919 Node* element = effect = graph()->NewNode( |
| 1920 simplified()->LoadField(element_field), array, effect, control); | 1920 simplified()->LoadField(element_field), array, effect, control); |
| 1921 Node* stale = jsgraph()->StaleRegisterConstant(); | 1921 Node* stale = jsgraph()->StaleRegisterConstant(); |
| 1922 effect = graph()->NewNode(simplified()->StoreField(element_field), array, | 1922 effect = graph()->NewNode(simplified()->StoreField(element_field), array, |
| 1923 stale, effect, control); | 1923 stale, effect, control); |
| 1924 | 1924 |
| 1925 ReplaceWithValue(node, element, effect, control); | 1925 ReplaceWithValue(node, element, effect, control); |
| 1926 return Changed(element); | 1926 return Changed(element); |
| 1927 } | 1927 } |
| 1928 | 1928 |
| 1929 Reduction JSTypedLowering::ReducePhi(Node* node) { |
| 1930 // Try to narrow the type of the Phi {node}, which might be more precise now |
| 1931 // after lowering based on types, i.e. a SpeculativeNumberAdd has a more |
| 1932 // precise type than the JSAdd that was in the graph when the Typer was run. |
| 1933 DCHECK_EQ(IrOpcode::kPhi, node->opcode()); |
| 1934 int arity = node->op()->ValueInputCount(); |
| 1935 Type* type = NodeProperties::GetType(node->InputAt(0)); |
| 1936 for (int i = 1; i < arity; ++i) { |
| 1937 type = Type::Union(type, NodeProperties::GetType(node->InputAt(i)), |
| 1938 graph()->zone()); |
| 1939 } |
| 1940 Type* const node_type = NodeProperties::GetType(node); |
| 1941 if (!node_type->Is(type)) { |
| 1942 type = Type::Intersect(node_type, type, graph()->zone()); |
| 1943 NodeProperties::SetType(node, type); |
| 1944 return Changed(node); |
| 1945 } |
| 1946 return NoChange(); |
| 1947 } |
| 1948 |
| 1929 Reduction JSTypedLowering::ReduceSelect(Node* node) { | 1949 Reduction JSTypedLowering::ReduceSelect(Node* node) { |
| 1930 DCHECK_EQ(IrOpcode::kSelect, node->opcode()); | 1950 DCHECK_EQ(IrOpcode::kSelect, node->opcode()); |
| 1931 Node* const condition = NodeProperties::GetValueInput(node, 0); | 1951 Node* const condition = NodeProperties::GetValueInput(node, 0); |
| 1932 Type* const condition_type = NodeProperties::GetType(condition); | 1952 Type* const condition_type = NodeProperties::GetType(condition); |
| 1933 Node* const vtrue = NodeProperties::GetValueInput(node, 1); | 1953 Node* const vtrue = NodeProperties::GetValueInput(node, 1); |
| 1934 Type* const vtrue_type = NodeProperties::GetType(vtrue); | 1954 Type* const vtrue_type = NodeProperties::GetType(vtrue); |
| 1935 Node* const vfalse = NodeProperties::GetValueInput(node, 2); | 1955 Node* const vfalse = NodeProperties::GetValueInput(node, 2); |
| 1936 Type* const vfalse_type = NodeProperties::GetType(vfalse); | 1956 Type* const vfalse_type = NodeProperties::GetType(vfalse); |
| 1937 if (condition_type->Is(true_type_)) { | 1957 if (condition_type->Is(true_type_)) { |
| 1938 // Select(condition:true, vtrue, vfalse) => vtrue | 1958 // Select(condition:true, vtrue, vfalse) => vtrue |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2159 case IrOpcode::kJSForInNext: | 2179 case IrOpcode::kJSForInNext: |
| 2160 return ReduceJSForInNext(node); | 2180 return ReduceJSForInNext(node); |
| 2161 case IrOpcode::kJSForInStep: | 2181 case IrOpcode::kJSForInStep: |
| 2162 return ReduceJSForInStep(node); | 2182 return ReduceJSForInStep(node); |
| 2163 case IrOpcode::kJSGeneratorStore: | 2183 case IrOpcode::kJSGeneratorStore: |
| 2164 return ReduceJSGeneratorStore(node); | 2184 return ReduceJSGeneratorStore(node); |
| 2165 case IrOpcode::kJSGeneratorRestoreContinuation: | 2185 case IrOpcode::kJSGeneratorRestoreContinuation: |
| 2166 return ReduceJSGeneratorRestoreContinuation(node); | 2186 return ReduceJSGeneratorRestoreContinuation(node); |
| 2167 case IrOpcode::kJSGeneratorRestoreRegister: | 2187 case IrOpcode::kJSGeneratorRestoreRegister: |
| 2168 return ReduceJSGeneratorRestoreRegister(node); | 2188 return ReduceJSGeneratorRestoreRegister(node); |
| 2189 case IrOpcode::kPhi: |
| 2190 return ReducePhi(node); |
| 2169 case IrOpcode::kSelect: | 2191 case IrOpcode::kSelect: |
| 2170 return ReduceSelect(node); | 2192 return ReduceSelect(node); |
| 2171 case IrOpcode::kCheckMaps: | 2193 case IrOpcode::kCheckMaps: |
| 2172 return ReduceCheckMaps(node); | 2194 return ReduceCheckMaps(node); |
| 2173 case IrOpcode::kCheckString: | 2195 case IrOpcode::kCheckString: |
| 2174 return ReduceCheckString(node); | 2196 return ReduceCheckString(node); |
| 2175 case IrOpcode::kNumberCeil: | 2197 case IrOpcode::kNumberCeil: |
| 2176 case IrOpcode::kNumberFloor: | 2198 case IrOpcode::kNumberFloor: |
| 2177 case IrOpcode::kNumberRound: | 2199 case IrOpcode::kNumberRound: |
| 2178 case IrOpcode::kNumberTrunc: | 2200 case IrOpcode::kNumberTrunc: |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2213 } | 2235 } |
| 2214 | 2236 |
| 2215 | 2237 |
| 2216 CompilationDependencies* JSTypedLowering::dependencies() const { | 2238 CompilationDependencies* JSTypedLowering::dependencies() const { |
| 2217 return dependencies_; | 2239 return dependencies_; |
| 2218 } | 2240 } |
| 2219 | 2241 |
| 2220 } // namespace compiler | 2242 } // namespace compiler |
| 2221 } // namespace internal | 2243 } // namespace internal |
| 2222 } // namespace v8 | 2244 } // namespace v8 |
| OLD | NEW |