Move all type mask code to inferrer/typemasks and use it via an AbstractValueStrategy

Change-Id: Ib6f0089b0fee05488fea9295cbb5df944bb29d49
Reviewed-on: https://dart-review.googlesource.com/56980
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index ca5e4ab..79438d6 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -6,6 +6,8 @@
 
 import 'dart:async' show Future;
 
+import 'package:front_end/src/fasta/scanner.dart' show StringToken;
+
 import '../compiler_new.dart' as api;
 import 'backend_strategy.dart';
 import 'common/names.dart' show Selectors;
@@ -24,6 +26,7 @@
 import 'enqueue.dart' show Enqueuer, EnqueueTask, ResolutionEnqueuer;
 import 'environment.dart';
 import 'frontend_strategy.dart';
+import 'inferrer/typemasks/masks.dart' show TypeMaskStrategy;
 import 'io/source_information.dart' show SourceInformation;
 import 'js_backend/backend.dart' show JavaScriptBackend;
 import 'kernel/kernel_backend_strategy.dart';
@@ -32,7 +35,7 @@
 import 'null_compiler_output.dart' show NullCompilerOutput, NullSink;
 import 'options.dart' show CompilerOptions, DiagnosticOptions;
 import 'ssa/nodes.dart' show HInstruction;
-import 'package:front_end/src/fasta/scanner.dart' show StringToken;
+import 'types/abstract_value_domain.dart' show AbstractValueStrategy;
 import 'types/types.dart' show GlobalTypeInferenceTask;
 import 'universe/selector.dart' show Selector;
 import 'universe/world_builder.dart'
@@ -102,6 +105,8 @@
   JavaScriptBackend backend;
   CodegenWorldBuilder _codegenWorldBuilder;
 
+  AbstractValueStrategy abstractValueStrategy = const TypeMaskStrategy();
+
   GenericTask selfTask;
 
   /// The constant environment for the frontend interpretation of compile-time
@@ -416,7 +421,8 @@
   ClosedWorldRefiner closeResolution(FunctionEntity mainFunction) {
     phase = PHASE_DONE_RESOLVING;
 
-    ClosedWorld closedWorld = resolutionWorldBuilder.closeWorld();
+    ClosedWorld closedWorld =
+        resolutionWorldBuilder.closeWorld(abstractValueStrategy);
     OutputUnitData result = deferredLoadTask.run(mainFunction, closedWorld);
     ClosedWorldRefiner closedWorldRefiner =
         backendStrategy.createClosedWorldRefiner(closedWorld);
diff --git a/pkg/compiler/lib/src/inferrer/builder_kernel.dart b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
index afa3b0a..addb4ce 100644
--- a/pkg/compiler/lib/src/inferrer/builder_kernel.dart
+++ b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
@@ -17,7 +17,6 @@
 import '../kernel/element_map.dart';
 import '../native/behavior.dart';
 import '../options.dart';
-import '../types/constants.dart';
 import '../types/abstract_value_domain.dart';
 import '../types/types.dart';
 import '../universe/selector.dart';
@@ -615,8 +614,9 @@
     ConstantSystem constantSystem = _closedWorld.constantSystem;
     // The JavaScript backend may turn this literal into a double at
     // runtime.
-    return _types.getConcreteTypeFor(computeTypeMask(
-        _closedWorld, constantSystem.createIntFromInt(node.value)));
+    return _types.getConcreteTypeFor(_closedWorld.abstractValueDomain
+        .computeAbstractValueForConstant(
+            constantSystem.createIntFromInt(node.value)));
   }
 
   @override
@@ -624,8 +624,9 @@
     ConstantSystem constantSystem = _closedWorld.constantSystem;
     // The JavaScript backend may turn this literal into an integer at
     // runtime.
-    return _types.getConcreteTypeFor(
-        computeTypeMask(_closedWorld, constantSystem.createDouble(node.value)));
+    return _types.getConcreteTypeFor(_closedWorld.abstractValueDomain
+        .computeAbstractValueForConstant(
+            constantSystem.createDouble(node.value)));
   }
 
   @override
diff --git a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
index 5abfae9..799265d 100644
--- a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
+++ b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
@@ -18,7 +18,6 @@
 import '../native/behavior.dart' as native;
 import '../options.dart';
 import '../types/abstract_value_domain.dart';
-import '../types/constants.dart';
 import '../types/types.dart';
 import '../universe/call_structure.dart';
 import '../universe/selector.dart';
@@ -710,7 +709,8 @@
                 // Although we might find a better type, we have to keep
                 // the old type around to ensure that we get a complete view
                 // of the type graph and do not drop any flow edges.
-                AbstractValue refinedType = computeTypeMask(closedWorld, value);
+                AbstractValue refinedType =
+                    abstractValueDomain.computeAbstractValueForConstant(value);
                 type = new NarrowTypeInformation(
                     abstractValueDomain, type, refinedType);
                 types.allocatedTypes.add(type);
diff --git a/pkg/compiler/lib/src/types/constants.dart b/pkg/compiler/lib/src/inferrer/typemasks/constants.dart
similarity index 95%
rename from pkg/compiler/lib/src/types/constants.dart
rename to pkg/compiler/lib/src/inferrer/typemasks/constants.dart
index 58a51d7..501f7e3 100644
--- a/pkg/compiler/lib/src/types/constants.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/constants.dart
@@ -4,10 +4,10 @@
 
 library types.constants;
 
-import '../common.dart';
-import '../constants/values.dart';
-import '../js_backend/js_backend.dart' show SyntheticConstantKind;
-import '../world.dart' show ClosedWorld;
+import '../../common.dart';
+import '../../constants/values.dart';
+import '../../js_backend/js_backend.dart' show SyntheticConstantKind;
+import '../../world.dart' show ClosedWorld;
 import 'masks.dart';
 
 /// Computes the [TypeMask] for the constant [value].
diff --git a/pkg/compiler/lib/src/types/container_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart
similarity index 100%
rename from pkg/compiler/lib/src/types/container_type_mask.dart
rename to pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart
diff --git a/pkg/compiler/lib/src/types/dictionary_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart
similarity index 100%
rename from pkg/compiler/lib/src/types/dictionary_type_mask.dart
rename to pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart
diff --git a/pkg/compiler/lib/src/types/flat_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
similarity index 100%
rename from pkg/compiler/lib/src/types/flat_type_mask.dart
rename to pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
diff --git a/pkg/compiler/lib/src/types/forwarding_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/forwarding_type_mask.dart
similarity index 100%
rename from pkg/compiler/lib/src/types/forwarding_type_mask.dart
rename to pkg/compiler/lib/src/inferrer/typemasks/forwarding_type_mask.dart
diff --git a/pkg/compiler/lib/src/types/map_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart
similarity index 100%
rename from pkg/compiler/lib/src/types/map_type_mask.dart
rename to pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart
diff --git a/pkg/compiler/lib/src/types/masks.dart b/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
similarity index 97%
rename from pkg/compiler/lib/src/types/masks.dart
rename to pkg/compiler/lib/src/inferrer/typemasks/masks.dart
index a7da7b1..ea12636 100644
--- a/pkg/compiler/lib/src/types/masks.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
@@ -4,18 +4,18 @@
 
 library masks;
 
-import '../common.dart';
-import '../common_elements.dart' show CommonElements;
-import '../constants/values.dart' show ConstantValue, PrimitiveConstantValue;
-import '../elements/entities.dart';
-import '../inferrer/type_graph_inferrer.dart' show TypeGraphInferrer;
-import '../universe/selector.dart' show Selector;
-import '../universe/use.dart' show DynamicUse;
-import '../universe/world_builder.dart'
+import '../../common.dart';
+import '../../common_elements.dart' show CommonElements;
+import '../../constants/values.dart' show ConstantValue, PrimitiveConstantValue;
+import '../../elements/entities.dart';
+import '../../types/abstract_value_domain.dart';
+import '../../universe/selector.dart' show Selector;
+import '../../universe/use.dart' show DynamicUse;
+import '../../universe/world_builder.dart'
     show UniverseSelectorConstraints, SelectorConstraintsStrategy;
-import '../util/util.dart';
-import '../world.dart' show ClassQuery, ClosedWorld;
-import 'abstract_value_domain.dart';
+import '../../util/util.dart';
+import '../../world.dart' show ClassQuery, ClosedWorld;
+import '../type_graph_inferrer.dart' show TypeGraphInferrer;
 import 'constants.dart';
 
 part 'container_type_mask.dart';
diff --git a/pkg/compiler/lib/src/types/type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
similarity index 96%
rename from pkg/compiler/lib/src/types/type_mask.dart
rename to pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
index 0458cb9..357fc99 100644
--- a/pkg/compiler/lib/src/types/type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
@@ -59,10 +59,24 @@
   }
 }
 
-class TypeMaskStrategy implements SelectorConstraintsStrategy {
+class TypeMaskStrategy implements AbstractValueStrategy {
   const TypeMaskStrategy();
 
   @override
+  AbstractValueDomain createDomain(ClosedWorld closedWorld) {
+    return new CommonMasks(closedWorld);
+  }
+
+  @override
+  SelectorConstraintsStrategy createSelectorStrategy() {
+    return new TypeMaskSelectorStrategy();
+  }
+}
+
+class TypeMaskSelectorStrategy implements SelectorConstraintsStrategy {
+  const TypeMaskSelectorStrategy();
+
+  @override
   UniverseSelectorConstraints createSelectorConstraints(Selector selector) {
     return new IncreasingTypeMaskSet();
   }
diff --git a/pkg/compiler/lib/src/types/union_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart
similarity index 100%
rename from pkg/compiler/lib/src/types/union_type_mask.dart
rename to pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart
diff --git a/pkg/compiler/lib/src/types/value_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart
similarity index 100%
rename from pkg/compiler/lib/src/types/value_type_mask.dart
rename to pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index fc92348..503b845 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -37,7 +37,6 @@
 import '../native/native.dart' as native;
 import '../ssa/ssa.dart' show SsaFunctionCompiler;
 import '../tracer.dart';
-import '../types/masks.dart' show TypeMaskStrategy;
 import '../universe/call_structure.dart' show CallStructure;
 import '../universe/class_hierarchy_builder.dart'
     show ClassHierarchyBuilder, ClassQueries;
@@ -660,7 +659,9 @@
         compiler.options,
         const TreeShakingEnqueuerStrategy(),
         compiler.backendStrategy.createCodegenWorldBuilder(
-            closedWorld.nativeData, closedWorld, const TypeMaskStrategy()),
+            closedWorld.nativeData,
+            closedWorld,
+            compiler.abstractValueStrategy.createSelectorStrategy()),
         compiler.backendStrategy.createCodegenWorkItemBuilder(closedWorld),
         new CodegenEnqueuerListener(
             elementEnvironment,
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart
index f624144..2c563c6 100644
--- a/pkg/compiler/lib/src/js_model/js_strategy.dart
+++ b/pkg/compiler/lib/src/js_model/js_strategy.dart
@@ -39,6 +39,7 @@
 import '../native/behavior.dart';
 import '../options.dart';
 import '../ssa/ssa.dart';
+import '../types/abstract_value_domain.dart';
 import '../types/types.dart';
 import '../universe/class_set.dart';
 import '../universe/selector.dart';
@@ -80,7 +81,10 @@
     _closureDataLookup = new KernelClosureConversionTask(
         _compiler.measurer, _elementMap, _globalLocalsMap, _compiler.options);
     JsClosedWorldBuilder closedWorldBuilder = new JsClosedWorldBuilder(
-        _elementMap, _closureDataLookup, _compiler.options);
+        _elementMap,
+        _closureDataLookup,
+        _compiler.options,
+        _compiler.abstractValueStrategy);
     return closedWorldBuilder._convertClosedWorld(
         closedWorld, strategy.closureModels);
   }
@@ -226,9 +230,10 @@
   final Map<ClassEntity, ClassSet> _classSets = <ClassEntity, ClassSet>{};
   final KernelClosureConversionTask _closureConversionTask;
   final CompilerOptions _options;
+  final AbstractValueStrategy _abstractValueStrategy;
 
-  JsClosedWorldBuilder(
-      this._elementMap, this._closureConversionTask, this._options);
+  JsClosedWorldBuilder(this._elementMap, this._closureConversionTask,
+      this._options, this._abstractValueStrategy);
 
   ElementEnvironment get _elementEnvironment => _elementMap.elementEnvironment;
   CommonElements get _commonElements => _elementMap.commonElements;
@@ -390,7 +395,8 @@
         assignedInstanceMembers: assignedInstanceMembers,
         processedMembers: processedMembers,
         mixinUses: mixinUses,
-        typesImplementedBySubclasses: typesImplementedBySubclasses);
+        typesImplementedBySubclasses: typesImplementedBySubclasses,
+        abstractValueStrategy: _abstractValueStrategy);
   }
 
   BackendUsage _convertBackendUsage(
@@ -619,7 +625,8 @@
       Map<ClassEntity, Set<ClassEntity>> mixinUses,
       Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses,
       Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes,
-      Map<ClassEntity, ClassSet> classSets})
+      Map<ClassEntity, ClassSet> classSets,
+      AbstractValueStrategy abstractValueStrategy})
       : super(
             elementEnvironment,
             dartTypes,
@@ -637,7 +644,8 @@
             mixinUses,
             typesImplementedBySubclasses,
             classHierarchyNodes,
-            classSets);
+            classSets,
+            abstractValueStrategy);
 
   @override
   void registerClosureClass(ClassEntity cls) {
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index 8154793..34b50ab 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -43,6 +43,7 @@
 import '../ordered_typeset.dart';
 import '../ssa/kernel_impact.dart';
 import '../ssa/type_builder.dart';
+import '../types/abstract_value_domain.dart';
 import '../universe/class_hierarchy_builder.dart';
 import '../universe/class_set.dart';
 import '../universe/selector.dart';
@@ -2094,7 +2095,8 @@
       Map<ClassEntity, Set<ClassEntity>> mixinUses,
       Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses,
       Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes,
-      Map<ClassEntity, ClassSet> classSets})
+      Map<ClassEntity, ClassSet> classSets,
+      AbstractValueStrategy abstractValueStrategy})
       : super(
             elementEnvironment,
             dartTypes,
@@ -2112,7 +2114,8 @@
             mixinUses,
             typesImplementedBySubclasses,
             classHierarchyNodes,
-            classSets) {
+            classSets,
+            abstractValueStrategy) {
     computeRtiNeed(resolutionWorldBuilder, rtiNeedBuilder, options);
   }
 
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index c9e3647..d2ded3a 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -1010,9 +1010,6 @@
   /// Does this node potentially affect control flow.
   bool isControlFlow() => false;
 
-  bool isExact(AbstractValueDomain domain) =>
-      domain.isExactOrNull(instructionType);
-
   bool isValue(AbstractValueDomain domain) =>
       domain.isPrimitiveValue(instructionType);
 
diff --git a/pkg/compiler/lib/src/types/abstract_value_domain.dart b/pkg/compiler/lib/src/types/abstract_value_domain.dart
index 2534ec8..1cc8e7a 100644
--- a/pkg/compiler/lib/src/types/abstract_value_domain.dart
+++ b/pkg/compiler/lib/src/types/abstract_value_domain.dart
@@ -7,9 +7,21 @@
 import '../constants/values.dart' show ConstantValue, PrimitiveConstantValue;
 import '../elements/entities.dart';
 import '../universe/selector.dart';
+import '../universe/world_builder.dart';
+import '../world.dart';
 
 enum AbstractBool { True, False, Maybe }
 
+/// Strategy for the abstraction of runtime values used by the global type
+/// inference.
+abstract class AbstractValueStrategy {
+  /// Creates the abstract value domain for [closedWorld].
+  AbstractValueDomain createDomain(ClosedWorld closedWorld);
+
+  /// Creates the [SelectorConstraintsStrategy] used by the backend enqueuer.
+  SelectorConstraintsStrategy createSelectorStrategy();
+}
+
 /// A value in an abstraction of runtime values.
 abstract class AbstractValue {}
 
diff --git a/pkg/compiler/lib/src/universe/resolution_world_builder.dart b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
index 0a77ecc..b1754da 100644
--- a/pkg/compiler/lib/src/universe/resolution_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
@@ -1025,7 +1025,7 @@
             classQueries);
 
   @override
-  ClosedWorld closeWorld() {
+  ClosedWorld closeWorld(AbstractValueStrategy abstractValueStrategy) {
     Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses =
         populateHierarchyNodes();
 
@@ -1061,6 +1061,7 @@
         mixinUses: classHierarchyBuilder.mixinUses,
         typesImplementedBySubclasses: typesImplementedBySubclasses,
         classHierarchyNodes: classHierarchyBuilder.classHierarchyNodes,
-        classSets: classHierarchyBuilder.classSets);
+        classSets: classHierarchyBuilder.classSets,
+        abstractValueStrategy: abstractValueStrategy);
   }
 }
diff --git a/pkg/compiler/lib/src/universe/world_builder.dart b/pkg/compiler/lib/src/universe/world_builder.dart
index 04f422e..422dba0 100644
--- a/pkg/compiler/lib/src/universe/world_builder.dart
+++ b/pkg/compiler/lib/src/universe/world_builder.dart
@@ -23,6 +23,7 @@
 import '../kernel/element_map_impl.dart';
 import '../native/enqueue.dart' show NativeResolutionEnqueuer;
 import '../options.dart';
+import '../types/abstract_value_domain.dart';
 import '../universe/class_set.dart';
 import '../util/enumset.dart';
 import '../util/util.dart';
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
index 46a6d583..3780697 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -23,7 +23,6 @@
 import 'ordered_typeset.dart';
 import 'options.dart';
 import 'types/abstract_value_domain.dart';
-import 'types/masks.dart' show CommonMasks;
 import 'universe/class_set.dart';
 import 'universe/function_set.dart' show FunctionSet;
 import 'universe/selector.dart' show Selector;
@@ -389,7 +388,7 @@
 abstract class OpenWorld implements World {
   void registerUsedElement(MemberEntity element);
 
-  ClosedWorld closeWorld();
+  ClosedWorld closeWorld(AbstractValueStrategy abstractValueStrategy);
 
   /// Returns an iterable over all mixin applications that mixin [cls].
   Iterable<ClassEntity> allMixinUsesOf(ClassEntity cls);
@@ -496,11 +495,12 @@
       this.mixinUses,
       this.typesImplementedBySubclasses,
       Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes,
-      Map<ClassEntity, ClassSet> classSets)
+      Map<ClassEntity, ClassSet> classSets,
+      AbstractValueStrategy abstractValueStrategy)
       : this._implementedClasses = implementedClasses,
         this._classHierarchyNodes = classHierarchyNodes,
         this._classSets = classSets {
-    _abstractValueDomain = new CommonMasks(this);
+    _abstractValueDomain = abstractValueStrategy.createDomain(this);
   }
 
   @override
diff --git a/tests/compiler/dart2js/codegen/expect_annotations_test.dart b/tests/compiler/dart2js/codegen/expect_annotations_test.dart
index e5d0770f..600c8a4 100644
--- a/tests/compiler/dart2js/codegen/expect_annotations_test.dart
+++ b/tests/compiler/dart2js/codegen/expect_annotations_test.dart
@@ -6,8 +6,8 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
+import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import 'package:compiler/src/js_backend/annotations.dart' as optimizerHints;
-import 'package:compiler/src/types/masks.dart';
 import 'package:compiler/src/types/types.dart';
 import 'package:compiler/src/world.dart' show ClosedWorld;
 import '../inference/type_mask_test_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart b/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart
index 615226b..076929c 100644
--- a/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart
+++ b/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart
@@ -6,7 +6,7 @@
 import "package:async_helper/async_helper.dart";
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/types/masks.dart';
+import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import '../memory_compiler.dart';
 
 const String TEST = """
diff --git a/tests/compiler/dart2js/codegen/type_inference8_test.dart b/tests/compiler/dart2js/codegen/type_inference8_test.dart
index 7940d5e..1b14a0b 100644
--- a/tests/compiler/dart2js/codegen/type_inference8_test.dart
+++ b/tests/compiler/dart2js/codegen/type_inference8_test.dart
@@ -7,7 +7,7 @@
 import "package:async_helper/async_helper.dart";
 import "package:compiler/src/commandline_options.dart";
 import "package:compiler/src/constants/values.dart";
-import "package:compiler/src/types/masks.dart";
+import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import "package:expect/expect.dart";
 import '../memory_compiler.dart';
 
diff --git a/tests/compiler/dart2js/inference/inference_test_helper.dart b/tests/compiler/dart2js/inference/inference_test_helper.dart
index 4094778..94d458e 100644
--- a/tests/compiler/dart2js/inference/inference_test_helper.dart
+++ b/tests/compiler/dart2js/inference/inference_test_helper.dart
@@ -9,7 +9,7 @@
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/types/masks.dart';
+import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import 'package:compiler/src/types/types.dart';
 import 'package:compiler/src/js_model/locals.dart';
 import 'package:compiler/src/kernel/element_map.dart';
diff --git a/tests/compiler/dart2js/inference/list_tracer_test.dart b/tests/compiler/dart2js/inference/list_tracer_test.dart
index e7713ce..8ee4567 100644
--- a/tests/compiler/dart2js/inference/list_tracer_test.dart
+++ b/tests/compiler/dart2js/inference/list_tracer_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/types/masks.dart' show ContainerTypeMask, TypeMask;
+import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import 'package:expect/expect.dart';
 
 import 'type_mask_test_helper.dart';
diff --git a/tests/compiler/dart2js/inference/load_deferred_library_test.dart b/tests/compiler/dart2js/inference/load_deferred_library_test.dart
index 62d1b4a..7cb4515 100644
--- a/tests/compiler/dart2js/inference/load_deferred_library_test.dart
+++ b/tests/compiler/dart2js/inference/load_deferred_library_test.dart
@@ -8,10 +8,10 @@
 import 'package:compiler/src/common/names.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
+import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import 'package:compiler/src/js_model/js_strategy.dart';
 import 'package:compiler/src/kernel/element_map.dart';
 import 'package:compiler/src/types/abstract_value_domain.dart';
-import 'package:compiler/src/types/masks.dart';
 import 'package:compiler/src/world.dart';
 import 'package:expect/expect.dart';
 import 'package:kernel/ast.dart' as ir;
diff --git a/tests/compiler/dart2js/inference/map_tracer_test.dart b/tests/compiler/dart2js/inference/map_tracer_test.dart
index 4336589..b7cab09 100644
--- a/tests/compiler/dart2js/inference/map_tracer_test.dart
+++ b/tests/compiler/dart2js/inference/map_tracer_test.dart
@@ -6,8 +6,8 @@
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/inferrer/type_graph_inferrer.dart';
+import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import 'package:compiler/src/types/abstract_value_domain.dart';
-import 'package:compiler/src/types/masks.dart' show MapTypeMask, TypeMask;
 import 'package:compiler/src/world.dart';
 import 'package:expect/expect.dart';
 
diff --git a/tests/compiler/dart2js/inference/type_combination_test.dart b/tests/compiler/dart2js/inference/type_combination_test.dart
index 64216dc..17c6e73 100644
--- a/tests/compiler/dart2js/inference/type_combination_test.dart
+++ b/tests/compiler/dart2js/inference/type_combination_test.dart
@@ -7,7 +7,7 @@
 import 'package:compiler/src/common_elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/types/masks.dart';
+import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import 'package:compiler/src/world.dart';
 import 'type_mask_test_helper.dart';
 import '../memory_compiler.dart';
diff --git a/tests/compiler/dart2js/inference/type_mask2_test.dart b/tests/compiler/dart2js/inference/type_mask2_test.dart
index c5e075a..6d22a9a 100644
--- a/tests/compiler/dart2js/inference/type_mask2_test.dart
+++ b/tests/compiler/dart2js/inference/type_mask2_test.dart
@@ -8,7 +8,7 @@
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/types/masks.dart';
+import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import 'package:compiler/src/world.dart' show ClosedWorld;
 import '../type_test_helper.dart';
 
diff --git a/tests/compiler/dart2js/inference/type_mask_disjoint_test.dart b/tests/compiler/dart2js/inference/type_mask_disjoint_test.dart
index a680f5b..a1471f4 100644
--- a/tests/compiler/dart2js/inference/type_mask_disjoint_test.dart
+++ b/tests/compiler/dart2js/inference/type_mask_disjoint_test.dart
@@ -7,7 +7,7 @@
 import 'package:compiler/src/common_elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/types/masks.dart';
+import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import 'package:compiler/src/world.dart';
 
 import '../memory_compiler.dart';
diff --git a/tests/compiler/dart2js/inference/type_mask_test.dart b/tests/compiler/dart2js/inference/type_mask_test.dart
index 4561962..159c971 100644
--- a/tests/compiler/dart2js/inference/type_mask_test.dart
+++ b/tests/compiler/dart2js/inference/type_mask_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
-import 'package:compiler/src/types/masks.dart';
+import 'package:compiler/src/inferrer/typemasks/masks.dart';
 
 import 'package:compiler/src/common_elements.dart';
 import 'package:compiler/src/compiler.dart';
diff --git a/tests/compiler/dart2js/inference/type_mask_test_helper.dart b/tests/compiler/dart2js/inference/type_mask_test_helper.dart
index f979741..cbaa56f 100644
--- a/tests/compiler/dart2js/inference/type_mask_test_helper.dart
+++ b/tests/compiler/dart2js/inference/type_mask_test_helper.dart
@@ -4,7 +4,7 @@
 
 library type_mask_test_helper;
 
-import 'package:compiler/src/types/masks.dart';
+import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import 'package:compiler/src/world.dart' show ClosedWorld;
 
 export 'package:compiler/src/types/types.dart';
diff --git a/tests/compiler/dart2js/inference/union_type_test.dart b/tests/compiler/dart2js/inference/union_type_test.dart
index 37f4e29..fc52cb5 100644
--- a/tests/compiler/dart2js/inference/union_type_test.dart
+++ b/tests/compiler/dart2js/inference/union_type_test.dart
@@ -4,7 +4,7 @@
 
 import "package:async_helper/async_helper.dart";
 import "package:expect/expect.dart";
-import "package:compiler/src/types/masks.dart";
+import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import "package:compiler/src/world.dart";
 import '../type_test_helper.dart';
 
diff --git a/tests/compiler/dart2js/model/enqueuer_test.dart b/tests/compiler/dart2js/model/enqueuer_test.dart
index 78dd3fe..865d3d6 100644
--- a/tests/compiler/dart2js/model/enqueuer_test.dart
+++ b/tests/compiler/dart2js/model/enqueuer_test.dart
@@ -13,7 +13,7 @@
 import 'package:compiler/src/elements/names.dart';
 import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/enqueue.dart';
-import 'package:compiler/src/types/masks.dart';
+import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import 'package:compiler/src/universe/call_structure.dart';
 import 'package:compiler/src/universe/selector.dart';
 import 'package:compiler/src/universe/world_impact.dart';
diff --git a/tests/compiler/dart2js/receiver_type_test.dart b/tests/compiler/dart2js/receiver_type_test.dart
index ac1c71f..7d6d3f6 100644
--- a/tests/compiler/dart2js/receiver_type_test.dart
+++ b/tests/compiler/dart2js/receiver_type_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/types/masks.dart';
+import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import 'package:compiler/src/universe/selector.dart';
 import 'package:compiler/src/world.dart';
 import 'package:expect/expect.dart';