Chromium Code Reviews| 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/machine-operator-reducer.h" | 5 #include "src/compiler/machine-operator-reducer.h" |
| 6 | 6 |
| 7 #include "src/base/bits.h" | 7 #include "src/base/bits.h" |
| 8 #include "src/base/division-by-constant.h" | 8 #include "src/base/division-by-constant.h" |
| 9 #include "src/base/ieee754.h" | 9 #include "src/base/ieee754.h" |
| 10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 257 case IrOpcode::kInt32Mod: | 257 case IrOpcode::kInt32Mod: |
| 258 return ReduceInt32Mod(node); | 258 return ReduceInt32Mod(node); |
| 259 case IrOpcode::kUint32Mod: | 259 case IrOpcode::kUint32Mod: |
| 260 return ReduceUint32Mod(node); | 260 return ReduceUint32Mod(node); |
| 261 case IrOpcode::kInt32LessThan: { | 261 case IrOpcode::kInt32LessThan: { |
| 262 Int32BinopMatcher m(node); | 262 Int32BinopMatcher m(node); |
| 263 if (m.IsFoldable()) { // K < K => K | 263 if (m.IsFoldable()) { // K < K => K |
| 264 return ReplaceBool(m.left().Value() < m.right().Value()); | 264 return ReplaceBool(m.left().Value() < m.right().Value()); |
| 265 } | 265 } |
| 266 if (m.LeftEqualsRight()) return ReplaceBool(false); // x < x => false | 266 if (m.LeftEqualsRight()) return ReplaceBool(false); // x < x => false |
| 267 if (m.left().IsWord32Or() && m.right().Is(0)) { // (X | Y) < 0 ... | |
| 268 // This targets the check for -0 after multiplication. | |
|
Benedikt Meurer
2016/07/20 17:37:44
This is a detail that is not necessarily relevant.
| |
| 269 Int32BinopMatcher mleftmatcher(m.left().node()); | |
| 270 if ((mleftmatcher.left().HasValue() && | |
|
Benedikt Meurer
2016/07/20 17:37:44
Please add a IsNegative() helper to the Int32Match
| |
| 271 mleftmatcher.left().Value() < 0) || | |
| 272 (mleftmatcher.right().HasValue() && | |
| 273 mleftmatcher.right().Value() < 0)) { | |
| 274 return ReplaceBool(true); // and X < 0 or Y < 0 => true | |
| 275 } | |
| 276 } | |
| 267 break; | 277 break; |
| 268 } | 278 } |
| 269 case IrOpcode::kInt32LessThanOrEqual: { | 279 case IrOpcode::kInt32LessThanOrEqual: { |
| 270 Int32BinopMatcher m(node); | 280 Int32BinopMatcher m(node); |
| 271 if (m.IsFoldable()) { // K <= K => K | 281 if (m.IsFoldable()) { // K <= K => K |
| 272 return ReplaceBool(m.left().Value() <= m.right().Value()); | 282 return ReplaceBool(m.left().Value() <= m.right().Value()); |
| 273 } | 283 } |
| 274 if (m.LeftEqualsRight()) return ReplaceBool(true); // x <= x => true | 284 if (m.LeftEqualsRight()) return ReplaceBool(true); // x <= x => true |
| 275 break; | 285 break; |
| 276 } | 286 } |
| (...skipping 965 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1242 MachineOperatorBuilder* MachineOperatorReducer::machine() const { | 1252 MachineOperatorBuilder* MachineOperatorReducer::machine() const { |
| 1243 return jsgraph()->machine(); | 1253 return jsgraph()->machine(); |
| 1244 } | 1254 } |
| 1245 | 1255 |
| 1246 | 1256 |
| 1247 Graph* MachineOperatorReducer::graph() const { return jsgraph()->graph(); } | 1257 Graph* MachineOperatorReducer::graph() const { return jsgraph()->graph(); } |
| 1248 | 1258 |
| 1249 } // namespace compiler | 1259 } // namespace compiler |
| 1250 } // namespace internal | 1260 } // namespace internal |
| 1251 } // namespace v8 | 1261 } // namespace v8 |
| OLD | NEW |