| Index: pkg/compiler/lib/src/ssa/codegen.dart
|
| diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
|
| index 08a66d49666e439c37057b86b0ee2187e8fbf524..c882259fbdd51f9eb75271f782de0f219773e067 100644
|
| --- a/pkg/compiler/lib/src/ssa/codegen.dart
|
| +++ b/pkg/compiler/lib/src/ssa/codegen.dart
|
| @@ -2,7 +2,6 @@
|
| // for details. All rights reserved. Use of this source code is governed by a
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| -import 'dart:math' as math;
|
| import '../common.dart';
|
| import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem;
|
| import '../common/tasks.dart' show CompilerTask;
|
| @@ -211,58 +210,8 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| return false;
|
| }
|
|
|
| - // Returns the number of bits occupied by the value computed by [instruction].
|
| - // Returns `32` if the value is negative or does not fit in a smaller number
|
| - // of bits.
|
| - int bitWidth(HInstruction instruction) {
|
| - const int MAX = 32;
|
| - int constant(HInstruction insn) {
|
| - if (insn.isConstantInteger()) {
|
| - IntConstantValue constant = insn.constant;
|
| - return constant.primitiveValue;
|
| - }
|
| - return null;
|
| - }
|
| -
|
| - if (instruction.isConstantInteger()) {
|
| - int value = constant(instruction);
|
| - if (value < 0) return MAX;
|
| - if (value > ((1 << 31) - 1)) return MAX;
|
| - return value.bitLength;
|
| - }
|
| - if (instruction is HBitAnd) {
|
| - return math.min(bitWidth(instruction.left), bitWidth(instruction.right));
|
| - }
|
| - if (instruction is HBitOr || instruction is HBitXor) {
|
| - int leftWidth = bitWidth(instruction.left);
|
| - if (leftWidth == MAX) return MAX;
|
| - return math.max(leftWidth, bitWidth(instruction.right));
|
| - }
|
| - if (instruction is HShiftLeft) {
|
| - int shiftCount = constant(instruction.right);
|
| - if (shiftCount == null || shiftCount < 0 || shiftCount > 31) return MAX;
|
| - int leftWidth = bitWidth(instruction.left);
|
| - int width = leftWidth + shiftCount;
|
| - return math.min(width, MAX);
|
| - }
|
| - if (instruction is HShiftRight) {
|
| - int shiftCount = constant(instruction.right);
|
| - if (shiftCount == null || shiftCount < 0 || shiftCount > 31) return MAX;
|
| - int leftWidth = bitWidth(instruction.left);
|
| - if (leftWidth >= MAX) return MAX;
|
| - return math.max(leftWidth - shiftCount, 0);
|
| - }
|
| - if (instruction is HAdd) {
|
| - return math.min(
|
| - 1 + math.max(bitWidth(instruction.left), bitWidth(instruction.right)),
|
| - MAX);
|
| - }
|
| - return MAX;
|
| - }
|
| -
|
| bool requiresUintConversion(instruction) {
|
| if (instruction.isUInt31(compiler)) return false;
|
| - if (bitWidth(instruction) <= 31) return false;
|
| // If the result of a bit-operation is only used by other bit
|
| // operations, we do not have to convert to an unsigned integer.
|
| return hasNonBitOpUser(instruction, new Set<HPhi>());
|
|
|