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/simplified-lowering.h" | 5 #include "src/compiler/simplified-lowering.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "src/address-map.h" | 9 #include "src/address-map.h" |
10 #include "src/base/bits.h" | 10 #include "src/base/bits.h" |
(...skipping 2108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2119 // the index is within the bounds of [0.0, length[. | 2119 // the index is within the bounds of [0.0, length[. |
2120 DeferReplacement(node, node->InputAt(0)); | 2120 DeferReplacement(node, node->InputAt(0)); |
2121 } | 2121 } |
2122 } else { | 2122 } else { |
2123 VisitBinop(node, UseInfo::CheckedSigned32AsWord32(), | 2123 VisitBinop(node, UseInfo::CheckedSigned32AsWord32(), |
2124 UseInfo::TruncatingWord32(), | 2124 UseInfo::TruncatingWord32(), |
2125 MachineRepresentation::kWord32); | 2125 MachineRepresentation::kWord32); |
2126 } | 2126 } |
2127 return; | 2127 return; |
2128 } | 2128 } |
2129 case IrOpcode::kCheckHeapObject: { | |
2130 if (InputCannotBe(node, Type::SignedSmall())) { | |
2131 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); | |
Jarin
2016/09/23 08:31:54
Move visit binop out of the if?
Can we set the re
Benedikt Meurer
2016/09/23 08:39:38
Not possible (yet), due to InputCannotBe
| |
2132 if (lower()) DeferReplacement(node, node->InputAt(0)); | |
2133 } else { | |
2134 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); | |
2135 } | |
2136 return; | |
2137 } | |
2129 case IrOpcode::kCheckIf: { | 2138 case IrOpcode::kCheckIf: { |
2130 ProcessInput(node, 0, UseInfo::Bool()); | 2139 ProcessInput(node, 0, UseInfo::Bool()); |
2131 ProcessRemainingInputs(node, 1); | 2140 ProcessRemainingInputs(node, 1); |
2132 SetOutput(node, MachineRepresentation::kNone); | 2141 SetOutput(node, MachineRepresentation::kNone); |
2133 return; | 2142 return; |
2134 } | 2143 } |
2135 case IrOpcode::kCheckNumber: { | 2144 case IrOpcode::kCheckNumber: { |
2136 if (InputIs(node, Type::Number())) { | 2145 if (InputIs(node, Type::Number())) { |
2137 if (truncation.IsUsedAsWord32()) { | 2146 if (truncation.IsUsedAsWord32()) { |
2138 VisitUnop(node, UseInfo::TruncatingWord32(), | 2147 VisitUnop(node, UseInfo::TruncatingWord32(), |
2139 MachineRepresentation::kWord32); | 2148 MachineRepresentation::kWord32); |
2140 } else { | 2149 } else { |
2141 // TODO(jarin,bmeurer): We need to go to Tagged here, because | 2150 // TODO(jarin,bmeurer): We need to go to Tagged here, because |
2142 // otherwise we cannot distinguish the hole NaN (which might need to | 2151 // otherwise we cannot distinguish the hole NaN (which might need to |
2143 // be treated as undefined). We should have a dedicated Type for | 2152 // be treated as undefined). We should have a dedicated Type for |
2144 // that at some point, and maybe even a dedicated truncation. | 2153 // that at some point, and maybe even a dedicated truncation. |
2145 VisitUnop(node, UseInfo::AnyTagged(), | 2154 VisitUnop(node, UseInfo::AnyTagged(), |
2146 MachineRepresentation::kTagged); | 2155 MachineRepresentation::kTagged); |
2147 } | 2156 } |
2148 if (lower()) DeferReplacement(node, node->InputAt(0)); | 2157 if (lower()) DeferReplacement(node, node->InputAt(0)); |
2149 } else { | 2158 } else { |
2150 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); | 2159 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); |
2151 } | 2160 } |
2152 return; | 2161 return; |
2153 } | 2162 } |
2163 case IrOpcode::kCheckSmi: { | |
2164 if (SmiValuesAre32Bits() && truncation.IsUsedAsWord32()) { | |
2165 VisitUnop(node, UseInfo::CheckedSignedSmallAsWord32(), | |
2166 MachineRepresentation::kWord32); | |
2167 } else { | |
2168 VisitUnop(node, UseInfo::CheckedSignedSmallAsTaggedSigned(), | |
2169 MachineRepresentation::kTaggedSigned); | |
2170 } | |
2171 if (lower()) DeferReplacement(node, node->InputAt(0)); | |
2172 return; | |
2173 } | |
2154 case IrOpcode::kCheckString: { | 2174 case IrOpcode::kCheckString: { |
2155 if (InputIs(node, Type::String())) { | 2175 if (InputIs(node, Type::String())) { |
2156 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); | 2176 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); |
2157 if (lower()) DeferReplacement(node, node->InputAt(0)); | 2177 if (lower()) DeferReplacement(node, node->InputAt(0)); |
2158 } else { | 2178 } else { |
2159 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); | 2179 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); |
2160 } | |
2161 return; | |
2162 } | |
2163 case IrOpcode::kCheckTaggedPointer: { | |
2164 if (InputCannotBe(node, Type::SignedSmall())) { | |
2165 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); | |
2166 if (lower()) DeferReplacement(node, node->InputAt(0)); | |
2167 } else { | |
2168 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); | |
2169 } | |
2170 return; | |
2171 } | |
2172 case IrOpcode::kCheckTaggedSigned: { | |
2173 if (SmiValuesAre32Bits() && truncation.IsUsedAsWord32()) { | |
2174 VisitUnop(node, UseInfo::CheckedSignedSmallAsWord32(), | |
2175 MachineRepresentation::kWord32); | |
2176 if (lower()) DeferReplacement(node, node->InputAt(0)); | |
2177 } else { | |
2178 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); | |
2179 } | 2180 } |
2180 return; | 2181 return; |
2181 } | 2182 } |
2182 | 2183 |
2183 case IrOpcode::kAllocate: { | 2184 case IrOpcode::kAllocate: { |
2184 ProcessInput(node, 0, UseInfo::TruncatingWord32()); | 2185 ProcessInput(node, 0, UseInfo::TruncatingWord32()); |
2185 ProcessRemainingInputs(node, 1); | 2186 ProcessRemainingInputs(node, 1); |
2186 SetOutput(node, MachineRepresentation::kTagged); | 2187 SetOutput(node, MachineRepresentation::kTagged); |
2187 return; | 2188 return; |
2188 } | 2189 } |
(...skipping 1071 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3260 isolate(), graph()->zone(), callable.descriptor(), 0, flags, | 3261 isolate(), graph()->zone(), callable.descriptor(), 0, flags, |
3261 Operator::kNoProperties); | 3262 Operator::kNoProperties); |
3262 to_number_operator_.set(common()->Call(desc)); | 3263 to_number_operator_.set(common()->Call(desc)); |
3263 } | 3264 } |
3264 return to_number_operator_.get(); | 3265 return to_number_operator_.get(); |
3265 } | 3266 } |
3266 | 3267 |
3267 } // namespace compiler | 3268 } // namespace compiler |
3268 } // namespace internal | 3269 } // namespace internal |
3269 } // namespace v8 | 3270 } // namespace v8 |
OLD | NEW |