diff --git a/pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart
index 0f3f758..7711977 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart
@@ -121,6 +121,7 @@
 
   @override
   String toString() {
-    return 'Container($forwardTo, element: $elementType, length: $length)';
+    return 'Container($forwardTo, element: $elementType, length: $length, '
+        'powerset: ${TypeMask.powersetToString(powerset)})';
   }
 }
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart
index 610462b..8bf3baa 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart
@@ -143,7 +143,7 @@
 
   @override
   String toString() {
-    return 'Dictionary($forwardTo, key: $keyType, '
-        'value: $valueType, map: $_typeMap)';
+    return 'Dictionary($forwardTo, key: $keyType, value: $valueType, '
+        'map: $_typeMap, powerset: ${TypeMask.powersetToString(powerset)})';
   }
 }
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
index 269abac..27a556c 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
@@ -879,6 +879,7 @@
       if (isExact) 'exact=${base!.name}',
       if (isSubclass) 'subclass=${base!.name}',
       if (isSubtype) 'subtype=${base!.name}',
+      'powerset=${TypeMask.powersetToString(powerset)}',
     ], '|');
     buffer.write(']');
     return buffer.toString();
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart
index 250eb52..aa5004b 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart
@@ -134,6 +134,7 @@
 
   @override
   String toString() {
-    return 'Map($forwardTo, key: $keyType, value: $valueType)';
+    return 'Map($forwardTo, key: $keyType, value: $valueType, '
+        'powerset: ${TypeMask.powersetToString(powerset)})';
   }
 }
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/record_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/record_type_mask.dart
index 0591844..23566bf 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/record_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/record_type_mask.dart
@@ -445,7 +445,8 @@
 
   @override
   String toString() {
-    return '[Record($shape, $types)]';
+    return '[Record($shape, $types, '
+        'powerset: ${TypeMask.powersetToString(powerset)})]';
   }
 
   @override
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/set_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/set_type_mask.dart
index b72ad1c..c67084f 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/set_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/set_type_mask.dart
@@ -95,5 +95,7 @@
   int get hashCode => Hashing.objectHash(elementType, super.hashCode);
 
   @override
-  String toString() => 'Set($forwardTo, element: $elementType)';
+  String toString() =>
+      'Set($forwardTo, element: $elementType, '
+      'powerset: ${TypeMask.powersetToString(powerset)})';
 }
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
index f547e8c..f82c515 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
@@ -552,4 +552,6 @@
     MemberHierarchyBuilder memberHierarchyBuilder,
     JClosedWorld closedWorld,
   );
+
+  static String powersetToString(Bitset powerset) => '$powerset';
 }
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart
index 96b579e..ce674a1 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart
@@ -488,7 +488,8 @@
       if (hasLateSentinel) 'sentinel',
       ...disjointMasks.map((TypeMask mask) => mask.toString()).toList()..sort(),
     ].join(", ");
-    return 'Union($masksString)';
+    return 'Union($masksString, '
+        'powerset: ${TypeMask.powersetToString(powerset)})';
   }
 
   @override
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart
index 4b36866..376c89e 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart
@@ -70,6 +70,7 @@
 
   @override
   String toString() {
-    return 'Value($forwardTo, value: ${value.toDartText(null)})';
+    return 'Value($forwardTo, value: ${value.toDartText(null)}, '
+        'powerset: ${TypeMask.powersetToString(powerset)})';
   }
 }
diff --git a/pkg/compiler/test/dump_info/data/closures.dart b/pkg/compiler/test/dump_info/data/closures.dart
index 8872a2f..01da493 100644
--- a/pkg/compiler/test/dump_info/data/closures.dart
+++ b/pkg/compiler/test/dump_info/data/closures.dart
@@ -113,7 +113,7 @@
   "children": [
     "closure/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure"
   ],
-  "inferredType": "[subclass=Closure]",
+  "inferredType": "[subclass=Closure|powerset=0]",
   "code": "",
   "type": "Type Function()"
 },
@@ -132,7 +132,7 @@
     "external": false
   },
   "returnType": "Type",
-  "inferredReturnType": "[exact=_Type]",
+  "inferredReturnType": "[exact=_Type|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -190,7 +190,7 @@
   "outputUnit": "outputUnit/main",
   "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
   "children": [],
-  "inferredType": "[null|subclass=Closure]",
+  "inferredType": "[null|subclass=Closure|powerset=1]",
   "code": "",
   "type": "dynamic"
 }],
@@ -229,7 +229,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[exact=Class1]",
+  "inferredReturnType": "[exact=Class1|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes field)",
   "inlinedCount": 0,
@@ -252,7 +252,7 @@
     "external": false
   },
   "returnType": "Type",
-  "inferredReturnType": "[exact=_Type]",
+  "inferredReturnType": "[exact=_Type|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -286,11 +286,11 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[exact=Class1]",
+  "inferredReturnType": "[exact=Class1|powerset=0]",
   "parameters": [
     {
       "name": "funcField",
-      "type": "[subclass=Closure]",
+      "type": "[subclass=Closure|powerset=0]",
       "declaredType": "dynamic"
     }
   ],
@@ -322,7 +322,7 @@
     "external": false
   },
   "returnType": "Class1<#Afree>",
-  "inferredReturnType": "[exact=Class1]",
+  "inferredReturnType": "[exact=Class1|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes field)",
   "inlinedCount": 1,
@@ -359,7 +359,7 @@
     "external": false
   },
   "returnType": "Class1<#Afree>",
-  "inferredReturnType": "[exact=Class1]",
+  "inferredReturnType": "[exact=Class1|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -382,7 +382,7 @@
     "external": false
   },
   "returnType": "Set<Class1.T>",
-  "inferredReturnType": "[subclass=_LinkedHashSet]",
+  "inferredReturnType": "[subclass=_LinkedHashSet|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
@@ -413,7 +413,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[exact=_Type]",
+  "inferredReturnType": "[exact=_Type|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 1,
@@ -450,7 +450,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -473,7 +473,7 @@
     "external": false
   },
   "returnType": "Type",
-  "inferredReturnType": "[exact=_Type]",
+  "inferredReturnType": "[exact=_Type|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -505,7 +505,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[exact=_Type]",
+  "inferredReturnType": "[exact=_Type|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 1,
@@ -542,7 +542,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -565,7 +565,7 @@
     "external": false
   },
   "returnType": "Type",
-  "inferredReturnType": "[exact=_Type]",
+  "inferredReturnType": "[exact=_Type|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -621,7 +621,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -644,7 +644,7 @@
     "external": false
   },
   "returnType": "Type Function()",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -667,7 +667,7 @@
     "external": false
   },
   "returnType": "Type",
-  "inferredReturnType": "[exact=_Type]",
+  "inferredReturnType": "[exact=_Type|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -748,7 +748,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
@@ -771,7 +771,7 @@
     "external": false
   },
   "returnType": "Map<Class1.T,method6.S>",
-  "inferredReturnType": "[exact=JsLinkedHashMap]",
+  "inferredReturnType": "[exact=JsLinkedHashMap|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -794,11 +794,11 @@
     "external": false
   },
   "returnType": "Map<Class1.T,method6.S> Function()",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [
     {
       "name": "o",
-      "type": "[subclass=Closure]",
+      "type": "[subclass=Closure|powerset=0]",
       "declaredType": "dynamic"
     }
   ],
@@ -823,7 +823,7 @@
     "external": false
   },
   "returnType": "String Function()",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -846,7 +846,7 @@
     "external": false
   },
   "returnType": "String",
-  "inferredReturnType": "[exact=JSString]",
+  "inferredReturnType": "[exact=JSString|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes anything)",
   "inlinedCount": 0,
@@ -888,7 +888,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[exact=_Type]",
+  "inferredReturnType": "[exact=_Type|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 1,
@@ -925,7 +925,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -948,7 +948,7 @@
     "external": false
   },
   "returnType": "Type",
-  "inferredReturnType": "[exact=_Type]",
+  "inferredReturnType": "[exact=_Type|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1004,7 +1004,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1027,7 +1027,7 @@
     "external": false
   },
   "returnType": "Type Function()",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1050,7 +1050,7 @@
     "external": false
   },
   "returnType": "Type",
-  "inferredReturnType": "[exact=_Type]",
+  "inferredReturnType": "[exact=_Type|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1131,7 +1131,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
@@ -1154,7 +1154,7 @@
     "external": false
   },
   "returnType": "Set<staticMethod4.S>",
-  "inferredReturnType": "[subclass=_LinkedHashSet]",
+  "inferredReturnType": "[subclass=_LinkedHashSet|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
@@ -1177,11 +1177,11 @@
     "external": false
   },
   "returnType": "Set<staticMethod4.S> Function()",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [
     {
       "name": "o",
-      "type": "[subclass=Closure]",
+      "type": "[subclass=Closure|powerset=0]",
       "declaredType": "dynamic"
     }
   ],
@@ -1206,7 +1206,7 @@
     "external": false
   },
   "returnType": "String Function()",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1229,7 +1229,7 @@
     "external": false
   },
   "returnType": "String",
-  "inferredReturnType": "[exact=JSString]",
+  "inferredReturnType": "[exact=JSString|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes anything)",
   "inlinedCount": 0,
@@ -1272,7 +1272,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[exact=_Type]",
+  "inferredReturnType": "[exact=_Type|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 1,
@@ -1310,7 +1310,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1333,7 +1333,7 @@
     "external": false
   },
   "returnType": "Type",
-  "inferredReturnType": "[exact=_Type]",
+  "inferredReturnType": "[exact=_Type|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1389,7 +1389,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1412,7 +1412,7 @@
     "external": false
   },
   "returnType": "Type Function()",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1435,7 +1435,7 @@
     "external": false
   },
   "returnType": "Type",
-  "inferredReturnType": "[exact=_Type]",
+  "inferredReturnType": "[exact=_Type|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1516,7 +1516,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
@@ -1539,7 +1539,7 @@
     "external": false
   },
   "returnType": "Set<topLevelMethod4.S>",
-  "inferredReturnType": "[subclass=_LinkedHashSet]",
+  "inferredReturnType": "[subclass=_LinkedHashSet|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
@@ -1562,11 +1562,11 @@
     "external": false
   },
   "returnType": "Set<topLevelMethod4.S> Function()",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [
     {
       "name": "o",
-      "type": "[subclass=Closure]",
+      "type": "[subclass=Closure|powerset=0]",
       "declaredType": "dynamic"
     }
   ],
@@ -1591,7 +1591,7 @@
     "external": false
   },
   "returnType": "String Function()",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1614,7 +1614,7 @@
     "external": false
   },
   "returnType": "String",
-  "inferredReturnType": "[exact=JSString]",
+  "inferredReturnType": "[exact=JSString|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes anything)",
   "inlinedCount": 0,
@@ -1680,7 +1680,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1703,7 +1703,7 @@
     "external": false
   },
   "returnType": "Null",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1726,7 +1726,7 @@
     "external": false
   },
   "returnType": "Null",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1786,7 +1786,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
@@ -1809,7 +1809,7 @@
     "external": false
   },
   "returnType": "Null",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1832,7 +1832,7 @@
     "external": false
   },
   "returnType": "dynamic Function()",
-  "inferredReturnType": "[subclass=Closure]",
+  "inferredReturnType": "[subclass=Closure|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1905,7 +1905,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
@@ -1928,7 +1928,7 @@
     "external": false
   },
   "returnType": "int",
-  "inferredReturnType": "[subclass=JSInt]",
+  "inferredReturnType": "[subclass=JSInt|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
@@ -1951,7 +1951,7 @@
     "external": false
   },
   "returnType": "int",
-  "inferredReturnType": "[exact=JSUInt31]",
+  "inferredReturnType": "[exact=JSUInt31|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -1974,7 +1974,7 @@
     "external": false
   },
   "returnType": "int",
-  "inferredReturnType": "[subclass=JSInt]",
+  "inferredReturnType": "[subclass=JSInt|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
@@ -2047,7 +2047,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
@@ -2070,7 +2070,7 @@
     "external": false
   },
   "returnType": "int",
-  "inferredReturnType": "[subclass=JSInt]",
+  "inferredReturnType": "[subclass=JSInt|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
@@ -2093,7 +2093,7 @@
     "external": false
   },
   "returnType": "int",
-  "inferredReturnType": "[exact=JSUInt31]",
+  "inferredReturnType": "[exact=JSUInt31|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -2116,7 +2116,7 @@
     "external": false
   },
   "returnType": "int",
-  "inferredReturnType": "[exact=JSUInt31]",
+  "inferredReturnType": "[exact=JSUInt31|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -2157,7 +2157,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
diff --git a/pkg/compiler/test/dump_info/data/deferred/lib.dart b/pkg/compiler/test/dump_info/data/deferred/lib.dart
index 95772c1..0343e19 100644
--- a/pkg/compiler/test/dump_info/data/deferred/lib.dart
+++ b/pkg/compiler/test/dump_info/data/deferred/lib.dart
@@ -29,7 +29,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "Value([exact=JSString], value: \"\")",
+  "inferredReturnType": "Value([exact=JSString|powerset=0], value: \"\", powerset: 0)",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -54,11 +54,11 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[null|subclass=Object]",
+  "inferredReturnType": "[null|subclass=Object|powerset=1]",
   "parameters": [
     {
       "name": "x",
-      "type": "[subclass=Closure]",
+      "type": "[subclass=Closure|powerset=0]",
       "declaredType": "dynamic"
     }
   ],
diff --git a/pkg/compiler/test/dump_info/data/deferred/main.dart b/pkg/compiler/test/dump_info/data/deferred/main.dart
index 06c7e2b..ac37503 100644
--- a/pkg/compiler/test/dump_info/data/deferred/main.dart
+++ b/pkg/compiler/test/dump_info/data/deferred/main.dart
@@ -150,7 +150,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[exact=_Future]",
+  "inferredReturnType": "[exact=_Future|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
@@ -173,11 +173,11 @@
     "external": false
   },
   "returnType": "Null",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [
     {
       "name": "_#wc0#formal",
-      "type": "[null|subclass=Object]",
+      "type": "[null|subclass=Object|powerset=1]",
       "declaredType": "dynamic"
     }
   ],
@@ -191,7 +191,7 @@
   {"id":"function/dart:_js_helper::loadDeferredLibrary"},
   {"id":"function/dart:_rti::_setArrayType"},
   {"id":"function/dart:_rti::findType"},
-  {"id":"function/dart:async::_Future.then","mask":"[exact=_Future]"},
+  {"id":"function/dart:async::_Future.then","mask":"[exact=_Future|powerset=0]"},
   {"id":"function/memory:sdk/tests/web/native/main.dart::main.main_closure.call"},
   {"id":"function/memory:sdk/tests/web/native/main.dart::main.main_closure.call"}]
 */
diff --git a/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart b/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
index 1b58548..f70af54 100644
--- a/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
+++ b/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
@@ -46,7 +46,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 1,
diff --git a/pkg/compiler/test/dump_info/data/deferred_future/main.dart b/pkg/compiler/test/dump_info/data/deferred_future/main.dart
index 08a0aac..bca2dea 100644
--- a/pkg/compiler/test/dump_info/data/deferred_future/main.dart
+++ b/pkg/compiler/test/dump_info/data/deferred_future/main.dart
@@ -148,7 +148,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[exact=_Future]",
+  "inferredReturnType": "[exact=_Future|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
diff --git a/pkg/compiler/test/dump_info/data/js_members.dart b/pkg/compiler/test/dump_info/data/js_members.dart
index 16795e1..15a73cc 100644
--- a/pkg/compiler/test/dump_info/data/js_members.dart
+++ b/pkg/compiler/test/dump_info/data/js_members.dart
@@ -180,11 +180,11 @@
     "external": true
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[null|subclass=Object]",
+  "inferredReturnType": "[null|subclass=Object|powerset=1]",
   "parameters": [
     {
       "name": "a",
-      "type": "[exact=JSUInt31]",
+      "type": "[exact=JSUInt31|powerset=0]",
       "declaredType": "dynamic"
     }
   ],
@@ -210,11 +210,11 @@
     "external": true
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[null|subclass=Object]",
+  "inferredReturnType": "[null|subclass=Object|powerset=1]",
   "parameters": [
     {
       "name": "a",
-      "type": "[null|exact=JSUInt31]",
+      "type": "[null|exact=JSUInt31|powerset=1]",
       "declaredType": "dynamic"
     }
   ],
@@ -240,16 +240,16 @@
     "external": true
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[null|subclass=Object]",
+  "inferredReturnType": "[null|subclass=Object|powerset=1]",
   "parameters": [
     {
       "name": "a",
-      "type": "[exact=JSUInt31]",
+      "type": "[exact=JSUInt31|powerset=0]",
       "declaredType": "dynamic"
     },
     {
       "name": "b",
-      "type": "[null|exact=JSUInt31]",
+      "type": "[null|exact=JSUInt31|powerset=1]",
       "declaredType": "dynamic"
     }
   ],
@@ -304,7 +304,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
@@ -314,11 +314,11 @@
 }],
  holding=[
   {"id":"function/dart:_interceptors::getNativeInterceptor"},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.mixedPositionalArgs","mask":"[subclass=LegacyJavaScriptObject]"},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.mixedPositionalArgs","mask":"[subclass=LegacyJavaScriptObject]"},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.singleArg","mask":"[subclass=LegacyJavaScriptObject]"},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.singlePositionalArg","mask":"[subclass=LegacyJavaScriptObject]"},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.singlePositionalArg","mask":"[subclass=LegacyJavaScriptObject]"},
+  {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.mixedPositionalArgs","mask":"[subclass=LegacyJavaScriptObject|powerset=0]"},
+  {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.mixedPositionalArgs","mask":"[subclass=LegacyJavaScriptObject|powerset=0]"},
+  {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.singleArg","mask":"[subclass=LegacyJavaScriptObject|powerset=0]"},
+  {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.singlePositionalArg","mask":"[subclass=LegacyJavaScriptObject|powerset=0]"},
+  {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.singlePositionalArg","mask":"[subclass=LegacyJavaScriptObject|powerset=0]"},
   {"id":"function/package:expect/expect.dart::Expect.equals"}]
 */
 main() {
diff --git a/pkg/compiler/test/dump_info/data/members.dart b/pkg/compiler/test/dump_info/data/members.dart
index bd96f1f..43dc656 100644
--- a/pkg/compiler/test/dump_info/data/members.dart
+++ b/pkg/compiler/test/dump_info/data/members.dart
@@ -103,7 +103,7 @@
   "outputUnit": "outputUnit/main",
   "parent": "class/memory:sdk/tests/web/native/main.dart::C",
   "children": [],
-  "inferredType": "[exact=Error]",
+  "inferredType": "[exact=Error|powerset=0]",
   "code": "",
   "type": "dynamic"
 }],
@@ -120,7 +120,7 @@
   "outputUnit": "outputUnit/main",
   "parent": "class/memory:sdk/tests/web/native/main.dart::C",
   "children": [],
-  "inferredType": "[subclass=JSPositiveInt]",
+  "inferredType": "[subclass=JSPositiveInt|powerset=0]",
   "code": "$.C_counter = 0;\n",
   "type": "int"
 }]*/
@@ -134,7 +134,7 @@
   "outputUnit": "outputUnit/main",
   "parent": "class/memory:sdk/tests/web/native/main.dart::C",
   "children": [],
-  "inferredType": "[exact=JSBool]",
+  "inferredType": "[exact=JSBool|powerset=0]",
   "code": "_lazy($, \"C_y\", \"$get$C_y\", () => {\n      var t1 = $.C_counter + 1;\n      $.C_counter = t1;\n      return t1 === 4;\n    });\n",
   "type": "bool"
 }],
@@ -162,7 +162,7 @@
     "external": false
   },
   "returnType": "bool",
-  "inferredReturnType": "[exact=JSBool]",
+  "inferredReturnType": "[exact=JSBool|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads static; writes static)",
   "inlinedCount": 1,
@@ -190,11 +190,11 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[exact=C]",
+  "inferredReturnType": "[exact=C|powerset=0]",
   "parameters": [
     {
       "name": "message",
-      "type": "[exact=Error]",
+      "type": "[exact=Error|powerset=0]",
       "declaredType": "Object"
     }
   ],
@@ -222,11 +222,11 @@
     "external": false
   },
   "returnType": "C",
-  "inferredReturnType": "[exact=C]",
+  "inferredReturnType": "[exact=C|powerset=0]",
   "parameters": [
     {
       "name": "object",
-      "type": "[exact=JSUInt31]",
+      "type": "[exact=JSUInt31|powerset=0]",
       "declaredType": "dynamic"
     }
   ],
@@ -260,7 +260,7 @@
     "external": false
   },
   "returnType": "void",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
@@ -305,7 +305,7 @@
   "outputUnit": "outputUnit/main",
   "parent": "class/memory:sdk/tests/web/native/main.dart::A",
   "children": [],
-  "inferredType": "Value([exact=JSString], value: \"hello\")",
+  "inferredType": "Value([exact=JSString|powerset=0], value: \"hello\", powerset: 0)",
   "code": "",
   "type": "dynamic"
 }]*/
@@ -326,7 +326,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[exact=A]",
+  "inferredReturnType": "[exact=A|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 1,
@@ -345,7 +345,7 @@
   "outputUnit": "outputUnit/main",
   "parent": "library/memory:sdk/tests/web/native/main.dart::",
   "children": [],
-  "inferredType": "Container([exact=JSUnmodifiableArray], element: [exact=A], length: 1)",
+  "inferredType": "Container([exact=JSUnmodifiableArray|powerset=0], element: [exact=A|powerset=0], length: 1, powerset: 0)",
   "code": "",
   "type": "List<A>"
 }]*/
@@ -367,7 +367,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
diff --git a/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart b/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart
index 9df5df5..abf1786 100644
--- a/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart
+++ b/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart
@@ -131,11 +131,11 @@
     "external": false
   },
   "returnType": "void",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [
     {
       "name": "t",
-      "type": "[exact=JSUInt31]",
+      "type": "[exact=JSUInt31|powerset=0]",
       "declaredType": "int"
     }
   ],
@@ -219,11 +219,11 @@
     "external": false
   },
   "returnType": "void",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [
     {
       "name": "t",
-      "type": "Union([exact=JSString], [exact=JSUInt31])",
+      "type": "Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)",
       "declaredType": "int"
     }
   ],
@@ -306,7 +306,7 @@
     "external": false
   },
   "returnType": "Subclass",
-  "inferredReturnType": "[exact=Subclass]",
+  "inferredReturnType": "[exact=Subclass|powerset=0]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 1,
@@ -330,7 +330,7 @@
     "external": false
   },
   "returnType": "void",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 1,
@@ -372,7 +372,7 @@
     "external": false
   },
   "returnType": "dynamic",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [],
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
@@ -395,7 +395,7 @@
     "external": false
   },
   "returnType": "void",
-  "inferredReturnType": "[null]",
+  "inferredReturnType": "[null|powerset=1]",
   "parameters": [],
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
diff --git a/pkg/compiler/test/inference/data/abstract_method.dart b/pkg/compiler/test/inference/data/abstract_method.dart
index a07fa65..316f22a 100644
--- a/pkg/compiler/test/inference/data/abstract_method.dart
+++ b/pkg/compiler/test/inference/data/abstract_method.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   abstractEquals();
 }
@@ -11,10 +11,10 @@
 // Call abstract method implemented by superclass.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
   operator ==(_);
 }
 
-/*member: abstractEquals:[exact=JSBool]*/
-abstractEquals() => Class1() /*invoke: [exact=Class1]*/ == Class1();
+/*member: abstractEquals:[exact=JSBool|powerset=0]*/
+abstractEquals() => Class1() /*invoke: [exact=Class1|powerset=0]*/ == Class1();
diff --git a/pkg/compiler/test/inference/data/abstract_mixin_override.dart b/pkg/compiler/test/inference/data/abstract_mixin_override.dart
index ec19ec6..bd1a30c 100644
--- a/pkg/compiler/test/inference/data/abstract_mixin_override.dart
+++ b/pkg/compiler/test/inference/data/abstract_mixin_override.dart
@@ -2,62 +2,74 @@
 // 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.
 
-/*member: A1.:[exact=A1]*/
+/*member: A1.:[exact=A1|powerset=0]*/
 class A1 {
-  /*member: A1.foo:[null]*/
-  void foo(/*[exact=JSUInt31]*/ x) => print(x);
+  /*member: A1.foo:[null|powerset=1]*/
+  void foo(/*[exact=JSUInt31|powerset=0]*/ x) => print(x);
 }
 
-/*member: B1.:[exact=B1]*/
+/*member: B1.:[exact=B1|powerset=0]*/
 class B1 extends A1 with M1 {}
 
-/*member: C1.:[exact=C1]*/
+/*member: C1.:[exact=C1|powerset=0]*/
 class C1 with M1 {
-  /*member: C1.foo:[null]*/
-  void foo(/*[exact=JSUInt31]*/ x) => print(x);
+  /*member: C1.foo:[null|powerset=1]*/
+  void foo(/*[exact=JSUInt31|powerset=0]*/ x) => print(x);
 }
 
 mixin M1 {
   void foo(x);
-  /*member: M1.bar:[null]*/
-  void bar(/*[exact=JSUInt31]*/ y) {
-    /*invoke: [subtype=M1]*/
+  /*member: M1.bar:[null|powerset=1]*/
+  void bar(/*[exact=JSUInt31|powerset=0]*/ y) {
+    /*invoke: [subtype=M1|powerset=0]*/
     foo(y);
   }
 }
 
-/*member: A2.:[exact=A2]*/
+/*member: A2.:[exact=A2|powerset=0]*/
 class A2 {
-  /*member: A2.foo:[null]*/
-  void foo(/*[empty]*/ x) => print(x);
+  /*member: A2.foo:[null|powerset=1]*/
+  void foo(/*[empty|powerset=0]*/ x) => print(x);
 }
 
-/*member: B2.:[exact=B2]*/
+/*member: B2.:[exact=B2|powerset=0]*/
 class B2 extends A2 with M2 {}
 
-/*member: C2.:[exact=C2]*/
+/*member: C2.:[exact=C2|powerset=0]*/
 class C2 with M2 {
-  /*member: C2.foo:[null]*/
-  void foo(/*Value([exact=JSString], value: "")*/ x) => print(x);
+  /*member: C2.foo:[null|powerset=1]*/
+  void foo(/*Value([exact=JSString|powerset=0], value: "", powerset: 0)*/ x) =>
+      print(x);
 }
 
 mixin M2 {
-  /*member: M2.foo:[exact=JSUInt31]*/
-  void foo(/*Value([exact=JSString], value: "")*/ x) => 5;
-  /*member: M2.bar:[null]*/
-  void bar(/*Value([exact=JSString], value: "")*/ y) {
-    /*invoke: [subtype=M2]*/
+  /*member: M2.foo:[exact=JSUInt31|powerset=0]*/
+  void foo(/*Value([exact=JSString|powerset=0], value: "", powerset: 0)*/ x) =>
+      5;
+  /*member: M2.bar:[null|powerset=1]*/
+  void bar(/*Value([exact=JSString|powerset=0], value: "", powerset: 0)*/ y) {
+    /*invoke: [subtype=M2|powerset=0]*/
     foo(y);
   }
 }
 
-/*member: getB1:Union([exact=B1], [exact=C1])*/
-getB1(bool /*Value([exact=JSBool], value: false)*/ x) => x ? B1() : C1();
-/*member: getB2:Union([exact=B2], [exact=C2])*/
-getB2(bool /*Value([exact=JSBool], value: false)*/ x) => x ? B2() : C2();
+/*member: getB1:Union([exact=B1|powerset=0], [exact=C1|powerset=0], powerset: 0)*/
+getB1(bool /*Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/ x) =>
+    x ? B1() : C1();
+/*member: getB2:Union([exact=B2|powerset=0], [exact=C2|powerset=0], powerset: 0)*/
+getB2(bool /*Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/ x) =>
+    x ? B2() : C2();
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
-  getB1(false). /*invoke: Union([exact=B1], [exact=C1])*/ bar(3);
-  getB2(false). /*invoke: Union([exact=B2], [exact=C2])*/ bar("");
+  getB1(
+    false,
+  ). /*invoke: Union([exact=B1|powerset=0], [exact=C1|powerset=0], powerset: 0)*/ bar(
+    3,
+  );
+  getB2(
+    false,
+  ). /*invoke: Union([exact=B2|powerset=0], [exact=C2|powerset=0], powerset: 0)*/ bar(
+    "",
+  );
 }
diff --git a/pkg/compiler/test/inference/data/and_or.dart b/pkg/compiler/test/inference/data/and_or.dart
index 42bbd67..ef13741 100644
--- a/pkg/compiler/test/inference/data/and_or.dart
+++ b/pkg/compiler/test/inference/data/and_or.dart
@@ -2,64 +2,68 @@
 // 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.
 
-/*member: X.:[exact=X]*/
+/*member: X.:[exact=X|powerset=0]*/
 class X {}
 
-/*member: returnDyn1:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn1:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 returnDyn1() {
   var a;
-  ((a = 52) /*invoke: [exact=JSUInt31]*/ == true) ||
-      ((a = 'foo') /*invoke: Value([exact=JSString], value: "foo")*/ == true);
+  ((a = 52) /*invoke: [exact=JSUInt31|powerset=0]*/ == true) ||
+      ((a = 'foo') /*invoke: Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ ==
+          true);
   return a;
 }
 
-/*member: returnDyn2:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn2:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 returnDyn2() {
   var a;
-  ((a = 52) /*invoke: [exact=JSUInt31]*/ == true) &&
-      ((a = 'foo') /*invoke: Value([exact=JSString], value: "foo")*/ == true);
+  ((a = 52) /*invoke: [exact=JSUInt31|powerset=0]*/ == true) &&
+      ((a = 'foo') /*invoke: Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ ==
+          true);
   return a;
 }
 
-/*member: returnDyn3:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn3:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 returnDyn3() {
   var a;
   a = a == 54 ? 'foo' : 31;
   return a;
 }
 
-/*member: returnDyn4:Union([exact=JSUInt31], [exact=X])*/
+/*member: returnDyn4:Union([exact=JSUInt31|powerset=0], [exact=X|powerset=0], powerset: 0)*/
 returnDyn4() {
   var a;
-  ((a = 52) /*invoke: [exact=JSUInt31]*/ == true) ||
-      ((a = X()) /*invoke: [exact=X]*/ == true);
+  ((a = 52) /*invoke: [exact=JSUInt31|powerset=0]*/ == true) ||
+      ((a = X()) /*invoke: [exact=X|powerset=0]*/ == true);
   return a;
 }
 
-/*member: returnDyn5:Union([exact=JSUInt31], [exact=X])*/
+/*member: returnDyn5:Union([exact=JSUInt31|powerset=0], [exact=X|powerset=0], powerset: 0)*/
 returnDyn5() {
   var a;
-  ((a = 52) /*invoke: [exact=JSUInt31]*/ == true) &&
-      ((a = X()) /*invoke: [exact=X]*/ == true);
+  ((a = 52) /*invoke: [exact=JSUInt31|powerset=0]*/ == true) &&
+      ((a = X()) /*invoke: [exact=X|powerset=0]*/ == true);
   return a;
 }
 
-/*member: returnDyn6:Union([exact=JSString], [exact=X])*/
+/*member: returnDyn6:Union([exact=JSString|powerset=0], [exact=X|powerset=0], powerset: 0)*/
 returnDyn6() {
   var a;
   a = a == 54 ? 'foo' : X();
   return a;
 }
 
-/*member: returnDyn7b:Union([exact=JSString], [exact=JSUInt31])*/
-returnDyn7b(/*Union([exact=JSString], [exact=JSUInt31])*/ x) {
+/*member: returnDyn7b:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+returnDyn7b(
+  /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ x,
+) {
   return x;
 }
 
-/*member: returnDyn7:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn7:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 returnDyn7() {
   dynamic a = "foo";
-  if (a. /*Value([exact=JSString], value: "foo")*/ length /*invoke: [subclass=JSInt]*/ ==
+  if (a. /*Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ length /*invoke: [subclass=JSInt|powerset=0]*/ ==
       3) {
     a = 52;
   }
@@ -67,15 +71,17 @@
   return a;
 }
 
-/*member: returnDyn8:Union([exact=JSString], [exact=JSUInt31])*/
-returnDyn8(/*Union([exact=JSString], [exact=JSUInt31])*/ x) {
+/*member: returnDyn8:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+returnDyn8(
+  /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ x,
+) {
   return x;
 }
 
-/*member: test8:Union(null, [exact=JSString], [exact=JSUInt31])*/
+/*member: test8:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
 test8() {
   dynamic a = "foo";
-  if (a. /*Value([exact=JSString], value: "foo")*/ length /*invoke: [subclass=JSInt]*/ ==
+  if (a. /*Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ length /*invoke: [subclass=JSInt|powerset=0]*/ ==
       3) {
     a = 52;
   }
@@ -83,35 +89,37 @@
   if ((false && a is! String) || returnDyn8(a)) return a;
 }
 
-/*member: returnDyn9:Union([exact=JSString], [exact=JSUInt31])*/
-returnDyn9(/*Union([exact=JSString], [exact=JSUInt31])*/ x) {
+/*member: returnDyn9:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+returnDyn9(
+  /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ x,
+) {
   return x;
 }
 
-/*member: test9:[null]*/
+/*member: test9:[null|powerset=1]*/
 test9() {
   dynamic a = "foo";
-  if (a. /*Value([exact=JSString], value: "foo")*/ length /*invoke: [subclass=JSInt]*/ ==
+  if (a. /*Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ length /*invoke: [subclass=JSInt|powerset=0]*/ ==
       3) {
     a = 52;
   }
   if (!(a is bool && a is bool)) returnDyn9(a);
 }
 
-/*member: returnString:[exact=JSString]*/
-returnString(/*[exact=JSString]*/ x) => x;
+/*member: returnString:[exact=JSString|powerset=0]*/
+returnString(/*[exact=JSString|powerset=0]*/ x) => x;
 
-/*member: test10:[null]*/
+/*member: test10:[null|powerset=1]*/
 test10() {
   dynamic a = "foo";
-  if (a. /*Value([exact=JSString], value: "foo")*/ length /*invoke: [subclass=JSInt]*/ ==
+  if (a. /*Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ length /*invoke: [subclass=JSInt|powerset=0]*/ ==
       3) {
     a = 52;
   }
   if (!(a is num) && a is String) returnString(a);
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   returnDyn1();
   returnDyn2();
diff --git a/pkg/compiler/test/inference/data/as.dart b/pkg/compiler/test/inference/data/as.dart
index 7b90268..119de21 100644
--- a/pkg/compiler/test/inference/data/as.dart
+++ b/pkg/compiler/test/inference/data/as.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   asIntWithString();
   asIntWithNegative();
@@ -15,10 +15,12 @@
 // As int of int and non-int types.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _asIntWithString:[exact=JSUInt31]*/
-_asIntWithString(/*Union([exact=JSString], [exact=JSUInt31])*/ o) => o as int;
+/*member: _asIntWithString:[exact=JSUInt31|powerset=0]*/
+_asIntWithString(
+  /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) => o as int;
 
-/*member: asIntWithString:[null]*/
+/*member: asIntWithString:[null|powerset=1]*/
 asIntWithString() {
   _asIntWithString(0);
   _asIntWithString('');
@@ -28,10 +30,10 @@
 // As int of known int and an unknown int types.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _asIntWithNegative:[subclass=JSInt]*/
-_asIntWithNegative(/*[subclass=JSInt]*/ o) => o as int;
+/*member: _asIntWithNegative:[subclass=JSInt|powerset=0]*/
+_asIntWithNegative(/*[subclass=JSInt|powerset=0]*/ o) => o as int;
 
-/*member: asIntWithNegative:[null]*/
+/*member: asIntWithNegative:[null|powerset=1]*/
 asIntWithNegative() {
   _asIntWithNegative(0);
   _asIntWithNegative(-1);
@@ -41,10 +43,10 @@
 // As int of 0.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _asIntOfZero:[exact=JSUInt31]*/
-_asIntOfZero(/*[exact=JSUInt31]*/ o) => o as int;
+/*member: _asIntOfZero:[exact=JSUInt31|powerset=0]*/
+_asIntOfZero(/*[exact=JSUInt31|powerset=0]*/ o) => o as int;
 
-/*member: asIntOfZero:[null]*/
+/*member: asIntOfZero:[null|powerset=1]*/
 asIntOfZero() {
   _asIntOfZero(0);
 }
@@ -53,10 +55,10 @@
 // As int of -1.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _asIntOfMinusOne:[subclass=JSInt]*/
-_asIntOfMinusOne(/*[subclass=JSInt]*/ o) => o as int;
+/*member: _asIntOfMinusOne:[subclass=JSInt|powerset=0]*/
+_asIntOfMinusOne(/*[subclass=JSInt|powerset=0]*/ o) => o as int;
 
-/*member: asIntOfMinusOne:[null]*/
+/*member: asIntOfMinusOne:[null|powerset=1]*/
 asIntOfMinusOne() {
   _asIntOfMinusOne(-1);
 }
@@ -65,10 +67,12 @@
 // As int of string.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _asIntOfString:[empty]*/
-_asIntOfString(/*Value([exact=JSString], value: "")*/ o) => o as int;
+/*member: _asIntOfString:[empty|powerset=0]*/
+_asIntOfString(
+  /*Value([exact=JSString|powerset=0], value: "", powerset: 0)*/ o,
+) => o as int;
 
-/*member: asIntOfString:[null]*/
+/*member: asIntOfString:[null|powerset=1]*/
 asIntOfString() {
   _asIntOfString('');
 }
diff --git a/pkg/compiler/test/inference/data/assert.dart b/pkg/compiler/test/inference/data/assert.dart
index 8f470ae..2a56488 100644
--- a/pkg/compiler/test/inference/data/assert.dart
+++ b/pkg/compiler/test/inference/data/assert.dart
@@ -6,7 +6,7 @@
 /// file 'assert_ea.dart' contains similar tests for when assertions are
 /// _enabled_.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   simpleAssert();
   failingAssert();
@@ -22,7 +22,7 @@
 // Simple assert statement known to be valid.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: simpleAssert:[null]*/
+/*member: simpleAssert:[null|powerset=1]*/
 simpleAssert() {
   assert(true);
 }
@@ -31,7 +31,7 @@
 // Simple assert statement known to be invalid.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: failingAssert:[exact=JSUInt31]*/
+/*member: failingAssert:[exact=JSUInt31|powerset=0]*/
 failingAssert() {
   assert(false);
   return 0;
@@ -41,7 +41,7 @@
 // Simple assert statement with message known to be valid.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: simpleAssertWithMessage:[null]*/
+/*member: simpleAssertWithMessage:[null|powerset=1]*/
 simpleAssertWithMessage() {
   assert(true, 'foo');
 }
@@ -50,14 +50,16 @@
 // Assert statement that promotes a local.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _promoteLocalAssert:Union([exact=JSString], [exact=JSUInt31])*/
-_promoteLocalAssert(/*Union([exact=JSString], [exact=JSUInt31])*/ o) {
+/*member: _promoteLocalAssert:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_promoteLocalAssert(
+  /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
   var local = o;
   assert(local is int);
   return local;
 }
 
-/*member: promoteLocalAssert:[null]*/
+/*member: promoteLocalAssert:[null|powerset=1]*/
 promoteLocalAssert() {
   _promoteLocalAssert(0);
   _promoteLocalAssert('');
@@ -67,13 +69,15 @@
 // Assert statement that promotes a parameter.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _promoteParameterAssert:Union([exact=JSString], [exact=JSUInt31])*/
-_promoteParameterAssert(/*Union([exact=JSString], [exact=JSUInt31])*/ o) {
+/*member: _promoteParameterAssert:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_promoteParameterAssert(
+  /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
   assert(o is int);
   return o;
 }
 
-/*member: promoteParameterAssert:[null]*/
+/*member: promoteParameterAssert:[null|powerset=1]*/
 promoteParameterAssert() {
   _promoteParameterAssert(0);
   _promoteParameterAssert('');
@@ -83,7 +87,7 @@
 // Assert statement with an unreachable throw.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: unreachableThrow:[exact=JSUInt31]*/
+/*member: unreachableThrow:[exact=JSUInt31|powerset=0]*/
 unreachableThrow() {
   assert(true, throw "unreachable");
   return 0;
@@ -93,14 +97,14 @@
 // Assert with a side effect in the message.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _messageWithSideEffect:[null]*/
-_messageWithSideEffect(/*[exact=JSBool]*/ b) {
+/*member: _messageWithSideEffect:[null|powerset=1]*/
+_messageWithSideEffect(/*[exact=JSBool|powerset=0]*/ b) {
   var a;
   assert(b, a = 42);
   return a;
 }
 
-/*member: messageWithSideEffect:[null]*/
+/*member: messageWithSideEffect:[null|powerset=1]*/
 messageWithSideEffect() {
   _messageWithSideEffect(true);
   _messageWithSideEffect(false);
@@ -110,8 +114,8 @@
 // Assert with a caught side effect in the message.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _messageWithCaughtSideEffect:[null]*/
-_messageWithCaughtSideEffect(/*[exact=JSBool]*/ b) {
+/*member: _messageWithCaughtSideEffect:[null|powerset=1]*/
+_messageWithCaughtSideEffect(/*[exact=JSBool|powerset=0]*/ b) {
   var a;
   try {
     assert(b, a = 42);
@@ -119,7 +123,7 @@
   return a;
 }
 
-/*member: messageWithCaughtSideEffect:[null]*/
+/*member: messageWithCaughtSideEffect:[null|powerset=1]*/
 messageWithCaughtSideEffect() {
   _messageWithCaughtSideEffect(true);
   _messageWithCaughtSideEffect(false);
diff --git a/pkg/compiler/test/inference/data/assert_ea.dart b/pkg/compiler/test/inference/data/assert_ea.dart
index 5faff4e..673d3be 100644
--- a/pkg/compiler/test/inference/data/assert_ea.dart
+++ b/pkg/compiler/test/inference/data/assert_ea.dart
@@ -6,7 +6,7 @@
 /// file 'assert.dart' contains similar tests for when assertions are
 /// _disabled_.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   simpleAssert();
   failingAssert();
@@ -22,7 +22,7 @@
 // Simple assert statement known to be valid.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: simpleAssert:[null]*/
+/*member: simpleAssert:[null|powerset=1]*/
 simpleAssert() {
   assert(true);
 }
@@ -31,7 +31,7 @@
 // Simple assert statement known to be invalid.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: failingAssert:[exact=JSUInt31]*/
+/*member: failingAssert:[exact=JSUInt31|powerset=0]*/
 failingAssert() {
   assert(false);
   return 0;
@@ -41,7 +41,7 @@
 // Simple assert statement with message known to be valid.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: simpleAssertWithMessage:[null]*/
+/*member: simpleAssertWithMessage:[null|powerset=1]*/
 simpleAssertWithMessage() {
   assert(true, 'foo');
 }
@@ -50,14 +50,16 @@
 // Assert statement that promotes a local.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _promoteLocalAssert:[exact=JSUInt31]*/
-_promoteLocalAssert(/*Union([exact=JSString], [exact=JSUInt31])*/ o) {
+/*member: _promoteLocalAssert:[exact=JSUInt31|powerset=0]*/
+_promoteLocalAssert(
+  /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
   var local = o;
   assert(local is int);
   return local;
 }
 
-/*member: promoteLocalAssert:[null]*/
+/*member: promoteLocalAssert:[null|powerset=1]*/
 promoteLocalAssert() {
   _promoteLocalAssert(0);
   _promoteLocalAssert('');
@@ -67,13 +69,15 @@
 // Assert statement that promotes a parameter.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _promoteParameterAssert:[exact=JSUInt31]*/
-_promoteParameterAssert(/*Union([exact=JSString], [exact=JSUInt31])*/ o) {
+/*member: _promoteParameterAssert:[exact=JSUInt31|powerset=0]*/
+_promoteParameterAssert(
+  /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
   assert(o is int);
   return o;
 }
 
-/*member: promoteParameterAssert:[null]*/
+/*member: promoteParameterAssert:[null|powerset=1]*/
 promoteParameterAssert() {
   _promoteParameterAssert(0);
   _promoteParameterAssert('');
@@ -83,7 +87,7 @@
 // Assert statement with an unreachable throw.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: unreachableThrow:[exact=JSUInt31]*/
+/*member: unreachableThrow:[exact=JSUInt31|powerset=0]*/
 unreachableThrow() {
   assert(true, throw "unreachable");
   return 0;
@@ -93,14 +97,14 @@
 // Assert with a side effect in the message.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _messageWithSideEffect:[null]*/
-_messageWithSideEffect(/*[exact=JSBool]*/ b) {
+/*member: _messageWithSideEffect:[null|powerset=1]*/
+_messageWithSideEffect(/*[exact=JSBool|powerset=0]*/ b) {
   var a;
   assert(b, a = 42);
   return a;
 }
 
-/*member: messageWithSideEffect:[null]*/
+/*member: messageWithSideEffect:[null|powerset=1]*/
 messageWithSideEffect() {
   _messageWithSideEffect(true);
   _messageWithSideEffect(false);
@@ -110,8 +114,8 @@
 // Assert with a caught side effect in the message.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _messageWithCaughtSideEffect:[null|exact=JSUInt31]*/
-_messageWithCaughtSideEffect(/*[exact=JSBool]*/ b) {
+/*member: _messageWithCaughtSideEffect:[null|exact=JSUInt31|powerset=1]*/
+_messageWithCaughtSideEffect(/*[exact=JSBool|powerset=0]*/ b) {
   var a;
   try {
     assert(b, a = 42);
@@ -119,7 +123,7 @@
   return a;
 }
 
-/*member: messageWithCaughtSideEffect:[null]*/
+/*member: messageWithCaughtSideEffect:[null|powerset=1]*/
 messageWithCaughtSideEffect() {
   _messageWithCaughtSideEffect(true);
   _messageWithCaughtSideEffect(false);
diff --git a/pkg/compiler/test/inference/data/assert_initializer.dart b/pkg/compiler/test/inference/data/assert_initializer.dart
index 1561747..5adf56b 100644
--- a/pkg/compiler/test/inference/data/assert_initializer.dart
+++ b/pkg/compiler/test/inference/data/assert_initializer.dart
@@ -3,21 +3,23 @@
 // BSD-style license that can be found in the LICENSE file.
 
 class X {
-  /*member: X.a:Union([exact=JSExtendableArray], [exact=JSString])*/
+  /*member: X.a:Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
   final dynamic a;
 
-  /*member: X.:[exact=X]*/
-  X(Object /*Union([exact=JSExtendableArray], [exact=JSString])*/ value)
-    : assert(value is String),
+  /*member: X.:[exact=X|powerset=0]*/
+  X(
+    Object /*Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
+    value,
+  ) : assert(value is String),
       a = value;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   X('a')
-      . /*[exact=X]*/ a
-      . /*Union([exact=JSExtendableArray], [exact=JSString])*/ length;
+      . /*[exact=X|powerset=0]*/ a
+      . /*Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/ length;
   X([1])
-      . /*[exact=X]*/ a
-      . /*Union([exact=JSExtendableArray], [exact=JSString])*/ length;
+      . /*[exact=X|powerset=0]*/ a
+      . /*Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/ length;
 }
diff --git a/pkg/compiler/test/inference/data/assert_initializer_ea.dart b/pkg/compiler/test/inference/data/assert_initializer_ea.dart
index ccf9261..a2432d1 100644
--- a/pkg/compiler/test/inference/data/assert_initializer_ea.dart
+++ b/pkg/compiler/test/inference/data/assert_initializer_ea.dart
@@ -3,17 +3,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 class X {
-  /*member: X.a:[exact=JSString]*/
+  /*member: X.a:[exact=JSString|powerset=0]*/
   final dynamic a;
 
-  /*member: X.:[exact=X]*/
-  X(Object /*Union([exact=JSExtendableArray], [exact=JSString])*/ value)
-    : assert(value is String),
+  /*member: X.:[exact=X|powerset=0]*/
+  X(
+    Object /*Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
+    value,
+  ) : assert(value is String),
       a = value;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
-  X('a'). /*[exact=X]*/ a. /*[exact=JSString]*/ length;
-  X([1]). /*[exact=X]*/ a. /*[exact=JSString]*/ length;
+  X('a'). /*[exact=X|powerset=0]*/ a. /*[exact=JSString|powerset=0]*/ length;
+  X([1]). /*[exact=X|powerset=0]*/ a. /*[exact=JSString|powerset=0]*/ length;
 }
diff --git a/pkg/compiler/test/inference/data/assert_message_throw.dart b/pkg/compiler/test/inference/data/assert_message_throw.dart
index 1115952..4fc92dd 100644
--- a/pkg/compiler/test/inference/data/assert_message_throw.dart
+++ b/pkg/compiler/test/inference/data/assert_message_throw.dart
@@ -6,8 +6,8 @@
 /// file 'assert_message_throw_ea.dart' contains similar tests for when
 /// assertions are _enabled_.
 
-/*member: main:[null]*/
-main(/*[null|subclass=Object]*/ args) {
+/*member: main:[null|powerset=1]*/
+main(/*[null|subclass=Object|powerset=1]*/ args) {
   test0();
   test1(args == null);
   test2(args == null);
@@ -15,7 +15,7 @@
 }
 
 // Check that `throw` in the message is handled conditionally.
-/*member: test0:Container([exact=JSExtendableArray], element: [empty], length: 0)*/
+/*member: test0:Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
 test0() {
   assert(true, throw "unreachable");
   var list = [];
@@ -24,8 +24,8 @@
 
 // Check that side-effects of the assert message is not included after the
 // assert.
-/*member: test1:[null]*/
-test1(/*[exact=JSBool]*/ b) {
+/*member: test1:[null|powerset=1]*/
+test1(/*[exact=JSBool|powerset=0]*/ b) {
   var a;
   assert(b, a = 42);
   return a;
@@ -33,8 +33,8 @@
 
 // Check that side-effects of the assert message is included after the assert
 // through the thrown exception.
-/*member: test2:[null]*/
-test2(/*[exact=JSBool]*/ b) {
+/*member: test2:[null|powerset=1]*/
+test2(/*[exact=JSBool|powerset=0]*/ b) {
   var a;
   try {
     assert(b, a = 42);
@@ -43,8 +43,8 @@
 }
 
 // Check that type tests are preserved after the assert.
-/*member: test3:[null|subclass=Object]*/
-test3(/*[null|subclass=Object]*/ a) {
+/*member: test3:[null|subclass=Object|powerset=1]*/
+test3(/*[null|subclass=Object|powerset=1]*/ a) {
   assert(a is int);
   return a;
 }
diff --git a/pkg/compiler/test/inference/data/assert_message_throw_ea.dart b/pkg/compiler/test/inference/data/assert_message_throw_ea.dart
index 72e4618..3001368 100644
--- a/pkg/compiler/test/inference/data/assert_message_throw_ea.dart
+++ b/pkg/compiler/test/inference/data/assert_message_throw_ea.dart
@@ -6,8 +6,8 @@
 /// file 'assert_message_throw.dart' contains similar tests for when assertions
 /// are _disabled_.
 
-/*member: main:[null]*/
-main(/*[null|subclass=Object]*/ args) {
+/*member: main:[null|powerset=1]*/
+main(/*[null|subclass=Object|powerset=1]*/ args) {
   test0();
   test1(args == null);
   test2(args == null);
@@ -15,7 +15,7 @@
 }
 
 // Check that `throw` in the message is handled conditionally.
-/*member: test0:Container([exact=JSExtendableArray], element: [empty], length: 0)*/
+/*member: test0:Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
 test0() {
   assert(true, throw "unreachable");
   var list = [];
@@ -24,8 +24,8 @@
 
 // Check that side-effects of the assert message is not included after the
 // assert.
-/*member: test1:[null]*/
-test1(/*[exact=JSBool]*/ b) {
+/*member: test1:[null|powerset=1]*/
+test1(/*[exact=JSBool|powerset=0]*/ b) {
   var a;
   assert(b, a = 42);
   return a;
@@ -33,8 +33,8 @@
 
 // Check that side-effects of the assert message is included after the assert
 // through the thrown exception.
-/*member: test2:[null|exact=JSUInt31]*/
-test2(/*[exact=JSBool]*/ b) {
+/*member: test2:[null|exact=JSUInt31|powerset=1]*/
+test2(/*[exact=JSBool|powerset=0]*/ b) {
   var a;
   try {
     assert(b, a = 42);
@@ -43,8 +43,8 @@
 }
 
 // Check that type tests are preserved after the assert.
-/*member: test3:[subclass=JSInt]*/
-test3(/*[null|subclass=Object]*/ a) {
+/*member: test3:[subclass=JSInt|powerset=0]*/
+test3(/*[null|subclass=Object|powerset=1]*/ a) {
   assert(a is int);
   return a;
 }
diff --git a/pkg/compiler/test/inference/data/assign_op.dart b/pkg/compiler/test/inference/data/assign_op.dart
index a0a20e5..610840c0 100644
--- a/pkg/compiler/test/inference/data/assign_op.dart
+++ b/pkg/compiler/test/inference/data/assign_op.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   assignPlus();
   assignAnd();
@@ -16,78 +16,78 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: assignPlus:[subclass=JSUInt32]*/
+/*member: assignPlus:[subclass=JSUInt32|powerset=0]*/
 assignPlus() {
   var i = 87;
-  return i /*invoke: [exact=JSUInt31]*/ += 42;
+  return i /*invoke: [exact=JSUInt31|powerset=0]*/ += 42;
 }
 
-/*member: assignAnd:[exact=JSUInt31]*/
+/*member: assignAnd:[exact=JSUInt31|powerset=0]*/
 assignAnd() {
   var i = 87;
-  return i /*invoke: [exact=JSUInt31]*/ &= 42;
+  return i /*invoke: [exact=JSUInt31|powerset=0]*/ &= 42;
 }
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  /*member: Class1.field:[subclass=JSPositiveInt]*/
+  /*member: Class1.field:[subclass=JSPositiveInt|powerset=0]*/
   var field = 87;
 }
 
-/*member: instanceAssignPlus:[subclass=JSPositiveInt]*/
+/*member: instanceAssignPlus:[subclass=JSPositiveInt|powerset=0]*/
 instanceAssignPlus() {
   var c = Class1();
-  return c. /*[exact=Class1]*/ /*update: [exact=Class1]*/ field /*invoke: [subclass=JSPositiveInt]*/ +=
+  return c. /*[exact=Class1|powerset=0]*/ /*update: [exact=Class1|powerset=0]*/ field /*invoke: [subclass=JSPositiveInt|powerset=0]*/ +=
       42;
 }
 
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
 class Class2 {
-  /*member: Class2.field:[exact=JSUInt31]*/
+  /*member: Class2.field:[exact=JSUInt31|powerset=0]*/
   var field = 87;
 }
 
-/*member: instanceAssignAnd:[exact=JSUInt31]*/
+/*member: instanceAssignAnd:[exact=JSUInt31|powerset=0]*/
 instanceAssignAnd() {
   var c = Class2();
-  return c. /*[exact=Class2]*/ /*update: [exact=Class2]*/ field /*invoke: [exact=JSUInt31]*/ &=
+  return c. /*[exact=Class2|powerset=0]*/ /*update: [exact=Class2|powerset=0]*/ field /*invoke: [exact=JSUInt31|powerset=0]*/ &=
       42;
 }
 
-/*member: assignIndexPlus:[subclass=JSPositiveInt]*/
+/*member: assignIndexPlus:[subclass=JSPositiveInt|powerset=0]*/
 assignIndexPlus() {
   var i = [87];
   return i
-      /*Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
-      /*update: Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
-      [0] /*invoke: [subclass=JSPositiveInt]*/ +=
+      /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 1, powerset: 0)*/
+      /*update: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 1, powerset: 0)*/
+      [0] /*invoke: [subclass=JSPositiveInt|powerset=0]*/ +=
       42;
 }
 
-/*member: assignIndexAnd:[exact=JSUInt31]*/
+/*member: assignIndexAnd:[exact=JSUInt31|powerset=0]*/
 assignIndexAnd() {
   var i = [87];
   return i
-      /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
-      /*update: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
-      [0] /*invoke: [exact=JSUInt31]*/ &=
+      /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
+      /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
+      [0] /*invoke: [exact=JSUInt31|powerset=0]*/ &=
       42;
 }
 
-/*member: assignIndexInc:[subclass=JSPositiveInt]*/
+/*member: assignIndexInc:[subclass=JSPositiveInt|powerset=0]*/
 assignIndexInc() {
   var i = [87];
   return i
-  /*Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
-  /*update: Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
-  [0] /*invoke: [subclass=JSPositiveInt]*/ ++;
+  /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 1, powerset: 0)*/
+  /*update: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 1, powerset: 0)*/
+  [0] /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++;
 }
 
-/*member: assignIndexDec:[subclass=JSInt]*/
+/*member: assignIndexDec:[subclass=JSInt|powerset=0]*/
 assignIndexDec() {
   var i = [87];
-  return /*invoke: [subclass=JSInt]*/ --i
-  /*Container([exact=JSExtendableArray], element: [subclass=JSInt], length: 1)*/
-  /*update: Container([exact=JSExtendableArray], element: [subclass=JSInt], length: 1)*/
+  return /*invoke: [subclass=JSInt|powerset=0]*/ --i
+  /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSInt|powerset=0], length: 1, powerset: 0)*/
+  /*update: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSInt|powerset=0], length: 1, powerset: 0)*/
   [0];
 }
diff --git a/pkg/compiler/test/inference/data/async_marker.dart b/pkg/compiler/test/inference/data/async_marker.dart
index 97a9464..8c73e76 100644
--- a/pkg/compiler/test/inference/data/async_marker.dart
+++ b/pkg/compiler/test/inference/data/async_marker.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   asyncMethod();
   asyncMethodWithReturn();
@@ -10,16 +10,16 @@
   syncStarMethod();
 }
 
-/*member: asyncMethod:[exact=_Future]*/
+/*member: asyncMethod:[exact=_Future|powerset=0]*/
 asyncMethod() async {}
 
-/*member: asyncMethodWithReturn:Union([exact=JSUInt31], [exact=_Future])*/
+/*member: asyncMethodWithReturn:Union([exact=JSUInt31|powerset=0], [exact=_Future|powerset=0], powerset: 0)*/
 asyncMethodWithReturn() async {
   return 0;
 }
 
-/*member: asyncStarMethod:[exact=_ControllerStream]*/
+/*member: asyncStarMethod:[exact=_ControllerStream|powerset=0]*/
 asyncStarMethod() async* {}
 
-/*member: syncStarMethod:[exact=_SyncStarIterable]*/
+/*member: syncStarMethod:[exact=_SyncStarIterable|powerset=0]*/
 syncStarMethod() sync* {}
diff --git a/pkg/compiler/test/inference/data/await.dart b/pkg/compiler/test/inference/data/await.dart
index 96fcbc7..3966fd8 100644
--- a/pkg/compiler/test/inference/data/await.dart
+++ b/pkg/compiler/test/inference/data/await.dart
@@ -4,7 +4,7 @@
 
 import 'dart:async';
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   awaitOfFuture();
   awaitOfFutureWithLocal();
@@ -17,19 +17,19 @@
 // Await of Future.value.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _method1a:[null]*/
-_method1a(/*[subclass=JSInt]*/ o) {}
+/*member: _method1a:[null|powerset=1]*/
+_method1a(/*[subclass=JSInt|powerset=0]*/ o) {}
 
-/*member: awaitOfFuture:[exact=_Future]*/
+/*member: awaitOfFuture:[exact=_Future|powerset=0]*/
 awaitOfFuture() async {
   var future = Future.value(0);
   _method1a(await future);
 }
 
-/*member: _method1b:[null]*/
-_method1b(/*[subclass=JSInt]*/ o) {}
+/*member: _method1b:[null|powerset=1]*/
+_method1b(/*[subclass=JSInt|powerset=0]*/ o) {}
 
-/*member: awaitOfFutureWithLocal:[exact=_Future]*/
+/*member: awaitOfFutureWithLocal:[exact=_Future|powerset=0]*/
 awaitOfFutureWithLocal() async {
   var future = Future.value(0);
   var local = await future;
@@ -40,18 +40,18 @@
 // Await of int.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _method2a:[null]*/
-_method2a(/*[subclass=JSInt]*/ o) {}
+/*member: _method2a:[null|powerset=1]*/
+_method2a(/*[subclass=JSInt|powerset=0]*/ o) {}
 
-/*member: awaitOfInt:[exact=_Future]*/
+/*member: awaitOfInt:[exact=_Future|powerset=0]*/
 awaitOfInt() async {
   _method2a(await 0);
 }
 
-/*member: _method2b:[null]*/
-_method2b(/*[subclass=JSInt]*/ o) {}
+/*member: _method2b:[null|powerset=1]*/
+_method2b(/*[subclass=JSInt|powerset=0]*/ o) {}
 
-/*member: awaitOfIntWithLocal:[exact=_Future]*/
+/*member: awaitOfIntWithLocal:[exact=_Future|powerset=0]*/
 awaitOfIntWithLocal() async {
   var local = await 0;
   _method2b(local);
@@ -61,22 +61,22 @@
 // Await for of Stream.fromIterable.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _method3:[null]*/
+/*member: _method3:[null|powerset=1]*/
 _method3(
-  /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+  /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
   o,
 ) {}
 
-/*member: _method4:[null]*/
-_method4(/*[subclass=JSInt]*/ o) {}
+/*member: _method4:[null|powerset=1]*/
+_method4(/*[subclass=JSInt|powerset=0]*/ o) {}
 
-/*member: awaitForOfStream:[exact=_Future]*/
+/*member: awaitForOfStream:[exact=_Future|powerset=0]*/
 awaitForOfStream() async {
   var list = [0];
   _method3(list);
   var stream = Stream.fromIterable(list);
-  /*current: [exact=_StreamIterator]*/
-  /*moveNext: [exact=_StreamIterator]*/
+  /*current: [exact=_StreamIterator|powerset=0]*/
+  /*moveNext: [exact=_StreamIterator|powerset=0]*/
   await for (var local in stream) {
     _method4(local);
   }
diff --git a/pkg/compiler/test/inference/data/break_continue.dart b/pkg/compiler/test/inference/data/break_continue.dart
index e03da61..91bfc64 100644
--- a/pkg/compiler/test/inference/data/break_continue.dart
+++ b/pkg/compiler/test/inference/data/break_continue.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   breakInWhile();
   noBreakInWhile();
@@ -18,8 +18,8 @@
 // A break statement in a while loop.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _breakInWhile:Union([exact=JSString], [exact=JSUInt31])*/
-_breakInWhile(/*[exact=JSBool]*/ b) {
+/*member: _breakInWhile:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_breakInWhile(/*[exact=JSBool|powerset=0]*/ b) {
   dynamic local = 42;
   while (b) {
     if (b) {
@@ -31,7 +31,7 @@
   return local;
 }
 
-/*member: breakInWhile:[null]*/
+/*member: breakInWhile:[null|powerset=1]*/
 breakInWhile() {
   _breakInWhile(true);
   _breakInWhile(false);
@@ -41,8 +41,8 @@
 // The while loop above _without_ the break statement.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _noBreakInWhile:[exact=JSUInt31]*/
-_noBreakInWhile(/*[exact=JSBool]*/ b) {
+/*member: _noBreakInWhile:[exact=JSUInt31|powerset=0]*/
+_noBreakInWhile(/*[exact=JSBool|powerset=0]*/ b) {
   dynamic local = 42;
   while (b) {
     if (b) {
@@ -53,7 +53,7 @@
   return local;
 }
 
-/*member: noBreakInWhile:[null]*/
+/*member: noBreakInWhile:[null|powerset=1]*/
 noBreakInWhile() {
   _noBreakInWhile(true);
   _noBreakInWhile(false);
@@ -63,11 +63,12 @@
 // A continue statement in a while loop.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _continueInWhile:Union([exact=JSString], [exact=JSUInt31])*/
-_continueInWhile(/*[exact=JSBool]*/ b) {
+/*member: _continueInWhile:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_continueInWhile(/*[exact=JSBool|powerset=0]*/ b) {
   dynamic local = 42;
   while (b) {
-    local /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ + null;
+    local /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ +
+        null;
     if (b) {
       local = '';
       continue;
@@ -77,7 +78,7 @@
   return local;
 }
 
-/*member: continueInWhile:[null]*/
+/*member: continueInWhile:[null|powerset=1]*/
 continueInWhile() {
   _continueInWhile(true);
   _continueInWhile(false);
@@ -87,11 +88,11 @@
 // The while loop above _without_ the continue statement.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _noContinueInWhile:[exact=JSUInt31]*/
-_noContinueInWhile(/*[exact=JSBool]*/ b) {
+/*member: _noContinueInWhile:[exact=JSUInt31|powerset=0]*/
+_noContinueInWhile(/*[exact=JSBool|powerset=0]*/ b) {
   dynamic local = 42;
   while (b) {
-    local /*invoke: [exact=JSUInt31]*/ + null;
+    local /*invoke: [exact=JSUInt31|powerset=0]*/ + null;
     if (b) {
       local = '';
     }
@@ -100,7 +101,7 @@
   return local;
 }
 
-/*member: noContinueInWhile:[null]*/
+/*member: noContinueInWhile:[null|powerset=1]*/
 noContinueInWhile() {
   _noContinueInWhile(true);
   _noContinueInWhile(false);
@@ -110,8 +111,8 @@
 // A conditional break statement in a labeled statement.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _breakInIf:Union([exact=JSString], [exact=JSUInt31])*/
-_breakInIf(/*[exact=JSBool]*/ b) {
+/*member: _breakInIf:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_breakInIf(/*[exact=JSBool|powerset=0]*/ b) {
   dynamic local = 42;
   label:
   {
@@ -124,7 +125,7 @@
   return local;
 }
 
-/*member: breakInIf:[null]*/
+/*member: breakInIf:[null|powerset=1]*/
 breakInIf() {
   _breakInIf(true);
   _breakInIf(false);
@@ -134,8 +135,8 @@
 // The "labeled statement" above _without_ the break statement.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _noBreakInIf:[exact=JSUInt31]*/
-_noBreakInIf(/*[exact=JSBool]*/ b) {
+/*member: _noBreakInIf:[exact=JSUInt31|powerset=0]*/
+_noBreakInIf(/*[exact=JSBool|powerset=0]*/ b) {
   dynamic local = 42;
   {
     local = '';
@@ -145,7 +146,7 @@
   return local;
 }
 
-/*member: noBreakInIf:[null]*/
+/*member: noBreakInIf:[null|powerset=1]*/
 noBreakInIf() {
   _noBreakInIf(true);
   _noBreakInIf(false);
@@ -155,7 +156,7 @@
 // An unconditional break statement in a labeled statement.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: breakInBlock:Value([exact=JSString], value: "")*/
+/*member: breakInBlock:Value([exact=JSString|powerset=0], value: "", powerset: 0)*/
 breakInBlock() {
   dynamic local = 42;
   label:
@@ -171,7 +172,7 @@
 // The "labeled statement" above _without_ the break statement.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: noBreakInBlock:Value([exact=JSBool], value: false)*/
+/*member: noBreakInBlock:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
 noBreakInBlock() {
   dynamic local = 42;
   label:
diff --git a/pkg/compiler/test/inference/data/call_in_loop.dart b/pkg/compiler/test/inference/data/call_in_loop.dart
index b07d876..0e521c5 100644
--- a/pkg/compiler/test/inference/data/call_in_loop.dart
+++ b/pkg/compiler/test/inference/data/call_in_loop.dart
@@ -4,23 +4,23 @@
 
 /// Regression test for [ClosureCallSiteTypeInformation] in loops.
 
-/*member: Class.:[exact=Class]*/
+/*member: Class.:[exact=Class|powerset=0]*/
 class Class<T> {
-  /*member: Class.method:[null]*/
+  /*member: Class.method:[null|powerset=1]*/
   method() {
-    /*iterator: Container([exact=JSExtendableArray], element: [empty], length: 0)*/
-    /*current: [exact=ArrayIterator]*/
-    /*moveNext: [exact=ArrayIterator]*/
+    /*iterator: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
+    /*current: [exact=ArrayIterator|powerset=0]*/
+    /*moveNext: [exact=ArrayIterator|powerset=0]*/
     for (var a in []) {
-      (T as dynamic) /*invoke: [exact=_Type]*/ (a);
-      (Object as dynamic) /*invoke: [exact=_Type]*/ ();
-      (this as dynamic) /*invoke: [exact=Class]*/ ();
-      (1 as dynamic) /*invoke: [exact=JSUInt31]*/ ();
+      (T as dynamic) /*invoke: [exact=_Type|powerset=0]*/ (a);
+      (Object as dynamic) /*invoke: [exact=_Type|powerset=0]*/ ();
+      (this as dynamic) /*invoke: [exact=Class|powerset=0]*/ ();
+      (1 as dynamic) /*invoke: [exact=JSUInt31|powerset=0]*/ ();
     }
   }
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
-  Class(). /*invoke: [exact=Class]*/ method();
+  Class(). /*invoke: [exact=Class|powerset=0]*/ method();
 }
diff --git a/pkg/compiler/test/inference/data/call_method_function_typed_value.dart b/pkg/compiler/test/inference/data/call_method_function_typed_value.dart
index ec90c7e..0063a63 100644
--- a/pkg/compiler/test/inference/data/call_method_function_typed_value.dart
+++ b/pkg/compiler/test/inference/data/call_method_function_typed_value.dart
@@ -6,26 +6,28 @@
 
 import "package:expect/expect.dart";
 
-/*member: f:[subclass=JSInt]*/
+/*member: f:[subclass=JSInt|powerset=0]*/
 int f(
   int
-  /*spec.[null|subclass=Object]*/
-  /*prod.[subclass=JSInt]*/
+  /*spec.[null|subclass=Object|powerset=1]*/
+  /*prod.[subclass=JSInt|powerset=0]*/
   i,
-) => 2 /*invoke: [exact=JSUInt31]*/ * i;
+) => 2 /*invoke: [exact=JSUInt31|powerset=0]*/ * i;
 
 typedef int IntToInt(int x);
 
-/*member: test:[null]*/
-test(/*[null|subclass=Object]*/ a, /*[subclass=Closure]*/ b) =>
-    Expect.identical(a, b);
+/*member: test:[null|powerset=1]*/
+test(
+  /*[null|subclass=Object|powerset=1]*/ a,
+  /*[subclass=Closure|powerset=0]*/ b,
+) => Expect.identical(a, b);
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   // It is possible to use `.call` on a function-typed value (even though it is
   // redundant).  Similarly, it is possible to tear off `.call` on a
   // function-typed value (but it is a no-op).
   IntToInt f2 = f;
 
-  test(f2. /*[subclass=Closure]*/ call, f);
+  test(f2. /*[subclass=Closure|powerset=0]*/ call, f);
 }
diff --git a/pkg/compiler/test/inference/data/call_site.dart b/pkg/compiler/test/inference/data/call_site.dart
index 5337b22..1dfc929 100644
--- a/pkg/compiler/test/inference/data/call_site.dart
+++ b/pkg/compiler/test/inference/data/call_site.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   test1();
   test2();
@@ -25,291 +25,301 @@
   test19();
 }
 
-/*member: A1.:[exact=A1]*/
+/*member: A1.:[exact=A1|powerset=0]*/
 class A1 {
-  /*member: A1.x1:Value([exact=JSString], value: "s")*/
-  x1(/*Value([exact=JSString], value: "s")*/ p) => p;
+  /*member: A1.x1:Value([exact=JSString|powerset=0], value: "s", powerset: 0)*/
+  x1(/*Value([exact=JSString|powerset=0], value: "s", powerset: 0)*/ p) => p;
 }
 
-/*member: test1:[null]*/
+/*member: test1:[null|powerset=1]*/
 test1() {
-  A1(). /*invoke: [exact=A1]*/ x1("s");
+  A1(). /*invoke: [exact=A1|powerset=0]*/ x1("s");
 }
 
-/*member: A2.:[exact=A2]*/
+/*member: A2.:[exact=A2|powerset=0]*/
 class A2 {
-  /*member: A2.x2:[exact=JSUInt31]*/
-  x2(/*[exact=JSUInt31]*/ p) => p;
+  /*member: A2.x2:[exact=JSUInt31|powerset=0]*/
+  x2(/*[exact=JSUInt31|powerset=0]*/ p) => p;
 }
 
-/*member: test2:[null]*/
+/*member: test2:[null|powerset=1]*/
 test2() {
-  A2(). /*invoke: [exact=A2]*/ x2(1);
+  A2(). /*invoke: [exact=A2|powerset=0]*/ x2(1);
 }
 
-/*member: A3.:[exact=A3]*/
+/*member: A3.:[exact=A3|powerset=0]*/
 class A3 {
-  /*member: A3.x3:[empty]*/
-  x3(/*[subclass=JSInt]*/ p) => /*invoke: [exact=A3]*/
-      x3(p /*invoke: [subclass=JSInt]*/ - 1);
+  /*member: A3.x3:[empty|powerset=0]*/
+  x3(/*[subclass=JSInt|powerset=0]*/ p) => /*invoke: [exact=A3|powerset=0]*/
+      x3(p /*invoke: [subclass=JSInt|powerset=0]*/ - 1);
 }
 
-/*member: test3:[null]*/
+/*member: test3:[null|powerset=1]*/
 test3() {
-  A3(). /*invoke: [exact=A3]*/ x3(1);
+  A3(). /*invoke: [exact=A3|powerset=0]*/ x3(1);
 }
 
-/*member: A4.:[exact=A4]*/
+/*member: A4.:[exact=A4|powerset=0]*/
 class A4 {
-  /*member: A4.x4:[empty]*/
-  x4(/*[subclass=JSNumber]*/ p) => /*invoke: [exact=A4]*/
-      x4(p /*invoke: [subclass=JSNumber]*/ - 1);
+  /*member: A4.x4:[empty|powerset=0]*/
+  x4(/*[subclass=JSNumber|powerset=0]*/ p) => /*invoke: [exact=A4|powerset=0]*/
+      x4(p /*invoke: [subclass=JSNumber|powerset=0]*/ - 1);
 }
 
-/*member: test4:[null]*/
+/*member: test4:[null|powerset=1]*/
 test4() {
-  A4(). /*invoke: [exact=A4]*/ x4(1.5);
+  A4(). /*invoke: [exact=A4|powerset=0]*/ x4(1.5);
 }
 
-/*member: A5.:[exact=A5]*/
+/*member: A5.:[exact=A5|powerset=0]*/
 class A5 {
-  /*member: A5.x5:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
-  x5(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ p) => p;
+  /*member: A5.x5:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+  x5(
+    /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p,
+  ) => p;
 }
 
-/*member: test5:[null]*/
+/*member: test5:[null|powerset=1]*/
 test5() {
-  A5(). /*invoke: [exact=A5]*/ x5(1);
-  A5(). /*invoke: [exact=A5]*/ x5(1.5);
+  A5(). /*invoke: [exact=A5|powerset=0]*/ x5(1);
+  A5(). /*invoke: [exact=A5|powerset=0]*/ x5(1.5);
 }
 
-/*member: A6.:[exact=A6]*/
+/*member: A6.:[exact=A6|powerset=0]*/
 class A6 {
-  /*member: A6.x6:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
-  x6(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ p) => p;
+  /*member: A6.x6:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+  x6(
+    /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p,
+  ) => p;
 }
 
-/*member: test6:[null]*/
+/*member: test6:[null|powerset=1]*/
 test6() {
-  A6(). /*invoke: [exact=A6]*/ x6(1.5);
-  A6(). /*invoke: [exact=A6]*/ x6(1);
+  A6(). /*invoke: [exact=A6|powerset=0]*/ x6(1.5);
+  A6(). /*invoke: [exact=A6|powerset=0]*/ x6(1);
 }
 
-/*member: A7.:[exact=A7]*/
+/*member: A7.:[exact=A7|powerset=0]*/
 class A7 {
-  /*member: A7.x7:[empty]*/
-  x7(/*Union([exact=JSString], [exact=JSUInt31])*/ p) => /*invoke: [exact=A7]*/
-      x7("x");
+  /*member: A7.x7:[empty|powerset=0]*/
+  x7(
+    /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p,
+  ) => /*invoke: [exact=A7|powerset=0]*/ x7("x");
 }
 
-/*member: test7:[null]*/
+/*member: test7:[null|powerset=1]*/
 test7() {
-  A7(). /*invoke: [exact=A7]*/ x7(1);
+  A7(). /*invoke: [exact=A7|powerset=0]*/ x7(1);
 }
 
-/*member: A8.:[exact=A8]*/
+/*member: A8.:[exact=A8|powerset=0]*/
 class A8 {
-  /*member: A8.x8:[empty]*/
-  x8(/*Union([exact=JSString], [exact=JsLinkedHashMap])*/ p) =>
-  /*invoke: [exact=A8]*/ x8("x");
-}
-
-/*member: test8:[null]*/
-test8() {
-  A8(). /*invoke: [exact=A8]*/ x8({});
-}
-
-/*member: A9.:[exact=A9]*/
-class A9 {
-  /*member: A9.x9:[empty]*/
-  x9(
-    /*[exact=JSUInt31]*/ p1,
-    /*Union([exact=JSString], [exact=JSUInt31])*/ p2,
-    /*Union([exact=JSUInt31], [exact=JsLinkedHashMap])*/ p3,
+  /*member: A8.x8:[empty|powerset=0]*/
+  x8(
+    /*Union([exact=JSString|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 0)*/ p,
   ) =>
-  /*invoke: [exact=A9]*/ x9(p1, "x", {});
+  /*invoke: [exact=A8|powerset=0]*/ x8("x");
 }
 
-/*member: test9:[null]*/
+/*member: test8:[null|powerset=1]*/
+test8() {
+  A8(). /*invoke: [exact=A8|powerset=0]*/ x8({});
+}
+
+/*member: A9.:[exact=A9|powerset=0]*/
+class A9 {
+  /*member: A9.x9:[empty|powerset=0]*/
+  x9(
+    /*[exact=JSUInt31|powerset=0]*/ p1,
+    /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p2,
+    /*Union([exact=JSUInt31|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 0)*/ p3,
+  ) =>
+  /*invoke: [exact=A9|powerset=0]*/ x9(p1, "x", {});
+}
+
+/*member: test9:[null|powerset=1]*/
 test9() {
-  A9(). /*invoke: [exact=A9]*/ x9(1, 2, 3);
+  A9(). /*invoke: [exact=A9|powerset=0]*/ x9(1, 2, 3);
 }
 
-/*member: A10.:[exact=A10]*/
+/*member: A10.:[exact=A10|powerset=0]*/
 class A10 {
-  /*member: A10.x10:[empty]*/
+  /*member: A10.x10:[empty|powerset=0]*/
   x10(
-    /*[exact=JSUInt31]*/ p1,
-    /*[exact=JSUInt31]*/ p2,
-  ) => /*invoke: [exact=A10]*/ x10(p1, p2);
+    /*[exact=JSUInt31|powerset=0]*/ p1,
+    /*[exact=JSUInt31|powerset=0]*/ p2,
+  ) => /*invoke: [exact=A10|powerset=0]*/ x10(p1, p2);
 }
 
-/*member: test10:[null]*/
+/*member: test10:[null|powerset=1]*/
 test10() {
-  A10(). /*invoke: [exact=A10]*/ x10(1, 2);
+  A10(). /*invoke: [exact=A10|powerset=0]*/ x10(1, 2);
 }
 
-/*member: A11.:[exact=A11]*/
+/*member: A11.:[exact=A11|powerset=0]*/
 class A11 {
-  /*member: A11.x11:[empty]*/
+  /*member: A11.x11:[empty|powerset=0]*/
   x11(
-    /*[exact=JSUInt31]*/ p1,
-    /*[exact=JSUInt31]*/ p2,
-  ) => /*invoke: [exact=A11]*/ x11(p1, p2);
+    /*[exact=JSUInt31|powerset=0]*/ p1,
+    /*[exact=JSUInt31|powerset=0]*/ p2,
+  ) => /*invoke: [exact=A11|powerset=0]*/ x11(p1, p2);
 }
 
-/*member: f11:[null]*/
-void f11(/*[null]*/ p) {
-  p. /*invoke: [null]*/ x11("x", "y");
+/*member: f11:[null|powerset=1]*/
+void f11(/*[null|powerset=1]*/ p) {
+  p. /*invoke: [null|powerset=1]*/ x11("x", "y");
 }
 
-/*member: test11:[null]*/
+/*member: test11:[null|powerset=1]*/
 test11() {
   f11(null);
-  A11(). /*invoke: [exact=A11]*/ x11(1, 2);
+  A11(). /*invoke: [exact=A11|powerset=0]*/ x11(1, 2);
 }
 
-/*member: A12.:[exact=A12]*/
+/*member: A12.:[exact=A12|powerset=0]*/
 class A12 {
-  /*member: A12.x12:[empty]*/
+  /*member: A12.x12:[empty|powerset=0]*/
   x12(
-    /*Union([exact=JSString], [exact=JSUInt31])*/ p1,
-    /*Union([exact=JSString], [exact=JSUInt31])*/ p2,
+    /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p1,
+    /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p2,
   ) =>
-  /*invoke: [exact=A12]*/ x12(1, 2);
+  /*invoke: [exact=A12|powerset=0]*/ x12(1, 2);
 }
 
-/*member: test12:[null]*/
+/*member: test12:[null|powerset=1]*/
 test12() {
-  A12(). /*invoke: [exact=A12]*/ x12("x", "y");
+  A12(). /*invoke: [exact=A12|powerset=0]*/ x12("x", "y");
 }
 
-/*member: A13.:[exact=A13]*/
+/*member: A13.:[exact=A13|powerset=0]*/
 class A13 {
-  /*member: A13.x13:[exact=JSUInt31]*/
+  /*member: A13.x13:[exact=JSUInt31|powerset=0]*/
   x13(
-    /*Value([exact=JSString], value: "x")*/ p1, [
-    /*[exact=JSUInt31]*/ p2 = 1,
+    /*Value([exact=JSString|powerset=0], value: "x", powerset: 0)*/ p1, [
+    /*[exact=JSUInt31|powerset=0]*/ p2 = 1,
   ]) => 1;
 }
 
-/*member: test13:[null]*/
+/*member: test13:[null|powerset=1]*/
 test13() {
-  A13(). /*invoke: [exact=A13]*/ x13("x", 1);
-  A13(). /*invoke: [exact=A13]*/ x13("x");
+  A13(). /*invoke: [exact=A13|powerset=0]*/ x13("x", 1);
+  A13(). /*invoke: [exact=A13|powerset=0]*/ x13("x");
 }
 
-/*member: A14.:[exact=A14]*/
+/*member: A14.:[exact=A14|powerset=0]*/
 class A14 {
-  /*member: A14.x14:[exact=JSUInt31]*/
-  x14(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ p) => 1;
+  /*member: A14.x14:[exact=JSUInt31|powerset=0]*/
+  x14(
+    /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p,
+  ) => 1;
 }
 
-/*member: f14:[exact=JSUInt31]*/
-f14(/*[exact=A14]*/ p) => p. /*invoke: [exact=A14]*/ x14(2.2);
+/*member: f14:[exact=JSUInt31|powerset=0]*/
+f14(/*[exact=A14|powerset=0]*/ p) =>
+    p. /*invoke: [exact=A14|powerset=0]*/ x14(2.2);
 
-/*member: test14:[null]*/
+/*member: test14:[null|powerset=1]*/
 test14() {
-  A14(). /*invoke: [exact=A14]*/ x14(1);
+  A14(). /*invoke: [exact=A14|powerset=0]*/ x14(1);
   f14(new A14());
 }
 
-/*member: A15.:[exact=A15]*/
+/*member: A15.:[exact=A15|powerset=0]*/
 class A15 {
-  /*member: A15.x15:[exact=JSUInt31]*/
+  /*member: A15.x15:[exact=JSUInt31|powerset=0]*/
   x15(
-    /*[exact=JSUInt31]*/ p1, [
-    /*Value([exact=JSString], value: "s")*/ p2 = "s",
+    /*[exact=JSUInt31|powerset=0]*/ p1, [
+    /*Value([exact=JSString|powerset=0], value: "s", powerset: 0)*/ p2 = "s",
   ]) {
-    p2. /*Value([exact=JSString], value: "s")*/ length;
+    p2. /*Value([exact=JSString|powerset=0], value: "s", powerset: 0)*/ length;
     return 1;
   }
 }
 
-/*member: test15:[null]*/
+/*member: test15:[null|powerset=1]*/
 test15() {
-  A15(). /*invoke: [exact=A15]*/ x15(1);
+  A15(). /*invoke: [exact=A15|powerset=0]*/ x15(1);
 }
 
-/*member: A16.:[exact=A16]*/
+/*member: A16.:[exact=A16|powerset=0]*/
 class A16 {
-  /*member: A16.x16:[exact=JSUInt31]*/
+  /*member: A16.x16:[exact=JSUInt31|powerset=0]*/
   x16(
-    /*Value([exact=JSString], value: "x")*/ p1, [
-    /*[exact=JSBool]*/ p2 = true,
+    /*Value([exact=JSString|powerset=0], value: "x", powerset: 0)*/ p1, [
+    /*[exact=JSBool|powerset=0]*/ p2 = true,
   ]) => 1;
 }
 
-/*member: f16:[empty]*/
-f16(/*[null]*/ p) => p. /*invoke: [null]*/ a("x");
+/*member: f16:[empty|powerset=0]*/
+f16(/*[null|powerset=1]*/ p) => p. /*invoke: [null|powerset=1]*/ a("x");
 
-/*member: test16:[null]*/
+/*member: test16:[null|powerset=1]*/
 test16() {
-  A16(). /*invoke: [exact=A16]*/ x16("x");
-  A16(). /*invoke: [exact=A16]*/ x16("x", false);
+  A16(). /*invoke: [exact=A16|powerset=0]*/ x16("x");
+  A16(). /*invoke: [exact=A16|powerset=0]*/ x16("x", false);
   f16(null);
 }
 
-/*member: A17.:[exact=A17]*/
+/*member: A17.:[exact=A17|powerset=0]*/
 class A17 {
-  /*member: A17.x17:[exact=JSUInt31]*/
+  /*member: A17.x17:[exact=JSUInt31|powerset=0]*/
   x17(
-    /*[exact=JSUInt31]*/ p1, [
-    /*[exact=JSUInt31]*/ p2 = 1,
-    /*[exact=JSString]*/ p3 = "s",
+    /*[exact=JSUInt31|powerset=0]*/ p1, [
+    /*[exact=JSUInt31|powerset=0]*/ p2 = 1,
+    /*[exact=JSString|powerset=0]*/ p3 = "s",
   ]) => 1;
 }
 
-/*member: test17:[null]*/
+/*member: test17:[null|powerset=1]*/
 test17() {
-  A17(). /*invoke: [exact=A17]*/ x17(1);
-  A17(). /*invoke: [exact=A17]*/ x17(1, 2);
-  A17(). /*invoke: [exact=A17]*/ x17(1, 2, "x");
+  A17(). /*invoke: [exact=A17|powerset=0]*/ x17(1);
+  A17(). /*invoke: [exact=A17|powerset=0]*/ x17(1, 2);
+  A17(). /*invoke: [exact=A17|powerset=0]*/ x17(1, 2, "x");
   dynamic a = A17();
-  a. /*invoke: [exact=A17]*/ x17(1, p2: 2);
+  a. /*invoke: [exact=A17|powerset=0]*/ x17(1, p2: 2);
   dynamic b = A17();
-  b. /*invoke: [exact=A17]*/ x17(1, p3: "x");
+  b. /*invoke: [exact=A17|powerset=0]*/ x17(1, p3: "x");
   dynamic c = A17();
-  c. /*invoke: [exact=A17]*/ x17(1, p3: "x", p2: 2);
+  c. /*invoke: [exact=A17|powerset=0]*/ x17(1, p3: "x", p2: 2);
   dynamic d = A17();
-  d. /*invoke: [exact=A17]*/ x17(1, p2: 2, p3: "x");
+  d. /*invoke: [exact=A17|powerset=0]*/ x17(1, p2: 2, p3: "x");
 }
 
-/*member: A18.:[exact=A18]*/
+/*member: A18.:[exact=A18|powerset=0]*/
 class A18 {
-  /*member: A18.x18:[exact=JSUInt31]*/
+  /*member: A18.x18:[exact=JSUInt31|powerset=0]*/
   x18(
-    /*[exact=JSUInt31]*/ p1, [
-    /*[exact=JSBool]*/ p2 = 1,
-    /*[exact=JSNumNotInt]*/ p3 = "s",
+    /*[exact=JSUInt31|powerset=0]*/ p1, [
+    /*[exact=JSBool|powerset=0]*/ p2 = 1,
+    /*[exact=JSNumNotInt|powerset=0]*/ p3 = "s",
   ]) => 1;
 }
 
-/*member: test18:[null]*/
+/*member: test18:[null|powerset=1]*/
 test18() {
-  A18(). /*invoke: [exact=A18]*/ x18(1, true, 1.1);
-  A18(). /*invoke: [exact=A18]*/ x18(1, false, 2.2);
+  A18(). /*invoke: [exact=A18|powerset=0]*/ x18(1, true, 1.1);
+  A18(). /*invoke: [exact=A18|powerset=0]*/ x18(1, false, 2.2);
   dynamic a = A18();
-  a. /*invoke: [exact=A18]*/ x18(1, p3: 3.3, p2: true);
+  a. /*invoke: [exact=A18|powerset=0]*/ x18(1, p3: 3.3, p2: true);
   dynamic b = A18();
-  b. /*invoke: [exact=A18]*/ x18(1, p2: false, p3: 4.4);
+  b. /*invoke: [exact=A18|powerset=0]*/ x18(1, p2: false, p3: 4.4);
 }
 
-/*member: A19.:[exact=A19]*/
+/*member: A19.:[exact=A19|powerset=0]*/
 class A19 {
-  /*member: A19.x19:[empty]*/
+  /*member: A19.x19:[empty|powerset=0]*/
   x19(
-    /*Union([exact=JSString], [exact=JSUInt31])*/ p1,
-    /*Union([exact=JSString], [exact=JSUInt31])*/ p2,
+    /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p1,
+    /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p2,
   ) =>
-  /*invoke: [subclass=A19]*/ x19(p1, p2);
+  /*invoke: [subclass=A19|powerset=0]*/ x19(p1, p2);
 }
 
-/*member: B19.:[exact=B19]*/
+/*member: B19.:[exact=B19|powerset=0]*/
 class B19 extends A19 {}
 
-/*member: test19:[null]*/
+/*member: test19:[null|powerset=1]*/
 test19() {
-  B19(). /*invoke: [exact=B19]*/ x19("a", "b");
-  A19(). /*invoke: [exact=A19]*/ x19(1, 2);
+  B19(). /*invoke: [exact=B19|powerset=0]*/ x19("a", "b");
+  A19(). /*invoke: [exact=A19|powerset=0]*/ x19(1, 2);
 }
diff --git a/pkg/compiler/test/inference/data/catch.dart b/pkg/compiler/test/inference/data/catch.dart
index d87f53a..759b322 100644
--- a/pkg/compiler/test/inference/data/catch.dart
+++ b/pkg/compiler/test/inference/data/catch.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   catchUntyped();
   catchTyped();
@@ -13,7 +13,7 @@
 /// Untyped catch clause.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: catchUntyped:[subclass=Object]*/
+/*member: catchUntyped:[subclass=Object|powerset=0]*/
 catchUntyped() {
   dynamic local = 0;
   try {} catch (e) {
@@ -26,7 +26,7 @@
 /// Typed catch clause.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: catchTyped:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: catchTyped:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 catchTyped() {
   dynamic local = 0;
   try {} on String catch (e) {
@@ -39,7 +39,7 @@
 /// Catch clause with stack trace.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: catchStackTrace:[null|subclass=Object]*/
+/*member: catchStackTrace:[null|subclass=Object|powerset=1]*/
 catchStackTrace() {
   dynamic local = 0;
   try {} catch (_, s) {
diff --git a/pkg/compiler/test/inference/data/closure.dart b/pkg/compiler/test/inference/data/closure.dart
index bc754a0..6d7337d 100644
--- a/pkg/compiler/test/inference/data/closure.dart
+++ b/pkg/compiler/test/inference/data/closure.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   returnInClosure();
   accessInClosure();
@@ -17,139 +17,139 @@
   postfixInClosure();
 }
 
-/*member: returnInClosure:[exact=JSUInt31]*/
+/*member: returnInClosure:[exact=JSUInt31|powerset=0]*/
 returnInClosure() {
-  /*[null|subclass=Object]*/
-  local(/*[subclass=Closure]*/ f) => f();
+  /*[null|subclass=Object|powerset=1]*/
+  local(/*[subclass=Closure|powerset=0]*/ f) => f();
 
   int lines = 0;
-  local(/*[exact=JSUInt31]*/ () {
+  local(/*[exact=JSUInt31|powerset=0]*/ () {
     return lines;
   });
   return lines;
 }
 
-/*member: accessInClosure:[exact=JSUInt31]*/
+/*member: accessInClosure:[exact=JSUInt31|powerset=0]*/
 accessInClosure() {
-  /*[null|subclass=Object]*/
-  local(/*[subclass=Closure]*/ f) => f();
+  /*[null|subclass=Object|powerset=1]*/
+  local(/*[subclass=Closure|powerset=0]*/ f) => f();
 
   int lines = 0;
-  local(/*[exact=JSBool]*/ () {
-    return lines. /*[exact=JSUInt31]*/ isEven;
+  local(/*[exact=JSBool|powerset=0]*/ () {
+    return lines. /*[exact=JSUInt31|powerset=0]*/ isEven;
   });
   return lines;
 }
 
-/*member: invokeInClosure:[exact=JSUInt31]*/
+/*member: invokeInClosure:[exact=JSUInt31|powerset=0]*/
 invokeInClosure() {
-  /*[null|subclass=Object]*/
-  local(/*[subclass=Closure]*/ f) => f();
+  /*[null|subclass=Object|powerset=1]*/
+  local(/*[subclass=Closure|powerset=0]*/ f) => f();
 
   int lines = 0;
-  local(/*[subclass=JSNumber]*/ () {
-    return lines. /*invoke: [exact=JSUInt31]*/ ceilToDouble();
+  local(/*[subclass=JSNumber|powerset=0]*/ () {
+    return lines. /*invoke: [exact=JSUInt31|powerset=0]*/ ceilToDouble();
   });
   return lines;
 }
 
-/*member: operatorInClosure:[exact=JSUInt31]*/
+/*member: operatorInClosure:[exact=JSUInt31|powerset=0]*/
 operatorInClosure() {
-  /*[null|subclass=Object]*/
-  local(/*[subclass=Closure]*/ f) => f();
+  /*[null|subclass=Object|powerset=1]*/
+  local(/*[subclass=Closure|powerset=0]*/ f) => f();
 
   int lines = 0;
-  local(/*[subclass=JSInt]*/ () {
-    return lines /*invoke: [exact=JSUInt31]*/ - 42;
+  local(/*[subclass=JSInt|powerset=0]*/ () {
+    return lines /*invoke: [exact=JSUInt31|powerset=0]*/ - 42;
   });
   return lines;
 }
 
-/*member: assignInClosure:[subclass=JSInt]*/
+/*member: assignInClosure:[subclass=JSInt|powerset=0]*/
 assignInClosure() {
-  /*[null|subclass=Object]*/
-  local(/*[subclass=Closure]*/ f) => f();
+  /*[null|subclass=Object|powerset=1]*/
+  local(/*[subclass=Closure|powerset=0]*/ f) => f();
 
   int lines = 0;
-  local(/*[null]*/ () {
+  local(/*[null|powerset=1]*/ () {
     lines = -42;
   });
   return lines;
 }
 
-/*member: assignInTwoClosures:[subclass=JSInt]*/
+/*member: assignInTwoClosures:[subclass=JSInt|powerset=0]*/
 assignInTwoClosures() {
-  /*[null|subclass=Object]*/
-  local(/*[subclass=Closure]*/ f) => f();
+  /*[null|subclass=Object|powerset=1]*/
+  local(/*[subclass=Closure|powerset=0]*/ f) => f();
 
   int lines = 0;
-  local(/*[null]*/ () {
+  local(/*[null|powerset=1]*/ () {
     lines = -42;
   });
-  local(/*[null]*/ () {
+  local(/*[null|powerset=1]*/ () {
     lines = -87;
   });
   return lines;
 }
 
-/*member: accessAssignInClosure:[subclass=JSInt]*/
+/*member: accessAssignInClosure:[subclass=JSInt|powerset=0]*/
 accessAssignInClosure() {
-  /*[null|subclass=Object]*/
-  local(/*[subclass=Closure]*/ f) => f();
+  /*[null|subclass=Object|powerset=1]*/
+  local(/*[subclass=Closure|powerset=0]*/ f) => f();
 
   int lines = 0;
-  local(/*[null]*/ () {
-    lines = lines /*invoke: [subclass=JSInt]*/ - 42;
+  local(/*[null|powerset=1]*/ () {
+    lines = lines /*invoke: [subclass=JSInt|powerset=0]*/ - 42;
   });
   return lines;
 }
 
-/*member: accessBeforeAssignInClosure:[exact=JSUInt31]*/
+/*member: accessBeforeAssignInClosure:[exact=JSUInt31|powerset=0]*/
 accessBeforeAssignInClosure() {
-  /*[null|subclass=Object]*/
-  local(/*[subclass=Closure]*/ f) => f();
+  /*[null|subclass=Object|powerset=1]*/
+  local(/*[subclass=Closure|powerset=0]*/ f) => f();
 
   int lines = 0;
-  local(/*[null]*/ () {
-    lines /*invoke: [exact=JSUInt31]*/ - 42;
+  local(/*[null|powerset=1]*/ () {
+    lines /*invoke: [exact=JSUInt31|powerset=0]*/ - 42;
     lines = 42;
   });
   return lines;
 }
 
-/*member: accessAfterAssignInClosure:[exact=JSUInt31]*/
+/*member: accessAfterAssignInClosure:[exact=JSUInt31|powerset=0]*/
 accessAfterAssignInClosure() {
-  /*[null|subclass=Object]*/
-  local(/*[subclass=Closure]*/ f) => f();
+  /*[null|subclass=Object|powerset=1]*/
+  local(/*[subclass=Closure|powerset=0]*/ f) => f();
 
   int lines = 0;
-  local(/*[subclass=JSInt]*/ () {
+  local(/*[subclass=JSInt|powerset=0]*/ () {
     lines = 42;
-    return lines /*invoke: [exact=JSUInt31]*/ - 42;
+    return lines /*invoke: [exact=JSUInt31|powerset=0]*/ - 42;
   });
   return lines;
 }
 
-/*member: compoundInClosure:[subclass=JSInt]*/
+/*member: compoundInClosure:[subclass=JSInt|powerset=0]*/
 compoundInClosure() {
-  /*[null|subclass=Object]*/
-  local(/*[subclass=Closure]*/ f) => f();
+  /*[null|subclass=Object|powerset=1]*/
+  local(/*[subclass=Closure|powerset=0]*/ f) => f();
 
   int lines = 0;
-  local(/*[null]*/ () {
-    lines /*invoke: [subclass=JSInt]*/ -= 42;
+  local(/*[null|powerset=1]*/ () {
+    lines /*invoke: [subclass=JSInt|powerset=0]*/ -= 42;
   });
   return lines;
 }
 
-/*member: postfixInClosure:[subclass=JSPositiveInt]*/
+/*member: postfixInClosure:[subclass=JSPositiveInt|powerset=0]*/
 postfixInClosure() {
-  /*[null|subclass=Object]*/
-  local(/*[subclass=Closure]*/ f) => f();
+  /*[null|subclass=Object|powerset=1]*/
+  local(/*[subclass=Closure|powerset=0]*/ f) => f();
 
   int lines = 0;
-  local(/*[null]*/ () {
-    lines /*invoke: [subclass=JSPositiveInt]*/ ++;
+  local(/*[null|powerset=1]*/ () {
+    lines /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++;
   });
   return lines;
 }
diff --git a/pkg/compiler/test/inference/data/closure2.dart b/pkg/compiler/test/inference/data/closure2.dart
index 37ff4dd..9dc3efc 100644
--- a/pkg/compiler/test/inference/data/closure2.dart
+++ b/pkg/compiler/test/inference/data/closure2.dart
@@ -2,78 +2,79 @@
 // 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.
 
-/*member: returnInt1:[exact=JSUInt31]*/
+/*member: returnInt1:[exact=JSUInt31|powerset=0]*/
 returnInt1() {
   var a = 42;
   // ignore: unused_local_variable
-  var f = /*[exact=JSUInt31]*/ () {
+  var f = /*[exact=JSUInt31|powerset=0]*/ () {
     return a;
   };
   return a;
 }
 
-/*member: returnDyn1:Union([exact=JSUInt31], [exact=JsLinkedHashMap])*/
+/*member: returnDyn1:Union([exact=JSUInt31|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 0)*/
 returnDyn1() {
   dynamic a = 42;
   // ignore: unused_local_variable
-  var f = /*[null]*/ () {
+  var f = /*[null|powerset=1]*/ () {
     a = {};
   };
   return a;
 }
 
-/*member: returnInt2:[exact=JSUInt31]*/
+/*member: returnInt2:[exact=JSUInt31|powerset=0]*/
 returnInt2() {
   var a = 42;
   // ignore: unused_local_variable
-  var f = /*[null]*/ () {
+  var f = /*[null|powerset=1]*/ () {
     a = 54;
   };
   return a;
 }
 
-/*member: returnDyn2:Union([exact=JSUInt31], [exact=JsLinkedHashMap])*/
+/*member: returnDyn2:Union([exact=JSUInt31|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 0)*/
 returnDyn2() {
   dynamic a = 42;
   // ignore: unused_local_variable
-  var f = /*[null]*/ () {
+  var f = /*[null|powerset=1]*/ () {
     a = 54;
   };
   // ignore: unused_local_variable
-  var g = /*[null]*/ () {
+  var g = /*[null|powerset=1]*/ () {
     a = {};
   };
   return a;
 }
 
-/*member: returnInt3:[exact=JSUInt31]*/
+/*member: returnInt3:[exact=JSUInt31|powerset=0]*/
 returnInt3() {
   var a = 42;
-  if (a /*invoke: [exact=JSUInt31]*/ == 53) {
+  if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 53) {
     // ignore: unused_local_variable
-    var f = /*[exact=JSUInt31]*/ () {
+    var f = /*[exact=JSUInt31|powerset=0]*/ () {
       return a;
     };
   }
   return a;
 }
 
-/*member: returnDyn3:Union([exact=JSUInt31], [exact=JsLinkedHashMap])*/
+/*member: returnDyn3:Union([exact=JSUInt31|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 0)*/
 returnDyn3() {
   dynamic a = 42;
-  if (a /*invoke: Union([exact=JSUInt31], [exact=JsLinkedHashMap])*/ == 53) {
+  if (a /*invoke: Union([exact=JSUInt31|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 0)*/ ==
+      53) {
     // ignore: unused_local_variable
-    var f = /*[null]*/ () {
+    var f = /*[null|powerset=1]*/ () {
       a = {};
     };
   }
   return a;
 }
 
-/*member: returnInt4:[exact=JSUInt31]*/
+/*member: returnInt4:[exact=JSUInt31|powerset=0]*/
 returnInt4() {
   var a = 42;
-  /*[exact=JSUInt31]*/
+  /*[exact=JSUInt31|powerset=0]*/
   g() {
     return a;
   }
@@ -81,11 +82,11 @@
   return g();
 }
 
-/*member: returnNum1:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: returnNum1:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 returnNum1() {
   dynamic a = 42.5;
   try {
-    /*[exact=JSUInt31]*/
+    /*[exact=JSUInt31|powerset=0]*/
     g() {
       dynamic b = {};
       b = 42;
@@ -97,16 +98,16 @@
   return a;
 }
 
-/*member: returnIntOrNull:[null|exact=JSUInt31]*/
+/*member: returnIntOrNull:[null|exact=JSUInt31|powerset=1]*/
 returnIntOrNull() {
-  /*iterator: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
-  /*current: [exact=ArrayIterator]*/
-  /*moveNext: [exact=ArrayIterator]*/
+  /*iterator: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
+  /*current: [exact=ArrayIterator|powerset=0]*/
+  /*moveNext: [exact=ArrayIterator|powerset=0]*/
   for (
   // ignore: unused_local_variable
   var b in [42]) {
     int? bar = 42;
-    /*[null|exact=JSUInt31]*/
+    /*[null|exact=JSUInt31|powerset=1]*/
     f() => bar;
     bar = null;
     return f();
@@ -114,17 +115,17 @@
   return 42;
 }
 
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
 class A {
-  /*member: A.foo:[exact=A]*/
+  /*member: A.foo:[exact=A|powerset=0]*/
   foo() {
-    /*[exact=A]*/
+    /*[exact=A|powerset=0]*/
     f() => this;
     return f();
   }
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   returnInt1();
   returnDyn1();
@@ -135,5 +136,5 @@
   returnInt4();
   returnNum1();
   returnIntOrNull();
-  A(). /*invoke: [exact=A]*/ foo();
+  A(). /*invoke: [exact=A|powerset=0]*/ foo();
 }
diff --git a/pkg/compiler/test/inference/data/closure_tracer.dart b/pkg/compiler/test/inference/data/closure_tracer.dart
index 0fab03e..0b23d5a 100644
--- a/pkg/compiler/test/inference/data/closure_tracer.dart
+++ b/pkg/compiler/test/inference/data/closure_tracer.dart
@@ -2,182 +2,185 @@
 // 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.
 
-/*member: testFunctionStatement:[null|exact=JSUInt31]*/
+/*member: testFunctionStatement:[null|exact=JSUInt31|powerset=1]*/
 testFunctionStatement() {
   var res;
-  /*[exact=JSUInt31]*/
-  closure(/*[exact=JSUInt31]*/ a) => res = a;
+  /*[exact=JSUInt31|powerset=0]*/
+  closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
   closure(42);
   return res;
 }
 
-/*member: testFunctionExpression:[null|exact=JSUInt31]*/
+/*member: testFunctionExpression:[null|exact=JSUInt31|powerset=1]*/
 testFunctionExpression() {
   var res;
-  var closure = /*[exact=JSUInt31]*/ (/*[exact=JSUInt31]*/ a) => res = a;
+  var closure = /*[exact=JSUInt31|powerset=0]*/
+      (/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
   closure(42);
   return res;
 }
 
-/*member: staticField:[null|subclass=Closure]*/
+/*member: staticField:[null|subclass=Closure|powerset=1]*/
 var staticField;
 
-/*member: testStoredInStatic:[null|exact=JSUInt31]*/
+/*member: testStoredInStatic:[null|exact=JSUInt31|powerset=1]*/
 testStoredInStatic() {
   var res;
-  /*[exact=JSUInt31]*/
-  closure(/*[exact=JSUInt31]*/ a) => res = a;
+  /*[exact=JSUInt31|powerset=0]*/
+  closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
   staticField = closure;
   staticField(42);
   return res;
 }
 
 class A {
-  /*member: A.field:[subclass=Closure]*/
+  /*member: A.field:[subclass=Closure|powerset=0]*/
   var field;
-  /*member: A.:[exact=A]*/
-  A(this. /*[subclass=Closure]*/ field);
+  /*member: A.:[exact=A|powerset=0]*/
+  A(this. /*[subclass=Closure|powerset=0]*/ field);
 
-  /*member: A.foo:[exact=JSUInt31]*/
-  static foo(/*[exact=JSUInt31]*/ a) => topLevel3 = a;
+  /*member: A.foo:[exact=JSUInt31|powerset=0]*/
+  static foo(/*[exact=JSUInt31|powerset=0]*/ a) => topLevel3 = a;
 }
 
-/*member: testStoredInInstance:[null|exact=JSUInt31]*/
+/*member: testStoredInInstance:[null|exact=JSUInt31|powerset=1]*/
 testStoredInInstance() {
   var res;
-  /*[exact=JSUInt31]*/
-  closure(/*[exact=JSUInt31]*/ a) => res = a;
+  /*[exact=JSUInt31|powerset=0]*/
+  closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
   var a = A(closure);
-  a.field /*invoke: [exact=A]*/ (42);
+  a.field /*invoke: [exact=A|powerset=0]*/ (42);
   return res;
 }
 
-/*member: testStoredInMapOfList:[null|exact=JSUInt31]*/
+/*member: testStoredInMapOfList:[null|exact=JSUInt31|powerset=1]*/
 testStoredInMapOfList() {
   var res;
-  /*[exact=JSUInt31]*/
-  closure(/*[exact=JSUInt31]*/ a) => res = a;
+  /*[exact=JSUInt31|powerset=0]*/
+  closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
   dynamic a = <dynamic>[closure];
   dynamic b = <dynamic, dynamic>{'foo': 1};
 
   b
-      /*update: Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSUInt31]), map: {foo: [exact=JSUInt31], bar: Container([null|exact=JSExtendableArray], element: [subclass=Closure], length: 1)})*/
+      /*update: Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {foo: [exact=JSUInt31|powerset=0], bar: Container([null|exact=JSExtendableArray|powerset=1], element: [subclass=Closure|powerset=0], length: 1, powerset: 1)}, powerset: 0)*/
       ['bar'] =
       a;
 
   b
-  /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSUInt31]), map: {foo: [exact=JSUInt31], bar: Container([null|exact=JSExtendableArray], element: [subclass=Closure], length: 1)})*/
+  /*Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {foo: [exact=JSUInt31|powerset=0], bar: Container([null|exact=JSExtendableArray|powerset=1], element: [subclass=Closure|powerset=0], length: 1, powerset: 1)}, powerset: 0)*/
   ['bar']
-  /*Container([null|exact=JSExtendableArray], element: [subclass=Closure], length: 1)*/
+  /*Container([null|exact=JSExtendableArray|powerset=1], element: [subclass=Closure|powerset=0], length: 1, powerset: 1)*/
   [0](42);
   return res;
 }
 
-/*member: testStoredInListOfList:[null|exact=JSUInt31]*/
+/*member: testStoredInListOfList:[null|exact=JSUInt31|powerset=1]*/
 testStoredInListOfList() {
   var res;
-  /*[exact=JSUInt31]*/
-  closure(/*[exact=JSUInt31]*/ a) => res = a;
+  /*[exact=JSUInt31|powerset=0]*/
+  closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
   dynamic a = <dynamic>[closure];
   dynamic b = <dynamic>[0, 1, 2];
 
   b
-      /*update: Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: 3)*/
+      /*update: Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: 3, powerset: 0)*/
       [1] =
       a;
 
   b
-  /*Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: 3)*/
+  /*Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: 3, powerset: 0)*/
   [1]
-  /*Union([exact=JSExtendableArray], [exact=JSUInt31])*/
+  /*Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
   [0](42);
   return res;
 }
 
-/*member: testStoredInListOfListUsingInsert:[null|exact=JSUInt31]*/
+/*member: testStoredInListOfListUsingInsert:[null|exact=JSUInt31|powerset=1]*/
 testStoredInListOfListUsingInsert() {
   var res;
-  /*[exact=JSUInt31]*/
-  closure(/*[exact=JSUInt31]*/ a) => res = a;
+  /*[exact=JSUInt31|powerset=0]*/
+  closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
   dynamic a = <dynamic>[closure];
   dynamic b = <dynamic>[0, 1, 2];
 
   b.
-  /*invoke: Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: null)*/
+  /*invoke: Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: null, powerset: 0)*/
   insert(1, a);
 
-  b /*Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: null)*/ [1]
-  /*Union([exact=JSExtendableArray], [exact=JSUInt31])*/
+  b /*Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: null, powerset: 0)*/ [1]
+  /*Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
   [0](42);
   return res;
 }
 
-/*member: testStoredInListOfListUsingAdd:[null|exact=JSUInt31]*/
+/*member: testStoredInListOfListUsingAdd:[null|exact=JSUInt31|powerset=1]*/
 testStoredInListOfListUsingAdd() {
   var res;
-  /*[exact=JSUInt31]*/
-  closure(/*[exact=JSUInt31]*/ a) => res = a;
+  /*[exact=JSUInt31|powerset=0]*/
+  closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
   dynamic a = <dynamic>[closure];
   dynamic b = <dynamic>[0, 1, 2];
 
   b.
-  /*invoke: Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: null)*/
+  /*invoke: Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: null, powerset: 0)*/
   add(a);
 
   b
-  /*Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: null)*/
+  /*Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: null, powerset: 0)*/
   [3]
-  /*Union([exact=JSExtendableArray], [exact=JSUInt31])*/
+  /*Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
   [0](42);
   return res;
 }
 
-/*member: testStoredInRecord:[null|exact=JSUInt31]*/
+/*member: testStoredInRecord:[null|exact=JSUInt31|powerset=1]*/
 testStoredInRecord() {
   var res;
-  /*[exact=JSUInt31]*/
-  closure(/*[exact=JSUInt31]*/ a) => res = a;
+  /*[exact=JSUInt31|powerset=0]*/
+  closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
   final a = (3, closure);
 
-  a. /*[Record(RecordShape(2), [[exact=JSUInt31], [subclass=Closure]])]*/ $2(
+  a. /*[Record(RecordShape(2), [[exact=JSUInt31|powerset=0], [subclass=Closure|powerset=0]], powerset: 0)]*/ $2(
     42,
   );
   return res;
 }
 
-/*member: foo:[null]*/
-foo(/*[subclass=Closure]*/ closure) {
+/*member: foo:[null|powerset=1]*/
+foo(/*[subclass=Closure|powerset=0]*/ closure) {
   closure(42);
 }
 
-/*member: testPassedInParameter:[null|exact=JSUInt31]*/
+/*member: testPassedInParameter:[null|exact=JSUInt31|powerset=1]*/
 testPassedInParameter() {
   var res;
-  /*[exact=JSUInt31]*/
-  closure(/*[exact=JSUInt31]*/ a) => res = a;
+  /*[exact=JSUInt31|powerset=0]*/
+  closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
   foo(closure);
   return res;
 }
 
-/*member: topLevel1:[null|exact=JSUInt31]*/
+/*member: topLevel1:[null|exact=JSUInt31|powerset=1]*/
 var topLevel1;
-/*member: foo2:[exact=JSUInt31]*/
-foo2(/*[exact=JSUInt31]*/ a) => topLevel1 = a;
+/*member: foo2:[exact=JSUInt31|powerset=0]*/
+foo2(/*[exact=JSUInt31|powerset=0]*/ a) => topLevel1 = a;
 
-/*member: testStaticClosure1:[null|exact=JSUInt31]*/
+/*member: testStaticClosure1:[null|exact=JSUInt31|powerset=1]*/
 testStaticClosure1() {
   var a = foo2;
   a(42);
   return topLevel1;
 }
 
-/*member: topLevel2:Union(null, [exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: topLevel2:Union(null, [exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
 var topLevel2;
 
-/*member: bar:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
-bar(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ a) => topLevel2 = a;
+/*member: bar:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+bar(
+  /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ a,
+) => topLevel2 = a;
 
-/*member: testStaticClosure2:Union(null, [exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: testStaticClosure2:Union(null, [exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
 testStaticClosure2() {
   var a = bar;
   a(42);
@@ -186,24 +189,25 @@
   return topLevel2;
 }
 
-/*member: topLevel3:[null|exact=JSUInt31]*/
+/*member: topLevel3:[null|exact=JSUInt31|powerset=1]*/
 var topLevel3;
 
-/*member: testStaticClosure3:[null|exact=JSUInt31]*/
+/*member: testStaticClosure3:[null|exact=JSUInt31|powerset=1]*/
 testStaticClosure3() {
   var a = A.foo;
   a(42);
   return topLevel3;
 }
 
-/*member: topLevel4:Union(null, [exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: topLevel4:Union(null, [exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
 var topLevel4;
 
-/*member: testStaticClosure4Helper:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
-testStaticClosure4Helper(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ a) =>
-    topLevel4 = a;
+/*member: testStaticClosure4Helper:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+testStaticClosure4Helper(
+  /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ a,
+) => topLevel4 = a;
 
-/*member: testStaticClosure4:Union(null, [exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: testStaticClosure4:Union(null, [exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
 testStaticClosure4() {
   var a = testStaticClosure4Helper;
   // Test calling the static after tearing it off.
@@ -212,75 +216,96 @@
   return topLevel4;
 }
 
-/*member: bar1:[subclass=Closure]*/
+/*member: bar1:[subclass=Closure|powerset=0]*/
 int Function(int, [int]) bar1(
-  int /*[exact=JSUInt31]*/ a,
-) => /*[subclass=JSInt]*/
+  int /*[exact=JSUInt31|powerset=0]*/ a,
+) => /*[subclass=JSInt|powerset=0]*/
     (
-      int /*spec.[null|subclass=Object]*/ /*prod.[subclass=JSInt]*/ b, [
-      int /*spec.[null|subclass=Object]*/ /*prod.[subclass=JSInt]*/ c = 17,
-    ]) => a /*invoke: [exact=JSUInt31]*/ + b /*invoke: [subclass=JSInt]*/ + c;
-/*member: bar2:[subclass=Closure]*/
-int Function(int, [int]) bar2(
-  int /*[exact=JSUInt31]*/ a,
-) => /*[subclass=JSInt]*/
-    (
-      int /*spec.[null|subclass=Object]*/ /*prod.[subclass=JSInt]*/ b, [
-      int /*spec.[null|subclass=Object]*/ /*prod.[subclass=JSInt]*/ c = 17,
-    ]) => a /*invoke: [exact=JSUInt31]*/ + b /*invoke: [subclass=JSInt]*/ + c;
-/*member: bar3:[subclass=Closure]*/
-int Function(int, [int]) bar3(
-  int /*[exact=JSUInt31]*/ a,
-) => /*[subclass=JSPositiveInt]*/
-    (int /*[exact=JSUInt31]*/ b, [int /*[exact=JSUInt31]*/ c = 17]) =>
-        a /*invoke: [exact=JSUInt31]*/ + b /*invoke: [subclass=JSUInt32]*/ + c;
-/*member: bar4:[subclass=Closure]*/
-num Function(int, [int]) bar4(
-  int /*[exact=JSUInt31]*/ a,
-) => /*[subclass=JSNumber]*/
-    (
-      int /*spec.[null|subclass=Object]*/ /*prod.[subclass=JSInt]*/ b, [
-      dynamic /*[null|su
-    bclass=Object]*/
-      c,
-    ]) => a /*invoke: [exact=JSUInt31]*/ + b /*invoke: [subclass=JSInt]*/ + c;
-/*member: bar5:[subclass=Closure]*/
-num Function(int, [int]) bar5(
-  int /*[exact=JSUInt31]*/ a,
-) => /*[subclass=JSNumber]*/
-    (
-      int /*spec.[null|subclass=Object]*/ /*prod.[subclass=JSInt]*/ b, [
-      num? /*spec.[null|subclass=Object]*/ /*prod.[null|subclass=JSNumber]*/ c,
+      int /*spec.[null|subclass=Object|powerset=1]*/ /*prod.[subclass=JSInt|powerset=0]*/
+      b, [
+      int /*spec.[null|subclass=Object|powerset=1]*/ /*prod.[subclass=JSInt|powerset=0]*/
+          c =
+          17,
     ]) =>
-        a /*invoke: [exact=JSUInt31]*/ +
-        b /*invoke: [subclass=JSInt]*/ +
+        a /*invoke: [exact=JSUInt31|powerset=0]*/ +
+        b /*invoke: [subclass=JSInt|powerset=0]*/ +
+        c;
+/*member: bar2:[subclass=Closure|powerset=0]*/
+int Function(int, [int]) bar2(
+  int /*[exact=JSUInt31|powerset=0]*/ a,
+) => /*[subclass=JSInt|powerset=0]*/
+    (
+      int /*spec.[null|subclass=Object|powerset=1]*/ /*prod.[subclass=JSInt|powerset=0]*/
+      b, [
+      int /*spec.[null|subclass=Object|powerset=1]*/ /*prod.[subclass=JSInt|powerset=0]*/
+          c =
+          17,
+    ]) =>
+        a /*invoke: [exact=JSUInt31|powerset=0]*/ +
+        b /*invoke: [subclass=JSInt|powerset=0]*/ +
+        c;
+/*member: bar3:[subclass=Closure|powerset=0]*/
+int Function(int, [int]) bar3(
+  int /*[exact=JSUInt31|powerset=0]*/ a,
+) => /*[subclass=JSPositiveInt|powerset=0]*/
+    (
+      int /*[exact=JSUInt31|powerset=0]*/ b, [
+      int /*[exact=JSUInt31|powerset=0]*/ c = 17,
+    ]) =>
+        a /*invoke: [exact=JSUInt31|powerset=0]*/ +
+        b /*invoke: [subclass=JSUInt32|powerset=0]*/ +
+        c;
+/*member: bar4:[subclass=Closure|powerset=0]*/
+num Function(int, [int]) bar4(
+  int /*[exact=JSUInt31|powerset=0]*/ a,
+) => /*[subclass=JSNumber|powerset=0]*/
+    (
+      int /*spec.[null|subclass=Object|powerset=1]*/ /*prod.[subclass=JSInt|powerset=0]*/
+      b, [
+      dynamic /*[null|subclass=Object|powerset=1]*/ c,
+    ]) =>
+        a /*invoke: [exact=JSUInt31|powerset=0]*/ +
+        b /*invoke: [subclass=JSInt|powerset=0]*/ +
+        c;
+/*member: bar5:[subclass=Closure|powerset=0]*/
+num Function(int, [int]) bar5(
+  int /*[exact=JSUInt31|powerset=0]*/ a,
+) => /*[subclass=JSNumber|powerset=0]*/
+    (
+      int /*spec.[null|subclass=Object|powerset=1]*/ /*prod.[subclass=JSInt|powerset=0]*/
+      b, [
+      num? /*spec.[null|subclass=Object|powerset=1]*/ /*prod.[null|subclass=JSNumber|powerset=1]*/
+      c,
+    ]) =>
+        a /*invoke: [exact=JSUInt31|powerset=0]*/ +
+        b /*invoke: [subclass=JSInt|powerset=0]*/ +
         (c ?? 0);
 
-/*member: testFunctionApply:[null|subclass=Object]*/
+/*member: testFunctionApply:[null|subclass=Object|powerset=1]*/
 testFunctionApply() {
   return Function.apply(bar1(10), [20]);
 }
 
-/*member: testFunctionApplyNoDefault:[null|subclass=Object]*/
+/*member: testFunctionApplyNoDefault:[null|subclass=Object|powerset=1]*/
 testFunctionApplyNoDefault() {
   Function.apply(bar4(10), [30]);
   return Function.apply(bar5(10), [30]);
 }
 
-/*member: testRecordFunctionApply:[null|subclass=Object]*/
+/*member: testRecordFunctionApply:[null|subclass=Object|powerset=1]*/
 testRecordFunctionApply() {
   final rec = (bar2(10), bar3(10));
-  (rec. /*[Record(RecordShape(2), [[subclass=Closure], [subclass=Closure]])]*/ $2)(
+  (rec. /*[Record(RecordShape(2), [[subclass=Closure|powerset=0], [subclass=Closure|powerset=0]], powerset: 0)]*/ $2)(
     2,
     3,
   );
   return Function.apply(
-    rec. /*[Record(RecordShape(2), [[subclass=Closure], [subclass=Closure]])]*/ $1,
+    rec. /*[Record(RecordShape(2), [[subclass=Closure|powerset=0], [subclass=Closure|powerset=0]], powerset: 0)]*/ $1,
     [20],
   );
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   testFunctionStatement();
   testFunctionExpression();
diff --git a/pkg/compiler/test/inference/data/closure_tracer_28919.dart b/pkg/compiler/test/inference/data/closure_tracer_28919.dart
index 766af9a..c37ea16 100644
--- a/pkg/compiler/test/inference/data/closure_tracer_28919.dart
+++ b/pkg/compiler/test/inference/data/closure_tracer_28919.dart
@@ -4,24 +4,24 @@
 
 // Regression test for issue 28919.
 
-/*member: foo1:[null]*/
+/*member: foo1:[null|powerset=1]*/
 foo1() {
   final methods = [];
   var res, sum;
   for (
     int i = 0;
-    i /*invoke: [subclass=JSPositiveInt]*/ != 3;
-    i /*invoke: [subclass=JSPositiveInt]*/ ++
+    i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ != 3;
+    i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++
   ) {
     methods
-        . /*invoke: Container([exact=JSExtendableArray], element: [subclass=Closure], length: null)*/ add(
-          /*[null]*/ (int /*[exact=JSUInt31]*/ x) {
+        . /*invoke: Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: null, powerset: 0)*/ add(
+          /*[null|powerset=1]*/ (int /*[exact=JSUInt31|powerset=0]*/ x) {
             res = x;
-            sum = x /*invoke: [exact=JSUInt31]*/ + i;
+            sum = x /*invoke: [exact=JSUInt31|powerset=0]*/ + i;
           },
         );
   }
-  methods /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: null)*/ [0](
+  methods /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: null, powerset: 0)*/ [0](
     499,
   );
   probe1res(res);
@@ -29,61 +29,63 @@
   probe1methods(methods);
 }
 
-/*member: probe1res:[null|exact=JSUInt31]*/
-probe1res(/*[null|exact=JSUInt31]*/ x) => x;
+/*member: probe1res:[null|exact=JSUInt31|powerset=1]*/
+probe1res(/*[null|exact=JSUInt31|powerset=1]*/ x) => x;
 
-/*member: probe1sum:[null|subclass=JSPositiveInt]*/
-probe1sum(/*[null|subclass=JSPositiveInt]*/ x) => x;
+/*member: probe1sum:[null|subclass=JSPositiveInt|powerset=1]*/
+probe1sum(/*[null|subclass=JSPositiveInt|powerset=1]*/ x) => x;
 
-/*member: probe1methods:Container([exact=JSExtendableArray], element: [subclass=Closure], length: null)*/
+/*member: probe1methods:Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: null, powerset: 0)*/
 probe1methods(
-  /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: null)*/ x,
+  /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: null, powerset: 0)*/ x,
 ) => x;
 
-/*member: nonContainer:[exact=JSExtendableArray]*/
-nonContainer(/*[exact=JSUInt31]*/ choice) {
-  var m = choice /*invoke: [exact=JSUInt31]*/ == 0 ? [] : "<String>";
+/*member: nonContainer:[exact=JSExtendableArray|powerset=0]*/
+nonContainer(/*[exact=JSUInt31|powerset=0]*/ choice) {
+  var m = choice /*invoke: [exact=JSUInt31|powerset=0]*/ == 0 ? [] : "<String>";
   if (m is! List) throw 123;
   // The union then filter leaves us with a non-container type.
   return m;
 }
 
-/*member: foo2:[null]*/
-foo2(int /*[exact=JSUInt31]*/ choice) {
+/*member: foo2:[null|powerset=1]*/
+foo2(int /*[exact=JSUInt31|powerset=0]*/ choice) {
   final methods = nonContainer(choice);
 
   /// ignore: unused_local_variable
   var res, sum;
   for (
     int i = 0;
-    i /*invoke: [subclass=JSPositiveInt]*/ != 3;
-    i /*invoke: [subclass=JSPositiveInt]*/ ++
+    i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ != 3;
+    i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++
   ) {
-    methods. /*invoke: [exact=JSExtendableArray]*/ add(/*[null]*/ (
-      int
-      /*spec.[null|subclass=Object]*/
-      /*prod.[subclass=JSInt]*/
-      x,
-    ) {
-      res = x;
-      sum = x /*invoke: [subclass=JSInt]*/ + i;
-    });
+    methods. /*invoke: [exact=JSExtendableArray|powerset=0]*/ add(
+      /*[null|powerset=1]*/ (
+        int
+        /*spec.[null|subclass=Object|powerset=1]*/
+        /*prod.[subclass=JSInt|powerset=0]*/
+        x,
+      ) {
+        res = x;
+        sum = x /*invoke: [subclass=JSInt|powerset=0]*/ + i;
+      },
+    );
   }
-  methods /*[exact=JSExtendableArray]*/ [0](499);
+  methods /*[exact=JSExtendableArray|powerset=0]*/ [0](499);
   probe2res(res);
   probe2methods(methods);
 }
 
-/*member: probe2res:[null|subclass=JSInt]*/
+/*member: probe2res:[null|subclass=JSInt|powerset=1]*/
 probe2res(
-  /*[null|subclass=JSInt]*/
+  /*[null|subclass=JSInt|powerset=1]*/
   x,
 ) => x;
 
-/*member: probe2methods:[exact=JSExtendableArray]*/
-probe2methods(/*[exact=JSExtendableArray]*/ x) => x;
+/*member: probe2methods:[exact=JSExtendableArray|powerset=0]*/
+probe2methods(/*[exact=JSExtendableArray|powerset=0]*/ x) => x;
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   foo1();
   foo2(0);
diff --git a/pkg/compiler/test/inference/data/closurization_instance.dart b/pkg/compiler/test/inference/data/closurization_instance.dart
index a7ad3f7..9e90b9e 100644
--- a/pkg/compiler/test/inference/data/closurization_instance.dart
+++ b/pkg/compiler/test/inference/data/closurization_instance.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   closurizedCallToString();
 }
@@ -11,19 +11,19 @@
 // Implicit/explicit .call on instance method tear-off.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class.:[exact=Class]*/
+/*member: Class.:[exact=Class|powerset=0]*/
 class Class {
-  /*member: Class.method:[exact=JSUInt31]*/
+  /*member: Class.method:[exact=JSUInt31|powerset=0]*/
   method() => 42;
 }
 
-/*member: closurizedCallToString:[exact=JSString]*/
+/*member: closurizedCallToString:[exact=JSString|powerset=0]*/
 closurizedCallToString() {
   var c = Class();
-  var local = c. /*[exact=Class]*/ method;
-  local. /*invoke: [subclass=Closure]*/ toString();
+  var local = c. /*[exact=Class|powerset=0]*/ method;
+  local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
   local();
-  local. /*invoke: [subclass=Closure]*/ toString();
+  local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
   local.call();
-  return local. /*invoke: [subclass=Closure]*/ toString();
+  return local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
 }
diff --git a/pkg/compiler/test/inference/data/closurization_instance_call.dart b/pkg/compiler/test/inference/data/closurization_instance_call.dart
index 269d197..50148e1 100644
--- a/pkg/compiler/test/inference/data/closurization_instance_call.dart
+++ b/pkg/compiler/test/inference/data/closurization_instance_call.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   closurizedCallToString();
 }
@@ -12,23 +12,23 @@
 // '.call' method in the closed world.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class.:[exact=Class]*/
+/*member: Class.:[exact=Class|powerset=0]*/
 class Class {
-  /*member: Class.call:Value([exact=JSBool], value: true)*/
+  /*member: Class.call:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
   call() => true;
 
-  /*member: Class.method:[exact=JSUInt31]*/
+  /*member: Class.method:[exact=JSUInt31|powerset=0]*/
   method() => 42;
 }
 
-/*member: closurizedCallToString:[exact=JSString]*/
+/*member: closurizedCallToString:[exact=JSString|powerset=0]*/
 closurizedCallToString() {
   var c = Class();
-  c. /*invoke: [exact=Class]*/ call(); // Make `Class.call` live.
-  var local = c. /*[exact=Class]*/ method;
-  local. /*invoke: [subclass=Closure]*/ toString();
+  c. /*invoke: [exact=Class|powerset=0]*/ call(); // Make `Class.call` live.
+  var local = c. /*[exact=Class|powerset=0]*/ method;
+  local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
   local();
-  local. /*invoke: [subclass=Closure]*/ toString();
+  local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
   local.call();
-  return local. /*invoke: [subclass=Closure]*/ toString();
+  return local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
 }
diff --git a/pkg/compiler/test/inference/data/closurization_local_call.dart b/pkg/compiler/test/inference/data/closurization_local_call.dart
index f752280..6f6c28a 100644
--- a/pkg/compiler/test/inference/data/closurization_local_call.dart
+++ b/pkg/compiler/test/inference/data/closurization_local_call.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   closurizedCallToString();
 }
@@ -12,20 +12,20 @@
 // method in the closed world.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class.:[exact=Class]*/
+/*member: Class.:[exact=Class|powerset=0]*/
 class Class {
-  /*member: Class.call:Value([exact=JSBool], value: true)*/
+  /*member: Class.call:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
   call() => true;
 }
 
-/*member: closurizedCallToString:[exact=JSString]*/
+/*member: closurizedCallToString:[exact=JSString|powerset=0]*/
 closurizedCallToString() {
   var c = Class();
-  c. /*invoke: [exact=Class]*/ call(); // Make `Class.call` live.
-  var local = /*[exact=JSUInt31]*/ () => 42;
-  local. /*invoke: [subclass=Closure]*/ toString();
+  c. /*invoke: [exact=Class|powerset=0]*/ call(); // Make `Class.call` live.
+  var local = /*[exact=JSUInt31|powerset=0]*/ () => 42;
+  local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
   local();
-  local. /*invoke: [subclass=Closure]*/ toString();
+  local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
   local.call();
-  return local. /*invoke: [subclass=Closure]*/ toString();
+  return local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
 }
diff --git a/pkg/compiler/test/inference/data/closurization_static.dart b/pkg/compiler/test/inference/data/closurization_static.dart
index deea1db..f3b5fd0 100644
--- a/pkg/compiler/test/inference/data/closurization_static.dart
+++ b/pkg/compiler/test/inference/data/closurization_static.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   closurizedCallToString();
 }
@@ -11,15 +11,15 @@
 // Implicit/explicit .call on static method tear-off.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: method:[exact=JSUInt31]*/
+/*member: method:[exact=JSUInt31|powerset=0]*/
 method() => 42;
 
-/*member: closurizedCallToString:[exact=JSString]*/
+/*member: closurizedCallToString:[exact=JSString|powerset=0]*/
 closurizedCallToString() {
   var local = method;
-  local. /*invoke: [subclass=Closure]*/ toString();
+  local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
   local();
-  local. /*invoke: [subclass=Closure]*/ toString();
+  local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
   local.call();
-  return local. /*invoke: [subclass=Closure]*/ toString();
+  return local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
 }
diff --git a/pkg/compiler/test/inference/data/closurization_static_call.dart b/pkg/compiler/test/inference/data/closurization_static_call.dart
index ceed460..a0dba61 100644
--- a/pkg/compiler/test/inference/data/closurization_static_call.dart
+++ b/pkg/compiler/test/inference/data/closurization_static_call.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   closurizedCallToString();
 }
@@ -12,23 +12,23 @@
 // '.call' method in the closed world.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: method:[exact=JSUInt31]*/
+/*member: method:[exact=JSUInt31|powerset=0]*/
 method() => 42;
 
-/*member: Class.:[exact=Class]*/
+/*member: Class.:[exact=Class|powerset=0]*/
 class Class {
-  /*member: Class.call:Value([exact=JSBool], value: true)*/
+  /*member: Class.call:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
   call() => true;
 }
 
-/*member: closurizedCallToString:[exact=JSString]*/
+/*member: closurizedCallToString:[exact=JSString|powerset=0]*/
 closurizedCallToString() {
   var c = Class();
-  c. /*invoke: [exact=Class]*/ call(); // Make `Class.call` live.
+  c. /*invoke: [exact=Class|powerset=0]*/ call(); // Make `Class.call` live.
   var local = method;
-  local. /*invoke: [subclass=Closure]*/ toString();
+  local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
   local();
-  local. /*invoke: [subclass=Closure]*/ toString();
+  local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
   local.call();
-  return local. /*invoke: [subclass=Closure]*/ toString();
+  return local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
 }
diff --git a/pkg/compiler/test/inference/data/closurized_tear_off.dart b/pkg/compiler/test/inference/data/closurized_tear_off.dart
index d9de11b..3da4f2d 100644
--- a/pkg/compiler/test/inference/data/closurized_tear_off.dart
+++ b/pkg/compiler/test/inference/data/closurized_tear_off.dart
@@ -2,35 +2,36 @@
 // 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.
 
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
 class A {
-  /*member: A.foo:[exact=JSUInt31]*/
-  foo(/*[null|subclass=Object]*/ a) => 3;
-  /*member: A.bar:[exact=MappedListIterable]*/
+  /*member: A.foo:[exact=JSUInt31|powerset=0]*/
+  foo(/*[null|subclass=Object|powerset=1]*/ a) => 3;
+  /*member: A.bar:[exact=MappedListIterable|powerset=0]*/
   bar(
-    /*Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 10)*/ x,
+    /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 10, powerset: 0)*/ x,
   ) => x
-      . /*invoke: Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 10)*/ map(
-        /*[subclass=A]*/ foo,
+      . /*invoke: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 10, powerset: 0)*/ map(
+        /*[subclass=A|powerset=0]*/ foo,
       );
 }
 
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
 class B extends A {
-  /*member: B.foo:[exact=JSUInt31]*/
-  foo(/*[null|subclass=Object]*/ b) {
+  /*member: B.foo:[exact=JSUInt31|powerset=0]*/
+  foo(/*[null|subclass=Object|powerset=1]*/ b) {
     b.abs();
     return 4;
   }
 }
 
-/*member: getA:[subclass=A]*/
-getA(bool /*Value([exact=JSBool], value: false)*/ x) => x ? A() : B();
+/*member: getA:[subclass=A|powerset=0]*/
+getA(bool /*Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/ x) =>
+    x ? A() : B();
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
-  getA(false). /*invoke: [subclass=A]*/ bar(
-    List. /*update: Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 10)*/ generate(
+  getA(false). /*invoke: [subclass=A|powerset=0]*/ bar(
+    List. /*update: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 10, powerset: 0)*/ generate(
       10,
       (i) => i,
     ),
diff --git a/pkg/compiler/test/inference/data/conditional.dart b/pkg/compiler/test/inference/data/conditional.dart
index e8af4fe..92e2189 100644
--- a/pkg/compiler/test/inference/data/conditional.dart
+++ b/pkg/compiler/test/inference/data/conditional.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   simpleConditional();
   simpleConditionalTrue();
@@ -19,10 +19,10 @@
 /// Simple conditional with unknown condition value.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _simpleConditional:Union([exact=JSString], [exact=JSUInt31])*/
-_simpleConditional(/*[exact=JSBool]*/ c) => c ? '' : 0;
+/*member: _simpleConditional:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_simpleConditional(/*[exact=JSBool|powerset=0]*/ c) => c ? '' : 0;
 
-/*member: simpleConditional:[null]*/
+/*member: simpleConditional:[null|powerset=1]*/
 simpleConditional() {
   _simpleConditional(true);
   _simpleConditional(false);
@@ -32,10 +32,12 @@
 /// Simple conditional with unknown condition value.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _simpleConditionalTrue:Union([exact=JSString], [exact=JSUInt31])*/
-_simpleConditionalTrue(/*Value([exact=JSBool], value: true)*/ c) => c ? '' : 0;
+/*member: _simpleConditionalTrue:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_simpleConditionalTrue(
+  /*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ c,
+) => c ? '' : 0;
 
-/*member: simpleConditionalTrue:[null]*/
+/*member: simpleConditionalTrue:[null|powerset=1]*/
 simpleConditionalTrue() {
   _simpleConditionalTrue(true);
 }
@@ -44,11 +46,12 @@
 /// Simple conditional with unknown condition value.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _simpleConditionalFalse:Union([exact=JSString], [exact=JSUInt31])*/
-_simpleConditionalFalse(/*Value([exact=JSBool], value: false)*/ c) =>
-    c ? '' : 0;
+/*member: _simpleConditionalFalse:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_simpleConditionalFalse(
+  /*Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/ c,
+) => c ? '' : 0;
 
-/*member: simpleConditionalFalse:[null]*/
+/*member: simpleConditionalFalse:[null|powerset=1]*/
 simpleConditionalFalse() {
   _simpleConditionalFalse(false);
 }
@@ -56,11 +59,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 /// Conditional with an is test.
 ////////////////////////////////////////////////////////////////////////////////
-/*member: _conditionalIs:Union([exact=JSString], [subclass=JSPositiveInt])*/
-_conditionalIs(/*[null|exact=JSUInt31]*/ o) =>
-    o is int ? o. /*invoke: [exact=JSUInt31]*/ abs() : '';
+/*member: _conditionalIs:Union([exact=JSString|powerset=0], [subclass=JSPositiveInt|powerset=0], powerset: 0)*/
+_conditionalIs(/*[null|exact=JSUInt31|powerset=1]*/ o) =>
+    o is int ? o. /*invoke: [exact=JSUInt31|powerset=0]*/ abs() : '';
 
-/*member: conditionalIs:[null]*/
+/*member: conditionalIs:[null|powerset=1]*/
 conditionalIs() {
   _conditionalIs(null);
   _conditionalIs(1);
@@ -69,11 +72,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 /// Conditional with an is `int` test known to be true.
 ////////////////////////////////////////////////////////////////////////////////
-/*member: _conditionalIsInt:Union([exact=JSString], [subclass=JSPositiveInt])*/
-_conditionalIsInt(/*[exact=JSUInt31]*/ o) =>
-    o is int ? o. /*invoke: [exact=JSUInt31]*/ abs() : '';
+/*member: _conditionalIsInt:Union([exact=JSString|powerset=0], [subclass=JSPositiveInt|powerset=0], powerset: 0)*/
+_conditionalIsInt(/*[exact=JSUInt31|powerset=0]*/ o) =>
+    o is int ? o. /*invoke: [exact=JSUInt31|powerset=0]*/ abs() : '';
 
-/*member: conditionalIsInt:[null]*/
+/*member: conditionalIsInt:[null|powerset=1]*/
 conditionalIsInt() {
   _conditionalIsInt(1);
 }
@@ -81,11 +84,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 /// Conditional with an is-not test.
 ////////////////////////////////////////////////////////////////////////////////
-/*member: _conditionalIsNot:Union([exact=JSString], [subclass=JSPositiveInt])*/
-_conditionalIsNot(/*[null|exact=JSUInt31]*/ o) =>
-    o is! int ? '' : o. /*invoke: [exact=JSUInt31]*/ abs();
+/*member: _conditionalIsNot:Union([exact=JSString|powerset=0], [subclass=JSPositiveInt|powerset=0], powerset: 0)*/
+_conditionalIsNot(/*[null|exact=JSUInt31|powerset=1]*/ o) =>
+    o is! int ? '' : o. /*invoke: [exact=JSUInt31|powerset=0]*/ abs();
 
-/*member: conditionalIsNot:[null]*/
+/*member: conditionalIsNot:[null|powerset=1]*/
 conditionalIsNot() {
   _conditionalIsNot(null);
   _conditionalIsNot(1);
@@ -94,11 +97,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 /// Conditional with an is-not `int` test known to be false.
 ////////////////////////////////////////////////////////////////////////////////
-/*member: _conditionalIsNotInt:Union([exact=JSString], [subclass=JSPositiveInt])*/
-_conditionalIsNotInt(/*[exact=JSUInt31]*/ o) =>
-    o is! int ? '' : o. /*invoke: [exact=JSUInt31]*/ abs();
+/*member: _conditionalIsNotInt:Union([exact=JSString|powerset=0], [subclass=JSPositiveInt|powerset=0], powerset: 0)*/
+_conditionalIsNotInt(/*[exact=JSUInt31|powerset=0]*/ o) =>
+    o is! int ? '' : o. /*invoke: [exact=JSUInt31|powerset=0]*/ abs();
 
-/*member: conditionalIsNotInt:[null]*/
+/*member: conditionalIsNotInt:[null|powerset=1]*/
 conditionalIsNotInt() {
   _conditionalIsNotInt(1);
 }
@@ -106,11 +109,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 /// Conditional with an is test.
 ////////////////////////////////////////////////////////////////////////////////
-/*member: _conditionalNull:Union([exact=JSString], [subclass=JSPositiveInt])*/
-_conditionalNull(/*[null|exact=JSUInt31]*/ o) =>
-    o == null ? '' : o. /*invoke: [exact=JSUInt31]*/ abs();
+/*member: _conditionalNull:Union([exact=JSString|powerset=0], [subclass=JSPositiveInt|powerset=0], powerset: 0)*/
+_conditionalNull(/*[null|exact=JSUInt31|powerset=1]*/ o) =>
+    o == null ? '' : o. /*invoke: [exact=JSUInt31|powerset=0]*/ abs();
 
-/*member: conditionalNull:[null]*/
+/*member: conditionalNull:[null|powerset=1]*/
 conditionalNull() {
   _conditionalNull(null);
   _conditionalNull(1);
@@ -119,11 +122,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 /// Conditional with an is `int` test known to be true.
 ////////////////////////////////////////////////////////////////////////////////
-/*member: _conditionalNotNull:Union([exact=JSString], [subclass=JSPositiveInt])*/
-_conditionalNotNull(/*[null|exact=JSUInt31]*/ o) =>
-    o != null ? o. /*invoke: [exact=JSUInt31]*/ abs() : '';
+/*member: _conditionalNotNull:Union([exact=JSString|powerset=0], [subclass=JSPositiveInt|powerset=0], powerset: 0)*/
+_conditionalNotNull(/*[null|exact=JSUInt31|powerset=1]*/ o) =>
+    o != null ? o. /*invoke: [exact=JSUInt31|powerset=0]*/ abs() : '';
 
-/*member: conditionalNotNull:[null]*/
+/*member: conditionalNotNull:[null|powerset=1]*/
 conditionalNotNull() {
   _conditionalNotNull(null);
   _conditionalNotNull(1);
diff --git a/pkg/compiler/test/inference/data/const_closure.dart b/pkg/compiler/test/inference/data/const_closure.dart
index ca22d2e..d94cee0 100644
--- a/pkg/compiler/test/inference/data/const_closure.dart
+++ b/pkg/compiler/test/inference/data/const_closure.dart
@@ -2,13 +2,13 @@
 // 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.
 
-/*member: method1:[exact=JSUInt31]*/
+/*member: method1:[exact=JSUInt31|powerset=0]*/
 method1() {
   return 42;
 }
 
-/*member: method2:[exact=JSUInt31]*/
-method2(/*[exact=JSUInt31]*/ a) {
+/*member: method2:[exact=JSUInt31|powerset=0]*/
+method2(/*[exact=JSUInt31|powerset=0]*/ a) {
   // Called only via [foo2] with a small integer.
   return a;
 }
@@ -17,17 +17,17 @@
 
 const foo2 = method2;
 
-/*member: returnInt1:[null|subclass=Object]*/
+/*member: returnInt1:[null|subclass=Object|powerset=1]*/
 returnInt1() {
   return foo1();
 }
 
-/*member: returnInt2:[null|subclass=Object]*/
+/*member: returnInt2:[null|subclass=Object|powerset=1]*/
 returnInt2() {
   return foo2(54);
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   returnInt1();
   returnInt2();
diff --git a/pkg/compiler/test/inference/data/const_closure2.dart b/pkg/compiler/test/inference/data/const_closure2.dart
index 5a45b05..e178a5b 100644
--- a/pkg/compiler/test/inference/data/const_closure2.dart
+++ b/pkg/compiler/test/inference/data/const_closure2.dart
@@ -2,20 +2,24 @@
 // 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.
 
-/*member: method:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: method:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 // Called via [foo] with integer then double.
-method(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ a) {
+method(
+  /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ a,
+) {
   return a;
 }
 
 const foo = method;
 
-/*member: returnNum:[null|subclass=Object]*/
-returnNum(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ x) {
+/*member: returnNum:[null|subclass=Object|powerset=1]*/
+returnNum(
+  /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ x,
+) {
   return foo(x);
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   returnNum(10);
   returnNum(10.5);
diff --git a/pkg/compiler/test/inference/data/const_closure3.dart b/pkg/compiler/test/inference/data/const_closure3.dart
index 31bcc35..e9a2994 100644
--- a/pkg/compiler/test/inference/data/const_closure3.dart
+++ b/pkg/compiler/test/inference/data/const_closure3.dart
@@ -2,20 +2,20 @@
 // 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.
 
-/*member: method:[exact=JSUInt31]*/
+/*member: method:[exact=JSUInt31|powerset=0]*/
 // Called only via [foo2] with a small integer.
-method(/*[exact=JSUInt31]*/ a) {
+method(/*[exact=JSUInt31|powerset=0]*/ a) {
   return a;
 }
 
 const foo = method;
 
-/*member: returnInt:[null|subclass=Object]*/
+/*member: returnInt:[null|subclass=Object|powerset=1]*/
 returnInt() {
   return foo(54);
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   returnInt();
 }
diff --git a/pkg/compiler/test/inference/data/const_closure4.dart b/pkg/compiler/test/inference/data/const_closure4.dart
index 5a45b05..e178a5b 100644
--- a/pkg/compiler/test/inference/data/const_closure4.dart
+++ b/pkg/compiler/test/inference/data/const_closure4.dart
@@ -2,20 +2,24 @@
 // 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.
 
-/*member: method:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: method:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 // Called via [foo] with integer then double.
-method(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ a) {
+method(
+  /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ a,
+) {
   return a;
 }
 
 const foo = method;
 
-/*member: returnNum:[null|subclass=Object]*/
-returnNum(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ x) {
+/*member: returnNum:[null|subclass=Object|powerset=1]*/
+returnNum(
+  /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ x,
+) {
   return foo(x);
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   returnNum(10);
   returnNum(10.5);
diff --git a/pkg/compiler/test/inference/data/const_closure5.dart b/pkg/compiler/test/inference/data/const_closure5.dart
index 0877631..26b5533 100644
--- a/pkg/compiler/test/inference/data/const_closure5.dart
+++ b/pkg/compiler/test/inference/data/const_closure5.dart
@@ -2,20 +2,22 @@
 // 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.
 
-/*member: method:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: method:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 // Called only via [foo2] with a small integer.
-method(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ a) {
+method(
+  /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ a,
+) {
   return a;
 }
 
 const foo = method;
 
-/*member: returnInt:[null|subclass=Object]*/
+/*member: returnInt:[null|subclass=Object|powerset=1]*/
 returnInt() {
   return foo(54);
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   returnInt();
   method(55.2);
diff --git a/pkg/compiler/test/inference/data/const_closure_default.dart b/pkg/compiler/test/inference/data/const_closure_default.dart
index bd33b03..2fc77ba 100644
--- a/pkg/compiler/test/inference/data/const_closure_default.dart
+++ b/pkg/compiler/test/inference/data/const_closure_default.dart
@@ -4,43 +4,43 @@
 
 // [defaultFn_i] is called only via [foo_i]'s default value with a small integer.
 
-/*member: defaultFn1:[exact=JSUInt31]*/
-defaultFn1(/*[exact=JSUInt31]*/ a) => a;
+/*member: defaultFn1:[exact=JSUInt31|powerset=0]*/
+defaultFn1(/*[exact=JSUInt31|powerset=0]*/ a) => a;
 
-/*member: defaultFn2:[exact=JSUInt31]*/
-defaultFn2(/*[exact=JSUInt31]*/ a) => a;
+/*member: defaultFn2:[exact=JSUInt31|powerset=0]*/
+defaultFn2(/*[exact=JSUInt31|powerset=0]*/ a) => a;
 
-/*member: defaultFn3:[exact=JSUInt31]*/
-defaultFn3(/*[exact=JSUInt31]*/ a) => a;
+/*member: defaultFn3:[exact=JSUInt31|powerset=0]*/
+defaultFn3(/*[exact=JSUInt31|powerset=0]*/ a) => a;
 
-/*member: defaultFn4:[exact=JSUInt31]*/
-defaultFn4(/*[exact=JSUInt31]*/ a) => a;
+/*member: defaultFn4:[exact=JSUInt31|powerset=0]*/
+defaultFn4(/*[exact=JSUInt31|powerset=0]*/ a) => a;
 
-/*member: defaultFn5:[exact=JSUInt31]*/
-defaultFn5(/*[exact=JSUInt31]*/ a) => a;
+/*member: defaultFn5:[exact=JSUInt31|powerset=0]*/
+defaultFn5(/*[exact=JSUInt31|powerset=0]*/ a) => a;
 
-/*member: defaultFn6:[exact=JSUInt31]*/
-defaultFn6(/*[exact=JSUInt31]*/ a) => a;
+/*member: defaultFn6:[exact=JSUInt31|powerset=0]*/
+defaultFn6(/*[exact=JSUInt31|powerset=0]*/ a) => a;
 
-/*member: foo1:[null|subclass=Object]*/
-foo1([/*[subclass=Closure]*/ fn = defaultFn1]) => fn(54);
+/*member: foo1:[null|subclass=Object|powerset=1]*/
+foo1([/*[subclass=Closure|powerset=0]*/ fn = defaultFn1]) => fn(54);
 
-/*member: foo2:[null|subclass=Object]*/
-foo2({/*[subclass=Closure]*/ fn = defaultFn2}) => fn(54);
+/*member: foo2:[null|subclass=Object|powerset=1]*/
+foo2({/*[subclass=Closure|powerset=0]*/ fn = defaultFn2}) => fn(54);
 
-/*member: foo3:[null|subclass=Object]*/
-foo3([/*[subclass=Closure]*/ fn = defaultFn3]) => fn(54);
+/*member: foo3:[null|subclass=Object|powerset=1]*/
+foo3([/*[subclass=Closure|powerset=0]*/ fn = defaultFn3]) => fn(54);
 
-/*member: foo4:[null|subclass=Object]*/
-foo4({/*[subclass=Closure]*/ fn = defaultFn4}) => fn(54);
+/*member: foo4:[null|subclass=Object|powerset=1]*/
+foo4({/*[subclass=Closure|powerset=0]*/ fn = defaultFn4}) => fn(54);
 
-/*member: foo5:[null|subclass=Object]*/
-foo5([/*[null|subclass=Object]*/ fn = defaultFn5]) => fn(54);
+/*member: foo5:[null|subclass=Object|powerset=1]*/
+foo5([/*[null|subclass=Object|powerset=1]*/ fn = defaultFn5]) => fn(54);
 
-/*member: foo6:[null|subclass=Object]*/
-foo6({/*[null|subclass=Object]*/ fn = defaultFn6}) => fn(54);
+/*member: foo6:[null|subclass=Object|powerset=1]*/
+foo6({/*[null|subclass=Object|powerset=1]*/ fn = defaultFn6}) => fn(54);
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   // Direct calls.
   foo1();
diff --git a/pkg/compiler/test/inference/data/container_mask_equal.dart b/pkg/compiler/test/inference/data/container_mask_equal.dart
index 59d548d..4bbbed1 100644
--- a/pkg/compiler/test/inference/data/container_mask_equal.dart
+++ b/pkg/compiler/test/inference/data/container_mask_equal.dart
@@ -7,25 +7,25 @@
 
 import 'dart:typed_data';
 
-/*member: method1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: method1:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
 method1() => [0];
 
-/*member: method2:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/
+/*member: method2:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/
 method2() => [1, 2];
 
-/*member: method3:Container([exact=NativeUint8List], element: [exact=JSUInt31], length: 1)*/
+/*member: method3:Container([exact=NativeUint8List|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
 method3() => Uint8List(1);
 
-/*member: method4:Container([exact=NativeUint8List], element: [exact=JSUInt31], length: 2)*/
+/*member: method4:Container([exact=NativeUint8List|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/
 method4() => Uint8List(2);
 
-/*member: method1or2:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/
-method1or2(/*[exact=JSBool]*/ c) => c ? method1() : method2();
+/*member: method1or2:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/
+method1or2(/*[exact=JSBool|powerset=0]*/ c) => c ? method1() : method2();
 
-/*member: method3or4:Container([exact=NativeUint8List], element: [exact=JSUInt31], length: null)*/
-method3or4(/*[exact=JSBool]*/ c) => c ? method3() : method4();
+/*member: method3or4:Container([exact=NativeUint8List|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/
+method3or4(/*[exact=JSBool|powerset=0]*/ c) => c ? method3() : method4();
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   method1or2(true);
   method1or2(false);
diff --git a/pkg/compiler/test/inference/data/default_value.dart b/pkg/compiler/test/inference/data/default_value.dart
index a9c6f46..a485020 100644
--- a/pkg/compiler/test/inference/data/default_value.dart
+++ b/pkg/compiler/test/inference/data/default_value.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   positionalWithoutDefaultOnLocal();
   positionalWithNullDefaultOnLocal();
@@ -12,38 +12,40 @@
   positionalWithOneDefaultOnStatic();
 }
 
-/*member: positionalWithoutDefaultOnLocal:[null]*/
+/*member: positionalWithoutDefaultOnLocal:[null|powerset=1]*/
 positionalWithoutDefaultOnLocal() {
-  /*[null]*/
-  local([/*[null]*/ parameter]) => parameter;
+  /*[null|powerset=1]*/
+  local([/*[null|powerset=1]*/ parameter]) => parameter;
   return local();
 }
 
-/*member: positionalWithNullDefaultOnLocal:[null]*/
+/*member: positionalWithNullDefaultOnLocal:[null|powerset=1]*/
 positionalWithNullDefaultOnLocal() {
-  /*[null]*/
-  local([/*[null]*/ parameter = null]) => parameter;
+  /*[null|powerset=1]*/
+  local([/*[null|powerset=1]*/ parameter = null]) => parameter;
   return local();
 }
 
-/*member: positionalWithOneDefaultOnLocal:[exact=JSUInt31]*/
+/*member: positionalWithOneDefaultOnLocal:[exact=JSUInt31|powerset=0]*/
 positionalWithOneDefaultOnLocal() {
-  /*[exact=JSUInt31]*/
-  local([/*[exact=JSUInt31]*/ parameter = 1]) => parameter;
+  /*[exact=JSUInt31|powerset=0]*/
+  local([/*[exact=JSUInt31|powerset=0]*/ parameter = 1]) => parameter;
   return local();
 }
 
-/*member: positionalWithoutDefaultOnStatic:[null]*/
-positionalWithoutDefaultOnStatic([/*[null]*/ parameter]) {
+/*member: positionalWithoutDefaultOnStatic:[null|powerset=1]*/
+positionalWithoutDefaultOnStatic([/*[null|powerset=1]*/ parameter]) {
   return parameter;
 }
 
-/*member: positionalWithNullDefaultOnStatic:[null]*/
-positionalWithNullDefaultOnStatic([/*[null]*/ parameter = null]) {
+/*member: positionalWithNullDefaultOnStatic:[null|powerset=1]*/
+positionalWithNullDefaultOnStatic([/*[null|powerset=1]*/ parameter = null]) {
   return parameter;
 }
 
-/*member: positionalWithOneDefaultOnStatic:[exact=JSUInt31]*/
-positionalWithOneDefaultOnStatic([/*[exact=JSUInt31]*/ parameter = 1]) {
+/*member: positionalWithOneDefaultOnStatic:[exact=JSUInt31|powerset=0]*/
+positionalWithOneDefaultOnStatic([
+  /*[exact=JSUInt31|powerset=0]*/ parameter = 1,
+]) {
   return parameter;
 }
diff --git a/pkg/compiler/test/inference/data/deferred_load.dart b/pkg/compiler/test/inference/data/deferred_load.dart
index e6c371e..2c8babb 100644
--- a/pkg/compiler/test/inference/data/deferred_load.dart
+++ b/pkg/compiler/test/inference/data/deferred_load.dart
@@ -4,10 +4,10 @@
 
 import 'package:expect/expect.dart' deferred as expect;
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   callLoadLibrary();
 }
 
-/*member: callLoadLibrary:[exact=_Future]*/
+/*member: callLoadLibrary:[exact=_Future|powerset=0]*/
 callLoadLibrary() => expect.loadLibrary();
diff --git a/pkg/compiler/test/inference/data/deferred_load_get.dart b/pkg/compiler/test/inference/data/deferred_load_get.dart
index 27a7a3a..8d7c40e 100644
--- a/pkg/compiler/test/inference/data/deferred_load_get.dart
+++ b/pkg/compiler/test/inference/data/deferred_load_get.dart
@@ -6,12 +6,12 @@
 
 // Synthetic getter added by kernel.
 
-/*member: _#loadLibrary_expect:[exact=_Future]*/
+/*member: _#loadLibrary_expect:[exact=_Future|powerset=0]*/
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   tearOffLoadLibrary();
 }
 
-/*member: tearOffLoadLibrary:[subclass=Closure]*/
+/*member: tearOffLoadLibrary:[subclass=Closure|powerset=0]*/
 tearOffLoadLibrary() => expect.loadLibrary;
diff --git a/pkg/compiler/test/inference/data/dictionary_types.dart b/pkg/compiler/test/inference/data/dictionary_types.dart
index 464ec76..fd41375 100644
--- a/pkg/compiler/test/inference/data/dictionary_types.dart
+++ b/pkg/compiler/test/inference/data/dictionary_types.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   test1();
   test2();
@@ -11,7 +11,7 @@
   test5();
 }
 
-/*member: dictionaryA1:Map([exact=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/
+/*member: dictionaryA1:Map([exact=JsLinkedHashMap|powerset=0], key: [null|subclass=Object|powerset=1], value: [null|subclass=Object|powerset=1], powerset: 0)*/
 dynamic dictionaryA1 = {
   'string': "aString",
   'int': 42,
@@ -19,7 +19,7 @@
   'list': [],
 };
 
-/*member: dictionaryB1:Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null), stringTwo: Value([null|exact=JSString], value: "anotherString"), intTwo: [null|exact=JSUInt31]})*/
+/*member: dictionaryB1:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0), stringTwo: Value([null|exact=JSString|powerset=1], value: "anotherString", powerset: 1), intTwo: [null|exact=JSUInt31|powerset=1]}, powerset: 0)*/
 dynamic dictionaryB1 = {
   'string': "aString",
   'int': 42,
@@ -27,48 +27,48 @@
   'list': [],
 };
 
-/*member: otherDict1:Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSString], [exact=JSUInt31]), map: {stringTwo: Value([exact=JSString], value: "anotherString"), intTwo: [exact=JSUInt31]})*/
+/*member: otherDict1:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {stringTwo: Value([exact=JSString|powerset=0], value: "anotherString", powerset: 0), intTwo: [exact=JSUInt31|powerset=0]}, powerset: 0)*/
 dynamic otherDict1 = {'stringTwo': "anotherString", 'intTwo': 84};
 
-/*member: int1:[exact=JSUInt31]*/
+/*member: int1:[exact=JSUInt31|powerset=0]*/
 dynamic int1 = 0;
 
-/*member: anotherInt1:[exact=JSUInt31]*/
+/*member: anotherInt1:[exact=JSUInt31|powerset=0]*/
 dynamic anotherInt1 = 0;
 
-/*member: nullOrInt1:[null|exact=JSUInt31]*/
+/*member: nullOrInt1:[null|exact=JSUInt31|powerset=1]*/
 dynamic nullOrInt1 = 0;
 
-/*member: dynamic1:[null|subclass=Object]*/
+/*member: dynamic1:[null|subclass=Object|powerset=1]*/
 dynamic dynamic1 = 0;
 
-/*member: test1:[null]*/
+/*member: test1:[null|powerset=1]*/
 test1() {
   dictionaryA1
-      . /*invoke: Map([exact=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/ addAll(
+      . /*invoke: Map([exact=JsLinkedHashMap|powerset=0], key: [null|subclass=Object|powerset=1], value: [null|subclass=Object|powerset=1], powerset: 0)*/ addAll(
         otherDict1,
       );
   dictionaryB1
-      . /*invoke: Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null), stringTwo: Value([null|exact=JSString], value: "anotherString"), intTwo: [null|exact=JSUInt31]})*/ addAll(
+      . /*invoke: Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0), stringTwo: Value([null|exact=JSString|powerset=1], value: "anotherString", powerset: 1), intTwo: [null|exact=JSUInt31|powerset=1]}, powerset: 0)*/ addAll(
         {'stringTwo': "anotherString", 'intTwo': 84},
       );
   int1 =
       dictionaryB1
-      /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null), stringTwo: Value([null|exact=JSString], value: "anotherString"), intTwo: [null|exact=JSUInt31]})*/
+      /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0), stringTwo: Value([null|exact=JSString|powerset=1], value: "anotherString", powerset: 1), intTwo: [null|exact=JSUInt31|powerset=1]}, powerset: 0)*/
       ['int'];
   anotherInt1 =
       otherDict1
-      /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSString], [exact=JSUInt31]), map: {stringTwo: Value([exact=JSString], value: "anotherString"), intTwo: [exact=JSUInt31]})*/
+      /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {stringTwo: Value([exact=JSString|powerset=0], value: "anotherString", powerset: 0), intTwo: [exact=JSUInt31|powerset=0]}, powerset: 0)*/
       ['intTwo'];
   dynamic1 =
-      dictionaryA1 /*Map([exact=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/ ['int'];
+      dictionaryA1 /*Map([exact=JsLinkedHashMap|powerset=0], key: [null|subclass=Object|powerset=1], value: [null|subclass=Object|powerset=1], powerset: 0)*/ ['int'];
   nullOrInt1 =
       dictionaryB1
-      /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null), stringTwo: Value([null|exact=JSString], value: "anotherString"), intTwo: [null|exact=JSUInt31]})*/
+      /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0), stringTwo: Value([null|exact=JSString|powerset=1], value: "anotherString", powerset: 1), intTwo: [null|exact=JSUInt31|powerset=1]}, powerset: 0)*/
       ['intTwo'];
 }
 
-/*member: dictionaryA2:Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+/*member: dictionaryA2:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
 dynamic dictionaryA2 = {
   'string': "aString",
   'int': 42,
@@ -76,161 +76,161 @@
   'list': [],
 };
 
-/*member: dictionaryB2:Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), intTwo: [exact=JSUInt31], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+/*member: dictionaryB2:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), intTwo: [exact=JSUInt31|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
 dynamic dictionaryB2 = {'string': "aString", 'intTwo': 42, 'list': []};
 
-/*member: nullOrInt2:[null|exact=JSUInt31]*/
+/*member: nullOrInt2:[null|exact=JSUInt31|powerset=1]*/
 dynamic nullOrInt2 = 0;
 
-/*member: aString2:[exact=JSString]*/
+/*member: aString2:[exact=JSString|powerset=0]*/
 dynamic aString2 = "";
 
-/*member: doubleOrNull2:[null|exact=JSNumNotInt]*/
+/*member: doubleOrNull2:[null|exact=JSNumNotInt|powerset=1]*/
 dynamic doubleOrNull2 = 22.2;
 
-/*member: test2:[null]*/
+/*member: test2:[null|powerset=1]*/
 test2() {
   var union =
       dictionaryA2
-          /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+          /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
           ['foo']
           ? dictionaryA2
           : dictionaryB2;
   nullOrInt2 =
       union
-      /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {int: [null|exact=JSUInt31], double: [null|exact=JSNumNotInt], string: Value([exact=JSString], value: "aString"), intTwo: [null|exact=JSUInt31], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+      /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {int: [null|exact=JSUInt31|powerset=1], double: [null|exact=JSNumNotInt|powerset=1], string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), intTwo: [null|exact=JSUInt31|powerset=1], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
       ['intTwo'];
   aString2 =
       union
-      /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {int: [null|exact=JSUInt31], double: [null|exact=JSNumNotInt], string: Value([exact=JSString], value: "aString"), intTwo: [null|exact=JSUInt31], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+      /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {int: [null|exact=JSUInt31|powerset=1], double: [null|exact=JSNumNotInt|powerset=1], string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), intTwo: [null|exact=JSUInt31|powerset=1], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
       ['string'];
   doubleOrNull2 =
       union
-      /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {int: [null|exact=JSUInt31], double: [null|exact=JSNumNotInt], string: Value([exact=JSString], value: "aString"), intTwo: [null|exact=JSUInt31], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+      /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {int: [null|exact=JSUInt31|powerset=1], double: [null|exact=JSNumNotInt|powerset=1], string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), intTwo: [null|exact=JSUInt31|powerset=1], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
       ['double'];
 }
 
-/*member: dictionary3:Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+/*member: dictionary3:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
 dynamic dictionary3 = {
   'string': "aString",
   'int': 42,
   'double': 21.5,
   'list': [],
 };
-/*member: keyD3:Value([exact=JSString], value: "double")*/
+/*member: keyD3:Value([exact=JSString|powerset=0], value: "double", powerset: 0)*/
 dynamic keyD3 = 'double';
 
-/*member: keyI3:Value([exact=JSString], value: "int")*/
+/*member: keyI3:Value([exact=JSString|powerset=0], value: "int", powerset: 0)*/
 dynamic keyI3 = 'int';
 
-/*member: keyN3:Value([exact=JSString], value: "notFoundInMap")*/
+/*member: keyN3:Value([exact=JSString|powerset=0], value: "notFoundInMap", powerset: 0)*/
 dynamic keyN3 = 'notFoundInMap';
 
-/*member: knownDouble3:[exact=JSNumNotInt]*/
+/*member: knownDouble3:[exact=JSNumNotInt|powerset=0]*/
 dynamic knownDouble3 = 42.2;
 
-/*member: intOrNull3:[null|exact=JSUInt31]*/
+/*member: intOrNull3:[null|exact=JSUInt31|powerset=1]*/
 dynamic intOrNull3 =
     dictionary3
-    /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+    /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
     [keyI3];
 
-/*member: justNull3:[null]*/
+/*member: justNull3:[null|powerset=1]*/
 dynamic justNull3 =
     dictionary3
-    /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+    /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
     [keyN3];
 
-/*member: test3:[null]*/
+/*member: test3:[null|powerset=1]*/
 test3() {
   knownDouble3 =
       dictionary3
-      /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+      /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
       [keyD3];
   // ignore: unused_local_variable
   var x = [intOrNull3, justNull3];
 }
 
 class A4 {
-  /*member: A4.:[exact=A4]*/
+  /*member: A4.:[exact=A4|powerset=0]*/
   A4();
-  /*member: A4.foo4:[exact=JSUInt31]*/
+  /*member: A4.foo4:[exact=JSUInt31|powerset=0]*/
   foo4(
-    /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSString], [exact=JSUInt31]), map: {anInt: [exact=JSUInt31], aString: Value([exact=JSString], value: "theString")})*/ value,
+    /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {anInt: [exact=JSUInt31|powerset=0], aString: Value([exact=JSString|powerset=0], value: "theString", powerset: 0)}, powerset: 0)*/ value,
   ) {
-    return value /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSString], [exact=JSUInt31]), map: {anInt: [exact=JSUInt31], aString: Value([exact=JSString], value: "theString")})*/ ['anInt'];
+    return value /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {anInt: [exact=JSUInt31|powerset=0], aString: Value([exact=JSString|powerset=0], value: "theString", powerset: 0)}, powerset: 0)*/ ['anInt'];
   }
 }
 
 class B4 {
-  /*member: B4.:[exact=B4]*/
+  /*member: B4.:[exact=B4|powerset=0]*/
   B4();
 
-  /*member: B4.foo4:[exact=JSUInt31]*/
+  /*member: B4.foo4:[exact=JSUInt31|powerset=0]*/
   foo4(
-    /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSString], [exact=JSUInt31]), map: {anInt: [exact=JSUInt31], aString: Value([exact=JSString], value: "theString")})*/ value,
+    /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {anInt: [exact=JSUInt31|powerset=0], aString: Value([exact=JSString|powerset=0], value: "theString", powerset: 0)}, powerset: 0)*/ value,
   ) {
     return 0;
   }
 }
 
-/*member: test4:[null]*/
+/*member: test4:[null|powerset=1]*/
 test4() {
   var dictionary = {'anInt': 42, 'aString': "theString"};
   var it;
   if ([true, false]
-  /*Container([exact=JSExtendableArray], element: [exact=JSBool], length: 2)*/
+  /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSBool|powerset=0], length: 2, powerset: 0)*/
   [0]) {
     it = A4();
   } else {
     it = B4();
   }
   print(
-    it. /*invoke: Union([exact=A4], [exact=B4])*/ foo4(
+    it. /*invoke: Union([exact=A4|powerset=0], [exact=B4|powerset=0], powerset: 0)*/ foo4(
           dictionary,
-        ) /*invoke: [exact=JSUInt31]*/ +
+        ) /*invoke: [exact=JSUInt31|powerset=0]*/ +
         2,
   );
 }
 
-/*member: dict5:Map([null|exact=JsLinkedHashMap], key: [exact=JSString], value: [null|subclass=Object])*/
+/*member: dict5:Map([null|exact=JsLinkedHashMap|powerset=1], key: [exact=JSString|powerset=0], value: [null|subclass=Object|powerset=1], powerset: 1)*/
 dynamic dict5 = makeMap5([1, 2]);
 
-/*member: notInt5:[null|subclass=Object]*/
+/*member: notInt5:[null|subclass=Object|powerset=1]*/
 dynamic notInt5 = 0;
 
-/*member: alsoNotInt5:[null|subclass=Object]*/
+/*member: alsoNotInt5:[null|subclass=Object|powerset=1]*/
 dynamic alsoNotInt5 = 0;
 
-/*member: makeMap5:Map([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|subclass=Object])*/
+/*member: makeMap5:Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|subclass=Object|powerset=1], powerset: 0)*/
 makeMap5(
-  /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/ values,
+  /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/ values,
 ) {
   return {
     'moo':
         values
-        /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/
+        /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/
         [0],
     'boo':
         values
-        /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/
+        /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/
         [1],
   };
 }
 
-/*member: test5:[null]*/
+/*member: test5:[null|powerset=1]*/
 test5() {
   dict5
-      /*update: Map([null|exact=JsLinkedHashMap], key: [exact=JSString], value: [null|subclass=Object])*/
+      /*update: Map([null|exact=JsLinkedHashMap|powerset=1], key: [exact=JSString|powerset=0], value: [null|subclass=Object|powerset=1], powerset: 1)*/
       ['goo'] =
       42;
   var closure =
-      /*Map([null|exact=JsLinkedHashMap], key: [exact=JSString], value: [null|subclass=Object])*/
+      /*Map([null|exact=JsLinkedHashMap|powerset=1], key: [exact=JSString|powerset=0], value: [null|subclass=Object|powerset=1], powerset: 1)*/
       () => dict5;
   notInt5 = closure()['boo'];
   alsoNotInt5 =
       dict5
-      /*Map([null|exact=JsLinkedHashMap], key: [exact=JSString], value: [null|subclass=Object])*/
+      /*Map([null|exact=JsLinkedHashMap|powerset=1], key: [exact=JSString|powerset=0], value: [null|subclass=Object|powerset=1], powerset: 1)*/
       ['goo'];
   print("$notInt5 and $alsoNotInt5.");
 }
diff --git a/pkg/compiler/test/inference/data/do.dart b/pkg/compiler/test/inference/data/do.dart
index 3ca816d..6d4bc51 100644
--- a/pkg/compiler/test/inference/data/do.dart
+++ b/pkg/compiler/test/inference/data/do.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   simpleDo();
   doNull();
@@ -16,24 +16,24 @@
 /// Simple int based do-while loop.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: simpleDo:[null]*/
+/*member: simpleDo:[null|powerset=1]*/
 simpleDo() {
   var i = 0;
   do {
-    i = i /*invoke: [subclass=JSPositiveInt]*/ + 1;
-  } while (i /*invoke: [subclass=JSPositiveInt]*/ < 10);
-  i. /*invoke: [subclass=JSPositiveInt]*/ abs();
+    i = i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ + 1;
+  } while (i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ < 10);
+  i. /*invoke: [subclass=JSPositiveInt|powerset=0]*/ abs();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Do-while loop with null test.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: doNull:[exact=JSString]*/
+/*member: doNull:[exact=JSString|powerset=0]*/
 doNull() {
   var o;
   do {
-    o = o. /*invoke: [null|exact=JSString]*/ toString();
+    o = o. /*invoke: [null|exact=JSString|powerset=1]*/ toString();
   } while (o == null);
   return o;
 }
@@ -42,12 +42,12 @@
 /// Do-while loop with not-null test.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: doNotNull:[exact=JSString]*/
+/*member: doNotNull:[exact=JSString|powerset=0]*/
 doNotNull() {
   var o = '';
   do {
-    o = o. /*invoke: [exact=JSString]*/ toString();
-  } while (o /*invoke: [exact=JSString]*/ != null);
+    o = o. /*invoke: [exact=JSString|powerset=0]*/ toString();
+  } while (o /*invoke: [exact=JSString|powerset=0]*/ != null);
   return o;
 }
 
@@ -55,12 +55,12 @@
 /// Do-while loop with null test known to be false.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: doNullFalse:[exact=JSString]*/
+/*member: doNullFalse:[exact=JSString|powerset=0]*/
 doNullFalse() {
   var o = '';
   do {
-    o = o. /*invoke: [exact=JSString]*/ toString();
-  } while (o /*invoke: [exact=JSString]*/ == null);
+    o = o. /*invoke: [exact=JSString|powerset=0]*/ toString();
+  } while (o /*invoke: [exact=JSString|powerset=0]*/ == null);
   return o;
 }
 
@@ -68,11 +68,11 @@
 /// Do-while loop with not-null test known to be true.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: doNotNullTrue:[exact=JSString]*/
+/*member: doNotNullTrue:[exact=JSString|powerset=0]*/
 doNotNullTrue() {
   var o = null;
   do {
-    o = o. /*invoke: [null|exact=JSString]*/ toString();
+    o = o. /*invoke: [null|exact=JSString|powerset=1]*/ toString();
   } while (o != null);
   return o;
 }
@@ -81,31 +81,31 @@
 /// Do-while loop with not-null test that mixes field accesses.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  /*member: Class1.field:[null|exact=Class2]*/
+  /*member: Class1.field:[null|exact=Class2|powerset=1]*/
   var field;
 }
 
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
 class Class2 {
-  /*member: Class2.field:[null|exact=Class1]*/
+  /*member: Class2.field:[null|exact=Class1|powerset=1]*/
   var field;
 }
 
-/*member: _doUnion:Union(null, [exact=Class1], [exact=Class2])*/
-_doUnion(/*[exact=Class1]*/ o) {
+/*member: _doUnion:Union(null, [exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 1)*/
+_doUnion(/*[exact=Class1|powerset=0]*/ o) {
   do {
-    o = o. /*Union(null, [exact=Class1], [exact=Class2])*/ field;
+    o = o. /*Union(null, [exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 1)*/ field;
   } while (o != null);
   return o;
 }
 
-/*member: doUnion:[null]*/
+/*member: doUnion:[null|powerset=1]*/
 doUnion() {
   var c1 = Class1();
   var c2 = Class2();
-  c1. /*update: [exact=Class1]*/ field = c2;
-  c2. /*update: [exact=Class2]*/ field = c1;
+  c1. /*update: [exact=Class1|powerset=0]*/ field = c2;
+  c2. /*update: [exact=Class2|powerset=0]*/ field = c1;
   _doUnion(c1);
 }
diff --git a/pkg/compiler/test/inference/data/enum.dart b/pkg/compiler/test/inference/data/enum.dart
index 04ba330..f4a9e47 100644
--- a/pkg/compiler/test/inference/data/enum.dart
+++ b/pkg/compiler/test/inference/data/enum.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   enumValue();
   enumIndex();
@@ -17,7 +17,7 @@
 
 enum Enum1 { a }
 
-/*member: enumValue:[exact=Enum1]*/
+/*member: enumValue:[exact=Enum1|powerset=0]*/
 enumValue() => Enum1.a;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -26,8 +26,8 @@
 
 enum Enum2 { a }
 
-/*member: enumIndex:[exact=JSUInt31]*/
-enumIndex() => Enum2.a. /*[exact=Enum2]*/ index;
+/*member: enumIndex:[exact=JSUInt31|powerset=0]*/
+enumIndex() => Enum2.a. /*[exact=Enum2|powerset=0]*/ index;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Access an enum 'values' property.
@@ -35,7 +35,7 @@
 
 enum Enum3 { a, b }
 
-/*member: enumValues:Container([exact=JSUnmodifiableArray], element: [exact=Enum3], length: 2)*/
+/*member: enumValues:Container([exact=JSUnmodifiableArray|powerset=0], element: [exact=Enum3|powerset=0], length: 2, powerset: 0)*/
 enumValues() => Enum3.values;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -44,9 +44,9 @@
 
 enum Enum4 { a }
 
-/*member: enumToString1:[exact=JSString]*/
+/*member: enumToString1:[exact=JSString|powerset=0]*/
 enumToString1() {
-  return Enum4.a. /*invoke: [exact=Enum4]*/ toString();
+  return Enum4.a. /*invoke: [exact=Enum4|powerset=0]*/ toString();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -55,8 +55,8 @@
 
 enum Enum5 { a, b }
 
-/*member: enumToString2:[exact=JSString]*/
+/*member: enumToString2:[exact=JSString|powerset=0]*/
 enumToString2() {
-  Enum5.b. /*invoke: [exact=Enum5]*/ toString();
-  return Enum5.a. /*invoke: [exact=Enum5]*/ toString();
+  Enum5.b. /*invoke: [exact=Enum5|powerset=0]*/ toString();
+  return Enum5.a. /*invoke: [exact=Enum5|powerset=0]*/ toString();
 }
diff --git a/pkg/compiler/test/inference/data/expose_this.dart b/pkg/compiler/test/inference/data/expose_this.dart
index 40e4bcf..c5e94ad 100644
--- a/pkg/compiler/test/inference/data/expose_this.dart
+++ b/pkg/compiler/test/inference/data/expose_this.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   exposeThis1();
   exposeThis2();
@@ -17,24 +17,24 @@
 // Expose this through a top level method invocation.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _method1:[null]*/
-_method1(/*[exact=Class1]*/ o) {}
+/*member: _method1:[null|powerset=1]*/
+_method1(/*[exact=Class1|powerset=0]*/ o) {}
 
 class Class1 {
   // The inferred type of the field includes `null` because `this` has been
   // exposed before its initialization.
-  /*member: Class1.field:[null|exact=JSUInt31]*/
+  /*member: Class1.field:[null|exact=JSUInt31|powerset=1]*/
   var field;
 
-  /*member: Class1.:[exact=Class1]*/
+  /*member: Class1.:[exact=Class1|powerset=0]*/
   Class1() {
     _method1(this);
-    /*update: [exact=Class1]*/
+    /*update: [exact=Class1|powerset=0]*/
     field = 42;
   }
 }
 
-/*member: exposeThis1:[exact=Class1]*/
+/*member: exposeThis1:[exact=Class1|powerset=0]*/
 exposeThis1() => Class1();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -42,22 +42,22 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class2 {
-  /*member: Class2.field:[null|exact=JSUInt31]*/
+  /*member: Class2.field:[null|exact=JSUInt31|powerset=1]*/
   var field;
 
-  /*member: Class2.:[exact=Class2]*/
+  /*member: Class2.:[exact=Class2|powerset=0]*/
   Class2() {
-    /*invoke: [exact=Class2]*/
+    /*invoke: [exact=Class2|powerset=0]*/
     method();
-    /*update: [exact=Class2]*/
+    /*update: [exact=Class2|powerset=0]*/
     field = 42;
   }
 
-  /*member: Class2.method:[null]*/
+  /*member: Class2.method:[null|powerset=1]*/
   method() {}
 }
 
-/*member: exposeThis2:[exact=Class2]*/
+/*member: exposeThis2:[exact=Class2|powerset=0]*/
 exposeThis2() => Class2();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -65,40 +65,40 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class3 {
-  /*member: Class3.field:[exact=JSUInt31]*/
+  /*member: Class3.field:[exact=JSUInt31|powerset=0]*/
   var field;
 
-  /*member: Class3.:[exact=Class3]*/
+  /*member: Class3.:[exact=Class3|powerset=0]*/
   Class3() {
     this;
-    /*update: [exact=Class3]*/
+    /*update: [exact=Class3|powerset=0]*/
     field = 42;
   }
 }
 
-/*member: exposeThis3:[exact=Class3]*/
+/*member: exposeThis3:[exact=Class3|powerset=0]*/
 exposeThis3() => Class3();
 
 ////////////////////////////////////////////////////////////////////////////////
 // Expose this through a static field assignment.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: field1:[null|exact=Class4]*/
+/*member: field1:[null|exact=Class4|powerset=1]*/
 var field1;
 
 class Class4 {
-  /*member: Class4.field:[null|exact=JSUInt31]*/
+  /*member: Class4.field:[null|exact=JSUInt31|powerset=1]*/
   var field;
 
-  /*member: Class4.:[exact=Class4]*/
+  /*member: Class4.:[exact=Class4|powerset=0]*/
   Class4() {
     field1 = this;
-    /*update: [exact=Class4]*/
+    /*update: [exact=Class4|powerset=0]*/
     field = 42;
   }
 }
 
-/*member: exposeThis4:[exact=Class4]*/
+/*member: exposeThis4:[exact=Class4|powerset=0]*/
 exposeThis4() => Class4();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -106,18 +106,18 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class5 {
-  /*member: Class5.field:[null|exact=JSUInt31]*/
+  /*member: Class5.field:[null|exact=JSUInt31|powerset=1]*/
   var field;
 
-  /*member: Class5.:[exact=Class5]*/
-  Class5(/*[null]*/ o) {
-    o. /*update: [null]*/ field5 = this;
-    /*update: [exact=Class5]*/
+  /*member: Class5.:[exact=Class5|powerset=0]*/
+  Class5(/*[null|powerset=1]*/ o) {
+    o. /*update: [null|powerset=1]*/ field5 = this;
+    /*update: [exact=Class5|powerset=0]*/
     field = 42;
   }
 }
 
-/*member: exposeThis5:[exact=Class5]*/
+/*member: exposeThis5:[exact=Class5|powerset=0]*/
 exposeThis5() => Class5(null);
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -125,20 +125,20 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class6 {
-  /*member: Class6.field:[null|exact=JSUInt31]*/
+  /*member: Class6.field:[null|exact=JSUInt31|powerset=1]*/
   var field;
 
-  /*member: Class6.:[exact=Class6]*/
+  /*member: Class6.:[exact=Class6|powerset=0]*/
   Class6() {
     // ignore: UNUSED_LOCAL_VARIABLE
     var o;
     o = this;
-    /*update: [exact=Class6]*/
+    /*update: [exact=Class6|powerset=0]*/
     field = 42;
   }
 }
 
-/*member: exposeThis6:[exact=Class6]*/
+/*member: exposeThis6:[exact=Class6|powerset=0]*/
 exposeThis6() => Class6();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -146,17 +146,17 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class7 {
-  /*member: Class7.field:[null|exact=JSUInt31]*/
+  /*member: Class7.field:[null|exact=JSUInt31|powerset=1]*/
   var field;
 
-  /*member: Class7.:[exact=Class7]*/
+  /*member: Class7.:[exact=Class7|powerset=0]*/
   Class7() {
     // ignore: UNUSED_LOCAL_VARIABLE
     var o = this;
-    /*update: [exact=Class7]*/
+    /*update: [exact=Class7|powerset=0]*/
     field = 42;
   }
 }
 
-/*member: exposeThis7:[exact=Class7]*/
+/*member: exposeThis7:[exact=Class7|powerset=0]*/
 exposeThis7() => Class7();
diff --git a/pkg/compiler/test/inference/data/expose_this_closure.dart b/pkg/compiler/test/inference/data/expose_this_closure.dart
index 9fabc5b..4494b28 100644
--- a/pkg/compiler/test/inference/data/expose_this_closure.dart
+++ b/pkg/compiler/test/inference/data/expose_this_closure.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   exposeThis1();
   exposeThis2();
@@ -17,16 +17,16 @@
 class Class1 {
   // The inferred type of the field does _not_ include `null` because `this`
   // is _not_ been exposed.
-  /*member: Class1.field1:[exact=JSUInt31]*/
+  /*member: Class1.field1:[exact=JSUInt31|powerset=0]*/
   var field1;
-  /*member: Class1.field2:[exact=JSUInt31]*/
+  /*member: Class1.field2:[exact=JSUInt31|powerset=0]*/
   var field2;
 
-  /*member: Class1.:[exact=Class1]*/
+  /*member: Class1.:[exact=Class1|powerset=0]*/
   Class1() : field1 = 42, field2 = 87;
 }
 
-/*member: exposeThis1:[exact=Class1]*/
+/*member: exposeThis1:[exact=Class1|powerset=0]*/
 exposeThis1() => Class1();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -34,21 +34,21 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class2 {
-  /*member: Class2.field1:[exact=JSUInt31]*/
+  /*member: Class2.field1:[exact=JSUInt31|powerset=0]*/
   var field1;
-  /*member: Class2.field2:[exact=JSUInt31]*/
+  /*member: Class2.field2:[exact=JSUInt31|powerset=0]*/
   var field2;
 
-  /*member: Class2.:[exact=Class2]*/
+  /*member: Class2.:[exact=Class2|powerset=0]*/
   Class2() {
-    /*update: [exact=Class2]*/
+    /*update: [exact=Class2|powerset=0]*/
     field1 = 42;
-    /*update: [exact=Class2]*/
+    /*update: [exact=Class2|powerset=0]*/
     field2 = 87;
   }
 }
 
-/*member: exposeThis2:[exact=Class2]*/
+/*member: exposeThis2:[exact=Class2|powerset=0]*/
 exposeThis2() => Class2();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -56,21 +56,21 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class4 {
-  /*member: Class4.field1:[exact=JSUInt31]*/
+  /*member: Class4.field1:[exact=JSUInt31|powerset=0]*/
   var field1;
-  /*member: Class4.field2:[exact=JSUInt31]*/
+  /*member: Class4.field2:[exact=JSUInt31|powerset=0]*/
   var field2;
 
-  /*member: Class4.:[exact=Class4]*/
+  /*member: Class4.:[exact=Class4|powerset=0]*/
   Class4() : field1 = 42, field2 = 87 {
-    /*[exact=JSUInt31]*/
+    /*[exact=JSUInt31|powerset=0]*/
     () {
       return 42;
     };
   }
 }
 
-/*member: exposeThis4:[exact=Class4]*/
+/*member: exposeThis4:[exact=Class4|powerset=0]*/
 exposeThis4() => Class4();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -78,23 +78,23 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class5 {
-  /*member: Class5.field1:[exact=JSUInt31]*/
+  /*member: Class5.field1:[exact=JSUInt31|powerset=0]*/
   var field1;
-  /*member: Class5.field2:[null|exact=JSUInt31]*/
+  /*member: Class5.field2:[null|exact=JSUInt31|powerset=1]*/
   var field2;
 
-  /*member: Class5.:[exact=Class5]*/
+  /*member: Class5.:[exact=Class5|powerset=0]*/
   Class5() {
-    /*update: [exact=Class5]*/
+    /*update: [exact=Class5|powerset=0]*/
     field1 = 42;
-    /*[exact=JSUInt31]*/
+    /*[exact=JSUInt31|powerset=0]*/
     () {
       return 42;
     };
-    /*update: [exact=Class5]*/
+    /*update: [exact=Class5|powerset=0]*/
     field2 = 87;
   }
 }
 
-/*member: exposeThis5:[exact=Class5]*/
+/*member: exposeThis5:[exact=Class5|powerset=0]*/
 exposeThis5() => Class5();
diff --git a/pkg/compiler/test/inference/data/expose_this_field.dart b/pkg/compiler/test/inference/data/expose_this_field.dart
index 120bb8e..4d2709e 100644
--- a/pkg/compiler/test/inference/data/expose_this_field.dart
+++ b/pkg/compiler/test/inference/data/expose_this_field.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   exposeThis1();
   exposeThis2();
@@ -20,17 +20,17 @@
 class Class1 {
   // The inferred type of the field does _not_ include `null` because it has
   // _not_ been read before its initialization.
-  /*member: Class1.field:[exact=JSUInt31]*/
+  /*member: Class1.field:[exact=JSUInt31|powerset=0]*/
   var field;
 
-  /*member: Class1.:[exact=Class1]*/
+  /*member: Class1.:[exact=Class1|powerset=0]*/
   Class1() {
-    /*update: [exact=Class1]*/
+    /*update: [exact=Class1|powerset=0]*/
     field = 42;
   }
 }
 
-/*member: exposeThis1:[exact=Class1]*/
+/*member: exposeThis1:[exact=Class1|powerset=0]*/
 exposeThis1() => Class1();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -40,17 +40,17 @@
 class Class2 {
   // The inferred type of the field includes `null` because it has been read
   // before its initialization.
-  /*member: Class2.field:[null]*/
+  /*member: Class2.field:[null|powerset=1]*/
   var field;
 
-  /*member: Class2.:[exact=Class2]*/
+  /*member: Class2.:[exact=Class2|powerset=0]*/
   Class2() {
-    /*update: [exact=Class2]*/
-    field = /*[exact=Class2]*/ field;
+    /*update: [exact=Class2|powerset=0]*/
+    field = /*[exact=Class2|powerset=0]*/ field;
   }
 }
 
-/*member: exposeThis2:[exact=Class2]*/
+/*member: exposeThis2:[exact=Class2|powerset=0]*/
 exposeThis2() => Class2();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -58,19 +58,19 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class3 {
-  /*member: Class3.field:[null|exact=JSUInt31]*/
+  /*member: Class3.field:[null|exact=JSUInt31|powerset=1]*/
   var field;
 
-  /*member: Class3.:[exact=Class3]*/
+  /*member: Class3.:[exact=Class3|powerset=0]*/
   Class3() {
-    /*update: [exact=Class3]*/
-    field = /*[exact=Class3]*/ field;
-    /*update: [exact=Class3]*/
+    /*update: [exact=Class3|powerset=0]*/
+    field = /*[exact=Class3|powerset=0]*/ field;
+    /*update: [exact=Class3|powerset=0]*/
     field = 42;
   }
 }
 
-/*member: exposeThis3:[exact=Class3]*/
+/*member: exposeThis3:[exact=Class3|powerset=0]*/
 exposeThis3() => Class3();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -78,19 +78,19 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class4 {
-  /*member: Class4.field:[null|exact=JSUInt31]*/
+  /*member: Class4.field:[null|exact=JSUInt31|powerset=1]*/
   var field;
 
-  /*member: Class4.:[exact=Class4]*/
+  /*member: Class4.:[exact=Class4|powerset=0]*/
   Class4() {
     // ignore: UNUSED_LOCAL_VARIABLE
-    var o = /*[exact=Class4]*/ field;
-    /*update: [exact=Class4]*/
+    var o = /*[exact=Class4|powerset=0]*/ field;
+    /*update: [exact=Class4|powerset=0]*/
     field = 42;
   }
 }
 
-/*member: exposeThis4:[exact=Class4]*/
+/*member: exposeThis4:[exact=Class4|powerset=0]*/
 exposeThis4() => Class4();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -98,19 +98,19 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class5 {
-  /*member: Class5.field:[null|subclass=JSPositiveInt]*/
+  /*member: Class5.field:[null|subclass=JSPositiveInt|powerset=1]*/
   var field;
 
-  /*member: Class5.:[exact=Class5]*/
+  /*member: Class5.:[exact=Class5|powerset=0]*/
   Class5() {
-    /*[exact=Class5]*/ /*update: [exact=Class5]*/
-    field /*invoke: [null|subclass=JSPositiveInt]*/ ++;
-    /*update: [exact=Class5]*/
+    /*[exact=Class5|powerset=0]*/ /*update: [exact=Class5|powerset=0]*/
+    field /*invoke: [null|subclass=JSPositiveInt|powerset=1]*/ ++;
+    /*update: [exact=Class5|powerset=0]*/
     field = 42;
   }
 }
 
-/*member: exposeThis5:[exact=Class5]*/
+/*member: exposeThis5:[exact=Class5|powerset=0]*/
 exposeThis5() => Class5();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -118,19 +118,19 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class6 {
-  /*member: Class6.field:[subclass=JSPositiveInt]*/
+  /*member: Class6.field:[subclass=JSPositiveInt|powerset=0]*/
   var field;
 
-  /*member: Class6.:[exact=Class6]*/
+  /*member: Class6.:[exact=Class6|powerset=0]*/
   Class6() {
-    /*update: [exact=Class6]*/
+    /*update: [exact=Class6|powerset=0]*/
     field = 42;
-    /*[exact=Class6]*/ /*update: [exact=Class6]*/
-    field /*invoke: [subclass=JSPositiveInt]*/ ++;
+    /*[exact=Class6|powerset=0]*/ /*update: [exact=Class6|powerset=0]*/
+    field /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++;
   }
 }
 
-/*member: exposeThis6:[exact=Class6]*/
+/*member: exposeThis6:[exact=Class6|powerset=0]*/
 exposeThis6() => Class6();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -138,24 +138,24 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class7 {
-  /*member: Class7.field1:[null|exact=JSUInt31]*/
+  /*member: Class7.field1:[null|exact=JSUInt31|powerset=1]*/
   var field1;
 
-  /*member: Class7.field2:[null|exact=JSUInt31]*/
+  /*member: Class7.field2:[null|exact=JSUInt31|powerset=1]*/
   var field2;
 
-  /*member: Class7.:[exact=Class7]*/
+  /*member: Class7.:[exact=Class7|powerset=0]*/
   Class7() {
     // ignore: UNUSED_LOCAL_VARIABLE
-    var o1 = /*[exact=Class7]*/ field1;
+    var o1 = /*[exact=Class7|powerset=0]*/ field1;
     // ignore: UNUSED_LOCAL_VARIABLE
-    var o2 = /*[exact=Class7]*/ field2;
-    /*update: [exact=Class7]*/
+    var o2 = /*[exact=Class7|powerset=0]*/ field2;
+    /*update: [exact=Class7|powerset=0]*/
     field1 = 42;
-    /*update: [exact=Class7]*/
+    /*update: [exact=Class7|powerset=0]*/
     field2 = 87;
   }
 }
 
-/*member: exposeThis7:[exact=Class7]*/
+/*member: exposeThis7:[exact=Class7|powerset=0]*/
 exposeThis7() => Class7();
diff --git a/pkg/compiler/test/inference/data/expose_this_mask.dart b/pkg/compiler/test/inference/data/expose_this_mask.dart
index 88560c1..2f0cefa 100644
--- a/pkg/compiler/test/inference/data/expose_this_mask.dart
+++ b/pkg/compiler/test/inference/data/expose_this_mask.dart
@@ -5,7 +5,7 @@
 /// Check that exposure of this is correctly restricted through the receiver
 /// mask.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   otherGetter();
   otherMethod();
@@ -23,27 +23,27 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class1 {
-  /*member: Class1.field1a:[exact=JSUInt31]*/
+  /*member: Class1.field1a:[exact=JSUInt31|powerset=0]*/
   var field1a;
-  /*member: Class1.field1b:[exact=JSUInt31]*/
+  /*member: Class1.field1b:[exact=JSUInt31|powerset=0]*/
   var field1b;
 
-  /*member: Class1.:[exact=Class1]*/
+  /*member: Class1.:[exact=Class1|powerset=0]*/
   Class1() : field1a = 42 {
-    /*update: [exact=Class1]*/
-    field1b = /*[exact=Class1]*/ field1a;
+    /*update: [exact=Class1|powerset=0]*/
+    field1b = /*[exact=Class1|powerset=0]*/ field1a;
   }
 }
 
-/*member: OtherClass1.:[exact=OtherClass1]*/
+/*member: OtherClass1.:[exact=OtherClass1|powerset=0]*/
 class OtherClass1 {
-  /*member: OtherClass1.field1a:[null]*/
+  /*member: OtherClass1.field1a:[null|powerset=1]*/
   get field1a => null;
 }
 
-/*member: otherGetter:[null]*/
+/*member: otherGetter:[null|powerset=1]*/
 otherGetter() {
-  OtherClass1(). /*[exact=OtherClass1]*/ field1a;
+  OtherClass1(). /*[exact=OtherClass1|powerset=0]*/ field1a;
   Class1();
 }
 
@@ -52,27 +52,27 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class2 {
-  /*member: Class2.field2a:[exact=JSUInt31]*/
+  /*member: Class2.field2a:[exact=JSUInt31|powerset=0]*/
   var field2a;
-  /*member: Class2.field2b:[exact=JSUInt31]*/
+  /*member: Class2.field2b:[exact=JSUInt31|powerset=0]*/
   var field2b;
 
-  /*member: Class2.:[exact=Class2]*/
+  /*member: Class2.:[exact=Class2|powerset=0]*/
   Class2() : field2a = 42 {
-    /*update: [exact=Class2]*/
-    field2b = /*[exact=Class2]*/ field2a;
+    /*update: [exact=Class2|powerset=0]*/
+    field2b = /*[exact=Class2|powerset=0]*/ field2a;
   }
 }
 
-/*member: OtherClass2.:[exact=OtherClass2]*/
+/*member: OtherClass2.:[exact=OtherClass2|powerset=0]*/
 class OtherClass2 {
-  /*member: OtherClass2.field2a:[null]*/
+  /*member: OtherClass2.field2a:[null|powerset=1]*/
   field2a() {}
 }
 
-/*member: otherMethod:[null]*/
+/*member: otherMethod:[null|powerset=1]*/
 otherMethod() {
-  OtherClass2(). /*[exact=OtherClass2]*/ field2a;
+  OtherClass2(). /*[exact=OtherClass2|powerset=0]*/ field2a;
   Class2();
 }
 
@@ -81,25 +81,25 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class3 {
-  /*member: Class3.field3a:[exact=JSUInt31]*/
+  /*member: Class3.field3a:[exact=JSUInt31|powerset=0]*/
   var field3a;
-  /*member: Class3.field3b:[exact=JSUInt31]*/
+  /*member: Class3.field3b:[exact=JSUInt31|powerset=0]*/
   var field3b;
 
-  /*member: Class3.:[exact=Class3]*/
+  /*member: Class3.:[exact=Class3|powerset=0]*/
   Class3() : field3a = 42 {
-    /*update: [exact=Class3]*/
-    field3b = /*[exact=Class3]*/ field3a;
+    /*update: [exact=Class3|powerset=0]*/
+    field3b = /*[exact=Class3|powerset=0]*/ field3a;
   }
 }
 
-/*member: OtherClass3.:[exact=OtherClass3]*/
+/*member: OtherClass3.:[exact=OtherClass3|powerset=0]*/
 class OtherClass3 {
-  /*member: OtherClass3.field3a:[null]*/
+  /*member: OtherClass3.field3a:[null|powerset=1]*/
   var field3a;
 }
 
-/*member: otherField:[null]*/
+/*member: otherField:[null|powerset=1]*/
 otherField() {
   OtherClass3();
   Class3();
@@ -109,26 +109,26 @@
 // Read a field when a field in the superclass has the same name.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: SuperClass5.:[exact=SuperClass5]*/
+/*member: SuperClass5.:[exact=SuperClass5|powerset=0]*/
 class SuperClass5 {
-  /*member: SuperClass5.field5a:[null|exact=JSUInt31]*/
+  /*member: SuperClass5.field5a:[null|exact=JSUInt31|powerset=1]*/
   var field5a;
 }
 
 class Class5 extends SuperClass5 {
-  /*member: Class5.field5a:[null|exact=JSUInt31]*/
+  /*member: Class5.field5a:[null|exact=JSUInt31|powerset=1]*/
   var field5a;
-  /*member: Class5.field5b:[null|exact=JSUInt31]*/
+  /*member: Class5.field5b:[null|exact=JSUInt31|powerset=1]*/
   var field5b;
 
-  /*member: Class5.:[exact=Class5]*/
+  /*member: Class5.:[exact=Class5|powerset=0]*/
   Class5() : field5a = 42 {
-    /*update: [exact=Class5]*/
-    field5b = /*[exact=Class5]*/ field5a;
+    /*update: [exact=Class5|powerset=0]*/
+    field5b = /*[exact=Class5|powerset=0]*/ field5a;
   }
 }
 
-/*member: superclassField:[null]*/
+/*member: superclassField:[null|powerset=1]*/
 superclassField() {
   SuperClass5();
   Class5();
@@ -139,27 +139,27 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class4 {
-  /*member: Class4.field4a:[null|exact=JSUInt31]*/
+  /*member: Class4.field4a:[null|exact=JSUInt31|powerset=1]*/
   var field4a;
-  /*member: Class4.field4b:[null|exact=JSUInt31]*/
+  /*member: Class4.field4b:[null|exact=JSUInt31|powerset=1]*/
   var field4b;
 
-  /*member: Class4.:[exact=Class4]*/
+  /*member: Class4.:[exact=Class4|powerset=0]*/
   Class4() : field4a = 42 {
-    /*update: [subclass=Class4]*/
-    field4b = /*[subclass=Class4]*/ field4a;
+    /*update: [subclass=Class4|powerset=0]*/
+    field4b = /*[subclass=Class4|powerset=0]*/ field4a;
   }
 }
 
 class SubClass4 extends Class4 {
-  /*member: SubClass4.field4a:[null|exact=JSUInt31]*/
+  /*member: SubClass4.field4a:[null|exact=JSUInt31|powerset=1]*/
   var field4a;
 
-  /*member: SubClass4.:[exact=SubClass4]*/
+  /*member: SubClass4.:[exact=SubClass4|powerset=0]*/
   SubClass4() : field4a = 42;
 }
 
-/*member: subclassFieldRead:[null]*/
+/*member: subclassFieldRead:[null|powerset=1]*/
 subclassFieldRead() {
   Class4();
   SubClass4();
@@ -170,33 +170,33 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class6 {
-  /*member: Class6.field6a:[exact=JSUInt31]*/
+  /*member: Class6.field6a:[exact=JSUInt31|powerset=0]*/
   var field6a;
-  /*member: Class6.field6b:[null|exact=JSUInt31]*/
+  /*member: Class6.field6b:[null|exact=JSUInt31|powerset=1]*/
   var field6b;
 
-  /*member: Class6.:[exact=Class6]*/
+  /*member: Class6.:[exact=Class6|powerset=0]*/
   Class6() : field6a = 42 {
-    /*update: [subclass=Class6]*/
-    field6b = /*[subclass=Class6]*/ field6a;
+    /*update: [subclass=Class6|powerset=0]*/
+    field6b = /*[subclass=Class6|powerset=0]*/ field6a;
   }
 }
 
 class SubClass6 extends Class6 {
-  /*member: SubClass6.field6b:[null|exact=JSUInt31]*/
+  /*member: SubClass6.field6b:[null|exact=JSUInt31|powerset=1]*/
   var field6b;
 
-  /*member: SubClass6.:[exact=SubClass6]*/
+  /*member: SubClass6.:[exact=SubClass6|powerset=0]*/
   SubClass6() : field6b = 42;
 
-  /*member: SubClass6.access:[null|exact=JSUInt31]*/
+  /*member: SubClass6.access:[null|exact=JSUInt31|powerset=1]*/
   get access => super.field6b;
 }
 
-/*member: subclassFieldWrite:[null|exact=JSUInt31]*/
+/*member: subclassFieldWrite:[null|exact=JSUInt31|powerset=1]*/
 subclassFieldWrite() {
   Class6();
-  return SubClass6(). /*[exact=SubClass6]*/ access;
+  return SubClass6(). /*[exact=SubClass6|powerset=0]*/ access;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -205,37 +205,37 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class9 {
-  /*member: Class9.field9a:[exact=JSUInt31]*/
+  /*member: Class9.field9a:[exact=JSUInt31|powerset=0]*/
   var field9a;
-  /*member: Class9.field9b:[null|exact=JSUInt31]*/
+  /*member: Class9.field9b:[null|exact=JSUInt31|powerset=1]*/
   var field9b;
 
-  /*member: Class9.:[exact=Class9]*/
+  /*member: Class9.:[exact=Class9|powerset=0]*/
   Class9() : field9a = 42 {
-    /*update: [subclass=Class9]*/
-    field9b = /*[subclass=Class9]*/ field9a;
+    /*update: [subclass=Class9|powerset=0]*/
+    field9b = /*[subclass=Class9|powerset=0]*/ field9a;
   }
 }
 
 class SubClass9a extends Class9 {
-  /*member: SubClass9a.field9b:[null|exact=JSUInt31]*/
+  /*member: SubClass9a.field9b:[null|exact=JSUInt31|powerset=1]*/
   var field9b;
 
-  /*member: SubClass9a.:[exact=SubClass9a]*/
+  /*member: SubClass9a.:[exact=SubClass9a|powerset=0]*/
   SubClass9a() : field9b = 42;
 
-  /*member: SubClass9a.access:[null|exact=JSUInt31]*/
+  /*member: SubClass9a.access:[null|exact=JSUInt31|powerset=1]*/
   get access => super.field9b;
 }
 
-/*member: SubClass9b.:[exact=SubClass9b]*/
+/*member: SubClass9b.:[exact=SubClass9b|powerset=0]*/
 class SubClass9b extends Class9 {}
 
-/*member: subclassesFieldWrite:[null|exact=JSUInt31]*/
+/*member: subclassesFieldWrite:[null|exact=JSUInt31|powerset=1]*/
 subclassesFieldWrite() {
   Class9();
   SubClass9b();
-  return SubClass9a(). /*[exact=SubClass9a]*/ access;
+  return SubClass9a(). /*[exact=SubClass9a|powerset=0]*/ access;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -243,26 +243,28 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class7 {
-  /*member: Class7.field7a:[exact=JSUInt31]*/
+  /*member: Class7.field7a:[exact=JSUInt31|powerset=0]*/
   var field7a;
-  /*member: Class7.field7b:[null|exact=JSUInt31]*/
+  /*member: Class7.field7b:[null|exact=JSUInt31|powerset=1]*/
   var field7b;
 
-  /*member: Class7.:[exact=Class7]*/
+  /*member: Class7.:[exact=Class7|powerset=0]*/
   Class7() : field7a = 42 {
-    field7b /*invoke: [subclass=Class7]*/ (/*[subclass=Class7]*/ field7a);
+    field7b /*invoke: [subclass=Class7|powerset=0]*/ (
+      /*[subclass=Class7|powerset=0]*/ field7a,
+    );
   }
 }
 
 class SubClass7 extends Class7 {
-  /*member: SubClass7.field7b:[null|exact=JSUInt31]*/
+  /*member: SubClass7.field7b:[null|exact=JSUInt31|powerset=1]*/
   var field7b;
 
-  /*member: SubClass7.:[exact=SubClass7]*/
+  /*member: SubClass7.:[exact=SubClass7|powerset=0]*/
   SubClass7() : field7b = 42;
 }
 
-/*member: subclassFieldInvoke:[null]*/
+/*member: subclassFieldInvoke:[null|powerset=1]*/
 subclassFieldInvoke() {
   Class7();
   SubClass7();
@@ -273,34 +275,34 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 abstract class Class8 {
-  /*member: Class8.field8:[null|exact=JSUInt31]*/
+  /*member: Class8.field8:[null|exact=JSUInt31|powerset=1]*/
   var field8;
 
-  /*member: Class8.:[subclass=Class8]*/
+  /*member: Class8.:[subclass=Class8|powerset=0]*/
   Class8() {
-    /*invoke: [subclass=Class8]*/
+    /*invoke: [subclass=Class8|powerset=0]*/
     method8();
   }
 
   method8();
 }
 
-/*member: SubClass8a.:[exact=SubClass8a]*/
+/*member: SubClass8a.:[exact=SubClass8a|powerset=0]*/
 class SubClass8a extends Class8 {
-  /*member: SubClass8a.method8:[null]*/
+  /*member: SubClass8a.method8:[null|powerset=1]*/
   method8() {
-    /*update: [exact=SubClass8a]*/
+    /*update: [exact=SubClass8a|powerset=0]*/
     field8 = 42;
   }
 }
 
-/*member: SubClass8b.:[exact=SubClass8b]*/
+/*member: SubClass8b.:[exact=SubClass8b|powerset=0]*/
 class SubClass8b extends Class8 {
-  /*member: SubClass8b.method8:[null]*/
+  /*member: SubClass8b.method8:[null|powerset=1]*/
   method8() {}
 }
 
-/*member: subclassFieldSet:[null]*/
+/*member: subclassFieldSet:[null|powerset=1]*/
 subclassFieldSet() {
   SubClass8a();
   SubClass8b();
diff --git a/pkg/compiler/test/inference/data/expose_this_super.dart b/pkg/compiler/test/inference/data/expose_this_super.dart
index d021ae4..5c57e4d 100644
--- a/pkg/compiler/test/inference/data/expose_this_super.dart
+++ b/pkg/compiler/test/inference/data/expose_this_super.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   exposeThis1();
   exposeThis2();
@@ -14,102 +14,102 @@
 // Expose this through super invocation.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Super1.:[exact=Class1]*/
+/*member: Super1.:[exact=Class1|powerset=0]*/
 abstract class Super1 {
-  /*member: Super1.method:[null]*/
+  /*member: Super1.method:[null|powerset=1]*/
   method() {}
 }
 
 class Class1 extends Super1 {
   // The inferred type of the field includes `null` because `this` has been
   // exposed before its initialization.
-  /*member: Class1.field:[null|exact=JSUInt31]*/
+  /*member: Class1.field:[null|exact=JSUInt31|powerset=1]*/
   var field;
 
-  /*member: Class1.:[exact=Class1]*/
+  /*member: Class1.:[exact=Class1|powerset=0]*/
   Class1() {
     super.method();
-    /*update: [exact=Class1]*/
+    /*update: [exact=Class1|powerset=0]*/
     field = 42;
   }
 }
 
-/*member: exposeThis1:[exact=Class1]*/
+/*member: exposeThis1:[exact=Class1|powerset=0]*/
 exposeThis1() => Class1();
 
 ////////////////////////////////////////////////////////////////////////////////
 // Expose this through super access.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Super2.:[exact=Class2]*/
+/*member: Super2.:[exact=Class2|powerset=0]*/
 abstract class Super2 {
-  /*member: Super2.getter:[null]*/
+  /*member: Super2.getter:[null|powerset=1]*/
   get getter => null;
 }
 
 class Class2 extends Super2 {
-  /*member: Class2.field:[null|exact=JSUInt31]*/
+  /*member: Class2.field:[null|exact=JSUInt31|powerset=1]*/
   var field;
 
-  /*member: Class2.:[exact=Class2]*/
+  /*member: Class2.:[exact=Class2|powerset=0]*/
   Class2() {
     super.getter;
-    /*update: [exact=Class2]*/
+    /*update: [exact=Class2|powerset=0]*/
     field = 42;
   }
 }
 
-/*member: exposeThis2:[exact=Class2]*/
+/*member: exposeThis2:[exact=Class2|powerset=0]*/
 exposeThis2() => Class2();
 
 ////////////////////////////////////////////////////////////////////////////////
 // Expose this through super access.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Super3.:[exact=Class3]*/
+/*member: Super3.:[exact=Class3|powerset=0]*/
 abstract class Super3 {
-  set setter(/*[null]*/ o) {}
+  set setter(/*[null|powerset=1]*/ o) {}
 }
 
 class Class3 extends Super3 {
-  /*member: Class3.field:[null|exact=JSUInt31]*/
+  /*member: Class3.field:[null|exact=JSUInt31|powerset=1]*/
   var field;
 
-  /*member: Class3.:[exact=Class3]*/
+  /*member: Class3.:[exact=Class3|powerset=0]*/
   Class3() {
     super.setter = null;
-    /*update: [exact=Class3]*/
+    /*update: [exact=Class3|powerset=0]*/
     field = 42;
   }
 }
 
-/*member: exposeThis3:[exact=Class3]*/
+/*member: exposeThis3:[exact=Class3|powerset=0]*/
 exposeThis3() => Class3();
 
 ////////////////////////////////////////////////////////////////////////////////
 // Expose this in the constructor of a super class.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: field4:[null|exact=Class4]*/
+/*member: field4:[null|exact=Class4|powerset=1]*/
 var field4;
 
 abstract class Super4 {
-  /*member: Super4.:[exact=Class4]*/
+  /*member: Super4.:[exact=Class4|powerset=0]*/
   Super4() {
     field4 = this;
   }
 }
 
 class Class4 extends Super4 {
-  /*member: Class4.field:[null|exact=JSUInt31]*/
+  /*member: Class4.field:[null|exact=JSUInt31|powerset=1]*/
   var field;
 
-  /*member: Class4.:[exact=Class4]*/
+  /*member: Class4.:[exact=Class4|powerset=0]*/
   Class4() {
-    /*update: [exact=Class4]*/
+    /*update: [exact=Class4|powerset=0]*/
     field = 42;
   }
 }
 
-/*member: exposeThis4:[exact=Class4]*/
+/*member: exposeThis4:[exact=Class4|powerset=0]*/
 exposeThis4() => Class4();
diff --git a/pkg/compiler/test/inference/data/factory.dart b/pkg/compiler/test/inference/data/factory.dart
index da7f9a2..f91b6cd 100644
--- a/pkg/compiler/test/inference/data/factory.dart
+++ b/pkg/compiler/test/inference/data/factory.dart
@@ -3,33 +3,33 @@
 // BSD-style license that can be found in the LICENSE file.
 
 class A {
-  /*member: A.generative:[exact=A]*/
+  /*member: A.generative:[exact=A|powerset=0]*/
   A.generative();
 
   factory A.redirect() = B;
 
-  /*member: A.fact:[exact=C]*/
+  /*member: A.fact:[exact=C|powerset=0]*/
   factory A.fact() => C();
 }
 
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
 class B implements A {}
 
-/*member: C.:[exact=C]*/
+/*member: C.:[exact=C|powerset=0]*/
 class C implements A {}
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   createGenerative();
   createRedirecting();
   createFactory();
 }
 
-/*member: createGenerative:[exact=A]*/
+/*member: createGenerative:[exact=A|powerset=0]*/
 createGenerative() => A.generative();
 
-/*member: createRedirecting:[exact=B]*/
+/*member: createRedirecting:[exact=B|powerset=0]*/
 createRedirecting() => A.redirect();
 
-/*member: createFactory:[exact=C]*/
+/*member: createFactory:[exact=C|powerset=0]*/
 createFactory() => A.fact();
diff --git a/pkg/compiler/test/inference/data/field_type.dart b/pkg/compiler/test/inference/data/field_type.dart
index a542ceb..f2417c4 100644
--- a/pkg/compiler/test/inference/data/field_type.dart
+++ b/pkg/compiler/test/inference/data/field_type.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   test1();
   test2();
@@ -36,314 +36,315 @@
   test30();
 }
 
-/*member: A1.:[exact=A1]*/
+/*member: A1.:[exact=A1|powerset=0]*/
 class A1 {
-  /*member: A1.f1:[null]*/
+  /*member: A1.f1:[null|powerset=1]*/
   int? f1;
 }
 
-/*member: test1:[null]*/
+/*member: test1:[null|powerset=1]*/
 test1() {
   A1();
 }
 
-/*member: A2.:[exact=A2]*/
+/*member: A2.:[exact=A2|powerset=0]*/
 class A2 {
-  /*member: A2.f2a:[null]*/
+  /*member: A2.f2a:[null|powerset=1]*/
   int? f2a;
 
-  /*member: A2.f2b:[exact=JSUInt31]*/
+  /*member: A2.f2b:[exact=JSUInt31|powerset=0]*/
   int f2b = 1;
 }
 
-/*member: test2:[null]*/
+/*member: test2:[null|powerset=1]*/
 test2() {
   A2();
 }
 
 class A3 {
-  /*member: A3.f3a:[exact=JSUInt31]*/
+  /*member: A3.f3a:[exact=JSUInt31|powerset=0]*/
   int f3a;
 
-  /*member: A3.f3b:[null|exact=JSUInt31]*/
+  /*member: A3.f3b:[null|exact=JSUInt31|powerset=1]*/
   int? f3b;
 
-  /*member: A3.:[exact=A3]*/
+  /*member: A3.:[exact=A3|powerset=0]*/
   A3() : f3a = 1;
 }
 
-/*member: test3:[null]*/
+/*member: test3:[null|powerset=1]*/
 test3() {
-  A3(). /*update: [exact=A3]*/ f3b = 2;
+  A3(). /*update: [exact=A3|powerset=0]*/ f3b = 2;
 }
 
 class A4 {
-  /*member: A4.f4a:Union([exact=JSString], [exact=JSUInt31])*/
+  /*member: A4.f4a:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
   dynamic f4a;
 
-  /*member: A4.f4b:Value([null|exact=JSString], value: "a")*/
+  /*member: A4.f4b:Value([null|exact=JSString|powerset=1], value: "a", powerset: 1)*/
   dynamic f4b;
 
-  /*member: A4.:[exact=A4]*/
+  /*member: A4.:[exact=A4|powerset=0]*/
   A4() : f4a = 1;
 }
 
-/*member: test4:[null]*/
+/*member: test4:[null|powerset=1]*/
 test4() {
   A4 a = A4();
-  a. /*update: [exact=A4]*/ f4a = "a";
-  a. /*update: [exact=A4]*/ f4b = "a";
+  a. /*update: [exact=A4|powerset=0]*/ f4a = "a";
+  a. /*update: [exact=A4|powerset=0]*/ f4b = "a";
 }
 
 class A5 {
-  /*member: A5.f5a:Union([exact=JSString], [exact=JSUInt31])*/
+  /*member: A5.f5a:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
   dynamic f5a = 1;
 
-  /*member: A5.f5b:Union([exact=JSString], [exact=JSUInt31])*/
+  /*member: A5.f5b:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
   dynamic f5b = 1;
 
-  /*member: A5.:[exact=A5]*/
-  A5(/*[exact=JSBool]*/ x) {
-    /*update: [exact=A5]*/
+  /*member: A5.:[exact=A5|powerset=0]*/
+  A5(/*[exact=JSBool|powerset=0]*/ x) {
+    /*update: [exact=A5|powerset=0]*/
     f5a = "1";
     if (x) {
-      /*update: [exact=A5]*/
+      /*update: [exact=A5|powerset=0]*/
       f5b = "1";
     } else {
-      /*update: [exact=A5]*/
+      /*update: [exact=A5|powerset=0]*/
       f5b = "2";
     }
   }
 }
 
-/*member: test5:[null]*/
+/*member: test5:[null|powerset=1]*/
 test5() {
   A5(true);
   A5(false);
 }
 
 class A6 {
-  /*member: A6.f6a:Union([exact=JSString], [exact=JSUInt31])*/
+  /*member: A6.f6a:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
   dynamic f6a = 1;
 
-  /*member: A6.f6b:Union([exact=JSExtendableArray], [exact=JSString], [exact=JSUInt31])*/
+  /*member: A6.f6b:Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
   dynamic f6b = 1;
 
-  /*member: A6.:[exact=A6]*/
-  A6(/*[exact=JSBool]*/ x) {
-    /*update: [exact=A6]*/
+  /*member: A6.:[exact=A6|powerset=0]*/
+  A6(/*[exact=JSBool|powerset=0]*/ x) {
+    /*update: [exact=A6|powerset=0]*/
     f6a = "1";
     if (x) {
-      /*update: [exact=A6]*/
+      /*update: [exact=A6|powerset=0]*/
       f6b = "1";
     } else {
-      /*update: [exact=A6]*/
+      /*update: [exact=A6|powerset=0]*/
       f6b = "2";
     }
     if (x) {
-      /*update: [exact=A6]*/
+      /*update: [exact=A6|powerset=0]*/
       f6b = [];
     } else {
-      /*update: [exact=A6]*/
+      /*update: [exact=A6|powerset=0]*/
       f6b = [];
     }
   }
 }
 
-/*member: test6:[null]*/
+/*member: test6:[null|powerset=1]*/
 test6() {
   A6(true);
   A6(false);
 }
 
 class A7 {
-  /*member: A7.f7a:Union([exact=JSExtendableArray], [exact=JSString], [exact=JSUInt31])*/
+  /*member: A7.f7a:Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
   dynamic f7a = 1;
 
-  /*member: A7.f7b:Union([exact=JSExtendableArray], [exact=JSString], [exact=JSUInt31])*/
+  /*member: A7.f7b:Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
   dynamic f7b = 1;
 
-  /*member: A7.:[exact=A7]*/
-  A7(/*[exact=JSBool]*/ x) {
-    /*update: [exact=A7]*/
+  /*member: A7.:[exact=A7|powerset=0]*/
+  A7(/*[exact=JSBool|powerset=0]*/ x) {
+    /*update: [exact=A7|powerset=0]*/
     f7a = "1";
     if (x) {
-      /*update: [exact=A7]*/
+      /*update: [exact=A7|powerset=0]*/
       f7b = "1";
     } else {
-      /*update: [exact=A7]*/
+      /*update: [exact=A7|powerset=0]*/
       f7b = "2";
     }
     if (x) {
-      /*update: [exact=A7]*/
+      /*update: [exact=A7|powerset=0]*/
       f7a = [];
-      /*update: [exact=A7]*/
+      /*update: [exact=A7|powerset=0]*/
       f7b = [];
     } else {
-      /*update: [exact=A7]*/
+      /*update: [exact=A7|powerset=0]*/
       f7b = [];
     }
   }
 }
 
-/*member: test7:[null]*/
+/*member: test7:[null|powerset=1]*/
 test7() {
   A7(true);
   A7(false);
 }
 
 class A8 {
-  /*member: A8.f8:Value([null|exact=JSString], value: "1")*/
+  /*member: A8.f8:Value([null|exact=JSString|powerset=1], value: "1", powerset: 1)*/
   dynamic f8;
 
-  /*member: A8.:[exact=A8]*/
-  A8(/*[exact=JSBool]*/ x) {
+  /*member: A8.:[exact=A8|powerset=0]*/
+  A8(/*[exact=JSBool|powerset=0]*/ x) {
     if (x) {
-      /*update: [exact=A8]*/
+      /*update: [exact=A8|powerset=0]*/
       f8 = "1";
     } else {}
   }
 }
 
-/*member: test8:[null]*/
+/*member: test8:[null|powerset=1]*/
 test8() {
   A8(true);
   A8(false);
 }
 
 class A9 {
-  /*member: A9.f9:Value([null|exact=JSString], value: "1")*/
+  /*member: A9.f9:Value([null|exact=JSString|powerset=1], value: "1", powerset: 1)*/
   dynamic f9;
 
-  /*member: A9.:[exact=A9]*/
-  A9(/*[exact=JSBool]*/ x) {
+  /*member: A9.:[exact=A9|powerset=0]*/
+  A9(/*[exact=JSBool|powerset=0]*/ x) {
     if (x) {
     } else {
-      /*update: [exact=A9]*/
+      /*update: [exact=A9|powerset=0]*/
       f9 = "1";
     }
   }
 }
 
-/*member: test9:[null]*/
+/*member: test9:[null|powerset=1]*/
 test9() {
   A9(true);
   A9(false);
 }
 
 class A10 {
-  /*member: A10.f10:[exact=JSUInt31]*/
+  /*member: A10.f10:[exact=JSUInt31|powerset=0]*/
   int? f10;
 
-  /*member: A10.:[exact=A10]*/
+  /*member: A10.:[exact=A10|powerset=0]*/
   A10() {
-    /*update: [exact=A10]*/
+    /*update: [exact=A10|powerset=0]*/
     f10 = 1;
   }
-  /*member: A10.m10:[subclass=JSUInt32]*/
-  m10() => /*[exact=A10]*/ f10! /*invoke: [exact=JSUInt31]*/ + 1;
+  /*member: A10.m10:[subclass=JSUInt32|powerset=0]*/
+  m10() => /*[exact=A10|powerset=0]*/
+      f10! /*invoke: [exact=JSUInt31|powerset=0]*/ + 1;
 }
 
-/*member: f10:[null]*/
-void f10(/*[null]*/ x) {
-  x. /*update: [null]*/ f10 = "2";
+/*member: f10:[null|powerset=1]*/
+void f10(/*[null|powerset=1]*/ x) {
+  x. /*update: [null|powerset=1]*/ f10 = "2";
 }
 
-/*member: test10:[null]*/
+/*member: test10:[null|powerset=1]*/
 test10() {
   A10? a;
   f10(a);
   a = A10();
-  a. /*invoke: [exact=A10]*/ m10();
+  a. /*invoke: [exact=A10|powerset=0]*/ m10();
 }
 
-/*member: S11.:[exact=S11]*/
+/*member: S11.:[exact=S11|powerset=0]*/
 class S11 {
-  /*member: S11.fs11:[exact=JSUInt31]*/
+  /*member: S11.fs11:[exact=JSUInt31|powerset=0]*/
   int fs11 = 1;
 
-  /*member: S11.ms11:[null]*/
+  /*member: S11.ms11:[null|powerset=1]*/
   ms11() {
-    /*update: [exact=A11]*/
+    /*update: [exact=A11|powerset=0]*/
     fs11 = 1;
   }
 }
 
-/*member: A11.:[exact=A11]*/
+/*member: A11.:[exact=A11|powerset=0]*/
 class A11 extends S11 {
-  /*member: A11.m11:[null]*/
+  /*member: A11.m11:[null|powerset=1]*/
   m11() {
-    /*invoke: [exact=A11]*/
+    /*invoke: [exact=A11|powerset=0]*/
     ms11();
   }
 }
 
-/*member: test11:[null]*/
+/*member: test11:[null|powerset=1]*/
 test11() {
   A11 a = A11();
-  a. /*invoke: [exact=A11]*/ m11();
+  a. /*invoke: [exact=A11|powerset=0]*/ m11();
 }
 
 class S12 {
-  /*member: S12.fs12:Union([exact=JSString], [exact=JSUInt31])*/
+  /*member: S12.fs12:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
   dynamic fs12 = 1;
 
-  /*member: S12.:[exact=S12]*/
+  /*member: S12.:[exact=S12|powerset=0]*/
   S12() {
-    /*update: [exact=A12]*/
+    /*update: [exact=A12|powerset=0]*/
     fs12 = "2";
   }
 }
 
-/*member: A12.:[exact=A12]*/
+/*member: A12.:[exact=A12|powerset=0]*/
 class A12 extends S12 {}
 
-/*member: test12:[null]*/
+/*member: test12:[null|powerset=1]*/
 test12() {
   A12();
 }
 
 class S13 {
-  /*member: S13.fs13:[exact=JSUInt31]*/
+  /*member: S13.fs13:[exact=JSUInt31|powerset=0]*/
   int? fs13;
 
-  /*member: S13.:[exact=S13]*/
+  /*member: S13.:[exact=S13|powerset=0]*/
   S13() {
-    /*update: [exact=A13]*/
+    /*update: [exact=A13|powerset=0]*/
     fs13 = 1;
   }
 }
 
 class A13 extends S13 {
-  /*member: A13.:[exact=A13]*/
+  /*member: A13.:[exact=A13|powerset=0]*/
   A13() {
-    /*update: [exact=A13]*/
+    /*update: [exact=A13|powerset=0]*/
     fs13 = 1;
   }
 }
 
-/*member: test13:[null]*/
+/*member: test13:[null|powerset=1]*/
 test13() {
   A13();
 }
 
 class A14 {
-  /*member: A14.f14:[exact=JSUInt31]*/
+  /*member: A14.f14:[exact=JSUInt31|powerset=0]*/
   var f14;
 
-  /*member: A14.:[exact=A14]*/
+  /*member: A14.:[exact=A14|powerset=0]*/
   A14() {
-    /*update: [exact=A14]*/
+    /*update: [exact=A14|powerset=0]*/
     f14 = 1;
   }
-  /*member: A14.other:[exact=A14]*/
+  /*member: A14.other:[exact=A14|powerset=0]*/
   A14.other() {
-    /*update: [exact=A14]*/
+    /*update: [exact=A14|powerset=0]*/
     f14 = 2;
   }
 }
 
-/*member: test14:[null]*/
+/*member: test14:[null|powerset=1]*/
 test14() {
   // ignore: unused_local_variable
   A14 a = A14();
@@ -351,23 +352,23 @@
 }
 
 class A15 {
-  /*member: A15.f15:Union([exact=JSExtendableArray], [exact=JSString])*/
+  /*member: A15.f15:Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
   var f15;
 
-  /*member: A15.:[exact=A15]*/
+  /*member: A15.:[exact=A15|powerset=0]*/
   A15() {
-    /*update: [exact=A15]*/
+    /*update: [exact=A15|powerset=0]*/
     f15 = "1";
   }
 
-  /*member: A15.other:[exact=A15]*/
+  /*member: A15.other:[exact=A15|powerset=0]*/
   A15.other() {
-    /*update: [exact=A15]*/
+    /*update: [exact=A15|powerset=0]*/
     f15 = [];
   }
 }
 
-/*member: test15:[null]*/
+/*member: test15:[null|powerset=1]*/
 test15() {
   // ignore: unused_local_variable
   A15 a = A15();
@@ -378,35 +379,36 @@
   // TODO(johnniwinther): Investigate why these include `null`. The ast version
   // didn't.
 
-  /*member: A16.f16:Union(null, [exact=JSString], [exact=JSUInt31])*/
+  /*member: A16.f16:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
   var f16;
 
-  /*member: A16.:[exact=A16]*/
+  /*member: A16.:[exact=A16|powerset=0]*/
   A16() {
-    /*update: [exact=A16]*/
+    /*update: [exact=A16|powerset=0]*/
     f16 = "1";
   }
 
-  /*member: A16.other:[exact=A16]*/
+  /*member: A16.other:[exact=A16|powerset=0]*/
   A16.other() : f16 = 1 {}
 }
 
-/*member: test16:[null]*/
+/*member: test16:[null|powerset=1]*/
 test16() {
   // ignore: unused_local_variable
   A16 a = A16();
   a = A16.other();
 }
 
-/*member: g17:[exact=JSUInt31]*/
-g17([/*[exact=A17]*/ p]) => p. /*update: [exact=A17]*/ f17 = 1;
+/*member: g17:[exact=JSUInt31|powerset=0]*/
+g17([/*[exact=A17|powerset=0]*/ p]) =>
+    p. /*update: [exact=A17|powerset=0]*/ f17 = 1;
 
 class A17 {
-  /*member: A17.f17:[null|exact=JSUInt31]*/
+  /*member: A17.f17:[null|exact=JSUInt31|powerset=1]*/
   var f17;
 
-  /*member: A17.:[exact=A17]*/
-  A17(/*[exact=JSBool]*/ x) {
+  /*member: A17.:[exact=A17|powerset=0]*/
+  A17(/*[exact=JSBool|powerset=0]*/ x) {
     var a;
     if (x) {
       a = this;
@@ -417,94 +419,94 @@
   }
 }
 
-/*member: test17:[null]*/
+/*member: test17:[null|powerset=1]*/
 test17() {
   A17(true);
   A17(false);
 }
 
 class A18 {
-  /*member: A18.f18a:[exact=JSUInt31]*/
+  /*member: A18.f18a:[exact=JSUInt31|powerset=0]*/
   var f18a;
 
-  /*member: A18.f18b:Value([exact=JSString], value: "1")*/
+  /*member: A18.f18b:Value([exact=JSString|powerset=0], value: "1", powerset: 0)*/
   var f18b;
 
-  /*member: A18.f18c:Union(null, [exact=A18], [exact=JSUInt31])*/
+  /*member: A18.f18c:Union(null, [exact=A18|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
   var f18c;
 
-  /*member: A18.:[exact=A18]*/
-  A18(/*[exact=JSBool]*/ x) {
-    /*update: [exact=A18]*/
+  /*member: A18.:[exact=A18|powerset=0]*/
+  A18(/*[exact=JSBool|powerset=0]*/ x) {
+    /*update: [exact=A18|powerset=0]*/
     f18a = 1;
     var a;
     if (x) {
-      /*update: [exact=A18]*/
+      /*update: [exact=A18|powerset=0]*/
       f18b = "1";
       a = this;
     } else {
       a = 1;
-      /*update: [exact=A18]*/
+      /*update: [exact=A18|powerset=0]*/
       f18b = "1";
     }
-    /*update: [exact=A18]*/
+    /*update: [exact=A18|powerset=0]*/
     f18c = a;
   }
 }
 
-/*member: test18:[null]*/
+/*member: test18:[null|powerset=1]*/
 test18() {
   A18(true);
   A18(false);
 }
 
 class A19 {
-  /*member: A19.f19a:[exact=JSUInt31]*/
+  /*member: A19.f19a:[exact=JSUInt31|powerset=0]*/
   var f19a;
 
-  /*member: A19.f19b:Value([exact=JSString], value: "1")*/
+  /*member: A19.f19b:Value([exact=JSString|powerset=0], value: "1", powerset: 0)*/
   var f19b;
 
-  /*member: A19.f19c:Union(null, [exact=A19], [exact=JSUInt31])*/
+  /*member: A19.f19c:Union(null, [exact=A19|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
   var f19c;
 
-  /*member: A19.:[exact=A19]*/
-  A19(/*[exact=JSBool]*/ x) {
-    /*update: [exact=A19]*/
+  /*member: A19.:[exact=A19|powerset=0]*/
+  A19(/*[exact=JSBool|powerset=0]*/ x) {
+    /*update: [exact=A19|powerset=0]*/
     f19a = 1;
     var a;
     if (x) {
-      /*update: [exact=A19]*/
+      /*update: [exact=A19|powerset=0]*/
       f19b = "1";
       a = this;
     } else {
       a = 1;
-      /*update: [exact=A19]*/
+      /*update: [exact=A19|powerset=0]*/
       f19b = "1";
     }
-    /*update: [exact=A19]*/
+    /*update: [exact=A19|powerset=0]*/
     f19c = a;
     a();
   }
 }
 
-/*member: test19:[null]*/
+/*member: test19:[null|powerset=1]*/
 test19() {
   A19(true);
   A19(false);
 }
 
 class A20 {
-  /*member: A20.f20:[null]*/
+  /*member: A20.f20:[null|powerset=1]*/
   var f20;
 
-  /*member: A20.:[exact=A20]*/
+  /*member: A20.:[exact=A20|powerset=0]*/
   A20() {
     dynamic a = this;
-    /*iterator: [exact=A20]*/
-    /*current: [empty]*/
-    /*moveNext: [empty]*/
-    for ( /*update: [exact=A20]*/ f20 in a) {}
+    /*iterator: [exact=A20|powerset=0]*/
+    /*current: [empty|powerset=0]*/
+    /*moveNext: [empty|powerset=0]*/
+    for ( /*update: [exact=A20|powerset=0]*/ f20 in a) {}
   }
 
   get iterator => this;
@@ -514,296 +516,297 @@
   bool moveNext() => false;
 }
 
-/*member: test20:[null]*/
+/*member: test20:[null|powerset=1]*/
 test20() {
   A20();
 }
 
 class A20b extends Iterable implements Iterator {
-  /*member: A20b.f20b:[null|exact=JSUInt31]*/
+  /*member: A20b.f20b:[null|exact=JSUInt31|powerset=1]*/
   var f20b;
 
-  /*member: A20b.:[exact=A20b]*/
+  /*member: A20b.:[exact=A20b|powerset=0]*/
   A20b() {
     dynamic a = this;
-    /*iterator: [exact=A20b]*/
-    /*current: [exact=A20b]*/
-    /*moveNext: [exact=A20b]*/
-    for ( /*update: [exact=A20b]*/ f20b in a) {}
+    /*iterator: [exact=A20b|powerset=0]*/
+    /*current: [exact=A20b|powerset=0]*/
+    /*moveNext: [exact=A20b|powerset=0]*/
+    for ( /*update: [exact=A20b|powerset=0]*/ f20b in a) {}
   }
 
-  /*member: A20b.iterator:[exact=A20b]*/
+  /*member: A20b.iterator:[exact=A20b|powerset=0]*/
   @override
   get iterator => this;
 
-  /*member: A20b.current:[exact=JSUInt31]*/
+  /*member: A20b.current:[exact=JSUInt31|powerset=0]*/
   @override
   get current => 42;
 
-  /*member: A20b.moveNext:Value([exact=JSBool], value: false)*/
+  /*member: A20b.moveNext:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
   @override
   bool moveNext() => false;
 }
 
-/*member: test20b:[null]*/
+/*member: test20b:[null|powerset=1]*/
 test20b() {
   A20b();
 }
 
 class A22 {
-  /*member: A22.f22a:[exact=JSUInt31]*/
+  /*member: A22.f22a:[exact=JSUInt31|powerset=0]*/
   var f22a;
 
-  /*member: A22.f22b:[exact=JSUInt31]*/
+  /*member: A22.f22b:[exact=JSUInt31|powerset=0]*/
   var f22b;
 
-  /*member: A22.f22c:Value([null|exact=JSString], value: "foo")*/
+  /*member: A22.f22c:Value([null|exact=JSString|powerset=1], value: "foo", powerset: 1)*/
   var f22c;
 
-  /*member: A22.:[exact=A22]*/
+  /*member: A22.:[exact=A22|powerset=0]*/
   A22() {
-    /*update: [exact=A22]*/
+    /*update: [exact=A22|powerset=0]*/
     f22a = 42;
-    /*update: [exact=A22]*/
-    f22b = /*[exact=A22]*/
+    /*update: [exact=A22|powerset=0]*/
+    f22b = /*[exact=A22|powerset=0]*/
         f22a == null
             ? 42
-            : /*[exact=A22]*/ f22c == null
+            : /*[exact=A22|powerset=0]*/ f22c == null
             ? 41
             : 43;
-    /*update: [exact=A22]*/
+    /*update: [exact=A22|powerset=0]*/
     f22c = 'foo';
   }
 }
 
-/*member: test22:[null]*/
+/*member: test22:[null|powerset=1]*/
 test22() {
   A22();
 }
 
 class A23 {
-  /*member: A23.f23a:[null|exact=JSUInt31]*/
+  /*member: A23.f23a:[null|exact=JSUInt31|powerset=1]*/
   int? f23a = 42;
 
-  /*member: A23.f23b:[null|exact=JSUInt31]*/
+  /*member: A23.f23b:[null|exact=JSUInt31|powerset=1]*/
   int? f23b = 42;
 
-  /*member: A23.f23c:[null|exact=JSUInt31]*/
+  /*member: A23.f23c:[null|exact=JSUInt31|powerset=1]*/
   int? f23c = 42;
 
-  /*member: A23.f23d:[null|exact=JSUInt31]*/
+  /*member: A23.f23d:[null|exact=JSUInt31|powerset=1]*/
   int? f23d = 42;
 
-  /*member: A23.:[exact=A23]*/
+  /*member: A23.:[exact=A23|powerset=0]*/
   A23() {
     // Test string interpolation.
-    '${ /*update: [exact=A23]*/ f23a = null}';
+    '${ /*update: [exact=A23|powerset=0]*/ f23a = null}';
     // Test string juxtaposition.
     ''
-        '${ /*update: [exact=A23]*/ f23b = null}';
+        '${ /*update: [exact=A23|powerset=0]*/ f23b = null}';
     // Test list literal.
-    [/*update: [exact=A23]*/ f23c = null];
+    [/*update: [exact=A23|powerset=0]*/ f23c = null];
     // Test map literal.
     // ignore: unused_local_variable
-    var c = {'foo': /*update: [exact=A23]*/ f23d = null};
+    var c = {'foo': /*update: [exact=A23|powerset=0]*/ f23d = null};
   }
 }
 
-/*member: test23:[null]*/
+/*member: test23:[null|powerset=1]*/
 test23() {
   A23();
 }
 
 class A24 {
-  /*member: A24.f24a:[subclass=JSPositiveInt]*/
+  /*member: A24.f24a:[subclass=JSPositiveInt|powerset=0]*/
   var f24a = 42;
 
-  /*member: A24.f24b:[subclass=JSPositiveInt]*/
+  /*member: A24.f24b:[subclass=JSPositiveInt|powerset=0]*/
   var f24b = 42;
 
-  /*member: A24.f24c:[exact=JSUInt31]*/
+  /*member: A24.f24c:[exact=JSUInt31|powerset=0]*/
   var f24c = 42;
 
-  /*member: A24.f24d:[exact=JSUInt31]*/
+  /*member: A24.f24d:[exact=JSUInt31|powerset=0]*/
   final f24d;
 
-  /*member: A24.f24e:Union(null, [exact=JSNumNotInt], [exact=JSUInt31])*/
+  /*member: A24.f24e:Union(null, [exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
   var f24e;
 
-  /*member: A24.f24f:Value([null|exact=JSString], value: "foo")*/
+  /*member: A24.f24f:Value([null|exact=JSString|powerset=1], value: "foo", powerset: 1)*/
   var f24f = null;
 
-  /*member: A24.:[exact=A24]*/
+  /*member: A24.:[exact=A24|powerset=0]*/
   A24() : f24d = 42 {
-    /*[subclass=A24]*/ /*update: [subclass=A24]*/
-    f24a /*invoke: [subclass=JSPositiveInt]*/ ++;
-    /*[subclass=A24]*/ /*update: [subclass=A24]*/
-    f24b /*invoke: [subclass=JSPositiveInt]*/ += 42;
+    /*[subclass=A24|powerset=0]*/ /*update: [subclass=A24|powerset=0]*/
+    f24a /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++;
+    /*[subclass=A24|powerset=0]*/ /*update: [subclass=A24|powerset=0]*/
+    f24b /*invoke: [subclass=JSPositiveInt|powerset=0]*/ += 42;
     var f24f = 'foo';
-    this. /*update: [subclass=A24]*/ f24f = f24f;
+    this. /*update: [subclass=A24|powerset=0]*/ f24f = f24f;
   }
 
-  /*member: A24.foo:[exact=A24]*/
-  A24.foo(/*[subclass=A24]*/ other)
-    : f24c = other. /*[subclass=A24]*/ f24c,
-      f24d = other. /*[subclass=A24]*/ f24d,
-      f24e = other. /*invoke: [subclass=A24]*/ bar24();
+  /*member: A24.foo:[exact=A24|powerset=0]*/
+  A24.foo(/*[subclass=A24|powerset=0]*/ other)
+    : f24c = other. /*[subclass=A24|powerset=0]*/ f24c,
+      f24d = other. /*[subclass=A24|powerset=0]*/ f24d,
+      f24e = other. /*invoke: [subclass=A24|powerset=0]*/ bar24();
 
-  /*member: A24.+:Value([exact=JSString], value: "foo")*/
-  operator +(/*[empty]*/ other) => 'foo';
+  /*member: A24.+:Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/
+  operator +(/*[empty|powerset=0]*/ other) => 'foo';
 
-  /*member: A24.bar24:[exact=JSNumNotInt]*/
+  /*member: A24.bar24:[exact=JSNumNotInt|powerset=0]*/
   bar24() => 42.5;
 }
 
-/*member: B24.:[exact=B24]*/
+/*member: B24.:[exact=B24|powerset=0]*/
 class B24 extends A24 {
-  /*member: B24.bar24:[exact=JSUInt31]*/
+  /*member: B24.bar24:[exact=JSUInt31|powerset=0]*/
   @override
   bar24() => 42;
 }
 
-/*member: test24:[null]*/
+/*member: test24:[null|powerset=1]*/
 test24() {
   A24();
   A24.foo(new A24());
   A24.foo(new B24());
 }
 
-/*member: A25.:[exact=A25]*/
+/*member: A25.:[exact=A25|powerset=0]*/
 class A25 {
-  /*member: A25.f25:[exact=JSUInt31]*/
+  /*member: A25.f25:[exact=JSUInt31|powerset=0]*/
   var f25 = 42;
 }
 
-/*member: B25.:[exact=B25]*/
+/*member: B25.:[exact=B25|powerset=0]*/
 class B25 {
-  /*member: B25.f25:Value([exact=JSString], value: "42")*/
+  /*member: B25.f25:Value([exact=JSString|powerset=0], value: "42", powerset: 0)*/
   var f25 = '42';
 }
 
-/*member: test25:[null]*/
+/*member: test25:[null|powerset=1]*/
 test25() {
   B25();
-  A25(). /*update: [exact=A25]*/ f25 = A25(). /*[exact=A25]*/ f25;
+  A25(). /*update: [exact=A25|powerset=0]*/ f25 =
+      A25(). /*[exact=A25|powerset=0]*/ f25;
 }
 
-/*member: A26.:[exact=A26]*/
+/*member: A26.:[exact=A26|powerset=0]*/
 class A26 {
-  /*member: A26.f26:[subclass=JSPositiveInt]*/
+  /*member: A26.f26:[subclass=JSPositiveInt|powerset=0]*/
   var f26 = 42;
 }
 
-/*member: B26.:[exact=B26]*/
+/*member: B26.:[exact=B26|powerset=0]*/
 class B26 {
-  /*member: B26.f26:[exact=JSUInt31]*/
+  /*member: B26.f26:[exact=JSUInt31|powerset=0]*/
   var f26 = 54;
 }
 
-/*member: test26:[null]*/
+/*member: test26:[null|powerset=1]*/
 test26() {
-  A26(). /*update: [exact=A26]*/ f26 =
+  A26(). /*update: [exact=A26|powerset=0]*/ f26 =
       <dynamic>[new B26(), A26()]
-      /*Container([exact=JSExtendableArray], element: Union([exact=A26], [exact=B26]), length: 2)*/
-      [0]. /*Union([exact=A26], [exact=B26])*/ f26 /*invoke: [subclass=JSPositiveInt]*/ +
+      /*Container([exact=JSExtendableArray|powerset=0], element: Union([exact=A26|powerset=0], [exact=B26|powerset=0], powerset: 0), length: 2, powerset: 0)*/
+      [0]. /*Union([exact=A26|powerset=0], [exact=B26|powerset=0], powerset: 0)*/ f26 /*invoke: [subclass=JSPositiveInt|powerset=0]*/ +
       42;
 }
 
 class A27 {
-  /*member: A27.f27a:[exact=JSUInt31]*/
+  /*member: A27.f27a:[exact=JSUInt31|powerset=0]*/
   var f27a;
 
-  /*member: A27.f27b:[null|exact=JSUInt31]*/
+  /*member: A27.f27b:[null|exact=JSUInt31|powerset=1]*/
   var f27b;
 
-  /*member: A27.:[exact=A27]*/
+  /*member: A27.:[exact=A27|powerset=0]*/
   A27() {
-    this. /*update: [subclass=A27]*/ f27a = 42;
-    this. /*update: [subclass=A27]*/ f27b = 42;
+    this. /*update: [subclass=A27|powerset=0]*/ f27a = 42;
+    this. /*update: [subclass=A27|powerset=0]*/ f27b = 42;
   }
 }
 
-/*member: B27.:[exact=B27]*/
+/*member: B27.:[exact=B27|powerset=0]*/
 class B27 extends A27 {
   @override
-  set f27b(/*[null|exact=JSUInt31]*/ value) {}
+  set f27b(/*[null|exact=JSUInt31|powerset=1]*/ value) {}
 }
 
-/*member: test27:[null]*/
+/*member: test27:[null|powerset=1]*/
 test27() {
   A27();
   B27();
 }
 
 class A28 {
-  /*member: A28.f28a:[exact=JSUInt31]*/
+  /*member: A28.f28a:[exact=JSUInt31|powerset=0]*/
   var f28a;
 
-  /*member: A28.f28b:[null|exact=JSUInt31]*/
+  /*member: A28.f28b:[null|exact=JSUInt31|powerset=1]*/
   var f28b;
 
-  /*member: A28.:[exact=A28]*/
-  A28(/*[exact=JSUInt31]*/ x) {
-    this. /*update: [exact=A28]*/ f28a = x;
-    if (x /*invoke: [exact=JSUInt31]*/ == 0) return;
-    this. /*update: [exact=A28]*/ f28b = x;
+  /*member: A28.:[exact=A28|powerset=0]*/
+  A28(/*[exact=JSUInt31|powerset=0]*/ x) {
+    this. /*update: [exact=A28|powerset=0]*/ f28a = x;
+    if (x /*invoke: [exact=JSUInt31|powerset=0]*/ == 0) return;
+    this. /*update: [exact=A28|powerset=0]*/ f28b = x;
   }
 }
 
-/*member: test28:[null]*/
+/*member: test28:[null|powerset=1]*/
 test28() {
   A28(0);
   A28(1);
 }
 
 class A29 {
-  /*member: A29.f29a:[exact=JSUInt31]*/
+  /*member: A29.f29a:[exact=JSUInt31|powerset=0]*/
   var f29a;
 
-  /*member: A29.f29b:[null|exact=JSUInt31]*/
+  /*member: A29.f29b:[null|exact=JSUInt31|powerset=1]*/
   var f29b;
 
-  /*member: A29.:[exact=A29]*/
-  A29(/*[exact=JSUInt31]*/ x) {
-    this. /*update: [exact=A29]*/ f29a = x;
-    if (x /*invoke: [exact=JSUInt31]*/ == 0) {
+  /*member: A29.:[exact=A29|powerset=0]*/
+  A29(/*[exact=JSUInt31|powerset=0]*/ x) {
+    this. /*update: [exact=A29|powerset=0]*/ f29a = x;
+    if (x /*invoke: [exact=JSUInt31|powerset=0]*/ == 0) {
     } else {
       return;
     }
-    this. /*update: [exact=A29]*/ f29b = x;
+    this. /*update: [exact=A29|powerset=0]*/ f29b = x;
   }
 }
 
-/*member: test29:[null]*/
+/*member: test29:[null|powerset=1]*/
 test29() {
   A29(0);
   A29(1);
 }
 
 class A30 {
-  /*member: A30.f30a:[exact=JSUInt31]*/
+  /*member: A30.f30a:[exact=JSUInt31|powerset=0]*/
   var f30a;
 
-  /*member: A30.f30b:[exact=JSUInt31]*/
+  /*member: A30.f30b:[exact=JSUInt31|powerset=0]*/
   var f30b;
 
-  /*member: A30.f30c:[null|exact=JSUInt31]*/
+  /*member: A30.f30c:[null|exact=JSUInt31|powerset=1]*/
   var f30c;
 
-  /*member: A30.:[exact=A30]*/
-  A30(/*[exact=JSUInt31]*/ x) {
-    this. /*update: [exact=A30]*/ f30a = x;
-    if (x /*invoke: [exact=JSUInt31]*/ == 0) {
-      this. /*update: [exact=A30]*/ f30b = 1;
+  /*member: A30.:[exact=A30|powerset=0]*/
+  A30(/*[exact=JSUInt31|powerset=0]*/ x) {
+    this. /*update: [exact=A30|powerset=0]*/ f30a = x;
+    if (x /*invoke: [exact=JSUInt31|powerset=0]*/ == 0) {
+      this. /*update: [exact=A30|powerset=0]*/ f30b = 1;
     } else {
-      this. /*update: [exact=A30]*/ f30b = x;
+      this. /*update: [exact=A30|powerset=0]*/ f30b = x;
       return;
     }
-    this. /*update: [exact=A30]*/ f30c = x;
+    this. /*update: [exact=A30|powerset=0]*/ f30c = x;
   }
 }
 
-/*member: test30:[null]*/
+/*member: test30:[null|powerset=1]*/
 test30() {
   A30(0);
   A30(1);
diff --git a/pkg/compiler/test/inference/data/fields.dart b/pkg/compiler/test/inference/data/fields.dart
index bd3c5fa..5741529 100644
--- a/pkg/compiler/test/inference/data/fields.dart
+++ b/pkg/compiler/test/inference/data/fields.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   fieldGetUnset();
   fieldGetUnsetInitialized();
@@ -14,50 +14,50 @@
 /// Get an uninitialized field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  var /*member: Class1.field:[null]*/ field;
+  var /*member: Class1.field:[null|powerset=1]*/ field;
 }
 
-/*member: fieldGetUnset:[null]*/
-fieldGetUnset() => Class1(). /*[exact=Class1]*/ field;
+/*member: fieldGetUnset:[null|powerset=1]*/
+fieldGetUnset() => Class1(). /*[exact=Class1|powerset=0]*/ field;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Get a field initialized to `null`.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
 class Class4 {
-  var /*member: Class4.field:[null]*/ field = null;
+  var /*member: Class4.field:[null|powerset=1]*/ field = null;
 }
 
-/*member: fieldGetUnsetInitialized:[null]*/
-fieldGetUnsetInitialized() => Class4(). /*[exact=Class4]*/ field;
+/*member: fieldGetUnsetInitialized:[null|powerset=1]*/
+fieldGetUnsetInitialized() => Class4(). /*[exact=Class4|powerset=0]*/ field;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Set an uninitialized field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
 class Class2 {
-  var /*member: Class2.field:[null|exact=JSUInt31]*/ field;
+  var /*member: Class2.field:[null|exact=JSUInt31|powerset=1]*/ field;
 }
 
-/*member: fieldSet:[null]*/
+/*member: fieldSet:[null|powerset=1]*/
 fieldSet() {
-  Class2(). /*update: [exact=Class2]*/ field = 0;
+  Class2(). /*update: [exact=Class2|powerset=0]*/ field = 0;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return the setting of an uninitialized field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
 class Class3 {
-  var /*member: Class3.field:[null|exact=JSUInt31]*/ field;
+  var /*member: Class3.field:[null|exact=JSUInt31|powerset=1]*/ field;
 }
 
-/*member: fieldSetReturn:[exact=JSUInt31]*/
+/*member: fieldSetReturn:[exact=JSUInt31|powerset=0]*/
 fieldSetReturn() {
-  return Class3(). /*update: [exact=Class3]*/ field = 0;
+  return Class3(). /*update: [exact=Class3|powerset=0]*/ field = 0;
 }
diff --git a/pkg/compiler/test/inference/data/final_field.dart b/pkg/compiler/test/inference/data/final_field.dart
index d2e4767..5570239 100644
--- a/pkg/compiler/test/inference/data/final_field.dart
+++ b/pkg/compiler/test/inference/data/final_field.dart
@@ -3,40 +3,40 @@
 // BSD-style license that can be found in the LICENSE file.
 
 class A {
-  /*member: A.intField:[exact=JSUInt31]*/
+  /*member: A.intField:[exact=JSUInt31|powerset=0]*/
   final intField;
 
-  /*member: A.giveUpField1:Union([exact=JSString], [exact=JSUInt31])*/
+  /*member: A.giveUpField1:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
   final giveUpField1;
 
-  /*member: A.giveUpField2:Union([exact=A], [exact=JSString])*/
+  /*member: A.giveUpField2:Union([exact=A|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
   final giveUpField2;
 
-  /*member: A.fieldParameter:[exact=JSUInt31]*/
+  /*member: A.fieldParameter:[exact=JSUInt31|powerset=0]*/
   final fieldParameter;
 
-  /*member: A.:[exact=A]*/
+  /*member: A.:[exact=A|powerset=0]*/
   A()
     : intField = 42,
       giveUpField1 = 'foo',
       giveUpField2 = 'foo',
       fieldParameter = 54;
 
-  /*member: A.bar:[exact=A]*/
+  /*member: A.bar:[exact=A|powerset=0]*/
   A.bar()
     : intField = 54,
       giveUpField1 = 42,
       giveUpField2 = A(),
       fieldParameter = 87;
 
-  /*member: A.foo:[exact=A]*/
-  A.foo(this. /*[exact=JSUInt31]*/ fieldParameter)
+  /*member: A.foo:[exact=A|powerset=0]*/
+  A.foo(this. /*[exact=JSUInt31|powerset=0]*/ fieldParameter)
     : intField = 87,
       giveUpField1 = 42,
       giveUpField2 = 'foo';
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   A();
   A.bar();
diff --git a/pkg/compiler/test/inference/data/final_field2.dart b/pkg/compiler/test/inference/data/final_field2.dart
index 288749d..a2326f9 100644
--- a/pkg/compiler/test/inference/data/final_field2.dart
+++ b/pkg/compiler/test/inference/data/final_field2.dart
@@ -6,19 +6,19 @@
 // inferring types for fields.
 
 class A {
-  /*member: A.intField:[exact=JSUInt31]*/
+  /*member: A.intField:[exact=JSUInt31|powerset=0]*/
   final intField;
 
-  /*member: A.stringField:Value([exact=JSString], value: "foo")*/
+  /*member: A.stringField:Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/
   final stringField;
 
-  /*member: A.:[exact=A]*/
+  /*member: A.:[exact=A|powerset=0]*/
   A() : intField = 42, stringField = 'foo';
 
   A.bar() : intField = 'bar', stringField = 42;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   A();
 }
diff --git a/pkg/compiler/test/inference/data/final_field3.dart b/pkg/compiler/test/inference/data/final_field3.dart
index bd84d33..ee2597e 100644
--- a/pkg/compiler/test/inference/data/final_field3.dart
+++ b/pkg/compiler/test/inference/data/final_field3.dart
@@ -5,17 +5,19 @@
 // Test that we are analyzing field parameters correctly.
 
 class A {
-  /*member: A.dynamicField:Union([exact=JSString], [exact=JSUInt31])*/
+  /*member: A.dynamicField:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
   final dynamicField;
 
-  /*member: A.:[exact=A]*/
+  /*member: A.:[exact=A|powerset=0]*/
   A() : dynamicField = 42;
 
-  /*member: A.bar:[exact=A]*/
-  A.bar(this. /*Value([exact=JSString], value: "foo")*/ dynamicField);
+  /*member: A.bar:[exact=A|powerset=0]*/
+  A.bar(
+    this. /*Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ dynamicField,
+  );
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   A();
   A.bar('foo');
diff --git a/pkg/compiler/test/inference/data/finalized_type_variable.dart b/pkg/compiler/test/inference/data/finalized_type_variable.dart
index 3361624..881181e 100644
--- a/pkg/compiler/test/inference/data/finalized_type_variable.dart
+++ b/pkg/compiler/test/inference/data/finalized_type_variable.dart
@@ -2,80 +2,86 @@
 // 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.
 
-/*member: AppView.:[subclass=AppView]*/
+/*member: AppView.:[subclass=AppView|powerset=0]*/
 abstract class AppView<T> {
-  /*member: AppView.ctx:Union(null, [exact=CardComponent2], [exact=CardComponent])*/
+  /*member: AppView.ctx:Union(null, [exact=CardComponent2|powerset=0], [exact=CardComponent|powerset=0], powerset: 1)*/
   T? ctx;
 }
 
-/*member: CardComponent.:[exact=CardComponent]*/
+/*member: CardComponent.:[exact=CardComponent|powerset=0]*/
 class CardComponent {
-  /*member: CardComponent.title:Value([null|exact=JSString], value: "foo")*/
+  /*member: CardComponent.title:Value([null|exact=JSString|powerset=1], value: "foo", powerset: 1)*/
   String? title;
 }
 
-/*member: ViewCardComponent.:[exact=ViewCardComponent]*/
+/*member: ViewCardComponent.:[exact=ViewCardComponent|powerset=0]*/
 class ViewCardComponent extends AppView<CardComponent> {
-  /*member: ViewCardComponent._title:Value([null|exact=JSString], value: "foo")*/
+  /*member: ViewCardComponent._title:Value([null|exact=JSString|powerset=1], value: "foo", powerset: 1)*/
   var _title;
 
   @pragma('dart2js:noInline')
-  set ng_title(String /*Value([exact=JSString], value: "foo")*/ value) {
-    if ( /*invoke: [exact=ViewCardComponent]*/ checkBinding(
-      /*[exact=ViewCardComponent]*/ _title,
+  set ng_title(
+    String /*Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/
+    value,
+  ) {
+    if ( /*invoke: [exact=ViewCardComponent|powerset=0]*/ checkBinding(
+      /*[exact=ViewCardComponent|powerset=0]*/ _title,
       value,
     )) {
-      /*[exact=ViewCardComponent]*/
-      ctx!. /*update: [exact=CardComponent]*/ title = value;
-      /*update: [exact=ViewCardComponent]*/
+      /*[exact=ViewCardComponent|powerset=0]*/
+      ctx!. /*update: [exact=CardComponent|powerset=0]*/ title = value;
+      /*update: [exact=ViewCardComponent|powerset=0]*/
       _title = value;
     }
   }
 
-  /*member: ViewCardComponent.checkBinding:Value([exact=JSBool], value: true)*/
+  /*member: ViewCardComponent.checkBinding:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
   checkBinding(
-    /*Value([null|exact=JSString], value: "foo")*/ a,
-    /*Value([exact=JSString], value: "foo")*/ b,
+    /*Value([null|exact=JSString|powerset=1], value: "foo", powerset: 1)*/ a,
+    /*Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ b,
   ) => true;
 }
 
-/*member: CardComponent2.:[exact=CardComponent2]*/
+/*member: CardComponent2.:[exact=CardComponent2|powerset=0]*/
 class CardComponent2 {
-  /*member: CardComponent2.title:Value([null|exact=JSString], value: "bar")*/
+  /*member: CardComponent2.title:Value([null|exact=JSString|powerset=1], value: "bar", powerset: 1)*/
   String? title;
 }
 
-/*member: ViewCardComponent2.:[exact=ViewCardComponent2]*/
+/*member: ViewCardComponent2.:[exact=ViewCardComponent2|powerset=0]*/
 class ViewCardComponent2 extends AppView<CardComponent2> {
-  /*member: ViewCardComponent2._title:Value([null|exact=JSString], value: "bar")*/
+  /*member: ViewCardComponent2._title:Value([null|exact=JSString|powerset=1], value: "bar", powerset: 1)*/
   var _title;
 
   @pragma('dart2js:noInline')
-  set ng_title(String /*Value([exact=JSString], value: "bar")*/ value) {
-    if ( /*invoke: [exact=ViewCardComponent2]*/ checkBinding(
-      /*[exact=ViewCardComponent2]*/ _title,
+  set ng_title(
+    String /*Value([exact=JSString|powerset=0], value: "bar", powerset: 0)*/
+    value,
+  ) {
+    if ( /*invoke: [exact=ViewCardComponent2|powerset=0]*/ checkBinding(
+      /*[exact=ViewCardComponent2|powerset=0]*/ _title,
       value,
     )) {
-      /*[exact=ViewCardComponent2]*/
-      ctx!. /*update: [exact=CardComponent2]*/ title = value;
-      /*update: [exact=ViewCardComponent2]*/
+      /*[exact=ViewCardComponent2|powerset=0]*/
+      ctx!. /*update: [exact=CardComponent2|powerset=0]*/ title = value;
+      /*update: [exact=ViewCardComponent2|powerset=0]*/
       _title = value;
     }
   }
 
-  /*member: ViewCardComponent2.checkBinding:Value([exact=JSBool], value: true)*/
+  /*member: ViewCardComponent2.checkBinding:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
   checkBinding(
-    /*Value([null|exact=JSString], value: "bar")*/ a,
-    /*Value([exact=JSString], value: "bar")*/ b,
+    /*Value([null|exact=JSString|powerset=1], value: "bar", powerset: 1)*/ a,
+    /*Value([exact=JSString|powerset=0], value: "bar", powerset: 0)*/ b,
   ) => true;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   var c1 = ViewCardComponent();
-  c1. /*update: [exact=ViewCardComponent]*/ ctx = CardComponent();
-  c1. /*update: [exact=ViewCardComponent]*/ ng_title = 'foo';
+  c1. /*update: [exact=ViewCardComponent|powerset=0]*/ ctx = CardComponent();
+  c1. /*update: [exact=ViewCardComponent|powerset=0]*/ ng_title = 'foo';
   var c2 = ViewCardComponent2();
-  c2. /*update: [exact=ViewCardComponent2]*/ ctx = CardComponent2();
-  c2. /*update: [exact=ViewCardComponent2]*/ ng_title = 'bar';
+  c2. /*update: [exact=ViewCardComponent2|powerset=0]*/ ctx = CardComponent2();
+  c2. /*update: [exact=ViewCardComponent2|powerset=0]*/ ng_title = 'bar';
 }
diff --git a/pkg/compiler/test/inference/data/for.dart b/pkg/compiler/test/inference/data/for.dart
index 7cbbe36..6340b08 100644
--- a/pkg/compiler/test/inference/data/for.dart
+++ b/pkg/compiler/test/inference/data/for.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   simpleFor();
   forNull();
@@ -18,14 +18,14 @@
 /// Simple int based for loop.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: simpleFor:[null]*/
+/*member: simpleFor:[null|powerset=1]*/
 simpleFor() {
   for (
     var i = 0;
-    i /*invoke: [subclass=JSPositiveInt]*/ < 10;
-    i = i /*invoke: [subclass=JSPositiveInt]*/ + 1
+    i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ < 10;
+    i = i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ + 1
   ) {
-    i. /*invoke: [subclass=JSPositiveInt]*/ abs();
+    i. /*invoke: [subclass=JSPositiveInt|powerset=0]*/ abs();
   }
 }
 
@@ -33,10 +33,10 @@
 /// For loop with null test.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: forNull:[null]*/
+/*member: forNull:[null|powerset=1]*/
 forNull() {
   var local;
-  for (var o; o == null; o = o. /*invoke: [null]*/ toString()) {
+  for (var o; o == null; o = o. /*invoke: [null|powerset=1]*/ toString()) {
     local = o;
   }
   return local;
@@ -46,13 +46,13 @@
 /// For loop with not-null test.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: forNotNull:[null|exact=JSString]*/
+/*member: forNotNull:[null|exact=JSString|powerset=1]*/
 forNotNull() {
   var local;
   for (
     var o = '';
-    o /*invoke: [exact=JSString]*/ != null;
-    o = o. /*invoke: [exact=JSString]*/ toString()
+    o /*invoke: [exact=JSString|powerset=0]*/ != null;
+    o = o. /*invoke: [exact=JSString|powerset=0]*/ toString()
   ) {
     local = o;
   }
@@ -63,13 +63,13 @@
 /// For loop with null test known to be false.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: forNullFalse:[null]*/
+/*member: forNullFalse:[null|powerset=1]*/
 forNullFalse() {
   var local;
   for (
     var o = '';
-    o /*invoke: [exact=JSString]*/ == null;
-    o = o. /*invoke: [empty]*/ toString()
+    o /*invoke: [exact=JSString|powerset=0]*/ == null;
+    o = o. /*invoke: [empty|powerset=0]*/ toString()
   ) {
     local = o;
   }
@@ -80,10 +80,14 @@
 /// For loop with not-null test known to be true.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: forNotNullTrue:[null]*/
+/*member: forNotNullTrue:[null|powerset=1]*/
 forNotNullTrue() {
   var local;
-  for (var o = null; o != null; o = o. /*invoke: [empty]*/ toString()) {
+  for (
+    var o = null;
+    o != null;
+    o = o. /*invoke: [empty|powerset=0]*/ toString()
+  ) {
     local = o;
   }
   return local;
@@ -93,34 +97,34 @@
 /// For loop with not-null test that mixes field accesses.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  /*member: Class1.field:[null|exact=Class2]*/
+  /*member: Class1.field:[null|exact=Class2|powerset=1]*/
   var field;
 }
 
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
 class Class2 {
-  /*member: Class2.field:[null|exact=Class1]*/
+  /*member: Class2.field:[null|exact=Class1|powerset=1]*/
   var field;
 }
 
-/*member: _forUnion:Union(null, [exact=Class1], [exact=Class2])*/
-_forUnion(/*[exact=Class1]*/ o) {
+/*member: _forUnion:Union(null, [exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 1)*/
+_forUnion(/*[exact=Class1|powerset=0]*/ o) {
   for (
     ;
-    o = o. /*Union(null, [exact=Class1], [exact=Class2])*/ field;
+    o = o. /*Union(null, [exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 1)*/ field;
     o != null
   ) {}
   return o;
 }
 
-/*member: forUnion:[null]*/
+/*member: forUnion:[null|powerset=1]*/
 forUnion() {
   var c1 = Class1();
   var c2 = Class2();
-  c1. /*update: [exact=Class1]*/ field = c2;
-  c2. /*update: [exact=Class2]*/ field = c1;
+  c1. /*update: [exact=Class1|powerset=0]*/ field = c2;
+  c2. /*update: [exact=Class2|powerset=0]*/ field = c1;
   _forUnion(c1);
 }
 
@@ -128,30 +132,30 @@
 /// For loop with is test that mixes field accesses.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
 class Class3 {
-  /*member: Class3.field:[null|exact=Class4]*/
+  /*member: Class3.field:[null|exact=Class4|powerset=1]*/
   var field;
 }
 
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
 class Class4 {
-  /*member: Class4.field:[null|exact=Class3]*/
+  /*member: Class4.field:[null|exact=Class3|powerset=1]*/
   var field;
 }
 
-/*member: _forIs:Union(null, [exact=Class3], [exact=Class4])*/
-_forIs(/*[exact=Class3]*/ o) {
-  for (; o is Class3; o = o. /*[exact=Class3]*/ field) {}
+/*member: _forIs:Union(null, [exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 1)*/
+_forIs(/*[exact=Class3|powerset=0]*/ o) {
+  for (; o is Class3; o = o. /*[exact=Class3|powerset=0]*/ field) {}
   return o;
 }
 
-/*member: forIs:[null]*/
+/*member: forIs:[null|powerset=1]*/
 forIs() {
   var c1 = Class3();
   var c2 = Class4();
-  c1. /*update: [exact=Class3]*/ field = c2;
-  c2. /*update: [exact=Class4]*/ field = c1;
+  c1. /*update: [exact=Class3|powerset=0]*/ field = c2;
+  c2. /*update: [exact=Class4|powerset=0]*/ field = c1;
   _forIs(c1);
 }
 
@@ -159,33 +163,33 @@
 /// For loop with is-not test that mixes field accesses.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class5.:[exact=Class5]*/
+/*member: Class5.:[exact=Class5|powerset=0]*/
 class Class5 {
-  /*member: Class5.field:[null|exact=Class6]*/
+  /*member: Class5.field:[null|exact=Class6|powerset=1]*/
   var field;
 }
 
-/*member: Class6.:[exact=Class6]*/
+/*member: Class6.:[exact=Class6|powerset=0]*/
 class Class6 {
-  /*member: Class6.field:[null|exact=Class5]*/
+  /*member: Class6.field:[null|exact=Class5|powerset=1]*/
   var field;
 }
 
-/*member: _forIsNot:Union(null, [exact=Class5], [exact=Class6])*/
-_forIsNot(/*[exact=Class5]*/ o) {
+/*member: _forIsNot:Union(null, [exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 1)*/
+_forIsNot(/*[exact=Class5|powerset=0]*/ o) {
   for (
     ;
     o is! Class6;
-    o = o. /*Union(null, [exact=Class5], [exact=Class6])*/ field
+    o = o. /*Union(null, [exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 1)*/ field
   ) {}
   return o;
 }
 
-/*member: forIsNot:[null]*/
+/*member: forIsNot:[null|powerset=1]*/
 forIsNot() {
   var c1 = Class5();
   var c2 = Class6();
-  c1. /*update: [exact=Class5]*/ field = c2;
-  c2. /*update: [exact=Class6]*/ field = c1;
+  c1. /*update: [exact=Class5|powerset=0]*/ field = c2;
+  c2. /*update: [exact=Class6|powerset=0]*/ field = c1;
   _forIsNot(c1);
 }
diff --git a/pkg/compiler/test/inference/data/for_in.dart b/pkg/compiler/test/inference/data/for_in.dart
index 4a902c0..faebc1a 100644
--- a/pkg/compiler/test/inference/data/for_in.dart
+++ b/pkg/compiler/test/inference/data/for_in.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   forInDirect();
   forInReturn();
@@ -14,11 +14,11 @@
 // For-in loop directly on a list literal.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: forInDirect:[null]*/
+/*member: forInDirect:[null|powerset=1]*/
 forInDirect() {
-  /*iterator: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 3)*/
-  /*current: [exact=ArrayIterator]*/
-  /*moveNext: [exact=ArrayIterator]*/
+  /*iterator: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 3, powerset: 0)*/
+  /*current: [exact=ArrayIterator|powerset=0]*/
+  /*moveNext: [exact=ArrayIterator|powerset=0]*/
   for (var a in [1, 2, 3]) {
     print(a);
   }
@@ -28,11 +28,11 @@
 // Return element from a for-in loop on a list literal.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: forInReturn:[null|subclass=JSInt]*/
+/*member: forInReturn:[null|subclass=JSInt|powerset=1]*/
 forInReturn() {
-  /*iterator: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 3)*/
-  /*current: [exact=ArrayIterator]*/
-  /*moveNext: [exact=ArrayIterator]*/
+  /*iterator: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 3, powerset: 0)*/
+  /*current: [exact=ArrayIterator|powerset=0]*/
+  /*moveNext: [exact=ArrayIterator|powerset=0]*/
   for (var a in [1, 2, 3]) {
     // TODO(johnniwinther): We should know the type of [a] here.
     return a;
@@ -43,20 +43,20 @@
 // Return element from a for-in loop on known list type.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _forInReturn:[null|subclass=Object]*/
+/*member: _forInReturn:[null|subclass=Object|powerset=1]*/
 _forInReturn(
-  /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/ list,
+  /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/ list,
 ) {
-  /*iterator: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/
-  /*current: [exact=ArrayIterator]*/
-  /*moveNext: [exact=ArrayIterator]*/
+  /*iterator: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/
+  /*current: [exact=ArrayIterator|powerset=0]*/
+  /*moveNext: [exact=ArrayIterator|powerset=0]*/
   for (var a in list) {
     // TODO(johnniwinther): We should know the type of [a] here.
     return a;
   }
 }
 
-/*member: forInReturnMulti:[null]*/
+/*member: forInReturnMulti:[null|powerset=1]*/
 forInReturnMulti() {
   _forInReturn([1, 2]);
   _forInReturn([1, 2, 3]);
@@ -67,16 +67,16 @@
 // loop on known list type.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: forInReturnNonNull:[subclass=JSInt]*/
+/*member: forInReturnNonNull:[subclass=JSInt|powerset=0]*/
 forInReturnNonNull() {
-  /*iterator: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 3)*/
-  /*current: [exact=ArrayIterator]*/
-  /*moveNext: [exact=ArrayIterator]*/
+  /*iterator: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 3, powerset: 0)*/
+  /*current: [exact=ArrayIterator|powerset=0]*/
+  /*moveNext: [exact=ArrayIterator|powerset=0]*/
   for (var a in [1, 2, 3]) {
     // TODO(johnniwinther): We should know the type of [a] here. Even if [a] has
     // type `dynamic`.
-    a. /*[subclass=JSInt]*/ isEven;
-    a. /*[subclass=JSInt]*/ isEven;
+    a. /*[subclass=JSInt|powerset=0]*/ isEven;
+    a. /*[subclass=JSInt|powerset=0]*/ isEven;
     return a;
   }
   return 0;
diff --git a/pkg/compiler/test/inference/data/foreign.dart b/pkg/compiler/test/inference/data/foreign.dart
index c01baa9..9cd5add 100644
--- a/pkg/compiler/test/inference/data/foreign.dart
+++ b/pkg/compiler/test/inference/data/foreign.dart
@@ -8,7 +8,7 @@
 /// ignore: IMPORT_INTERNAL_LIBRARY, UNUSED_IMPORT
 import 'dart:_interceptors';
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   jsCallInt();
   jsCallEmpty();
@@ -18,17 +18,17 @@
   jsStringConcat();
 }
 
-/*member: jsCallEmpty:[null|subclass=Object]*/
+/*member: jsCallEmpty:[null|subclass=Object|powerset=1]*/
 jsCallEmpty() => JS('', '#', 0);
 
-/*member: jsCallInt:[subclass=JSInt]*/
+/*member: jsCallInt:[subclass=JSInt|powerset=0]*/
 jsCallInt() => JS('int', '#', 0);
 
-/*member: jsCallVoid:[null|subclass=Object]*/
+/*member: jsCallVoid:[null|subclass=Object|powerset=1]*/
 jsCallVoid() => JS('void', '#', 0);
 
-/*member: jsCallUnion:Union([exact=JSString], [subclass=JSInt])*/
+/*member: jsCallUnion:Union([exact=JSString|powerset=0], [subclass=JSInt|powerset=0], powerset: 0)*/
 jsCallUnion() => JS('int|String', '#', 0);
 
-/*member: jsStringConcat:[exact=JSString]*/
+/*member: jsStringConcat:[exact=JSString|powerset=0]*/
 jsStringConcat() => JS_STRING_CONCAT('a', 'b');
diff --git a/pkg/compiler/test/inference/data/general.dart b/pkg/compiler/test/inference/data/general.dart
index 2bf826e..10b4d4b 100644
--- a/pkg/compiler/test/inference/data/general.dart
+++ b/pkg/compiler/test/inference/data/general.dart
@@ -2,107 +2,109 @@
 // 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.
 
-/*member: returnNum1:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
-returnNum1(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: returnNum1:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+returnNum1(/*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a) {
   if (a)
     return 1;
   else
     return 2.5;
 }
 
-/*member: returnNum2:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
-returnNum2(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: returnNum2:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+returnNum2(/*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a) {
   if (a)
     return 1.4;
   else
     return 2;
 }
 
-/*member: returnInt1:[exact=JSUInt31]*/
-returnInt1(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: returnInt1:[exact=JSUInt31|powerset=0]*/
+returnInt1(/*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a) {
   if (a)
     return 1;
   else
     return 2;
 }
 
-/*member: returnDouble:[exact=JSNumNotInt]*/
-returnDouble(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: returnDouble:[exact=JSNumNotInt|powerset=0]*/
+returnDouble(/*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a) {
   if (a)
     return 1.5;
   else
     return 2.5;
 }
 
-/*member: returnGiveUp:Union([exact=JSString], [exact=JSUInt31])*/
-returnGiveUp(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: returnGiveUp:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+returnGiveUp(/*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a) {
   if (a)
     return 1;
   else
     return 'foo';
 }
 
-/*member: returnInt2:[exact=JSUInt31]*/
+/*member: returnInt2:[exact=JSUInt31|powerset=0]*/
 returnInt2() {
   var a = 42;
-  return a /*invoke: [exact=JSUInt31]*/ ++;
+  return a /*invoke: [exact=JSUInt31|powerset=0]*/ ++;
 }
 
-/*member: returnInt5:[subclass=JSUInt32]*/
+/*member: returnInt5:[subclass=JSUInt32|powerset=0]*/
 returnInt5() {
   var a = 42;
-  return /*invoke: [exact=JSUInt31]*/ ++a;
+  return /*invoke: [exact=JSUInt31|powerset=0]*/ ++a;
 }
 
-/*member: returnInt6:[subclass=JSUInt32]*/
+/*member: returnInt6:[subclass=JSUInt32|powerset=0]*/
 returnInt6() {
   var a = 42;
-  a /*invoke: [exact=JSUInt31]*/ ++;
+  a /*invoke: [exact=JSUInt31|powerset=0]*/ ++;
   return a;
 }
 
-/*member: returnIntOrNull:[null|exact=JSUInt31]*/
-returnIntOrNull(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: returnIntOrNull:[null|exact=JSUInt31|powerset=1]*/
+returnIntOrNull(
+  /*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a,
+) {
   if (a) return 42;
 }
 
-/*member: returnInt3:[exact=JSUInt31]*/
-returnInt3(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: returnInt3:[exact=JSUInt31|powerset=0]*/
+returnInt3(/*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a) {
   if (a) return 42;
   throw 42;
 }
 
-/*member: returnInt4:[exact=JSUInt31]*/
+/*member: returnInt4:[exact=JSUInt31|powerset=0]*/
 returnInt4() {
   return (42);
 }
 
-/*member: returnInt7:[subclass=JSPositiveInt]*/
+/*member: returnInt7:[subclass=JSPositiveInt|powerset=0]*/
 returnInt7() {
-  return 42. /*invoke: [exact=JSUInt31]*/ abs();
+  return 42. /*invoke: [exact=JSUInt31|powerset=0]*/ abs();
 }
 
-/*member: returnInt8:[subclass=JSPositiveInt]*/
+/*member: returnInt8:[subclass=JSPositiveInt|powerset=0]*/
 returnInt8() {
-  return 42. /*invoke: [exact=JSUInt31]*/ remainder(54);
+  return 42. /*invoke: [exact=JSUInt31|powerset=0]*/ remainder(54);
 }
 
-/*member: returnEmpty1:[empty]*/
+/*member: returnEmpty1:[empty|powerset=0]*/
 returnEmpty1() {
   // Ensure that we don't intrinsify a wrong call to [int.remainder].
   dynamic a = 42;
-  return a. /*invoke: [exact=JSUInt31]*/ remainder();
+  return a. /*invoke: [exact=JSUInt31|powerset=0]*/ remainder();
 }
 
-/*member: returnEmpty2:[empty]*/
+/*member: returnEmpty2:[empty|powerset=0]*/
 returnEmpty2() {
   // Ensure that we don't intrinsify a wrong call to [int.abs].
   dynamic a = 42;
-  return a. /*invoke: [exact=JSUInt31]*/ abs(42);
+  return a. /*invoke: [exact=JSUInt31|powerset=0]*/ abs(42);
 }
 
-/*member: testIsCheck1:[subclass=JSInt]*/
-testIsCheck1(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck1:[subclass=JSInt|powerset=0]*/
+testIsCheck1(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a is int) {
     return a;
   } else {
@@ -110,8 +112,8 @@
   }
 }
 
-/*member: testIsCheck2:[subclass=JSInt]*/
-testIsCheck2(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck2:[subclass=JSInt|powerset=0]*/
+testIsCheck2(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a is! int) {
     return 0;
   } else {
@@ -119,8 +121,8 @@
   }
 }
 
-/*member: testIsCheck3:[null|subclass=JSInt]*/
-testIsCheck3(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck3:[null|subclass=JSInt|powerset=1]*/
+testIsCheck3(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a is! int) {
     print('hello');
   } else {
@@ -128,8 +130,8 @@
   }
 }
 
-/*member: testIsCheck4:[subclass=JSInt]*/
-testIsCheck4(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck4:[subclass=JSInt|powerset=0]*/
+testIsCheck4(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a is int) {
     return a;
   } else {
@@ -137,8 +139,8 @@
   }
 }
 
-/*member: testIsCheck5:[subclass=JSInt]*/
-testIsCheck5(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck5:[subclass=JSInt|powerset=0]*/
+testIsCheck5(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a is! int) {
     return 42;
   } else {
@@ -146,8 +148,8 @@
   }
 }
 
-/*member: testIsCheck6:[null|subclass=Object]*/
-testIsCheck6(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck6:[null|subclass=Object|powerset=1]*/
+testIsCheck6(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a is! int) {
     return a;
   } else {
@@ -155,8 +157,8 @@
   }
 }
 
-/*member: testIsCheck7:[subclass=JSInt]*/
-testIsCheck7(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck7:[subclass=JSInt|powerset=0]*/
+testIsCheck7(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a == 'foo' && a is int) {
     return a;
   } else {
@@ -164,8 +166,8 @@
   }
 }
 
-/*member: testIsCheck8:[null|subclass=Object]*/
-testIsCheck8(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck8:[null|subclass=Object|powerset=1]*/
+testIsCheck8(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a == 'foo' || a is int) {
     return a;
   } else {
@@ -173,36 +175,36 @@
   }
 }
 
-/*member: testIsCheck9:[subclass=JSInt]*/
-testIsCheck9(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck9:[subclass=JSInt|powerset=0]*/
+testIsCheck9(/*[null|subclass=Object|powerset=1]*/ a) {
   return a is int ? a : 42;
 }
 
-/*member: testIsCheck10:[null|subclass=Object]*/
-testIsCheck10(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck10:[null|subclass=Object|powerset=1]*/
+testIsCheck10(/*[null|subclass=Object|powerset=1]*/ a) {
   return a is! int ? a : 42;
 }
 
-/*member: testIsCheck11:[subclass=JSInt]*/
-testIsCheck11(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck11:[subclass=JSInt|powerset=0]*/
+testIsCheck11(/*[null|subclass=Object|powerset=1]*/ a) {
   return a is! int ? 42 : a;
 }
 
-/*member: testIsCheck12:[null|subclass=Object]*/
-testIsCheck12(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck12:[null|subclass=Object|powerset=1]*/
+testIsCheck12(/*[null|subclass=Object|powerset=1]*/ a) {
   return a is int ? 42 : a;
 }
 
-/*member: testIsCheck13:[subclass=JSInt]*/
-testIsCheck13(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck13:[subclass=JSInt|powerset=0]*/
+testIsCheck13(/*[null|subclass=Object|powerset=1]*/ a) {
   while (a is int) {
     return a;
   }
   return 42;
 }
 
-/*member: testIsCheck14:[null|subclass=Object]*/
-testIsCheck14(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck14:[null|subclass=Object|powerset=1]*/
+testIsCheck14(/*[null|subclass=Object|powerset=1]*/ a) {
   while (a is! int) {
     return 42;
   }
@@ -210,8 +212,8 @@
 }
 
 // TODO(29309): Change to [subclass=JSInt] when 29309 is fixed.
-/*member: testIsCheck15:[null|subclass=Object]*/
-testIsCheck15(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck15:[null|subclass=Object|powerset=1]*/
+testIsCheck15(/*[null|subclass=Object|powerset=1]*/ a) {
   dynamic c = 42;
   do {
     if (a) return c;
@@ -220,8 +222,8 @@
   return 42;
 }
 
-/*member: testIsCheck16:[null|subclass=Object]*/
-testIsCheck16(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck16:[null|subclass=Object|powerset=1]*/
+testIsCheck16(/*[null|subclass=Object|powerset=1]*/ a) {
   dynamic c = 42;
   do {
     if (a) return c;
@@ -230,8 +232,8 @@
   return 42;
 }
 
-/*member: testIsCheck17:[subclass=JSInt]*/
-testIsCheck17(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck17:[subclass=JSInt|powerset=0]*/
+testIsCheck17(/*[null|subclass=Object|powerset=1]*/ a) {
   dynamic c = 42;
   for (; c is int;) {
     if (a) return c;
@@ -240,8 +242,8 @@
   return 42;
 }
 
-/*member: testIsCheck18:[null|subclass=Object]*/
-testIsCheck18(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck18:[null|subclass=Object|powerset=1]*/
+testIsCheck18(/*[null|subclass=Object|powerset=1]*/ a) {
   dynamic c = 42;
   for (; c is int;) {
     if (a) return c;
@@ -250,8 +252,8 @@
   return c;
 }
 
-/*member: testIsCheck19:[null|subclass=Object]*/
-testIsCheck19(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck19:[null|subclass=Object|powerset=1]*/
+testIsCheck19(/*[null|subclass=Object|powerset=1]*/ a) {
   dynamic c = 42;
   for (; c is! int;) {
     if (a) return c;
@@ -260,7 +262,7 @@
   return 42;
 }
 
-/*member: testIsCheck20:[exact=JSUInt31]*/
+/*member: testIsCheck20:[exact=JSUInt31|powerset=0]*/
 testIsCheck20() {
   var c = topLevelGetter();
   if (c != null && c is! bool && c is! int) {
@@ -272,8 +274,8 @@
   }
 }
 
-/*member: testIsCheck21:Union([subclass=JSArray], [subclass=JSInt])*/
-testIsCheck21(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck21:Union([subclass=JSArray|powerset=0], [subclass=JSInt|powerset=0], powerset: 0)*/
+testIsCheck21(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a is int || a is List) {
     return a;
   } else {
@@ -281,31 +283,31 @@
   }
 }
 
-/*member: testIsCheck22:Union([subclass=JSArray], [subclass=JSInt])*/
-testIsCheck22(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck22:Union([subclass=JSArray|powerset=0], [subclass=JSInt|powerset=0], powerset: 0)*/
+testIsCheck22(/*[null|subclass=Object|powerset=1]*/ a) {
   return (a is int || a is List) ? a : 42;
 }
 
-/*member: testIsCheck23:[subclass=JSInt]*/
-testIsCheck23(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck23:[subclass=JSInt|powerset=0]*/
+testIsCheck23(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a is! int) throw 'foo';
   return a;
 }
 
-/*member: testIsCheck24:[subclass=JSInt]*/
-testIsCheck24(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck24:[subclass=JSInt|powerset=0]*/
+testIsCheck24(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a is! int) return 42;
   return a;
 }
 
-/*member: testIsCheck25:[null|subclass=Object]*/
-testIsCheck25(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck25:[null|subclass=Object|powerset=1]*/
+testIsCheck25(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a is int) throw 'foo';
   return a;
 }
 
-/*member: testIsCheck26:[subclass=JSInt]*/
-testIsCheck26(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck26:[subclass=JSInt|powerset=0]*/
+testIsCheck26(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a is int) {
   } else {
     throw 42;
@@ -313,8 +315,8 @@
   return a;
 }
 
-/*member: testIsCheck27:[subclass=JSInt]*/
-testIsCheck27(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck27:[subclass=JSInt|powerset=0]*/
+testIsCheck27(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a is int) {
   } else {
     return 42;
@@ -322,21 +324,21 @@
   return a;
 }
 
-/*member: testIsCheck28:[null|subclass=Object]*/
-testIsCheck28(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck28:[null|subclass=Object|powerset=1]*/
+testIsCheck28(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a is int) {
   } else {}
   return a;
 }
 
-/*member: testIsCheck29:[null|subclass=Object]*/
-testIsCheck29(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck29:[null|subclass=Object|powerset=1]*/
+testIsCheck29(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a is int) {}
   return a;
 }
 
-/*member: testIf1:[null|exact=JSUInt31]*/
-testIf1(/*[null|subclass=Object]*/ a) {
+/*member: testIf1:[null|exact=JSUInt31|powerset=1]*/
+testIf1(/*[null|subclass=Object|powerset=1]*/ a) {
   var c = null;
   if (a) {
     c = 10;
@@ -344,8 +346,8 @@
   return c;
 }
 
-/*member: testIf2:[null|exact=JSUInt31]*/
-testIf2(/*[null|subclass=Object]*/ a) {
+/*member: testIf2:[null|exact=JSUInt31|powerset=1]*/
+testIf2(/*[null|subclass=Object|powerset=1]*/ a) {
   var c = null;
   if (a) {
   } else {
@@ -354,12 +356,12 @@
   return c;
 }
 
-/*member: returnAsString:[exact=JSString]*/
+/*member: returnAsString:[exact=JSString|powerset=0]*/
 returnAsString() {
   return topLevelGetter() as String;
 }
 
-/*member: returnIntAsNum:[exact=JSUInt31]*/
+/*member: returnIntAsNum:[exact=JSUInt31|powerset=0]*/
 returnIntAsNum() {
   dynamic a = 0;
   return a as num;
@@ -367,24 +369,28 @@
 
 typedef int Foo();
 
-/*member: returnAsTypedef:[subclass=Closure]*/
+/*member: returnAsTypedef:[subclass=Closure|powerset=0]*/
 returnAsTypedef() {
   return topLevelGetter() as Foo;
 }
 
-/*member: testDeadCode:[exact=JSUInt31]*/
+/*member: testDeadCode:[exact=JSUInt31|powerset=0]*/
 testDeadCode() {
   return 42;
   // ignore: dead_code
   return 'foo';
 }
 
-/*member: testLabeledIf:[null|exact=JSUInt31]*/
-testLabeledIf(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: testLabeledIf:[null|exact=JSUInt31|powerset=1]*/
+testLabeledIf(
+  /*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a,
+) {
   var c;
   L1:
-  if (a /*invoke: Value([exact=JSBool], value: true)*/ > 1) {
-    if (a /*invoke: Value([exact=JSBool], value: true)*/ == 2) {
+  if (a /*invoke: Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ >
+      1) {
+    if (a /*invoke: Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ ==
+        2) {
       break L1;
     }
     c = 42;
@@ -394,7 +400,7 @@
   return c;
 }
 
-/*member: testSwitch1:Union(null, [exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: testSwitch1:Union(null, [exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
 testSwitch1() {
   var a = null;
   switch (topLevelGetter) {
@@ -408,7 +414,7 @@
   return a;
 }
 
-/*member: testSwitch2:[exact=JSUInt31]*/
+/*member: testSwitch2:[exact=JSUInt31|powerset=0]*/
 testSwitch2() {
   var a = null;
   switch (topLevelGetter) {
@@ -424,14 +430,16 @@
   return a;
 }
 
-/*member: testSwitch3:Union(null, [exact=JSString], [subclass=JSNumber])*/
+/*member: testSwitch3:Union(null, [exact=JSString|powerset=0], [subclass=JSNumber|powerset=0], powerset: 1)*/
 testSwitch3() {
   dynamic a = 42;
   var b;
   switch (topLevelGetter) {
     L1:
     case 1:
-      b = a /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ + 42;
+      b =
+          a /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ +
+          42;
       break;
     case 2:
       a = 'foo';
@@ -440,7 +448,7 @@
   return b;
 }
 
-/*member: testSwitch4:[exact=JSUInt31]*/
+/*member: testSwitch4:[exact=JSUInt31|powerset=0]*/
 testSwitch4() {
   switch (topLevelGetter) {
     case 1:
@@ -451,7 +459,7 @@
   return 42;
 }
 
-/*member: testSwitch5:[exact=JSUInt31]*/
+/*member: testSwitch5:[exact=JSUInt31|powerset=0]*/
 testSwitch5() {
   switch (topLevelGetter) {
     case 1:
@@ -461,13 +469,16 @@
   }
 }
 
-/*member: testContinue1:Union(null, [exact=JSString], [subclass=JSNumber])*/
+/*member: testContinue1:Union(null, [exact=JSString|powerset=0], [subclass=JSNumber|powerset=0], powerset: 1)*/
 testContinue1() {
   dynamic a = 42;
   var b;
   while (true) {
-    b = a /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ + 54;
-    if (b /*invoke: Union([exact=JSString], [subclass=JSNumber])*/ == 42)
+    b =
+        a /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ +
+        54;
+    if (b /*invoke: Union([exact=JSString|powerset=0], [subclass=JSNumber|powerset=0], powerset: 0)*/ ==
+        42)
       continue;
     a = 'foo';
   }
@@ -475,25 +486,25 @@
   return b;
 }
 
-/*member: testBreak1:Union(null, [exact=JSString], [subclass=JSUInt32])*/
+/*member: testBreak1:Union(null, [exact=JSString|powerset=0], [subclass=JSUInt32|powerset=0], powerset: 1)*/
 testBreak1() {
   var a = 42;
   var b;
   while (true) {
-    b = a /*invoke: [exact=JSUInt31]*/ + 54;
-    if (b /*invoke: [subclass=JSUInt32]*/ == 42) break;
+    b = a /*invoke: [exact=JSUInt31|powerset=0]*/ + 54;
+    if (b /*invoke: [subclass=JSUInt32|powerset=0]*/ == 42) break;
     b = 'foo';
   }
   return b;
 }
 
-/*member: testContinue2:Union(null, [exact=JSString], [subclass=JSUInt32])*/
+/*member: testContinue2:Union(null, [exact=JSString|powerset=0], [subclass=JSUInt32|powerset=0], powerset: 1)*/
 testContinue2() {
   var a = 42;
   var b;
   while (true) {
-    b = a /*invoke: [exact=JSUInt31]*/ + 54;
-    if (b /*invoke: [subclass=JSUInt32]*/ == 42) {
+    b = a /*invoke: [exact=JSUInt31|powerset=0]*/ + 54;
+    if (b /*invoke: [subclass=JSUInt32|powerset=0]*/ == 42) {
       b = 'foo';
       continue;
     }
@@ -502,13 +513,13 @@
   return b;
 }
 
-/*member: testBreak2:[null|subclass=JSUInt32]*/
+/*member: testBreak2:[null|subclass=JSUInt32|powerset=1]*/
 testBreak2() {
   dynamic a = 42;
   var b;
   while (true) {
-    b = a /*invoke: [exact=JSUInt31]*/ + 54;
-    if (b /*invoke: [subclass=JSUInt32]*/ == 42) {
+    b = a /*invoke: [exact=JSUInt31|powerset=0]*/ + 54;
+    if (b /*invoke: [subclass=JSUInt32|powerset=0]*/ == 42) {
       a = 'foo';
       break;
     }
@@ -516,25 +527,25 @@
   return b;
 }
 
-/*member: testReturnElementOfConstList1:[exact=JSUInt31]*/
+/*member: testReturnElementOfConstList1:[exact=JSUInt31|powerset=0]*/
 testReturnElementOfConstList1() {
   return const [
     42,
-  ] /*Container([exact=JSUnmodifiableArray], element: [exact=JSUInt31], length: 1)*/ [0];
+  ] /*Container([exact=JSUnmodifiableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ [0];
 }
 
-/*member: testReturnElementOfConstList2:[exact=JSUInt31]*/
+/*member: testReturnElementOfConstList2:[exact=JSUInt31|powerset=0]*/
 testReturnElementOfConstList2() {
-  return topLevelConstList /*Container([exact=JSUnmodifiableArray], element: [exact=JSUInt31], length: 1)*/ [0];
+  return topLevelConstList /*Container([exact=JSUnmodifiableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ [0];
 }
 
-/*member: testReturnItselfOrInt:[exact=JSUInt31]*/
-testReturnItselfOrInt(/*[null|subclass=Object]*/ a) {
+/*member: testReturnItselfOrInt:[exact=JSUInt31|powerset=0]*/
+testReturnItselfOrInt(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a) return 42;
   return testReturnItselfOrInt(a);
 }
 
-/*member: testDoWhile1:Value([exact=JSString], value: "foo")*/
+/*member: testDoWhile1:Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/
 testDoWhile1() {
   dynamic a = 42;
   do {
@@ -544,7 +555,7 @@
   return a;
 }
 
-/*member: testDoWhile2:[null]*/
+/*member: testDoWhile2:[null|powerset=1]*/
 testDoWhile2() {
   dynamic a = 42;
   do {
@@ -556,10 +567,11 @@
   return a;
 }
 
-/*member: _#flag:[exact=_Cell]*/
-late bool /*Value([exact=JSBool], value: true)*/ /*update: [exact=_Cell]*/ flag;
+/*member: _#flag:[exact=_Cell|powerset=0]*/
+late bool /*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ /*update: [exact=_Cell|powerset=0]*/
+flag;
 
-/*member: testDoWhile3:Value([exact=JSBool], value: false)*/
+/*member: testDoWhile3:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
 testDoWhile3() {
   dynamic a = 42;
   do {
@@ -571,7 +583,7 @@
   return a;
 }
 
-/*member: testDoWhile4:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: testDoWhile4:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 testDoWhile4() {
   dynamic a = 'foo';
   do {
@@ -582,261 +594,269 @@
   return a;
 }
 
-/*member: testSpecialization1:[subclass=Object]*/
+/*member: testSpecialization1:[subclass=Object|powerset=0]*/
 testSpecialization1() {
   var a = topLevelGetter();
   a - 42;
   return a;
 }
 
-/*member: testSpecialization2:[null|subclass=Object]*/
+/*member: testSpecialization2:[null|subclass=Object|powerset=1]*/
 testSpecialization2() {
   var a = topLevelGetter();
   // Make [a] a captured variable. This should disable receiver
   // specialization on [a].
   (
-  /*[exact=JSString]*/
+  /*[exact=JSString|powerset=0]*/
   () => a.toString())();
   a - 42;
   return a;
 }
 
-/*member: testSpecialization3:[null|exact=JSUInt31]*/
+/*member: testSpecialization3:[null|exact=JSUInt31|powerset=1]*/
 testSpecialization3() {
   var a = returnDynamic() ? null : 42;
-  a. /*invoke: [null|exact=JSUInt31]*/ toString();
+  a. /*invoke: [null|exact=JSUInt31|powerset=1]*/ toString();
   // Test that calling an [Object] method on [a] will not lead to
   // infer that [a] is not null;
   return a;
 }
 
-/*member: testReturnNull1:[null]*/
-testReturnNull1(/*[null|subclass=Object]*/ a) {
+/*member: testReturnNull1:[null|powerset=1]*/
+testReturnNull1(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a == null) return a;
   return null;
 }
 
-/*member: testReturnNull2:[null]*/
-testReturnNull2(/*[null|subclass=Object]*/ a) {
+/*member: testReturnNull2:[null|powerset=1]*/
+testReturnNull2(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a != null) return null;
   return a;
 }
 
-/*member: testReturnNull3:[subclass=Object]*/
-testReturnNull3(/*[null|subclass=Object]*/ a) {
+/*member: testReturnNull3:[subclass=Object|powerset=0]*/
+testReturnNull3(/*[null|subclass=Object|powerset=1]*/ a) {
   if (a == null) return 42;
   return a;
 }
 
-/*member: testReturnNull4:[null]*/
+/*member: testReturnNull4:[null|powerset=1]*/
 testReturnNull4() {
   var a = topLevelGetter();
   if (a == null) return a;
   return null;
 }
 
-/*member: testReturnNull5:[null]*/
+/*member: testReturnNull5:[null|powerset=1]*/
 testReturnNull5() {
   var a = topLevelGetter();
   if (a != null) return null;
   return a;
 }
 
-/*member: testReturnNull6:[subclass=Object]*/
+/*member: testReturnNull6:[subclass=Object|powerset=0]*/
 testReturnNull6() {
   var a = topLevelGetter();
   if (a == null) return 42;
   return a;
 }
 
-/*member: testReturnNotEquals:[exact=JSBool]*/
+/*member: testReturnNotEquals:[exact=JSBool|powerset=0]*/
 testReturnNotEquals() {
-  return A() /*invoke: [exact=A]*/ != 54;
+  return A() /*invoke: [exact=A|powerset=0]*/ != 54;
 }
 
-/*member: testReturnInvokeDynamicGetter:[null|subclass=Object]*/
-testReturnInvokeDynamicGetter() => A().myFactory /*invoke: [exact=A]*/ ();
+/*member: testReturnInvokeDynamicGetter:[null|subclass=Object|powerset=1]*/
+testReturnInvokeDynamicGetter() =>
+    A().myFactory /*invoke: [exact=A|powerset=0]*/ ();
 
-/*member: topLevelConstList:Container([exact=JSUnmodifiableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: topLevelConstList:Container([exact=JSUnmodifiableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
 var topLevelConstList = const [42];
 
-/*member: topLevelGetter:[exact=JSUInt31]*/
+/*member: topLevelGetter:[exact=JSUInt31|powerset=0]*/
 get topLevelGetter => 42;
 
-/*member: returnDynamic:[null|subclass=Object]*/
+/*member: returnDynamic:[null|subclass=Object|powerset=1]*/
 returnDynamic() => topLevelGetter(42);
 
-/*member: returnTopLevelGetter:[exact=JSUInt31]*/
+/*member: returnTopLevelGetter:[exact=JSUInt31|powerset=0]*/
 returnTopLevelGetter() => topLevelGetter;
 
 class A {
   factory A() = A.generative;
 
-  /*member: A.generative:[exact=A]*/
+  /*member: A.generative:[exact=A|powerset=0]*/
   A.generative();
 
-  /*member: A.==:[exact=JSBool]*/
-  operator ==(/*Union([exact=JSString], [exact=JSUInt31])*/ other) =>
-      42 as dynamic;
+  /*member: A.==:[exact=JSBool|powerset=0]*/
+  operator ==(
+    /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ other,
+  ) => 42 as dynamic;
 
-  /*member: A.myField:[exact=JSUInt31]*/
+  /*member: A.myField:[exact=JSUInt31|powerset=0]*/
   get myField => 42;
 
-  set myField(/*[subclass=JSUInt32]*/ a) {}
+  set myField(/*[subclass=JSUInt32|powerset=0]*/ a) {}
 
-  /*member: A.returnInt1:[subclass=JSUInt32]*/
-  returnInt1() => /*invoke: [exact=JSUInt31]*/
-      ++ /*[subclass=A]*/ /*update: [subclass=A]*/ myField;
+  /*member: A.returnInt1:[subclass=JSUInt32|powerset=0]*/
+  returnInt1() => /*invoke: [exact=JSUInt31|powerset=0]*/
+      ++ /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ myField;
 
-  /*member: A.returnInt2:[subclass=JSUInt32]*/
-  returnInt2() => /*invoke: [exact=JSUInt31]*/
-      ++this. /*[subclass=A]*/ /*update: [subclass=A]*/ myField;
+  /*member: A.returnInt2:[subclass=JSUInt32|powerset=0]*/
+  returnInt2() => /*invoke: [exact=JSUInt31|powerset=0]*/
+      ++this
+          . /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ myField;
 
-  /*member: A.returnInt3:[subclass=JSUInt32]*/
+  /*member: A.returnInt3:[subclass=JSUInt32|powerset=0]*/
   returnInt3() =>
-      this. /*[subclass=A]*/ /*update: [subclass=A]*/ myField /*invoke: [exact=JSUInt31]*/ +=
+      this. /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ myField /*invoke: [exact=JSUInt31|powerset=0]*/ +=
           42;
 
-  /*member: A.returnInt4:[subclass=JSUInt32]*/
-  returnInt4() => /*[subclass=A]*/ /*update: [subclass=A]*/
-      myField /*invoke: [exact=JSUInt31]*/ += 42;
+  /*member: A.returnInt4:[subclass=JSUInt32|powerset=0]*/
+  returnInt4() => /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/
+      myField /*invoke: [exact=JSUInt31|powerset=0]*/ += 42;
 
-  /*member: A.[]:[exact=JSUInt31]*/
-  operator [](/*[exact=JSUInt31]*/ index) => 42;
+  /*member: A.[]:[exact=JSUInt31|powerset=0]*/
+  operator [](/*[exact=JSUInt31|powerset=0]*/ index) => 42;
 
-  /*member: A.[]=:[null]*/
-  operator []=(/*[exact=JSUInt31]*/ index, /*[subclass=JSUInt32]*/ value) {}
+  /*member: A.[]=:[null|powerset=1]*/
+  operator []=(
+    /*[exact=JSUInt31|powerset=0]*/ index,
+    /*[subclass=JSUInt32|powerset=0]*/ value,
+  ) {}
 
-  /*member: A.returnInt5:[subclass=JSUInt32]*/
-  returnInt5() => /*invoke: [exact=JSUInt31]*/
-      ++this /*[subclass=A]*/ /*update: [subclass=A]*/ [0];
+  /*member: A.returnInt5:[subclass=JSUInt32|powerset=0]*/
+  returnInt5() => /*invoke: [exact=JSUInt31|powerset=0]*/
+      ++this /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ [0];
 
-  /*member: A.returnInt6:[subclass=JSUInt32]*/
+  /*member: A.returnInt6:[subclass=JSUInt32|powerset=0]*/
   returnInt6() =>
-      this /*[subclass=A]*/ /*update: [subclass=A]*/ [0] /*invoke: [exact=JSUInt31]*/ +=
+      this /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ [0] /*invoke: [exact=JSUInt31|powerset=0]*/ +=
           1;
 
-  /*member: A.myFactory:[subclass=Closure]*/
-  get myFactory => /*[exact=JSUInt31]*/ () => 42;
+  /*member: A.myFactory:[subclass=Closure|powerset=0]*/
+  get myFactory => /*[exact=JSUInt31|powerset=0]*/ () => 42;
 }
 
 class B extends A {
-  /*member: B.:[exact=B]*/
+  /*member: B.:[exact=B|powerset=0]*/
   B() : super.generative();
 
-  /*member: B.returnInt1:[subclass=JSUInt32]*/
-  returnInt1() => /*invoke: [exact=JSUInt31]*/
-      ++new A(). /*[exact=A]*/ /*update: [exact=A]*/ myField;
+  /*member: B.returnInt1:[subclass=JSUInt32|powerset=0]*/
+  returnInt1() => /*invoke: [exact=JSUInt31|powerset=0]*/
+      ++new A()
+          . /*[exact=A|powerset=0]*/ /*update: [exact=A|powerset=0]*/ myField;
 
-  /*member: B.returnInt2:[subclass=JSUInt32]*/
+  /*member: B.returnInt2:[subclass=JSUInt32|powerset=0]*/
   returnInt2() =>
-      A(). /*[exact=A]*/ /*update: [exact=A]*/ myField /*invoke: [exact=JSUInt31]*/ +=
+      A(). /*[exact=A|powerset=0]*/ /*update: [exact=A|powerset=0]*/ myField /*invoke: [exact=JSUInt31|powerset=0]*/ +=
           4;
 
-  /*member: B.returnInt3:[subclass=JSUInt32]*/
-  returnInt3() => /*invoke: [exact=JSUInt31]*/
-      ++new A() /*[exact=A]*/ /*update: [exact=A]*/ [0];
+  /*member: B.returnInt3:[subclass=JSUInt32|powerset=0]*/
+  returnInt3() => /*invoke: [exact=JSUInt31|powerset=0]*/
+      ++new A() /*[exact=A|powerset=0]*/ /*update: [exact=A|powerset=0]*/ [0];
 
-  /*member: B.returnInt4:[subclass=JSUInt32]*/
+  /*member: B.returnInt4:[subclass=JSUInt32|powerset=0]*/
   returnInt4() =>
-      A() /*[exact=A]*/ /*update: [exact=A]*/ [0] /*invoke: [exact=JSUInt31]*/ +=
+      A() /*[exact=A|powerset=0]*/ /*update: [exact=A|powerset=0]*/ [0] /*invoke: [exact=JSUInt31|powerset=0]*/ +=
           42;
 
-  /*member: B.returnInt5:[subclass=JSUInt32]*/
-  returnInt5() => /*invoke: [exact=JSUInt31]*/ ++super.myField;
+  /*member: B.returnInt5:[subclass=JSUInt32|powerset=0]*/
+  returnInt5() => /*invoke: [exact=JSUInt31|powerset=0]*/ ++super.myField;
 
-  /*member: B.returnInt6:[subclass=JSUInt32]*/
-  returnInt6() => super.myField /*invoke: [exact=JSUInt31]*/ += 4;
+  /*member: B.returnInt6:[subclass=JSUInt32|powerset=0]*/
+  returnInt6() => super.myField /*invoke: [exact=JSUInt31|powerset=0]*/ += 4;
 
-  /*member: B.returnInt7:[subclass=JSUInt32]*/
-  returnInt7() => /*invoke: [exact=JSUInt31]*/ ++super[0];
+  /*member: B.returnInt7:[subclass=JSUInt32|powerset=0]*/
+  returnInt7() => /*invoke: [exact=JSUInt31|powerset=0]*/ ++super[0];
 
-  /*member: B.returnInt8:[subclass=JSUInt32]*/
-  returnInt8() => super[0] /*invoke: [exact=JSUInt31]*/ += 54;
+  /*member: B.returnInt8:[subclass=JSUInt32|powerset=0]*/
+  returnInt8() => super[0] /*invoke: [exact=JSUInt31|powerset=0]*/ += 54;
 
-  /*member: B.returnInt9:[exact=JSUInt31]*/
+  /*member: B.returnInt9:[exact=JSUInt31|powerset=0]*/
   returnInt9() => super.myField;
 }
 
 class C {
-  /*member: C.myField:[subclass=JSPositiveInt]*/
+  /*member: C.myField:[subclass=JSPositiveInt|powerset=0]*/
   var myField = 42;
 
-  /*member: C.:[exact=C]*/
+  /*member: C.:[exact=C|powerset=0]*/
   C();
 
-  /*member: C.returnInt1:[subclass=JSPositiveInt]*/
-  returnInt1() => /*invoke: [subclass=JSPositiveInt]*/
-      ++ /*update: [exact=C]*/ /*[exact=C]*/ myField;
+  /*member: C.returnInt1:[subclass=JSPositiveInt|powerset=0]*/
+  returnInt1() => /*invoke: [subclass=JSPositiveInt|powerset=0]*/
+      ++ /*update: [exact=C|powerset=0]*/ /*[exact=C|powerset=0]*/ myField;
 
-  /*member: C.returnInt2:[subclass=JSPositiveInt]*/
-  returnInt2() => /*invoke: [subclass=JSPositiveInt]*/
-      ++this. /*[exact=C]*/ /*update: [exact=C]*/ myField;
+  /*member: C.returnInt2:[subclass=JSPositiveInt|powerset=0]*/
+  returnInt2() => /*invoke: [subclass=JSPositiveInt|powerset=0]*/
+      ++this. /*[exact=C|powerset=0]*/ /*update: [exact=C|powerset=0]*/ myField;
 
-  /*member: C.returnInt3:[subclass=JSPositiveInt]*/
+  /*member: C.returnInt3:[subclass=JSPositiveInt|powerset=0]*/
   returnInt3() =>
-      this. /*[exact=C]*/ /*update: [exact=C]*/ myField /*invoke: [subclass=JSPositiveInt]*/ +=
+      this. /*[exact=C|powerset=0]*/ /*update: [exact=C|powerset=0]*/ myField /*invoke: [subclass=JSPositiveInt|powerset=0]*/ +=
           42;
 
-  /*member: C.returnInt4:[subclass=JSPositiveInt]*/
-  returnInt4() => /*[exact=C]*/ /*update: [exact=C]*/
-      myField /*invoke: [subclass=JSPositiveInt]*/ += 42;
+  /*member: C.returnInt4:[subclass=JSPositiveInt|powerset=0]*/
+  returnInt4() => /*[exact=C|powerset=0]*/ /*update: [exact=C|powerset=0]*/
+      myField /*invoke: [subclass=JSPositiveInt|powerset=0]*/ += 42;
 
-  /*member: C.[]:[subclass=JSPositiveInt]*/
-  operator [](/*[exact=JSUInt31]*/ index) => /*[exact=C]*/ myField;
+  /*member: C.[]:[subclass=JSPositiveInt|powerset=0]*/
+  operator [](/*[exact=JSUInt31|powerset=0]*/ index) => /*[exact=C|powerset=0]*/
+      myField;
 
-  /*member: C.[]=:[null]*/
+  /*member: C.[]=:[null|powerset=1]*/
   operator []=(
-    /*[exact=JSUInt31]*/ index,
-    /*[subclass=JSPositiveInt]*/ value,
+    /*[exact=JSUInt31|powerset=0]*/ index,
+    /*[subclass=JSPositiveInt|powerset=0]*/ value,
   ) {}
 
-  /*member: C.returnInt5:[subclass=JSPositiveInt]*/
-  returnInt5() => /*invoke: [subclass=JSPositiveInt]*/
-      ++this /*[exact=C]*/ /*update: [exact=C]*/ [0];
+  /*member: C.returnInt5:[subclass=JSPositiveInt|powerset=0]*/
+  returnInt5() => /*invoke: [subclass=JSPositiveInt|powerset=0]*/
+      ++this /*[exact=C|powerset=0]*/ /*update: [exact=C|powerset=0]*/ [0];
 
-  /*member: C.returnInt6:[subclass=JSPositiveInt]*/
+  /*member: C.returnInt6:[subclass=JSPositiveInt|powerset=0]*/
   returnInt6() =>
-      this /*[exact=C]*/ /*update: [exact=C]*/ [0] /*invoke: [subclass=JSPositiveInt]*/ +=
+      this /*[exact=C|powerset=0]*/ /*update: [exact=C|powerset=0]*/ [0] /*invoke: [subclass=JSPositiveInt|powerset=0]*/ +=
           1;
 }
 
-/*member: testCascade1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/
+/*member: testCascade1:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/
 testCascade1() {
   return [1, 2, 3]
-    .. /*invoke: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/ add(
+    .. /*invoke: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/ add(
       4,
     )
-    .. /*invoke: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/ add(
+    .. /*invoke: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/ add(
       5,
     );
 }
 
-/*member: testCascade2:[exact=CascadeHelper]*/
+/*member: testCascade2:[exact=CascadeHelper|powerset=0]*/
 testCascade2() {
   return CascadeHelper()
-    .. /*update: [exact=CascadeHelper]*/ a = "hello"
-    .. /*update: [exact=CascadeHelper]*/ b = 42
-    .. /*[exact=CascadeHelper]*/ i /*invoke: [subclass=JSPositiveInt]*/ /*update: [exact=CascadeHelper]*/ +=
+    .. /*update: [exact=CascadeHelper|powerset=0]*/ a = "hello"
+    .. /*update: [exact=CascadeHelper|powerset=0]*/ b = 42
+    .. /*[exact=CascadeHelper|powerset=0]*/ i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ /*update: [exact=CascadeHelper|powerset=0]*/ +=
         1;
 }
 
-/*member: CascadeHelper.:[exact=CascadeHelper]*/
+/*member: CascadeHelper.:[exact=CascadeHelper|powerset=0]*/
 class CascadeHelper {
-  /*member: CascadeHelper.a:Value([null|exact=JSString], value: "hello")*/
+  /*member: CascadeHelper.a:Value([null|exact=JSString|powerset=1], value: "hello", powerset: 1)*/
   var a;
 
-  /*member: CascadeHelper.b:[null|exact=JSUInt31]*/
+  /*member: CascadeHelper.b:[null|exact=JSUInt31|powerset=1]*/
   var b;
 
-  /*member: CascadeHelper.i:[subclass=JSPositiveInt]*/
+  /*member: CascadeHelper.i:[subclass=JSPositiveInt|powerset=0]*/
   var i = 0;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   // Ensure a function class is being instantiated.
-  /*[exact=JSUInt31]*/
+  /*[exact=JSUInt31|powerset=0]*/
   () => 42;
   returnNum1(true);
   returnNum2(true);
@@ -904,33 +924,33 @@
   testDoWhile2();
   testDoWhile3();
   testDoWhile4();
-  A() /*invoke: [subclass=A]*/ == null;
+  A() /*invoke: [subclass=A|powerset=0]*/ == null;
   A()
-    .. /*invoke: [exact=A]*/ returnInt1()
-    .. /*invoke: [exact=A]*/ returnInt2()
-    .. /*invoke: [exact=A]*/ returnInt3()
-    .. /*invoke: [exact=A]*/ returnInt4()
-    .. /*invoke: [exact=A]*/ returnInt5()
-    .. /*invoke: [exact=A]*/ returnInt6();
+    .. /*invoke: [exact=A|powerset=0]*/ returnInt1()
+    .. /*invoke: [exact=A|powerset=0]*/ returnInt2()
+    .. /*invoke: [exact=A|powerset=0]*/ returnInt3()
+    .. /*invoke: [exact=A|powerset=0]*/ returnInt4()
+    .. /*invoke: [exact=A|powerset=0]*/ returnInt5()
+    .. /*invoke: [exact=A|powerset=0]*/ returnInt6();
 
   B()
-    .. /*invoke: [exact=B]*/ returnInt1()
-    .. /*invoke: [exact=B]*/ returnInt2()
-    .. /*invoke: [exact=B]*/ returnInt3()
-    .. /*invoke: [exact=B]*/ returnInt4()
-    .. /*invoke: [exact=B]*/ returnInt5()
-    .. /*invoke: [exact=B]*/ returnInt6()
-    .. /*invoke: [exact=B]*/ returnInt7()
-    .. /*invoke: [exact=B]*/ returnInt8()
-    .. /*invoke: [exact=B]*/ returnInt9();
+    .. /*invoke: [exact=B|powerset=0]*/ returnInt1()
+    .. /*invoke: [exact=B|powerset=0]*/ returnInt2()
+    .. /*invoke: [exact=B|powerset=0]*/ returnInt3()
+    .. /*invoke: [exact=B|powerset=0]*/ returnInt4()
+    .. /*invoke: [exact=B|powerset=0]*/ returnInt5()
+    .. /*invoke: [exact=B|powerset=0]*/ returnInt6()
+    .. /*invoke: [exact=B|powerset=0]*/ returnInt7()
+    .. /*invoke: [exact=B|powerset=0]*/ returnInt8()
+    .. /*invoke: [exact=B|powerset=0]*/ returnInt9();
 
   C()
-    .. /*invoke: [exact=C]*/ returnInt1()
-    .. /*invoke: [exact=C]*/ returnInt2()
-    .. /*invoke: [exact=C]*/ returnInt3()
-    .. /*invoke: [exact=C]*/ returnInt4()
-    .. /*invoke: [exact=C]*/ returnInt5()
-    .. /*invoke: [exact=C]*/ returnInt6();
+    .. /*invoke: [exact=C|powerset=0]*/ returnInt1()
+    .. /*invoke: [exact=C|powerset=0]*/ returnInt2()
+    .. /*invoke: [exact=C|powerset=0]*/ returnInt3()
+    .. /*invoke: [exact=C|powerset=0]*/ returnInt4()
+    .. /*invoke: [exact=C|powerset=0]*/ returnInt5()
+    .. /*invoke: [exact=C|powerset=0]*/ returnInt6();
   testReturnElementOfConstList1();
   testReturnElementOfConstList2();
   testReturnItselfOrInt(topLevelGetter());
diff --git a/pkg/compiler/test/inference/data/general6.dart b/pkg/compiler/test/inference/data/general6.dart
index 7fc90d9..3e726d1 100644
--- a/pkg/compiler/test/inference/data/general6.dart
+++ b/pkg/compiler/test/inference/data/general6.dart
@@ -2,14 +2,14 @@
 // 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.
 
-/*member: foo:[exact=JSUInt31]*/
+/*member: foo:[exact=JSUInt31|powerset=0]*/
 foo() {
   var a = [1, 2, 3];
   return a
-      . /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 3)*/ first;
+      . /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 3, powerset: 0)*/ first;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   foo();
 }
diff --git a/pkg/compiler/test/inference/data/general7.dart b/pkg/compiler/test/inference/data/general7.dart
index bd8da3f3..a805b9d 100644
--- a/pkg/compiler/test/inference/data/general7.dart
+++ b/pkg/compiler/test/inference/data/general7.dart
@@ -6,10 +6,10 @@
 /// file 'general7_ea.dart' contains similar tests for when assertions are
 /// _enabled_.
 
-/*member: foo:[null]*/
-foo(/*[exact=JSUInt31]*/ x, [/*[null]*/ y]) => y;
+/*member: foo:[null|powerset=1]*/
+foo(/*[exact=JSUInt31|powerset=0]*/ x, [/*[null|powerset=1]*/ y]) => y;
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   assert(foo('Hi', true), foo(true));
   foo(1);
diff --git a/pkg/compiler/test/inference/data/general7_ea.dart b/pkg/compiler/test/inference/data/general7_ea.dart
index f23f8ee..0617d45 100644
--- a/pkg/compiler/test/inference/data/general7_ea.dart
+++ b/pkg/compiler/test/inference/data/general7_ea.dart
@@ -6,13 +6,13 @@
 /// file 'general7.dart' contains similar tests for when assertions are
 /// _disabled_.
 
-/*member: foo:Value([null|exact=JSBool], value: true)*/
+/*member: foo:Value([null|exact=JSBool|powerset=1], value: true, powerset: 1)*/
 foo(
-  /*Union([exact=JSBool], [exact=JSString], [exact=JSUInt31])*/ x, [
-  /*Value([null|exact=JSBool], value: true)*/ y,
+  /*Union([exact=JSBool|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ x, [
+  /*Value([null|exact=JSBool|powerset=1], value: true, powerset: 1)*/ y,
 ]) => y;
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   assert(foo('Hi', true), foo(true));
   foo(1);
diff --git a/pkg/compiler/test/inference/data/general8a.dart b/pkg/compiler/test/inference/data/general8a.dart
index 8f3815a..e215eba 100644
--- a/pkg/compiler/test/inference/data/general8a.dart
+++ b/pkg/compiler/test/inference/data/general8a.dart
@@ -2,13 +2,13 @@
 // 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.
 
-/*member: foo:Value([exact=JSBool], value: false)*/
-foo(/*Value([exact=JSBool], value: false)*/ x) {
+/*member: foo:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
+foo(/*Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/ x) {
   return x;
 }
 
-/*member: bar:[null]*/
-bar(/*Value([exact=JSBool], value: false)*/ x) {
+/*member: bar:[null|powerset=1]*/
+bar(/*Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/ x) {
   if (x) {
     print("aaa");
   } else {
@@ -16,7 +16,7 @@
   }
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   bar(foo(false));
   bar(foo(foo(false)));
diff --git a/pkg/compiler/test/inference/data/general8b.dart b/pkg/compiler/test/inference/data/general8b.dart
index b3d447e..710dd80 100644
--- a/pkg/compiler/test/inference/data/general8b.dart
+++ b/pkg/compiler/test/inference/data/general8b.dart
@@ -2,14 +2,14 @@
 // 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.
 
-/*member: foo:[exact=JSBool]*/
-foo(/*[exact=JSUInt31]*/ x) {
-  if (x /*invoke: [exact=JSUInt31]*/ > 3) return true;
+/*member: foo:[exact=JSBool|powerset=0]*/
+foo(/*[exact=JSUInt31|powerset=0]*/ x) {
+  if (x /*invoke: [exact=JSUInt31|powerset=0]*/ > 3) return true;
   return false;
 }
 
-/*member: bar:[null]*/
-bar(/*[exact=JSBool]*/ x) {
+/*member: bar:[null|powerset=1]*/
+bar(/*[exact=JSBool|powerset=0]*/ x) {
   if (x) {
     print("aaa");
   } else {
@@ -17,7 +17,7 @@
   }
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   bar(foo(5));
   bar(foo(6));
diff --git a/pkg/compiler/test/inference/data/global_field_closure.dart b/pkg/compiler/test/inference/data/global_field_closure.dart
index 616c6f1..71f0dfc 100644
--- a/pkg/compiler/test/inference/data/global_field_closure.dart
+++ b/pkg/compiler/test/inference/data/global_field_closure.dart
@@ -2,34 +2,34 @@
 // 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.
 
-/*member: method1:[exact=JSUInt31]*/
+/*member: method1:[exact=JSUInt31|powerset=0]*/
 method1() {
   return 42;
 }
 
-/*member: method2:[exact=JSUInt31]*/
+/*member: method2:[exact=JSUInt31|powerset=0]*/
 // Called only via [foo2] with a small integer.
-method2(/*[exact=JSUInt31]*/ a) {
+method2(/*[exact=JSUInt31|powerset=0]*/ a) {
   return a;
 }
 
-/*member: foo1:[subclass=Closure]*/
+/*member: foo1:[subclass=Closure|powerset=0]*/
 var foo1 = method1;
 
-/*member: foo2:[subclass=Closure]*/
+/*member: foo2:[subclass=Closure|powerset=0]*/
 var foo2 = method2;
 
-/*member: returnInt1:[null|subclass=Object]*/
+/*member: returnInt1:[null|subclass=Object|powerset=1]*/
 returnInt1() {
   return foo1();
 }
 
-/*member: returnInt2:[null|subclass=Object]*/
+/*member: returnInt2:[null|subclass=Object|powerset=1]*/
 returnInt2() {
   return foo2(54);
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   returnInt1();
   returnInt2();
diff --git a/pkg/compiler/test/inference/data/global_field_closure2.dart b/pkg/compiler/test/inference/data/global_field_closure2.dart
index 42991dc..68c802a 100644
--- a/pkg/compiler/test/inference/data/global_field_closure2.dart
+++ b/pkg/compiler/test/inference/data/global_field_closure2.dart
@@ -2,21 +2,21 @@
 // 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.
 
-/*member: method:[exact=JSUInt31]*/
+/*member: method:[exact=JSUInt31|powerset=0]*/
 // Called only via [foo] with a small integer.
-method(/*[exact=JSUInt31]*/ a) {
+method(/*[exact=JSUInt31|powerset=0]*/ a) {
   return a;
 }
 
-/*member: foo:[subclass=Closure]*/
+/*member: foo:[subclass=Closure|powerset=0]*/
 var foo = method;
 
-/*member: returnInt:[null|subclass=Object]*/
+/*member: returnInt:[null|subclass=Object|powerset=1]*/
 returnInt() {
   return foo(54);
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   returnInt();
 }
diff --git a/pkg/compiler/test/inference/data/if.dart b/pkg/compiler/test/inference/data/if.dart
index ecb1a6f..b488749 100644
--- a/pkg/compiler/test/inference/data/if.dart
+++ b/pkg/compiler/test/inference/data/if.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   simpleIfThen();
   simpleIfThenElse();
@@ -12,13 +12,13 @@
 // Test if-then statement
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _simpleIfThen:[null|exact=JSUInt31]*/
-_simpleIfThen(/*[exact=JSBool]*/ c) {
+/*member: _simpleIfThen:[null|exact=JSUInt31|powerset=1]*/
+_simpleIfThen(/*[exact=JSBool|powerset=0]*/ c) {
   if (c) return 1;
   return null;
 }
 
-/*member: simpleIfThen:[null]*/
+/*member: simpleIfThen:[null|powerset=1]*/
 simpleIfThen() {
   _simpleIfThen(true);
   _simpleIfThen(false);
@@ -28,15 +28,15 @@
 // Test if-then-else statement
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _simpleIfThenElse:[null|exact=JSUInt31]*/
-_simpleIfThenElse(/*[exact=JSBool]*/ c) {
+/*member: _simpleIfThenElse:[null|exact=JSUInt31|powerset=1]*/
+_simpleIfThenElse(/*[exact=JSBool|powerset=0]*/ c) {
   if (c)
     return 1;
   else
     return null;
 }
 
-/*member: simpleIfThenElse:[null]*/
+/*member: simpleIfThenElse:[null|powerset=1]*/
 simpleIfThenElse() {
   _simpleIfThenElse(true);
   _simpleIfThenElse(false);
diff --git a/pkg/compiler/test/inference/data/if_null.dart b/pkg/compiler/test/inference/data/if_null.dart
index ecd22f5..8d95daa 100644
--- a/pkg/compiler/test/inference/data/if_null.dart
+++ b/pkg/compiler/test/inference/data/if_null.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   ifNull();
   ifNotNullInvoke();
@@ -13,10 +13,10 @@
 // If-null on parameter.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _ifNull:[exact=JSUInt31]*/
-_ifNull(/*[null|exact=JSUInt31]*/ o) => o ?? 0;
+/*member: _ifNull:[exact=JSUInt31|powerset=0]*/
+_ifNull(/*[null|exact=JSUInt31|powerset=1]*/ o) => o ?? 0;
 
-/*member: ifNull:[null]*/
+/*member: ifNull:[null|powerset=1]*/
 ifNull() {
   _ifNull(null);
   _ifNull(0);
@@ -26,15 +26,15 @@
 // If-not-null access on parameter.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _ifNotNullInvoke:[null|exact=JSBool]*/
-_ifNotNullInvoke(/*[null|exact=JSUInt31]*/ o) {
+/*member: _ifNotNullInvoke:[null|exact=JSBool|powerset=1]*/
+_ifNotNullInvoke(/*[null|exact=JSUInt31|powerset=1]*/ o) {
   return o
       ?.
-      /*[exact=JSUInt31]*/
+      /*[exact=JSUInt31|powerset=0]*/
       isEven;
 }
 
-/*member: ifNotNullInvoke:[null]*/
+/*member: ifNotNullInvoke:[null|powerset=1]*/
 ifNotNullInvoke() {
   _ifNotNullInvoke(null);
   _ifNotNullInvoke(0);
@@ -44,12 +44,12 @@
 // As above but unconditional access.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _notIfNotNullInvoke:[exact=JSBool]*/
-_notIfNotNullInvoke(/*[null|exact=JSUInt31]*/ o) {
-  return o. /*[null|exact=JSUInt31]*/ isEven;
+/*member: _notIfNotNullInvoke:[exact=JSBool|powerset=0]*/
+_notIfNotNullInvoke(/*[null|exact=JSUInt31|powerset=1]*/ o) {
+  return o. /*[null|exact=JSUInt31|powerset=1]*/ isEven;
 }
 
-/*member: notIfNotNullInvoke:[null]*/
+/*member: notIfNotNullInvoke:[null|powerset=1]*/
 notIfNotNullInvoke() {
   _notIfNotNullInvoke(null);
   _notIfNotNullInvoke(0);
diff --git a/pkg/compiler/test/inference/data/index.dart b/pkg/compiler/test/inference/data/index.dart
index ff1d39e..c0c0b14 100644
--- a/pkg/compiler/test/inference/data/index.dart
+++ b/pkg/compiler/test/inference/data/index.dart
@@ -6,11 +6,11 @@
 // Lookup into a singleton list.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: listIndexSingle:[exact=JSUInt31]*/
+/*member: listIndexSingle:[exact=JSUInt31|powerset=0]*/
 listIndexSingle() {
   var list = [0];
   return list
-  /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+  /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
   [0];
 }
 
@@ -18,11 +18,11 @@
 // Lookup into a list with multiple elements.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: listIndexMultiple:[exact=JSUInt31]*/
+/*member: listIndexMultiple:[exact=JSUInt31|powerset=0]*/
 listIndexMultiple() {
   var list = [0, 1, 2, 3];
   return list
-  /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 4)*/
+  /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 4, powerset: 0)*/
   [2];
 }
 
@@ -30,11 +30,11 @@
 // Lookup into a list with an out-of-range index.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: listIndexBad:[exact=JSUInt31]*/
+/*member: listIndexBad:[exact=JSUInt31|powerset=0]*/
 listIndexBad() {
   var list = [0, 1];
   return list
-  /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/
+  /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/
   [3];
 }
 
@@ -42,11 +42,11 @@
 // Lookup into a list with mixed element types.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: listIndexMixed:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: listIndexMixed:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 listIndexMixed() {
   var list = [0, ''];
   return list
-  /*Container([exact=JSExtendableArray], element: Union([exact=JSString], [exact=JSUInt31]), length: 2)*/
+  /*Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: 2, powerset: 0)*/
   [0];
 }
 
@@ -54,11 +54,11 @@
 // Lookup into a singleton map.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: mapLookupSingle:[null|exact=JSUInt31]*/
+/*member: mapLookupSingle:[null|exact=JSUInt31|powerset=1]*/
 mapLookupSingle() {
   var map = {0: 1};
   return map
-  /*Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSUInt31])*/
+  /*Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
   [0];
 }
 
@@ -66,11 +66,11 @@
 // Lookup into a map with multiple entries.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: mapLookupMultiple:[null|exact=JSUInt31]*/
+/*member: mapLookupMultiple:[null|exact=JSUInt31|powerset=1]*/
 mapLookupMultiple() {
   var map = {0: 1, 2: 3, 4: 5};
   return map
-  /*Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSUInt31])*/
+  /*Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
   [2];
 }
 
@@ -78,11 +78,11 @@
 // Lookup into a map with a missing key.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: mapLookupMissing:[null|exact=JSUInt31]*/
+/*member: mapLookupMissing:[null|exact=JSUInt31|powerset=1]*/
 mapLookupMissing() {
   var map = {0: 1};
   return map
-  /*Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSUInt31])*/
+  /*Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
   [2];
 }
 
@@ -90,11 +90,11 @@
 // Lookup into a map with mixed key types.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: mapLookupMixedKeys:[null|exact=JSUInt31]*/
+/*member: mapLookupMixedKeys:[null|exact=JSUInt31|powerset=1]*/
 mapLookupMixedKeys() {
   var map = {0: 1, '': 2};
   return map
-  /*Map([exact=JsLinkedHashMap], key: Union([exact=JSString], [exact=JSUInt31]), value: [null|exact=JSUInt31])*/
+  /*Map([exact=JsLinkedHashMap|powerset=0], key: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
   [''];
 }
 
@@ -102,11 +102,11 @@
 // Lookup into a map with mixed value types.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: mapLookupMixedValues:Union(null, [exact=JSString], [exact=JSUInt31])*/
+/*member: mapLookupMixedValues:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
 mapLookupMixedValues() {
   var map = {0: 1, 2: ''};
   return map
-  /*Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: Union(null, [exact=JSString], [exact=JSUInt31]))*/
+  /*Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), powerset: 0)*/
   [2];
 }
 
@@ -114,11 +114,11 @@
 // Lookup into a singleton map with String keys.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: dictionaryLookupSingle:Value([exact=JSString], value: "bar")*/
+/*member: dictionaryLookupSingle:Value([exact=JSString|powerset=0], value: "bar", powerset: 0)*/
 dictionaryLookupSingle() {
   var map = {'foo': 'bar'};
   return map
-  /*Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "foo"), value: Value([null|exact=JSString], value: "bar"), map: {foo: Value([exact=JSString], value: "bar")})*/
+  /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "foo", powerset: 0), value: Value([null|exact=JSString|powerset=1], value: "bar", powerset: 1), map: {foo: Value([exact=JSString|powerset=0], value: "bar", powerset: 0)}, powerset: 0)*/
   ['foo'];
 }
 
@@ -126,11 +126,11 @@
 // Lookup into a map with String keys.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: dictionaryLookupMultiple:Value([exact=JSString], value: "boz")*/
+/*member: dictionaryLookupMultiple:Value([exact=JSString|powerset=0], value: "boz", powerset: 0)*/
 dictionaryLookupMultiple() {
   var map = {'foo': 'bar', 'baz': 'boz'};
   return map
-  /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSString], map: {foo: Value([exact=JSString], value: "bar"), baz: Value([exact=JSString], value: "boz")})*/
+  /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSString|powerset=1], map: {foo: Value([exact=JSString|powerset=0], value: "bar", powerset: 0), baz: Value([exact=JSString|powerset=0], value: "boz", powerset: 0)}, powerset: 0)*/
   ['baz'];
 }
 
@@ -138,11 +138,11 @@
 // Lookup into a map with String keys with a missing key.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: dictionaryLookupMissing:[null]*/
+/*member: dictionaryLookupMissing:[null|powerset=1]*/
 dictionaryLookupMissing() {
   var map = {'foo': 'bar', 'baz': 'boz'};
   return map
-  /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSString], map: {foo: Value([exact=JSString], value: "bar"), baz: Value([exact=JSString], value: "boz")})*/
+  /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSString|powerset=1], map: {foo: Value([exact=JSString|powerset=0], value: "bar", powerset: 0), baz: Value([exact=JSString|powerset=0], value: "boz", powerset: 0)}, powerset: 0)*/
   ['unknown'];
 }
 
@@ -150,11 +150,11 @@
 // Lookup into a string-to-int map.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: intDictionaryLookupSingle:[exact=JSUInt31]*/
+/*member: intDictionaryLookupSingle:[exact=JSUInt31|powerset=0]*/
 intDictionaryLookupSingle() {
   var map = {'foo': 0};
   return map
-  /*Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "foo"), value: [null|exact=JSUInt31], map: {foo: [exact=JSUInt31]})*/
+  /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "foo", powerset: 0), value: [null|exact=JSUInt31|powerset=1], map: {foo: [exact=JSUInt31|powerset=0]}, powerset: 0)*/
   ['foo'];
 }
 
@@ -162,32 +162,32 @@
 // Index access on custom class.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  /*member: Class1.[]:[exact=JSUInt31]*/
-  operator [](/*[exact=JSUInt31]*/ index) => index;
+  /*member: Class1.[]:[exact=JSUInt31|powerset=0]*/
+  operator [](/*[exact=JSUInt31|powerset=0]*/ index) => index;
 }
 
-/*member: customIndex:[exact=JSUInt31]*/
-customIndex() => Class1() /*[exact=Class1]*/ [42];
+/*member: customIndex:[exact=JSUInt31|powerset=0]*/
+customIndex() => Class1() /*[exact=Class1|powerset=0]*/ [42];
 
 ////////////////////////////////////////////////////////////////////////////////
 // Index access on custom class through `this`.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
 class Class2 {
-  /*member: Class2.[]:[exact=JSUInt31]*/
-  operator [](/*[exact=JSUInt31]*/ index) => index;
+  /*member: Class2.[]:[exact=JSUInt31|powerset=0]*/
+  operator [](/*[exact=JSUInt31|powerset=0]*/ index) => index;
 
-  /*member: Class2.method:[exact=JSUInt31]*/
-  method() => this /*[exact=Class2]*/ [42];
+  /*member: Class2.method:[exact=JSUInt31|powerset=0]*/
+  method() => this /*[exact=Class2|powerset=0]*/ [42];
 }
 
-/*member: customIndexThis:[exact=JSUInt31]*/
-customIndexThis() => Class2(). /*invoke: [exact=Class2]*/ method();
+/*member: customIndexThis:[exact=JSUInt31|powerset=0]*/
+customIndexThis() => Class2(). /*invoke: [exact=Class2|powerset=0]*/ method();
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   listIndexSingle();
   listIndexMultiple();
diff --git a/pkg/compiler/test/inference/data/index_call.dart b/pkg/compiler/test/inference/data/index_call.dart
index 3f4c53a..09d201e 100644
--- a/pkg/compiler/test/inference/data/index_call.dart
+++ b/pkg/compiler/test/inference/data/index_call.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   listIndexCall();
   listIndexExplicitCall();
@@ -13,78 +13,83 @@
   multiMapListIndexCall();
 }
 
-/*member: listIndexCall:[null|subclass=Object]*/
+/*member: listIndexCall:[null|subclass=Object|powerset=1]*/
 listIndexCall() {
-  var closure = /*[exact=JSUInt31]*/ ({/*[exact=JSUInt31]*/ a}) => a;
+  var closure = /*[exact=JSUInt31|powerset=0]*/
+      ({/*[exact=JSUInt31|powerset=0]*/ a}) => a;
   var a = [closure];
-  return a /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1)*/ [0](
+  return a /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: 1, powerset: 0)*/ [0](
     a: 0,
   );
 }
 
-/*member: listIndexExplicitCall:[null|subclass=Object]*/
+/*member: listIndexExplicitCall:[null|subclass=Object|powerset=1]*/
 listIndexExplicitCall() {
-  var closure = /*[exact=JSUInt31]*/ ({/*[exact=JSUInt31]*/ b}) => b;
+  var closure = /*[exact=JSUInt31|powerset=0]*/
+      ({/*[exact=JSUInt31|powerset=0]*/ b}) => b;
   var a = [closure];
-  return a /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1)*/ [0]
+  return a /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: 1, powerset: 0)*/ [0]
       .call(b: 0);
 }
 
-/*member: multiListIndex:[subclass=JSPositiveInt]*/
+/*member: multiListIndex:[subclass=JSPositiveInt|powerset=0]*/
 multiListIndex() {
   var a = [
     [0],
   ];
   return a
-      /*Container([exact=JSExtendableArray], element: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1), length: 1)*/
+      /*Container([exact=JSExtendableArray|powerset=0], element: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0), length: 1, powerset: 0)*/
       [0]
-      /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+      /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
       [0]
-      . /*invoke: [exact=JSUInt31]*/ abs();
+      . /*invoke: [exact=JSUInt31|powerset=0]*/ abs();
 }
 
-/*member: multiListIndexCall:[null|subclass=Object]*/
+/*member: multiListIndexCall:[null|subclass=Object|powerset=1]*/
 multiListIndexCall() {
-  var closure = /*[exact=JSUInt31]*/ ({/*[exact=JSUInt31]*/ c}) => c;
+  var closure = /*[exact=JSUInt31|powerset=0]*/
+      ({/*[exact=JSUInt31|powerset=0]*/ c}) => c;
   var a = [
     [closure],
   ];
   return a
-  /*Container([exact=JSExtendableArray], element: Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1), length: 1)*/
+  /*Container([exact=JSExtendableArray|powerset=0], element: Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: 1, powerset: 0), length: 1, powerset: 0)*/
   [0]
-  /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1)*/
+  /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: 1, powerset: 0)*/
   [0](c: 0);
 }
 
-/*member: multiMapIndex:[subclass=JSPositiveInt]*/
+/*member: multiMapIndex:[subclass=JSPositiveInt|powerset=0]*/
 multiMapIndex() {
   var a = {
     'a': {'b': 0},
   };
-  return a /*Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "a"), value: Dictionary([null|exact=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|exact=JSUInt31], map: {b: [exact=JSUInt31]}), map: {a: Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|exact=JSUInt31], map: {b: [exact=JSUInt31]})})*/ ['a']!
-      /*Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|exact=JSUInt31], map: {b: [exact=JSUInt31]})*/
+  return a /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "a", powerset: 0), value: Dictionary([null|exact=JsLinkedHashMap|powerset=1], key: Value([exact=JSString|powerset=0], value: "b", powerset: 0), value: [null|exact=JSUInt31|powerset=1], map: {b: [exact=JSUInt31|powerset=0]}, powerset: 1), map: {a: Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "b", powerset: 0), value: [null|exact=JSUInt31|powerset=1], map: {b: [exact=JSUInt31|powerset=0]}, powerset: 0)}, powerset: 0)*/ ['a']!
+      /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "b", powerset: 0), value: [null|exact=JSUInt31|powerset=1], map: {b: [exact=JSUInt31|powerset=0]}, powerset: 0)*/
       ['b']!
-      . /*invoke: [exact=JSUInt31]*/ abs();
+      . /*invoke: [exact=JSUInt31|powerset=0]*/ abs();
 }
 
-/*member: multiMapIndexCall:[null|subclass=Object]*/
+/*member: multiMapIndexCall:[null|subclass=Object|powerset=1]*/
 multiMapIndexCall() {
-  var closure = /*[exact=JSUInt31]*/ ({/*[exact=JSUInt31]*/ d}) => d;
+  var closure = /*[exact=JSUInt31|powerset=0]*/
+      ({/*[exact=JSUInt31|powerset=0]*/ d}) => d;
   var a = {
     'a': {'b': closure},
   };
-  return a /*Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "a"), value: Dictionary([null|exact=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|subclass=Closure], map: {b: [subclass=Closure]}), map: {a: Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|subclass=Closure], map: {b: [subclass=Closure]})})*/ ['a']!
-  /*Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|subclass=Closure], map: {b: [subclass=Closure]})*/
+  return a /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "a", powerset: 0), value: Dictionary([null|exact=JsLinkedHashMap|powerset=1], key: Value([exact=JSString|powerset=0], value: "b", powerset: 0), value: [null|subclass=Closure|powerset=1], map: {b: [subclass=Closure|powerset=0]}, powerset: 1), map: {a: Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "b", powerset: 0), value: [null|subclass=Closure|powerset=1], map: {b: [subclass=Closure|powerset=0]}, powerset: 0)}, powerset: 0)*/ ['a']!
+  /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "b", powerset: 0), value: [null|subclass=Closure|powerset=1], map: {b: [subclass=Closure|powerset=0]}, powerset: 0)*/
   ['b']!(d: 0);
 }
 
-/*member: multiMapListIndexCall:[null|subclass=Object]*/
+/*member: multiMapListIndexCall:[null|subclass=Object|powerset=1]*/
 multiMapListIndexCall() {
-  var closure = /*[exact=JSUInt31]*/ ({/*[exact=JSUInt31]*/ d}) => d;
+  var closure = /*[exact=JSUInt31|powerset=0]*/
+      ({/*[exact=JSUInt31|powerset=0]*/ d}) => d;
   var a = {
     'a': [closure],
   };
-  return a /*Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "a"), value: Container([null|exact=JSExtendableArray], element: [subclass=Closure], length: 1), map: {a: Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1)})*/ ['a']!
-  /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1)*/
+  return a /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "a", powerset: 0), value: Container([null|exact=JSExtendableArray|powerset=1], element: [subclass=Closure|powerset=0], length: 1, powerset: 1), map: {a: Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: 1, powerset: 0)}, powerset: 0)*/ ['a']!
+  /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: 1, powerset: 0)*/
   [0](d: 0);
 }
diff --git a/pkg/compiler/test/inference/data/index_postfix.dart b/pkg/compiler/test/inference/data/index_postfix.dart
index 4c91c51..3202eee 100644
--- a/pkg/compiler/test/inference/data/index_postfix.dart
+++ b/pkg/compiler/test/inference/data/index_postfix.dart
@@ -2,47 +2,50 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   listIndexPostfixIncrement();
   listIndexPostfixDecrement();
   superIndexPostfixIncrement();
 }
 
-/*member: listIndexPostfixIncrement:[subclass=JSPositiveInt]*/
+/*member: listIndexPostfixIncrement:[subclass=JSPositiveInt|powerset=0]*/
 listIndexPostfixIncrement() {
   var list = [0];
   return list
-  /*Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
-  /*update: Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
-  [0] /*invoke: [subclass=JSPositiveInt]*/ ++;
+  /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 1, powerset: 0)*/
+  /*update: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 1, powerset: 0)*/
+  [0] /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++;
 }
 
-/*member: listIndexPostfixDecrement:[subclass=JSInt]*/
+/*member: listIndexPostfixDecrement:[subclass=JSInt|powerset=0]*/
 listIndexPostfixDecrement() {
   var list = [0];
   return list
-  /*Container([exact=JSExtendableArray], element: [subclass=JSInt], length: 1)*/
-  /*update: Container([exact=JSExtendableArray], element: [subclass=JSInt], length: 1)*/
-  [0] /*invoke: [subclass=JSInt]*/ --;
+  /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSInt|powerset=0], length: 1, powerset: 0)*/
+  /*update: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSInt|powerset=0], length: 1, powerset: 0)*/
+  [0] /*invoke: [subclass=JSInt|powerset=0]*/ --;
 }
 
-/*member: Super1.:[exact=Super1]*/
+/*member: Super1.:[exact=Super1|powerset=0]*/
 class Super1 {
-  /*member: Super1.[]:[exact=JSUInt31]*/
-  operator [](/*[exact=JSUInt31]*/ index) => 42;
+  /*member: Super1.[]:[exact=JSUInt31|powerset=0]*/
+  operator [](/*[exact=JSUInt31|powerset=0]*/ index) => 42;
 
-  /*member: Super1.[]=:[null]*/
-  operator []=(/*[exact=JSUInt31]*/ index, /*[subclass=JSUInt32]*/ value) {}
+  /*member: Super1.[]=:[null|powerset=1]*/
+  operator []=(
+    /*[exact=JSUInt31|powerset=0]*/ index,
+    /*[subclass=JSUInt32|powerset=0]*/ value,
+  ) {}
 }
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 extends Super1 {
-  /*member: Class1.method:[exact=JSUInt31]*/
-  method() => super[0] /*invoke: [exact=JSUInt31]*/ ++;
+  /*member: Class1.method:[exact=JSUInt31|powerset=0]*/
+  method() => super[0] /*invoke: [exact=JSUInt31|powerset=0]*/ ++;
 }
 
-/*member: superIndexPostfixIncrement:[null]*/
+/*member: superIndexPostfixIncrement:[null|powerset=1]*/
 superIndexPostfixIncrement() {
-  Class1(). /*invoke: [exact=Class1]*/ method();
+  Class1(). /*invoke: [exact=Class1|powerset=0]*/ method();
 }
diff --git a/pkg/compiler/test/inference/data/index_set.dart b/pkg/compiler/test/inference/data/index_set.dart
index b0427a6..312a6da 100644
--- a/pkg/compiler/test/inference/data/index_set.dart
+++ b/pkg/compiler/test/inference/data/index_set.dart
@@ -6,11 +6,11 @@
 // Update to a singleton list.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: listIndexSetSingle:[exact=JSUInt31]*/
+/*member: listIndexSetSingle:[exact=JSUInt31|powerset=0]*/
 listIndexSetSingle() {
   var list = [0];
   return list
-      /*update: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+      /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
       [0] =
       42;
 }
@@ -19,11 +19,11 @@
 // Update to a list with multiple elements.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: listIndexSetMultiple:[exact=JSUInt31]*/
+/*member: listIndexSetMultiple:[exact=JSUInt31|powerset=0]*/
 listIndexSetMultiple() {
   var list = [0, 1, 2, 3];
   return list
-      /*update: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 4)*/
+      /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 4, powerset: 0)*/
       [2] =
       42;
 }
@@ -32,11 +32,11 @@
 // Update to a list with an out-of-range index.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: listIndexSetBad:[exact=JSUInt31]*/
+/*member: listIndexSetBad:[exact=JSUInt31|powerset=0]*/
 listIndexSetBad() {
   var list = [0, 1];
   return list
-      /*update: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/
+      /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/
       [3] =
       42;
 }
@@ -45,11 +45,11 @@
 // Update to a list with mixed element types.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: listIndexSetMixed:[exact=JSUInt31]*/
+/*member: listIndexSetMixed:[exact=JSUInt31|powerset=0]*/
 listIndexSetMixed() {
   dynamic list = [''];
   return list
-      /*update: Container([exact=JSExtendableArray], element: Union([exact=JSString], [exact=JSUInt31]), length: 1)*/
+      /*update: Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: 1, powerset: 0)*/
       [0] =
       42;
 }
@@ -58,11 +58,11 @@
 // Update to a empty map.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: mapUpdateEmpty:[exact=JSUInt31]*/
+/*member: mapUpdateEmpty:[exact=JSUInt31|powerset=0]*/
 mapUpdateEmpty() {
   var map = {};
   return map
-      /*update: Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSUInt31])*/
+      /*update: Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
       [0] =
       42;
 }
@@ -71,11 +71,11 @@
 // Update to a singleton map.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: mapUpdateSingle:[exact=JSUInt31]*/
+/*member: mapUpdateSingle:[exact=JSUInt31|powerset=0]*/
 mapUpdateSingle() {
   var map = {0: 1};
   return map
-      /*update: Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSUInt31])*/
+      /*update: Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
       [0] =
       42;
 }
@@ -84,11 +84,11 @@
 // Update to a map with multiple entries.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: mapUpdateMultiple:[exact=JSUInt31]*/
+/*member: mapUpdateMultiple:[exact=JSUInt31|powerset=0]*/
 mapUpdateMultiple() {
   var map = {0: 1, 2: 3, 4: 5};
   return map
-      /*update: Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSUInt31])*/
+      /*update: Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
       [2] =
       42;
 }
@@ -97,11 +97,11 @@
 // Update to a map with a missing key.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: mapUpdateMissing:[exact=JSUInt31]*/
+/*member: mapUpdateMissing:[exact=JSUInt31|powerset=0]*/
 mapUpdateMissing() {
   var map = {0: 1};
   return map
-      /*update: Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSUInt31])*/
+      /*update: Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
       [2] =
       42;
 }
@@ -110,11 +110,11 @@
 // Update to a map with mixed key types.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: mapUpdateMixedKeys:[exact=JSUInt31]*/
+/*member: mapUpdateMixedKeys:[exact=JSUInt31|powerset=0]*/
 mapUpdateMixedKeys() {
   dynamic map = {'': 2};
   return map
-      /*update: Map([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSUInt31])*/
+      /*update: Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
       [0] =
       42;
 }
@@ -123,11 +123,11 @@
 // Update to a map with mixed value types.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: mapUpdateMixedValues:[exact=JSUInt31]*/
+/*member: mapUpdateMixedValues:[exact=JSUInt31|powerset=0]*/
 mapUpdateMixedValues() {
   dynamic map = {2: ''};
   return map
-      /*update: Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSString])*/
+      /*update: Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSString|powerset=1], powerset: 0)*/
       [2] =
       42;
 }
@@ -136,11 +136,11 @@
 // Update to an empty map with String keys.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: dictionaryUpdateEmpty:Value([exact=JSString], value: "bar")*/
+/*member: dictionaryUpdateEmpty:Value([exact=JSString|powerset=0], value: "bar", powerset: 0)*/
 dictionaryUpdateEmpty() {
   var map = {};
   return map
-      /*update: Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "foo"), value: Value([null|exact=JSString], value: "bar"), map: {foo: Value([null|exact=JSString], value: "bar")})*/
+      /*update: Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "foo", powerset: 0), value: Value([null|exact=JSString|powerset=1], value: "bar", powerset: 1), map: {foo: Value([null|exact=JSString|powerset=1], value: "bar", powerset: 1)}, powerset: 0)*/
       ['foo'] =
       'bar';
 }
@@ -149,11 +149,11 @@
 // Update to a singleton map with String keys with a new value.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: dictionaryUpdateSingle:Value([exact=JSString], value: "boz")*/
+/*member: dictionaryUpdateSingle:Value([exact=JSString|powerset=0], value: "boz", powerset: 0)*/
 dictionaryUpdateSingle() {
   var map = {'foo': 'bar'};
   return map
-      /*update: Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "foo"), value: [null|exact=JSString], map: {foo: [exact=JSString]})*/
+      /*update: Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "foo", powerset: 0), value: [null|exact=JSString|powerset=1], map: {foo: [exact=JSString|powerset=0]}, powerset: 0)*/
       ['foo'] =
       'boz';
 }
@@ -162,11 +162,11 @@
 // Update to a singleton map with String keys with the same value.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: dictionaryReUpdateSingle:Value([exact=JSString], value: "bar")*/
+/*member: dictionaryReUpdateSingle:Value([exact=JSString|powerset=0], value: "bar", powerset: 0)*/
 dictionaryReUpdateSingle() {
   var map = {'foo': 'bar'};
   return map
-      /*update: Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "foo"), value: Value([null|exact=JSString], value: "bar"), map: {foo: Value([exact=JSString], value: "bar")})*/
+      /*update: Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "foo", powerset: 0), value: Value([null|exact=JSString|powerset=1], value: "bar", powerset: 1), map: {foo: Value([exact=JSString|powerset=0], value: "bar", powerset: 0)}, powerset: 0)*/
       ['foo'] =
       'bar';
 }
@@ -175,11 +175,11 @@
 // Update to a map with String keys.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: dictionaryUpdateMultiple:Value([exact=JSString], value: "boz")*/
+/*member: dictionaryUpdateMultiple:Value([exact=JSString|powerset=0], value: "boz", powerset: 0)*/
 dictionaryUpdateMultiple() {
   var map = {'foo': 'bar'};
   return map
-      /*update: Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSString], map: {foo: Value([exact=JSString], value: "bar"), baz: Value([null|exact=JSString], value: "boz")})*/
+      /*update: Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSString|powerset=1], map: {foo: Value([exact=JSString|powerset=0], value: "bar", powerset: 0), baz: Value([null|exact=JSString|powerset=1], value: "boz", powerset: 1)}, powerset: 0)*/
       ['baz'] =
       'boz';
 }
@@ -188,16 +188,16 @@
 // Update to a string-to-int map.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: intDictionaryUpdateSingle:[exact=JSUInt31]*/
+/*member: intDictionaryUpdateSingle:[exact=JSUInt31|powerset=0]*/
 intDictionaryUpdateSingle() {
   var map = {};
   return map
-      /*update: Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "foo"), value: [null|exact=JSUInt31], map: {foo: [null|exact=JSUInt31]})*/
+      /*update: Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "foo", powerset: 0), value: [null|exact=JSUInt31|powerset=1], map: {foo: [null|exact=JSUInt31|powerset=1]}, powerset: 0)*/
       ['foo'] =
       0;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   listIndexSetSingle();
   listIndexSetMultiple();
diff --git a/pkg/compiler/test/inference/data/init_get.dart b/pkg/compiler/test/inference/data/init_get.dart
index adae6e3..d9c2926 100644
--- a/pkg/compiler/test/inference/data/init_get.dart
+++ b/pkg/compiler/test/inference/data/init_get.dart
@@ -2,10 +2,10 @@
 // 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.
 
-/*member: getter:[exact=JSUInt31]*/
+/*member: getter:[exact=JSUInt31|powerset=0]*/
 get getter => 42;
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   getGetter();
   getGetterInFinalField();
@@ -20,53 +20,53 @@
 // Access a top level getter directly.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: getGetter:[exact=JSUInt31]*/
+/*member: getGetter:[exact=JSUInt31|powerset=0]*/
 getGetter() => getter;
 
 ////////////////////////////////////////////////////////////////////////////////
 // Access a top level getter in a final instance field initializer.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  /*member: Class1.field:[exact=JSUInt31]*/
+  /*member: Class1.field:[exact=JSUInt31|powerset=0]*/
   final field = getter;
 }
 
-/*member: getGetterInFinalField:[exact=JSUInt31]*/
-getGetterInFinalField() => Class1(). /*[exact=Class1]*/ field;
+/*member: getGetterInFinalField:[exact=JSUInt31|powerset=0]*/
+getGetterInFinalField() => Class1(). /*[exact=Class1|powerset=0]*/ field;
 
 ////////////////////////////////////////////////////////////////////////////////
 // Access a top level getter in a non-final instance field initializer.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
 class Class2 {
-  /*member: Class2.field:[exact=JSUInt31]*/
+  /*member: Class2.field:[exact=JSUInt31|powerset=0]*/
   var field = getter;
 }
 
-/*member: getGetterInField:[exact=JSUInt31]*/
-getGetterInField() => Class2(). /*[exact=Class2]*/ field;
+/*member: getGetterInField:[exact=JSUInt31|powerset=0]*/
+getGetterInField() => Class2(). /*[exact=Class2|powerset=0]*/ field;
 
 ////////////////////////////////////////////////////////////////////////////////
 // Access a top level getter in a final top level field initializer.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _field1:[null|exact=JSUInt31]*/
+/*member: _field1:[null|exact=JSUInt31|powerset=1]*/
 final _field1 = getter;
 
-/*member: getGetterInFinalTopLevelField:[null|exact=JSUInt31]*/
+/*member: getGetterInFinalTopLevelField:[null|exact=JSUInt31|powerset=1]*/
 getGetterInFinalTopLevelField() => _field1;
 
 ////////////////////////////////////////////////////////////////////////////////
 // Access a top level getter in a non-final top level field initializer.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _field2:[null|exact=JSUInt31]*/
+/*member: _field2:[null|exact=JSUInt31|powerset=1]*/
 var _field2 = getter;
 
-/*member: getGetterInTopLevelField:[null|exact=JSUInt31]*/
+/*member: getGetterInTopLevelField:[null|exact=JSUInt31|powerset=1]*/
 getGetterInTopLevelField() => _field2;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -74,11 +74,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 abstract class Class3 {
-  /*member: Class3.field:[null|exact=JSUInt31]*/
+  /*member: Class3.field:[null|exact=JSUInt31|powerset=1]*/
   static final field = getter;
 }
 
-/*member: getGetterInFinalStaticField:[null|exact=JSUInt31]*/
+/*member: getGetterInFinalStaticField:[null|exact=JSUInt31|powerset=1]*/
 getGetterInFinalStaticField() => Class3.field;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -86,9 +86,9 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 abstract class Class4 {
-  /*member: Class4.field:[null|exact=JSUInt31]*/
+  /*member: Class4.field:[null|exact=JSUInt31|powerset=1]*/
   static var field = getter;
 }
 
-/*member: getGetterInStaticField:[null|exact=JSUInt31]*/
+/*member: getGetterInStaticField:[null|exact=JSUInt31|powerset=1]*/
 getGetterInStaticField() => Class4.field;
diff --git a/pkg/compiler/test/inference/data/initializer.dart b/pkg/compiler/test/inference/data/initializer.dart
index 8fab986..af17e41 100644
--- a/pkg/compiler/test/inference/data/initializer.dart
+++ b/pkg/compiler/test/inference/data/initializer.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   initializingFormal();
   fieldInitializer();
@@ -15,14 +15,14 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class1 {
-  /*member: Class1.field:[exact=JSUInt31]*/
+  /*member: Class1.field:[exact=JSUInt31|powerset=0]*/
   var field;
 
-  /*member: Class1.:[exact=Class1]*/
-  Class1(this. /*[exact=JSUInt31]*/ field);
+  /*member: Class1.:[exact=Class1|powerset=0]*/
+  Class1(this. /*[exact=JSUInt31|powerset=0]*/ field);
 }
 
-/*member: initializingFormal:[exact=Class1]*/
+/*member: initializingFormal:[exact=Class1|powerset=0]*/
 initializingFormal() => Class1(0);
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -30,14 +30,14 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class2 {
-  /*member: Class2.field:[exact=JSUInt31]*/
+  /*member: Class2.field:[exact=JSUInt31|powerset=0]*/
   var field;
 
-  /*member: Class2.:[exact=Class2]*/
-  Class2(/*[exact=JSUInt31]*/ field) : this.field = field;
+  /*member: Class2.:[exact=Class2|powerset=0]*/
+  Class2(/*[exact=JSUInt31|powerset=0]*/ field) : this.field = field;
 }
 
-/*member: fieldInitializer:[exact=Class2]*/
+/*member: fieldInitializer:[exact=Class2|powerset=0]*/
 fieldInitializer() => Class2(0);
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -45,17 +45,17 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class3 {
-  /*member: Class3.field:[exact=JSUInt31]*/
+  /*member: Class3.field:[exact=JSUInt31|powerset=0]*/
   var field;
 
-  /*member: Class3._:[exact=Class3]*/
-  Class3._(this. /*[exact=JSUInt31]*/ field);
+  /*member: Class3._:[exact=Class3|powerset=0]*/
+  Class3._(this. /*[exact=JSUInt31|powerset=0]*/ field);
 
-  /*member: Class3.:[exact=Class3]*/
-  Class3(/*[exact=JSUInt31]*/ field) : this._(field);
+  /*member: Class3.:[exact=Class3|powerset=0]*/
+  Class3(/*[exact=JSUInt31|powerset=0]*/ field) : this._(field);
 }
 
-/*member: thisInitializer:[exact=Class3]*/
+/*member: thisInitializer:[exact=Class3|powerset=0]*/
 thisInitializer() => Class3(0);
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -63,17 +63,17 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 abstract class SuperClass4 {
-  /*member: SuperClass4.field:[exact=JSUInt31]*/
+  /*member: SuperClass4.field:[exact=JSUInt31|powerset=0]*/
   var field;
 
-  /*member: SuperClass4.:[exact=Class4]*/
-  SuperClass4(this. /*[exact=JSUInt31]*/ field);
+  /*member: SuperClass4.:[exact=Class4|powerset=0]*/
+  SuperClass4(this. /*[exact=JSUInt31|powerset=0]*/ field);
 }
 
 class Class4 extends SuperClass4 {
-  /*member: Class4.:[exact=Class4]*/
-  Class4(/*[exact=JSUInt31]*/ field) : super(field);
+  /*member: Class4.:[exact=Class4|powerset=0]*/
+  Class4(/*[exact=JSUInt31|powerset=0]*/ field) : super(field);
 }
 
-/*member: superInitializer:[exact=Class4]*/
+/*member: superInitializer:[exact=Class4|powerset=0]*/
 superInitializer() => Class4(0);
diff --git a/pkg/compiler/test/inference/data/instance.dart b/pkg/compiler/test/inference/data/instance.dart
index a305aca..13a4cd3 100644
--- a/pkg/compiler/test/inference/data/instance.dart
+++ b/pkg/compiler/test/inference/data/instance.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   thisExact();
   thisSubclass();
@@ -17,104 +17,104 @@
 /// Return `this` of a class with no subclasses.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  /*member: Class1.method:[exact=Class1]*/
+  /*member: Class1.method:[exact=Class1|powerset=0]*/
   method() => this;
 }
 
-/*member: thisExact:[exact=Class1]*/
-thisExact() => Class1(). /*invoke: [exact=Class1]*/ method();
+/*member: thisExact:[exact=Class1|powerset=0]*/
+thisExact() => Class1(). /*invoke: [exact=Class1|powerset=0]*/ method();
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return `this` of a class with an instantiated subclass.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class2a.:[exact=Class2a]*/
+/*member: Class2a.:[exact=Class2a|powerset=0]*/
 class Class2a {
-  /*member: Class2a.method:[subclass=Class2a]*/
+  /*member: Class2a.method:[subclass=Class2a|powerset=0]*/
   method() => this;
 }
 
-/*member: Class2b.:[exact=Class2b]*/
+/*member: Class2b.:[exact=Class2b|powerset=0]*/
 class Class2b extends Class2a {}
 
-/*member: thisSubclass:[subclass=Class2a]*/
+/*member: thisSubclass:[subclass=Class2a|powerset=0]*/
 thisSubclass() {
   Class2b();
-  return Class2a(). /*invoke: [exact=Class2a]*/ method();
+  return Class2a(). /*invoke: [exact=Class2a|powerset=0]*/ method();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return `this` of a class with no instantiated subclasses.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class3a.:[exact=Class3a]*/
+/*member: Class3a.:[exact=Class3a|powerset=0]*/
 class Class3a {
-  /*member: Class3a.method:[exact=Class3a]*/
+  /*member: Class3a.method:[exact=Class3a|powerset=0]*/
   method() => this;
 }
 
 class Class3b extends Class3a {}
 
-/*member: thisSubclassExact:[exact=Class3a]*/
+/*member: thisSubclassExact:[exact=Class3a|powerset=0]*/
 thisSubclassExact() {
-  return Class3a(). /*invoke: [exact=Class3a]*/ method();
+  return Class3a(). /*invoke: [exact=Class3a|powerset=0]*/ method();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return `this` of a class that is mixed into an instantiated class.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class4a.:[exact=Class4a]*/
+/*member: Class4a.:[exact=Class4a|powerset=0]*/
 mixin class Class4a {
-  /*member: Class4a.method:[subtype=Class4a]*/
+  /*member: Class4a.method:[subtype=Class4a|powerset=0]*/
   method() => this;
 }
 
-/*member: Class4b.:[exact=Class4b]*/
+/*member: Class4b.:[exact=Class4b|powerset=0]*/
 class Class4b extends Object with Class4a {}
 
-/*member: thisSubtype:[subtype=Class4a]*/
+/*member: thisSubtype:[subtype=Class4a|powerset=0]*/
 thisSubtype() {
   Class4b();
-  return Class4a(). /*invoke: [exact=Class4a]*/ method();
+  return Class4a(). /*invoke: [exact=Class4a|powerset=0]*/ method();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return `this` of a class that is mixed into an uninstantiated class.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class5a.:[exact=Class5a]*/
+/*member: Class5a.:[exact=Class5a|powerset=0]*/
 mixin class Class5a {
-  /*member: Class5a.method:[exact=Class5a]*/
+  /*member: Class5a.method:[exact=Class5a|powerset=0]*/
   method() => this;
 }
 
 class Class5b extends Object with Class5a {}
 
-/*member: thisSubtypeExact:[exact=Class5a]*/
+/*member: thisSubtypeExact:[exact=Class5a|powerset=0]*/
 thisSubtypeExact() {
-  return Class5a(). /*invoke: [exact=Class5a]*/ method();
+  return Class5a(). /*invoke: [exact=Class5a|powerset=0]*/ method();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return `this` of a mixed in class that is itself instantiated.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class6a.:[exact=Class6a]*/
+/*member: Class6a.:[exact=Class6a|powerset=0]*/
 mixin class Class6a {
-  /*member: Class6a.method:[subtype=Class6a]*/
+  /*member: Class6a.method:[subtype=Class6a|powerset=0]*/
   method() => this;
 }
 
-/*member: Class6b.:[exact=Class6b]*/
+/*member: Class6b.:[exact=Class6b|powerset=0]*/
 class Class6b extends Object with Class6a {}
 
-/*member: thisSubtypeMixedIn:[subtype=Class6a]*/
+/*member: thisSubtypeMixedIn:[subtype=Class6a|powerset=0]*/
 thisSubtypeMixedIn() {
   Class6a();
-  return Class6b(). /*invoke: [exact=Class6b]*/ method();
+  return Class6b(). /*invoke: [exact=Class6b|powerset=0]*/ method();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -122,14 +122,14 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 mixin Class7a {
-  /*member: Class7a.method:[exact=Class7b]*/
+  /*member: Class7a.method:[exact=Class7b|powerset=0]*/
   method() => this;
 }
 
-/*member: Class7b.:[exact=Class7b]*/
+/*member: Class7b.:[exact=Class7b|powerset=0]*/
 class Class7b extends Object with Class7a {}
 
-/*member: thisSubtypeExactMixedIn:[exact=Class7b]*/
+/*member: thisSubtypeExactMixedIn:[exact=Class7b|powerset=0]*/
 thisSubtypeExactMixedIn() {
-  return Class7b(). /*invoke: [exact=Class7b]*/ method();
+  return Class7b(). /*invoke: [exact=Class7b|powerset=0]*/ method();
 }
diff --git a/pkg/compiler/test/inference/data/issue13354.dart b/pkg/compiler/test/inference/data/issue13354.dart
index 5a9049a..3c07a25 100644
--- a/pkg/compiler/test/inference/data/issue13354.dart
+++ b/pkg/compiler/test/inference/data/issue13354.dart
@@ -4,26 +4,26 @@
 
 // Regression test for issue 13354.
 
-/*member: bar:[exact=JSUInt31]*/
+/*member: bar:[exact=JSUInt31|powerset=0]*/
 bar() => 42;
 
-/*member: baz:[subclass=Closure]*/
+/*member: baz:[subclass=Closure|powerset=0]*/
 baz() => bar;
 
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
 class A {
-  /*member: A.foo:[exact=JSUInt31]*/
+  /*member: A.foo:[exact=JSUInt31|powerset=0]*/
   foo() => 42;
 }
 
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
 class B extends A {
-  /*member: B.foo:[subclass=Closure]*/
+  /*member: B.foo:[subclass=Closure|powerset=0]*/
   foo() => super.foo;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   baz();
-  B(). /*invoke: [exact=B]*/ foo();
+  B(). /*invoke: [exact=B|powerset=0]*/ foo();
 }
diff --git a/pkg/compiler/test/inference/data/issue48304.dart b/pkg/compiler/test/inference/data/issue48304.dart
index dc77fc3..376725d 100644
--- a/pkg/compiler/test/inference/data/issue48304.dart
+++ b/pkg/compiler/test/inference/data/issue48304.dart
@@ -6,29 +6,37 @@
   call<T>();
 }
 
-/*member: C.:[exact=C]*/
+/*member: C.:[exact=C|powerset=0]*/
 class C implements B {
-  /*member: C.call:[null]*/
+  /*member: C.call:[null|powerset=1]*/
   call<T>() => print(T);
 }
 
 abstract class A {}
 
 class Wrapper {
-  /*member: Wrapper.:[exact=Wrapper]*/
-  Wrapper(this. /*[exact=C]*/ b, this. /*[exact=C]*/ call);
-  /*member: Wrapper.b:[exact=C]*/
+  /*member: Wrapper.:[exact=Wrapper|powerset=0]*/
+  Wrapper(
+    this. /*[exact=C|powerset=0]*/ b,
+    this. /*[exact=C|powerset=0]*/ call,
+  );
+  /*member: Wrapper.b:[exact=C|powerset=0]*/
   final B b;
-  /*member: Wrapper.call:[exact=C]*/
+  /*member: Wrapper.call:[exact=C|powerset=0]*/
   final B call;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 void main() {
   B b = C();
-  b/*invoke: [exact=C]*/ <A>();
-  Wrapper(b, b).b<A> /*invoke: [exact=Wrapper]*/ ();
-  (Wrapper(b, b). /*[exact=Wrapper]*/ b)<A> /*invoke: [exact=C]*/ ();
-  Wrapper(b, b).call<A> /*invoke: [exact=Wrapper]*/ ();
-  (Wrapper(b, b). /*[exact=Wrapper]*/ call)<A> /*invoke: [exact=C]*/ ();
+  b/*invoke: [exact=C|powerset=0]*/ <A>();
+  Wrapper(b, b).b<A> /*invoke: [exact=Wrapper|powerset=0]*/ ();
+  (Wrapper(
+    b,
+    b,
+  ). /*[exact=Wrapper|powerset=0]*/ b)<A> /*invoke: [exact=C|powerset=0]*/ ();
+  Wrapper(b, b).call<A> /*invoke: [exact=Wrapper|powerset=0]*/ ();
+  (Wrapper(b, b). /*[exact=Wrapper|powerset=0]*/ call)<
+    A
+  > /*invoke: [exact=C|powerset=0]*/ ();
 }
diff --git a/pkg/compiler/test/inference/data/issue_46770.dart b/pkg/compiler/test/inference/data/issue_46770.dart
index 739bd53..deedd96 100644
--- a/pkg/compiler/test/inference/data/issue_46770.dart
+++ b/pkg/compiler/test/inference/data/issue_46770.dart
@@ -6,37 +6,39 @@
   void m1();
 }
 
-/*member: L1.:[exact=L1]*/
+/*member: L1.:[exact=L1|powerset=0]*/
 class L1 implements L {
   @pragma('dart2js:noInline')
-  /*member: L1.m1:[null]*/
+  /*member: L1.m1:[null|powerset=1]*/
   void m1() => print("L1");
 }
 
-/*member: L2.:[exact=L2]*/
+/*member: L2.:[exact=L2|powerset=0]*/
 class L2 implements L {
   @pragma('dart2js:noInline')
-  /*member: L2.m1:[null]*/
+  /*member: L2.m1:[null|powerset=1]*/
   void m1() => print("L2");
 }
 
-/*member: L3.:[exact=L3]*/
+/*member: L3.:[exact=L3|powerset=0]*/
 class L3 implements L {
   @pragma('dart2js:noInline')
-  /*member: L3.m1:[null]*/
+  /*member: L3.m1:[null|powerset=1]*/
   void m1() => print("L3");
 }
 
-/*member: cTrue:[exact=JSBool]*/
+/*member: cTrue:[exact=JSBool|powerset=0]*/
 bool cTrue = confuse(true);
-/*member: value:[exact=JSUInt31]*/
+/*member: value:[exact=JSUInt31|powerset=0]*/
 int value = confuse(1);
 
 @pragma('dart2js:noInline')
-/*member: confuse:Union([exact=JSBool], [exact=JSUInt31])*/
-confuse(/*Union([exact=JSBool], [exact=JSUInt31])*/ x) => x;
+/*member: confuse:Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+confuse(
+  /*Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ x,
+) => x;
 
-/*member: test1:Union(null, [exact=L2], [exact=L3])*/
+/*member: test1:Union(null, [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
 test1() {
   L? sourceInfo = L1();
   switch (value) {
@@ -51,11 +53,12 @@
       return null;
   }
 
-  sourceInfo. /*invoke: Union([exact=L2], [exact=L3])*/ m1();
+  sourceInfo
+      . /*invoke: Union([exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
   return sourceInfo;
 }
 
-/*member: test2:Union([exact=L1], [exact=L2], [exact=L3])*/
+/*member: test2:Union([exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/
 test2() {
   L? sourceInfo = L1();
   switch (value) {
@@ -70,11 +73,12 @@
     // Do nothing
   }
 
-  sourceInfo. /*invoke: Union([exact=L1], [exact=L2], [exact=L3])*/ m1();
+  sourceInfo
+      . /*invoke: Union([exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
   return sourceInfo;
 }
 
-/*member: test3:Union(null, [exact=L2], [exact=L3])*/
+/*member: test3:Union(null, [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
 test3() {
   L? sourceInfo = L1();
   switchTarget:
@@ -90,11 +94,12 @@
       return null;
   }
 
-  sourceInfo. /*invoke: Union([exact=L2], [exact=L3])*/ m1();
+  sourceInfo
+      . /*invoke: Union([exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
   return sourceInfo;
 }
 
-/*member: test4:Union(null, [exact=L1], [exact=L3])*/
+/*member: test4:Union(null, [exact=L1|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
 test4() {
   L sourceInfo = L1();
   switch (value) {
@@ -107,18 +112,20 @@
       break;
     otherCase:
     case 2:
-      sourceInfo. /*invoke: Union([exact=L1], [exact=L2])*/ m1();
+      sourceInfo
+          . /*invoke: Union([exact=L1|powerset=0], [exact=L2|powerset=0], powerset: 0)*/ m1();
       sourceInfo = L1();
       break;
     default:
       return null;
   }
 
-  sourceInfo. /*invoke: Union([exact=L1], [exact=L3])*/ m1();
+  sourceInfo
+      . /*invoke: Union([exact=L1|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
   return sourceInfo;
 }
 
-/*member: test5:Union(null, [exact=L1], [exact=L2], [exact=L3])*/
+/*member: test5:Union(null, [exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
 test5() {
   L sourceInfo = L1();
   switch (value) {
@@ -136,11 +143,12 @@
       return null;
   }
 
-  sourceInfo. /*invoke: Union([exact=L1], [exact=L2], [exact=L3])*/ m1();
+  sourceInfo
+      . /*invoke: Union([exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
   return sourceInfo;
 }
 
-/*member: test6:Union(null, [exact=L2], [exact=L3])*/
+/*member: test6:Union(null, [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
 test6() {
   L sourceInfo = L1();
   switch (value) {
@@ -159,11 +167,12 @@
       return null;
   }
 
-  sourceInfo. /*invoke: Union([exact=L2], [exact=L3])*/ m1();
+  sourceInfo
+      . /*invoke: Union([exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
   return sourceInfo;
 }
 
-/*member: test7:[null|exact=L3]*/
+/*member: test7:[null|exact=L3|powerset=1]*/
 test7() {
   L? sourceInfo = L1();
   switch (value) {
@@ -178,11 +187,11 @@
       return null;
   }
 
-  sourceInfo. /*invoke: [exact=L3]*/ m1();
+  sourceInfo. /*invoke: [exact=L3|powerset=0]*/ m1();
   return sourceInfo;
 }
 
-/*member: test8:[null|exact=L3]*/
+/*member: test8:[null|exact=L3|powerset=1]*/
 test8() {
   L? sourceInfo = L1();
   switch (value) {
@@ -197,11 +206,11 @@
       return null;
   }
 
-  sourceInfo. /*invoke: [exact=L3]*/ m1();
+  sourceInfo. /*invoke: [exact=L3|powerset=0]*/ m1();
   return sourceInfo;
 }
 
-/*member: test9:[null|exact=L3]*/
+/*member: test9:[null|exact=L3|powerset=1]*/
 test9() {
   L? sourceInfo = L1();
   switch (value) {
@@ -216,11 +225,11 @@
       return null;
   }
 
-  sourceInfo. /*invoke: [exact=L3]*/ m1();
+  sourceInfo. /*invoke: [exact=L3|powerset=0]*/ m1();
   return sourceInfo;
 }
 
-/*member: test10:Union(null, [exact=L1], [exact=L2], [exact=L3])*/
+/*member: test10:Union(null, [exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
 test10() {
   L sourceInfo = L1();
   try {
@@ -239,11 +248,12 @@
     // Do nothing
   }
 
-  sourceInfo. /*invoke: Union([exact=L1], [exact=L2], [exact=L3])*/ m1();
+  sourceInfo
+      . /*invoke: Union([exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
   return sourceInfo;
 }
 
-/*member: test11:[null|exact=L3]*/
+/*member: test11:[null|exact=L3|powerset=1]*/
 test11() {
   L sourceInfo = L1();
   switch (value) {
@@ -257,11 +267,11 @@
     default:
       return null;
   }
-  sourceInfo. /*invoke: [exact=L3]*/ m1();
+  sourceInfo. /*invoke: [exact=L3|powerset=0]*/ m1();
   return sourceInfo;
 }
 
-/*member: test12:Union(null, [exact=L1], [exact=L3])*/
+/*member: test12:Union(null, [exact=L1|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
 test12() {
   L? sourceInfo = L1();
   switch (value) {
@@ -276,11 +286,12 @@
     // Do nothing
   }
 
-  sourceInfo. /*invoke: Union([exact=L1], [exact=L3])*/ m1();
+  sourceInfo
+      . /*invoke: Union([exact=L1|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
   return sourceInfo;
 }
 
-/*member: test13:Union(null, [exact=L2], [exact=L3])*/
+/*member: test13:Union(null, [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
 test13() {
   L? sourceInfo = L1();
   switch (value) {
@@ -295,11 +306,12 @@
       sourceInfo = L2();
   }
 
-  sourceInfo. /*invoke: Union([exact=L2], [exact=L3])*/ m1();
+  sourceInfo
+      . /*invoke: Union([exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
   return sourceInfo;
 }
 
-/*member: test14:Union(null, [exact=L1], [exact=L2], [exact=L3])*/
+/*member: test14:Union(null, [exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
 test14() {
   L sourceInfo = L1();
   whileLabel:
@@ -315,14 +327,15 @@
       default:
         return null;
     }
-    sourceInfo. /*invoke: [exact=L3]*/ m1();
+    sourceInfo. /*invoke: [exact=L3|powerset=0]*/ m1();
     break;
   }
-  sourceInfo. /*invoke: Union([exact=L1], [exact=L2], [exact=L3])*/ m1();
+  sourceInfo
+      . /*invoke: Union([exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
   return sourceInfo;
 }
 
-/*member: test15:[null|exact=L3]*/
+/*member: test15:[null|exact=L3|powerset=1]*/
 test15() {
   L sourceInfo = L1();
   switch (value) {
@@ -340,11 +353,11 @@
       return null;
   }
 
-  sourceInfo. /*invoke: [exact=L3]*/ m1();
+  sourceInfo. /*invoke: [exact=L3|powerset=0]*/ m1();
   return sourceInfo;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   test1();
   test2();
diff --git a/pkg/compiler/test/inference/data/issue_48571.dart b/pkg/compiler/test/inference/data/issue_48571.dart
index 4acccc8..0204637 100644
--- a/pkg/compiler/test/inference/data/issue_48571.dart
+++ b/pkg/compiler/test/inference/data/issue_48571.dart
@@ -2,77 +2,77 @@
 // 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.
 
-/*member: Base.:[subclass=Base]*/
+/*member: Base.:[subclass=Base|powerset=0]*/
 abstract class Base {}
 
-/*member: Child1.:[exact=Child1]*/
+/*member: Child1.:[exact=Child1|powerset=0]*/
 class Child1 extends Base {}
 
-/*member: Child2.:[exact=Child2]*/
+/*member: Child2.:[exact=Child2|powerset=0]*/
 class Child2 extends Base {}
 
-/*member: trivial:Value([exact=JSBool], value: true)*/
-bool trivial(/*[exact=JSBool]*/ x) => true;
+/*member: trivial:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
+bool trivial(/*[exact=JSBool|powerset=0]*/ x) => true;
 
-/*member: either:Union([exact=Child1], [exact=Child2])*/
+/*member: either:Union([exact=Child1|powerset=0], [exact=Child2|powerset=0], powerset: 0)*/
 Base either =
     DateTime.now()
-                . /*[exact=DateTime]*/ millisecondsSinceEpoch /*invoke: [subclass=JSInt]*/ >
+                . /*[exact=DateTime|powerset=0]*/ millisecondsSinceEpoch /*invoke: [subclass=JSInt|powerset=0]*/ >
             0
         ? Child2()
         : Child1();
 
-/*member: test1:Union(null, [exact=Child1], [exact=Child2])*/
+/*member: test1:Union(null, [exact=Child1|powerset=0], [exact=Child2|powerset=0], powerset: 1)*/
 test1() {
   Base child = either;
   if (trivial(child is Child1 && true)) return child;
   return null;
 }
 
-/*member: test2:Union(null, [exact=Child1], [exact=Child2])*/
+/*member: test2:Union(null, [exact=Child1|powerset=0], [exact=Child2|powerset=0], powerset: 1)*/
 test2() {
   Base child = either;
   if (child is Child1 || trivial(child is Child1 && true)) return child;
   return null;
 }
 
-/*member: test3:[null|exact=Child2]*/
+/*member: test3:[null|exact=Child2|powerset=1]*/
 test3() {
   Base child = either;
   if (trivial(child is Child1 && true) && child is Child2) return child;
   return null;
 }
 
-/*member: test4:[null|exact=Child2]*/
+/*member: test4:[null|exact=Child2|powerset=1]*/
 test4() {
   Base child = either;
   if (child is Child2 && trivial(child is Child1 && true)) return child;
   return null;
 }
 
-/*member: test5:Union(null, [exact=Child1], [exact=Child2])*/
+/*member: test5:Union(null, [exact=Child1|powerset=0], [exact=Child2|powerset=0], powerset: 1)*/
 test5() {
   Base child = either;
-  if ((child is Child1 && true) /*invoke: [exact=JSBool]*/ == false)
+  if ((child is Child1 && true) /*invoke: [exact=JSBool|powerset=0]*/ == false)
     return child;
   return null;
 }
 
-/*member: test6:Union(null, [exact=Child1], [exact=Child2])*/
+/*member: test6:Union(null, [exact=Child1|powerset=0], [exact=Child2|powerset=0], powerset: 1)*/
 test6() {
   Base child = either;
   if (trivial(child is Child1 ? false : true)) return child;
   return null;
 }
 
-/*member: test7:Union(null, [exact=Child1], [exact=Child2])*/
+/*member: test7:Union(null, [exact=Child1|powerset=0], [exact=Child2|powerset=0], powerset: 1)*/
 test7() {
   Base child = either;
   if (trivial(trivial(child is Child1 && true))) return child;
   return null;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   test1();
   test2();
diff --git a/pkg/compiler/test/inference/data/issue_52170.dart b/pkg/compiler/test/inference/data/issue_52170.dart
index de3870c..8303588 100644
--- a/pkg/compiler/test/inference/data/issue_52170.dart
+++ b/pkg/compiler/test/inference/data/issue_52170.dart
@@ -2,16 +2,16 @@
 // 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.
 
-/*member: getInt:[exact=JSUInt31]*/
+/*member: getInt:[exact=JSUInt31|powerset=0]*/
 int get getInt => 42;
 
-/*member: foo:Union(null, [exact=JSString], [exact=JSUInt31])*/
+/*member: foo:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
 foo() {
   dynamic local = 3;
   for (
     int i = 0;
-    i /*invoke: [subclass=JSPositiveInt]*/ < 10;
-    i /*invoke: [subclass=JSPositiveInt]*/ ++
+    i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ < 10;
+    i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++
   ) {
     switch (getInt) {
       case 42:
@@ -19,14 +19,14 @@
       default:
         local = 'hello';
     }
-    if (i /*invoke: [subclass=JSPositiveInt]*/ > 5) {
+    if (i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ > 5) {
       return local;
     }
   }
   return null;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 void main() {
   foo();
 }
diff --git a/pkg/compiler/test/inference/data/issue_53944.dart b/pkg/compiler/test/inference/data/issue_53944.dart
index ec66229..034787a 100644
--- a/pkg/compiler/test/inference/data/issue_53944.dart
+++ b/pkg/compiler/test/inference/data/issue_53944.dart
@@ -4,51 +4,55 @@
 
 // Make sure first and last selectors properly update types.
 
-/*member: testUnchangedFirst:[null]*/
-void testUnchangedFirst(/*Value([exact=JSBool], value: true)*/ x) {}
+/*member: testUnchangedFirst:[null|powerset=1]*/
+void testUnchangedFirst(
+  /*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ x,
+) {}
 
-/*member: testFirst1:[null]*/
-void testFirst1(/*[exact=JSBool]*/ x) {}
+/*member: testFirst1:[null|powerset=1]*/
+void testFirst1(/*[exact=JSBool|powerset=0]*/ x) {}
 
-/*member: testFirst2:[null]*/
-void testFirst2(/*[exact=JSBool]*/ x) {}
+/*member: testFirst2:[null|powerset=1]*/
+void testFirst2(/*[exact=JSBool|powerset=0]*/ x) {}
 
-/*member: testUnchangedLast:[null]*/
-void testUnchangedLast(/*Value([exact=JSBool], value: true)*/ x) {}
+/*member: testUnchangedLast:[null|powerset=1]*/
+void testUnchangedLast(
+  /*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ x,
+) {}
 
-/*member: testLast1:[null]*/
-void testLast1(/*[exact=JSBool]*/ x) {}
+/*member: testLast1:[null|powerset=1]*/
+void testLast1(/*[exact=JSBool|powerset=0]*/ x) {}
 
-/*member: testLast2:[null]*/
-void testLast2(/*[exact=JSBool]*/ x) {}
+/*member: testLast2:[null|powerset=1]*/
+void testLast2(/*[exact=JSBool|powerset=0]*/ x) {}
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   final List<Object> x = [true, true];
   testFirst1(
-    x. /*Container([exact=JSExtendableArray], element: [exact=JSBool], length: 2)*/ first,
+    x. /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSBool|powerset=0], length: 2, powerset: 0)*/ first,
   );
-  x. /*update: Container([exact=JSExtendableArray], element: [exact=JSBool], length: 2)*/ first =
+  x. /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSBool|powerset=0], length: 2, powerset: 0)*/ first =
       false;
   testFirst2(
-    x. /*Container([exact=JSExtendableArray], element: [exact=JSBool], length: 2)*/ first,
+    x. /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSBool|powerset=0], length: 2, powerset: 0)*/ first,
   );
 
   final List<Object> y = [true, true];
   testLast1(
-    y. /*Container([exact=JSExtendableArray], element: [exact=JSBool], length: 2)*/ first,
+    y. /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSBool|powerset=0], length: 2, powerset: 0)*/ first,
   );
-  y. /*update: Container([exact=JSExtendableArray], element: [exact=JSBool], length: 2)*/ last =
+  y. /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSBool|powerset=0], length: 2, powerset: 0)*/ last =
       false;
   testLast2(
-    y. /*Container([exact=JSExtendableArray], element: [exact=JSBool], length: 2)*/ first,
+    y. /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSBool|powerset=0], length: 2, powerset: 0)*/ first,
   );
 
   final List<Object> z = [true, true];
   testUnchangedFirst(
-    z. /*Container([exact=JSExtendableArray], element: Value([exact=JSBool], value: true), length: 2)*/ first,
+    z. /*Container([exact=JSExtendableArray|powerset=0], element: Value([exact=JSBool|powerset=0], value: true, powerset: 0), length: 2, powerset: 0)*/ first,
   );
   testUnchangedLast(
-    z. /*Container([exact=JSExtendableArray], element: Value([exact=JSBool], value: true), length: 2)*/ last,
+    z. /*Container([exact=JSExtendableArray|powerset=0], element: Value([exact=JSBool|powerset=0], value: true, powerset: 0), length: 2, powerset: 0)*/ last,
   );
 }
diff --git a/pkg/compiler/test/inference/data/js_interop.dart b/pkg/compiler/test/inference/data/js_interop.dart
index ce6a004..355c946 100644
--- a/pkg/compiler/test/inference/data/js_interop.dart
+++ b/pkg/compiler/test/inference/data/js_interop.dart
@@ -7,7 +7,7 @@
 
 import 'package:js/js.dart';
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   anonymousClass();
   jsInteropClass();
@@ -16,37 +16,37 @@
 @JS()
 @anonymous
 class Class1 {
-  /*member: Class1.:[null|subclass=Object]*/
+  /*member: Class1.:[null|subclass=Object|powerset=1]*/
   external factory Class1({
-    /*[exact=JSUInt31]*/ a,
-    /*Value([exact=JSString], value: "")*/ b,
+    /*[exact=JSUInt31|powerset=0]*/ a,
+    /*Value([exact=JSString|powerset=0], value: "", powerset: 0)*/ b,
   });
 }
 
-/*member: anonymousClass:[subclass=LegacyJavaScriptObject]*/
+/*member: anonymousClass:[subclass=LegacyJavaScriptObject|powerset=0]*/
 anonymousClass() => Class1(a: 1, b: '');
 
 @JS()
 class JsInteropClass {
-  /*member: JsInteropClass.:[null|subclass=Object]*/
+  /*member: JsInteropClass.:[null|subclass=Object|powerset=1]*/
   external JsInteropClass();
 
-  /*member: JsInteropClass.getter:[null|subclass=Object]*/
+  /*member: JsInteropClass.getter:[null|subclass=Object|powerset=1]*/
   external int get getter;
 
-  external void set setter(int /*[subclass=JSInt]*/ value);
+  external void set setter(int /*[subclass=JSInt|powerset=0]*/ value);
 
-  /*member: JsInteropClass.method:[null|subclass=Object]*/
-  external int method(int /*[exact=JSUInt31]*/ a);
+  /*member: JsInteropClass.method:[null|subclass=Object|powerset=1]*/
+  external int method(int /*[exact=JSUInt31|powerset=0]*/ a);
 }
 
-/*member: jsInteropClass:[subclass=JSInt]*/
+/*member: jsInteropClass:[subclass=JSInt|powerset=0]*/
 jsInteropClass() {
   JsInteropClass cls = JsInteropClass();
-  return cls. /*update: [exact=JsInteropClass]*/ setter =
-      cls. /*[exact=JsInteropClass]*/ getter /*invoke: [subclass=JSInt]*/ +
-      cls. /*invoke: [exact=JsInteropClass]*/ method(
+  return cls. /*update: [exact=JsInteropClass|powerset=0]*/ setter =
+      cls. /*[exact=JsInteropClass|powerset=0]*/ getter /*invoke: [subclass=JSInt|powerset=0]*/ +
+      cls. /*invoke: [exact=JsInteropClass|powerset=0]*/ method(
         0,
-      ) /*invoke: [subclass=JSInt]*/ +
+      ) /*invoke: [subclass=JSInt|powerset=0]*/ +
       10;
 }
diff --git a/pkg/compiler/test/inference/data/late_field.dart b/pkg/compiler/test/inference/data/late_field.dart
index 2038243..1f85282 100644
--- a/pkg/compiler/test/inference/data/late_field.dart
+++ b/pkg/compiler/test/inference/data/late_field.dart
@@ -4,18 +4,19 @@
 
 import 'package:compiler/src/util/testing.dart';
 
-/*member: Foo.:[exact=Foo]*/
+/*member: Foo.:[exact=Foo|powerset=0]*/
 class Foo {
-  /*member: Foo._#Foo#x#AI:[sentinel|exact=JSUInt31]*/
-  /*member: Foo.x:[exact=JSUInt31]*/
-  late int /*[exact=Foo]*/ /*update: [exact=Foo]*/ x = 42;
+  /*member: Foo._#Foo#x#AI:[sentinel|exact=JSUInt31|powerset=2]*/
+  /*member: Foo.x:[exact=JSUInt31|powerset=0]*/
+  late int /*[exact=Foo|powerset=0]*/ /*update: [exact=Foo|powerset=0]*/ x = 42;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 void main() {
   makeLive(test(Foo()));
 }
 
 @pragma('dart2js:noInline')
-/*member: test:[exact=JSUInt31]*/
-int test(Foo /*[exact=Foo]*/ foo) => foo. /*[exact=Foo]*/ x;
+/*member: test:[exact=JSUInt31|powerset=0]*/
+int test(Foo /*[exact=Foo|powerset=0]*/ foo) =>
+    foo. /*[exact=Foo|powerset=0]*/ x;
diff --git a/pkg/compiler/test/inference/data/list.dart b/pkg/compiler/test/inference/data/list.dart
index e77b765..0eb8a7f 100644
--- a/pkg/compiler/test/inference/data/list.dart
+++ b/pkg/compiler/test/inference/data/list.dart
@@ -4,7 +4,7 @@
 
 import 'dart:typed_data';
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   emptyList();
   nullList();
@@ -28,65 +28,65 @@
   newUint8List();
 }
 
-/*member: emptyList:Container([exact=JSExtendableArray], element: [empty], length: 0)*/
+/*member: emptyList:Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
 emptyList() => [];
 
-/*member: constList:Container([exact=JSUnmodifiableArray], element: [empty], length: 0)*/
+/*member: constList:Container([exact=JSUnmodifiableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
 constList() => const [];
 
-/*member: nullList:Container([exact=JSExtendableArray], element: [null], length: 1)*/
+/*member: nullList:Container([exact=JSExtendableArray|powerset=0], element: [null|powerset=1], length: 1, powerset: 0)*/
 nullList() => [null];
 
-/*member: constNullList:Container([exact=JSUnmodifiableArray], element: [null], length: 1)*/
+/*member: constNullList:Container([exact=JSUnmodifiableArray|powerset=0], element: [null|powerset=1], length: 1, powerset: 0)*/
 constNullList() => const [null];
 
-/*member: intList:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 3)*/
+/*member: intList:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 3, powerset: 0)*/
 intList() => [1, 2, 3];
 
-/*member: newFilledList:Container([exact=JSFixedArray], element: Value([exact=JSString], value: ""), length: 3)*/
+/*member: newFilledList:Container([exact=JSFixedArray|powerset=0], element: Value([exact=JSString|powerset=0], value: "", powerset: 0), length: 3, powerset: 0)*/
 newFilledList() => List.filled(3, '');
 
-/*member: newFilledGrowableList:Container([exact=JSExtendableArray], element: Value([exact=JSString], value: ""), length: 3)*/
+/*member: newFilledGrowableList:Container([exact=JSExtendableArray|powerset=0], element: Value([exact=JSString|powerset=0], value: "", powerset: 0), length: 3, powerset: 0)*/
 newFilledGrowableList() => List.filled(3, '', growable: true);
 
-/*member: newFloat32x4List:[exact=NativeFloat32x4List]*/
+/*member: newFloat32x4List:[exact=NativeFloat32x4List|powerset=0]*/
 newFloat32x4List() => Float32x4List(4);
 
-/*member: newInt32x4List:[exact=NativeInt32x4List]*/
+/*member: newInt32x4List:[exact=NativeInt32x4List|powerset=0]*/
 newInt32x4List() => Int32x4List(5);
 
-/*member: newFloat64x2List:[exact=NativeFloat64x2List]*/
+/*member: newFloat64x2List:[exact=NativeFloat64x2List|powerset=0]*/
 newFloat64x2List() => Float64x2List(6);
 
-/*member: newFloat32List:Container([exact=NativeFloat32List], element: [subclass=JSNumber], length: 7)*/
+/*member: newFloat32List:Container([exact=NativeFloat32List|powerset=0], element: [subclass=JSNumber|powerset=0], length: 7, powerset: 0)*/
 newFloat32List() => Float32List(7);
 
-/*member: newFloat64List:Container([exact=NativeFloat64List], element: [subclass=JSNumber], length: 8)*/
+/*member: newFloat64List:Container([exact=NativeFloat64List|powerset=0], element: [subclass=JSNumber|powerset=0], length: 8, powerset: 0)*/
 newFloat64List() => Float64List(8);
 
-/*member: newInt16List:Container([exact=NativeInt16List], element: [subclass=JSInt], length: 9)*/
+/*member: newInt16List:Container([exact=NativeInt16List|powerset=0], element: [subclass=JSInt|powerset=0], length: 9, powerset: 0)*/
 newInt16List() => Int16List(9);
 
 ////////////////////////////////////////////////////////////////////////////////
 // Create a Int32List using an unchanged non-final top-level field as length.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _field1:[exact=JSUInt31]*/
+/*member: _field1:[exact=JSUInt31|powerset=0]*/
 var _field1 = 10;
 
-/*member: newInt32List:Container([exact=NativeInt32List], element: [subclass=JSInt], length: 10)*/
+/*member: newInt32List:Container([exact=NativeInt32List|powerset=0], element: [subclass=JSInt|powerset=0], length: 10, powerset: 0)*/
 newInt32List() => Int32List(_field1);
 
 ////////////////////////////////////////////////////////////////////////////////
 // Create a Int32List using a changed non-final top-level field as length.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _field1b:[subclass=JSPositiveInt]*/
+/*member: _field1b:[subclass=JSPositiveInt|powerset=0]*/
 var _field1b = 10;
 
-/*member: newInt32List2:Container([exact=NativeInt32List], element: [subclass=JSInt], length: null)*/
+/*member: newInt32List2:Container([exact=NativeInt32List|powerset=0], element: [subclass=JSInt|powerset=0], length: null, powerset: 0)*/
 newInt32List2() {
-  _field1b /*invoke: [subclass=JSPositiveInt]*/ ++;
+  _field1b /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++;
   return Int32List(_field1b);
 }
 
@@ -94,10 +94,10 @@
 // Create a Int8List using a final top-level field as length.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _field2:[exact=JSUInt31]*/
+/*member: _field2:[exact=JSUInt31|powerset=0]*/
 final _field2 = 11;
 
-/*member: newInt8List:Container([exact=NativeInt8List], element: [subclass=JSInt], length: 11)*/
+/*member: newInt8List:Container([exact=NativeInt8List|powerset=0], element: [subclass=JSInt|powerset=0], length: 11, powerset: 0)*/
 newInt8List() => Int8List(_field2);
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -106,21 +106,21 @@
 
 const _field3 = 12;
 
-/*member: newUint16List:Container([exact=NativeUint16List], element: [exact=JSUInt31], length: 12)*/
+/*member: newUint16List:Container([exact=NativeUint16List|powerset=0], element: [exact=JSUInt31|powerset=0], length: 12, powerset: 0)*/
 newUint16List() => Uint16List(_field3);
 
 ////////////////////////////////////////////////////////////////////////////////
 // Create a Uint32List using a parenthesized literal int as length.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: newUint32List:Container([exact=NativeUint32List], element: [subclass=JSUInt32], length: 13)*/
+/*member: newUint32List:Container([exact=NativeUint32List|powerset=0], element: [subclass=JSUInt32|powerset=0], length: 13, powerset: 0)*/
 newUint32List() => Uint32List((13));
 
 ////////////////////////////////////////////////////////////////////////////////
 // Create a Uint8ClampedList using a constant multiplication as length.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: newUint8ClampedList:Container([exact=NativeUint8ClampedList], element: [exact=JSUInt31], length: 14)*/
+/*member: newUint8ClampedList:Container([exact=NativeUint8ClampedList|powerset=0], element: [exact=JSUInt31|powerset=0], length: 14, powerset: 0)*/
 newUint8ClampedList() => Uint8ClampedList(2 * 7);
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -131,5 +131,5 @@
   static const field = 15;
 }
 
-/*member: newUint8List:Container([exact=NativeUint8List], element: [exact=JSUInt31], length: 15)*/
+/*member: newUint8List:Container([exact=NativeUint8List|powerset=0], element: [exact=JSUInt31|powerset=0], length: 15, powerset: 0)*/
 newUint8List() => Uint8List(Class1.field);
diff --git a/pkg/compiler/test/inference/data/list2.dart b/pkg/compiler/test/inference/data/list2.dart
index aa0d4df..5df3d41 100644
--- a/pkg/compiler/test/inference/data/list2.dart
+++ b/pkg/compiler/test/inference/data/list2.dart
@@ -2,10 +2,10 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   boolFlag = !boolFlag;
-  data. /*invoke: Container([exact=JSExtendableArray], element: [subclass=JSInt], length: null)*/ add(
+  data. /*invoke: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSInt|powerset=0], length: null, powerset: 0)*/ add(
     100,
   );
 
@@ -35,109 +35,111 @@
   ];
 }
 
-/*member: boolFlag:[exact=JSBool]*/
+/*member: boolFlag:[exact=JSBool|powerset=0]*/
 bool boolFlag = true;
 
-/*member: data:Container([exact=JSExtendableArray], element: [subclass=JSInt], length: null)*/
+/*member: data:Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSInt|powerset=0], length: null, powerset: 0)*/
 List<int> data = [-1, 1];
 
 // -------- List.empty --------
 
-/*member: listEmptyDefault:Container([exact=JSFixedArray], element: [empty], length: 0)*/
+/*member: listEmptyDefault:Container([exact=JSFixedArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
 get listEmptyDefault => List<int>.empty();
 
-/*member: listEmptyGrowable:Container([exact=JSExtendableArray], element: [empty], length: 0)*/
+/*member: listEmptyGrowable:Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
 get listEmptyGrowable => List<int>.empty(growable: true);
 
-/*member: listEmptyFixed:Container([exact=JSFixedArray], element: [empty], length: 0)*/
+/*member: listEmptyFixed:Container([exact=JSFixedArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
 get listEmptyFixed => List<int>.empty(growable: false);
 
-/*member: listEmptyEither:Container([subclass=JSMutableArray], element: [empty], length: 0)*/
+/*member: listEmptyEither:Container([subclass=JSMutableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
 get listEmptyEither => List<int>.empty(growable: boolFlag);
 
 // -------- List.filled --------
 
-/*member: listFilledDefault:Container([exact=JSFixedArray], element: Value([exact=JSString], value: "x"), length: 5)*/
+/*member: listFilledDefault:Container([exact=JSFixedArray|powerset=0], element: Value([exact=JSString|powerset=0], value: "x", powerset: 0), length: 5, powerset: 0)*/
 get listFilledDefault => List.filled(5, 'x');
 
-/*member: listFilledGrowable:Container([exact=JSExtendableArray], element: Value([exact=JSString], value: "g"), length: 5)*/
+/*member: listFilledGrowable:Container([exact=JSExtendableArray|powerset=0], element: Value([exact=JSString|powerset=0], value: "g", powerset: 0), length: 5, powerset: 0)*/
 get listFilledGrowable => List.filled(5, 'g', growable: true);
 
-/*member: listFilledFixed:Container([exact=JSFixedArray], element: Value([exact=JSString], value: "f"), length: 5)*/
+/*member: listFilledFixed:Container([exact=JSFixedArray|powerset=0], element: Value([exact=JSString|powerset=0], value: "f", powerset: 0), length: 5, powerset: 0)*/
 get listFilledFixed => List.filled(5, 'f', growable: false);
 
-/*member: listFilledEither:Container([subclass=JSMutableArray], element: Value([exact=JSString], value: "e"), length: 5)*/
+/*member: listFilledEither:Container([subclass=JSMutableArray|powerset=0], element: Value([exact=JSString|powerset=0], value: "e", powerset: 0), length: 5, powerset: 0)*/
 get listFilledEither => List.filled(5, 'e', growable: boolFlag);
 
 // -------- List.generate --------
 
-/*member: listGenerateDefault:Container([exact=JSExtendableArray], element: [exact=JSString], length: 8)*/
+/*member: listGenerateDefault:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/
 get listGenerateDefault =>
-    List. /*update: Container([exact=JSExtendableArray], element: [exact=JSString], length: 8)*/ generate(
+    List. /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/ generate(
       8,
       (i) => 'x$i',
     );
 
-/*member: listGenerateGrowable:Container([exact=JSExtendableArray], element: [exact=JSString], length: 8)*/
+/*member: listGenerateGrowable:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/
 get listGenerateGrowable =>
-    List. /*update: Container([exact=JSExtendableArray], element: [exact=JSString], length: 8)*/ generate(
+    List. /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/ generate(
       8,
       (i) => 'g$i',
       growable: true,
     );
 
-/*member: listGenerateFixed:Container([exact=JSFixedArray], element: [exact=JSString], length: 8)*/
+/*member: listGenerateFixed:Container([exact=JSFixedArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/
 get listGenerateFixed =>
-    List. /*update: Container([exact=JSFixedArray], element: [exact=JSString], length: 8)*/ generate(
+    List. /*update: Container([exact=JSFixedArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/ generate(
       8,
       (i) => 'f$i',
       growable: false,
     );
 
-/*member: listGenerateEither:Container([subclass=JSMutableArray], element: [exact=JSString], length: 8)*/
+/*member: listGenerateEither:Container([subclass=JSMutableArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/
 get listGenerateEither => List.generate(
   8,
-  /*[exact=JSString]*/ (/*[subclass=JSPositiveInt]*/ i) => 'e$i',
+  /*[exact=JSString|powerset=0]*/ (/*[subclass=JSPositiveInt|powerset=0]*/ i) =>
+      'e$i',
   growable: boolFlag,
 );
 
-/*member: listGenerateBigClosure:Container([exact=JSExtendableArray], element: [exact=JSString], length: 8)*/
-get listGenerateBigClosure =>
-    List.generate(8, /*[exact=JSString]*/ (/*[subclass=JSPositiveInt]*/ i) {
-      if (i /*invoke: [subclass=JSPositiveInt]*/ == 1) return 'one';
-      if (i /*invoke: [subclass=JSPositiveInt]*/ == 2) return 'two';
-      return '$i';
-    });
+/*member: listGenerateBigClosure:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/
+get listGenerateBigClosure => List.generate(8, /*[exact=JSString|powerset=0]*/ (
+  /*[subclass=JSPositiveInt|powerset=0]*/ i,
+) {
+  if (i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ == 1) return 'one';
+  if (i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ == 2) return 'two';
+  return '$i';
+});
 
 // -------- List.of --------
 
-/*member: listOfDefault:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: listOfDefault:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
 get listOfDefault => List.of(data);
 
-/*member: listOfGrowable:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: listOfGrowable:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
 get listOfGrowable => List.of(data, growable: true);
 
-/*member: listOfFixed:Container([exact=JSFixedArray], element: [null|subclass=Object], length: null)*/
+/*member: listOfFixed:Container([exact=JSFixedArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
 get listOfFixed => List.of(data, growable: false);
 
-/*member: listOfEither:Container([subclass=JSMutableArray], element: [null|subclass=Object], length: null)*/
+/*member: listOfEither:Container([subclass=JSMutableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
 get listOfEither => List.of(data, growable: boolFlag);
 
 // -------- List.from --------
 
-/*member: listFromDefault:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: listFromDefault:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
 get listFromDefault => List.from(data);
 
-/*member: listFromGrowable:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: listFromGrowable:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
 get listFromGrowable => List.from(data, growable: true);
 
-/*member: listFromFixed:Container([exact=JSFixedArray], element: [null|subclass=Object], length: null)*/
+/*member: listFromFixed:Container([exact=JSFixedArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
 get listFromFixed => List.from(data, growable: false);
 
-/*member: listFromEither:Container([subclass=JSMutableArray], element: [null|subclass=Object], length: null)*/
+/*member: listFromEither:Container([subclass=JSMutableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
 get listFromEither => List.from(data, growable: boolFlag);
 
 // -------- List.unmodifiable --------
 
-/*member: listUnmodifiable:[exact=JSUnmodifiableArray]*/
+/*member: listUnmodifiable:[exact=JSUnmodifiableArray|powerset=0]*/
 get listUnmodifiable => List.unmodifiable(data);
diff --git a/pkg/compiler/test/inference/data/list_huge.dart b/pkg/compiler/test/inference/data/list_huge.dart
index 574748a..121cc94 100644
--- a/pkg/compiler/test/inference/data/list_huge.dart
+++ b/pkg/compiler/test/inference/data/list_huge.dart
@@ -4,7 +4,7 @@
 
 // Test for Container type for Lists with huge or negative sizes.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   hugeList1();
   hugeList2();
@@ -12,35 +12,35 @@
   hugeList4();
 }
 
-/*member: thing:[null]*/
+/*member: thing:[null|powerset=1]*/
 dynamic thing;
 
-/*member: _huge1:[subclass=JSPositiveInt]*/
+/*member: _huge1:[subclass=JSPositiveInt|powerset=0]*/
 final _huge1 = 5000000000;
 
-/*member: hugeList1:Container([exact=JSFixedArray], element: [null], length: null)*/
+/*member: hugeList1:Container([exact=JSFixedArray|powerset=0], element: [null|powerset=1], length: null, powerset: 0)*/
 hugeList1() => List.filled(_huge1, thing);
 
 const _huge2a = 10000000000 * 10000000000;
 
-/*member: _huge2b:[subclass=JSPositiveInt]*/
+/*member: _huge2b:[subclass=JSPositiveInt|powerset=0]*/
 final _huge2b = _huge2a;
 
-/*member: hugeList2:Container([exact=JSFixedArray], element: [null], length: null)*/
+/*member: hugeList2:Container([exact=JSFixedArray|powerset=0], element: [null|powerset=1], length: null, powerset: 0)*/
 hugeList2() => List.filled(_huge2b, thing);
 
 const _huge3a = -10000000;
 
-/*member: _huge3b:[subclass=JSInt]*/
+/*member: _huge3b:[subclass=JSInt|powerset=0]*/
 final _huge3b = _huge3a;
 
-/*member: hugeList3:Container([exact=JSFixedArray], element: [null], length: null)*/
+/*member: hugeList3:Container([exact=JSFixedArray|powerset=0], element: [null|powerset=1], length: null, powerset: 0)*/
 hugeList3() => List.filled(_huge3b, thing);
 
 // 'Small' limits are still tracked.
 
-/*member: _huge4:[exact=JSUInt31]*/
+/*member: _huge4:[exact=JSUInt31|powerset=0]*/
 final _huge4 = 10000000;
 
-/*member: hugeList4:Container([exact=JSFixedArray], element: [null], length: 10000000)*/
+/*member: hugeList4:Container([exact=JSFixedArray|powerset=0], element: [null|powerset=1], length: 10000000, powerset: 0)*/
 hugeList4() => List.filled(_huge4, thing);
diff --git a/pkg/compiler/test/inference/data/list_js.dart b/pkg/compiler/test/inference/data/list_js.dart
index 6d6f634..eac453b 100644
--- a/pkg/compiler/test/inference/data/list_js.dart
+++ b/pkg/compiler/test/inference/data/list_js.dart
@@ -7,7 +7,7 @@
 /// ignore: IMPORT_INTERNAL_LIBRARY
 import 'dart:_foreign_helper' show JS;
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   test1();
   test2();
@@ -15,50 +15,50 @@
   test4();
 }
 
-/*member: test1:[null]*/
+/*member: test1:[null|powerset=1]*/
 test1() {
   var list = [42];
   JS('', '#', list); // '#' is by default a no-op.
   witness1(list);
 }
 
-/*member: witness1:[null]*/
+/*member: witness1:[null|powerset=1]*/
 witness1(
-  /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ x,
+  /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ x,
 ) {}
 
-/*member: test2:[null]*/
+/*member: test2:[null|powerset=1]*/
 test2() {
   var list = [42];
   JS('effects:all;depends:all', '#', list);
   witness2(list);
 }
 
-/*member: witness2:[null]*/
+/*member: witness2:[null|powerset=1]*/
 witness2(
-  /*Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/ x,
+  /*Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/ x,
 ) {}
 
-/*member: test3:[null]*/
+/*member: test3:[null|powerset=1]*/
 test3() {
   var list = [42];
   JS('', '#.slice(0)', list);
   witness3(list);
 }
 
-/*member: witness3:[null]*/
+/*member: witness3:[null|powerset=1]*/
 witness3(
-  /*Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/ x,
+  /*Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/ x,
 ) {}
 
-/*member: test4:[null]*/
+/*member: test4:[null|powerset=1]*/
 test4() {
   var list = [42];
   JS('effects:none;depends:all', '#.slice(0)', list);
   witness4(list);
 }
 
-/*member: witness4:[null]*/
+/*member: witness4:[null|powerset=1]*/
 witness4(
-  /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ x,
+  /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ x,
 ) {}
diff --git a/pkg/compiler/test/inference/data/list_tracer2.dart b/pkg/compiler/test/inference/data/list_tracer2.dart
index 2736f0b..4509066 100644
--- a/pkg/compiler/test/inference/data/list_tracer2.dart
+++ b/pkg/compiler/test/inference/data/list_tracer2.dart
@@ -5,14 +5,14 @@
 // We used to always nullify the element type of a list we are tracing in
 // the presence of a fixed length list constructor call.
 
-/*member: myList:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: myList:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
 var myList = [42];
 
-/*member: main:[exact=JSUInt31]*/
+/*member: main:[exact=JSUInt31|powerset=0]*/
 main() {
   /// ignore: unused_local_variable
   var a = List.filled(42, null);
   return myList
-  /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+  /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
   [0];
 }
diff --git a/pkg/compiler/test/inference/data/list_tracer3.dart b/pkg/compiler/test/inference/data/list_tracer3.dart
index d324890..eaddcd2 100644
--- a/pkg/compiler/test/inference/data/list_tracer3.dart
+++ b/pkg/compiler/test/inference/data/list_tracer3.dart
@@ -5,20 +5,21 @@
 // We used to always nullify the element type of a list we are tracing in
 // the presence of a fixed length list constructor call.
 
-/*member: myList:Container([exact=JSExtendableArray], element: Union([exact=JSString], [subclass=JSNumber]), length: null)*/
+/*member: myList:Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSString|powerset=0], [subclass=JSNumber|powerset=0], powerset: 0), length: null, powerset: 0)*/
 var myList = [];
 
-/*member: otherList:Container([exact=JSExtendableArray], element: Union([exact=JSString], [exact=JSUInt31]), length: 2)*/
+/*member: otherList:Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: 2, powerset: 0)*/
 var otherList = ['foo', 42];
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   dynamic a =
       otherList
-      /*Container([exact=JSExtendableArray], element: Union([exact=JSString], [exact=JSUInt31]), length: 2)*/
+      /*Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: 2, powerset: 0)*/
       [0];
-  a /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ += 54;
+  a /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ +=
+      54;
   myList.
-  /*invoke: Container([exact=JSExtendableArray], element: Union([exact=JSString], [subclass=JSNumber]), length: null)*/
+  /*invoke: Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSString|powerset=0], [subclass=JSNumber|powerset=0], powerset: 0), length: null, powerset: 0)*/
   add(a);
 }
diff --git a/pkg/compiler/test/inference/data/list_tracer_typed_data_length.dart b/pkg/compiler/test/inference/data/list_tracer_typed_data_length.dart
index 4f5d20b..9741b1f 100644
--- a/pkg/compiler/test/inference/data/list_tracer_typed_data_length.dart
+++ b/pkg/compiler/test/inference/data/list_tracer_typed_data_length.dart
@@ -7,22 +7,22 @@
 // TODO(johnniwinther): Fix inference for spec mode. List elements should not be
 // [empty].
 
-/*member: myList:Container([exact=NativeFloat32List], element: [subclass=JSNumber], length: 42)*/
+/*member: myList:Container([exact=NativeFloat32List|powerset=0], element: [subclass=JSNumber|powerset=0], length: 42, powerset: 0)*/
 var myList = Float32List(42);
 
-/*member: myOtherList:Container([exact=NativeUint8List], element: [exact=JSUInt31], length: 32)*/
+/*member: myOtherList:Container([exact=NativeUint8List|powerset=0], element: [exact=JSUInt31|powerset=0], length: 32, powerset: 0)*/
 var myOtherList = Uint8List(32);
 
-/*member: main:[subclass=JSNumber]*/
+/*member: main:[subclass=JSNumber|powerset=0]*/
 main() {
   // ignore: unused_local_variable
   var a = Float32List(9);
   return myList
-      /*Container([exact=NativeFloat32List], element: [subclass=JSNumber], length: 42)*/
+      /*Container([exact=NativeFloat32List|powerset=0], element: [subclass=JSNumber|powerset=0], length: 42, powerset: 0)*/
       [0]
-      /*invoke: [subclass=JSNumber]*/
+      /*invoke: [subclass=JSNumber|powerset=0]*/
       +
       myOtherList
-      /*Container([exact=NativeUint8List], element: [exact=JSUInt31], length: 32)*/
+      /*Container([exact=NativeUint8List|powerset=0], element: [exact=JSUInt31|powerset=0], length: 32, powerset: 0)*/
       [0];
 }
diff --git a/pkg/compiler/test/inference/data/local_functions.dart b/pkg/compiler/test/inference/data/local_functions.dart
index ce22d73..630866d 100644
--- a/pkg/compiler/test/inference/data/local_functions.dart
+++ b/pkg/compiler/test/inference/data/local_functions.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   namedLocalFunctionInvoke();
   unnamedLocalFunctionInvoke();
@@ -21,9 +21,9 @@
 // Invocation of a named local function.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: namedLocalFunctionInvoke:[exact=JSUInt31]*/
+/*member: namedLocalFunctionInvoke:[exact=JSUInt31|powerset=0]*/
 namedLocalFunctionInvoke() {
-  /*[exact=JSUInt31]*/
+  /*[exact=JSUInt31|powerset=0]*/
   local() => 0;
   return local();
 }
@@ -32,9 +32,9 @@
 // Invocation of an unnamed local function.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: unnamedLocalFunctionInvoke:[subclass=JSInt]*/
+/*member: unnamedLocalFunctionInvoke:[subclass=JSInt|powerset=0]*/
 unnamedLocalFunctionInvoke() {
-  var local = /*[exact=JSUInt31]*/ () => 0;
+  var local = /*[exact=JSUInt31|powerset=0]*/ () => 0;
   return local();
 }
 
@@ -42,9 +42,9 @@
 // Access of a named local function.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: namedLocalFunctionGet:[subclass=Closure]*/
+/*member: namedLocalFunctionGet:[subclass=Closure|powerset=0]*/
 namedLocalFunctionGet() {
-  /*[exact=JSUInt31]*/
+  /*[exact=JSUInt31|powerset=0]*/
   local() => 0;
   return local;
 }
@@ -53,9 +53,9 @@
 // Call a named local function recursively.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: recursiveLocalFunction:[subclass=Closure]*/
+/*member: recursiveLocalFunction:[subclass=Closure|powerset=0]*/
 recursiveLocalFunction() {
-  /*[subclass=Closure]*/
+  /*[subclass=Closure|powerset=0]*/
   local() => local;
   return local();
 }
@@ -64,11 +64,11 @@
 // Call a named local function with a missing argument.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: namedLocalFunctionInvokeMissingArgument:[null|subclass=Object]*/
+/*member: namedLocalFunctionInvokeMissingArgument:[null|subclass=Object|powerset=1]*/
 @pragma('dart2js:disableFinal')
 namedLocalFunctionInvokeMissingArgument() {
-  /*[exact=JSUInt31]*/
-  local(/*[empty]*/ x) => 0;
+  /*[exact=JSUInt31|powerset=0]*/
+  local(/*[empty|powerset=0]*/ x) => 0;
   dynamic b = local;
   return b();
 }
@@ -77,10 +77,10 @@
 // Call a named local function with an extra argument.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: namedLocalFunctionInvokeExtraArgument:[null|subclass=Object]*/
+/*member: namedLocalFunctionInvokeExtraArgument:[null|subclass=Object|powerset=1]*/
 @pragma('dart2js:disableFinal')
 namedLocalFunctionInvokeExtraArgument() {
-  /*[exact=JSUInt31]*/
+  /*[exact=JSUInt31|powerset=0]*/
   local() => 0;
   dynamic b = local;
   return b(0);
@@ -90,10 +90,10 @@
 // Call a named local function with an extra named argument.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: namedLocalFunctionInvokeExtraNamedArgument:[null|subclass=Object]*/
+/*member: namedLocalFunctionInvokeExtraNamedArgument:[null|subclass=Object|powerset=1]*/
 @pragma('dart2js:disableFinal')
 namedLocalFunctionInvokeExtraNamedArgument() {
-  /*[exact=JSUInt31]*/
+  /*[exact=JSUInt31|powerset=0]*/
   local() => 0;
   dynamic b = local;
   return b(a: 0);
@@ -103,40 +103,40 @@
 // Implicit .call on a local variable.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: closureToString:[exact=JSString]*/
+/*member: closureToString:[exact=JSString|powerset=0]*/
 closureToString() {
-  var local = /*[null]*/ () {};
+  var local = /*[null|powerset=1]*/ () {};
   local();
-  return local. /*invoke: [subclass=Closure]*/ toString();
+  return local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Explicit .call on a local variable.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: closureCallToString:[exact=JSString]*/
+/*member: closureCallToString:[exact=JSString|powerset=0]*/
 closureCallToString() {
-  var local = /*[null]*/ () {};
+  var local = /*[null|powerset=1]*/ () {};
   local.call();
-  return local. /*invoke: [subclass=Closure]*/ toString();
+  return local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Operator == on the result of a parameter invocation.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _callCompare:[subclass=Closure]*/
-_callCompare(int /*[subclass=Closure]*/ compare({a, b})) {
-  compare(a: 0, b: 1) /*invoke: [subclass=JSInt]*/ == 0;
+/*member: _callCompare:[subclass=Closure|powerset=0]*/
+_callCompare(int /*[subclass=Closure|powerset=0]*/ compare({a, b})) {
+  compare(a: 0, b: 1) /*invoke: [subclass=JSInt|powerset=0]*/ == 0;
   return compare;
 }
 
-/*member: callCompare:[null]*/
+/*member: callCompare:[null|powerset=1]*/
 callCompare() {
   _callCompare(
-    /*[subclass=JSInt]*/
-    ({/*[exact=JSUInt31]*/ a, /*[exact=JSUInt31]*/ b}) =>
-        a /*invoke: [exact=JSUInt31]*/ - b,
+    /*[subclass=JSInt|powerset=0]*/
+    ({/*[exact=JSUInt31|powerset=0]*/ a, /*[exact=JSUInt31|powerset=0]*/ b}) =>
+        a /*invoke: [exact=JSUInt31|powerset=0]*/ - b,
   );
 }
 
@@ -144,19 +144,21 @@
 // Invocation on the result of a parameter invocation.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  /*member: Class1.method1:[null]*/
+  /*member: Class1.method1:[null|powerset=1]*/
   method1() {}
 }
 
-/*member: _callClosure:[subclass=Closure]*/
-_callClosure(/*[subclass=Closure]*/ f({c})) {
+/*member: _callClosure:[subclass=Closure|powerset=0]*/
+_callClosure(/*[subclass=Closure|powerset=0]*/ f({c})) {
   f(c: Class1()).method1();
   return f;
 }
 
-/*member: callClosure:[null]*/
+/*member: callClosure:[null|powerset=1]*/
 callClosure() {
-  _callClosure(/*[exact=Class1]*/ ({/*[exact=Class1]*/ c}) => c);
+  _callClosure(
+    /*[exact=Class1|powerset=0]*/ ({/*[exact=Class1|powerset=0]*/ c}) => c,
+  );
 }
diff --git a/pkg/compiler/test/inference/data/local_functions_call.dart b/pkg/compiler/test/inference/data/local_functions_call.dart
index 42cc5b10..43f5db4 100644
--- a/pkg/compiler/test/inference/data/local_functions_call.dart
+++ b/pkg/compiler/test/inference/data/local_functions_call.dart
@@ -6,7 +6,7 @@
 // with a different expectancy because the closed world contains less '.call'
 // methods.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   closureCallToString();
 }
@@ -15,12 +15,12 @@
 // Explicit .call on a local variable.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: closureCallToString:[exact=JSString]*/
+/*member: closureCallToString:[exact=JSString|powerset=0]*/
 closureCallToString() {
-  var local = /*[null]*/ () {};
+  var local = /*[null|powerset=1]*/ () {};
   local.call();
   return local
       .
-      /*invoke: [subclass=Closure]*/
+      /*invoke: [subclass=Closure|powerset=0]*/
       toString();
 }
diff --git a/pkg/compiler/test/inference/data/locals.dart b/pkg/compiler/test/inference/data/locals.dart
index b6f096d..5cd7f7d 100644
--- a/pkg/compiler/test/inference/data/locals.dart
+++ b/pkg/compiler/test/inference/data/locals.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   uninitializedLocal();
   initializedLocal();
@@ -15,63 +15,63 @@
   complexAssignmentLocal();
 }
 
-/*member: uninitializedLocal:[null]*/
+/*member: uninitializedLocal:[null|powerset=1]*/
 uninitializedLocal() {
   var local;
   return local;
 }
 
-/*member: initializedLocal:[exact=JSUInt31]*/
+/*member: initializedLocal:[exact=JSUInt31|powerset=0]*/
 initializedLocal() {
   var local = 0;
   return local;
 }
 
-/*member: updatedLocal:[exact=JSUInt31]*/
+/*member: updatedLocal:[exact=JSUInt31|powerset=0]*/
 updatedLocal() {
   var local2;
   local2 = 0;
   return local2;
 }
 
-/*member: invokeLocal:[null]*/
+/*member: invokeLocal:[null|powerset=1]*/
 invokeLocal() {
   var local2 = 0;
-  local2. /*invoke: [exact=JSUInt31]*/ toString();
+  local2. /*invoke: [exact=JSUInt31|powerset=0]*/ toString();
   return null;
 }
 
-/*member: postfixLocal:[null]*/
+/*member: postfixLocal:[null|powerset=1]*/
 postfixLocal() {
   // ignore: UNUSED_LOCAL_VARIABLE
   var local2 = 0;
-  local2 /*invoke: [exact=JSUInt31]*/ ++;
+  local2 /*invoke: [exact=JSUInt31|powerset=0]*/ ++;
   return null;
 }
 
-/*member: postfixLocalUsed:[exact=JSUInt31]*/
+/*member: postfixLocalUsed:[exact=JSUInt31|powerset=0]*/
 postfixLocalUsed() {
   var local2 = 0;
-  return local2 /*invoke: [exact=JSUInt31]*/ ++;
+  return local2 /*invoke: [exact=JSUInt31|powerset=0]*/ ++;
 }
 
-/*member: prefixLocal:[null]*/
+/*member: prefixLocal:[null|powerset=1]*/
 prefixLocal() {
   // ignore: UNUSED_LOCAL_VARIABLE
   var local2 = 0;
-  /*invoke: [exact=JSUInt31]*/
+  /*invoke: [exact=JSUInt31|powerset=0]*/
   ++local2;
   return null;
 }
 
-/*member: prefixLocalUsed:[subclass=JSUInt32]*/
+/*member: prefixLocalUsed:[subclass=JSUInt32|powerset=0]*/
 prefixLocalUsed() {
   var local2 = 0;
-  return /*invoke: [exact=JSUInt31]*/ ++local2;
+  return /*invoke: [exact=JSUInt31|powerset=0]*/ ++local2;
 }
 
-/*member: complexAssignmentLocal:[subclass=JSUInt32]*/
+/*member: complexAssignmentLocal:[subclass=JSUInt32|powerset=0]*/
 complexAssignmentLocal() {
   var local2 = 0;
-  return local2 /*invoke: [exact=JSUInt31]*/ += 42;
+  return local2 /*invoke: [exact=JSUInt31|powerset=0]*/ += 42;
 }
diff --git a/pkg/compiler/test/inference/data/locals_trust.dart b/pkg/compiler/test/inference/data/locals_trust.dart
index 86f3c0c..2a77ae8 100644
--- a/pkg/compiler/test/inference/data/locals_trust.dart
+++ b/pkg/compiler/test/inference/data/locals_trust.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   trustLocals();
   trustFunctions();
@@ -13,15 +13,17 @@
 // Test that we trust the explicit type of a local.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _trustLocals:[exact=JSBool]*/
-_trustLocals(int Function(int)? /*[null|subclass=Closure]*/ f) {
+/*member: _trustLocals:[exact=JSBool|powerset=0]*/
+_trustLocals(int Function(int)? /*[null|subclass=Closure|powerset=1]*/ f) {
   int c = f!(0);
-  return c /*invoke: [subclass=JSInt]*/ == 0;
+  return c /*invoke: [subclass=JSInt|powerset=0]*/ == 0;
 }
 
-/*member: trustLocals:[null]*/
+/*member: trustLocals:[null|powerset=1]*/
 trustLocals() {
-  _trustLocals(/*[exact=JSUInt31]*/ (/*[exact=JSUInt31]*/ o) => o);
+  _trustLocals(
+    /*[exact=JSUInt31|powerset=0]*/ (/*[exact=JSUInt31|powerset=0]*/ o) => o,
+  );
   _trustLocals(null);
 }
 
@@ -29,16 +31,18 @@
 // Test that we infer the type of a dynamic local from the type of the function.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _trustFunctions:[exact=JSBool]*/
-_trustFunctions(int Function(int)? /*[null|subclass=Closure]*/ f) {
+/*member: _trustFunctions:[exact=JSBool|powerset=0]*/
+_trustFunctions(int Function(int)? /*[null|subclass=Closure|powerset=1]*/ f) {
   dynamic c = f!(0);
   c = f(0);
-  return c /*invoke: [subclass=JSInt]*/ == 0;
+  return c /*invoke: [subclass=JSInt|powerset=0]*/ == 0;
 }
 
-/*member: trustFunctions:[null]*/
+/*member: trustFunctions:[null|powerset=1]*/
 trustFunctions() {
-  _trustFunctions(/*[exact=JSUInt31]*/ (/*[exact=JSUInt31]*/ o) => o);
+  _trustFunctions(
+    /*[exact=JSUInt31|powerset=0]*/ (/*[exact=JSUInt31|powerset=0]*/ o) => o,
+  );
   _trustFunctions(null);
 }
 
@@ -46,14 +50,18 @@
 // Test that we infer the type of a 'var' local from the type of the function.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _inferFromFunctions:[exact=JSBool]*/
-_inferFromFunctions(int Function(int)? /*[null|subclass=Closure]*/ f) {
+/*member: _inferFromFunctions:[exact=JSBool|powerset=0]*/
+_inferFromFunctions(
+  int Function(int)? /*[null|subclass=Closure|powerset=1]*/ f,
+) {
   var c = f!(0);
-  return c /*invoke: [subclass=JSInt]*/ == 0;
+  return c /*invoke: [subclass=JSInt|powerset=0]*/ == 0;
 }
 
-/*member: inferFromFunctions:[null]*/
+/*member: inferFromFunctions:[null|powerset=1]*/
 inferFromFunctions() {
-  _inferFromFunctions(/*[exact=JSUInt31]*/ (/*[exact=JSUInt31]*/ o) => o);
+  _inferFromFunctions(
+    /*[exact=JSUInt31|powerset=0]*/ (/*[exact=JSUInt31|powerset=0]*/ o) => o,
+  );
   _inferFromFunctions(null);
 }
diff --git a/pkg/compiler/test/inference/data/logical.dart b/pkg/compiler/test/inference/data/logical.dart
index 556f12b..31eead1 100644
--- a/pkg/compiler/test/inference/data/logical.dart
+++ b/pkg/compiler/test/inference/data/logical.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   returnTrue();
   returnFalse();
@@ -43,24 +43,24 @@
 /// Return `true`.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: returnTrue:Value([exact=JSBool], value: true)*/
+/*member: returnTrue:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
 returnTrue() => true;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return `false`.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: returnFalse:Value([exact=JSBool], value: false)*/
+/*member: returnFalse:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
 returnFalse() => false;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return negation of a boolean value.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _returnNot:[exact=JSBool]*/
-_returnNot(/*[exact=JSBool]*/ o) => !o;
+/*member: _returnNot:[exact=JSBool|powerset=0]*/
+_returnNot(/*[exact=JSBool|powerset=0]*/ o) => !o;
 
-/*member: returnNot:[null]*/
+/*member: returnNot:[null|powerset=1]*/
 returnNot() {
   _returnNot(true);
   _returnNot(false);
@@ -70,30 +70,30 @@
 /// Return negation of `false`.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: returnNotFalse:Value([exact=JSBool], value: true)*/
+/*member: returnNotFalse:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
 returnNotFalse() => !false;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return negation of `true`.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: returnNotTrue:Value([exact=JSBool], value: false)*/
+/*member: returnNotTrue:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
 returnNotTrue() => !true;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return negation of `null`.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: returnNotOfNull:[exact=JSBool]*/
+/*member: returnNotOfNull:[exact=JSBool|powerset=0]*/
 returnNotOfNull() => !(null as dynamic);
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return value of an is test.
 ////////////////////////////////////////////////////////////////////////////////
-/*member: _returnIs:[exact=JSBool]*/
-_returnIs(/*[null|exact=JSUInt31]*/ o) => o is int;
+/*member: _returnIs:[exact=JSBool|powerset=0]*/
+_returnIs(/*[null|exact=JSUInt31|powerset=1]*/ o) => o is int;
 
-/*member: returnIs:[null]*/
+/*member: returnIs:[null|powerset=1]*/
 returnIs() {
   _returnIs(null);
   _returnIs(1);
@@ -102,22 +102,22 @@
 ////////////////////////////////////////////////////////////////////////////////
 /// Return value of an is `int` test known to be true.
 ////////////////////////////////////////////////////////////////////////////////
-/*member: returnIsOneInt:Value([exact=JSBool], value: true)*/
+/*member: returnIsOneInt:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
 returnIsOneInt() => 1 is int;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return value of an is `int` test known to be false.
 ////////////////////////////////////////////////////////////////////////////////
-/*member: returnIsNullInt:Value([exact=JSBool], value: false)*/
+/*member: returnIsNullInt:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
 returnIsNullInt() => null is int;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return value of a negated is test.
 ////////////////////////////////////////////////////////////////////////////////
-/*member: _returnNotIs:[exact=JSBool]*/
-_returnNotIs(/*[null|exact=JSUInt31]*/ o) => o is! int;
+/*member: _returnNotIs:[exact=JSBool|powerset=0]*/
+_returnNotIs(/*[null|exact=JSUInt31|powerset=1]*/ o) => o is! int;
 
-/*member: returnNotIs:[null]*/
+/*member: returnNotIs:[null|powerset=1]*/
 returnNotIs() {
   _returnNotIs(null);
   _returnNotIs(1);
@@ -126,23 +126,26 @@
 ////////////////////////////////////////////////////////////////////////////////
 /// Return value of a negated is `int` test known to be false.
 ////////////////////////////////////////////////////////////////////////////////
-/*member: returnNotIsOneInt:Value([exact=JSBool], value: false)*/
+/*member: returnNotIsOneInt:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
 returnNotIsOneInt() => 1 is! int;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return value of a negated is `int` test known to be true.
 ////////////////////////////////////////////////////////////////////////////////
-/*member: returnNotIsNullInt:Value([exact=JSBool], value: true)*/
+/*member: returnNotIsNullInt:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
 returnNotIsNullInt() => null is! int;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return logical and of booleans values.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _returnLogicalAnd:[exact=JSBool]*/
-_returnLogicalAnd(/*[exact=JSBool]*/ a, /*[exact=JSBool]*/ b) => a && b;
+/*member: _returnLogicalAnd:[exact=JSBool|powerset=0]*/
+_returnLogicalAnd(
+  /*[exact=JSBool|powerset=0]*/ a,
+  /*[exact=JSBool|powerset=0]*/ b,
+) => a && b;
 
-/*member: returnLogicalAnd:[null]*/
+/*member: returnLogicalAnd:[null|powerset=1]*/
 returnLogicalAnd() {
   _returnLogicalAnd(true, true);
   _returnLogicalAnd(false, false);
@@ -152,14 +155,14 @@
 /// Return logical and of `true` && `true`.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: returnLogicalAndTrueTrue:Value([exact=JSBool], value: true)*/
+/*member: returnLogicalAndTrueTrue:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
 returnLogicalAndTrueTrue() => true && true;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return logical and of `false` && `true`.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: returnLogicalAndFalseTrue:Value([exact=JSBool], value: false)*/
+/*member: returnLogicalAndFalseTrue:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
 /// ignore: dead_code
 returnLogicalAndFalseTrue() => false && true;
 
@@ -167,25 +170,25 @@
 /// Return logical and of `null` && `true`.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: returnLogicalAndNullTrue:[exact=JSBool]*/
+/*member: returnLogicalAndNullTrue:[exact=JSBool|powerset=0]*/
 returnLogicalAndNullTrue() => (null as dynamic) && true;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return logical and of is test and use.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  /*member: Class1.field:Value([exact=JSBool], value: true)*/
+  /*member: Class1.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
   final bool field = true;
 }
 
-/*member: _returnLogicalAndIs:[exact=JSBool]*/
-_returnLogicalAndIs(/*[null|exact=Class1]*/ o) {
-  return o is Class1 && o. /*[exact=Class1]*/ field;
+/*member: _returnLogicalAndIs:[exact=JSBool|powerset=0]*/
+_returnLogicalAndIs(/*[null|exact=Class1|powerset=1]*/ o) {
+  return o is Class1 && o. /*[exact=Class1|powerset=0]*/ field;
 }
 
-/*member: returnLogicalAndIs:[null]*/
+/*member: returnLogicalAndIs:[null|powerset=1]*/
 returnLogicalAndIs() {
   _returnLogicalAndIs(new Class1());
   _returnLogicalAndIs(null);
@@ -195,20 +198,20 @@
 /// Return logical and of is-not test and use.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
 class Class2 {
-  /*member: Class2.field:Value([exact=JSBool], value: true)*/
+  /*member: Class2.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
   final bool field = true;
 }
 
-/*member: _returnLogicalAndIsNot:[exact=JSBool]*/
-_returnLogicalAndIsNot(/*[null|exact=Class2]*/ o) {
+/*member: _returnLogicalAndIsNot:[exact=JSBool|powerset=0]*/
+_returnLogicalAndIsNot(/*[null|exact=Class2|powerset=1]*/ o) {
   // TODO(johnniwinther): Use negative type knowledge to show that the receiver
   // is [null].
-  return o is! Class2 && o. /*[null|exact=Class2]*/ field;
+  return o is! Class2 && o. /*[null|exact=Class2|powerset=1]*/ field;
 }
 
-/*member: returnLogicalAndIsNot:[null]*/
+/*member: returnLogicalAndIsNot:[null|powerset=1]*/
 returnLogicalAndIsNot() {
   _returnLogicalAndIsNot(new Class2());
   _returnLogicalAndIsNot(null);
@@ -218,18 +221,18 @@
 /// Return logical and of null test and use.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
 class Class3 {
-  /*member: Class3.field:Value([exact=JSBool], value: true)*/
+  /*member: Class3.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
   final bool field = true;
 }
 
-/*member: _returnLogicalAndNull:[exact=JSBool]*/
-_returnLogicalAndNull(/*[null|exact=Class3]*/ o) {
-  return o == null && o. /*[null]*/ field;
+/*member: _returnLogicalAndNull:[exact=JSBool|powerset=0]*/
+_returnLogicalAndNull(/*[null|exact=Class3|powerset=1]*/ o) {
+  return o == null && o. /*[null|powerset=1]*/ field;
 }
 
-/*member: returnLogicalAndNull:[null]*/
+/*member: returnLogicalAndNull:[null|powerset=1]*/
 returnLogicalAndNull() {
   _returnLogicalAndNull(new Class3());
   _returnLogicalAndNull(null);
@@ -239,18 +242,18 @@
 /// Return logical and of not null test and use.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
 class Class4 {
-  /*member: Class4.field:Value([exact=JSBool], value: true)*/
+  /*member: Class4.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
   final bool field = true;
 }
 
-/*member: _returnLogicalAndNotNull:[exact=JSBool]*/
-_returnLogicalAndNotNull(/*[null|exact=Class4]*/ o) {
-  return o != null && o. /*[exact=Class4]*/ field;
+/*member: _returnLogicalAndNotNull:[exact=JSBool|powerset=0]*/
+_returnLogicalAndNotNull(/*[null|exact=Class4|powerset=1]*/ o) {
+  return o != null && o. /*[exact=Class4|powerset=0]*/ field;
 }
 
-/*member: returnLogicalAndNotNull:[null]*/
+/*member: returnLogicalAndNotNull:[null|powerset=1]*/
 returnLogicalAndNotNull() {
   _returnLogicalAndNotNull(new Class4());
   _returnLogicalAndNotNull(null);
@@ -260,10 +263,13 @@
 /// Return logical or of booleans values.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _returnLogicalOr:[exact=JSBool]*/
-_returnLogicalOr(/*[exact=JSBool]*/ a, /*[exact=JSBool]*/ b) => a || b;
+/*member: _returnLogicalOr:[exact=JSBool|powerset=0]*/
+_returnLogicalOr(
+  /*[exact=JSBool|powerset=0]*/ a,
+  /*[exact=JSBool|powerset=0]*/ b,
+) => a || b;
 
-/*member: returnLogicalOr:[null]*/
+/*member: returnLogicalOr:[null|powerset=1]*/
 returnLogicalOr() {
   _returnLogicalOr(true, true);
   _returnLogicalOr(false, false);
@@ -273,41 +279,41 @@
 /// Return logical or of `false` || `true`.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: returnLogicalOrFalseTrue:Value([exact=JSBool], value: true)*/
+/*member: returnLogicalOrFalseTrue:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
 returnLogicalOrFalseTrue() => false || true;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return logical or of `false` || `false`.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: returnLogicalOrFalseFalse:Value([exact=JSBool], value: false)*/
+/*member: returnLogicalOrFalseFalse:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
 returnLogicalOrFalseFalse() => false || false;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return logical or of `null` || `true`.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: returnLogicalOrNullTrue:[exact=JSBool]*/
+/*member: returnLogicalOrNullTrue:[exact=JSBool|powerset=0]*/
 returnLogicalOrNullTrue() => (null as dynamic) || true;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return logical or of is test or use.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class5.:[exact=Class5]*/
+/*member: Class5.:[exact=Class5|powerset=0]*/
 class Class5 {
-  /*member: Class5.field:Value([exact=JSBool], value: true)*/
+  /*member: Class5.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
   final bool field = true;
 }
 
-/*member: _returnLogicalOrIs:[exact=JSBool]*/
-_returnLogicalOrIs(/*[null|exact=Class5]*/ o) {
+/*member: _returnLogicalOrIs:[exact=JSBool|powerset=0]*/
+_returnLogicalOrIs(/*[null|exact=Class5|powerset=1]*/ o) {
   // TODO(johnniwinther): Use negative type knowledge to show that the receiver
   // is [null].
-  return o is Class5 || o. /*[null|exact=Class5]*/ field;
+  return o is Class5 || o. /*[null|exact=Class5|powerset=1]*/ field;
 }
 
-/*member: returnLogicalOrIs:[null]*/
+/*member: returnLogicalOrIs:[null|powerset=1]*/
 returnLogicalOrIs() {
   _returnLogicalOrIs(new Class5());
   _returnLogicalOrIs(null);
@@ -317,18 +323,18 @@
 /// Return logical or of is-not test or use.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class6.:[exact=Class6]*/
+/*member: Class6.:[exact=Class6|powerset=0]*/
 class Class6 {
-  /*member: Class6.field:Value([exact=JSBool], value: true)*/
+  /*member: Class6.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
   final bool field = true;
 }
 
-/*member: _returnLogicalOrIsNot:[exact=JSBool]*/
-_returnLogicalOrIsNot(/*[null|exact=Class6]*/ o) {
-  return o is! Class6 || o. /*[exact=Class6]*/ field;
+/*member: _returnLogicalOrIsNot:[exact=JSBool|powerset=0]*/
+_returnLogicalOrIsNot(/*[null|exact=Class6|powerset=1]*/ o) {
+  return o is! Class6 || o. /*[exact=Class6|powerset=0]*/ field;
 }
 
-/*member: returnLogicalOrIsNot:[null]*/
+/*member: returnLogicalOrIsNot:[null|powerset=1]*/
 returnLogicalOrIsNot() {
   _returnLogicalOrIsNot(new Class6());
   _returnLogicalOrIsNot(null);
@@ -338,18 +344,18 @@
 /// Return logical or of null test or use.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class7.:[exact=Class7]*/
+/*member: Class7.:[exact=Class7|powerset=0]*/
 class Class7 {
-  /*member: Class7.field:Value([exact=JSBool], value: true)*/
+  /*member: Class7.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
   final bool field = true;
 }
 
-/*member: _returnLogicalOrNull:[exact=JSBool]*/
-_returnLogicalOrNull(/*[null|exact=Class7]*/ o) {
-  return o == null || o. /*[exact=Class7]*/ field;
+/*member: _returnLogicalOrNull:[exact=JSBool|powerset=0]*/
+_returnLogicalOrNull(/*[null|exact=Class7|powerset=1]*/ o) {
+  return o == null || o. /*[exact=Class7|powerset=0]*/ field;
 }
 
-/*member: returnLogicalOrNull:[null]*/
+/*member: returnLogicalOrNull:[null|powerset=1]*/
 returnLogicalOrNull() {
   _returnLogicalOrNull(new Class7());
   _returnLogicalOrNull(null);
@@ -359,18 +365,18 @@
 /// Return logical or of not null test or use.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class8.:[exact=Class8]*/
+/*member: Class8.:[exact=Class8|powerset=0]*/
 class Class8 {
-  /*member: Class8.field:Value([exact=JSBool], value: true)*/
+  /*member: Class8.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
   final bool field = true;
 }
 
-/*member: _returnLogicalOrNotNull:[exact=JSBool]*/
-_returnLogicalOrNotNull(/*[null|exact=Class8]*/ o) {
-  return o != null || o. /*[null]*/ field;
+/*member: _returnLogicalOrNotNull:[exact=JSBool|powerset=0]*/
+_returnLogicalOrNotNull(/*[null|exact=Class8|powerset=1]*/ o) {
+  return o != null || o. /*[null|powerset=1]*/ field;
 }
 
-/*member: returnLogicalOrNotNull:[null]*/
+/*member: returnLogicalOrNotNull:[null|powerset=1]*/
 returnLogicalOrNotNull() {
   _returnLogicalOrNotNull(new Class8());
   _returnLogicalOrNotNull(null);
diff --git a/pkg/compiler/test/inference/data/logical_if.dart b/pkg/compiler/test/inference/data/logical_if.dart
index 50a69ae..1ba4c64 100644
--- a/pkg/compiler/test/inference/data/logical_if.dart
+++ b/pkg/compiler/test/inference/data/logical_if.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   promotedIfThen();
   promotedIfThenElse();
@@ -30,17 +30,19 @@
 // Test if-then statement with is-test
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {}
 
-/*member: _promotedIfThen:[null]*/
-_promotedIfThen(/*Union([exact=Class1], [exact=JSUInt31])*/ o) {
+/*member: _promotedIfThen:[null|powerset=1]*/
+_promotedIfThen(
+  /*Union([exact=Class1|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
   if (o is Class1) {
-    o. /*invoke: [exact=Class1]*/ toString();
+    o. /*invoke: [exact=Class1|powerset=0]*/ toString();
   }
 }
 
-/*member: promotedIfThen:[null]*/
+/*member: promotedIfThen:[null|powerset=1]*/
 promotedIfThen() {
   _promotedIfThen(0);
   _promotedIfThen(new Class1());
@@ -50,21 +52,23 @@
 // Test if-then-else statement with is-test
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
 class Class2 {}
 
-/*member: _promotedIfThenElse:[null]*/
-_promotedIfThenElse(/*Union([exact=Class2], [exact=JSUInt31])*/ o) {
+/*member: _promotedIfThenElse:[null|powerset=1]*/
+_promotedIfThenElse(
+  /*Union([exact=Class2|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
   if (o is Class2) {
-    o. /*invoke: [exact=Class2]*/ toString();
+    o. /*invoke: [exact=Class2|powerset=0]*/ toString();
   } else {
     // TODO(johnniwinther): Use negative type knowledge to show that the
     // receiver must be [exact=JSUInt31].
-    o. /*invoke: Union([exact=Class2], [exact=JSUInt31])*/ toString();
+    o. /*invoke: Union([exact=Class2|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
   }
 }
 
-/*member: promotedIfThenElse:[null]*/
+/*member: promotedIfThenElse:[null|powerset=1]*/
 promotedIfThenElse() {
   _promotedIfThenElse(0);
   _promotedIfThenElse(new Class2());
@@ -74,19 +78,21 @@
 // Test if-then-else statement with negated is-test
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
 class Class3 {}
 
-/*member: _promotedNotIfThenElse:[null]*/
-_promotedNotIfThenElse(/*Union([exact=Class3], [exact=JSUInt31])*/ o) {
+/*member: _promotedNotIfThenElse:[null|powerset=1]*/
+_promotedNotIfThenElse(
+  /*Union([exact=Class3|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
   if (o is! Class3) {
-    o. /*invoke: Union([exact=Class3], [exact=JSUInt31])*/ toString();
+    o. /*invoke: Union([exact=Class3|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
   } else {
-    o. /*invoke: [exact=Class3]*/ toString();
+    o. /*invoke: [exact=Class3|powerset=0]*/ toString();
   }
 }
 
-/*member: promotedNotIfThenElse:[null]*/
+/*member: promotedNotIfThenElse:[null|powerset=1]*/
 promotedNotIfThenElse() {
   _promotedNotIfThenElse(0);
   _promotedNotIfThenElse(new Class3());
@@ -96,20 +102,20 @@
 // Test if-then statement with is-test in &&
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
 class Class4 {}
 
-/*member: _promotedAndIfThen:[null]*/
+/*member: _promotedAndIfThen:[null|powerset=1]*/
 _promotedAndIfThen(
-  /*Union([exact=Class4], [exact=JSUInt31])*/ o,
-  /*[exact=JSBool]*/ c,
+  /*Union([exact=Class4|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+  /*[exact=JSBool|powerset=0]*/ c,
 ) {
   if (o is Class4 && c) {
-    o. /*invoke: [exact=Class4]*/ toString();
+    o. /*invoke: [exact=Class4|powerset=0]*/ toString();
   }
 }
 
-/*member: promotedAndIfThen:[null]*/
+/*member: promotedAndIfThen:[null|powerset=1]*/
 promotedAndIfThen() {
   _promotedAndIfThen(0, true);
   _promotedAndIfThen(new Class4(), false);
@@ -119,24 +125,24 @@
 // Test if-then-else statement with is-test in &&
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class5.:[exact=Class5]*/
+/*member: Class5.:[exact=Class5|powerset=0]*/
 class Class5 {}
 
-/*member: _promotedAndIfThenElse:[null]*/
+/*member: _promotedAndIfThenElse:[null|powerset=1]*/
 _promotedAndIfThenElse(
-  /*Union([exact=Class5], [exact=JSUInt31])*/ o,
-  /*[exact=JSBool]*/ c,
+  /*Union([exact=Class5|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+  /*[exact=JSBool|powerset=0]*/ c,
 ) {
   if (o is Class5 && c) {
-    o. /*invoke: [exact=Class5]*/ toString();
+    o. /*invoke: [exact=Class5|powerset=0]*/ toString();
   } else {
     // TODO(johnniwinther): Use negative type knowledge to show that the
     // receiver must be [exact=JSUInt31].
-    o. /*invoke: Union([exact=Class5], [exact=JSUInt31])*/ toString();
+    o. /*invoke: Union([exact=Class5|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
   }
 }
 
-/*member: promotedAndIfThenElse:[null]*/
+/*member: promotedAndIfThenElse:[null|powerset=1]*/
 promotedAndIfThenElse() {
   _promotedAndIfThenElse(0, true);
   _promotedAndIfThenElse(new Class5(), false);
@@ -146,22 +152,22 @@
 // Test if-then-else statement with negated is-test in &&
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class6.:[exact=Class6]*/
+/*member: Class6.:[exact=Class6|powerset=0]*/
 class Class6 {}
 
-/*member: _promotedNotAndIfThenElse:[null]*/
+/*member: _promotedNotAndIfThenElse:[null|powerset=1]*/
 _promotedNotAndIfThenElse(
-  /*Union([exact=Class6], [exact=JSUInt31])*/ o,
-  /*[exact=JSBool]*/ c,
+  /*Union([exact=Class6|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+  /*[exact=JSBool|powerset=0]*/ c,
 ) {
   if (o is! Class6 && c) {
-    o. /*invoke: Union([exact=Class6], [exact=JSUInt31])*/ toString();
+    o. /*invoke: Union([exact=Class6|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
   } else {
-    o. /*invoke: Union([exact=Class6], [exact=JSUInt31])*/ toString();
+    o. /*invoke: Union([exact=Class6|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
   }
 }
 
-/*member: promotedNotAndIfThenElse:[null]*/
+/*member: promotedNotAndIfThenElse:[null|powerset=1]*/
 promotedNotAndIfThenElse() {
   _promotedNotAndIfThenElse(0, true);
   _promotedNotAndIfThenElse(new Class6(), false);
@@ -171,20 +177,20 @@
 // Test if-then statement with is-test in ||
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class7.:[exact=Class7]*/
+/*member: Class7.:[exact=Class7|powerset=0]*/
 class Class7 {}
 
-/*member: _promotedOrIfThen:[null]*/
+/*member: _promotedOrIfThen:[null|powerset=1]*/
 _promotedOrIfThen(
-  /*Union([exact=Class7], [exact=JSUInt31])*/ o,
-  /*[exact=JSBool]*/ c,
+  /*Union([exact=Class7|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+  /*[exact=JSBool|powerset=0]*/ c,
 ) {
   if (o is Class7 || c) {
-    o. /*invoke: Union([exact=Class7], [exact=JSUInt31])*/ toString();
+    o. /*invoke: Union([exact=Class7|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
   }
 }
 
-/*member: promotedOrIfThen:[null]*/
+/*member: promotedOrIfThen:[null|powerset=1]*/
 promotedOrIfThen() {
   _promotedOrIfThen(0, true);
   _promotedOrIfThen(new Class7(), false);
@@ -194,24 +200,24 @@
 // Test if-then-else statement with is-test in ||
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class8.:[exact=Class8]*/
+/*member: Class8.:[exact=Class8|powerset=0]*/
 class Class8 {}
 
-/*member: _promotedOrIfThenElse:[null]*/
+/*member: _promotedOrIfThenElse:[null|powerset=1]*/
 _promotedOrIfThenElse(
-  /*Union([exact=Class8], [exact=JSUInt31])*/ o,
-  /*[exact=JSBool]*/ c,
+  /*Union([exact=Class8|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+  /*[exact=JSBool|powerset=0]*/ c,
 ) {
   if (o is Class8 || c) {
-    o. /*invoke: Union([exact=Class8], [exact=JSUInt31])*/ toString();
+    o. /*invoke: Union([exact=Class8|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
   } else {
     // TODO(johnniwinther): Use negative type knowledge to show that the
     // receiver must be [exact=JSUInt31].
-    o. /*invoke: Union([exact=Class8], [exact=JSUInt31])*/ toString();
+    o. /*invoke: Union([exact=Class8|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
   }
 }
 
-/*member: promotedOrIfThenElse:[null]*/
+/*member: promotedOrIfThenElse:[null|powerset=1]*/
 promotedOrIfThenElse() {
   _promotedOrIfThenElse(0, true);
   _promotedOrIfThenElse(new Class8(), false);
@@ -221,22 +227,22 @@
 // Test if-then-else statement with negated is-test in ||
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class9.:[exact=Class9]*/
+/*member: Class9.:[exact=Class9|powerset=0]*/
 class Class9 {}
 
-/*member: _promotedNotOrIfThenElse:[null]*/
+/*member: _promotedNotOrIfThenElse:[null|powerset=1]*/
 _promotedNotOrIfThenElse(
-  /*Union([exact=Class9], [exact=JSUInt31])*/ o,
-  /*[exact=JSBool]*/ c,
+  /*Union([exact=Class9|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+  /*[exact=JSBool|powerset=0]*/ c,
 ) {
   if (o is! Class9 || c) {
-    o. /*invoke: Union([exact=Class9], [exact=JSUInt31])*/ toString();
+    o. /*invoke: Union([exact=Class9|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
   } else {
-    o. /*invoke: [exact=Class9]*/ toString();
+    o. /*invoke: [exact=Class9|powerset=0]*/ toString();
   }
 }
 
-/*member: promotedNotOrIfThenElse:[null]*/
+/*member: promotedNotOrIfThenElse:[null|powerset=1]*/
 promotedNotOrIfThenElse() {
   _promotedNotOrIfThenElse(0, true);
   _promotedNotOrIfThenElse(new Class9(), false);
@@ -246,20 +252,22 @@
 // Test if-then statement with doubly negated is-test
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class10.:[exact=Class10]*/
+/*member: Class10.:[exact=Class10|powerset=0]*/
 class Class10 {}
 
-/*member: _promotedNotNotIfThen:[null]*/
-_promotedNotNotIfThen(/*Union([exact=Class10], [exact=JSUInt31])*/ o) {
+/*member: _promotedNotNotIfThen:[null|powerset=1]*/
+_promotedNotNotIfThen(
+  /*Union([exact=Class10|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
   if (!(o is! Class10)) {
     o
         .
-        /*invoke: [exact=Class10]*/
+        /*invoke: [exact=Class10|powerset=0]*/
         toString();
   }
 }
 
-/*member: promotedNotNotIfThen:[null]*/
+/*member: promotedNotNotIfThen:[null|powerset=1]*/
 promotedNotNotIfThen() {
   _promotedNotNotIfThen(0);
   _promotedNotNotIfThen(new Class10());
@@ -269,24 +277,26 @@
 // Test if-then-else statement with negated is-test in parentheses
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class11.:[exact=Class11]*/
+/*member: Class11.:[exact=Class11|powerset=0]*/
 class Class11 {}
 
-/*member: _promotedParenNotIfThenElse:[null]*/
-_promotedParenNotIfThenElse(/*Union([exact=Class11], [exact=JSUInt31])*/ o) {
+/*member: _promotedParenNotIfThenElse:[null|powerset=1]*/
+_promotedParenNotIfThenElse(
+  /*Union([exact=Class11|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
   if (!(o is Class11)) {
     // TODO(johnniwinther): Use negative type knowledge to show that the
     // receiver must be [exact=JSUInt31].
-    o. /*invoke: Union([exact=Class11], [exact=JSUInt31])*/ toString();
+    o. /*invoke: Union([exact=Class11|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
   } else {
     o
         .
-        /*invoke: [exact=Class11]*/
+        /*invoke: [exact=Class11|powerset=0]*/
         toString();
   }
 }
 
-/*member: promotedParenNotIfThenElse:[null]*/
+/*member: promotedParenNotIfThenElse:[null|powerset=1]*/
 promotedParenNotIfThenElse() {
   _promotedParenNotIfThenElse(0);
   _promotedParenNotIfThenElse(new Class11());
@@ -296,14 +306,14 @@
 // Test if-then statement with null-test
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _nullIfThen:[null]*/
-_nullIfThen(/*[null|exact=JSUInt31]*/ o) {
+/*member: _nullIfThen:[null|powerset=1]*/
+_nullIfThen(/*[null|exact=JSUInt31|powerset=1]*/ o) {
   if (o == null) {
-    o. /*invoke: [null]*/ toString();
+    o. /*invoke: [null|powerset=1]*/ toString();
   }
 }
 
-/*member: nullIfThen:[null]*/
+/*member: nullIfThen:[null|powerset=1]*/
 nullIfThen() {
   _nullIfThen(0);
   _nullIfThen(null);
@@ -313,16 +323,16 @@
 // Test if-then-else statement null-test
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _nullIfThenElse:[null]*/
-_nullIfThenElse(/*[null|exact=JSUInt31]*/ o) {
+/*member: _nullIfThenElse:[null|powerset=1]*/
+_nullIfThenElse(/*[null|exact=JSUInt31|powerset=1]*/ o) {
   if (o == null) {
-    o. /*invoke: [null]*/ toString();
+    o. /*invoke: [null|powerset=1]*/ toString();
   } else {
-    o. /*invoke: [exact=JSUInt31]*/ toString();
+    o. /*invoke: [exact=JSUInt31|powerset=0]*/ toString();
   }
 }
 
-/*member: nullIfThenElse:[null]*/
+/*member: nullIfThenElse:[null|powerset=1]*/
 nullIfThenElse() {
   _nullIfThenElse(0);
   _nullIfThenElse(null);
@@ -332,14 +342,14 @@
 // Test if-then statement with negated null-test
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _notNullIfThen:[null]*/
-_notNullIfThen(/*[null|exact=JSUInt31]*/ o) {
+/*member: _notNullIfThen:[null|powerset=1]*/
+_notNullIfThen(/*[null|exact=JSUInt31|powerset=1]*/ o) {
   if (o != null) {
-    o. /*invoke: [exact=JSUInt31]*/ toString();
+    o. /*invoke: [exact=JSUInt31|powerset=0]*/ toString();
   }
 }
 
-/*member: notNullIfThen:[null]*/
+/*member: notNullIfThen:[null|powerset=1]*/
 notNullIfThen() {
   _notNullIfThen(0);
   _notNullIfThen(null);
@@ -349,16 +359,16 @@
 // Test if-then-else statement with negated null-test
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _notNullIfThenElse:[null]*/
-_notNullIfThenElse(/*[null|exact=JSUInt31]*/ o) {
+/*member: _notNullIfThenElse:[null|powerset=1]*/
+_notNullIfThenElse(/*[null|exact=JSUInt31|powerset=1]*/ o) {
   if (o != null) {
-    o. /*invoke: [exact=JSUInt31]*/ toString();
+    o. /*invoke: [exact=JSUInt31|powerset=0]*/ toString();
   } else {
-    o. /*invoke: [null]*/ toString();
+    o. /*invoke: [null|powerset=1]*/ toString();
   }
 }
 
-/*member: notNullIfThenElse:[null]*/
+/*member: notNullIfThenElse:[null|powerset=1]*/
 notNullIfThenElse() {
   _notNullIfThenElse(0);
   _notNullIfThenElse(null);
@@ -368,14 +378,17 @@
 // Test if-then statement with null-test in &&
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _nullAndIfThen:[null]*/
-_nullAndIfThen(/*[null|exact=JSUInt31]*/ o, /*[exact=JSBool]*/ c) {
+/*member: _nullAndIfThen:[null|powerset=1]*/
+_nullAndIfThen(
+  /*[null|exact=JSUInt31|powerset=1]*/ o,
+  /*[exact=JSBool|powerset=0]*/ c,
+) {
   if (o == null && c) {
-    o. /*invoke: [null]*/ toString();
+    o. /*invoke: [null|powerset=1]*/ toString();
   }
 }
 
-/*member: nullAndIfThen:[null]*/
+/*member: nullAndIfThen:[null|powerset=1]*/
 nullAndIfThen() {
   _nullAndIfThen(0, true);
   _nullAndIfThen(null, false);
@@ -385,16 +398,19 @@
 // Test if-then-else statement null-test in &&
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _nullAndIfThenElse:[null]*/
-_nullAndIfThenElse(/*[null|exact=JSUInt31]*/ o, /*[exact=JSBool]*/ c) {
+/*member: _nullAndIfThenElse:[null|powerset=1]*/
+_nullAndIfThenElse(
+  /*[null|exact=JSUInt31|powerset=1]*/ o,
+  /*[exact=JSBool|powerset=0]*/ c,
+) {
   if (o == null && c) {
-    o. /*invoke: [null]*/ toString();
+    o. /*invoke: [null|powerset=1]*/ toString();
   } else {
-    o. /*invoke: [null|exact=JSUInt31]*/ toString();
+    o. /*invoke: [null|exact=JSUInt31|powerset=1]*/ toString();
   }
 }
 
-/*member: nullAndIfThenElse:[null]*/
+/*member: nullAndIfThenElse:[null|powerset=1]*/
 nullAndIfThenElse() {
   _nullAndIfThenElse(0, true);
   _nullAndIfThenElse(null, false);
@@ -404,14 +420,17 @@
 // Test if-then statement with negated null-test in &&
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _notNullAndIfThen:[null]*/
-_notNullAndIfThen(/*[null|exact=JSUInt31]*/ o, /*[exact=JSBool]*/ c) {
+/*member: _notNullAndIfThen:[null|powerset=1]*/
+_notNullAndIfThen(
+  /*[null|exact=JSUInt31|powerset=1]*/ o,
+  /*[exact=JSBool|powerset=0]*/ c,
+) {
   if (o != null && c) {
-    o. /*invoke: [exact=JSUInt31]*/ toString();
+    o. /*invoke: [exact=JSUInt31|powerset=0]*/ toString();
   }
 }
 
-/*member: notNullAndIfThen:[null]*/
+/*member: notNullAndIfThen:[null|powerset=1]*/
 notNullAndIfThen() {
   _notNullAndIfThen(0, true);
   _notNullAndIfThen(null, false);
@@ -421,16 +440,19 @@
 // Test if-then-else statement with negated null-test in &&
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _notNullAndIfThenElse:[null]*/
-_notNullAndIfThenElse(/*[null|exact=JSUInt31]*/ o, /*[exact=JSBool]*/ c) {
+/*member: _notNullAndIfThenElse:[null|powerset=1]*/
+_notNullAndIfThenElse(
+  /*[null|exact=JSUInt31|powerset=1]*/ o,
+  /*[exact=JSBool|powerset=0]*/ c,
+) {
   if (o != null && c) {
-    o. /*invoke: [exact=JSUInt31]*/ toString();
+    o. /*invoke: [exact=JSUInt31|powerset=0]*/ toString();
   } else {
-    o. /*invoke: [null|exact=JSUInt31]*/ toString();
+    o. /*invoke: [null|exact=JSUInt31|powerset=1]*/ toString();
   }
 }
 
-/*member: notNullAndIfThenElse:[null]*/
+/*member: notNullAndIfThenElse:[null|powerset=1]*/
 notNullAndIfThenElse() {
   _notNullAndIfThenElse(0, true);
   _notNullAndIfThenElse(null, false);
diff --git a/pkg/compiler/test/inference/data/map.dart b/pkg/compiler/test/inference/data/map.dart
index bef703b..2ddaa9a 100644
--- a/pkg/compiler/test/inference/data/map.dart
+++ b/pkg/compiler/test/inference/data/map.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   emptyMap();
   nullMap();
@@ -14,26 +14,26 @@
   constIntStringMap();
 }
 
-/*member: emptyMap:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+/*member: emptyMap:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
 emptyMap() => {};
 
-/*member: constMap:Dictionary([subclass=ConstantMap], key: [empty], value: [null], map: {})*/
+/*member: constMap:Dictionary([subclass=ConstantMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
 constMap() => const {};
 
-/*member: nullMap:Map([subclass=JsLinkedHashMap], key: [null], value: [null])*/
+/*member: nullMap:Map([subclass=JsLinkedHashMap|powerset=0], key: [null|powerset=1], value: [null|powerset=1], powerset: 0)*/
 nullMap() => {null: null};
 
-/*member: constNullMap:Map([subclass=ConstantMap], key: [null], value: [null])*/
+/*member: constNullMap:Map([subclass=ConstantMap|powerset=0], key: [null|powerset=1], value: [null|powerset=1], powerset: 0)*/
 constNullMap() => const {null: null};
 
-/*member: stringIntMap:Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSUInt31], map: {a: [exact=JSUInt31], b: [exact=JSUInt31], c: [exact=JSUInt31]})*/
+/*member: stringIntMap:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSUInt31|powerset=1], map: {a: [exact=JSUInt31|powerset=0], b: [exact=JSUInt31|powerset=0], c: [exact=JSUInt31|powerset=0]}, powerset: 0)*/
 stringIntMap() => {'a': 1, 'b': 2, 'c': 3};
 
-/*member: intStringMap:Map([subclass=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSString])*/
+/*member: intStringMap:Map([subclass=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSString|powerset=1], powerset: 0)*/
 intStringMap() => {1: 'a', 2: 'b', 3: 'c'};
 
-/*member: constStringIntMap:Dictionary([subclass=ConstantMap], key: [exact=JSString], value: [null|exact=JSUInt31], map: {a: [exact=JSUInt31], b: [exact=JSUInt31], c: [exact=JSUInt31]})*/
+/*member: constStringIntMap:Dictionary([subclass=ConstantMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSUInt31|powerset=1], map: {a: [exact=JSUInt31|powerset=0], b: [exact=JSUInt31|powerset=0], c: [exact=JSUInt31|powerset=0]}, powerset: 0)*/
 constStringIntMap() => const {'a': 1, 'b': 2, 'c': 3};
 
-/*member: constIntStringMap:Map([subclass=ConstantMap], key: [exact=JSUInt31], value: [null|exact=JSString])*/
+/*member: constIntStringMap:Map([subclass=ConstantMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSString|powerset=1], powerset: 0)*/
 constIntStringMap() => const {1: 'a', 2: 'b', 3: 'c'};
diff --git a/pkg/compiler/test/inference/data/map_tracer_const.dart b/pkg/compiler/test/inference/data/map_tracer_const.dart
index 7c8433d..45e50ba 100644
--- a/pkg/compiler/test/inference/data/map_tracer_const.dart
+++ b/pkg/compiler/test/inference/data/map_tracer_const.dart
@@ -2,11 +2,11 @@
 // 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.
 
-/*member: closure:[exact=JSUInt31]*/
+/*member: closure:[exact=JSUInt31|powerset=0]*/
 int closure(
   int
-  /*spec.Union([exact=JSNumNotInt], [exact=JSUInt31])*/
-  /*prod.[exact=JSUInt31]*/
+  /*spec.Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+  /*prod.[exact=JSUInt31|powerset=0]*/
   x,
 ) {
   return x;
@@ -15,18 +15,18 @@
 class A {
   static const DEFAULT = const {'fun': closure};
 
-  /*member: A.map:Dictionary([subclass=ConstantMap], key: Value([exact=JSString], value: "fun"), value: [null|subclass=Closure], map: {fun: [subclass=Closure]})*/
+  /*member: A.map:Dictionary([subclass=ConstantMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "fun", powerset: 0), value: [null|subclass=Closure|powerset=1], map: {fun: [subclass=Closure|powerset=0]}, powerset: 0)*/
   final map;
 
-  /*member: A.:[exact=A]*/
-  A([/*[null]*/ maparg]) : map = maparg == null ? DEFAULT : maparg;
+  /*member: A.:[exact=A|powerset=0]*/
+  A([/*[null|powerset=1]*/ maparg]) : map = maparg == null ? DEFAULT : maparg;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   var a = A();
-  a. /*[exact=A]*/ map
-  /*Dictionary([subclass=ConstantMap], key: Value([exact=JSString], value: "fun"), value: [null|subclass=Closure], map: {fun: [subclass=Closure]})*/
+  a. /*[exact=A|powerset=0]*/ map
+  /*Dictionary([subclass=ConstantMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "fun", powerset: 0), value: [null|subclass=Closure|powerset=1], map: {fun: [subclass=Closure|powerset=0]}, powerset: 0)*/
   ['fun'](3.3);
   print(closure(22));
 }
diff --git a/pkg/compiler/test/inference/data/map_tracer_keys.dart b/pkg/compiler/test/inference/data/map_tracer_keys.dart
index 0e410fa..971437a 100644
--- a/pkg/compiler/test/inference/data/map_tracer_keys.dart
+++ b/pkg/compiler/test/inference/data/map_tracer_keys.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   test1();
   test2();
@@ -12,197 +12,197 @@
   test6();
 }
 
-/*member: aDouble1:[null|exact=JSNumNotInt]*/
+/*member: aDouble1:[null|exact=JSNumNotInt|powerset=1]*/
 dynamic aDouble1 = 42.5;
 
-/*member: aList1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: aList1:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
 dynamic aList1 = [42];
 
-/*member: consume1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: consume1:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
 consume1(
-  /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ x,
+  /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ x,
 ) => x;
 
-/*member: test1:[null]*/
+/*member: test1:[null|powerset=1]*/
 test1() {
   var theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4};
   theMap
-      /*update: Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt], map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: [null|exact=JSNumNotInt]})*/
+      /*update: Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: [null|exact=JSNumNotInt|powerset=1]}, powerset: 0)*/
       ['d'] =
       5.5;
-  /*iterator: [exact=LinkedHashMapKeysIterable]*/
-  /*current: [exact=LinkedHashMapKeyIterator]*/
-  /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+  /*iterator: [exact=LinkedHashMapKeysIterable|powerset=0]*/
+  /*current: [exact=LinkedHashMapKeyIterator|powerset=0]*/
+  /*moveNext: [exact=LinkedHashMapKeyIterator|powerset=0]*/
   for (var key
       in theMap
           .
-          /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt], map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: [null|exact=JSNumNotInt]})*/
+          /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: [null|exact=JSNumNotInt|powerset=1]}, powerset: 0)*/
           keys) {
     aDouble1 =
         theMap
-        /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt], map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: [null|exact=JSNumNotInt]})*/
+        /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: [null|exact=JSNumNotInt|powerset=1]}, powerset: 0)*/
         [key];
   }
   // We have to reference it somewhere, so that it always gets resolved.
   consume1(aList1);
 }
 
-/*member: aDouble2:[null|exact=JSNumNotInt]*/
+/*member: aDouble2:[null|exact=JSNumNotInt|powerset=1]*/
 dynamic aDouble2 = 42.5;
 
-/*member: aList2:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: aList2:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
 dynamic aList2 = [42];
 
-/*member: consume2:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: consume2:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
 consume2(
-  /*Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/ x,
+  /*Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/ x,
 ) => x;
 
-/*member: test2:[null]*/
+/*member: test2:[null|powerset=1]*/
 test2() {
   dynamic theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4};
   theMap
-      /*update: Map([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt])*/
+      /*update: Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], powerset: 0)*/
       [aList2] =
       5.5;
-  /*iterator: [exact=LinkedHashMapKeysIterable]*/
-  /*current: [exact=LinkedHashMapKeyIterator]*/
-  /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+  /*iterator: [exact=LinkedHashMapKeysIterable|powerset=0]*/
+  /*current: [exact=LinkedHashMapKeyIterator|powerset=0]*/
+  /*moveNext: [exact=LinkedHashMapKeyIterator|powerset=0]*/
   for (var key
       in theMap
           .
-          /*Map([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt])*/
+          /*Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], powerset: 0)*/
           keys) {
     aDouble2 =
         theMap
-        /*Map([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt])*/
+        /*Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], powerset: 0)*/
         [key];
   }
   // We have to reference it somewhere, so that it always gets resolved.
   consume2(aList2);
 }
 
-/*member: aDouble3:Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt])*/
+/*member: aDouble3:Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], powerset: 1)*/
 dynamic aDouble3 = 42.5;
 
-/*member: aList3:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: aList3:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
 dynamic aList3 = [42];
 
-/*member: consume3:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: consume3:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
 consume3(
-  /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ x,
+  /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ x,
 ) => x;
 
-/*member: test3:[null]*/
+/*member: test3:[null|powerset=1]*/
 test3() {
   dynamic theMap = <dynamic, dynamic>{'a': 2.2, 'b': 3.3, 'c': 4.4};
   theMap
-      /*update: Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt]), map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: Container([null|exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)})*/
+      /*update: Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], powerset: 1), map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: Container([null|exact=JSExtendableArray|powerset=1], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 1)}, powerset: 0)*/
       ['d'] =
       aList3;
-  /*iterator: [exact=LinkedHashMapKeysIterable]*/
-  /*current: [exact=LinkedHashMapKeyIterator]*/
-  /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+  /*iterator: [exact=LinkedHashMapKeysIterable|powerset=0]*/
+  /*current: [exact=LinkedHashMapKeyIterator|powerset=0]*/
+  /*moveNext: [exact=LinkedHashMapKeyIterator|powerset=0]*/
   for (var key
       in theMap
           .
-          /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt]), map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: Container([null|exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)})*/
+          /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], powerset: 1), map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: Container([null|exact=JSExtendableArray|powerset=1], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 1)}, powerset: 0)*/
           keys) {
     aDouble3 =
         theMap
-        /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt]), map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: Container([null|exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)})*/
+        /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], powerset: 1), map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: Container([null|exact=JSExtendableArray|powerset=1], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 1)}, powerset: 0)*/
         [key];
   }
   // We have to reference it somewhere, so that it always gets resolved.
   consume3(aList3);
 }
 
-/*member: aDouble4:[null|exact=JSNumNotInt]*/
+/*member: aDouble4:[null|exact=JSNumNotInt|powerset=1]*/
 dynamic aDouble4 = 42.5;
 
-/*member: aList4:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: aList4:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
 dynamic aList4 = [42];
 
-/*member: consume4:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: consume4:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
 consume4(
-  /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ x,
+  /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ x,
 ) => x;
 
-/*member: test4:[null]*/
+/*member: test4:[null|powerset=1]*/
 test4() {
   var theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4, 'd': 5.5};
-  /*iterator: [exact=LinkedHashMapKeysIterable]*/
-  /*current: [exact=LinkedHashMapKeyIterator]*/
-  /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+  /*iterator: [exact=LinkedHashMapKeysIterable|powerset=0]*/
+  /*current: [exact=LinkedHashMapKeyIterator|powerset=0]*/
+  /*moveNext: [exact=LinkedHashMapKeyIterator|powerset=0]*/
   for (var key
       in theMap
           .
-          /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt], map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: [exact=JSNumNotInt]})*/
+          /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: [exact=JSNumNotInt|powerset=0]}, powerset: 0)*/
           keys) {
     aDouble4 =
         theMap
-        /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt], map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: [exact=JSNumNotInt]})*/
+        /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: [exact=JSNumNotInt|powerset=0]}, powerset: 0)*/
         [key];
   }
   // We have to reference it somewhere, so that it always gets resolved.
   consume4(aList4);
 }
 
-/*member: aDouble5:[null|exact=JSNumNotInt]*/
+/*member: aDouble5:[null|exact=JSNumNotInt|powerset=1]*/
 dynamic aDouble5 = 42.5;
 
-/*member: aList5:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: aList5:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
 dynamic aList5 = [42];
 
-/*member: consume5:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: consume5:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
 consume5(
-  /*Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/ x,
+  /*Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/ x,
 ) => x;
 
-/*member: test5:[null]*/
+/*member: test5:[null|powerset=1]*/
 test5() {
   var theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4, aList5: 5.5};
-  /*iterator: [exact=LinkedHashMapKeysIterable]*/
-  /*current: [exact=LinkedHashMapKeyIterator]*/
-  /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+  /*iterator: [exact=LinkedHashMapKeysIterable|powerset=0]*/
+  /*current: [exact=LinkedHashMapKeyIterator|powerset=0]*/
+  /*moveNext: [exact=LinkedHashMapKeyIterator|powerset=0]*/
   for (var key
       in theMap
           .
-          /*Map([exact=JsLinkedHashMap], key: Union([exact=JSExtendableArray], [exact=JSString]), value: [null|exact=JSNumNotInt])*/
+          /*Map([exact=JsLinkedHashMap|powerset=0], key: Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0), value: [null|exact=JSNumNotInt|powerset=1], powerset: 0)*/
           keys) {
     aDouble5 =
         theMap
-        /*Map([exact=JsLinkedHashMap], key: Union([exact=JSExtendableArray], [exact=JSString]), value: [null|exact=JSNumNotInt])*/
+        /*Map([exact=JsLinkedHashMap|powerset=0], key: Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0), value: [null|exact=JSNumNotInt|powerset=1], powerset: 0)*/
         [key];
   }
   // We have to reference it somewhere, so that it always gets resolved.
   consume5(aList5);
 }
 
-/*member: aDouble6:Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt])*/
+/*member: aDouble6:Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], powerset: 1)*/
 dynamic aDouble6 = 42.5;
-/*member: aList6:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: aList6:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
 dynamic aList6 = [42];
 
-/*member: consume6:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: consume6:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
 consume6(
-  /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ x,
+  /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ x,
 ) => x;
 
-/*member: test6:[null]*/
+/*member: test6:[null|powerset=1]*/
 test6() {
   var theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4, 'd': aList6};
-  /*iterator: [exact=LinkedHashMapKeysIterable]*/
-  /*current: [exact=LinkedHashMapKeyIterator]*/
-  /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+  /*iterator: [exact=LinkedHashMapKeysIterable|powerset=0]*/
+  /*current: [exact=LinkedHashMapKeyIterator|powerset=0]*/
+  /*moveNext: [exact=LinkedHashMapKeyIterator|powerset=0]*/
   for (var key
       in theMap
           .
-          /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt]), map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)})*/
+          /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], powerset: 1), map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)}, powerset: 0)*/
           keys) {
     aDouble6 =
         theMap
-        /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt]), map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)})*/
+        /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], powerset: 1), map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)}, powerset: 0)*/
         [key];
   }
   // We have to reference it somewhere, so that it always gets resolved.
diff --git a/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/lib.dart b/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/lib.dart
index 106d905..bb9aac3 100644
--- a/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/lib.dart
+++ b/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/lib.dart
@@ -4,33 +4,36 @@
 
 class _SECRET {
   const _SECRET();
-  /*member: _SECRET.toString:Value([exact=JSString], value: "SECRET!")*/
+  /*member: _SECRET.toString:Value([exact=JSString|powerset=0], value: "SECRET!", powerset: 0)*/
   @override
   String toString() => "SECRET!";
 }
 
 class C {
-  /*member: C.x:[exact=JSUInt31]*/
+  /*member: C.x:[exact=JSUInt31|powerset=0]*/
   final int x;
 
-  /*member: C.y:Union([exact=JSString], [exact=_SECRET])*/
+  /*member: C.y:Union([exact=JSString|powerset=0], [exact=_SECRET|powerset=0], powerset: 0)*/
   final y;
 
-  /*member: C.a:[exact=C]*/
+  /*member: C.a:[exact=C|powerset=0]*/
   C.a(
-    int /*[exact=JSUInt31]*/ x, [
-    var /*Union([exact=JSString], [exact=_SECRET])*/ b = const _SECRET(),
+    int /*[exact=JSUInt31|powerset=0]*/ x, [
+    var /*Union([exact=JSString|powerset=0], [exact=_SECRET|powerset=0], powerset: 0)*/ b =
+        const _SECRET(),
   ]) : this.x = x,
        this.y = b;
 
-  /*member: C.b:[exact=C]*/
+  /*member: C.b:[exact=C|powerset=0]*/
   C.b(
-    int /*[exact=JSUInt31]*/ x, {
-    var /*Union([exact=JSString], [exact=_SECRET])*/ b = const _SECRET(),
+    int /*[exact=JSUInt31|powerset=0]*/ x, {
+    var /*Union([exact=JSString|powerset=0], [exact=_SECRET|powerset=0], powerset: 0)*/ b =
+        const _SECRET(),
   }) : this.x = x,
        this.y = b;
 
-  /*member: C.toString:[exact=JSString]*/
+  /*member: C.toString:[exact=JSString|powerset=0]*/
   @override
-  String toString() => "C(${ /*[exact=D]*/ x},${ /*[exact=D]*/ y})";
+  String toString() =>
+      "C(${ /*[exact=D|powerset=0]*/ x},${ /*[exact=D|powerset=0]*/ y})";
 }
diff --git a/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/main.dart b/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/main.dart
index f4145a6..6426ce7 100644
--- a/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/main.dart
+++ b/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/main.dart
@@ -10,21 +10,21 @@
 import 'lib.dart';
 
 mixin Mixin {
-  /*member: Mixin.foo:[exact=JSString]*/
+  /*member: Mixin.foo:[exact=JSString|powerset=0]*/
   String get foo => "Mixin:$this";
 }
 
 // ignore: MIXIN_HAS_NO_CONSTRUCTORS
 class D = C with Mixin;
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   // ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
-  print(new D.a(42). /*[exact=D]*/ foo);
+  print(new D.a(42). /*[exact=D|powerset=0]*/ foo);
   // ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
-  print(new D.b(42). /*[exact=D]*/ foo);
+  print(new D.b(42). /*[exact=D|powerset=0]*/ foo);
   // ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
-  print(new D.a(42, "overt"). /*[exact=D]*/ foo);
+  print(new D.a(42, "overt"). /*[exact=D|powerset=0]*/ foo);
   // ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
-  print(new D.b(42, b: "odvert"). /*[exact=D]*/ foo);
+  print(new D.b(42, b: "odvert"). /*[exact=D|powerset=0]*/ foo);
 }
diff --git a/pkg/compiler/test/inference/data/narrowing.dart b/pkg/compiler/test/inference/data/narrowing.dart
index f173338..8994681 100644
--- a/pkg/compiler/test/inference/data/narrowing.dart
+++ b/pkg/compiler/test/inference/data/narrowing.dart
@@ -5,115 +5,117 @@
 /// Regression test for Issue #33761: is-checks and null-checks were assumed to
 /// be true even in nested non-condition contexts.
 
-/*member: argIsNonNull1:[null]*/
-argIsNonNull1(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull1:[null|powerset=1]*/
+argIsNonNull1(/*[exact=JSUInt31|powerset=0]*/ x) {
   print('>> is null: ${x == null}');
 }
 
-/*member: nonNull1:[null]*/
+/*member: nonNull1:[null|powerset=1]*/
 void nonNull1() {
   var x = 1;
-  if (x /*invoke: [subclass=JSInt]*/ == null) return;
+  if (x /*invoke: [subclass=JSInt|powerset=0]*/ == null) return;
   argIsNonNull1(x);
 }
 
-/*member: argIsNonNull2:[null]*/
-argIsNonNull2(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull2:[null|powerset=1]*/
+argIsNonNull2(/*[exact=JSUInt31|powerset=0]*/ x) {
   print('>> is null: ${x == null}');
 }
 
-/*member: nonNull2:[null]*/
+/*member: nonNull2:[null|powerset=1]*/
 void nonNull2() {
   var x = 1;
-  if ((x /*invoke: [subclass=JSInt]*/ == null) /*invoke: [exact=JSBool]*/ ==
+  if ((x /*invoke: [subclass=JSInt|powerset=0]*/ ==
+          null) /*invoke: [exact=JSBool|powerset=0]*/ ==
       true)
     return;
   argIsNonNull2(x);
 }
 
-/*member: argIsNonNull3:[null]*/
-argIsNonNull3(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull3:[null|powerset=1]*/
+argIsNonNull3(/*[exact=JSUInt31|powerset=0]*/ x) {
   print('>> is null: ${x == null}');
 }
 
-/*member: nonNull3:[null]*/
+/*member: nonNull3:[null|powerset=1]*/
 void nonNull3() {
   var x = 1;
-  if ((x /*invoke: [subclass=JSInt]*/ == null) /*invoke: [exact=JSBool]*/ !=
+  if ((x /*invoke: [subclass=JSInt|powerset=0]*/ ==
+          null) /*invoke: [exact=JSBool|powerset=0]*/ !=
       false)
     return;
   argIsNonNull3(x);
 }
 
-/*member: argIsNonNull4:[null]*/
-argIsNonNull4(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull4:[null|powerset=1]*/
+argIsNonNull4(/*[exact=JSUInt31|powerset=0]*/ x) {
   print('>> is null: ${x == null}');
 }
 
-/*member: discard:Value([exact=JSBool], value: false)*/
-discard(/*[exact=JSBool]*/ x) => false;
+/*member: discard:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
+discard(/*[exact=JSBool|powerset=0]*/ x) => false;
 
-/*member: nonNull4:[null]*/
+/*member: nonNull4:[null|powerset=1]*/
 void nonNull4() {
   var x = 1;
-  if (discard(x /*invoke: [subclass=JSInt]*/ != null)) return;
+  if (discard(x /*invoke: [subclass=JSInt|powerset=0]*/ != null)) return;
   argIsNonNull4(x);
 }
 
-/*member: argIsNonNull5:[null]*/
-argIsNonNull5(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull5:[null|powerset=1]*/
+argIsNonNull5(/*[exact=JSUInt31|powerset=0]*/ x) {
   print('>> is null: ${x == null}');
 }
 
-/*member: nonNull5:[null]*/
+/*member: nonNull5:[null|powerset=1]*/
 void nonNull5() {
   var x = 1;
-  if (x /*invoke: [subclass=JSInt]*/ != null ? false : false) return;
+  if (x /*invoke: [subclass=JSInt|powerset=0]*/ != null ? false : false) return;
   argIsNonNull5(x);
 }
 
-/*member: argIsNonNull6:[null]*/
-argIsNonNull6(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull6:[null|powerset=1]*/
+argIsNonNull6(/*[exact=JSUInt31|powerset=0]*/ x) {
   print('>> is null: ${x == null}');
 }
 
-/*member: nonNull6:[null]*/
+/*member: nonNull6:[null|powerset=1]*/
 void nonNull6() {
   var x = 1;
-  if (( /*[exact=JSBool]*/ (/*[exact=JSBool]*/ y) => y && false)(
-    x /*invoke: [subclass=JSInt]*/ != null,
-  ))
+  if (( /*[exact=JSBool|powerset=0]*/ (/*[exact=JSBool|powerset=0]*/ y) =>
+      y && false)(x /*invoke: [subclass=JSInt|powerset=0]*/ != null))
     return;
   argIsNonNull6(x);
 }
 
-/*member: argIsNonNull7:[null]*/
-argIsNonNull7(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull7:[null|powerset=1]*/
+argIsNonNull7(/*[exact=JSUInt31|powerset=0]*/ x) {
   print('>> is null: ${x == null}');
 }
 
-/*member: nonNull7:[null]*/
+/*member: nonNull7:[null|powerset=1]*/
 void nonNull7() {
   var f = false;
   var x = 1;
-  if (f ? (throw x /*invoke: [subclass=JSInt]*/ != null) : false) return;
+  if (f ? (throw x /*invoke: [subclass=JSInt|powerset=0]*/ != null) : false)
+    return;
   argIsNonNull7(x);
 }
 
-/*member: argIsNonNull8:[null]*/
-argIsNonNull8(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull8:[null|powerset=1]*/
+argIsNonNull8(/*[exact=JSUInt31|powerset=0]*/ x) {
   print('>> is null: ${x == null}');
 }
 
-/*member: nonNull8:[null]*/
+/*member: nonNull8:[null|powerset=1]*/
 void nonNull8() {
   var f = false;
   var x = 1;
-  if (f ?? (x /*invoke: [subclass=JSInt]*/ != null)) return;
+  if (f ?? (x /*invoke: [subclass=JSInt|powerset=0]*/ != null)) return;
   argIsNonNull8(x);
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 void main() {
   nonNull1();
   nonNull2();
diff --git a/pkg/compiler/test/inference/data/native.dart b/pkg/compiler/test/inference/data/native.dart
index 61e2cc8..f3f0439 100644
--- a/pkg/compiler/test/inference/data/native.dart
+++ b/pkg/compiler/test/inference/data/native.dart
@@ -2,12 +2,12 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   nativeMethod();
 }
 
-/*member: nativeMethod:[null|subclass=Object]*/
+/*member: nativeMethod:[null|subclass=Object|powerset=1]*/
 nativeMethod()
 // ignore: NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE
 native;
diff --git a/pkg/compiler/test/inference/data/native2.dart b/pkg/compiler/test/inference/data/native2.dart
index 3f568ec..7eeb616 100644
--- a/pkg/compiler/test/inference/data/native2.dart
+++ b/pkg/compiler/test/inference/data/native2.dart
@@ -6,16 +6,16 @@
 import 'dart:_foreign_helper' as foreign show JS;
 import 'dart:html';
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   createElement();
   createRectangle();
 }
 
-/*member: createElement:[subclass=Element]*/
+/*member: createElement:[subclass=Element|powerset=0]*/
 Element createElement()
 // ignore: NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE
 native;
 
-/*member: createRectangle:[subclass=DomRectReadOnly]*/
+/*member: createRectangle:[subclass=DomRectReadOnly|powerset=0]*/
 createRectangle() => foreign.JS('Rectangle', "#", null);
diff --git a/pkg/compiler/test/inference/data/native3.dart b/pkg/compiler/test/inference/data/native3.dart
index f4f1161..50d3b1c 100644
--- a/pkg/compiler/test/inference/data/native3.dart
+++ b/pkg/compiler/test/inference/data/native3.dart
@@ -4,12 +4,12 @@
 
 import 'dart:html';
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   createRectangle();
 }
 
-/*member: createRectangle:[subclass=DomRectReadOnly]*/
+/*member: createRectangle:[subclass=DomRectReadOnly|powerset=0]*/
 Rectangle createRectangle()
 // ignore: NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE
 native;
diff --git a/pkg/compiler/test/inference/data/new.dart b/pkg/compiler/test/inference/data/new.dart
index 233955c8..c849388 100644
--- a/pkg/compiler/test/inference/data/new.dart
+++ b/pkg/compiler/test/inference/data/new.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   generativeConstructorCall();
   factoryConstructorCall2();
@@ -21,10 +21,10 @@
 /// Call default constructor of a field-less class.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {}
 
-/*member: generativeConstructorCall:[exact=Class1]*/
+/*member: generativeConstructorCall:[exact=Class1|powerset=0]*/
 generativeConstructorCall() => Class1();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -32,13 +32,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class3 {
-  /*member: Class3.:[exact=Class3]*/
+  /*member: Class3.:[exact=Class3|powerset=0]*/
   factory Class3() => Class3.named();
-  /*member: Class3.named:[exact=Class3]*/
+  /*member: Class3.named:[exact=Class3|powerset=0]*/
   Class3.named();
 }
 
-/*member: factoryConstructorCall2:[exact=Class3]*/
+/*member: factoryConstructorCall2:[exact=Class3|powerset=0]*/
 factoryConstructorCall2() => Class3();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -46,14 +46,14 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class4a {
-  /*member: Class4a.:[exact=Class4b]*/
+  /*member: Class4a.:[exact=Class4b|powerset=0]*/
   factory Class4a() => Class4b();
 }
 
-/*member: Class4b.:[exact=Class4b]*/
+/*member: Class4b.:[exact=Class4b|powerset=0]*/
 class Class4b implements Class4a {}
 
-/*member: factoryConstructorCall3:[exact=Class4b]*/
+/*member: factoryConstructorCall3:[exact=Class4b|powerset=0]*/
 factoryConstructorCall3() => Class4a();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -61,13 +61,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class5 {
-  final /*member: Class5.field:[exact=JSUInt31]*/ field;
+  final /*member: Class5.field:[exact=JSUInt31|powerset=0]*/ field;
 
-  /*member: Class5.:[exact=Class5]*/
-  Class5(this. /*[exact=JSUInt31]*/ field);
+  /*member: Class5.:[exact=Class5|powerset=0]*/
+  Class5(this. /*[exact=JSUInt31|powerset=0]*/ field);
 }
 
-/*member: classWithFinalFieldInitializer:[exact=Class5]*/
+/*member: classWithFinalFieldInitializer:[exact=Class5|powerset=0]*/
 classWithFinalFieldInitializer() => Class5(0);
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -75,13 +75,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class6 {
-  var /*member: Class6.field:[exact=JSUInt31]*/ field;
+  var /*member: Class6.field:[exact=JSUInt31|powerset=0]*/ field;
 
-  /*member: Class6.:[exact=Class6]*/
-  Class6(this. /*[exact=JSUInt31]*/ field);
+  /*member: Class6.:[exact=Class6|powerset=0]*/
+  Class6(this. /*[exact=JSUInt31|powerset=0]*/ field);
 }
 
-/*member: classWithNonFinalFieldInitializer:[exact=Class6]*/
+/*member: classWithNonFinalFieldInitializer:[exact=Class6|powerset=0]*/
 classWithNonFinalFieldInitializer() => Class6(0);
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -89,13 +89,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class7 {
-  var /*member: Class7.field:[exact=JSUInt31]*/ field;
+  var /*member: Class7.field:[exact=JSUInt31|powerset=0]*/ field;
 
-  /*member: Class7.:[exact=Class7]*/
-  Class7(/*[exact=JSUInt31]*/ value) : this.field = value;
+  /*member: Class7.:[exact=Class7|powerset=0]*/
+  Class7(/*[exact=JSUInt31|powerset=0]*/ value) : this.field = value;
 }
 
-/*member: classWithExplicitFieldInitializer:[exact=Class7]*/
+/*member: classWithExplicitFieldInitializer:[exact=Class7|powerset=0]*/
 classWithExplicitFieldInitializer() => Class7(0);
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -103,15 +103,15 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class8 {
-  var /*member: Class8.field:[exact=JSUInt31]*/ field;
+  var /*member: Class8.field:[exact=JSUInt31|powerset=0]*/ field;
 
-  /*member: Class8.:[exact=Class8]*/
-  Class8(/*[exact=JSUInt31]*/ value) {
-    this. /*update: [exact=Class8]*/ field = value;
+  /*member: Class8.:[exact=Class8|powerset=0]*/
+  Class8(/*[exact=JSUInt31|powerset=0]*/ value) {
+    this. /*update: [exact=Class8|powerset=0]*/ field = value;
   }
 }
 
-/*member: classWithFieldInitializerInBody:[exact=Class8]*/
+/*member: classWithFieldInitializerInBody:[exact=Class8|powerset=0]*/
 classWithFieldInitializerInBody() => Class8(0);
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -120,13 +120,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class9 {
-  var /*member: Class9.field:[null]*/ field = null;
+  var /*member: Class9.field:[null|powerset=1]*/ field = null;
 
-  /*member: Class9.:[exact=Class9]*/
+  /*member: Class9.:[exact=Class9|powerset=0]*/
   Class9() {}
 }
 
-/*member: classWithNullNoFieldInitializerInBody:[exact=Class9]*/
+/*member: classWithNullNoFieldInitializerInBody:[exact=Class9|powerset=0]*/
 classWithNullNoFieldInitializerInBody() => Class9();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -135,15 +135,15 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class10 {
-  var /*member: Class10.field:[exact=JSUInt31]*/ field = null;
+  var /*member: Class10.field:[exact=JSUInt31|powerset=0]*/ field = null;
 
-  /*member: Class10.:[exact=Class10]*/
-  Class10(/*[exact=JSUInt31]*/ value) {
-    this. /*update: [exact=Class10]*/ field = value;
+  /*member: Class10.:[exact=Class10|powerset=0]*/
+  Class10(/*[exact=JSUInt31|powerset=0]*/ value) {
+    this. /*update: [exact=Class10|powerset=0]*/ field = value;
   }
 }
 
-/*member: classWithNullFieldInitializerInBody:[exact=Class10]*/
+/*member: classWithNullFieldInitializerInBody:[exact=Class10|powerset=0]*/
 classWithNullFieldInitializerInBody() => Class10(0);
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -152,18 +152,18 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class11 {
-  var /*member: Class11.field:[null|exact=JSUInt31]*/ field = null;
+  var /*member: Class11.field:[null|exact=JSUInt31|powerset=1]*/ field = null;
 
-  /*member: Class11.a:[exact=Class11]*/
-  Class11.a(/*[exact=JSUInt31]*/ value) {
-    this. /*update: [exact=Class11]*/ field = value;
+  /*member: Class11.a:[exact=Class11|powerset=0]*/
+  Class11.a(/*[exact=JSUInt31|powerset=0]*/ value) {
+    this. /*update: [exact=Class11|powerset=0]*/ field = value;
   }
 
-  /*member: Class11.b:[exact=Class11]*/
+  /*member: Class11.b:[exact=Class11|powerset=0]*/
   Class11.b() {}
 }
 
-/*member: classWithNullMaybeFieldInitializerInBody:[exact=Class11]*/
+/*member: classWithNullMaybeFieldInitializerInBody:[exact=Class11|powerset=0]*/
 classWithNullMaybeFieldInitializerInBody() {
   Class11.a(0);
   return Class11.b();
@@ -174,13 +174,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class12 {
-  final /*member: Class12.field:[null]*/ field = null;
+  final /*member: Class12.field:[null|powerset=1]*/ field = null;
 
-  /*member: Class12.:[exact=Class12]*/
+  /*member: Class12.:[exact=Class12|powerset=0]*/
   Class12();
 }
 
-/*member: classWithNullFinalFieldInitializer:[exact=Class12]*/
+/*member: classWithNullFinalFieldInitializer:[exact=Class12|powerset=0]*/
 classWithNullFinalFieldInitializer() {
   return Class12();
 }
diff --git a/pkg/compiler/test/inference/data/no_such_method.dart b/pkg/compiler/test/inference/data/no_such_method.dart
index 867c36a..fe36531 100644
--- a/pkg/compiler/test/inference/data/no_such_method.dart
+++ b/pkg/compiler/test/inference/data/no_such_method.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   missingGetter();
   missingMethod();
@@ -14,119 +14,125 @@
 // Access missing getter.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  /*member: Class1.noSuchMethod:[exact=JSUInt31]*/
+  /*member: Class1.noSuchMethod:[exact=JSUInt31|powerset=0]*/
   noSuchMethod(
     Invocation
-    /*spec.[null|subclass=Object]*/
-    /*prod.[exact=JSInvocationMirror]*/
+    /*spec.[null|subclass=Object|powerset=1]*/
+    /*prod.[exact=JSInvocationMirror|powerset=0]*/
     _,
   ) => 42;
 
-  /*member: Class1.method:[exact=JSUInt31]*/
+  /*member: Class1.method:[exact=JSUInt31|powerset=0]*/
   method() {
     dynamic a = this;
-    return a. /*[exact=Class1]*/ missingGetter;
+    return a. /*[exact=Class1|powerset=0]*/ missingGetter;
   }
 }
 
-/*member: missingGetter:[exact=JSUInt31]*/
-missingGetter() => Class1(). /*invoke: [exact=Class1]*/ method();
+/*member: missingGetter:[exact=JSUInt31|powerset=0]*/
+missingGetter() => Class1(). /*invoke: [exact=Class1|powerset=0]*/ method();
 
 ////////////////////////////////////////////////////////////////////////////////
 // Invoke missing method.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
 class Class2 {
-  /*member: Class2.noSuchMethod:[exact=JSUInt31]*/
+  /*member: Class2.noSuchMethod:[exact=JSUInt31|powerset=0]*/
   noSuchMethod(
     Invocation
-    /*spec.[null|subclass=Object]*/
-    /*prod.[exact=JSInvocationMirror]*/
+    /*spec.[null|subclass=Object|powerset=1]*/
+    /*prod.[exact=JSInvocationMirror|powerset=0]*/
     _,
   ) => 42;
 
-  /*member: Class2.method:[exact=JSUInt31]*/
+  /*member: Class2.method:[exact=JSUInt31|powerset=0]*/
   method() {
     dynamic a = this;
-    return a. /*invoke: [exact=Class2]*/ missingMethod();
+    return a. /*invoke: [exact=Class2|powerset=0]*/ missingMethod();
   }
 }
 
-/*member: missingMethod:[exact=JSUInt31]*/
-missingMethod() => Class2(). /*invoke: [exact=Class2]*/ method();
+/*member: missingMethod:[exact=JSUInt31|powerset=0]*/
+missingMethod() => Class2(). /*invoke: [exact=Class2|powerset=0]*/ method();
 
 ////////////////////////////////////////////////////////////////////////////////
 // Pass closure to missing method.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
 class Class3 {
-  /*member: Class3.noSuchMethod:[null|subclass=Object]*/
+  /*member: Class3.noSuchMethod:[null|subclass=Object|powerset=1]*/
   noSuchMethod(
     Invocation
-    /*spec.[null|subclass=Object]*/
-    /*prod.[exact=JSInvocationMirror]*/
+    /*spec.[null|subclass=Object|powerset=1]*/
+    /*prod.[exact=JSInvocationMirror|powerset=0]*/
     invocation,
   ) {
     return invocation
         .
-        /*[exact=JSInvocationMirror]*/
+        /*[exact=JSInvocationMirror|powerset=0]*/
         positionalArguments
         .
-        /*[exact=JSUnmodifiableArray]*/
+        /*[exact=JSUnmodifiableArray|powerset=0]*/
         first;
   }
 
-  /*member: Class3.method:[null|subclass=Object]*/
+  /*member: Class3.method:[null|subclass=Object|powerset=1]*/
   method() {
     dynamic a = this;
-    return a. /*invoke: [exact=Class3]*/ missingMethod(
-      /*[null]*/ (/*[null|subclass=Object]*/ parameter) {},
+    return a. /*invoke: [exact=Class3|powerset=0]*/ missingMethod(
+      /*[null|powerset=1]*/ (
+        /*[null|subclass=Object|powerset=1]*/ parameter,
+      ) {},
     )(0);
   }
 }
 
-/*member: closureThroughMissingMethod:[null|subclass=Object]*/
-closureThroughMissingMethod() => Class3(). /*invoke: [exact=Class3]*/ method();
+/*member: closureThroughMissingMethod:[null|subclass=Object|powerset=1]*/
+closureThroughMissingMethod() =>
+    Class3(). /*invoke: [exact=Class3|powerset=0]*/ method();
 
 ////////////////////////////////////////////////////////////////////////////////
 // Pass closure to missing setter.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
 class Class4 {
-  /*member: Class4.field:[null|subclass=Object]*/
+  /*member: Class4.field:[null|subclass=Object|powerset=1]*/
   var field;
 
-  /*member: Class4.noSuchMethod:[null]*/
+  /*member: Class4.noSuchMethod:[null|powerset=1]*/
   noSuchMethod(
     Invocation
-    /*spec.[null|subclass=Object]*/
-    /*prod.[exact=JSInvocationMirror]*/
+    /*spec.[null|subclass=Object|powerset=1]*/
+    /*prod.[exact=JSInvocationMirror|powerset=0]*/
     invocation,
   ) {
-    this. /*update: [exact=Class4]*/ field =
+    this. /*update: [exact=Class4|powerset=0]*/ field =
         invocation
             .
-            /*[exact=JSInvocationMirror]*/
+            /*[exact=JSInvocationMirror|powerset=0]*/
             positionalArguments
             .
-            /*[exact=JSUnmodifiableArray]*/
+            /*[exact=JSUnmodifiableArray|powerset=0]*/
             first;
     return null;
   }
 
-  /*member: Class4.method:[null]*/
+  /*member: Class4.method:[null|powerset=1]*/
   method() {
     dynamic a = this;
-    a. /*update: [exact=Class4]*/ missingSetter =
-        /*[null]*/ (/*[null|subclass=Object]*/ parameter) {};
-    a. /*invoke: [exact=Class4]*/ field(0);
+    a. /*update: [exact=Class4|powerset=0]*/ missingSetter =
+        /*[null|powerset=1]*/ (
+          /*[null|subclass=Object|powerset=1]*/ parameter,
+        ) {};
+    a. /*invoke: [exact=Class4|powerset=0]*/ field(0);
   }
 }
 
-/*member: closureThroughMissingSetter:[null]*/
-closureThroughMissingSetter() => Class4(). /*invoke: [exact=Class4]*/ method();
+/*member: closureThroughMissingSetter:[null|powerset=1]*/
+closureThroughMissingSetter() =>
+    Class4(). /*invoke: [exact=Class4|powerset=0]*/ method();
diff --git a/pkg/compiler/test/inference/data/no_such_method1.dart b/pkg/compiler/test/inference/data/no_such_method1.dart
index a141d24..e0f52dd 100644
--- a/pkg/compiler/test/inference/data/no_such_method1.dart
+++ b/pkg/compiler/test/inference/data/no_such_method1.dart
@@ -2,60 +2,60 @@
 // 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.
 
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
 class A {
-  /*member: A.noSuchMethod:[exact=JSUInt31]*/
+  /*member: A.noSuchMethod:[exact=JSUInt31|powerset=0]*/
   noSuchMethod(
-    /*spec.[null|subclass=Object]*/
-    /*prod.[exact=JSInvocationMirror]*/
+    /*spec.[null|subclass=Object|powerset=1]*/
+    /*prod.[exact=JSInvocationMirror|powerset=0]*/
     im,
   ) => 42;
 }
 
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
 class B extends A {
-  /*member: B.foo:[exact=JSUInt31]*/
-  /*invoke: [subclass=B]*/
+  /*member: B.foo:[exact=JSUInt31|powerset=0]*/
+  /*invoke: [subclass=B|powerset=0]*/
   foo();
 }
 
-/*member: C.:[exact=C]*/
+/*member: C.:[exact=C|powerset=0]*/
 class C extends B {
-  /*member: C.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+  /*member: C.foo:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
   foo() => {};
 }
 
-/*member: a:[null|subclass=B]*/
+/*member: a:[null|subclass=B|powerset=1]*/
 dynamic a =
     [new B(), C()]
-    /*Container([exact=JSExtendableArray], element: [subclass=B], length: 2)*/
+    /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=B|powerset=0], length: 2, powerset: 0)*/
     [0];
 
-/*member: test1:[exact=JSUInt31]*/
+/*member: test1:[exact=JSUInt31|powerset=0]*/
 test1() {
   dynamic e = A();
-  return e. /*invoke: [exact=A]*/ foo();
+  return e. /*invoke: [exact=A|powerset=0]*/ foo();
 }
 
-/*member: test2:Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/
-test2() => a. /*invoke: [null|subclass=B]*/ foo();
+/*member: test2:Union([exact=JSUInt31|powerset=0], [subclass=JsLinkedHashMap|powerset=0], powerset: 0)*/
+test2() => a. /*invoke: [null|subclass=B|powerset=1]*/ foo();
 
-/*member: test3:[exact=JSUInt31]*/
-test3() => B(). /*invoke: [exact=B]*/ foo();
+/*member: test3:[exact=JSUInt31|powerset=0]*/
+test3() => B(). /*invoke: [exact=B|powerset=0]*/ foo();
 
-/*member: test4:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test4() => C(). /*invoke: [exact=C]*/ foo();
+/*member: test4:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test4() => C(). /*invoke: [exact=C|powerset=0]*/ foo();
 
-/*member: test5:Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/
+/*member: test5:Union([exact=JSUInt31|powerset=0], [subclass=JsLinkedHashMap|powerset=0], powerset: 0)*/
 test5() {
   dynamic e = (a ? A() : B());
-  return e. /*invoke: [subclass=A]*/ foo();
+  return e. /*invoke: [subclass=A|powerset=0]*/ foo();
 }
 
-/*member: test6:Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/
-test6() => (a ? B() : C()). /*invoke: [subclass=B]*/ foo();
+/*member: test6:Union([exact=JSUInt31|powerset=0], [subclass=JsLinkedHashMap|powerset=0], powerset: 0)*/
+test6() => (a ? B() : C()). /*invoke: [subclass=B|powerset=0]*/ foo();
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   test1();
   test2();
diff --git a/pkg/compiler/test/inference/data/no_such_method2.dart b/pkg/compiler/test/inference/data/no_such_method2.dart
index 94bdd61..4457cdd 100644
--- a/pkg/compiler/test/inference/data/no_such_method2.dart
+++ b/pkg/compiler/test/inference/data/no_such_method2.dart
@@ -2,103 +2,107 @@
 // 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.
 
-/*member: A.:[subclass=B]*/
+/*member: A.:[subclass=B|powerset=0]*/
 abstract class A {
-  /*member: A.noSuchMethod:[exact=JSUInt31]*/
+  /*member: A.noSuchMethod:[exact=JSUInt31|powerset=0]*/
   noSuchMethod(
-    /*spec.[null|subclass=Object]*/
-    /*prod.[exact=JSInvocationMirror]*/
+    /*spec.[null|subclass=Object|powerset=1]*/
+    /*prod.[exact=JSInvocationMirror|powerset=0]*/
     im,
   ) => 42;
 }
 
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
 class B extends A {
-  /*member: B.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+  /*member: B.foo:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
   foo() => {};
 }
 
-/*member: C.:[exact=C]*/
+/*member: C.:[exact=C|powerset=0]*/
 class C extends B {
-  /*member: C.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+  /*member: C.foo:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
   foo() => {};
 }
 
-/*member: D.:[exact=D]*/
+/*member: D.:[exact=D|powerset=0]*/
 class D implements A {
-  /*member: D.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+  /*member: D.foo:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
   foo() => {};
 
-  /*member: D.noSuchMethod:[exact=JSNumNotInt]*/
+  /*member: D.noSuchMethod:[exact=JSNumNotInt|powerset=0]*/
   noSuchMethod(
-    /*prod.[exact=JSInvocationMirror]*/
-    /*spec.[null|subclass=Object]*/
+    /*prod.[exact=JSInvocationMirror|powerset=0]*/
+    /*spec.[null|subclass=Object|powerset=1]*/
     im,
   ) => 42.5;
 }
 
-/*member: a:Union(null, [exact=D], [subclass=B])*/
+/*member: a:Union(null, [exact=D|powerset=0], [subclass=B|powerset=0], powerset: 1)*/
 dynamic a =
     [new B(), C(), D()]
-    /*Container([exact=JSExtendableArray], element: Union([exact=D], [subclass=B]), length: 3)*/
+    /*Container([exact=JSExtendableArray|powerset=0], element: Union([exact=D|powerset=0], [subclass=B|powerset=0], powerset: 0), length: 3, powerset: 0)*/
     [0];
 
-/*member: test1:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test1() => a. /*invoke: Union(null, [exact=D], [subclass=B])*/ foo();
+/*member: test1:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test1() =>
+    a. /*invoke: Union(null, [exact=D|powerset=0], [subclass=B|powerset=0], powerset: 1)*/ foo();
 
-/*member: test2:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test2() => B(). /*invoke: [exact=B]*/ foo();
+/*member: test2:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test2() => B(). /*invoke: [exact=B|powerset=0]*/ foo();
 
-/*member: test3:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test3() => C(). /*invoke: [exact=C]*/ foo();
+/*member: test3:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test3() => C(). /*invoke: [exact=C|powerset=0]*/ foo();
 
-/*member: test4:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test4() => (a ? B() : C()). /*invoke: [subclass=B]*/ foo();
+/*member: test4:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test4() => (a ? B() : C()). /*invoke: [subclass=B|powerset=0]*/ foo();
 
-/*member: test5:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+/*member: test5:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
 test5() {
   dynamic e = (a ? B() : D());
-  return e. /*invoke: Union([exact=B], [exact=D])*/ foo();
+  return e
+      . /*invoke: Union([exact=B|powerset=0], [exact=D|powerset=0], powerset: 0)*/ foo();
 }
 
 // Can hit A.noSuchMethod, D.noSuchMethod and Object.noSuchMethod.
-/*member: test6:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
-test6() => a. /*invoke: Union(null, [exact=D], [subclass=B])*/ bar();
+/*member: test6:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+test6() =>
+    a. /*invoke: Union(null, [exact=D|powerset=0], [subclass=B|powerset=0], powerset: 1)*/ bar();
 
 // Can hit A.noSuchMethod.
-/*member: test7:[exact=JSUInt31]*/
+/*member: test7:[exact=JSUInt31|powerset=0]*/
 test7() {
   dynamic e = B();
-  return e. /*invoke: [exact=B]*/ bar();
+  return e. /*invoke: [exact=B|powerset=0]*/ bar();
 }
 
-/*member: test8:[exact=JSUInt31]*/
+/*member: test8:[exact=JSUInt31|powerset=0]*/
 test8() {
   dynamic e = C();
-  return e. /*invoke: [exact=C]*/ bar();
+  return e. /*invoke: [exact=C|powerset=0]*/ bar();
 }
 
-/*member: test9:[exact=JSUInt31]*/
+/*member: test9:[exact=JSUInt31|powerset=0]*/
 test9() {
   dynamic e = (a ? B() : C());
-  return e. /*invoke: [subclass=B]*/ bar();
+  return e. /*invoke: [subclass=B|powerset=0]*/ bar();
 }
 
 // Can hit A.noSuchMethod and D.noSuchMethod.
-/*member: test10:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: test10:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 test10() {
   dynamic e = (a ? B() : D());
-  return e. /*invoke: Union([exact=B], [exact=D])*/ bar();
+  return e
+      . /*invoke: Union([exact=B|powerset=0], [exact=D|powerset=0], powerset: 0)*/ bar();
 }
 
 // Can hit D.noSuchMethod.
-/*member: test11:[exact=JSNumNotInt]*/
+/*member: test11:[exact=JSNumNotInt|powerset=0]*/
 test11() {
   dynamic e = D();
-  return e. /*invoke: [exact=D]*/ bar();
+  return e. /*invoke: [exact=D|powerset=0]*/ bar();
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   test1();
   test2();
diff --git a/pkg/compiler/test/inference/data/no_such_method3.dart b/pkg/compiler/test/inference/data/no_such_method3.dart
index 342fdb5..f222862 100644
--- a/pkg/compiler/test/inference/data/no_such_method3.dart
+++ b/pkg/compiler/test/inference/data/no_such_method3.dart
@@ -2,60 +2,60 @@
 // 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.
 
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
 class A {
   // We may ignore this for type inference because syntactically it always
   // throws an exception.
-  /*member: A.noSuchMethod:[empty]*/
+  /*member: A.noSuchMethod:[empty|powerset=0]*/
   noSuchMethod(
-    /*spec.[null|subclass=Object]*/
-    /*prod.[exact=JSInvocationMirror]*/
+    /*spec.[null|subclass=Object|powerset=1]*/
+    /*prod.[exact=JSInvocationMirror|powerset=0]*/
     im,
   ) => throw 'foo';
 }
 
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
 class B extends A {
-  /*member: B.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+  /*member: B.foo:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
   foo() => {};
 }
 
-/*member: C.:[exact=C]*/
+/*member: C.:[exact=C|powerset=0]*/
 class C extends B {
-  /*member: C.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+  /*member: C.foo:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
   foo() => {};
 }
 
-/*member: a:[null|subclass=B]*/
+/*member: a:[null|subclass=B|powerset=1]*/
 dynamic a =
     [new B(), C()]
-    /*Container([exact=JSExtendableArray], element: [subclass=B], length: 2)*/
+    /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=B|powerset=0], length: 2, powerset: 0)*/
     [0];
-/*member: test1:[empty]*/
+/*member: test1:[empty|powerset=0]*/
 test1() {
   dynamic e = A();
-  return e. /*invoke: [exact=A]*/ foo();
+  return e. /*invoke: [exact=A|powerset=0]*/ foo();
 }
 
-/*member: test2:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test2() => a. /*invoke: [null|subclass=B]*/ foo();
+/*member: test2:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test2() => a. /*invoke: [null|subclass=B|powerset=1]*/ foo();
 
-/*member: test3:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test3() => B(). /*invoke: [exact=B]*/ foo();
+/*member: test3:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test3() => B(). /*invoke: [exact=B|powerset=0]*/ foo();
 
-/*member: test4:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test4() => C(). /*invoke: [exact=C]*/ foo();
+/*member: test4:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test4() => C(). /*invoke: [exact=C|powerset=0]*/ foo();
 
-/*member: test5:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+/*member: test5:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
 test5() {
   dynamic e = (a ? A() : B());
-  return e. /*invoke: [subclass=A]*/ foo();
+  return e. /*invoke: [subclass=A|powerset=0]*/ foo();
 }
 
-/*member: test6:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test6() => (a ? B() : C()). /*invoke: [subclass=B]*/ foo();
+/*member: test6:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test6() => (a ? B() : C()). /*invoke: [subclass=B|powerset=0]*/ foo();
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   test1();
   test2();
diff --git a/pkg/compiler/test/inference/data/no_such_method4.dart b/pkg/compiler/test/inference/data/no_such_method4.dart
index e14ebf1..8ac3852 100644
--- a/pkg/compiler/test/inference/data/no_such_method4.dart
+++ b/pkg/compiler/test/inference/data/no_such_method4.dart
@@ -2,56 +2,56 @@
 // 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.
 
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
 class A {
   // We may ignore this for type inference because it forwards to a default
   // noSuchMethod implementation, which always throws an exception.
   noSuchMethod(im) => super.noSuchMethod(im);
 }
 
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
 class B extends A {
-  /*member: B.foo:Dictionary([exact=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+  /*member: B.foo:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
   foo() => {};
 }
 
-/*member: C.:[exact=C]*/
+/*member: C.:[exact=C|powerset=0]*/
 class C extends B {
-  /*member: C.foo:Dictionary([exact=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+  /*member: C.foo:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
   foo() => {};
 }
 
-/*member: a:[null|subclass=B]*/
+/*member: a:[null|subclass=B|powerset=1]*/
 dynamic a =
     [new B(), C()]
-    /*Container([exact=JSExtendableArray], element: [subclass=B], length: 2)*/
+    /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=B|powerset=0], length: 2, powerset: 0)*/
     [0];
 
-/*member: test1:[empty]*/
+/*member: test1:[empty|powerset=0]*/
 test1() {
   dynamic e = A();
-  return e. /*invoke: [exact=A]*/ foo();
+  return e. /*invoke: [exact=A|powerset=0]*/ foo();
 }
 
-/*member: test2:Dictionary([exact=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test2() => a. /*invoke: [null|subclass=B]*/ foo();
+/*member: test2:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test2() => a. /*invoke: [null|subclass=B|powerset=1]*/ foo();
 
-/*member: test3:Dictionary([exact=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test3() => B(). /*invoke: [exact=B]*/ foo();
+/*member: test3:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test3() => B(). /*invoke: [exact=B|powerset=0]*/ foo();
 
-/*member: test4:Dictionary([exact=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test4() => C(). /*invoke: [exact=C]*/ foo();
+/*member: test4:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test4() => C(). /*invoke: [exact=C|powerset=0]*/ foo();
 
-/*member: test5:Dictionary([exact=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+/*member: test5:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
 test5() {
   dynamic e = (a ? A() : B());
-  return e. /*invoke: [subclass=A]*/ foo();
+  return e. /*invoke: [subclass=A|powerset=0]*/ foo();
 }
 
-/*member: test6:Dictionary([exact=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test6() => (a ? B() : C()). /*invoke: [subclass=B]*/ foo();
+/*member: test6:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test6() => (a ? B() : C()). /*invoke: [subclass=B|powerset=0]*/ foo();
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   test1();
   test2();
diff --git a/pkg/compiler/test/inference/data/non_null.dart b/pkg/compiler/test/inference/data/non_null.dart
index a23be1f..f44909d 100644
--- a/pkg/compiler/test/inference/data/non_null.dart
+++ b/pkg/compiler/test/inference/data/non_null.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   nonNullStaticField();
   nonNullInstanceField1();
@@ -10,40 +10,42 @@
   nonNullLocal();
 }
 
-/*member: staticField:[null|exact=JSUInt31]*/
+/*member: staticField:[null|exact=JSUInt31|powerset=1]*/
 var staticField;
 
-/*member: nonNullStaticField:[exact=JSUInt31]*/
+/*member: nonNullStaticField:[exact=JSUInt31|powerset=0]*/
 nonNullStaticField() => staticField ??= 42;
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  /*member: Class1.field:[null|exact=JSUInt31]*/
+  /*member: Class1.field:[null|exact=JSUInt31|powerset=1]*/
   var field;
 }
 
-/*member: nonNullInstanceField1:[exact=JSUInt31]*/
+/*member: nonNullInstanceField1:[exact=JSUInt31|powerset=0]*/
 nonNullInstanceField1() {
-  return Class1(). /*[exact=Class1]*/ /*update: [exact=Class1]*/ field ??= 42;
+  return Class1()
+      . /*[exact=Class1|powerset=0]*/ /*update: [exact=Class1|powerset=0]*/ field ??= 42;
 }
 
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
 class Class2 {
-  /*member: Class2.field:[null|exact=JSUInt31]*/
+  /*member: Class2.field:[null|exact=JSUInt31|powerset=1]*/
   var field;
 
-  /*member: Class2.method:[exact=JSUInt31]*/
+  /*member: Class2.method:[exact=JSUInt31|powerset=0]*/
   method() {
-    return /*[exact=Class2]*/ /*update: [exact=Class2]*/ field ??= 42;
+    return /*[exact=Class2|powerset=0]*/ /*update: [exact=Class2|powerset=0]*/ field ??=
+        42;
   }
 }
 
-/*member: nonNullInstanceField2:[exact=JSUInt31]*/
+/*member: nonNullInstanceField2:[exact=JSUInt31|powerset=0]*/
 nonNullInstanceField2() {
-  return Class2(). /*invoke: [exact=Class2]*/ method();
+  return Class2(). /*invoke: [exact=Class2|powerset=0]*/ method();
 }
 
-/*member: nonNullLocal:[exact=JSUInt31]*/
+/*member: nonNullLocal:[exact=JSUInt31|powerset=0]*/
 nonNullLocal() {
   var local = null;
   return local ??= 42;
diff --git a/pkg/compiler/test/inference/data/null.dart b/pkg/compiler/test/inference/data/null.dart
index ec7f4bf..e9db384 100644
--- a/pkg/compiler/test/inference/data/null.dart
+++ b/pkg/compiler/test/inference/data/null.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   ifThenNullCheck(0);
   ifThenNullCheck(null);
@@ -22,84 +22,84 @@
   ifThenNotNullGradualCheck2(null, 0);
 }
 
-/*member: ifThenNullCheck:[exact=JSUInt31]*/
-ifThenNullCheck(int? /*[null|exact=JSUInt31]*/ value) {
-  if (value /*invoke: [null|subclass=JSInt]*/ == null) {
+/*member: ifThenNullCheck:[exact=JSUInt31|powerset=0]*/
+ifThenNullCheck(int? /*[null|exact=JSUInt31|powerset=1]*/ value) {
+  if (value /*invoke: [null|subclass=JSInt|powerset=1]*/ == null) {
     return 0;
   }
   return value;
 }
 
-/*member: ifThenElseNullCheck:[exact=JSUInt31]*/
-ifThenElseNullCheck(int? /*[null|exact=JSUInt31]*/ value) {
-  if (value /*invoke: [null|subclass=JSInt]*/ == null) {
+/*member: ifThenElseNullCheck:[exact=JSUInt31|powerset=0]*/
+ifThenElseNullCheck(int? /*[null|exact=JSUInt31|powerset=1]*/ value) {
+  if (value /*invoke: [null|subclass=JSInt|powerset=1]*/ == null) {
     return 0;
   } else {
     return value;
   }
 }
 
-/*member: ifNotThenNullCheck:[exact=JSUInt31]*/
-ifNotThenNullCheck(int? /*[null|exact=JSUInt31]*/ value) {
-  if (value /*invoke: [null|subclass=JSInt]*/ != null) {
+/*member: ifNotThenNullCheck:[exact=JSUInt31|powerset=0]*/
+ifNotThenNullCheck(int? /*[null|exact=JSUInt31|powerset=1]*/ value) {
+  if (value /*invoke: [null|subclass=JSInt|powerset=1]*/ != null) {
     return value;
   }
   return 0;
 }
 
-/*member: ifNotThenElseNullCheck:[exact=JSUInt31]*/
-ifNotThenElseNullCheck(int? /*[null|exact=JSUInt31]*/ value) {
-  if (value /*invoke: [null|subclass=JSInt]*/ != null) {
+/*member: ifNotThenElseNullCheck:[exact=JSUInt31|powerset=0]*/
+ifNotThenElseNullCheck(int? /*[null|exact=JSUInt31|powerset=1]*/ value) {
+  if (value /*invoke: [null|subclass=JSInt|powerset=1]*/ != null) {
     return value;
   } else {
     return 0;
   }
 }
 
-/*member: ifThenNotNullComplexCheck:[exact=JSUInt31]*/
+/*member: ifThenNotNullComplexCheck:[exact=JSUInt31|powerset=0]*/
 ifThenNotNullComplexCheck(
-  int? /*[null|exact=JSUInt31]*/ a,
-  int? /*[null|exact=JSUInt31]*/ b,
+  int? /*[null|exact=JSUInt31|powerset=1]*/ a,
+  int? /*[null|exact=JSUInt31|powerset=1]*/ b,
 ) {
-  if (a /*invoke: [null|subclass=JSInt]*/ != null &&
-      a /*invoke: [exact=JSUInt31]*/ != b) {
+  if (a /*invoke: [null|subclass=JSInt|powerset=1]*/ != null &&
+      a /*invoke: [exact=JSUInt31|powerset=0]*/ != b) {
     return a;
   }
   return 0;
 }
 
-/*member: ifThenElseNotNullComplexCheck:[null|exact=JSUInt31]*/
+/*member: ifThenElseNotNullComplexCheck:[null|exact=JSUInt31|powerset=1]*/
 ifThenElseNotNullComplexCheck(
-  int? /*[null|exact=JSUInt31]*/ a,
-  int? /*[null|exact=JSUInt31]*/ b,
+  int? /*[null|exact=JSUInt31|powerset=1]*/ a,
+  int? /*[null|exact=JSUInt31|powerset=1]*/ b,
 ) {
-  if (a /*invoke: [null|subclass=JSInt]*/ != null &&
-      a /*invoke: [exact=JSUInt31]*/ != b) {
+  if (a /*invoke: [null|subclass=JSInt|powerset=1]*/ != null &&
+      a /*invoke: [exact=JSUInt31|powerset=0]*/ != b) {
     return a;
   }
   return a;
 }
 
-/*member: ifThenNotNullGradualCheck1:[exact=JSUInt31]*/
+/*member: ifThenNotNullGradualCheck1:[exact=JSUInt31|powerset=0]*/
 ifThenNotNullGradualCheck1(
-  int? /*[null|exact=JSUInt31]*/ a,
-  int /*[exact=JSUInt31]*/ b,
+  int? /*[null|exact=JSUInt31|powerset=1]*/ a,
+  int /*[exact=JSUInt31|powerset=0]*/ b,
 ) {
-  if (a /*invoke: [null|exact=JSUInt31]*/ != b) {
-    if (a /*invoke: [null|subclass=JSInt]*/ != null) {
+  if (a /*invoke: [null|exact=JSUInt31|powerset=1]*/ != b) {
+    if (a /*invoke: [null|subclass=JSInt|powerset=1]*/ != null) {
       return a;
     }
   }
   return 0;
 }
 
-/*member: ifThenNotNullGradualCheck2:[exact=JSUInt31]*/
+/*member: ifThenNotNullGradualCheck2:[exact=JSUInt31|powerset=0]*/
 ifThenNotNullGradualCheck2(
-  int? /*[null|exact=JSUInt31]*/ a,
-  int /*[exact=JSUInt31]*/ b,
+  int? /*[null|exact=JSUInt31|powerset=1]*/ a,
+  int /*[exact=JSUInt31|powerset=0]*/ b,
 ) {
-  if (a /*invoke: [null|subclass=JSInt]*/ != null) {
-    if (a /*invoke: [exact=JSUInt31]*/ != b) {
+  if (a /*invoke: [null|subclass=JSInt|powerset=1]*/ != null) {
+    if (a /*invoke: [exact=JSUInt31|powerset=0]*/ != b) {
       return a;
     }
   }
diff --git a/pkg/compiler/test/inference/data/optimizer_hints.dart b/pkg/compiler/test/inference/data/optimizer_hints.dart
index 96e66f2..0e029bf 100644
--- a/pkg/compiler/test/inference/data/optimizer_hints.dart
+++ b/pkg/compiler/test/inference/data/optimizer_hints.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   assumeDynamic();
   notAssumeDynamic();
@@ -18,11 +18,11 @@
 // the 'dynamic' type.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _assumeDynamic:[null|subclass=Object]*/
+/*member: _assumeDynamic:[null|subclass=Object|powerset=1]*/
 @pragma('dart2js:assumeDynamic')
-_assumeDynamic(/*[null|subclass=Object]*/ o) => o;
+_assumeDynamic(/*[null|subclass=Object|powerset=1]*/ o) => o;
 
-/*member: assumeDynamic:[null]*/
+/*member: assumeDynamic:[null|powerset=1]*/
 assumeDynamic() {
   _assumeDynamic(0);
 }
@@ -31,10 +31,10 @@
 // As above but without the annotation.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _notAssumeDynamic:[exact=JSUInt31]*/
-_notAssumeDynamic(/*[exact=JSUInt31]*/ o) => o;
+/*member: _notAssumeDynamic:[exact=JSUInt31|powerset=0]*/
+_notAssumeDynamic(/*[exact=JSUInt31|powerset=0]*/ o) => o;
 
-/*member: notAssumeDynamic:[null]*/
+/*member: notAssumeDynamic:[null|powerset=1]*/
 notAssumeDynamic() {
   _notAssumeDynamic(0);
 }
@@ -43,7 +43,7 @@
 // No annotation is needed to trust return type annotation.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: trustReturnTypeString:[exact=JSString]*/
+/*member: trustReturnTypeString:[exact=JSString|powerset=0]*/
 String trustReturnTypeString() {
   return _assumeDynamic(0);
 }
@@ -52,10 +52,10 @@
 // No annotation is needed to trust parameter type annotation.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _trustParameterTypeString:[null]*/
-_trustParameterTypeString(String /*[exact=JSString]*/ o) {}
+/*member: _trustParameterTypeString:[null|powerset=1]*/
+_trustParameterTypeString(String /*[exact=JSString|powerset=0]*/ o) {}
 
-/*member: trustParameterTypeString:[null]*/
+/*member: trustParameterTypeString:[null|powerset=1]*/
 trustParameterTypeString() {
   _trustParameterTypeString(_assumeDynamic(0));
 }
diff --git a/pkg/compiler/test/inference/data/parameters_trust.dart b/pkg/compiler/test/inference/data/parameters_trust.dart
index 7420aed..610b3aa 100644
--- a/pkg/compiler/test/inference/data/parameters_trust.dart
+++ b/pkg/compiler/test/inference/data/parameters_trust.dart
@@ -4,7 +4,7 @@
 
 import 'package:expect/expect.dart';
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   trustParameters();
 }
@@ -13,19 +13,19 @@
 // Test that we trust the explicit type of a parameter.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _trustParameters:[exact=JSUInt31]*/
+/*member: _trustParameters:[exact=JSUInt31|powerset=0]*/
 _trustParameters(
   int
-  /*spec.Union([exact=JSString], [exact=JSUInt31])*/
-  /*prod.[exact=JSUInt31]*/
+  /*spec.Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+  /*prod.[exact=JSUInt31|powerset=0]*/
   i,
 ) {
   return i;
 }
 
-/*member: trustParameters:[null]*/
+/*member: trustParameters:[null|powerset=1]*/
 trustParameters() {
   dynamic f = _trustParameters;
   Expect.equals(0, f(0));
-  Expect.throws(/*[null|subclass=Object]*/ () => f('foo'));
+  Expect.throws(/*[null|subclass=Object|powerset=1]*/ () => f('foo'));
 }
diff --git a/pkg/compiler/test/inference/data/postfix.dart b/pkg/compiler/test/inference/data/postfix.dart
index 4dd52f2..6c55d30 100644
--- a/pkg/compiler/test/inference/data/postfix.dart
+++ b/pkg/compiler/test/inference/data/postfix.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   localPostfixInc();
   localPostfixDec();
@@ -18,146 +18,146 @@
 // Postfix increment on local variable.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: localPostfixInc:[exact=JSUInt31]*/
+/*member: localPostfixInc:[exact=JSUInt31|powerset=0]*/
 localPostfixInc() {
   var local;
   if (local == null) {
     local = 0;
   }
-  return local /*invoke: [exact=JSUInt31]*/ ++;
+  return local /*invoke: [exact=JSUInt31|powerset=0]*/ ++;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Postfix decrement on local variable.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: localPostfixDec:[exact=JSUInt31]*/
+/*member: localPostfixDec:[exact=JSUInt31|powerset=0]*/
 localPostfixDec() {
   var local;
   if (local == null) {
     local = 0;
   }
-  return local /*invoke: [exact=JSUInt31]*/ --;
+  return local /*invoke: [exact=JSUInt31|powerset=0]*/ --;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Postfix increment on static field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _staticField1:[null|subclass=JSPositiveInt]*/
+/*member: _staticField1:[null|subclass=JSPositiveInt|powerset=1]*/
 var _staticField1;
 
-/*member: staticFieldPostfixInc:[subclass=JSPositiveInt]*/
+/*member: staticFieldPostfixInc:[subclass=JSPositiveInt|powerset=0]*/
 staticFieldPostfixInc() {
   if (_staticField1 == null) {
     _staticField1 = 0;
   }
-  return _staticField1 /*invoke: [null|subclass=JSPositiveInt]*/ ++;
+  return _staticField1 /*invoke: [null|subclass=JSPositiveInt|powerset=1]*/ ++;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Postfix decrement on static field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _staticField2:[null|subclass=JSInt]*/
+/*member: _staticField2:[null|subclass=JSInt|powerset=1]*/
 var _staticField2;
 
-/*member: staticFieldPostfixDec:[subclass=JSInt]*/
+/*member: staticFieldPostfixDec:[subclass=JSInt|powerset=0]*/
 staticFieldPostfixDec() {
   if (_staticField2 == null) {
     _staticField2 = 0;
   }
-  return _staticField2 /*invoke: [null|subclass=JSInt]*/ --;
+  return _staticField2 /*invoke: [null|subclass=JSInt|powerset=1]*/ --;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Postfix increment on instance field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  /*member: Class1.field1:[null|subclass=JSPositiveInt]*/
+  /*member: Class1.field1:[null|subclass=JSPositiveInt|powerset=1]*/
   var field1;
 }
 
-/*member: instanceFieldPostfixInc:[subclass=JSPositiveInt]*/
+/*member: instanceFieldPostfixInc:[subclass=JSPositiveInt|powerset=0]*/
 instanceFieldPostfixInc() {
   var c = Class1();
-  if (c. /*[exact=Class1]*/ field1 == null) {
-    c. /*update: [exact=Class1]*/ field1 = 0;
+  if (c. /*[exact=Class1|powerset=0]*/ field1 == null) {
+    c. /*update: [exact=Class1|powerset=0]*/ field1 = 0;
   }
   return c
       .
-      /*[exact=Class1]*/
-      /*update: [exact=Class1]*/
-      field1 /*invoke: [null|subclass=JSPositiveInt]*/ ++;
+      /*[exact=Class1|powerset=0]*/
+      /*update: [exact=Class1|powerset=0]*/
+      field1 /*invoke: [null|subclass=JSPositiveInt|powerset=1]*/ ++;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Postfix decrement on instance field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
 class Class2 {
-  /*member: Class2.field2:[null|subclass=JSInt]*/
+  /*member: Class2.field2:[null|subclass=JSInt|powerset=1]*/
   var field2;
 }
 
-/*member: instanceFieldPostfixDec:[subclass=JSInt]*/
+/*member: instanceFieldPostfixDec:[subclass=JSInt|powerset=0]*/
 instanceFieldPostfixDec() {
   var c = Class2();
-  if (c. /*[exact=Class2]*/ field2 == null) {
-    c. /*update: [exact=Class2]*/ field2 = 0;
+  if (c. /*[exact=Class2|powerset=0]*/ field2 == null) {
+    c. /*update: [exact=Class2|powerset=0]*/ field2 = 0;
   }
   return c
       .
-      /*[exact=Class2]*/
-      /*update: [exact=Class2]*/
-      field2 /*invoke: [null|subclass=JSInt]*/ --;
+      /*[exact=Class2|powerset=0]*/
+      /*update: [exact=Class2|powerset=0]*/
+      field2 /*invoke: [null|subclass=JSInt|powerset=1]*/ --;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Conditional postfix increment on instance field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
 class Class3 {
-  /*member: Class3.field3:[null|subclass=JSPositiveInt]*/
+  /*member: Class3.field3:[null|subclass=JSPositiveInt|powerset=1]*/
   var field3;
 }
 
-/*member: conditionalInstanceFieldPostfixInc:[null|subclass=JSPositiveInt]*/
+/*member: conditionalInstanceFieldPostfixInc:[null|subclass=JSPositiveInt|powerset=1]*/
 conditionalInstanceFieldPostfixInc() {
   var c = Class3();
-  if (c. /*[exact=Class3]*/ field3 == null) {
-    c. /*update: [exact=Class3]*/ field3 = 0;
+  if (c. /*[exact=Class3|powerset=0]*/ field3 == null) {
+    c. /*update: [exact=Class3|powerset=0]*/ field3 = 0;
   }
   return c
       ?.
-      /*[exact=Class3]*/
-      /*update: [exact=Class3]*/
-      field3 /*invoke: [null|subclass=JSPositiveInt]*/ ++;
+      /*[exact=Class3|powerset=0]*/
+      /*update: [exact=Class3|powerset=0]*/
+      field3 /*invoke: [null|subclass=JSPositiveInt|powerset=1]*/ ++;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Conditional postfix decrement on instance field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
 class Class4 {
-  /*member: Class4.field4:[null|subclass=JSInt]*/
+  /*member: Class4.field4:[null|subclass=JSInt|powerset=1]*/
   var field4;
 }
 
-/*member: conditionalInstanceFieldPostfixDec:[null|subclass=JSInt]*/
+/*member: conditionalInstanceFieldPostfixDec:[null|subclass=JSInt|powerset=1]*/
 conditionalInstanceFieldPostfixDec() {
   var c = Class4();
-  if (c. /*[exact=Class4]*/ field4 == null) {
-    c. /*update: [exact=Class4]*/ field4 = 0;
+  if (c. /*[exact=Class4|powerset=0]*/ field4 == null) {
+    c. /*update: [exact=Class4|powerset=0]*/ field4 = 0;
   }
   return c
       ?.
-      /*[exact=Class4]*/
-      /*update: [exact=Class4]*/
-      field4 /*invoke: [null|subclass=JSInt]*/ --;
+      /*[exact=Class4|powerset=0]*/
+      /*update: [exact=Class4|powerset=0]*/
+      field4 /*invoke: [null|subclass=JSInt|powerset=1]*/ --;
 }
diff --git a/pkg/compiler/test/inference/data/postfix_prefix.dart b/pkg/compiler/test/inference/data/postfix_prefix.dart
index 67f1c92..8ae790a 100644
--- a/pkg/compiler/test/inference/data/postfix_prefix.dart
+++ b/pkg/compiler/test/inference/data/postfix_prefix.dart
@@ -2,121 +2,128 @@
 // 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.
 
-/*member: index:[empty]*/
+/*member: index:[empty|powerset=0]*/
 dynamic get index => throw '';
 
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
 class A {
-  /*member: A.foo:Value([exact=JSString], value: "string")*/
+  /*member: A.foo:Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/
   get foo => 'string';
 
-  set foo(/*[subclass=JSNumber]*/ value) {}
+  set foo(/*[subclass=JSNumber|powerset=0]*/ value) {}
 
-  /*member: A.[]:Value([exact=JSString], value: "string")*/
-  operator [](/*[empty]*/ index) => 'string';
+  /*member: A.[]:Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/
+  operator [](/*[empty|powerset=0]*/ index) => 'string';
 
-  /*member: A.[]=:[null]*/
-  operator []=(/*[empty]*/ index, /*[subclass=JSNumber]*/ value) {}
+  /*member: A.[]=:[null|powerset=1]*/
+  operator []=(
+    /*[empty|powerset=0]*/ index,
+    /*[subclass=JSNumber|powerset=0]*/ value,
+  ) {}
 
-  /*member: A.returnDynamic1:Union([exact=JSString], [exact=JSUInt31])*/
-  returnDynamic1() => /*[subclass=A]*/ /*update: [subclass=A]*/
-      foo /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ --;
+  /*member: A.returnDynamic1:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+  returnDynamic1() => /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/
+      foo /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ --;
 
-  /*member: A.returnNum1:[subclass=JSNumber]*/
-  returnNum1() => /*invoke: Union([exact=JSString], [exact=JSUInt31])*/
-      -- /*[subclass=A]*/ /*update: [subclass=A]*/ foo;
+  /*member: A.returnNum1:[subclass=JSNumber|powerset=0]*/
+  returnNum1() => /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+      -- /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ foo;
 
-  /*member: A.returnNum2:[subclass=JSNumber]*/
-  returnNum2() => /*[subclass=A]*/ /*update: [subclass=A]*/
-      foo /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ -= 42;
-
-  /*member: A.returnDynamic2:Union([exact=JSString], [exact=JSUInt31])*/
-  returnDynamic2() =>
-      this /*[subclass=A]*/ /*update: [subclass=A]*/ [index] /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ --;
-
-  /*member: A.returnNum3:[subclass=JSNumber]*/
-  returnNum3() => /*invoke: Union([exact=JSString], [exact=JSUInt31])*/
-      --this /*[subclass=A]*/ /*update: [subclass=A]*/ [index];
-
-  /*member: A.returnNum4:[subclass=JSNumber]*/
-  returnNum4() =>
-      this /*[subclass=A]*/ /*update: [subclass=A]*/ [index] /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ -=
+  /*member: A.returnNum2:[subclass=JSNumber|powerset=0]*/
+  returnNum2() => /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/
+      foo /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ -=
           42;
 
-  /*member: A.returnEmpty3:[empty]*/
+  /*member: A.returnDynamic2:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+  returnDynamic2() =>
+      this /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ [index] /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ --;
+
+  /*member: A.returnNum3:[subclass=JSNumber|powerset=0]*/
+  returnNum3() => /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+      --this /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ [index];
+
+  /*member: A.returnNum4:[subclass=JSNumber|powerset=0]*/
+  returnNum4() =>
+      this /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ [index] /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ -=
+          42;
+
+  /*member: A.returnEmpty3:[empty|powerset=0]*/
   returnEmpty3() {
     dynamic a = this;
     return a
-        . /*[subclass=A]*/ /*update: [subclass=A]*/ bar /*invoke: [empty]*/ --;
+        . /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ bar /*invoke: [empty|powerset=0]*/ --;
   }
 
-  /*member: A.returnEmpty1:[empty]*/
+  /*member: A.returnEmpty1:[empty|powerset=0]*/
   returnEmpty1() {
     dynamic a = this;
-    return /*invoke: [empty]*/ --a
-        . /*[subclass=A]*/ /*update: [subclass=A]*/ bar;
+    return /*invoke: [empty|powerset=0]*/ --a
+        . /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ bar;
   }
 
-  /*member: A.returnEmpty2:[empty]*/
+  /*member: A.returnEmpty2:[empty|powerset=0]*/
   returnEmpty2() {
     dynamic a = this;
-    return a. /*[subclass=A]*/ /*update: [subclass=A]*/ bar /*invoke: [empty]*/ -=
+    return a. /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ bar /*invoke: [empty|powerset=0]*/ -=
         42;
   }
 }
 
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
 class B extends A {
-  /*member: B.foo:[exact=JSUInt31]*/
+  /*member: B.foo:[exact=JSUInt31|powerset=0]*/
   get foo => 42;
-  /*member: B.[]:[exact=JSUInt31]*/
-  operator [](/*[empty]*/ index) => 42;
+  /*member: B.[]:[exact=JSUInt31|powerset=0]*/
+  operator [](/*[empty|powerset=0]*/ index) => 42;
 
-  /*member: B.returnString1:Value([exact=JSString], value: "string")*/
+  /*member: B.returnString1:Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/
   returnString1() =>
-      super.foo /*invoke: Value([exact=JSString], value: "string")*/ --;
+      super
+          .foo /*invoke: Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/ --;
 
-  /*member: B.returnDynamic1:[empty]*/
+  /*member: B.returnDynamic1:[empty|powerset=0]*/
   returnDynamic1() =>
-      /*invoke: Value([exact=JSString], value: "string")*/
+      /*invoke: Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/
       --super.foo;
 
-  /*member: B.returnDynamic2:[empty]*/
+  /*member: B.returnDynamic2:[empty|powerset=0]*/
   returnDynamic2() =>
-      super.foo /*invoke: Value([exact=JSString], value: "string")*/ -= 42;
+      super.foo /*invoke: Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/ -=
+          42;
 
-  /*member: B.returnString2:Value([exact=JSString], value: "string")*/
+  /*member: B.returnString2:Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/
   returnString2() =>
-      super[index] /*invoke: Value([exact=JSString], value: "string")*/ --;
+      super[index] /*invoke: Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/ --;
 
-  /*member: B.returnDynamic3:[empty]*/
+  /*member: B.returnDynamic3:[empty|powerset=0]*/
   returnDynamic3() =>
-      /*invoke: Value([exact=JSString], value: "string")*/
+      /*invoke: Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/
       --super[index];
 
-  /*member: B.returnDynamic4:[empty]*/
+  /*member: B.returnDynamic4:[empty|powerset=0]*/
   returnDynamic4() =>
-      super[index] /*invoke: Value([exact=JSString], value: "string")*/ -= 42;
+      super[index] /*invoke: Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/ -=
+          42;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   A()
-    .. /*invoke: [exact=A]*/ returnNum1()
-    .. /*invoke: [exact=A]*/ returnNum2()
-    .. /*invoke: [exact=A]*/ returnNum3()
-    .. /*invoke: [exact=A]*/ returnNum4()
-    .. /*invoke: [exact=A]*/ returnDynamic1()
-    .. /*invoke: [exact=A]*/ returnDynamic2()
-    .. /*invoke: [exact=A]*/ returnEmpty1()
-    .. /*invoke: [exact=A]*/ returnEmpty2()
-    .. /*invoke: [exact=A]*/ returnEmpty3();
+    .. /*invoke: [exact=A|powerset=0]*/ returnNum1()
+    .. /*invoke: [exact=A|powerset=0]*/ returnNum2()
+    .. /*invoke: [exact=A|powerset=0]*/ returnNum3()
+    .. /*invoke: [exact=A|powerset=0]*/ returnNum4()
+    .. /*invoke: [exact=A|powerset=0]*/ returnDynamic1()
+    .. /*invoke: [exact=A|powerset=0]*/ returnDynamic2()
+    .. /*invoke: [exact=A|powerset=0]*/ returnEmpty1()
+    .. /*invoke: [exact=A|powerset=0]*/ returnEmpty2()
+    .. /*invoke: [exact=A|powerset=0]*/ returnEmpty3();
 
   B()
-    .. /*invoke: [exact=B]*/ returnString1()
-    .. /*invoke: [exact=B]*/ returnString2()
-    .. /*invoke: [exact=B]*/ returnDynamic1()
-    .. /*invoke: [exact=B]*/ returnDynamic2()
-    .. /*invoke: [exact=B]*/ returnDynamic3()
-    .. /*invoke: [exact=B]*/ returnDynamic4();
+    .. /*invoke: [exact=B|powerset=0]*/ returnString1()
+    .. /*invoke: [exact=B|powerset=0]*/ returnString2()
+    .. /*invoke: [exact=B|powerset=0]*/ returnDynamic1()
+    .. /*invoke: [exact=B|powerset=0]*/ returnDynamic2()
+    .. /*invoke: [exact=B|powerset=0]*/ returnDynamic3()
+    .. /*invoke: [exact=B|powerset=0]*/ returnDynamic4();
 }
diff --git a/pkg/compiler/test/inference/data/prefix.dart b/pkg/compiler/test/inference/data/prefix.dart
index a988ffd..5d82850 100644
--- a/pkg/compiler/test/inference/data/prefix.dart
+++ b/pkg/compiler/test/inference/data/prefix.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   localPrefixInc();
   localPrefixDec();
@@ -18,78 +18,78 @@
 // Prefix increment on local variable.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: localPrefixInc:[subclass=JSUInt32]*/
+/*member: localPrefixInc:[subclass=JSUInt32|powerset=0]*/
 localPrefixInc() {
   var local;
   if (local == null) {
     local = 0;
   }
-  return /*invoke: [exact=JSUInt31]*/ ++local;
+  return /*invoke: [exact=JSUInt31|powerset=0]*/ ++local;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Prefix decrement on local variable.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: localPrefixDec:[subclass=JSInt]*/
+/*member: localPrefixDec:[subclass=JSInt|powerset=0]*/
 localPrefixDec() {
   var local;
   if (local == null) {
     local = 0;
   }
-  return /*invoke: [exact=JSUInt31]*/ --local;
+  return /*invoke: [exact=JSUInt31|powerset=0]*/ --local;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Prefix increment on static field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _staticField1:[null|subclass=JSPositiveInt]*/
+/*member: _staticField1:[null|subclass=JSPositiveInt|powerset=1]*/
 var _staticField1;
 
-/*member: staticFieldPrefixInc:[subclass=JSPositiveInt]*/
+/*member: staticFieldPrefixInc:[subclass=JSPositiveInt|powerset=0]*/
 staticFieldPrefixInc() {
   if (_staticField1 == null) {
     _staticField1 = 0;
   }
-  return /*invoke: [null|subclass=JSPositiveInt]*/ ++_staticField1;
+  return /*invoke: [null|subclass=JSPositiveInt|powerset=1]*/ ++_staticField1;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Prefix decrement on static field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _staticField2:[null|subclass=JSInt]*/
+/*member: _staticField2:[null|subclass=JSInt|powerset=1]*/
 var _staticField2;
 
-/*member: staticFieldPrefixDec:[subclass=JSInt]*/
+/*member: staticFieldPrefixDec:[subclass=JSInt|powerset=0]*/
 staticFieldPrefixDec() {
   if (_staticField2 == null) {
     _staticField2 = 0;
   }
-  return /*invoke: [null|subclass=JSInt]*/ --_staticField2;
+  return /*invoke: [null|subclass=JSInt|powerset=1]*/ --_staticField2;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Prefix increment on instance field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  /*member: Class1.field1:[null|subclass=JSPositiveInt]*/
+  /*member: Class1.field1:[null|subclass=JSPositiveInt|powerset=1]*/
   var field1;
 }
 
-/*member: instanceFieldPrefixInc:[subclass=JSPositiveInt]*/
+/*member: instanceFieldPrefixInc:[subclass=JSPositiveInt|powerset=0]*/
 instanceFieldPrefixInc() {
   var c = Class1();
-  if (c. /*[exact=Class1]*/ field1 == null) {
-    c. /*update: [exact=Class1]*/ field1 = 0;
+  if (c. /*[exact=Class1|powerset=0]*/ field1 == null) {
+    c. /*update: [exact=Class1|powerset=0]*/ field1 = 0;
   }
-  return /*invoke: [null|subclass=JSPositiveInt]*/ ++c
+  return /*invoke: [null|subclass=JSPositiveInt|powerset=1]*/ ++c
       .
-      /*[exact=Class1]*/
-      /*update: [exact=Class1]*/
+      /*[exact=Class1|powerset=0]*/
+      /*update: [exact=Class1|powerset=0]*/
       field1;
 }
 
@@ -97,22 +97,22 @@
 // Prefix decrement on instance field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
 class Class2 {
-  /*member: Class2.field2:[null|subclass=JSInt]*/
+  /*member: Class2.field2:[null|subclass=JSInt|powerset=1]*/
   var field2;
 }
 
-/*member: instanceFieldPrefixDec:[subclass=JSInt]*/
+/*member: instanceFieldPrefixDec:[subclass=JSInt|powerset=0]*/
 instanceFieldPrefixDec() {
   var c = Class2();
-  if (c. /*[exact=Class2]*/ field2 == null) {
-    c. /*update: [exact=Class2]*/ field2 = 0;
+  if (c. /*[exact=Class2|powerset=0]*/ field2 == null) {
+    c. /*update: [exact=Class2|powerset=0]*/ field2 = 0;
   }
-  return /*invoke: [null|subclass=JSInt]*/ --c
+  return /*invoke: [null|subclass=JSInt|powerset=1]*/ --c
       .
-      /*[exact=Class2]*/
-      /*update: [exact=Class2]*/
+      /*[exact=Class2|powerset=0]*/
+      /*update: [exact=Class2|powerset=0]*/
       field2;
 }
 
@@ -120,22 +120,22 @@
 // Conditional prefix increment on instance field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
 class Class3 {
-  /*member: Class3.field3:[null|subclass=JSPositiveInt]*/
+  /*member: Class3.field3:[null|subclass=JSPositiveInt|powerset=1]*/
   var field3;
 }
 
-/*member: conditionalInstanceFieldPrefixInc:[null|subclass=JSPositiveInt]*/
+/*member: conditionalInstanceFieldPrefixInc:[null|subclass=JSPositiveInt|powerset=1]*/
 conditionalInstanceFieldPrefixInc() {
   var c = Class3();
-  if (c. /*[exact=Class3]*/ field3 == null) {
-    c. /*update: [exact=Class3]*/ field3 = 0;
+  if (c. /*[exact=Class3|powerset=0]*/ field3 == null) {
+    c. /*update: [exact=Class3|powerset=0]*/ field3 = 0;
   }
-  return /*invoke: [null|subclass=JSPositiveInt]*/ ++c
+  return /*invoke: [null|subclass=JSPositiveInt|powerset=1]*/ ++c
       ?.
-      /*[exact=Class3]*/
-      /*update: [exact=Class3]*/
+      /*[exact=Class3|powerset=0]*/
+      /*update: [exact=Class3|powerset=0]*/
       field3;
 }
 
@@ -143,21 +143,21 @@
 // Conditional prefix decrement on instance field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
 class Class4 {
-  /*member: Class4.field4:[null|subclass=JSInt]*/
+  /*member: Class4.field4:[null|subclass=JSInt|powerset=1]*/
   var field4;
 }
 
-/*member: conditionalInstanceFieldPrefixDec:[null|subclass=JSInt]*/
+/*member: conditionalInstanceFieldPrefixDec:[null|subclass=JSInt|powerset=1]*/
 conditionalInstanceFieldPrefixDec() {
   var c = Class4();
-  if (c. /*[exact=Class4]*/ field4 == null) {
-    c. /*update: [exact=Class4]*/ field4 = 0;
+  if (c. /*[exact=Class4|powerset=0]*/ field4 == null) {
+    c. /*update: [exact=Class4|powerset=0]*/ field4 = 0;
   }
-  return /*invoke: [null|subclass=JSInt]*/ --c
+  return /*invoke: [null|subclass=JSInt|powerset=1]*/ --c
       ?.
-      /*[exact=Class4]*/
-      /*update: [exact=Class4]*/
+      /*[exact=Class4|powerset=0]*/
+      /*update: [exact=Class4|powerset=0]*/
       field4;
 }
diff --git a/pkg/compiler/test/inference/data/record_1.dart b/pkg/compiler/test/inference/data/record_1.dart
index 41fb5cb..6c8bd92 100644
--- a/pkg/compiler/test/inference/data/record_1.dart
+++ b/pkg/compiler/test/inference/data/record_1.dart
@@ -2,37 +2,37 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   useRecord1();
   useRecord2();
   useRecord3();
 }
 
-/*member: getRecord1:[Record(RecordShape(2), [[exact=JSUInt31], [exact=JSUInt31]])]*/
+/*member: getRecord1:[Record(RecordShape(2), [[exact=JSUInt31|powerset=0], [exact=JSUInt31|powerset=0]], powerset: 0)]*/
 (num, num) getRecord1() => (1, 1);
-/*member: getRecord2:[Record(RecordShape(2), [Value([exact=JSBool], value: true), Value([exact=JSBool], value: false)])]*/
+/*member: getRecord2:[Record(RecordShape(2), [Value([exact=JSBool|powerset=0], value: true, powerset: 0), Value([exact=JSBool|powerset=0], value: false, powerset: 0)], powerset: 0)]*/
 (bool, bool) getRecord2() => (true, false);
-/*member: getRecord3:[Record(RecordShape(2), [Value([exact=JSString], value: "a"), Value([exact=JSString], value: "b")])]*/
+/*member: getRecord3:[Record(RecordShape(2), [Value([exact=JSString|powerset=0], value: "a", powerset: 0), Value([exact=JSString|powerset=0], value: "b", powerset: 0)], powerset: 0)]*/
 dynamic getRecord3() => ('a', 'b');
 
-/*member: useRecord1:[exact=JSUInt31]*/
+/*member: useRecord1:[exact=JSUInt31|powerset=0]*/
 useRecord1() {
   final r = getRecord1();
   return r
-      . /*[Record(RecordShape(2), [[exact=JSUInt31], [exact=JSUInt31]])]*/ $1;
+      . /*[Record(RecordShape(2), [[exact=JSUInt31|powerset=0], [exact=JSUInt31|powerset=0]], powerset: 0)]*/ $1;
 }
 
-/*member: useRecord2:Value([exact=JSBool], value: false)*/
+/*member: useRecord2:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
 useRecord2() {
   final r = getRecord2();
   return r
-      . /*[Record(RecordShape(2), [Value([exact=JSBool], value: true), Value([exact=JSBool], value: false)])]*/ $2;
+      . /*[Record(RecordShape(2), [Value([exact=JSBool|powerset=0], value: true, powerset: 0), Value([exact=JSBool|powerset=0], value: false, powerset: 0)], powerset: 0)]*/ $2;
 }
 
-/*member: useRecord3:Value([exact=JSString], value: "b")*/
+/*member: useRecord3:Value([exact=JSString|powerset=0], value: "b", powerset: 0)*/
 useRecord3() {
   final r = getRecord3();
   return r
-      . /*[Record(RecordShape(2), [Value([exact=JSString], value: "a"), Value([exact=JSString], value: "b")])]*/ $2;
+      . /*[Record(RecordShape(2), [Value([exact=JSString|powerset=0], value: "a", powerset: 0), Value([exact=JSString|powerset=0], value: "b", powerset: 0)], powerset: 0)]*/ $2;
 }
diff --git a/pkg/compiler/test/inference/data/record_2.dart b/pkg/compiler/test/inference/data/record_2.dart
index 2d6b5d1..22594d6 100644
--- a/pkg/compiler/test/inference/data/record_2.dart
+++ b/pkg/compiler/test/inference/data/record_2.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   useRecord1(true);
   useRecord1(false);
@@ -16,48 +16,48 @@
   useRecord5(false);
 }
 
-/*member: getRecord1:[Record(RecordShape(2), [[exact=JSUInt31], [exact=JSUInt31]])]*/
+/*member: getRecord1:[Record(RecordShape(2), [[exact=JSUInt31|powerset=0], [exact=JSUInt31|powerset=0]], powerset: 0)]*/
 (num, num) getRecord1() => (1, 1);
-/*member: getRecord2:[Record(RecordShape(2), [Value([exact=JSBool], value: true), Value([exact=JSBool], value: false)])]*/
+/*member: getRecord2:[Record(RecordShape(2), [Value([exact=JSBool|powerset=0], value: true, powerset: 0), Value([exact=JSBool|powerset=0], value: false, powerset: 0)], powerset: 0)]*/
 (bool, bool) getRecord2() => (true, false);
-/*member: getRecord3:[Record(RecordShape(2), [Value([exact=JSString], value: "a"), Container([exact=JSUnmodifiableArray], element: [empty], length: 0)])]*/
+/*member: getRecord3:[Record(RecordShape(2), [Value([exact=JSString|powerset=0], value: "a", powerset: 0), Container([exact=JSUnmodifiableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)], powerset: 0)]*/
 dynamic getRecord3() => ('a', const []);
-/*member: getRecord4:[Record(RecordShape(2), [Union([exact=JSBool], [exact=JSUInt31]), Union([exact=JSBool], [exact=JSUInt31])])]*/
-dynamic getRecord4(bool /*[exact=JSBool]*/ b) =>
+/*member: getRecord4:[Record(RecordShape(2), [Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)], powerset: 0)]*/
+dynamic getRecord4(bool /*[exact=JSBool|powerset=0]*/ b) =>
     b ? getRecord1() : getRecord2();
 
-/*member: useRecord1:Union([exact=JSBool], [exact=JSUInt31])*/
-useRecord1(bool /*[exact=JSBool]*/ b) {
+/*member: useRecord1:Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+useRecord1(bool /*[exact=JSBool|powerset=0]*/ b) {
   final r = getRecord4(b);
   return r
-      . /*[Record(RecordShape(2), [Union([exact=JSBool], [exact=JSUInt31]), Union([exact=JSBool], [exact=JSUInt31])])]*/ $2;
+      . /*[Record(RecordShape(2), [Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)], powerset: 0)]*/ $2;
 }
 
-/*member: useRecord2:Value([exact=JSBool], value: false)*/
-useRecord2(bool /*[exact=JSBool]*/ b) {
+/*member: useRecord2:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
+useRecord2(bool /*[exact=JSBool|powerset=0]*/ b) {
   final r = b ? getRecord2() : getRecord2();
   return r
-      . /*[Record(RecordShape(2), [Value([exact=JSBool], value: true), Value([exact=JSBool], value: false)])]*/ $2;
+      . /*[Record(RecordShape(2), [Value([exact=JSBool|powerset=0], value: true, powerset: 0), Value([exact=JSBool|powerset=0], value: false, powerset: 0)], powerset: 0)]*/ $2;
 }
 
-/*member: useRecord3:Union([exact=JSBool], [exact=JSUInt31])*/
-useRecord3(bool /*[exact=JSBool]*/ b) {
+/*member: useRecord3:Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+useRecord3(bool /*[exact=JSBool|powerset=0]*/ b) {
   final r = b ? getRecord2() : getRecord1();
   return r
-      . /*[Record(RecordShape(2), [Union([exact=JSBool], [exact=JSUInt31]), Union([exact=JSBool], [exact=JSUInt31])])]*/ $2;
+      . /*[Record(RecordShape(2), [Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)], powerset: 0)]*/ $2;
 }
 
-/*member: useRecord4:Union([exact=JSBool], [exact=JSUnmodifiableArray])*/
-useRecord4(bool /*[exact=JSBool]*/ b) {
+/*member: useRecord4:Union([exact=JSBool|powerset=0], [exact=JSUnmodifiableArray|powerset=0], powerset: 0)*/
+useRecord4(bool /*[exact=JSBool|powerset=0]*/ b) {
   final r = b ? getRecord2() : getRecord3();
   return r
-      . /*[Record(RecordShape(2), [Union([exact=JSBool], [exact=JSString]), Union([exact=JSBool], [exact=JSUnmodifiableArray])])]*/ $2;
+      . /*[Record(RecordShape(2), [Union([exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 0), Union([exact=JSBool|powerset=0], [exact=JSUnmodifiableArray|powerset=0], powerset: 0)], powerset: 0)]*/ $2;
 }
 
-/*member: useRecord5:Union([exact=JSString], [exact=JSUInt31])*/
-useRecord5(bool /*[exact=JSBool]*/ b) {
-  final c = /*[Record(RecordShape(2), [Value([exact=JSString], value: "a"), Value([exact=JSString], value: "b")])]*/
+/*member: useRecord5:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+useRecord5(bool /*[exact=JSBool|powerset=0]*/ b) {
+  final c = /*[Record(RecordShape(2), [Value([exact=JSString|powerset=0], value: "a", powerset: 0), Value([exact=JSString|powerset=0], value: "b", powerset: 0)], powerset: 0)]*/
       () => ('a', 'b');
   return (b ? c() : (3, 4))
-      . /*[Record(RecordShape(2), [Union([exact=JSString], [exact=JSUInt31]), Union([exact=JSString], [exact=JSUInt31])])]*/ $1;
+      . /*[Record(RecordShape(2), [Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)], powerset: 0)]*/ $1;
 }
diff --git a/pkg/compiler/test/inference/data/record_3.dart b/pkg/compiler/test/inference/data/record_3.dart
index d38a6fc..c9ac5e0 100644
--- a/pkg/compiler/test/inference/data/record_3.dart
+++ b/pkg/compiler/test/inference/data/record_3.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 void main() {
   useRecords1(true);
   useRecords1(false);
@@ -20,40 +20,43 @@
   useRecords7(false);
 }
 
-/*member: getRecord1:[Record(RecordShape(3), [[exact=JSUInt31], [exact=JSUInt31], [exact=JSUInt31]])]*/
+/*member: getRecord1:[Record(RecordShape(3), [[exact=JSUInt31|powerset=0], [exact=JSUInt31|powerset=0], [exact=JSUInt31|powerset=0]], powerset: 0)]*/
 getRecord1() => (1, 2, 3);
-/*member: getRecord2:[Record(RecordShape(1), [Value([exact=JSString], value: "a")])]*/
+/*member: getRecord2:[Record(RecordShape(1), [Value([exact=JSString|powerset=0], value: "a", powerset: 0)], powerset: 0)]*/
 getRecord2() => ('a',);
-/*member: getRecord3:[Record(RecordShape(0, {age, name}), [[exact=JSUInt31], Value([exact=JSString], value: "Alice")])]*/
+/*member: getRecord3:[Record(RecordShape(0, {age, name}), [[exact=JSUInt31|powerset=0], Value([exact=JSString|powerset=0], value: "Alice", powerset: 0)], powerset: 0)]*/
 getRecord3() => (name: 'Alice', age: 28);
-/*member: getRecord4:[Record(RecordShape(0, {height, name}), [[exact=JSUInt31], Value([exact=JSString], value: "Bob")])]*/
+/*member: getRecord4:[Record(RecordShape(0, {height, name}), [[exact=JSUInt31|powerset=0], Value([exact=JSString|powerset=0], value: "Bob", powerset: 0)], powerset: 0)]*/
 getRecord4() => (name: 'Bob', height: 28);
-/*member: getUnion:Union([exact=JSString], [exact=JSUInt31])*/
-getUnion(bool /*[exact=JSBool]*/ b) => b ? 3 : 'a';
+/*member: getUnion:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+getUnion(bool /*[exact=JSBool|powerset=0]*/ b) => b ? 3 : 'a';
 
-/*member: useRecords1:Union([exact=JSString], [exact=JSUInt31])*/
-useRecords1(bool /*[exact=JSBool]*/ b) {
+/*member: useRecords1:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+useRecords1(bool /*[exact=JSBool|powerset=0]*/ b) {
   return (b ? getRecord1() : getRecord2())
-      . /*Union([exact=_Record_1], [exact=_Record_3])*/ $1;
+      . /*Union([exact=_Record_1|powerset=0], [exact=_Record_3|powerset=0], powerset: 0)*/ $1;
 }
 
-/*member: useRecords2:Union([exact=_Record_1], [exact=_Record_3])*/
-useRecords2(bool /*[exact=JSBool]*/ b) {
+/*member: useRecords2:Union([exact=_Record_1|powerset=0], [exact=_Record_3|powerset=0], powerset: 0)*/
+useRecords2(bool /*[exact=JSBool|powerset=0]*/ b) {
   return b ? getRecord1() : getRecord2();
 }
 
-/*member: useRecords3:Union([exact=_Record_1], [exact=_Record_2_age_name])*/
-useRecords3(bool /*[exact=JSBool]*/ b) {
+/*member: useRecords3:Union([exact=_Record_1|powerset=0], [exact=_Record_2_age_name|powerset=0], powerset: 0)*/
+useRecords3(bool /*[exact=JSBool|powerset=0]*/ b) {
   return b ? getRecord2() : getRecord3();
 }
 
-/*member: useRecords4:Union([exact=_Record_2_age_name], [exact=_Record_3])*/
-useRecords4(bool /*[exact=JSBool]*/ b) {
+/*member: useRecords4:Union([exact=_Record_2_age_name|powerset=0], [exact=_Record_3|powerset=0], powerset: 0)*/
+useRecords4(bool /*[exact=JSBool|powerset=0]*/ b) {
   return b ? getRecord1() : getRecord3();
 }
 
-/*member: useRecords5:Union([exact=_Record_1], [exact=_Record_2_age_name], [exact=_Record_3])*/
-useRecords5(bool /*[exact=JSBool]*/ b1, bool /*[exact=JSBool]*/ b2) {
+/*member: useRecords5:Union([exact=_Record_1|powerset=0], [exact=_Record_2_age_name|powerset=0], [exact=_Record_3|powerset=0], powerset: 0)*/
+useRecords5(
+  bool /*[exact=JSBool|powerset=0]*/ b1,
+  bool /*[exact=JSBool|powerset=0]*/ b2,
+) {
   return b1
       ? getRecord2()
       : b2
@@ -61,12 +64,12 @@
       : getRecord1();
 }
 
-/*member: useRecords6:Union([exact=_Record_2_age_name], [exact=_Record_2_height_name])*/
-useRecords6(bool /*[exact=JSBool]*/ b) {
+/*member: useRecords6:Union([exact=_Record_2_age_name|powerset=0], [exact=_Record_2_height_name|powerset=0], powerset: 0)*/
+useRecords6(bool /*[exact=JSBool|powerset=0]*/ b) {
   return b ? getRecord3() : getRecord4();
 }
 
-/*member: useRecords7:Union([exact=JSString], [exact=JSUInt31], [exact=_Record_1])*/
-useRecords7(bool /*[exact=JSBool]*/ b) {
+/*member: useRecords7:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], [exact=_Record_1|powerset=0], powerset: 0)*/
+useRecords7(bool /*[exact=JSBool|powerset=0]*/ b) {
   return b ? getUnion(b) : getRecord2();
 }
diff --git a/pkg/compiler/test/inference/data/record_4.dart b/pkg/compiler/test/inference/data/record_4.dart
index 22c2f7c..293839c 100644
--- a/pkg/compiler/test/inference/data/record_4.dart
+++ b/pkg/compiler/test/inference/data/record_4.dart
@@ -1,29 +1,29 @@
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 void main() {
   testList();
   testClosure1();
 }
 
-/*member: testList:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/
+/*member: testList:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/
 testList() {
   dynamic list = [];
   final rec = (list, 3);
   final myList =
-      rec. /*[Record(RecordShape(2), [Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null), [exact=JSUInt31]])]*/ $1;
+      rec. /*[Record(RecordShape(2), [Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0), [exact=JSUInt31|powerset=0]], powerset: 0)]*/ $1;
   myList
-      . /*invoke: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/ add(
+      . /*invoke: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/ add(
         1,
       );
   return list;
 }
 
-/*member: testClosure1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/
+/*member: testClosure1:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/
 testClosure1() {
   return getRecord()
-      . /*[Record(RecordShape(2), [Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2), [exact=JSUInt31]])]*/ $1;
+      . /*[Record(RecordShape(2), [Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0), [exact=JSUInt31|powerset=0]], powerset: 0)]*/ $1;
 }
 
-/*member: getRecord:[Record(RecordShape(2), [Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2), [exact=JSUInt31]])]*/
+/*member: getRecord:[Record(RecordShape(2), [Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0), [exact=JSUInt31|powerset=0]], powerset: 0)]*/
 getRecord() {
   return ([1, 2], 3);
 }
diff --git a/pkg/compiler/test/inference/data/redirecting_factory.dart b/pkg/compiler/test/inference/data/redirecting_factory.dart
index e19418a..817cd36 100644
--- a/pkg/compiler/test/inference/data/redirecting_factory.dart
+++ b/pkg/compiler/test/inference/data/redirecting_factory.dart
@@ -3,16 +3,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 class B implements A {
-  /*member: B.foo:[exact=B]*/
-  B.foo([int? /*[null]*/ x]);
+  /*member: B.foo:[exact=B|powerset=0]*/
+  B.foo([int? /*[null|powerset=1]*/ x]);
 }
 
 class A {
-  /*member: A._#foo#tearOff:[exact=B]*/
-  factory A.foo([int /*[null]*/ x]) = B.foo;
+  /*member: A._#foo#tearOff:[exact=B|powerset=0]*/
+  factory A.foo([int /*[null|powerset=1]*/ x]) = B.foo;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 void main() {
   final f = A.foo;
   f();
diff --git a/pkg/compiler/test/inference/data/refine_captured_locals.dart b/pkg/compiler/test/inference/data/refine_captured_locals.dart
index 466cd04..6eba60d 100644
--- a/pkg/compiler/test/inference/data/refine_captured_locals.dart
+++ b/pkg/compiler/test/inference/data/refine_captured_locals.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   refineBeforeCapture();
   refineAfterCapture();
@@ -14,23 +14,23 @@
 // Refine a local before it has been captured.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  /*member: Class1.method1:[null]*/
+  /*member: Class1.method1:[null|powerset=1]*/
   method1() {}
 }
 
-/*member: _refineBeforeCapture:[exact=Class1]*/
-_refineBeforeCapture(/*[null|exact=Class1]*/ o) {
-  o. /*invoke: [null|exact=Class1]*/ method1();
-  o. /*invoke: [exact=Class1]*/ method1();
+/*member: _refineBeforeCapture:[exact=Class1|powerset=0]*/
+_refineBeforeCapture(/*[null|exact=Class1|powerset=1]*/ o) {
+  o. /*invoke: [null|exact=Class1|powerset=1]*/ method1();
+  o. /*invoke: [exact=Class1|powerset=0]*/ method1();
 
-  /*[exact=Class1]*/
+  /*[exact=Class1|powerset=0]*/
   localFunction() => o;
   return localFunction();
 }
 
-/*member: refineBeforeCapture:[null]*/
+/*member: refineBeforeCapture:[null|powerset=1]*/
 refineBeforeCapture() {
   _refineBeforeCapture(new Class1());
   _refineBeforeCapture(null);
@@ -40,27 +40,29 @@
 // Refine a local after it has been captured.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
 class Class3 {
-  /*member: Class3.method3:[null]*/
+  /*member: Class3.method3:[null|powerset=1]*/
   method3() {}
 }
 
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
 class Class4 {}
 
-/*member: _refineAfterCapture:Union([exact=Class3], [exact=Class4])*/
-_refineAfterCapture(/*Union([exact=Class3], [exact=Class4])*/ o) {
-  /*Union([exact=Class3], [exact=Class4])*/
+/*member: _refineAfterCapture:Union([exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 0)*/
+_refineAfterCapture(
+  /*Union([exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 0)*/ o,
+) {
+  /*Union([exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 0)*/
   localFunction() => o;
 
-  o. /*invoke: Union([exact=Class3], [exact=Class4])*/ method3();
-  o. /*invoke: Union([exact=Class3], [exact=Class4])*/ method3();
+  o. /*invoke: Union([exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 0)*/ method3();
+  o. /*invoke: Union([exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 0)*/ method3();
 
   return localFunction();
 }
 
-/*member: refineAfterCapture:[null]*/
+/*member: refineAfterCapture:[null|powerset=1]*/
 refineAfterCapture() {
   _refineAfterCapture(new Class3());
   _refineAfterCapture(new Class4());
@@ -70,31 +72,33 @@
 // Refine a local after it has been captured in a nested local function.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class5.:[exact=Class5]*/
+/*member: Class5.:[exact=Class5|powerset=0]*/
 class Class5 {
-  /*member: Class5.method5:[null]*/
+  /*member: Class5.method5:[null|powerset=1]*/
   method5() {}
 }
 
-/*member: Class6.:[exact=Class6]*/
+/*member: Class6.:[exact=Class6|powerset=0]*/
 class Class6 {}
 
-/*member: _refineAfterNestedCapture:Union([exact=Class5], [exact=Class6])*/
-_refineAfterNestedCapture(/*Union([exact=Class5], [exact=Class6])*/ o) {
-  /*Union([exact=Class5], [exact=Class6])*/
+/*member: _refineAfterNestedCapture:Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/
+_refineAfterNestedCapture(
+  /*Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/ o,
+) {
+  /*Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/
   localFunction() {
-    /*Union([exact=Class5], [exact=Class6])*/
+    /*Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/
     nestedFunction() => o;
     return nestedFunction();
   }
 
-  o. /*invoke: Union([exact=Class5], [exact=Class6])*/ method5();
-  o. /*invoke: Union([exact=Class5], [exact=Class6])*/ method5();
+  o. /*invoke: Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/ method5();
+  o. /*invoke: Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/ method5();
 
   return localFunction();
 }
 
-/*member: refineAfterNestedCapture:[null]*/
+/*member: refineAfterNestedCapture:[null|powerset=1]*/
 refineAfterNestedCapture() {
   _refineAfterNestedCapture(new Class5());
   _refineAfterNestedCapture(new Class6());
@@ -104,24 +108,28 @@
 // Refine a local in a local function after it has been captured.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class7.:[exact=Class7]*/
+/*member: Class7.:[exact=Class7|powerset=0]*/
 class Class7 {
-  /*member: Class7.method7:[null]*/
+  /*member: Class7.method7:[null|powerset=1]*/
   method7() {}
 }
 
-/*member: Class8.:[exact=Class8]*/
+/*member: Class8.:[exact=Class8|powerset=0]*/
 class Class8 {}
 
-/*member: _refineAfterCaptureInNested:Union([exact=Class7], [exact=Class8])*/
-_refineAfterCaptureInNested(/*Union([exact=Class7], [exact=Class8])*/ o) {
-  /*Union([exact=Class7], [exact=Class8])*/
-  localFunction(/*Union([exact=Class7], [exact=Class8])*/ p) {
-    /*Union([exact=Class7], [exact=Class8])*/
+/*member: _refineAfterCaptureInNested:Union([exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 0)*/
+_refineAfterCaptureInNested(
+  /*Union([exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 0)*/ o,
+) {
+  /*Union([exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 0)*/
+  localFunction(
+    /*Union([exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 0)*/ p,
+  ) {
+    /*Union([exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 0)*/
     nestedFunction() => p;
 
-    p. /*invoke: Union([exact=Class7], [exact=Class8])*/ method7();
-    p. /*invoke: Union([exact=Class7], [exact=Class8])*/ method7();
+    p. /*invoke: Union([exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 0)*/ method7();
+    p. /*invoke: Union([exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 0)*/ method7();
 
     return nestedFunction();
   }
@@ -129,7 +137,7 @@
   return localFunction(o);
 }
 
-/*member: refineAfterCaptureInNested:[null]*/
+/*member: refineAfterCaptureInNested:[null|powerset=1]*/
 refineAfterCaptureInNested() {
   _refineAfterCaptureInNested(new Class7());
   _refineAfterCaptureInNested(new Class8());
diff --git a/pkg/compiler/test/inference/data/refine_locals.dart b/pkg/compiler/test/inference/data/refine_locals.dart
index 4e8d40d8..b732140 100644
--- a/pkg/compiler/test/inference/data/refine_locals.dart
+++ b/pkg/compiler/test/inference/data/refine_locals.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   refineToClass();
   refineToClosure();
@@ -13,96 +13,98 @@
 // accesses and updates.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  /*member: Class1.method0:[null]*/
+  /*member: Class1.method0:[null|powerset=1]*/
   method0() {}
-  /*member: Class1.method1:[null]*/
+  /*member: Class1.method1:[null|powerset=1]*/
   method1() {}
-  /*member: Class1.field0:[null|exact=JSUInt31]*/
+  /*member: Class1.field0:[null|exact=JSUInt31|powerset=1]*/
   var field0;
-  /*member: Class1.field1:[null|exact=JSUInt31]*/
+  /*member: Class1.field1:[null|exact=JSUInt31|powerset=1]*/
   var field1;
 }
 
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
 class Class2 {
-  /*member: Class2.method0:[null]*/
+  /*member: Class2.method0:[null|powerset=1]*/
   method0() {}
-  /*member: Class2.method2:[null]*/
+  /*member: Class2.method2:[null|powerset=1]*/
   method2() {}
-  /*member: Class2.field0:[null]*/
+  /*member: Class2.field0:[null|powerset=1]*/
   var field0;
-  /*member: Class2.field2:[null]*/
+  /*member: Class2.field2:[null|powerset=1]*/
   var field2;
 }
 
-/*member: _refineUnion:Union([exact=Class1], [exact=Class2])*/
-_refineUnion(/*Union(null, [exact=Class1], [exact=Class2])*/ o) {
-  o. /*invoke: Union(null, [exact=Class1], [exact=Class2])*/ method0();
-  o. /*invoke: Union([exact=Class1], [exact=Class2])*/ method1();
-  o. /*invoke: Union([exact=Class1], [exact=Class2])*/ method2();
+/*member: _refineUnion:Union([exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 0)*/
+_refineUnion(
+  /*Union(null, [exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 1)*/ o,
+) {
+  o. /*invoke: Union(null, [exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 1)*/ method0();
+  o. /*invoke: Union([exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 0)*/ method1();
+  o. /*invoke: Union([exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 0)*/ method2();
   return o;
 }
 
-/*member: _refineFromMethod:[exact=Class1]*/
-_refineFromMethod(/*[null|exact=Class1]*/ o) {
-  o. /*invoke: [null|exact=Class1]*/ method0();
-  o. /*invoke: [exact=Class1]*/ method1();
+/*member: _refineFromMethod:[exact=Class1|powerset=0]*/
+_refineFromMethod(/*[null|exact=Class1|powerset=1]*/ o) {
+  o. /*invoke: [null|exact=Class1|powerset=1]*/ method0();
+  o. /*invoke: [exact=Class1|powerset=0]*/ method1();
   return o;
 }
 
-/*member: _refineFromGetter:[exact=Class2]*/
-_refineFromGetter(/*[null|exact=Class2]*/ o) {
-  o. /*[null|exact=Class2]*/ field0;
-  o. /*[exact=Class2]*/ field2;
+/*member: _refineFromGetter:[exact=Class2|powerset=0]*/
+_refineFromGetter(/*[null|exact=Class2|powerset=1]*/ o) {
+  o. /*[null|exact=Class2|powerset=1]*/ field0;
+  o. /*[exact=Class2|powerset=0]*/ field2;
   return o;
 }
 
-/*member: _refineFromSetter:[exact=Class1]*/
-_refineFromSetter(/*[null|exact=Class1]*/ o) {
-  o. /*update: [null|exact=Class1]*/ field0 = 0;
-  o. /*update: [exact=Class1]*/ field1 = 0;
+/*member: _refineFromSetter:[exact=Class1|powerset=0]*/
+_refineFromSetter(/*[null|exact=Class1|powerset=1]*/ o) {
+  o. /*update: [null|exact=Class1|powerset=1]*/ field0 = 0;
+  o. /*update: [exact=Class1|powerset=0]*/ field1 = 0;
   return o;
 }
 
-/*member: _noRefinementNullAware:[null|exact=Class1]*/
-_noRefinementNullAware(/*[null|exact=Class1]*/ o) {
+/*member: _noRefinementNullAware:[null|exact=Class1|powerset=1]*/
+_noRefinementNullAware(/*[null|exact=Class1|powerset=1]*/ o) {
   o
       ?.
-      /*invoke: [exact=Class1]*/
+      /*invoke: [exact=Class1|powerset=0]*/
       method1();
   return o;
 }
 
-/*member: _noRefinementNullSelectors:[exact=Class2]*/
-_noRefinementNullSelectors(/*[null|exact=Class2]*/ o) {
-  o /*invoke: [null|exact=Class2]*/ == 2;
-  o. /*[null|exact=Class2]*/ hashCode;
-  o. /*[null|exact=Class2]*/ runtimeType;
-  o. /*[null|exact=Class2]*/ toString;
-  o. /*[null|exact=Class2]*/ noSuchMethod;
-  o. /*invoke: [null|exact=Class2]*/ toString();
-  o. /*invoke: [null|exact=Class2]*/ noSuchMethod(
+/*member: _noRefinementNullSelectors:[exact=Class2|powerset=0]*/
+_noRefinementNullSelectors(/*[null|exact=Class2|powerset=1]*/ o) {
+  o /*invoke: [null|exact=Class2|powerset=1]*/ == 2;
+  o. /*[null|exact=Class2|powerset=1]*/ hashCode;
+  o. /*[null|exact=Class2|powerset=1]*/ runtimeType;
+  o. /*[null|exact=Class2|powerset=1]*/ toString;
+  o. /*[null|exact=Class2|powerset=1]*/ noSuchMethod;
+  o. /*invoke: [null|exact=Class2|powerset=1]*/ toString();
+  o. /*invoke: [null|exact=Class2|powerset=1]*/ noSuchMethod(
     null as dynamic,
   ); // assumed to throw.
-  o. /*[exact=Class2]*/ toString;
+  o. /*[exact=Class2|powerset=0]*/ toString;
   return o;
 }
 
-/*member: _noRefinementUpdatedVariable:[null|exact=Class1]*/
-_noRefinementUpdatedVariable(/*[null|exact=Class1]*/ o) {
-  (o = o). /*invoke: [null|exact=Class1]*/ method1();
-  (o = o). /*invoke: [null|exact=Class1]*/ method0();
+/*member: _noRefinementUpdatedVariable:[null|exact=Class1|powerset=1]*/
+_noRefinementUpdatedVariable(/*[null|exact=Class1|powerset=1]*/ o) {
+  (o = o). /*invoke: [null|exact=Class1|powerset=1]*/ method1();
+  (o = o). /*invoke: [null|exact=Class1|powerset=1]*/ method0();
   return o;
 }
 
-/*member: _condition:Value([exact=JSBool], value: false)*/
+/*member: _condition:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
 @pragma('dart2js:assumeDynamic')
 @pragma('dart2js:noInline')
 get _condition => false;
 
-/*member: refineToClass:[null]*/
+/*member: refineToClass:[null|powerset=1]*/
 refineToClass() {
   var nullOrClass1 = _condition ? null : Class1();
   var nullOrClass2 = _condition ? null : Class2();
@@ -121,21 +123,21 @@
 // Refine the type of a local variable through a sequence of invocations.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _refineToClosureLocal:[subclass=Closure]*/
+/*member: _refineToClosureLocal:[subclass=Closure|powerset=0]*/
 _refineToClosureLocal() {
-  var f = /*[null]*/ ({/*[exact=JSUInt31]*/ a}) {};
+  var f = /*[null|powerset=1]*/ ({/*[exact=JSUInt31|powerset=0]*/ a}) {};
   f(a: 0);
   return f;
 }
 
-/*member: _refineToClosureLocalCall:[subclass=Closure]*/
+/*member: _refineToClosureLocalCall:[subclass=Closure|powerset=0]*/
 _refineToClosureLocalCall() {
-  var f = /*[null]*/ ({/*[exact=JSUInt31]*/ b}) {};
+  var f = /*[null|powerset=1]*/ ({/*[exact=JSUInt31|powerset=0]*/ b}) {};
   f.call(b: 0);
   return f;
 }
 
-/*member: refineToClosure:[null]*/
+/*member: refineToClosure:[null|powerset=1]*/
 refineToClosure() {
   _refineToClosureLocal();
   _refineToClosureLocalCall();
diff --git a/pkg/compiler/test/inference/data/refine_order.dart b/pkg/compiler/test/inference/data/refine_order.dart
index b32dfd6..33175d2 100644
--- a/pkg/compiler/test/inference/data/refine_order.dart
+++ b/pkg/compiler/test/inference/data/refine_order.dart
@@ -2,16 +2,19 @@
 // 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.
 
-/*member: Class.:[exact=Class]*/
+/*member: Class.:[exact=Class|powerset=0]*/
 class Class {
-  /*member: Class.field:[exact=JSUInt31]*/
+  /*member: Class.field:[exact=JSUInt31|powerset=0]*/
   var field = 42;
 
-  /*member: Class.method:[null]*/
-  method([/*[null|exact=JSUInt31]*/ a, /*[null|exact=JSUInt31]*/ b]) {}
+  /*member: Class.method:[null|powerset=1]*/
+  method([
+    /*[null|exact=JSUInt31|powerset=1]*/ a,
+    /*[null|exact=JSUInt31|powerset=1]*/ b,
+  ]) {}
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   Class();
   statementOrderFieldAccess(null);
@@ -31,129 +34,133 @@
 // Accesses in statements.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: statementOrderFieldAccess:[null]*/
+/*member: statementOrderFieldAccess:[null|powerset=1]*/
 @pragma('dart2js:assumeDynamic')
-statementOrderFieldAccess(/*[null|subclass=Object]*/ o) {
+statementOrderFieldAccess(/*[null|subclass=Object|powerset=1]*/ o) {
   o.field;
-  o. /*[subclass=Object]*/ field;
+  o. /*[subclass=Object|powerset=0]*/ field;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Updates in statements.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: statementOrderFieldUpdate:[null]*/
+/*member: statementOrderFieldUpdate:[null|powerset=1]*/
 @pragma('dart2js:assumeDynamic')
-statementOrderFieldUpdate(/*[null|subclass=Object]*/ o) {
+statementOrderFieldUpdate(/*[null|subclass=Object|powerset=1]*/ o) {
   o.field = 42;
-  o. /*update: [subclass=Object]*/ field = 42;
+  o. /*update: [subclass=Object|powerset=0]*/ field = 42;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Invocations in statements.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: statementOrderInvocation:[null]*/
+/*member: statementOrderInvocation:[null|powerset=1]*/
 @pragma('dart2js:assumeDynamic')
-statementOrderInvocation(/*[null|subclass=Object]*/ o) {
+statementOrderInvocation(/*[null|subclass=Object|powerset=1]*/ o) {
   o.method(null);
-  o. /*invoke: [subclass=Object]*/ method(null);
+  o. /*invoke: [subclass=Object|powerset=0]*/ method(null);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Access in argument before method call.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: receiverVsArgument:[null]*/
+/*member: receiverVsArgument:[null|powerset=1]*/
 @pragma('dart2js:assumeDynamic')
-receiverVsArgument(/*[null|subclass=Object]*/ o) {
+receiverVsArgument(/*[null|subclass=Object|powerset=1]*/ o) {
   // TODO(johnniwinther): The arguments should refine the receiver.
   o.method(o.field);
-  o. /*[subclass=Object]*/ field;
+  o. /*[subclass=Object|powerset=0]*/ field;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Access in multiple arguments.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: argumentsOrder:[null]*/
+/*member: argumentsOrder:[null|powerset=1]*/
 @pragma('dart2js:assumeDynamic')
-argumentsOrder(/*[null|subclass=Object]*/ o) {
+argumentsOrder(/*[null|subclass=Object|powerset=1]*/ o) {
   // TODO(johnniwinther): The arguments should refine the receiver.
-  o.method(o.field, o. /*[subclass=Object]*/ field);
-  o. /*[subclass=Object]*/ field;
+  o.method(o.field, o. /*[subclass=Object|powerset=0]*/ field);
+  o. /*[subclass=Object|powerset=0]*/ field;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Access in both sides of an operator call.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: operatorOrder:[null]*/
+/*member: operatorOrder:[null|powerset=1]*/
 @pragma('dart2js:assumeDynamic')
-operatorOrder(/*[null|subclass=Object]*/ o) {
-  o.field /*invoke: [exact=JSUInt31]*/ < o. /*[subclass=Object]*/ field;
-  o. /*[subclass=Object]*/ field;
+operatorOrder(/*[null|subclass=Object|powerset=1]*/ o) {
+  o.field /*invoke: [exact=JSUInt31|powerset=0]*/ <
+      o. /*[subclass=Object|powerset=0]*/ field;
+  o. /*[subclass=Object|powerset=0]*/ field;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Assign after access in right-hand side.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: updateVsRhs:[null]*/
+/*member: updateVsRhs:[null|powerset=1]*/
 @pragma('dart2js:assumeDynamic')
-updateVsRhs(/*[null|subclass=Object]*/ o) {
+updateVsRhs(/*[null|subclass=Object|powerset=1]*/ o) {
   // TODO(johnniwinther): The right-hand side should refine the left-hand side
   // receiver.
   o.field = o.field;
-  o. /*[subclass=Object]*/ field;
+  o. /*[subclass=Object|powerset=0]*/ field;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Access in both sides of a logical or.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: logicalOr:[null]*/
+/*member: logicalOr:[null|powerset=1]*/
 @pragma('dart2js:assumeDynamic')
-logicalOr(/*[null|subclass=Object]*/ o) {
-  o.field || o. /*[subclass=Object]*/ field;
-  o. /*[subclass=Object]*/ field;
+logicalOr(/*[null|subclass=Object|powerset=1]*/ o) {
+  o.field || o. /*[subclass=Object|powerset=0]*/ field;
+  o. /*[subclass=Object|powerset=0]*/ field;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Access in condition of a conditional expression.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: conditionalCondition:[null]*/
+/*member: conditionalCondition:[null|powerset=1]*/
 @pragma('dart2js:assumeDynamic')
-conditionalCondition(/*[null|subclass=Object]*/ o) {
-  o.field ? o. /*[subclass=Object]*/ field : o. /*[subclass=Object]*/ field;
-  o. /*[subclass=Object]*/ field;
+conditionalCondition(/*[null|subclass=Object|powerset=1]*/ o) {
+  o.field
+      ? o. /*[subclass=Object|powerset=0]*/ field
+      : o. /*[subclass=Object|powerset=0]*/ field;
+  o. /*[subclass=Object|powerset=0]*/ field;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Access both branches of a conditional expression.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _#flag:[exact=_Cell]*/
-late bool /*Value([exact=JSBool], value: true)*/ /*update: [exact=_Cell]*/ flag;
+/*member: _#flag:[exact=_Cell|powerset=0]*/
+late bool /*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ /*update: [exact=_Cell|powerset=0]*/
+flag;
 
-/*member: conditionalBothBranches:[null]*/
+/*member: conditionalBothBranches:[null|powerset=1]*/
 @pragma('dart2js:assumeDynamic')
-conditionalBothBranches(/*[null|subclass=Object]*/ o) {
+conditionalBothBranches(/*[null|subclass=Object|powerset=1]*/ o) {
   // ignore: DEAD_CODE
   (flag = true) ? o.field : o.field;
-  o. /*[subclass=Object]*/ field;
+  o. /*[subclass=Object|powerset=0]*/ field;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Access in only one branch of a conditional expression.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: conditionalOneBranchOnly:[null]*/
+/*member: conditionalOneBranchOnly:[null|powerset=1]*/
 @pragma('dart2js:assumeDynamic')
-conditionalOneBranchOnly(/*[null|subclass=Object]*/ o) {
+conditionalOneBranchOnly(/*[null|subclass=Object|powerset=1]*/ o) {
   // ignore: DEAD_CODE
   (flag = true) ? o.field : null;
   o.field;
-  o. /*[subclass=Object]*/ field;
+  o. /*[subclass=Object|powerset=0]*/ field;
 }
diff --git a/pkg/compiler/test/inference/data/return.dart b/pkg/compiler/test/inference/data/return.dart
index 01a574f..389ed5b 100644
--- a/pkg/compiler/test/inference/data/return.dart
+++ b/pkg/compiler/test/inference/data/return.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   return null;
 }
diff --git a/pkg/compiler/test/inference/data/shift_right_unsigned.dart b/pkg/compiler/test/inference/data/shift_right_unsigned.dart
index 22132d2..2c05a40 100644
--- a/pkg/compiler/test/inference/data/shift_right_unsigned.dart
+++ b/pkg/compiler/test/inference/data/shift_right_unsigned.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   g1 = -1;
   g1 = 2;
@@ -12,27 +12,27 @@
   test4();
 }
 
-/*member: g1:[subclass=JSInt]*/
+/*member: g1:[subclass=JSInt|powerset=0]*/
 int g1 = 0;
 
-/*member: test1:[exact=JSUInt31]*/
+/*member: test1:[exact=JSUInt31|powerset=0]*/
 test1() {
   int a = 1234;
   int b = 2;
-  return a /*invoke: [exact=JSUInt31]*/ >>> b;
+  return a /*invoke: [exact=JSUInt31|powerset=0]*/ >>> b;
 }
 
-/*member: test2:[subclass=JSUInt32]*/
+/*member: test2:[subclass=JSUInt32|powerset=0]*/
 test2() {
-  return g1 /*invoke: [subclass=JSInt]*/ >>> g1;
+  return g1 /*invoke: [subclass=JSInt|powerset=0]*/ >>> g1;
 }
 
-/*member: test3:[subclass=JSUInt32]*/
+/*member: test3:[subclass=JSUInt32|powerset=0]*/
 test3() {
-  return g1 /*invoke: [subclass=JSInt]*/ >>> 1;
+  return g1 /*invoke: [subclass=JSInt|powerset=0]*/ >>> 1;
 }
 
-/*member: test4:[exact=JSUInt31]*/
+/*member: test4:[exact=JSUInt31|powerset=0]*/
 test4() {
-  return 10 /*invoke: [exact=JSUInt31]*/ >>> g1;
+  return 10 /*invoke: [exact=JSUInt31|powerset=0]*/ >>> g1;
 }
diff --git a/pkg/compiler/test/inference/data/simple.dart b/pkg/compiler/test/inference/data/simple.dart
index 47b8c18..04231a0 100644
--- a/pkg/compiler/test/inference/data/simple.dart
+++ b/pkg/compiler/test/inference/data/simple.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   zero();
   one();
@@ -28,84 +28,84 @@
 /// Return a zero integer literal.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: zero:[exact=JSUInt31]*/
+/*member: zero:[exact=JSUInt31|powerset=0]*/
 zero() => 0;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return a positive integer literal.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: one:[exact=JSUInt31]*/
+/*member: one:[exact=JSUInt31|powerset=0]*/
 one() => 1;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return a double literal.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: half:[exact=JSNumNotInt]*/
+/*member: half:[exact=JSNumNotInt|powerset=0]*/
 half() => 0.5;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return an integer valued zero double literal.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: zeroPointZero:[exact=JSUInt31]*/
+/*member: zeroPointZero:[exact=JSUInt31|powerset=0]*/
 zeroPointZero() => 0.0;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return an integer valued double literal.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: onePointZero:[exact=JSUInt31]*/
+/*member: onePointZero:[exact=JSUInt31|powerset=0]*/
 onePointZero() => 1.0;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return a >31bit integer literal.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: large:[subclass=JSUInt32]*/
+/*member: large:[subclass=JSUInt32|powerset=0]*/
 large() => 2147483648;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return a >32bit integer literal.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: huge:[subclass=JSPositiveInt]*/
+/*member: huge:[subclass=JSPositiveInt|powerset=0]*/
 huge() => 4294967296;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return a negative integer literal.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: minusOne:[subclass=JSInt]*/
+/*member: minusOne:[subclass=JSInt|powerset=0]*/
 minusOne() => -1;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return a negative double literal.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: minusHalf:[exact=JSNumNotInt]*/
+/*member: minusHalf:[exact=JSNumNotInt|powerset=0]*/
 minusHalf() => -0.5;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return an empty string.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: emptyString:Value([exact=JSString], value: "")*/
+/*member: emptyString:Value([exact=JSString|powerset=0], value: "", powerset: 0)*/
 emptyString() => '';
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return a non-empty string.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: nonEmptyString:Value([exact=JSString], value: "foo")*/
+/*member: nonEmptyString:Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/
 nonEmptyString() => 'foo';
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return a string juxtaposition.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: stringJuxtaposition:Value([exact=JSString], value: "foobar")*/
+/*member: stringJuxtaposition:Value([exact=JSString|powerset=0], value: "foobar", powerset: 0)*/
 stringJuxtaposition() =>
     'foo'
     'bar';
@@ -114,29 +114,29 @@
 /// Return a string constant interpolation.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: stringConstantInterpolation:Value([exact=JSString], value: "foobar")*/
+/*member: stringConstantInterpolation:Value([exact=JSString|powerset=0], value: "foobar", powerset: 0)*/
 stringConstantInterpolation() => 'foo${'bar'}';
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return a string non-constant interpolation.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _method1:[exact=JSBool]*/
-_method1(/*[exact=JSBool]*/ c) => c;
+/*member: _method1:[exact=JSBool|powerset=0]*/
+_method1(/*[exact=JSBool|powerset=0]*/ c) => c;
 
-/*member: stringNonConstantInterpolation:[exact=JSString]*/
+/*member: stringNonConstantInterpolation:[exact=JSString|powerset=0]*/
 stringNonConstantInterpolation() => 'foo${_method1(true)}${_method1(false)}';
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return a symbol literal.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: symbolLiteral:[exact=Symbol]*/
+/*member: symbolLiteral:[exact=Symbol|powerset=0]*/
 symbolLiteral() => #main;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Return a type literal.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: typeLiteral:[exact=_Type]*/
+/*member: typeLiteral:[exact=_Type|powerset=0]*/
 typeLiteral() => Object;
diff --git a/pkg/compiler/test/inference/data/static.dart b/pkg/compiler/test/inference/data/static.dart
index 5dcc120..cee7783 100644
--- a/pkg/compiler/test/inference/data/static.dart
+++ b/pkg/compiler/test/inference/data/static.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   simpleStaticCall();
   staticCallWithPositionalArguments1();
@@ -39,10 +39,10 @@
 /// Call a static method that has a constant return value.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: simpleStaticCall:[exact=JSUInt31]*/
+/*member: simpleStaticCall:[exact=JSUInt31|powerset=0]*/
 simpleStaticCall() => _returnInt();
 
-/*member: _returnInt:[exact=JSUInt31]*/
+/*member: _returnInt:[exact=JSUInt31|powerset=0]*/
 _returnInt() => 0;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -50,162 +50,168 @@
 /// is returned.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: staticCallWithPositionalArguments1:[exact=JSUInt31]*/
+/*member: staticCallWithPositionalArguments1:[exact=JSUInt31|powerset=0]*/
 staticCallWithPositionalArguments1() => _returnFirst(0, 0.5);
 
-/*member: _returnFirst:[exact=JSUInt31]*/
-_returnFirst(/*[exact=JSUInt31]*/ a, /*[exact=JSNumNotInt]*/ b) => a;
+/*member: _returnFirst:[exact=JSUInt31|powerset=0]*/
+_returnFirst(
+  /*[exact=JSUInt31|powerset=0]*/ a,
+  /*[exact=JSNumNotInt|powerset=0]*/ b,
+) => a;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Call a static method that has two positional parameters, the second argument
 /// is returned.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: staticCallWithPositionalArguments2:[exact=JSNumNotInt]*/
+/*member: staticCallWithPositionalArguments2:[exact=JSNumNotInt|powerset=0]*/
 staticCallWithPositionalArguments2() => _returnSecond(0, 0.5);
 
-/*member: _returnSecond:[exact=JSNumNotInt]*/
-_returnSecond(/*[exact=JSUInt31]*/ a, /*[exact=JSNumNotInt]*/ b) => b;
+/*member: _returnSecond:[exact=JSNumNotInt|powerset=0]*/
+_returnSecond(
+  /*[exact=JSUInt31|powerset=0]*/ a,
+  /*[exact=JSNumNotInt|powerset=0]*/ b,
+) => b;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// A static method that has an optional parameter with no explicit default
 /// value. Only one call site with no arguments.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: staticCallWithOptionalArguments1:[null]*/
+/*member: staticCallWithOptionalArguments1:[null|powerset=1]*/
 staticCallWithOptionalArguments1() => _returnDefaultNull();
 
-/*member: _returnDefaultNull:[null]*/
-_returnDefaultNull([/*[null]*/ a]) => a;
+/*member: _returnDefaultNull:[null|powerset=1]*/
+_returnDefaultNull([/*[null|powerset=1]*/ a]) => a;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// A static method that has an optional parameter with an explicit default
 /// value of `null`. Only one call site with no arguments.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: staticCallWithOptionalArguments2:[null]*/
+/*member: staticCallWithOptionalArguments2:[null|powerset=1]*/
 staticCallWithOptionalArguments2() => _returnDefaultNullExplicit();
 
-/*member: _returnDefaultNullExplicit:[null]*/
-_returnDefaultNullExplicit([/*[null]*/ a = null]) => a;
+/*member: _returnDefaultNullExplicit:[null|powerset=1]*/
+_returnDefaultNullExplicit([/*[null|powerset=1]*/ a = null]) => a;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// A static method that has an optional parameter. Only one call site with an
 /// explicit argument.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: staticCallWithOptionalArguments3:[exact=JSUInt31]*/
+/*member: staticCallWithOptionalArguments3:[exact=JSUInt31|powerset=0]*/
 staticCallWithOptionalArguments3() => _returnDefaultNullCalled(0);
 
-/*member: _returnDefaultNullCalled:[exact=JSUInt31]*/
-_returnDefaultNullCalled([/*[exact=JSUInt31]*/ a]) => a;
+/*member: _returnDefaultNullCalled:[exact=JSUInt31|powerset=0]*/
+_returnDefaultNullCalled([/*[exact=JSUInt31|powerset=0]*/ a]) => a;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// A static method that has an optional parameter. Two call sites, one
 /// with an explicit argument and one with no arguments.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: staticCallWithOptionalArguments4a:[null|exact=JSUInt31]*/
+/*member: staticCallWithOptionalArguments4a:[null|exact=JSUInt31|powerset=1]*/
 staticCallWithOptionalArguments4a() => _returnDefaultNullCalledTwice();
 
-/*member: staticCallWithOptionalArguments4b:[null|exact=JSUInt31]*/
+/*member: staticCallWithOptionalArguments4b:[null|exact=JSUInt31|powerset=1]*/
 staticCallWithOptionalArguments4b() => _returnDefaultNullCalledTwice(0);
 
-/*member: _returnDefaultNullCalledTwice:[null|exact=JSUInt31]*/
-_returnDefaultNullCalledTwice([/*[null|exact=JSUInt31]*/ a]) => a;
+/*member: _returnDefaultNullCalledTwice:[null|exact=JSUInt31|powerset=1]*/
+_returnDefaultNullCalledTwice([/*[null|exact=JSUInt31|powerset=1]*/ a]) => a;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// A static method that has an optional parameter with a default value of `0`.
 /// Only one call site with no arguments.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: staticCallWithOptionalArguments5:[exact=JSUInt31]*/
+/*member: staticCallWithOptionalArguments5:[exact=JSUInt31|powerset=0]*/
 staticCallWithOptionalArguments5() => _returnDefaultZero();
 
-/*member: _returnDefaultZero:[exact=JSUInt31]*/
-_returnDefaultZero([/*[exact=JSUInt31]*/ a = 0]) => a;
+/*member: _returnDefaultZero:[exact=JSUInt31|powerset=0]*/
+_returnDefaultZero([/*[exact=JSUInt31|powerset=0]*/ a = 0]) => a;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// A static method that has an optional parameter with a default value of `0`.
 /// Only one call site with an argument of a different type.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: staticCallWithOptionalArguments6:[exact=JSNumNotInt]*/
+/*member: staticCallWithOptionalArguments6:[exact=JSNumNotInt|powerset=0]*/
 staticCallWithOptionalArguments6() => _returnDefaultZeroCalled(0.5);
 
-/*member: _returnDefaultZeroCalled:[exact=JSNumNotInt]*/
-_returnDefaultZeroCalled([/*[exact=JSNumNotInt]*/ a = 0]) => a;
+/*member: _returnDefaultZeroCalled:[exact=JSNumNotInt|powerset=0]*/
+_returnDefaultZeroCalled([/*[exact=JSNumNotInt|powerset=0]*/ a = 0]) => a;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// A static method that has a named parameter with a default value of `0`.
 /// Only one call site with no arguments.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: staticCallWithNamedArguments1:[exact=JSUInt31]*/
+/*member: staticCallWithNamedArguments1:[exact=JSUInt31|powerset=0]*/
 staticCallWithNamedArguments1() => _returnNamedDefaultZero();
 
-/*member: _returnNamedDefaultZero:[exact=JSUInt31]*/
-_returnNamedDefaultZero({/*[exact=JSUInt31]*/ a = 0}) => a;
+/*member: _returnNamedDefaultZero:[exact=JSUInt31|powerset=0]*/
+_returnNamedDefaultZero({/*[exact=JSUInt31|powerset=0]*/ a = 0}) => a;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// A static method that has a named parameter with a default value of `0`.
 /// Only one call site with an argument of a different type.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: staticCallWithNamedArguments2:[exact=JSNumNotInt]*/
+/*member: staticCallWithNamedArguments2:[exact=JSNumNotInt|powerset=0]*/
 staticCallWithNamedArguments2() => _returnNamedDefaultZeroCalled(a: 0.5);
 
-/*member: _returnNamedDefaultZeroCalled:[exact=JSNumNotInt]*/
-_returnNamedDefaultZeroCalled({/*[exact=JSNumNotInt]*/ a = 0}) => a;
+/*member: _returnNamedDefaultZeroCalled:[exact=JSNumNotInt|powerset=0]*/
+_returnNamedDefaultZeroCalled({/*[exact=JSNumNotInt|powerset=0]*/ a = 0}) => a;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// A static method that has a named parameter. Two call sites, one with an
 /// explicit argument and one with no arguments.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: staticCallWithNamedArguments3a:[null|exact=JSNumNotInt]*/
+/*member: staticCallWithNamedArguments3a:[null|exact=JSNumNotInt|powerset=1]*/
 staticCallWithNamedArguments3a() => _returnNamedNullCalledTwice();
 
-/*member: staticCallWithNamedArguments3b:[null|exact=JSNumNotInt]*/
+/*member: staticCallWithNamedArguments3b:[null|exact=JSNumNotInt|powerset=1]*/
 staticCallWithNamedArguments3b() => _returnNamedNullCalledTwice(a: 0.5);
 
-/*member: _returnNamedNullCalledTwice:[null|exact=JSNumNotInt]*/
-_returnNamedNullCalledTwice({/*[null|exact=JSNumNotInt]*/ a}) => a;
+/*member: _returnNamedNullCalledTwice:[null|exact=JSNumNotInt|powerset=1]*/
+_returnNamedNullCalledTwice({/*[null|exact=JSNumNotInt|powerset=1]*/ a}) => a;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Call an uninitialized top level field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _field1:[null]*/
+/*member: _field1:[null|powerset=1]*/
 dynamic _field1;
 
-/*member: invokeStaticFieldUninitialized:[empty]*/
+/*member: invokeStaticFieldUninitialized:[empty|powerset=0]*/
 invokeStaticFieldUninitialized() => _field1();
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Call a top level field initialized to a tear-off of a top level method.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _method1:[exact=JSUInt31]*/
+/*member: _method1:[exact=JSUInt31|powerset=0]*/
 _method1() => 42;
 
-/*member: _field2:[subclass=Closure]*/
+/*member: _field2:[subclass=Closure|powerset=0]*/
 dynamic _field2 = _method1;
 
-/*member: invokeStaticFieldTearOff:[null|subclass=Object]*/
+/*member: invokeStaticFieldTearOff:[null|subclass=Object|powerset=1]*/
 invokeStaticFieldTearOff() => _field2();
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Call a top level field initialized to a tear-off of a top level method.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _method5:Value([exact=JSString], value: "")*/
+/*member: _method5:Value([exact=JSString|powerset=0], value: "", powerset: 0)*/
 String _method5() => '';
 
-/*member: _field5:[subclass=Closure]*/
+/*member: _field5:[subclass=Closure|powerset=0]*/
 String Function() _field5 = _method5;
 
-/*member: invokeStaticTypedFieldTearOff:[exact=JSString]*/
+/*member: invokeStaticTypedFieldTearOff:[exact=JSString|powerset=0]*/
 invokeStaticTypedFieldTearOff() => _field5();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -213,42 +219,42 @@
 /// taking one argument.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _method2:[exact=JSUInt31]*/
-_method2(/*[exact=JSUInt31]*/ o) => 42;
+/*member: _method2:[exact=JSUInt31|powerset=0]*/
+_method2(/*[exact=JSUInt31|powerset=0]*/ o) => 42;
 
-/*member: _field3:[subclass=Closure]*/
+/*member: _field3:[subclass=Closure|powerset=0]*/
 dynamic _field3 = _method2;
 
-/*member: invokeStaticFieldTearOffParameters:[null|subclass=Object]*/
+/*member: invokeStaticFieldTearOffParameters:[null|subclass=Object|powerset=1]*/
 invokeStaticFieldTearOffParameters() => _field3(42);
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Call a top level getter returning a tear-off of a top level method.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _method3:[exact=JSUInt31]*/
+/*member: _method3:[exact=JSUInt31|powerset=0]*/
 _method3() => 42;
 
-/*member: _getter1:[subclass=Closure]*/
+/*member: _getter1:[subclass=Closure|powerset=0]*/
 get _getter1 => _method3;
 
-/*member: invokeStaticGetterTearOff:[null|subclass=Object]*/
+/*member: invokeStaticGetterTearOff:[null|subclass=Object|powerset=1]*/
 invokeStaticGetterTearOff() => _getter1();
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Call a typed top level getter returning a tear-off of a top level method.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _method6:[exact=JSUInt31]*/
+/*member: _method6:[exact=JSUInt31|powerset=0]*/
 int _method6() => 0;
 
-/*member: _field7:[subclass=Closure]*/
+/*member: _field7:[subclass=Closure|powerset=0]*/
 int Function() _field7 = _method6;
 
-/*member: _getter3:[subclass=Closure]*/
+/*member: _getter3:[subclass=Closure|powerset=0]*/
 int Function() get _getter3 => _field7;
 
-/*member: invokeStaticTypedGetterTearOff:[subclass=JSInt]*/
+/*member: invokeStaticTypedGetterTearOff:[subclass=JSInt|powerset=0]*/
 invokeStaticTypedGetterTearOff() => _getter3();
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -256,13 +262,16 @@
 /// arguments.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _method4:Union([exact=JSString], [exact=JSUInt31])*/
-T _method4<T>(T /*Union([exact=JSString], [exact=JSUInt31])*/ t) => t;
+/*member: _method4:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+T _method4<T>(
+  T /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+  t,
+) => t;
 
-/*member: invokeStaticGenericMethod1:[exact=JSUInt31]*/
+/*member: invokeStaticGenericMethod1:[exact=JSUInt31|powerset=0]*/
 invokeStaticGenericMethod1() => _method4(0);
 
-/*member: invokeStaticGenericMethod2:[exact=JSString]*/
+/*member: invokeStaticGenericMethod2:[exact=JSString|powerset=0]*/
 invokeStaticGenericMethod2() => _method4('');
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -270,13 +279,13 @@
 /// arguments.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _getter2:[subclass=Closure]*/
+/*member: _getter2:[subclass=Closure|powerset=0]*/
 T Function<T>(T) get _getter2 => _method4;
 
-/*member: invokeStaticGenericGetter1:[subclass=JSInt]*/
+/*member: invokeStaticGenericGetter1:[subclass=JSInt|powerset=0]*/
 invokeStaticGenericGetter1() => _getter2(0);
 
-/*member: invokeStaticGenericGetter2:[exact=JSString]*/
+/*member: invokeStaticGenericGetter2:[exact=JSString|powerset=0]*/
 invokeStaticGenericGetter2() => _getter2('');
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -284,11 +293,11 @@
 /// arguments.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _field4:[subclass=Closure]*/
+/*member: _field4:[subclass=Closure|powerset=0]*/
 T Function<T>(T) _field4 = _method4;
 
-/*member: invokeStaticGenericField1:[subclass=JSInt]*/
+/*member: invokeStaticGenericField1:[subclass=JSInt|powerset=0]*/
 invokeStaticGenericField1() => _field4(0);
 
-/*member: invokeStaticGenericField2:[exact=JSString]*/
+/*member: invokeStaticGenericField2:[exact=JSString|powerset=0]*/
 invokeStaticGenericField2() => _field4('');
diff --git a/pkg/compiler/test/inference/data/static_get.dart b/pkg/compiler/test/inference/data/static_get.dart
index 0a3bf8a..deeda4a 100644
--- a/pkg/compiler/test/inference/data/static_get.dart
+++ b/pkg/compiler/test/inference/data/static_get.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   getTopLevelFieldUninitialized();
   getStaticFieldUninitialized();
@@ -22,10 +22,10 @@
 /// Static get of an uninitialized top level field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _field1:[null]*/
+/*member: _field1:[null|powerset=1]*/
 var _field1;
 
-/*member: getTopLevelFieldUninitialized:[null]*/
+/*member: getTopLevelFieldUninitialized:[null|powerset=1]*/
 getTopLevelFieldUninitialized() => _field1;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -33,21 +33,21 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class1 {
-  /*member: Class1.field:[null]*/
+  /*member: Class1.field:[null|powerset=1]*/
   static var field;
 }
 
-/*member: getStaticFieldUninitialized:[null]*/
+/*member: getStaticFieldUninitialized:[null|powerset=1]*/
 getStaticFieldUninitialized() => Class1.field;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Static get of an initialized top level field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _field2:[exact=JSUInt31]*/
+/*member: _field2:[exact=JSUInt31|powerset=0]*/
 var _field2 = 42;
 
-/*member: getTopLevelFieldInitialized:[exact=JSUInt31]*/
+/*member: getTopLevelFieldInitialized:[exact=JSUInt31|powerset=0]*/
 getTopLevelFieldInitialized() => _field2;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -55,11 +55,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class2 {
-  /*member: Class2.field:[exact=JSUInt31]*/
+  /*member: Class2.field:[exact=JSUInt31|powerset=0]*/
   static var field = 42;
 }
 
-/*member: getStaticFieldInitialized:[exact=JSUInt31]*/
+/*member: getStaticFieldInitialized:[exact=JSUInt31|powerset=0]*/
 getStaticFieldInitialized() => Class2.field;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -67,13 +67,13 @@
 /// null.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _method3:[exact=JSUInt31]*/
+/*member: _method3:[exact=JSUInt31|powerset=0]*/
 _method3() => 42;
 
-/*member: _field3:[null|exact=JSUInt31]*/
+/*member: _field3:[null|exact=JSUInt31|powerset=1]*/
 var _field3 = _method3();
 
-/*member: getTopLevelFieldInitializedPotentiallyNull:[null|exact=JSUInt31]*/
+/*member: getTopLevelFieldInitializedPotentiallyNull:[null|exact=JSUInt31|powerset=1]*/
 getTopLevelFieldInitializedPotentiallyNull() => _field3;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -81,24 +81,24 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class3 {
-  /*member: Class3.method:[exact=JSUInt31]*/
+  /*member: Class3.method:[exact=JSUInt31|powerset=0]*/
   static method() => 42;
 
-  /*member: Class3.field:[null|exact=JSUInt31]*/
+  /*member: Class3.field:[null|exact=JSUInt31|powerset=1]*/
   static var field = method();
 }
 
-/*member: getStaticFieldInitializedPotentiallyNull:[null|exact=JSUInt31]*/
+/*member: getStaticFieldInitializedPotentiallyNull:[null|exact=JSUInt31|powerset=1]*/
 getStaticFieldInitializedPotentiallyNull() => Class3.field;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Static get of a top level method.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _method4:[exact=JSUInt31]*/
+/*member: _method4:[exact=JSUInt31|powerset=0]*/
 _method4() => 42;
 
-/*member: getTopLevelMethod:[subclass=Closure]*/
+/*member: getTopLevelMethod:[subclass=Closure|powerset=0]*/
 getTopLevelMethod() => _method4;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -106,21 +106,21 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class4 {
-  /*member: Class4.method:[exact=JSUInt31]*/
+  /*member: Class4.method:[exact=JSUInt31|powerset=0]*/
   static method() => 42;
 }
 
-/*member: getStaticMethod:[subclass=Closure]*/
+/*member: getStaticMethod:[subclass=Closure|powerset=0]*/
 getStaticMethod() => Class4.method;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Static get of a top level getter.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _getter1:[exact=JSUInt31]*/
+/*member: _getter1:[exact=JSUInt31|powerset=0]*/
 get _getter1 => 42;
 
-/*member: getTopLevelGetter:[exact=JSUInt31]*/
+/*member: getTopLevelGetter:[exact=JSUInt31|powerset=0]*/
 getTopLevelGetter() => _getter1;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -128,9 +128,9 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class5 {
-  /*member: Class5.getter:[exact=JSUInt31]*/
+  /*member: Class5.getter:[exact=JSUInt31|powerset=0]*/
   static get getter => 42;
 }
 
-/*member: getStaticGetter:[exact=JSUInt31]*/
+/*member: getStaticGetter:[exact=JSUInt31|powerset=0]*/
 getStaticGetter() => Class5.getter;
diff --git a/pkg/compiler/test/inference/data/static_set.dart b/pkg/compiler/test/inference/data/static_set.dart
index 80c95eb..cf1bfb6 100644
--- a/pkg/compiler/test/inference/data/static_set.dart
+++ b/pkg/compiler/test/inference/data/static_set.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   setTopLevelFieldUninitialized();
   setStaticFieldUninitialized();
@@ -17,10 +17,10 @@
 /// Static set of an uninitialized top level field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: field1:[null|exact=JSUInt31]*/
+/*member: field1:[null|exact=JSUInt31|powerset=1]*/
 var field1;
 
-/*member: setTopLevelFieldUninitialized:[exact=JSUInt31]*/
+/*member: setTopLevelFieldUninitialized:[exact=JSUInt31|powerset=0]*/
 setTopLevelFieldUninitialized() => field1 = 42;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -28,21 +28,21 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class1 {
-  /*member: Class1.field:[null|exact=JSUInt31]*/
+  /*member: Class1.field:[null|exact=JSUInt31|powerset=1]*/
   static var field;
 }
 
-/*member: setStaticFieldUninitialized:[exact=JSUInt31]*/
+/*member: setStaticFieldUninitialized:[exact=JSUInt31|powerset=0]*/
 setStaticFieldUninitialized() => Class1.field = 42;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Static set of an initialized top level field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: field2:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: field2:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 dynamic field2 = '';
 
-/*member: setTopLevelFieldInitialized:[exact=JSUInt31]*/
+/*member: setTopLevelFieldInitialized:[exact=JSUInt31|powerset=0]*/
 setTopLevelFieldInitialized() => field2 = 42;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -50,20 +50,20 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class2 {
-  /*member: Class2.field:Union([exact=JSString], [exact=JSUInt31])*/
+  /*member: Class2.field:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
   static dynamic field = '';
 }
 
-/*member: setStaticFieldInitialized:[exact=JSUInt31]*/
+/*member: setStaticFieldInitialized:[exact=JSUInt31|powerset=0]*/
 setStaticFieldInitialized() => Class2.field = 42;
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Static set of a top level setter.
 ////////////////////////////////////////////////////////////////////////////////
 
-set _setter1(/*[exact=JSUInt31]*/ value) {}
+set _setter1(/*[exact=JSUInt31|powerset=0]*/ value) {}
 
-/*member: setTopLevelSetter:[exact=JSUInt31]*/
+/*member: setTopLevelSetter:[exact=JSUInt31|powerset=0]*/
 setTopLevelSetter() => _setter1 = 42;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -71,8 +71,8 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 class Class3 {
-  static set setter(/*[exact=JSUInt31]*/ value) {}
+  static set setter(/*[exact=JSUInt31|powerset=0]*/ value) {}
 }
 
-/*member: setStaticSetter:[exact=JSUInt31]*/
+/*member: setStaticSetter:[exact=JSUInt31|powerset=0]*/
 setStaticSetter() => Class3.setter = 42;
diff --git a/pkg/compiler/test/inference/data/static_type.dart b/pkg/compiler/test/inference/data/static_type.dart
index b0a1e8b..46a795c 100644
--- a/pkg/compiler/test/inference/data/static_type.dart
+++ b/pkg/compiler/test/inference/data/static_type.dart
@@ -3,149 +3,163 @@
 // BSD-style license that can be found in the LICENSE file.
 
 class C<T> {
-  /*member: C.field:Union([exact=JSString], [exact=JSUInt31])*/
+  /*member: C.field:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
   final T field;
 
-  /*member: C.fixedFunctionField:[subclass=Closure]*/
-  int Function() fixedFunctionField = /*[exact=JSUInt31]*/ () => 0;
+  /*member: C.fixedFunctionField:[subclass=Closure|powerset=0]*/
+  int Function() fixedFunctionField = /*[exact=JSUInt31|powerset=0]*/ () => 0;
 
-  /*member: C.functionField:[null|subclass=Closure]*/
+  /*member: C.functionField:[null|subclass=Closure|powerset=1]*/
   T Function()? functionField;
 
-  /*member: C.genericFunctionField:[null|subclass=Closure]*/
+  /*member: C.genericFunctionField:[null|subclass=Closure|powerset=1]*/
   S Function<S>(S)? genericFunctionField;
 
-  /*member: C.:[exact=C]*/
-  C(this. /*Union([exact=JSString], [exact=JSUInt31])*/ field) {
-    /*update: [subclass=C]*/
+  /*member: C.:[exact=C|powerset=0]*/
+  C(
+    this. /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ field,
+  ) {
+    /*update: [subclass=C|powerset=0]*/
     functionField =
-        /*Union([exact=JSString], [exact=JSUInt31])*/
-        () => /*[subclass=C]*/ field;
-    /*Union([exact=JSString], [exact=JSUInt31])*/
-    S local<S>(S /*Union([exact=JSString], [exact=JSUInt31])*/ s) => s;
-    /*update: [subclass=C]*/
+        /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+        () => /*[subclass=C|powerset=0]*/ field;
+    /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+    S local<S>(
+      S /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+      s,
+    ) => s;
+    /*update: [subclass=C|powerset=0]*/
     genericFunctionField = local;
   }
 
-  /*member: C.method:Union([exact=JSString], [exact=JSUInt31])*/
-  T method() => /*[subclass=C]*/ field;
+  /*member: C.method:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+  T method() => /*[subclass=C|powerset=0]*/ field;
 
-  /*member: C.+:Union([exact=JSString], [exact=JSUInt31])*/
-  T operator +(T /*Union([exact=JSString], [exact=JSUInt31])*/ t) =>
-      /*[subclass=C]*/ field;
+  /*member: C.+:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+  T operator +(
+    T /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+    t,
+  ) =>
+      /*[subclass=C|powerset=0]*/ field;
 
-  /*member: C.getter:Union([exact=JSString], [exact=JSUInt31])*/
-  T get getter => /*[subclass=C]*/ field;
+  /*member: C.getter:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+  T get getter => /*[subclass=C|powerset=0]*/ field;
 
-  /*member: C.fixedFunctionGetter:[subclass=Closure]*/
-  int Function() get fixedFunctionGetter => /*[exact=JSUInt31]*/ () => 0;
+  /*member: C.fixedFunctionGetter:[subclass=Closure|powerset=0]*/
+  int Function() get fixedFunctionGetter => /*[exact=JSUInt31|powerset=0]*/
+      () => 0;
 
-  /*member: C.functionGetter:[null|subclass=Closure]*/
-  T Function()? get functionGetter => /*[subclass=C]*/ functionField;
+  /*member: C.functionGetter:[null|subclass=Closure|powerset=1]*/
+  T Function()? get functionGetter => /*[subclass=C|powerset=0]*/ functionField;
 
-  /*member: C.genericFunctionGetter:[null|subclass=Closure]*/
+  /*member: C.genericFunctionGetter:[null|subclass=Closure|powerset=1]*/
   S Function<S>(S)? get genericFunctionGetter =>
-      /*[subclass=C]*/ genericFunctionField;
+      /*[subclass=C|powerset=0]*/ genericFunctionField;
 
-  /*member: C.genericMethod:Union([exact=JSString], [exact=JSUInt31])*/
-  S genericMethod<S>(S /*Union([exact=JSString], [exact=JSUInt31])*/ s) => s;
+  /*member: C.genericMethod:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+  S genericMethod<S>(
+    S /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+    s,
+  ) => s;
 }
 
 class D1 extends C<int> {
-  /*member: D1.:[exact=D1]*/
-  D1(int /*[exact=JSUInt31]*/ field) : super(field);
+  /*member: D1.:[exact=D1|powerset=0]*/
+  D1(int /*[exact=JSUInt31|powerset=0]*/ field) : super(field);
 
-  /*member: D1.superFieldAccess:[exact=JSUInt31]*/
+  /*member: D1.superFieldAccess:[exact=JSUInt31|powerset=0]*/
   superFieldAccess() => super.field;
 
-  /*member: D1.superFieldInvoke:[subclass=JSInt]*/
+  /*member: D1.superFieldInvoke:[subclass=JSInt|powerset=0]*/
   superFieldInvoke() => super.functionField!();
 
-  /*member: D1.superFixedFieldInvoke:[subclass=JSInt]*/
+  /*member: D1.superFixedFieldInvoke:[subclass=JSInt|powerset=0]*/
   superFixedFieldInvoke() => super.fixedFunctionField();
 
-  /*member: D1.superMethodInvoke:[exact=JSUInt31]*/
+  /*member: D1.superMethodInvoke:[exact=JSUInt31|powerset=0]*/
   superMethodInvoke() => super.method();
 
-  /*member: D1.superOperatorInvoke:[exact=JSUInt31]*/
+  /*member: D1.superOperatorInvoke:[exact=JSUInt31|powerset=0]*/
   superOperatorInvoke() => super + 0;
 
-  /*member: D1.superGetterAccess:[exact=JSUInt31]*/
+  /*member: D1.superGetterAccess:[exact=JSUInt31|powerset=0]*/
   superGetterAccess() => super.getter;
 
-  /*member: D1.superGetterInvoke:[subclass=JSInt]*/
+  /*member: D1.superGetterInvoke:[subclass=JSInt|powerset=0]*/
   superGetterInvoke() => super.functionGetter!();
 
-  /*member: D1.superFixedGetterInvoke:[subclass=JSInt]*/
+  /*member: D1.superFixedGetterInvoke:[subclass=JSInt|powerset=0]*/
   superFixedGetterInvoke() => super.fixedFunctionGetter();
 
-  /*member: D1.superGenericFieldInvoke1:[exact=JSString]*/
+  /*member: D1.superGenericFieldInvoke1:[exact=JSString|powerset=0]*/
   superGenericFieldInvoke1() => super.genericFunctionField!('');
 
-  /*member: D1.superGenericFieldInvoke2:[subclass=JSInt]*/
+  /*member: D1.superGenericFieldInvoke2:[subclass=JSInt|powerset=0]*/
   superGenericFieldInvoke2() => super.genericFunctionField!(0);
 
-  /*member: D1.superGenericMethodInvoke1:[exact=JSString]*/
+  /*member: D1.superGenericMethodInvoke1:[exact=JSString|powerset=0]*/
   superGenericMethodInvoke1() => super.genericMethod('');
 
-  /*member: D1.superGenericMethodInvoke2:[exact=JSUInt31]*/
+  /*member: D1.superGenericMethodInvoke2:[exact=JSUInt31|powerset=0]*/
   superGenericMethodInvoke2() => super.genericMethod(0);
 
-  /*member: D1.superGenericGetterInvoke1:[exact=JSString]*/
+  /*member: D1.superGenericGetterInvoke1:[exact=JSString|powerset=0]*/
   superGenericGetterInvoke1() => super.genericFunctionGetter!('');
 
-  /*member: D1.superGenericGetterInvoke2:[subclass=JSInt]*/
+  /*member: D1.superGenericGetterInvoke2:[subclass=JSInt|powerset=0]*/
   superGenericGetterInvoke2() => super.genericFunctionGetter!(0);
 }
 
 class D2 extends C<String> {
-  /*member: D2.:[exact=D2]*/
-  D2(String /*Value([exact=JSString], value: "")*/ field) : super(field);
+  /*member: D2.:[exact=D2|powerset=0]*/
+  D2(
+    String /*Value([exact=JSString|powerset=0], value: "", powerset: 0)*/ field,
+  ) : super(field);
 
-  /*member: D2.superFieldAccess:[exact=JSString]*/
+  /*member: D2.superFieldAccess:[exact=JSString|powerset=0]*/
   superFieldAccess() => super.field;
 
-  /*member: D2.superFieldInvoke:[exact=JSString]*/
+  /*member: D2.superFieldInvoke:[exact=JSString|powerset=0]*/
   superFieldInvoke() => super.functionField!();
 
-  /*member: D2.superFixedFieldInvoke:[subclass=JSInt]*/
+  /*member: D2.superFixedFieldInvoke:[subclass=JSInt|powerset=0]*/
   superFixedFieldInvoke() => super.fixedFunctionField();
 
-  /*member: D2.superMethodInvoke:[exact=JSString]*/
+  /*member: D2.superMethodInvoke:[exact=JSString|powerset=0]*/
   superMethodInvoke() => super.method();
 
-  /*member: D2.superOperatorInvoke:[exact=JSString]*/
+  /*member: D2.superOperatorInvoke:[exact=JSString|powerset=0]*/
   superOperatorInvoke() => super + '';
 
-  /*member: D2.superGetterAccess:[exact=JSString]*/
+  /*member: D2.superGetterAccess:[exact=JSString|powerset=0]*/
   superGetterAccess() => super.getter;
 
-  /*member: D2.superGetterInvoke:[exact=JSString]*/
+  /*member: D2.superGetterInvoke:[exact=JSString|powerset=0]*/
   superGetterInvoke() => super.functionGetter!();
 
-  /*member: D2.superFixedGetterInvoke:[subclass=JSInt]*/
+  /*member: D2.superFixedGetterInvoke:[subclass=JSInt|powerset=0]*/
   superFixedGetterInvoke() => super.fixedFunctionGetter();
 
-  /*member: D2.superGenericFieldInvoke1:[exact=JSString]*/
+  /*member: D2.superGenericFieldInvoke1:[exact=JSString|powerset=0]*/
   superGenericFieldInvoke1() => super.genericFunctionField!('');
 
-  /*member: D2.superGenericFieldInvoke2:[subclass=JSInt]*/
+  /*member: D2.superGenericFieldInvoke2:[subclass=JSInt|powerset=0]*/
   superGenericFieldInvoke2() => super.genericFunctionField!(0);
 
-  /*member: D2.superGenericMethodInvoke1:[exact=JSString]*/
+  /*member: D2.superGenericMethodInvoke1:[exact=JSString|powerset=0]*/
   superGenericMethodInvoke1() => super.genericMethod('');
 
-  /*member: D2.superGenericMethodInvoke2:[exact=JSUInt31]*/
+  /*member: D2.superGenericMethodInvoke2:[exact=JSUInt31|powerset=0]*/
   superGenericMethodInvoke2() => super.genericMethod(0);
 
-  /*member: D2.superGenericGetterInvoke1:[exact=JSString]*/
+  /*member: D2.superGenericGetterInvoke1:[exact=JSString|powerset=0]*/
   superGenericGetterInvoke1() => super.genericFunctionGetter!('');
 
-  /*member: D2.superGenericGetterInvoke2:[subclass=JSInt]*/
+  /*member: D2.superGenericGetterInvoke2:[subclass=JSInt|powerset=0]*/
   superGenericGetterInvoke2() => super.genericFunctionGetter!(0);
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   closureInvoke();
   localFunctionInvoke();
@@ -171,175 +185,178 @@
   genericGetterInvoke1();
   genericGetterInvoke2();
   D1(0)
-    .. /*invoke: [exact=D1]*/ superFieldAccess()
-    .. /*invoke: [exact=D1]*/ superFieldInvoke()
-    .. /*invoke: [exact=D1]*/ superFixedFieldInvoke()
-    .. /*invoke: [exact=D1]*/ superMethodInvoke()
-    .. /*invoke: [exact=D1]*/ superOperatorInvoke()
-    .. /*invoke: [exact=D1]*/ superGetterAccess()
-    .. /*invoke: [exact=D1]*/ superGetterInvoke()
-    .. /*invoke: [exact=D1]*/ superFixedGetterInvoke()
-    .. /*invoke: [exact=D1]*/ superGenericFieldInvoke1()
-    .. /*invoke: [exact=D1]*/ superGenericFieldInvoke2()
-    .. /*invoke: [exact=D1]*/ superGenericMethodInvoke1()
-    .. /*invoke: [exact=D1]*/ superGenericMethodInvoke2()
-    .. /*invoke: [exact=D1]*/ superGenericGetterInvoke1()
-    .. /*invoke: [exact=D1]*/ superGenericGetterInvoke2();
+    .. /*invoke: [exact=D1|powerset=0]*/ superFieldAccess()
+    .. /*invoke: [exact=D1|powerset=0]*/ superFieldInvoke()
+    .. /*invoke: [exact=D1|powerset=0]*/ superFixedFieldInvoke()
+    .. /*invoke: [exact=D1|powerset=0]*/ superMethodInvoke()
+    .. /*invoke: [exact=D1|powerset=0]*/ superOperatorInvoke()
+    .. /*invoke: [exact=D1|powerset=0]*/ superGetterAccess()
+    .. /*invoke: [exact=D1|powerset=0]*/ superGetterInvoke()
+    .. /*invoke: [exact=D1|powerset=0]*/ superFixedGetterInvoke()
+    .. /*invoke: [exact=D1|powerset=0]*/ superGenericFieldInvoke1()
+    .. /*invoke: [exact=D1|powerset=0]*/ superGenericFieldInvoke2()
+    .. /*invoke: [exact=D1|powerset=0]*/ superGenericMethodInvoke1()
+    .. /*invoke: [exact=D1|powerset=0]*/ superGenericMethodInvoke2()
+    .. /*invoke: [exact=D1|powerset=0]*/ superGenericGetterInvoke1()
+    .. /*invoke: [exact=D1|powerset=0]*/ superGenericGetterInvoke2();
   D2('')
-    .. /*invoke: [exact=D2]*/ superFieldAccess()
-    .. /*invoke: [exact=D2]*/ superFieldInvoke()
-    .. /*invoke: [exact=D2]*/ superFixedFieldInvoke()
-    .. /*invoke: [exact=D2]*/ superMethodInvoke()
-    .. /*invoke: [exact=D2]*/ superOperatorInvoke()
-    .. /*invoke: [exact=D2]*/ superGetterAccess()
-    .. /*invoke: [exact=D2]*/ superGetterInvoke()
-    .. /*invoke: [exact=D2]*/ superFixedGetterInvoke()
-    .. /*invoke: [exact=D2]*/ superGenericFieldInvoke1()
-    .. /*invoke: [exact=D2]*/ superGenericFieldInvoke2()
-    .. /*invoke: [exact=D2]*/ superGenericMethodInvoke1()
-    .. /*invoke: [exact=D2]*/ superGenericMethodInvoke2()
-    .. /*invoke: [exact=D2]*/ superGenericGetterInvoke1()
-    .. /*invoke: [exact=D2]*/ superGenericGetterInvoke2();
+    .. /*invoke: [exact=D2|powerset=0]*/ superFieldAccess()
+    .. /*invoke: [exact=D2|powerset=0]*/ superFieldInvoke()
+    .. /*invoke: [exact=D2|powerset=0]*/ superFixedFieldInvoke()
+    .. /*invoke: [exact=D2|powerset=0]*/ superMethodInvoke()
+    .. /*invoke: [exact=D2|powerset=0]*/ superOperatorInvoke()
+    .. /*invoke: [exact=D2|powerset=0]*/ superGetterAccess()
+    .. /*invoke: [exact=D2|powerset=0]*/ superGetterInvoke()
+    .. /*invoke: [exact=D2|powerset=0]*/ superFixedGetterInvoke()
+    .. /*invoke: [exact=D2|powerset=0]*/ superGenericFieldInvoke1()
+    .. /*invoke: [exact=D2|powerset=0]*/ superGenericFieldInvoke2()
+    .. /*invoke: [exact=D2|powerset=0]*/ superGenericMethodInvoke1()
+    .. /*invoke: [exact=D2|powerset=0]*/ superGenericMethodInvoke2()
+    .. /*invoke: [exact=D2|powerset=0]*/ superGenericGetterInvoke1()
+    .. /*invoke: [exact=D2|powerset=0]*/ superGenericGetterInvoke2();
 }
 
-/*member: closureInvoke:[subclass=JSInt]*/
+/*member: closureInvoke:[subclass=JSInt|powerset=0]*/
 closureInvoke() {
-  int Function() f = /*[exact=JSUInt31]*/ () => 0;
+  int Function() f = /*[exact=JSUInt31|powerset=0]*/ () => 0;
   return f();
 }
 
-/*member: localFunctionInvoke:[exact=JSUInt31]*/
+/*member: localFunctionInvoke:[exact=JSUInt31|powerset=0]*/
 localFunctionInvoke() {
-  /*[exact=JSUInt31]*/
+  /*[exact=JSUInt31|powerset=0]*/
   int local() => 0;
   return local();
 }
 
-/*member: genericLocalFunctionInvoke:[null]*/
+/*member: genericLocalFunctionInvoke:[null|powerset=1]*/
 genericLocalFunctionInvoke() {
-  /*Union([exact=JSString], [exact=JSUInt31])*/
-  S local<S>(S /*Union([exact=JSString], [exact=JSUInt31])*/ s) => s;
+  /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+  S local<S>(
+    S /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+    s,
+  ) => s;
 
-  local(0). /*invoke: [exact=JSUInt31]*/ toString();
-  local(''). /*invoke: [exact=JSString]*/ toString();
+  local(0). /*invoke: [exact=JSUInt31|powerset=0]*/ toString();
+  local(''). /*invoke: [exact=JSString|powerset=0]*/ toString();
 }
 
-/*member: fieldAccess1:[exact=JSUInt31]*/
+/*member: fieldAccess1:[exact=JSUInt31|powerset=0]*/
 fieldAccess1() {
   C<int> c = C<int>(0);
-  return c. /*[exact=C]*/ field;
+  return c. /*[exact=C|powerset=0]*/ field;
 }
 
-/*member: fieldAccess2:[exact=JSString]*/
+/*member: fieldAccess2:[exact=JSString|powerset=0]*/
 fieldAccess2() {
   C<String> c = C<String>('');
-  return c. /*[exact=C]*/ field;
+  return c. /*[exact=C|powerset=0]*/ field;
 }
 
-/*member: fixedFieldInvoke:[subclass=JSInt]*/
+/*member: fixedFieldInvoke:[subclass=JSInt|powerset=0]*/
 fixedFieldInvoke() {
   C<int> c = C<int>(0);
-  return c.fixedFunctionField /*invoke: [exact=C]*/ ();
+  return c.fixedFunctionField /*invoke: [exact=C|powerset=0]*/ ();
 }
 
-/*member: fieldInvoke1:[subclass=JSInt]*/
+/*member: fieldInvoke1:[subclass=JSInt|powerset=0]*/
 fieldInvoke1() {
   C<int> c = C<int>(0);
-  return c. /*[exact=C]*/ functionField!();
+  return c. /*[exact=C|powerset=0]*/ functionField!();
 }
 
-/*member: fieldInvoke2:[exact=JSString]*/
+/*member: fieldInvoke2:[exact=JSString|powerset=0]*/
 fieldInvoke2() {
   C<String> c = C<String>('');
-  return c. /*[exact=C]*/ functionField!();
+  return c. /*[exact=C|powerset=0]*/ functionField!();
 }
 
-/*member: methodInvoke1:[exact=JSUInt31]*/
+/*member: methodInvoke1:[exact=JSUInt31|powerset=0]*/
 methodInvoke1() {
   C<int> c = C<int>(0);
-  return c. /*invoke: [exact=C]*/ method();
+  return c. /*invoke: [exact=C|powerset=0]*/ method();
 }
 
-/*member: methodInvoke2:[exact=JSString]*/
+/*member: methodInvoke2:[exact=JSString|powerset=0]*/
 methodInvoke2() {
   C<String> c = C<String>('');
-  return c. /*invoke: [exact=C]*/ method();
+  return c. /*invoke: [exact=C|powerset=0]*/ method();
 }
 
-/*member: operatorInvoke1:[exact=JSUInt31]*/
+/*member: operatorInvoke1:[exact=JSUInt31|powerset=0]*/
 operatorInvoke1() {
   C<int> c = C<int>(0);
-  return c /*invoke: [exact=C]*/ + 0;
+  return c /*invoke: [exact=C|powerset=0]*/ + 0;
 }
 
-/*member: operatorInvoke2:[exact=JSString]*/
+/*member: operatorInvoke2:[exact=JSString|powerset=0]*/
 operatorInvoke2() {
   C<String> c = C<String>('');
-  return c /*invoke: [exact=C]*/ + '';
+  return c /*invoke: [exact=C|powerset=0]*/ + '';
 }
 
-/*member: fixedGetterInvoke:[subclass=JSInt]*/
+/*member: fixedGetterInvoke:[subclass=JSInt|powerset=0]*/
 fixedGetterInvoke() {
   C<int> c = C<int>(0);
-  return c.fixedFunctionGetter /*invoke: [exact=C]*/ ();
+  return c.fixedFunctionGetter /*invoke: [exact=C|powerset=0]*/ ();
 }
 
-/*member: getterAccess1:[exact=JSUInt31]*/
+/*member: getterAccess1:[exact=JSUInt31|powerset=0]*/
 getterAccess1() {
   C<int> c = C<int>(0);
-  return c. /*[exact=C]*/ getter;
+  return c. /*[exact=C|powerset=0]*/ getter;
 }
 
-/*member: getterAccess2:[exact=JSString]*/
+/*member: getterAccess2:[exact=JSString|powerset=0]*/
 getterAccess2() {
   C<String> c = C<String>('');
-  return c. /*[exact=C]*/ getter;
+  return c. /*[exact=C|powerset=0]*/ getter;
 }
 
-/*member: getterInvoke1:[subclass=JSInt]*/
+/*member: getterInvoke1:[subclass=JSInt|powerset=0]*/
 getterInvoke1() {
   C<int> c = C<int>(0);
-  return c. /*[exact=C]*/ functionGetter!();
+  return c. /*[exact=C|powerset=0]*/ functionGetter!();
 }
 
-/*member: getterInvoke2:[exact=JSString]*/
+/*member: getterInvoke2:[exact=JSString|powerset=0]*/
 getterInvoke2() {
   C<String> c = C<String>('');
-  return c. /*[exact=C]*/ functionGetter!();
+  return c. /*[exact=C|powerset=0]*/ functionGetter!();
 }
 
-/*member: genericFieldInvoke1:[exact=JSString]*/
+/*member: genericFieldInvoke1:[exact=JSString|powerset=0]*/
 genericFieldInvoke1() {
   C<int> c = C<int>(0);
-  return c. /*[exact=C]*/ genericFunctionField!('');
+  return c. /*[exact=C|powerset=0]*/ genericFunctionField!('');
 }
 
-/*member: genericFieldInvoke2:[subclass=JSInt]*/
+/*member: genericFieldInvoke2:[subclass=JSInt|powerset=0]*/
 genericFieldInvoke2() {
   C<String> c = C<String>('');
-  return c. /*[exact=C]*/ genericFunctionField!(0);
+  return c. /*[exact=C|powerset=0]*/ genericFunctionField!(0);
 }
 
-/*member: genericMethodInvoke1:[exact=JSString]*/
+/*member: genericMethodInvoke1:[exact=JSString|powerset=0]*/
 genericMethodInvoke1() {
   C<int> c = C<int>(0);
-  return c. /*invoke: [exact=C]*/ genericMethod('');
+  return c. /*invoke: [exact=C|powerset=0]*/ genericMethod('');
 }
 
-/*member: genericMethodInvoke2:[exact=JSUInt31]*/
+/*member: genericMethodInvoke2:[exact=JSUInt31|powerset=0]*/
 genericMethodInvoke2() {
   C<String> c = C<String>('');
-  return c. /*invoke: [exact=C]*/ genericMethod(0);
+  return c. /*invoke: [exact=C|powerset=0]*/ genericMethod(0);
 }
 
-/*member: genericGetterInvoke1:[exact=JSString]*/
+/*member: genericGetterInvoke1:[exact=JSString|powerset=0]*/
 genericGetterInvoke1() {
   C<int> c = C<int>(0);
-  return c. /*[exact=C]*/ genericFunctionGetter!('');
+  return c. /*[exact=C|powerset=0]*/ genericFunctionGetter!('');
 }
 
-/*member: genericGetterInvoke2:[subclass=JSInt]*/
+/*member: genericGetterInvoke2:[subclass=JSInt|powerset=0]*/
 genericGetterInvoke2() {
   C<String> c = C<String>('');
-  return c. /*[exact=C]*/ genericFunctionGetter!(0);
+  return c. /*[exact=C|powerset=0]*/ genericFunctionGetter!(0);
 }
diff --git a/pkg/compiler/test/inference/data/super_get.dart b/pkg/compiler/test/inference/data/super_get.dart
index 5865423..0a46138 100644
--- a/pkg/compiler/test/inference/data/super_get.dart
+++ b/pkg/compiler/test/inference/data/super_get.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   superFieldAccess();
   superGetterAccess();
@@ -13,61 +13,61 @@
 // Access of super field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Super1.:[exact=Super1]*/
+/*member: Super1.:[exact=Super1|powerset=0]*/
 class Super1 {
-  /*member: Super1.field:[exact=JSUInt31]*/
+  /*member: Super1.field:[exact=JSUInt31|powerset=0]*/
   var field = 42;
 }
 
-/*member: Sub1.:[exact=Sub1]*/
+/*member: Sub1.:[exact=Sub1|powerset=0]*/
 class Sub1 extends Super1 {
-  /*member: Sub1.method:[exact=JSUInt31]*/
+  /*member: Sub1.method:[exact=JSUInt31|powerset=0]*/
   method() => super.field;
 }
 
-/*member: superFieldAccess:[null]*/
+/*member: superFieldAccess:[null|powerset=1]*/
 superFieldAccess() {
-  Sub1(). /*invoke: [exact=Sub1]*/ method();
+  Sub1(). /*invoke: [exact=Sub1|powerset=0]*/ method();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Access of super getter.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Super2.:[exact=Super2]*/
+/*member: Super2.:[exact=Super2|powerset=0]*/
 class Super2 {
-  /*member: Super2.getter:[exact=JSUInt31]*/
+  /*member: Super2.getter:[exact=JSUInt31|powerset=0]*/
   get getter => 42;
 }
 
-/*member: Sub2.:[exact=Sub2]*/
+/*member: Sub2.:[exact=Sub2|powerset=0]*/
 class Sub2 extends Super2 {
-  /*member: Sub2.method:[exact=JSUInt31]*/
+  /*member: Sub2.method:[exact=JSUInt31|powerset=0]*/
   method() => super.getter;
 }
 
-/*member: superGetterAccess:[null]*/
+/*member: superGetterAccess:[null|powerset=1]*/
 superGetterAccess() {
-  Sub2(). /*invoke: [exact=Sub2]*/ method();
+  Sub2(). /*invoke: [exact=Sub2|powerset=0]*/ method();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Access of super method.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Super3.:[exact=Super3]*/
+/*member: Super3.:[exact=Super3|powerset=0]*/
 class Super3 {
-  /*member: Super3.superMethod:[null]*/
+  /*member: Super3.superMethod:[null|powerset=1]*/
   superMethod() {}
 }
 
-/*member: Sub3.:[exact=Sub3]*/
+/*member: Sub3.:[exact=Sub3|powerset=0]*/
 class Sub3 extends Super3 {
-  /*member: Sub3.method:[subclass=Closure]*/
+  /*member: Sub3.method:[subclass=Closure|powerset=0]*/
   method() => super.superMethod;
 }
 
-/*member: superMethodAccess:[null]*/
+/*member: superMethodAccess:[null|powerset=1]*/
 superMethodAccess() {
-  Sub3(). /*invoke: [exact=Sub3]*/ method();
+  Sub3(). /*invoke: [exact=Sub3|powerset=0]*/ method();
 }
diff --git a/pkg/compiler/test/inference/data/super_invoke.dart b/pkg/compiler/test/inference/data/super_invoke.dart
index 9b98ffd..f874207 100644
--- a/pkg/compiler/test/inference/data/super_invoke.dart
+++ b/pkg/compiler/test/inference/data/super_invoke.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   superMethodInvoke();
   superFieldInvoke();
@@ -14,100 +14,100 @@
 // Invocation of super method.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Super1.:[exact=Super1]*/
+/*member: Super1.:[exact=Super1|powerset=0]*/
 class Super1 {
-  /*member: Super1.method:[exact=JSUInt31]*/
+  /*member: Super1.method:[exact=JSUInt31|powerset=0]*/
   method() => 42;
 }
 
-/*member: Sub1.:[exact=Sub1]*/
+/*member: Sub1.:[exact=Sub1|powerset=0]*/
 class Sub1 extends Super1 {
-  /*member: Sub1.method:[subclass=JSPositiveInt]*/
+  /*member: Sub1.method:[subclass=JSPositiveInt|powerset=0]*/
   method() {
     var a = super.method();
-    return a. /*invoke: [exact=JSUInt31]*/ abs();
+    return a. /*invoke: [exact=JSUInt31|powerset=0]*/ abs();
   }
 }
 
-/*member: superMethodInvoke:[null]*/
+/*member: superMethodInvoke:[null|powerset=1]*/
 superMethodInvoke() {
-  Sub1(). /*invoke: [exact=Sub1]*/ method();
+  Sub1(). /*invoke: [exact=Sub1|powerset=0]*/ method();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Invocation of super field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _method1:[exact=JSUInt31]*/
+/*member: _method1:[exact=JSUInt31|powerset=0]*/
 _method1() => 42;
 
-/*member: Super2.:[exact=Super2]*/
+/*member: Super2.:[exact=Super2|powerset=0]*/
 class Super2 {
-  /*member: Super2.field:[subclass=Closure]*/
+  /*member: Super2.field:[subclass=Closure|powerset=0]*/
   var field = _method1;
 }
 
-/*member: Sub2.:[exact=Sub2]*/
+/*member: Sub2.:[exact=Sub2|powerset=0]*/
 class Sub2 extends Super2 {
-  /*member: Sub2.method:[null|subclass=Object]*/
+  /*member: Sub2.method:[null|subclass=Object|powerset=1]*/
   method() {
     return super.field();
   }
 }
 
-/*member: superFieldInvoke:[null]*/
+/*member: superFieldInvoke:[null|powerset=1]*/
 superFieldInvoke() {
-  Sub2(). /*invoke: [exact=Sub2]*/ method();
+  Sub2(). /*invoke: [exact=Sub2|powerset=0]*/ method();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Invocation of super getter.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _method2:[exact=JSUInt31]*/
+/*member: _method2:[exact=JSUInt31|powerset=0]*/
 _method2() => 42;
 
-/*member: Super3.:[exact=Super3]*/
+/*member: Super3.:[exact=Super3|powerset=0]*/
 class Super3 {
-  /*member: Super3.getter:[subclass=Closure]*/
+  /*member: Super3.getter:[subclass=Closure|powerset=0]*/
   get getter => _method2;
 }
 
-/*member: Sub3.:[exact=Sub3]*/
+/*member: Sub3.:[exact=Sub3|powerset=0]*/
 class Sub3 extends Super3 {
-  /*member: Sub3.method:[null|subclass=Object]*/
+  /*member: Sub3.method:[null|subclass=Object|powerset=1]*/
   method() {
     return super.getter();
   }
 }
 
-/*member: superGetterInvoke:[null]*/
+/*member: superGetterInvoke:[null|powerset=1]*/
 superGetterInvoke() {
-  Sub3(). /*invoke: [exact=Sub3]*/ method();
+  Sub3(). /*invoke: [exact=Sub3|powerset=0]*/ method();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Invocation of abstract super method that overrides a concrete method.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: SuperSuper10.:[exact=SuperSuper10]*/
+/*member: SuperSuper10.:[exact=SuperSuper10|powerset=0]*/
 class SuperSuper10 {
-  /*member: SuperSuper10.method:[exact=JSUInt31]*/
+  /*member: SuperSuper10.method:[exact=JSUInt31|powerset=0]*/
   method() => 42;
 }
 
-/*member: Super10.:[exact=Super10]*/
+/*member: Super10.:[exact=Super10|powerset=0]*/
 class Super10 extends SuperSuper10 {
   method();
 }
 
-/*member: Sub10.:[exact=Sub10]*/
+/*member: Sub10.:[exact=Sub10|powerset=0]*/
 class Sub10 extends Super10 {
-  /*member: Sub10.method:[exact=JSUInt31]*/
+  /*member: Sub10.method:[exact=JSUInt31|powerset=0]*/
   method() => super.method();
 }
 
-/*member: overridingAbstractSuperMethodInvoke:[null]*/
+/*member: overridingAbstractSuperMethodInvoke:[null|powerset=1]*/
 overridingAbstractSuperMethodInvoke() {
-  Sub10(). /*invoke: [exact=Sub10]*/ method();
+  Sub10(). /*invoke: [exact=Sub10|powerset=0]*/ method();
 }
diff --git a/pkg/compiler/test/inference/data/super_set.dart b/pkg/compiler/test/inference/data/super_set.dart
index d9c5e65..acf2ccc 100644
--- a/pkg/compiler/test/inference/data/super_set.dart
+++ b/pkg/compiler/test/inference/data/super_set.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   superFieldUpdate();
   superSetterUpdate();
@@ -12,45 +12,45 @@
 // Update of super field.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Super1.:[exact=Super1]*/
+/*member: Super1.:[exact=Super1|powerset=0]*/
 class Super1 {
-  /*member: Super1.field:Union([exact=JSUInt31], [exact=Sub1])*/
+  /*member: Super1.field:Union([exact=JSUInt31|powerset=0], [exact=Sub1|powerset=0], powerset: 0)*/
   dynamic field = 42;
 }
 
-/*member: Sub1.:[exact=Sub1]*/
+/*member: Sub1.:[exact=Sub1|powerset=0]*/
 class Sub1 extends Super1 {
-  /*member: Sub1.method:[subclass=Closure]*/
+  /*member: Sub1.method:[subclass=Closure|powerset=0]*/
   method() {
     var a = super.field = Sub1();
-    return a. /*[exact=Sub1]*/ method;
+    return a. /*[exact=Sub1|powerset=0]*/ method;
   }
 }
 
-/*member: superFieldUpdate:[null]*/
+/*member: superFieldUpdate:[null|powerset=1]*/
 superFieldUpdate() {
-  Sub1(). /*invoke: [exact=Sub1]*/ method();
+  Sub1(). /*invoke: [exact=Sub1|powerset=0]*/ method();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Update of super setter.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Super2.:[exact=Super2]*/
+/*member: Super2.:[exact=Super2|powerset=0]*/
 class Super2 {
-  set setter(/*[exact=Sub2]*/ value) {}
+  set setter(/*[exact=Sub2|powerset=0]*/ value) {}
 }
 
-/*member: Sub2.:[exact=Sub2]*/
+/*member: Sub2.:[exact=Sub2|powerset=0]*/
 class Sub2 extends Super2 {
-  /*member: Sub2.method:[subclass=Closure]*/
+  /*member: Sub2.method:[subclass=Closure|powerset=0]*/
   method() {
     var a = super.setter = Sub2();
-    return a. /*[exact=Sub2]*/ method;
+    return a. /*[exact=Sub2|powerset=0]*/ method;
   }
 }
 
-/*member: superSetterUpdate:[null]*/
+/*member: superSetterUpdate:[null|powerset=1]*/
 superSetterUpdate() {
-  Sub2(). /*invoke: [exact=Sub2]*/ method();
+  Sub2(). /*invoke: [exact=Sub2|powerset=0]*/ method();
 }
diff --git a/pkg/compiler/test/inference/data/switch.dart b/pkg/compiler/test/inference/data/switch.dart
index 7b8ff4f..a53d661 100644
--- a/pkg/compiler/test/inference/data/switch.dart
+++ b/pkg/compiler/test/inference/data/switch.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   switchWithoutDefault();
   switchWithDefault();
@@ -15,8 +15,8 @@
 // Switch statement without default case.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _switchWithoutDefault:Union(null, [exact=JSString], [exact=JSUInt31])*/
-_switchWithoutDefault(/*[exact=JSUInt31]*/ o) {
+/*member: _switchWithoutDefault:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
+_switchWithoutDefault(/*[exact=JSUInt31|powerset=0]*/ o) {
   var local;
   switch (o) {
     case 0:
@@ -29,7 +29,7 @@
   return local;
 }
 
-/*member: switchWithoutDefault:[null]*/
+/*member: switchWithoutDefault:[null|powerset=1]*/
 switchWithoutDefault() {
   _switchWithoutDefault(0);
   _switchWithoutDefault(1);
@@ -39,8 +39,8 @@
 // Switch statement with default case.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _switchWithDefault:Union([exact=JSString], [exact=JSUInt31])*/
-_switchWithDefault(/*[exact=JSUInt31]*/ o) {
+/*member: _switchWithDefault:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_switchWithDefault(/*[exact=JSUInt31|powerset=0]*/ o) {
   var local;
   switch (o) {
     case 0:
@@ -54,7 +54,7 @@
   return local;
 }
 
-/*member: switchWithDefault:[null]*/
+/*member: switchWithDefault:[null|powerset=1]*/
 switchWithDefault() {
   _switchWithDefault(0);
   _switchWithDefault(1);
@@ -64,8 +64,8 @@
 // Switch statement with default case without break.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _switchWithDefaultWithoutBreak:Union([exact=JSString], [exact=JSUInt31])*/
-_switchWithDefaultWithoutBreak(/*[exact=JSUInt31]*/ o) {
+/*member: _switchWithDefaultWithoutBreak:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_switchWithDefaultWithoutBreak(/*[exact=JSUInt31|powerset=0]*/ o) {
   var local;
   switch (o) {
     case 0:
@@ -78,7 +78,7 @@
   return local;
 }
 
-/*member: switchWithDefaultWithoutBreak:[null]*/
+/*member: switchWithDefaultWithoutBreak:[null|powerset=1]*/
 switchWithDefaultWithoutBreak() {
   _switchWithDefaultWithoutBreak(0);
   _switchWithDefaultWithoutBreak(1);
@@ -88,8 +88,8 @@
 // Switch statement with continue.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _switchWithContinue:Union([exact=JSBool], [exact=JSString])*/
-_switchWithContinue(/*[exact=JSUInt31]*/ o) {
+/*member: _switchWithContinue:Union([exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
+_switchWithContinue(/*[exact=JSUInt31|powerset=0]*/ o) {
   dynamic local;
   switch (o) {
     case 0:
@@ -97,7 +97,9 @@
       continue label;
     label:
     case 1:
-      local = local. /*Union(null, [exact=JSString], [exact=JSUInt31])*/ isEven;
+      local =
+          local
+              . /*Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/ isEven;
       break;
     case 2:
     default:
@@ -106,7 +108,7 @@
   return local;
 }
 
-/*member: switchWithContinue:[null]*/
+/*member: switchWithContinue:[null|powerset=1]*/
 switchWithContinue() {
   _switchWithContinue(0);
   _switchWithContinue(1);
@@ -117,15 +119,15 @@
 // the continue statement.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _switchWithoutContinue:Union([exact=JSString], [exact=JSUInt31])*/
-_switchWithoutContinue(/*[exact=JSUInt31]*/ o) {
+/*member: _switchWithoutContinue:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_switchWithoutContinue(/*[exact=JSUInt31|powerset=0]*/ o) {
   dynamic local;
   switch (o) {
     case 0:
       local = 0;
       break;
     case 1:
-      local = local. /*[null]*/ isEven;
+      local = local. /*[null|powerset=1]*/ isEven;
       break;
     case 2:
     default:
@@ -134,7 +136,7 @@
   return local;
 }
 
-/*member: switchWithoutContinue:[null]*/
+/*member: switchWithoutContinue:[null|powerset=1]*/
 switchWithoutContinue() {
   _switchWithoutContinue(0);
   _switchWithoutContinue(1);
diff --git a/pkg/compiler/test/inference/data/switch1.dart b/pkg/compiler/test/inference/data/switch1.dart
index 9d02e1b..2865892 100644
--- a/pkg/compiler/test/inference/data/switch1.dart
+++ b/pkg/compiler/test/inference/data/switch1.dart
@@ -2,8 +2,8 @@
 // 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.
 
-/*member: foo:[exact=JSString]*/
-foo(int /*[subclass=JSInt]*/ x) {
+/*member: foo:[exact=JSString|powerset=0]*/
+foo(int /*[subclass=JSInt|powerset=0]*/ x) {
   var a = "one";
   switch (x) {
     case 1:
@@ -16,7 +16,9 @@
   return a;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
-  foo(new DateTime.now(). /*[exact=DateTime]*/ millisecondsSinceEpoch);
+  foo(
+    new DateTime.now(). /*[exact=DateTime|powerset=0]*/ millisecondsSinceEpoch,
+  );
 }
diff --git a/pkg/compiler/test/inference/data/switch2.dart b/pkg/compiler/test/inference/data/switch2.dart
index c2aaa71..5398e37 100644
--- a/pkg/compiler/test/inference/data/switch2.dart
+++ b/pkg/compiler/test/inference/data/switch2.dart
@@ -2,8 +2,8 @@
 // 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.
 
-/*member: foo:Value([null|exact=JSString], value: "two")*/
-foo(int /*[subclass=JSInt]*/ x) {
+/*member: foo:Value([null|exact=JSString|powerset=1], value: "two", powerset: 1)*/
+foo(int /*[subclass=JSInt|powerset=0]*/ x) {
   var a;
   switch (x) {
     case 1:
@@ -16,7 +16,9 @@
   return a;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
-  foo(new DateTime.now(). /*[exact=DateTime]*/ millisecondsSinceEpoch);
+  foo(
+    new DateTime.now(). /*[exact=DateTime|powerset=0]*/ millisecondsSinceEpoch,
+  );
 }
diff --git a/pkg/compiler/test/inference/data/switch5.dart b/pkg/compiler/test/inference/data/switch5.dart
index 3263b55..8d50041 100644
--- a/pkg/compiler/test/inference/data/switch5.dart
+++ b/pkg/compiler/test/inference/data/switch5.dart
@@ -2,8 +2,8 @@
 // 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.
 
-/*member: foo:[null|exact=JSUInt31]*/
-foo(int /*[subclass=JSInt]*/ x) {
+/*member: foo:[null|exact=JSUInt31|powerset=1]*/
+foo(int /*[subclass=JSInt|powerset=0]*/ x) {
   var a;
   switch (x) {
     case 1:
@@ -18,7 +18,9 @@
   return a;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
-  foo(new DateTime.now(). /*[exact=DateTime]*/ millisecondsSinceEpoch);
+  foo(
+    new DateTime.now(). /*[exact=DateTime|powerset=0]*/ millisecondsSinceEpoch,
+  );
 }
diff --git a/pkg/compiler/test/inference/data/switch6.dart b/pkg/compiler/test/inference/data/switch6.dart
index 2155d6f..8fa0245 100644
--- a/pkg/compiler/test/inference/data/switch6.dart
+++ b/pkg/compiler/test/inference/data/switch6.dart
@@ -2,8 +2,8 @@
 // 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.
 
-/*member: foo:[null|exact=JSUInt31]*/
-foo(int /*[subclass=JSInt]*/ x) {
+/*member: foo:[null|exact=JSUInt31|powerset=1]*/
+foo(int /*[subclass=JSInt|powerset=0]*/ x) {
   var a;
   do {
     // add extra locals scope
@@ -20,7 +20,9 @@
   return a;
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
-  foo(new DateTime.now(). /*[exact=DateTime]*/ millisecondsSinceEpoch);
+  foo(
+    new DateTime.now(). /*[exact=DateTime|powerset=0]*/ millisecondsSinceEpoch,
+  );
 }
diff --git a/pkg/compiler/test/inference/data/throw.dart b/pkg/compiler/test/inference/data/throw.dart
index 57fa354..611f8ea 100644
--- a/pkg/compiler/test/inference/data/throw.dart
+++ b/pkg/compiler/test/inference/data/throw.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   unconditionalThrow();
   conditionalThrow();
@@ -14,19 +14,19 @@
 /// Method that throws unconditionally.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: unconditionalThrow:[empty]*/
+/*member: unconditionalThrow:[empty|powerset=0]*/
 unconditionalThrow() => throw 'foo';
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Method that throws conditionally.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _conditionalThrow:[null]*/
-_conditionalThrow(/*[exact=JSBool]*/ o) {
+/*member: _conditionalThrow:[null|powerset=1]*/
+_conditionalThrow(/*[exact=JSBool|powerset=0]*/ o) {
   if (o) throw 'foo';
 }
 
-/*member: conditionalThrow:[null]*/
+/*member: conditionalThrow:[null|powerset=1]*/
 conditionalThrow() {
   _conditionalThrow(true);
   _conditionalThrow(false);
@@ -36,13 +36,13 @@
 /// Method that throws conditionally and return 0.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _conditionalThrowReturn:[exact=JSUInt31]*/
-_conditionalThrowReturn(/*[exact=JSBool]*/ o) {
+/*member: _conditionalThrowReturn:[exact=JSUInt31|powerset=0]*/
+_conditionalThrowReturn(/*[exact=JSBool|powerset=0]*/ o) {
   if (o) throw 'foo';
   return 0;
 }
 
-/*member: conditionalThrowReturn:[null]*/
+/*member: conditionalThrowReturn:[null|powerset=1]*/
 conditionalThrowReturn() {
   _conditionalThrowReturn(true);
   _conditionalThrowReturn(false);
@@ -52,7 +52,7 @@
 /// Method that rethrows unconditionally.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: unconditionalRethrow:[empty]*/
+/*member: unconditionalRethrow:[empty|powerset=0]*/
 unconditionalRethrow() {
   try {
     throw 'foo';
diff --git a/pkg/compiler/test/inference/data/try.dart b/pkg/compiler/test/inference/data/try.dart
index 35eb6f8..1e0d674 100644
--- a/pkg/compiler/test/inference/data/try.dart
+++ b/pkg/compiler/test/inference/data/try.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   emptyTryCatch();
   emptyTryFinally();
@@ -25,13 +25,13 @@
 /// Parameter passed through an empty try-catch statement.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _emptyTryCatch:[exact=JSUInt31]*/
-_emptyTryCatch(/*[exact=JSUInt31]*/ o) {
+/*member: _emptyTryCatch:[exact=JSUInt31|powerset=0]*/
+_emptyTryCatch(/*[exact=JSUInt31|powerset=0]*/ o) {
   try {} catch (e) {}
   return o;
 }
 
-/*member: emptyTryCatch:[null]*/
+/*member: emptyTryCatch:[null|powerset=1]*/
 emptyTryCatch() {
   _emptyTryCatch(0);
 }
@@ -40,13 +40,13 @@
 /// Parameter passed through an empty try-finally statement.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _emptyTryFinally:[exact=JSUInt31]*/
-_emptyTryFinally(/*[exact=JSUInt31]*/ o) {
+/*member: _emptyTryFinally:[exact=JSUInt31|powerset=0]*/
+_emptyTryFinally(/*[exact=JSUInt31|powerset=0]*/ o) {
   try {} finally {}
   return o;
 }
 
-/*member: emptyTryFinally:[null]*/
+/*member: emptyTryFinally:[null|powerset=1]*/
 emptyTryFinally() {
   _emptyTryFinally(0);
 }
@@ -55,14 +55,14 @@
 /// Parameter passed through an empty try-catch-finally statement.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _emptyTryCatchFinally:[exact=JSUInt31]*/
-_emptyTryCatchFinally(/*[exact=JSUInt31]*/ o) {
+/*member: _emptyTryCatchFinally:[exact=JSUInt31|powerset=0]*/
+_emptyTryCatchFinally(/*[exact=JSUInt31|powerset=0]*/ o) {
   try {} catch (e) {
   } finally {}
   return o;
 }
 
-/*member: emptyTryCatchFinally:[null]*/
+/*member: emptyTryCatchFinally:[null|powerset=1]*/
 emptyTryCatchFinally() {
   _emptyTryCatchFinally(0);
 }
@@ -71,7 +71,7 @@
 /// A try-catch statement with an assignment in the try block.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: tryCatchAssignmentInTry:[null|exact=JSUInt31]*/
+/*member: tryCatchAssignmentInTry:[null|exact=JSUInt31|powerset=1]*/
 tryCatchAssignmentInTry() {
   int? o = 0;
   try {
@@ -84,7 +84,7 @@
 /// A try-catch statement with an assignment in the catch block.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: tryCatchAssignmentInCatch:[null|exact=JSUInt31]*/
+/*member: tryCatchAssignmentInCatch:[null|exact=JSUInt31|powerset=1]*/
 tryCatchAssignmentInCatch() {
   int? o = 0;
   try {} catch (e) {
@@ -97,7 +97,7 @@
 /// A try-finally statement with an assignment in the finally clause.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: tryFinallyAssignmentInFinally:[null]*/
+/*member: tryFinallyAssignmentInFinally:[null|powerset=1]*/
 tryFinallyAssignmentInFinally() {
   int? o = 0;
   try {} finally {
@@ -111,7 +111,7 @@
 /// block.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: tryCatchAssignmentInTryCatch:Union(null, [exact=JSString], [exact=JSUInt31])*/
+/*member: tryCatchAssignmentInTryCatch:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
 tryCatchAssignmentInTryCatch() {
   dynamic o = 0;
   try {
@@ -127,7 +127,7 @@
 /// finally block.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: tryCatchAssignmentInTryFinally:[null]*/
+/*member: tryCatchAssignmentInTryFinally:[null|powerset=1]*/
 tryCatchAssignmentInTryFinally() {
   dynamic o = 0;
   try {
@@ -143,15 +143,15 @@
 /// catch clause.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _tryCatchParameterAssignmentInTry:[null|exact=JSUInt31]*/
-_tryCatchParameterAssignmentInTry(/*[exact=JSUInt31]*/ o) {
+/*member: _tryCatchParameterAssignmentInTry:[null|exact=JSUInt31|powerset=1]*/
+_tryCatchParameterAssignmentInTry(/*[exact=JSUInt31|powerset=0]*/ o) {
   try {
     o = null;
   } catch (e) {}
   return o;
 }
 
-/*member: tryCatchParameterAssignmentInTry:[null]*/
+/*member: tryCatchParameterAssignmentInTry:[null|powerset=1]*/
 tryCatchParameterAssignmentInTry() {
   _tryCatchParameterAssignmentInTry(0);
 }
@@ -161,15 +161,15 @@
 /// catch clause.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _tryCatchParameterAssignmentInCatch:[null|exact=JSUInt31]*/
-_tryCatchParameterAssignmentInCatch(/*[exact=JSUInt31]*/ o) {
+/*member: _tryCatchParameterAssignmentInCatch:[null|exact=JSUInt31|powerset=1]*/
+_tryCatchParameterAssignmentInCatch(/*[exact=JSUInt31|powerset=0]*/ o) {
   try {} catch (e) {
     o = null;
   }
   return o;
 }
 
-/*member: tryCatchParameterAssignmentInCatch:[null]*/
+/*member: tryCatchParameterAssignmentInCatch:[null|powerset=1]*/
 tryCatchParameterAssignmentInCatch() {
   _tryCatchParameterAssignmentInCatch(0);
 }
@@ -179,15 +179,15 @@
 /// finally clause.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _tryFinallyParameterAssignmentInFinally:[null]*/
-_tryFinallyParameterAssignmentInFinally(/*[exact=JSUInt31]*/ o) {
+/*member: _tryFinallyParameterAssignmentInFinally:[null|powerset=1]*/
+_tryFinallyParameterAssignmentInFinally(/*[exact=JSUInt31|powerset=0]*/ o) {
   try {} finally {
     o = null;
   }
   return o;
 }
 
-/*member: tryFinallyParameterAssignmentInFinally:[null]*/
+/*member: tryFinallyParameterAssignmentInFinally:[null|powerset=1]*/
 tryFinallyParameterAssignmentInFinally() {
   _tryFinallyParameterAssignmentInFinally(0);
 }
@@ -197,8 +197,8 @@
 /// catch clause.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _tryCatchParameterAssignmentInTryCatch:Union(null, [exact=JSString], [exact=JSUInt31])*/
-_tryCatchParameterAssignmentInTryCatch(/*[exact=JSUInt31]*/ o) {
+/*member: _tryCatchParameterAssignmentInTryCatch:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
+_tryCatchParameterAssignmentInTryCatch(/*[exact=JSUInt31|powerset=0]*/ o) {
   try {
     o = '';
   } catch (e) {
@@ -207,7 +207,7 @@
   return o;
 }
 
-/*member: tryCatchParameterAssignmentInTryCatch:[null]*/
+/*member: tryCatchParameterAssignmentInTryCatch:[null|powerset=1]*/
 tryCatchParameterAssignmentInTryCatch() {
   _tryCatchParameterAssignmentInTryCatch(0);
 }
@@ -217,8 +217,8 @@
 /// finally clause.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: _tryFinallyParameterAssignmentInTryFinally:[null]*/
-_tryFinallyParameterAssignmentInTryFinally(/*[exact=JSUInt31]*/ o) {
+/*member: _tryFinallyParameterAssignmentInTryFinally:[null|powerset=1]*/
+_tryFinallyParameterAssignmentInTryFinally(/*[exact=JSUInt31|powerset=0]*/ o) {
   try {
     o = '';
   } finally {
@@ -227,7 +227,7 @@
   return o;
 }
 
-/*member: tryFinallyParameterAssignmentInTryFinally:[null]*/
+/*member: tryFinallyParameterAssignmentInTryFinally:[null|powerset=1]*/
 tryFinallyParameterAssignmentInTryFinally() {
   _tryFinallyParameterAssignmentInTryFinally(0);
 }
diff --git a/pkg/compiler/test/inference/data/try_catch.dart b/pkg/compiler/test/inference/data/try_catch.dart
index e1ed4a4..140f49a 100644
--- a/pkg/compiler/test/inference/data/try_catch.dart
+++ b/pkg/compiler/test/inference/data/try_catch.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: returnInt1:[exact=JSUInt31]*/
+/*member: returnInt1:[exact=JSUInt31|powerset=0]*/
 returnInt1() {
   var a = 42;
   try {
@@ -11,7 +11,7 @@
   return a;
 }
 
-/*member: returnDyn1:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn1:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 returnDyn1() {
   dynamic a = 42;
   try {
@@ -20,7 +20,7 @@
   return a;
 }
 
-/*member: returnInt2:[exact=JSUInt31]*/
+/*member: returnInt2:[exact=JSUInt31|powerset=0]*/
 returnInt2() {
   var a = 42;
   try {
@@ -31,7 +31,7 @@
   return a;
 }
 
-/*member: returnDyn2:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn2:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 returnDyn2() {
   dynamic a = 42;
   try {
@@ -42,7 +42,7 @@
   return a;
 }
 
-/*member: returnInt3:[exact=JSUInt31]*/
+/*member: returnInt3:[exact=JSUInt31|powerset=0]*/
 returnInt3() {
   dynamic a = 42;
   try {
@@ -55,7 +55,7 @@
   return a;
 }
 
-/*member: returnDyn3:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn3:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 returnDyn3() {
   dynamic a = 42;
   try {
@@ -70,7 +70,7 @@
   return a;
 }
 
-/*member: returnInt4:[exact=JSUInt31]*/
+/*member: returnInt4:[exact=JSUInt31|powerset=0]*/
 returnInt4() {
   var a = 42;
   try {
@@ -85,10 +85,10 @@
   return a;
 }
 
-/*member: returnDyn4:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn4:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 returnDyn4() {
   dynamic a = 42;
-  if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+  if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 54) {
     try {
       a = 'foo';
     } catch (e) {}
@@ -96,10 +96,10 @@
   return a;
 }
 
-/*member: returnInt5:[exact=JSUInt31]*/
+/*member: returnInt5:[exact=JSUInt31|powerset=0]*/
 returnInt5() {
   var a = 42;
-  if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+  if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 54) {
     try {
       a = 42;
     } catch (e) {}
@@ -107,10 +107,10 @@
   return a;
 }
 
-/*member: returnDyn5:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn5:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 returnDyn5() {
   dynamic a = 42;
-  if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+  if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 54) {
     try {
       a = 'foo';
       print(a);
@@ -120,7 +120,7 @@
   return a;
 }
 
-/*member: returnInt6:[subclass=JSInt]*/
+/*member: returnInt6:[subclass=JSInt|powerset=0]*/
 returnInt6() {
   try {
     throw 42;
@@ -131,7 +131,7 @@
   return 42;
 }
 
-/*member: returnDyn6:[subclass=Object]*/
+/*member: returnDyn6:[subclass=Object|powerset=0]*/
 returnDyn6() {
   try {
     throw 42;
@@ -140,7 +140,7 @@
   }
 }
 
-/*member: returnDyn7:[null|subclass=Object]*/
+/*member: returnDyn7:[null|subclass=Object|powerset=1]*/
 returnDyn7() {
   try {
     // Do nothing
@@ -149,7 +149,7 @@
   }
 }
 
-/*member: returnInt7:[exact=JSUInt31]*/
+/*member: returnInt7:[exact=JSUInt31|powerset=0]*/
 returnInt7() {
   dynamic a = 'foo';
   try {
@@ -159,7 +159,7 @@
   return 2;
 }
 
-/*member: returnInt8:[exact=JSUInt31]*/
+/*member: returnInt8:[exact=JSUInt31|powerset=0]*/
 returnInt8() {
   dynamic a = 'foo';
   try {
@@ -174,10 +174,10 @@
   return a;
 }
 
-/*member: returnUnion1:[null|exact=JSUInt31]*/
+/*member: returnUnion1:[null|exact=JSUInt31|powerset=1]*/
 returnUnion1() {
   dynamic a = 42;
-  if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+  if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 54) {
     try {
       a = 'foo';
       throw a;
@@ -188,7 +188,7 @@
   return a;
 }
 
-/*member: returnUnion2:Union(null, [exact=JSBool], [exact=JSString], [exact=JSUInt31])*/
+/*member: returnUnion2:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
 returnUnion2() {
   dynamic a = 42;
   try {
@@ -200,10 +200,10 @@
   return a;
 }
 
-/*member: returnUnion3:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnUnion3:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 returnUnion3() {
   dynamic a = 42;
-  if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+  if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 54) {
     try {
       a = 'foo';
       a = null;
@@ -216,10 +216,10 @@
   return a;
 }
 
-/*member: returnUnion4:Union(null, [exact=JSString], [exact=JSUInt31])*/
+/*member: returnUnion4:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
 returnUnion4() {
   dynamic a = 42;
-  if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+  if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 54) {
     try {
       a = 'foo';
       a = null;
@@ -228,10 +228,10 @@
   return a;
 }
 
-/*member: returnUnion5:Union([exact=JSBool], [exact=JSUInt31])*/
+/*member: returnUnion5:Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
 returnUnion5() {
   dynamic a = 42;
-  if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+  if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 54) {
     try {
       a = 'foo';
     } catch (e) {
@@ -243,7 +243,7 @@
   return a;
 }
 
-/*member: returnUnion6:Union(null, [exact=JSBool], [exact=JSString])*/
+/*member: returnUnion6:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 1)*/
 returnUnion6() {
   dynamic a = 42;
   try {
@@ -257,7 +257,7 @@
   return a;
 }
 
-/*member: returnUnion7:Union([exact=JSBool], [exact=JSString])*/
+/*member: returnUnion7:Union([exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
 returnUnion7() {
   dynamic a = 42;
   try {
@@ -269,7 +269,7 @@
   }
 }
 
-/*member: returnUnion8:[null|exact=JSUInt31]*/
+/*member: returnUnion8:[null|exact=JSUInt31|powerset=1]*/
 returnUnion8() {
   dynamic a = 5.5;
   try {
@@ -284,7 +284,7 @@
   return a;
 }
 
-/*member: returnUnion9:[exact=JSBool]*/
+/*member: returnUnion9:[exact=JSBool|powerset=0]*/
 returnUnion9() {
   dynamic a = 5.5;
   try {
@@ -298,7 +298,7 @@
   return a;
 }
 
-/*member: returnUnion10:Value([exact=JSBool], value: true)*/
+/*member: returnUnion10:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
 returnUnion10() {
   dynamic a = 5;
   try {
@@ -314,7 +314,7 @@
   }
 }
 
-/*member: returnNull1:[null]*/
+/*member: returnNull1:[null|powerset=1]*/
 returnNull1() {
   dynamic a = 42;
   try {
@@ -327,7 +327,7 @@
   return a;
 }
 
-/*member: returnNull2:[null]*/
+/*member: returnNull2:[null|powerset=1]*/
 returnNull2() {
   dynamic a = 5.5;
   try {
@@ -342,118 +342,118 @@
   return a;
 }
 
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
 class A {
-  /*member: A.a:[null|exact=JSUInt31]*/
+  /*member: A.a:[null|exact=JSUInt31|powerset=1]*/
   dynamic a;
-  /*member: A.b:Union(null, [exact=JSUInt31], [exact=JsLinkedHashMap])*/
+  /*member: A.b:Union(null, [exact=JSUInt31|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 1)*/
   dynamic b;
-  /*member: A.c:Union(null, [exact=JSBool], [exact=JSString])*/
+  /*member: A.c:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 1)*/
   dynamic c;
-  /*member: A.d:Value([null|exact=JSString], value: "foo")*/
+  /*member: A.d:Value([null|exact=JSString|powerset=1], value: "foo", powerset: 1)*/
   dynamic d;
-  /*member: A.e:Union(null, [exact=JSBool], [exact=JSString])*/
+  /*member: A.e:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 1)*/
   dynamic e;
-  /*member: A.f:Union(null, [exact=JSBool], [exact=JSString])*/
+  /*member: A.f:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 1)*/
   dynamic f;
-  /*member: A.g:Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString])*/
+  /*member: A.g:Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], powerset: 1)*/
   dynamic g;
 
-  /*member: A.testa:Union([exact=JSBool], [exact=JSString])*/
+  /*member: A.testa:Union([exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
   testa() {
     try {
       return 'foo';
     } catch (e) {
       return true;
     } finally {
-      /*update: [exact=A]*/
+      /*update: [exact=A|powerset=0]*/
       a = 55;
     }
   }
 
-  /*member: A.testb:Union([exact=JSBool], [exact=JSString])*/
+  /*member: A.testb:Union([exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
   testb() {
     try {
       return 'foo';
     } catch (e) {
       return true;
     } finally {
-      /*update: [exact=A]*/
+      /*update: [exact=A|powerset=0]*/
       b = 55;
     }
     return b;
   }
 
-  /*member: A.testc:Union(null, [exact=JSBool], [exact=JSString])*/
+  /*member: A.testc:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 1)*/
   testc() {
     try {
-      /*update: [exact=A]*/
+      /*update: [exact=A|powerset=0]*/
       c = 'foo';
-      throw /*[exact=A]*/ c;
+      throw /*[exact=A|powerset=0]*/ c;
     } catch (e) {
-      /*update: [exact=A]*/
+      /*update: [exact=A|powerset=0]*/
       c = false;
     } catch (e) {
-      /*update: [exact=A]*/
+      /*update: [exact=A|powerset=0]*/
       c = true;
     }
-    return /*[exact=A]*/ c;
+    return /*[exact=A|powerset=0]*/ c;
   }
 
-  /*member: A.testd:Value([null|exact=JSString], value: "foo")*/
+  /*member: A.testd:Value([null|exact=JSString|powerset=1], value: "foo", powerset: 1)*/
   testd() {
     try {
-      /*update: [exact=A]*/
+      /*update: [exact=A|powerset=0]*/
       d = 'foo';
     } catch (e) {
       // Do nothing
     }
-    return /*[exact=A]*/ d;
+    return /*[exact=A|powerset=0]*/ d;
   }
 
-  /*member: A.teste:Union(null, [exact=JSBool], [exact=JSString])*/
+  /*member: A.teste:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 1)*/
   teste() {
     try {
-      /*update: [exact=A]*/
+      /*update: [exact=A|powerset=0]*/
       e = 'foo';
     } catch (_) {
-      /*update: [exact=A]*/
+      /*update: [exact=A|powerset=0]*/
       e = true;
     }
-    return /*[exact=A]*/ e;
+    return /*[exact=A|powerset=0]*/ e;
   }
 
-  /*member: A.testf:Union(null, [exact=JSBool], [exact=JSString], [exact=JSUInt31])*/
+  /*member: A.testf:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
   testf() {
     try {
-      /*update: [exact=A]*/
+      /*update: [exact=A|powerset=0]*/
       f = 'foo';
       return 3;
     } catch (e) {
-      /*update: [exact=A]*/
+      /*update: [exact=A|powerset=0]*/
       f = true;
     }
-    return /*[exact=A]*/ f;
+    return /*[exact=A|powerset=0]*/ f;
   }
 
-  /*member: A.testg:Union(null, [exact=JSUInt31], [exact=JsLinkedHashMap])*/
+  /*member: A.testg:Union(null, [exact=JSUInt31|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 1)*/
   testg() {
     try {
-      /*update: [exact=A]*/
+      /*update: [exact=A|powerset=0]*/
       g = 'foo';
-      /*update: [exact=A]*/
+      /*update: [exact=A|powerset=0]*/
       g = 5.5;
     } catch (e) {
-      /*update: [exact=A]*/
+      /*update: [exact=A|powerset=0]*/
       g = [];
-      /*update: [exact=A]*/
+      /*update: [exact=A|powerset=0]*/
       b = {};
     }
-    return /*[exact=A]*/ b;
+    return /*[exact=A|powerset=0]*/ b;
   }
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   returnInt1();
   returnDyn1();
@@ -484,11 +484,11 @@
   returnNull2();
 
   final a = A();
-  a. /*invoke: [exact=A]*/ testa();
-  a. /*invoke: [exact=A]*/ testb();
-  a. /*invoke: [exact=A]*/ testc();
-  a. /*invoke: [exact=A]*/ testd();
-  a. /*invoke: [exact=A]*/ teste();
-  a. /*invoke: [exact=A]*/ testf();
-  a. /*invoke: [exact=A]*/ testg();
+  a. /*invoke: [exact=A|powerset=0]*/ testa();
+  a. /*invoke: [exact=A|powerset=0]*/ testb();
+  a. /*invoke: [exact=A|powerset=0]*/ testc();
+  a. /*invoke: [exact=A|powerset=0]*/ testd();
+  a. /*invoke: [exact=A|powerset=0]*/ teste();
+  a. /*invoke: [exact=A|powerset=0]*/ testf();
+  a. /*invoke: [exact=A|powerset=0]*/ testg();
 }
diff --git a/pkg/compiler/test/inference/data/type_literal.dart b/pkg/compiler/test/inference/data/type_literal.dart
index cd89563..7a48622 100644
--- a/pkg/compiler/test/inference/data/type_literal.dart
+++ b/pkg/compiler/test/inference/data/type_literal.dart
@@ -2,25 +2,26 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   typeLiteral();
   typeLiteralToString();
   typeLiteralSubstring();
 }
 
-/*member: typeLiteral:[exact=_Type]*/
+/*member: typeLiteral:[exact=_Type|powerset=0]*/
 typeLiteral() => Object;
 
-/*member: typeLiteralToString:[exact=JSString]*/
-typeLiteralToString() => (Object). /*invoke: [exact=_Type]*/ toString();
+/*member: typeLiteralToString:[exact=JSString|powerset=0]*/
+typeLiteralToString() =>
+    (Object). /*invoke: [exact=_Type|powerset=0]*/ toString();
 
-/*member: typeLiteralSubstring:[exact=JSString]*/
+/*member: typeLiteralSubstring:[exact=JSString|powerset=0]*/
 typeLiteralSubstring() {
-  String name = (List). /*invoke: [exact=_Type]*/ toString();
-  name = name. /*invoke: [exact=JSString]*/ substring(
+  String name = (List). /*invoke: [exact=_Type|powerset=0]*/ toString();
+  name = name. /*invoke: [exact=JSString|powerset=0]*/ substring(
     0,
-    name. /*invoke: [exact=JSString]*/ indexOf('<'),
+    name. /*invoke: [exact=JSString|powerset=0]*/ indexOf('<'),
   );
   return name;
 }
diff --git a/pkg/compiler/test/inference/data/unregister_call.dart b/pkg/compiler/test/inference/data/unregister_call.dart
index 9c46f2d..cabb5315 100644
--- a/pkg/compiler/test/inference/data/unregister_call.dart
+++ b/pkg/compiler/test/inference/data/unregister_call.dart
@@ -2,27 +2,28 @@
 // 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.
 
-/*member: a:Value([exact=JSString], value: "")*/
+/*member: a:Value([exact=JSString|powerset=0], value: "", powerset: 0)*/
 var a = '';
 
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
 class A {
-  /*member: A.+:[exact=JSUInt31]*/
-  operator +(/*[exact=JSUInt31]*/ other) => other;
+  /*member: A.+:[exact=JSUInt31|powerset=0]*/
+  operator +(/*[exact=JSUInt31|powerset=0]*/ other) => other;
 }
 
-/*member: foo:[exact=JSString]*/
+/*member: foo:[exact=JSString|powerset=0]*/
 foo() {
   // The following '+' call will first say that it may call A::+,
   // String::+, or int::+. After all methods have been analyzed, we know
   // that a is of type String, and therefore, this method cannot call
   // A::+. Therefore, the type of the parameter of A::+ will be the
   // one given by the other calls.
-  return a /*invoke: Value([exact=JSString], value: "")*/ + 'foo';
+  return a /*invoke: Value([exact=JSString|powerset=0], value: "", powerset: 0)*/ +
+      'foo';
 }
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
-  A() /*invoke: [exact=A]*/ + 42;
+  A() /*invoke: [exact=A|powerset=0]*/ + 42;
   foo();
 }
diff --git a/pkg/compiler/test/inference/data/use_static_types.dart b/pkg/compiler/test/inference/data/use_static_types.dart
index c0c0464..aa52bdd 100644
--- a/pkg/compiler/test/inference/data/use_static_types.dart
+++ b/pkg/compiler/test/inference/data/use_static_types.dart
@@ -2,81 +2,81 @@
 // 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.
 
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
 class A {}
 
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
 class B extends A {}
 
-/*member: C.:[exact=C]*/
+/*member: C.:[exact=C|powerset=0]*/
 class C {}
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   invokeFunctions();
   invokeGenericClasses();
   invokeGenericMethods();
 }
 
-/*member: invokeFunction1:[subclass=A]*/
-invokeFunction1(A Function() /*[subclass=Closure]*/ f) {
+/*member: invokeFunction1:[subclass=A|powerset=0]*/
+invokeFunction1(A Function() /*[subclass=Closure|powerset=0]*/ f) {
   return f();
 }
 
-/*member: invokeFunction2:[exact=B]*/
-invokeFunction2(B Function() /*[subclass=Closure]*/ f) {
+/*member: invokeFunction2:[exact=B|powerset=0]*/
+invokeFunction2(B Function() /*[subclass=Closure|powerset=0]*/ f) {
   return f();
 }
 
-/*member: invokeFunction3:[exact=C]*/
-invokeFunction3(C Function() /*[subclass=Closure]*/ f) {
+/*member: invokeFunction3:[exact=C|powerset=0]*/
+invokeFunction3(C Function() /*[subclass=Closure|powerset=0]*/ f) {
   return f();
 }
 
-/*member: genericFunction:[null|subclass=Object]*/
-T genericFunction<T>(T Function() /*[subclass=Closure]*/ f) => f();
+/*member: genericFunction:[null|subclass=Object|powerset=1]*/
+T genericFunction<T>(T Function() /*[subclass=Closure|powerset=0]*/ f) => f();
 
-/*member: invokeGenericFunction1:[subclass=A]*/
+/*member: invokeGenericFunction1:[subclass=A|powerset=0]*/
 invokeGenericFunction1() {
-  return genericFunction<A>(/*[exact=A]*/ () => A());
+  return genericFunction<A>(/*[exact=A|powerset=0]*/ () => A());
 }
 
-/*member: invokeGenericFunction2:[exact=B]*/
+/*member: invokeGenericFunction2:[exact=B|powerset=0]*/
 invokeGenericFunction2() {
-  return genericFunction<B>(/*[exact=B]*/ () => B());
+  return genericFunction<B>(/*[exact=B|powerset=0]*/ () => B());
 }
 
-/*member: invokeGenericFunction3:[exact=C]*/
+/*member: invokeGenericFunction3:[exact=C|powerset=0]*/
 invokeGenericFunction3() {
-  return genericFunction<C>(/*[exact=C]*/ () => C());
+  return genericFunction<C>(/*[exact=C|powerset=0]*/ () => C());
 }
 
-/*member: invokeGenericLocalFunction1:[subclass=A]*/
+/*member: invokeGenericLocalFunction1:[subclass=A|powerset=0]*/
 invokeGenericLocalFunction1() {
-  /*[null|subclass=Object]*/
-  T local<T>(T Function() /*[subclass=Closure]*/ f) => f();
-  return local<A>(/*[exact=A]*/ () => A());
+  /*[null|subclass=Object|powerset=1]*/
+  T local<T>(T Function() /*[subclass=Closure|powerset=0]*/ f) => f();
+  return local<A>(/*[exact=A|powerset=0]*/ () => A());
 }
 
-/*member: invokeGenericLocalFunction2:[exact=B]*/
+/*member: invokeGenericLocalFunction2:[exact=B|powerset=0]*/
 invokeGenericLocalFunction2() {
-  /*[null|subclass=Object]*/
-  T local<T>(T Function() /*[subclass=Closure]*/ f) => f();
-  return local<B>(/*[exact=B]*/ () => B());
+  /*[null|subclass=Object|powerset=1]*/
+  T local<T>(T Function() /*[subclass=Closure|powerset=0]*/ f) => f();
+  return local<B>(/*[exact=B|powerset=0]*/ () => B());
 }
 
-/*member: invokeGenericLocalFunction3:[exact=C]*/
+/*member: invokeGenericLocalFunction3:[exact=C|powerset=0]*/
 invokeGenericLocalFunction3() {
-  /*[null|subclass=Object]*/
-  T local<T>(T Function() /*[subclass=Closure]*/ f) => f();
-  return local<C>(/*[exact=C]*/ () => C());
+  /*[null|subclass=Object|powerset=1]*/
+  T local<T>(T Function() /*[subclass=Closure|powerset=0]*/ f) => f();
+  return local<C>(/*[exact=C|powerset=0]*/ () => C());
 }
 
-/*member: invokeFunctions:[null]*/
+/*member: invokeFunctions:[null|powerset=1]*/
 invokeFunctions() {
-  invokeFunction1(/*[exact=A]*/ () => A());
-  invokeFunction2(/*[exact=B]*/ () => B());
-  invokeFunction3(/*[exact=C]*/ () => C());
+  invokeFunction1(/*[exact=A|powerset=0]*/ () => A());
+  invokeFunction2(/*[exact=B|powerset=0]*/ () => B());
+  invokeFunction3(/*[exact=C|powerset=0]*/ () => C());
   invokeGenericFunction1();
   invokeGenericFunction2();
   invokeGenericFunction3();
@@ -86,214 +86,232 @@
 }
 
 class GenericClass<T> {
-  /*member: GenericClass.field:Union([exact=C], [subclass=A])*/
+  /*member: GenericClass.field:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
   final T field;
 
-  /*member: GenericClass.functionTypedField:[subclass=Closure]*/
+  /*member: GenericClass.functionTypedField:[subclass=Closure|powerset=0]*/
   final T Function() functionTypedField;
 
-  /*member: GenericClass.:[exact=GenericClass]*/
-  GenericClass(this. /*Union([exact=C], [subclass=A])*/ field)
-    : functionTypedField = ( /*Union([exact=C], [subclass=A])*/ () => field);
+  /*member: GenericClass.:[exact=GenericClass|powerset=0]*/
+  GenericClass(
+    this. /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ field,
+  ) : functionTypedField =
+          ( /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ () =>
+              field);
 
-  /*member: GenericClass.getter:Union([exact=C], [subclass=A])*/
-  T get getter => /*[subclass=GenericClass]*/ field;
+  /*member: GenericClass.getter:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+  T get getter => /*[subclass=GenericClass|powerset=0]*/ field;
 
-  /*member: GenericClass.functionTypedGetter:[subclass=Closure]*/
-  T Function() get functionTypedGetter => /*[subclass=GenericClass]*/
+  /*member: GenericClass.functionTypedGetter:[subclass=Closure|powerset=0]*/
+  T Function() get functionTypedGetter => /*[subclass=GenericClass|powerset=0]*/
       functionTypedField;
 
-  /*member: GenericClass.method:Union([exact=C], [subclass=A])*/
-  T method() => /*[subclass=GenericClass]*/ field;
+  /*member: GenericClass.method:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+  T method() => /*[subclass=GenericClass|powerset=0]*/ field;
 
-  /*member: GenericClass.functionTypedMethod:[subclass=Closure]*/
-  T Function() functionTypedMethod() => /*[subclass=GenericClass]*/
+  /*member: GenericClass.functionTypedMethod:[subclass=Closure|powerset=0]*/
+  T Function() functionTypedMethod() => /*[subclass=GenericClass|powerset=0]*/
       functionTypedField;
 }
 
 class GenericSubclass<T> extends GenericClass<T> {
-  /*member: GenericSubclass.:[exact=GenericSubclass]*/
-  GenericSubclass(T /*Union([exact=C], [subclass=A])*/ field) : super(field);
+  /*member: GenericSubclass.:[exact=GenericSubclass|powerset=0]*/
+  GenericSubclass(
+    T /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+    field,
+  ) : super(field);
 
-  /*member: GenericSubclass.superField:Union([exact=C], [subclass=A])*/
+  /*member: GenericSubclass.superField:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
   superField() => super.field;
 
-  /*member: GenericSubclass.superGetter:Union([exact=C], [subclass=A])*/
+  /*member: GenericSubclass.superGetter:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
   superGetter() => super.getter;
 
-  /*member: GenericSubclass.superMethod:Union([exact=C], [subclass=A])*/
+  /*member: GenericSubclass.superMethod:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
   superMethod() => super.method();
 
-  /*member: GenericSubclass.superFieldInvoke:[null|subclass=Object]*/
+  /*member: GenericSubclass.superFieldInvoke:[null|subclass=Object|powerset=1]*/
   superFieldInvoke() => super.functionTypedField();
 
-  /*member: GenericSubclass.superGetterInvoke:[null|subclass=Object]*/
+  /*member: GenericSubclass.superGetterInvoke:[null|subclass=Object|powerset=1]*/
   superGetterInvoke() => super.functionTypedGetter();
 
-  /*member: GenericSubclass.superMethodInvoke:[null|subclass=Object]*/
+  /*member: GenericSubclass.superMethodInvoke:[null|subclass=Object|powerset=1]*/
   superMethodInvoke() => super.functionTypedMethod()();
 }
 
-/*member: invokeInstanceMethod1:[subclass=A]*/
-invokeInstanceMethod1(GenericClass<A> /*[exact=GenericClass]*/ c) =>
-    c. /*invoke: [exact=GenericClass]*/ method();
+/*member: invokeInstanceMethod1:[subclass=A|powerset=0]*/
+invokeInstanceMethod1(GenericClass<A> /*[exact=GenericClass|powerset=0]*/ c) =>
+    c. /*invoke: [exact=GenericClass|powerset=0]*/ method();
 
-/*member: invokeInstanceMethod2:[exact=B]*/
-invokeInstanceMethod2(GenericClass<B> /*[exact=GenericClass]*/ c) =>
-    c. /*invoke: [exact=GenericClass]*/ method();
+/*member: invokeInstanceMethod2:[exact=B|powerset=0]*/
+invokeInstanceMethod2(GenericClass<B> /*[exact=GenericClass|powerset=0]*/ c) =>
+    c. /*invoke: [exact=GenericClass|powerset=0]*/ method();
 
-/*member: invokeInstanceMethod3:[exact=C]*/
-invokeInstanceMethod3(GenericClass<C> /*[exact=GenericClass]*/ c) =>
-    c. /*invoke: [exact=GenericClass]*/ method();
+/*member: invokeInstanceMethod3:[exact=C|powerset=0]*/
+invokeInstanceMethod3(GenericClass<C> /*[exact=GenericClass|powerset=0]*/ c) =>
+    c. /*invoke: [exact=GenericClass|powerset=0]*/ method();
 
-/*member: invokeInstanceGetter1:[subclass=A]*/
-invokeInstanceGetter1(GenericClass<A> /*[exact=GenericClass]*/ c) =>
-    c. /*[exact=GenericClass]*/ getter;
+/*member: invokeInstanceGetter1:[subclass=A|powerset=0]*/
+invokeInstanceGetter1(GenericClass<A> /*[exact=GenericClass|powerset=0]*/ c) =>
+    c. /*[exact=GenericClass|powerset=0]*/ getter;
 
-/*member: invokeInstanceGetter2:[exact=B]*/
-invokeInstanceGetter2(GenericClass<B> /*[exact=GenericClass]*/ c) =>
-    c. /*[exact=GenericClass]*/ getter;
+/*member: invokeInstanceGetter2:[exact=B|powerset=0]*/
+invokeInstanceGetter2(GenericClass<B> /*[exact=GenericClass|powerset=0]*/ c) =>
+    c. /*[exact=GenericClass|powerset=0]*/ getter;
 
-/*member: invokeInstanceGetter3:[exact=C]*/
-invokeInstanceGetter3(GenericClass<C> /*[exact=GenericClass]*/ c) =>
-    c. /*[exact=GenericClass]*/ getter;
+/*member: invokeInstanceGetter3:[exact=C|powerset=0]*/
+invokeInstanceGetter3(GenericClass<C> /*[exact=GenericClass|powerset=0]*/ c) =>
+    c. /*[exact=GenericClass|powerset=0]*/ getter;
 
-/*member: accessInstanceField1:[subclass=A]*/
-accessInstanceField1(GenericClass<A> /*[exact=GenericClass]*/ c) =>
-    c. /*[exact=GenericClass]*/ field;
+/*member: accessInstanceField1:[subclass=A|powerset=0]*/
+accessInstanceField1(GenericClass<A> /*[exact=GenericClass|powerset=0]*/ c) =>
+    c. /*[exact=GenericClass|powerset=0]*/ field;
 
-/*member: accessInstanceField2:[exact=B]*/
-accessInstanceField2(GenericClass<B> /*[exact=GenericClass]*/ c) =>
-    c. /*[exact=GenericClass]*/ field;
+/*member: accessInstanceField2:[exact=B|powerset=0]*/
+accessInstanceField2(GenericClass<B> /*[exact=GenericClass|powerset=0]*/ c) =>
+    c. /*[exact=GenericClass|powerset=0]*/ field;
 
-/*member: accessInstanceField3:[exact=C]*/
-accessInstanceField3(GenericClass<C> /*[exact=GenericClass]*/ c) =>
-    c. /*[exact=GenericClass]*/ field;
+/*member: accessInstanceField3:[exact=C|powerset=0]*/
+accessInstanceField3(GenericClass<C> /*[exact=GenericClass|powerset=0]*/ c) =>
+    c. /*[exact=GenericClass|powerset=0]*/ field;
 
-/*member: invokeSuperMethod1:Union([exact=C], [subclass=A])*/
-invokeSuperMethod1(GenericSubclass<A> /*[exact=GenericSubclass]*/ c) =>
-    c. /*invoke: [exact=GenericSubclass]*/ superMethod();
+/*member: invokeSuperMethod1:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+invokeSuperMethod1(
+  GenericSubclass<A> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superMethod();
 
-/*member: invokeSuperMethod2:Union([exact=C], [subclass=A])*/
-invokeSuperMethod2(GenericSubclass<B> /*[exact=GenericSubclass]*/ c) =>
-    c. /*invoke: [exact=GenericSubclass]*/ superMethod();
+/*member: invokeSuperMethod2:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+invokeSuperMethod2(
+  GenericSubclass<B> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superMethod();
 
-/*member: invokeSuperMethod3:Union([exact=C], [subclass=A])*/
-invokeSuperMethod3(GenericSubclass<C> /*[exact=GenericSubclass]*/ c) =>
-    c. /*invoke: [exact=GenericSubclass]*/ superMethod();
+/*member: invokeSuperMethod3:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+invokeSuperMethod3(
+  GenericSubclass<C> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superMethod();
 
-/*member: invokeSuperGetter1:Union([exact=C], [subclass=A])*/
-invokeSuperGetter1(GenericSubclass<A> /*[exact=GenericSubclass]*/ c) =>
-    c. /*invoke: [exact=GenericSubclass]*/ superGetter();
+/*member: invokeSuperGetter1:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+invokeSuperGetter1(
+  GenericSubclass<A> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superGetter();
 
-/*member: invokeSuperGetter2:Union([exact=C], [subclass=A])*/
-invokeSuperGetter2(GenericSubclass<B> /*[exact=GenericSubclass]*/ c) =>
-    c. /*invoke: [exact=GenericSubclass]*/ superGetter();
+/*member: invokeSuperGetter2:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+invokeSuperGetter2(
+  GenericSubclass<B> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superGetter();
 
-/*member: invokeSuperGetter3:Union([exact=C], [subclass=A])*/
-invokeSuperGetter3(GenericSubclass<C> /*[exact=GenericSubclass]*/ c) =>
-    c. /*invoke: [exact=GenericSubclass]*/ superGetter();
+/*member: invokeSuperGetter3:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+invokeSuperGetter3(
+  GenericSubclass<C> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superGetter();
 
-/*member: accessSuperField1:Union([exact=C], [subclass=A])*/
-accessSuperField1(GenericSubclass<A> /*[exact=GenericSubclass]*/ c) =>
-    c. /*invoke: [exact=GenericSubclass]*/ superField();
+/*member: accessSuperField1:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+accessSuperField1(
+  GenericSubclass<A> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superField();
 
-/*member: accessSuperField2:Union([exact=C], [subclass=A])*/
-accessSuperField2(GenericSubclass<B> /*[exact=GenericSubclass]*/ c) =>
-    c. /*invoke: [exact=GenericSubclass]*/ superField();
+/*member: accessSuperField2:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+accessSuperField2(
+  GenericSubclass<B> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superField();
 
-/*member: accessSuperField3:Union([exact=C], [subclass=A])*/
-accessSuperField3(GenericSubclass<C> /*[exact=GenericSubclass]*/ c) =>
-    c. /*invoke: [exact=GenericSubclass]*/ superField();
+/*member: accessSuperField3:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+accessSuperField3(
+  GenericSubclass<C> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superField();
 
-/*member: invokeFunctionTypedInstanceMethod1:[subclass=A]*/
+/*member: invokeFunctionTypedInstanceMethod1:[subclass=A|powerset=0]*/
 invokeFunctionTypedInstanceMethod1(
-  GenericClass<A> /*[exact=GenericClass]*/ c,
-) => c. /*invoke: [exact=GenericClass]*/ functionTypedMethod()();
+  GenericClass<A> /*[exact=GenericClass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericClass|powerset=0]*/ functionTypedMethod()();
 
-/*member: invokeFunctionTypedInstanceMethod2:[exact=B]*/
+/*member: invokeFunctionTypedInstanceMethod2:[exact=B|powerset=0]*/
 invokeFunctionTypedInstanceMethod2(
-  GenericClass<B> /*[exact=GenericClass]*/ c,
-) => c. /*invoke: [exact=GenericClass]*/ functionTypedMethod()();
+  GenericClass<B> /*[exact=GenericClass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericClass|powerset=0]*/ functionTypedMethod()();
 
-/*member: invokeFunctionTypedInstanceMethod3:[exact=C]*/
+/*member: invokeFunctionTypedInstanceMethod3:[exact=C|powerset=0]*/
 invokeFunctionTypedInstanceMethod3(
-  GenericClass<C> /*[exact=GenericClass]*/ c,
-) => c. /*invoke: [exact=GenericClass]*/ functionTypedMethod()();
+  GenericClass<C> /*[exact=GenericClass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericClass|powerset=0]*/ functionTypedMethod()();
 
-/*member: invokeFunctionTypedInstanceGetter1:[subclass=A]*/
+/*member: invokeFunctionTypedInstanceGetter1:[subclass=A|powerset=0]*/
 invokeFunctionTypedInstanceGetter1(
-  GenericClass<A> /*[exact=GenericClass]*/ c,
-) => c.functionTypedGetter /*invoke: [exact=GenericClass]*/ ();
+  GenericClass<A> /*[exact=GenericClass|powerset=0]*/ c,
+) => c.functionTypedGetter /*invoke: [exact=GenericClass|powerset=0]*/ ();
 
-/*member: invokeFunctionTypedInstanceGetter2:[exact=B]*/
+/*member: invokeFunctionTypedInstanceGetter2:[exact=B|powerset=0]*/
 invokeFunctionTypedInstanceGetter2(
-  GenericClass<B> /*[exact=GenericClass]*/ c,
-) => c.functionTypedGetter /*invoke: [exact=GenericClass]*/ ();
+  GenericClass<B> /*[exact=GenericClass|powerset=0]*/ c,
+) => c.functionTypedGetter /*invoke: [exact=GenericClass|powerset=0]*/ ();
 
-/*member: invokeFunctionTypedInstanceGetter3:[exact=C]*/
+/*member: invokeFunctionTypedInstanceGetter3:[exact=C|powerset=0]*/
 invokeFunctionTypedInstanceGetter3(
-  GenericClass<C> /*[exact=GenericClass]*/ c,
-) => c.functionTypedGetter /*invoke: [exact=GenericClass]*/ ();
+  GenericClass<C> /*[exact=GenericClass|powerset=0]*/ c,
+) => c.functionTypedGetter /*invoke: [exact=GenericClass|powerset=0]*/ ();
 
-/*member: invokeFunctionTypedInstanceField1:[subclass=A]*/
-invokeFunctionTypedInstanceField1(GenericClass<A> /*[exact=GenericClass]*/ c) =>
-    c.functionTypedField /*invoke: [exact=GenericClass]*/ ();
+/*member: invokeFunctionTypedInstanceField1:[subclass=A|powerset=0]*/
+invokeFunctionTypedInstanceField1(
+  GenericClass<A> /*[exact=GenericClass|powerset=0]*/ c,
+) => c.functionTypedField /*invoke: [exact=GenericClass|powerset=0]*/ ();
 
-/*member: invokeFunctionTypedInstanceField2:[exact=B]*/
-invokeFunctionTypedInstanceField2(GenericClass<B> /*[exact=GenericClass]*/ c) =>
-    c.functionTypedField /*invoke: [exact=GenericClass]*/ ();
+/*member: invokeFunctionTypedInstanceField2:[exact=B|powerset=0]*/
+invokeFunctionTypedInstanceField2(
+  GenericClass<B> /*[exact=GenericClass|powerset=0]*/ c,
+) => c.functionTypedField /*invoke: [exact=GenericClass|powerset=0]*/ ();
 
-/*member: invokeFunctionTypedInstanceField3:[exact=C]*/
-invokeFunctionTypedInstanceField3(GenericClass<C> /*[exact=GenericClass]*/ c) =>
-    c.functionTypedField /*invoke: [exact=GenericClass]*/ ();
+/*member: invokeFunctionTypedInstanceField3:[exact=C|powerset=0]*/
+invokeFunctionTypedInstanceField3(
+  GenericClass<C> /*[exact=GenericClass|powerset=0]*/ c,
+) => c.functionTypedField /*invoke: [exact=GenericClass|powerset=0]*/ ();
 
-/*member: invokeFunctionTypedSuperMethod1:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperMethod1:[null|subclass=Object|powerset=1]*/
 invokeFunctionTypedSuperMethod1(
-  GenericSubclass<A> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superMethodInvoke();
+  GenericSubclass<A> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superMethodInvoke();
 
-/*member: invokeFunctionTypedSuperMethod2:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperMethod2:[null|subclass=Object|powerset=1]*/
 invokeFunctionTypedSuperMethod2(
-  GenericSubclass<B> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superMethodInvoke();
+  GenericSubclass<B> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superMethodInvoke();
 
-/*member: invokeFunctionTypedSuperMethod3:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperMethod3:[null|subclass=Object|powerset=1]*/
 invokeFunctionTypedSuperMethod3(
-  GenericSubclass<C> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superMethodInvoke();
+  GenericSubclass<C> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superMethodInvoke();
 
-/*member: invokeFunctionTypedSuperGetter1:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperGetter1:[null|subclass=Object|powerset=1]*/
 invokeFunctionTypedSuperGetter1(
-  GenericSubclass<A> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superGetterInvoke();
+  GenericSubclass<A> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superGetterInvoke();
 
-/*member: invokeFunctionTypedSuperGetter2:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperGetter2:[null|subclass=Object|powerset=1]*/
 invokeFunctionTypedSuperGetter2(
-  GenericSubclass<B> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superGetterInvoke();
+  GenericSubclass<B> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superGetterInvoke();
 
-/*member: invokeFunctionTypedSuperGetter3:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperGetter3:[null|subclass=Object|powerset=1]*/
 invokeFunctionTypedSuperGetter3(
-  GenericSubclass<C> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superGetterInvoke();
+  GenericSubclass<C> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superGetterInvoke();
 
-/*member: invokeFunctionTypedSuperField1:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperField1:[null|subclass=Object|powerset=1]*/
 invokeFunctionTypedSuperField1(
-  GenericSubclass<A> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superFieldInvoke();
+  GenericSubclass<A> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superFieldInvoke();
 
-/*member: invokeFunctionTypedSuperField2:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperField2:[null|subclass=Object|powerset=1]*/
 invokeFunctionTypedSuperField2(
-  GenericSubclass<B> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superFieldInvoke();
+  GenericSubclass<B> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superFieldInvoke();
 
-/*member: invokeFunctionTypedSuperField3:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperField3:[null|subclass=Object|powerset=1]*/
 invokeFunctionTypedSuperField3(
-  GenericSubclass<C> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superFieldInvoke();
+  GenericSubclass<C> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superFieldInvoke();
 
-/*member: invokeGenericClasses:[null]*/
+/*member: invokeGenericClasses:[null|powerset=1]*/
 invokeGenericClasses() {
   invokeInstanceMethod1(new GenericClass<A>(new A()));
   invokeInstanceMethod2(new GenericClass<B>(new B()));
@@ -336,130 +354,145 @@
   invokeFunctionTypedSuperField3(new GenericSubclass<C>(new C()));
 }
 
-/*member: genericMethod:Union([exact=C], [subclass=A])*/
-T genericMethod<T>(T /*Union([exact=C], [subclass=A])*/ t) => t;
+/*member: genericMethod:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+T genericMethod<T>(
+  T /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ t,
+) => t;
 
-/*member: functionTypedGenericMethod:[subclass=Closure]*/
+/*member: functionTypedGenericMethod:[subclass=Closure|powerset=0]*/
 T Function() functionTypedGenericMethod<T>(
-  T /*Union([exact=C], [subclass=A])*/ t,
+  T /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ t,
 ) =>
-    /*Union([exact=C], [subclass=A])*/ () => t;
+    /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ () =>
+        t;
 
-/*member: Class.:[exact=Class]*/
+/*member: Class.:[exact=Class|powerset=0]*/
 class Class {
-  /*member: Class.genericMethod:Union([exact=C], [subclass=A])*/
-  T genericMethod<T>(T /*Union([exact=C], [subclass=A])*/ t) => t;
+  /*member: Class.genericMethod:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+  T genericMethod<T>(
+    T /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ t,
+  ) => t;
 
-  /*member: Class.functionTypedGenericMethod:[subclass=Closure]*/
+  /*member: Class.functionTypedGenericMethod:[subclass=Closure|powerset=0]*/
   T Function() functionTypedGenericMethod<T>(
-    T /*Union([exact=C], [subclass=A])*/ t,
+    T /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ t,
   ) =>
-      /*Union([exact=C], [subclass=A])*/ () => t;
+      /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ () =>
+          t;
 }
 
-/*member: Subclass.:[exact=Subclass]*/
+/*member: Subclass.:[exact=Subclass|powerset=0]*/
 class Subclass extends Class {
-  /*member: Subclass.superMethod1:[subclass=A]*/
+  /*member: Subclass.superMethod1:[subclass=A|powerset=0]*/
   superMethod1() {
     return super.genericMethod<A>(new A());
   }
 
-  /*member: Subclass.superMethod2:[exact=B]*/
+  /*member: Subclass.superMethod2:[exact=B|powerset=0]*/
   superMethod2() {
     return super.genericMethod<B>(new B());
   }
 
-  /*member: Subclass.superMethod3:[exact=C]*/
+  /*member: Subclass.superMethod3:[exact=C|powerset=0]*/
   superMethod3() {
     return super.genericMethod<C>(new C());
   }
 
-  /*member: Subclass.functionTypedSuperMethod1:[subclass=A]*/
+  /*member: Subclass.functionTypedSuperMethod1:[subclass=A|powerset=0]*/
   functionTypedSuperMethod1() {
     return super.functionTypedGenericMethod<A>(new A())();
   }
 
-  /*member: Subclass.functionTypedSuperMethod2:[exact=B]*/
+  /*member: Subclass.functionTypedSuperMethod2:[exact=B|powerset=0]*/
   functionTypedSuperMethod2() {
     return super.functionTypedGenericMethod<B>(new B())();
   }
 
-  /*member: Subclass.functionTypedSuperMethod3:[exact=C]*/
+  /*member: Subclass.functionTypedSuperMethod3:[exact=C|powerset=0]*/
   functionTypedSuperMethod3() {
     return super.functionTypedGenericMethod<C>(new C())();
   }
 }
 
-/*member: invokeGenericMethod1:[subclass=A]*/
-invokeGenericMethod1(A /*[exact=A]*/ a) => genericMethod<A>(a);
+/*member: invokeGenericMethod1:[subclass=A|powerset=0]*/
+invokeGenericMethod1(A /*[exact=A|powerset=0]*/ a) => genericMethod<A>(a);
 
-/*member: invokeGenericMethod2:[exact=B]*/
-invokeGenericMethod2(B /*[exact=B]*/ b) => genericMethod<B>(b);
+/*member: invokeGenericMethod2:[exact=B|powerset=0]*/
+invokeGenericMethod2(B /*[exact=B|powerset=0]*/ b) => genericMethod<B>(b);
 
-/*member: invokeGenericMethod3:[exact=C]*/
-invokeGenericMethod3(C /*[exact=C]*/ c) => genericMethod<C>(c);
+/*member: invokeGenericMethod3:[exact=C|powerset=0]*/
+invokeGenericMethod3(C /*[exact=C|powerset=0]*/ c) => genericMethod<C>(c);
 
-/*member: invokeGenericInstanceMethod1:[subclass=A]*/
+/*member: invokeGenericInstanceMethod1:[subclass=A|powerset=0]*/
 invokeGenericInstanceMethod1() =>
-    Class(). /*invoke: [exact=Class]*/ genericMethod<A>(new A());
+    Class(). /*invoke: [exact=Class|powerset=0]*/ genericMethod<A>(new A());
 
-/*member: invokeGenericInstanceMethod2:[exact=B]*/
+/*member: invokeGenericInstanceMethod2:[exact=B|powerset=0]*/
 invokeGenericInstanceMethod2() =>
-    Class(). /*invoke: [exact=Class]*/ genericMethod<B>(new B());
+    Class(). /*invoke: [exact=Class|powerset=0]*/ genericMethod<B>(new B());
 
-/*member: invokeGenericInstanceMethod3:[exact=C]*/
+/*member: invokeGenericInstanceMethod3:[exact=C|powerset=0]*/
 invokeGenericInstanceMethod3() =>
-    Class(). /*invoke: [exact=Class]*/ genericMethod<C>(new C());
+    Class(). /*invoke: [exact=Class|powerset=0]*/ genericMethod<C>(new C());
 
-/*member: invokeGenericSuperMethod1:[subclass=A]*/
+/*member: invokeGenericSuperMethod1:[subclass=A|powerset=0]*/
 invokeGenericSuperMethod1() =>
-    Subclass(). /*invoke: [exact=Subclass]*/ superMethod1();
+    Subclass(). /*invoke: [exact=Subclass|powerset=0]*/ superMethod1();
 
-/*member: invokeGenericSuperMethod2:[exact=B]*/
+/*member: invokeGenericSuperMethod2:[exact=B|powerset=0]*/
 invokeGenericSuperMethod2() =>
-    Subclass(). /*invoke: [exact=Subclass]*/ superMethod2();
+    Subclass(). /*invoke: [exact=Subclass|powerset=0]*/ superMethod2();
 
-/*member: invokeGenericSuperMethod3:[exact=C]*/
+/*member: invokeGenericSuperMethod3:[exact=C|powerset=0]*/
 invokeGenericSuperMethod3() =>
-    Subclass(). /*invoke: [exact=Subclass]*/ superMethod3();
+    Subclass(). /*invoke: [exact=Subclass|powerset=0]*/ superMethod3();
 
-/*member: invokeFunctionTypedGenericMethod1:[subclass=A]*/
-invokeFunctionTypedGenericMethod1(A /*[exact=A]*/ a) =>
+/*member: invokeFunctionTypedGenericMethod1:[subclass=A|powerset=0]*/
+invokeFunctionTypedGenericMethod1(A /*[exact=A|powerset=0]*/ a) =>
     functionTypedGenericMethod<A>(a)();
 
-/*member: invokeFunctionTypedGenericMethod2:[exact=B]*/
-invokeFunctionTypedGenericMethod2(B /*[exact=B]*/ b) =>
+/*member: invokeFunctionTypedGenericMethod2:[exact=B|powerset=0]*/
+invokeFunctionTypedGenericMethod2(B /*[exact=B|powerset=0]*/ b) =>
     functionTypedGenericMethod<B>(b)();
 
-/*member: invokeFunctionTypedGenericMethod3:[exact=C]*/
-invokeFunctionTypedGenericMethod3(C /*[exact=C]*/ c) =>
+/*member: invokeFunctionTypedGenericMethod3:[exact=C|powerset=0]*/
+invokeFunctionTypedGenericMethod3(C /*[exact=C|powerset=0]*/ c) =>
     functionTypedGenericMethod<C>(c)();
 
-/*member: invokeFunctionTypedGenericInstanceMethod1:[subclass=A]*/
+/*member: invokeFunctionTypedGenericInstanceMethod1:[subclass=A|powerset=0]*/
 invokeFunctionTypedGenericInstanceMethod1() =>
-    Class(). /*invoke: [exact=Class]*/ functionTypedGenericMethod<A>(new A())();
+    Class(). /*invoke: [exact=Class|powerset=0]*/ functionTypedGenericMethod<A>(
+      new A(),
+    )();
 
-/*member: invokeFunctionTypedGenericInstanceMethod2:[exact=B]*/
+/*member: invokeFunctionTypedGenericInstanceMethod2:[exact=B|powerset=0]*/
 invokeFunctionTypedGenericInstanceMethod2() =>
-    Class(). /*invoke: [exact=Class]*/ functionTypedGenericMethod<B>(new B())();
+    Class(). /*invoke: [exact=Class|powerset=0]*/ functionTypedGenericMethod<B>(
+      new B(),
+    )();
 
-/*member: invokeFunctionTypedGenericInstanceMethod3:[exact=C]*/
+/*member: invokeFunctionTypedGenericInstanceMethod3:[exact=C|powerset=0]*/
 invokeFunctionTypedGenericInstanceMethod3() =>
-    Class(). /*invoke: [exact=Class]*/ functionTypedGenericMethod<C>(new C())();
+    Class(). /*invoke: [exact=Class|powerset=0]*/ functionTypedGenericMethod<C>(
+      new C(),
+    )();
 
-/*member: invokeFunctionTypedGenericSuperMethod1:[subclass=A]*/
+/*member: invokeFunctionTypedGenericSuperMethod1:[subclass=A|powerset=0]*/
 invokeFunctionTypedGenericSuperMethod1() =>
-    Subclass(). /*invoke: [exact=Subclass]*/ functionTypedSuperMethod1();
+    Subclass()
+        . /*invoke: [exact=Subclass|powerset=0]*/ functionTypedSuperMethod1();
 
-/*member: invokeFunctionTypedGenericSuperMethod2:[exact=B]*/
+/*member: invokeFunctionTypedGenericSuperMethod2:[exact=B|powerset=0]*/
 invokeFunctionTypedGenericSuperMethod2() =>
-    Subclass(). /*invoke: [exact=Subclass]*/ functionTypedSuperMethod2();
+    Subclass()
+        . /*invoke: [exact=Subclass|powerset=0]*/ functionTypedSuperMethod2();
 
-/*member: invokeFunctionTypedGenericSuperMethod3:[exact=C]*/
+/*member: invokeFunctionTypedGenericSuperMethod3:[exact=C|powerset=0]*/
 invokeFunctionTypedGenericSuperMethod3() =>
-    Subclass(). /*invoke: [exact=Subclass]*/ functionTypedSuperMethod3();
+    Subclass()
+        . /*invoke: [exact=Subclass|powerset=0]*/ functionTypedSuperMethod3();
 
-/*member: invokeGenericMethods:[null]*/
+/*member: invokeGenericMethods:[null|powerset=1]*/
 invokeGenericMethods() {
   invokeGenericMethod1(new A());
   invokeGenericMethod2(new B());
diff --git a/pkg/compiler/test/inference/data/while.dart b/pkg/compiler/test/inference/data/while.dart
index cc82f71..401b492 100644
--- a/pkg/compiler/test/inference/data/while.dart
+++ b/pkg/compiler/test/inference/data/while.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   simpleWhile();
   whileNull();
@@ -20,24 +20,24 @@
 /// Simple int based while loop.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: simpleWhile:[null]*/
+/*member: simpleWhile:[null|powerset=1]*/
 simpleWhile() {
   var i = 0;
-  while (i /*invoke: [subclass=JSPositiveInt]*/ < 10) {
-    i = i /*invoke: [subclass=JSPositiveInt]*/ + 1;
+  while (i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ < 10) {
+    i = i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ + 1;
   }
-  i. /*invoke: [subclass=JSPositiveInt]*/ abs();
+  i. /*invoke: [subclass=JSPositiveInt|powerset=0]*/ abs();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 /// While loop with null test.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: whileNull:Value([null|exact=JSString], value: "null")*/
+/*member: whileNull:Value([null|exact=JSString|powerset=1], value: "null", powerset: 1)*/
 whileNull() {
   var o;
   while (o == null) {
-    o = o. /*invoke: [null]*/ toString();
+    o = o. /*invoke: [null|powerset=1]*/ toString();
   }
   return o;
 }
@@ -46,11 +46,11 @@
 /// While loop with not-null test.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: whileNotNull:[exact=JSString]*/
+/*member: whileNotNull:[exact=JSString|powerset=0]*/
 whileNotNull() {
   var o = '';
-  while (o /*invoke: [exact=JSString]*/ != null) {
-    o = o. /*invoke: [exact=JSString]*/ toString();
+  while (o /*invoke: [exact=JSString|powerset=0]*/ != null) {
+    o = o. /*invoke: [exact=JSString|powerset=0]*/ toString();
   }
   return o;
 }
@@ -59,11 +59,11 @@
 /// While loop with null test with an unreachable body.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: whileNullUnreachable:Value([exact=JSString], value: "")*/
+/*member: whileNullUnreachable:Value([exact=JSString|powerset=0], value: "", powerset: 0)*/
 whileNullUnreachable() {
   var o = '';
-  while (o /*invoke: [exact=JSString]*/ == null) {
-    o = o. /*invoke: [empty]*/ toString();
+  while (o /*invoke: [exact=JSString|powerset=0]*/ == null) {
+    o = o. /*invoke: [empty|powerset=0]*/ toString();
   }
   return o;
 }
@@ -72,11 +72,11 @@
 /// While loop with not-null test with an unreachable body.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: whileNotNullUnreachable:[null]*/
+/*member: whileNotNullUnreachable:[null|powerset=1]*/
 whileNotNullUnreachable() {
   var o = null;
   while (o != null) {
-    o = o. /*invoke: [empty]*/ toString();
+    o = o. /*invoke: [empty|powerset=0]*/ toString();
   }
   return o;
 }
@@ -86,32 +86,32 @@
 /// object to the [_whileUnion1] method.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
 class Class1 {
-  /*member: Class1.field:[null|exact=Class2]*/
+  /*member: Class1.field:[null|exact=Class2|powerset=1]*/
   var field;
 }
 
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
 class Class2 {
-  /*member: Class2.field:[null|exact=Class1]*/
+  /*member: Class2.field:[null|exact=Class1|powerset=1]*/
   var field;
 }
 
-/*member: _whileUnion1:Union(null, [exact=Class1], [exact=Class2])*/
-_whileUnion1(/*[exact=Class1]*/ o) {
+/*member: _whileUnion1:Union(null, [exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 1)*/
+_whileUnion1(/*[exact=Class1|powerset=0]*/ o) {
   while (o != null) {
-    o = o. /*Union([exact=Class1], [exact=Class2])*/ field;
+    o = o. /*Union([exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 0)*/ field;
   }
   return o;
 }
 
-/*member: whileUnion1:[null]*/
+/*member: whileUnion1:[null|powerset=1]*/
 whileUnion1() {
   var c1 = Class1();
   var c2 = Class2();
-  c1. /*update: [exact=Class1]*/ field = c2;
-  c2. /*update: [exact=Class2]*/ field = c1;
+  c1. /*update: [exact=Class1|powerset=0]*/ field = c2;
+  c2. /*update: [exact=Class2|powerset=0]*/ field = c1;
   _whileUnion1(c1);
 }
 
@@ -120,32 +120,32 @@
 /// object to the [_whileUnion2] method.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
 class Class3 {
-  /*member: Class3.field:[null|exact=Class4]*/
+  /*member: Class3.field:[null|exact=Class4|powerset=1]*/
   var field;
 }
 
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
 class Class4 {
-  /*member: Class4.field:[null|exact=Class3]*/
+  /*member: Class4.field:[null|exact=Class3|powerset=1]*/
   var field;
 }
 
-/*member: _whileUnion2:Union(null, [exact=Class3], [exact=Class4])*/
-_whileUnion2(/*[exact=Class4]*/ o) {
+/*member: _whileUnion2:Union(null, [exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 1)*/
+_whileUnion2(/*[exact=Class4|powerset=0]*/ o) {
   while (o != null) {
-    o = o. /*Union([exact=Class3], [exact=Class4])*/ field;
+    o = o. /*Union([exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 0)*/ field;
   }
   return o;
 }
 
-/*member: whileUnion2:[null]*/
+/*member: whileUnion2:[null|powerset=1]*/
 whileUnion2() {
   var c1 = Class3();
   var c2 = Class4();
-  c1. /*update: [exact=Class3]*/ field = c2;
-  c2. /*update: [exact=Class4]*/ field = c1;
+  c1. /*update: [exact=Class3|powerset=0]*/ field = c2;
+  c2. /*update: [exact=Class4|powerset=0]*/ field = c1;
   _whileUnion2(c2);
 }
 
@@ -154,32 +154,34 @@
 /// objects to the [_whileUnion3] method.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class5.:[exact=Class5]*/
+/*member: Class5.:[exact=Class5|powerset=0]*/
 class Class5 {
-  /*member: Class5.field:[null|exact=Class6]*/
+  /*member: Class5.field:[null|exact=Class6|powerset=1]*/
   var field;
 }
 
-/*member: Class6.:[exact=Class6]*/
+/*member: Class6.:[exact=Class6|powerset=0]*/
 class Class6 {
-  /*member: Class6.field:[null|exact=Class5]*/
+  /*member: Class6.field:[null|exact=Class5|powerset=1]*/
   var field;
 }
 
-/*member: _whileUnion3:Union(null, [exact=Class5], [exact=Class6])*/
-_whileUnion3(/*Union([exact=Class5], [exact=Class6])*/ o) {
+/*member: _whileUnion3:Union(null, [exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 1)*/
+_whileUnion3(
+  /*Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/ o,
+) {
   while (o != null) {
-    o = o. /*Union([exact=Class5], [exact=Class6])*/ field;
+    o = o. /*Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/ field;
   }
   return o;
 }
 
-/*member: whileUnion3:[null]*/
+/*member: whileUnion3:[null|powerset=1]*/
 whileUnion3() {
   var c1 = Class5();
   var c2 = Class6();
-  c1. /*update: [exact=Class5]*/ field = c2;
-  c2. /*update: [exact=Class6]*/ field = c1;
+  c1. /*update: [exact=Class5|powerset=0]*/ field = c2;
+  c2. /*update: [exact=Class6|powerset=0]*/ field = c1;
   _whileUnion3(c1);
   _whileUnion3(c2);
 }
@@ -188,32 +190,32 @@
 /// While loop with is test that mixes field accesses.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class7.:[exact=Class7]*/
+/*member: Class7.:[exact=Class7|powerset=0]*/
 class Class7 {
-  /*member: Class7.field:[null|exact=Class8]*/
+  /*member: Class7.field:[null|exact=Class8|powerset=1]*/
   var field;
 }
 
-/*member: Class8.:[exact=Class8]*/
+/*member: Class8.:[exact=Class8|powerset=0]*/
 class Class8 {
-  /*member: Class8.field:[null|exact=Class7]*/
+  /*member: Class8.field:[null|exact=Class7|powerset=1]*/
   var field;
 }
 
-/*member: _whileIs:Union(null, [exact=Class7], [exact=Class8])*/
-_whileIs(/*[exact=Class7]*/ o) {
+/*member: _whileIs:Union(null, [exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 1)*/
+_whileIs(/*[exact=Class7|powerset=0]*/ o) {
   while (o is Class7) {
-    o = o. /*[exact=Class7]*/ field;
+    o = o. /*[exact=Class7|powerset=0]*/ field;
   }
   return o;
 }
 
-/*member: whileIs:[null]*/
+/*member: whileIs:[null|powerset=1]*/
 whileIs() {
   var c1 = Class7();
   var c2 = Class8();
-  c1. /*update: [exact=Class7]*/ field = c2;
-  c2. /*update: [exact=Class8]*/ field = c1;
+  c1. /*update: [exact=Class7|powerset=0]*/ field = c2;
+  c2. /*update: [exact=Class8|powerset=0]*/ field = c1;
   _whileIs(c1);
 }
 
@@ -221,31 +223,31 @@
 /// While loop with is-not test that mixes field accesses.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: Class9.:[exact=Class9]*/
+/*member: Class9.:[exact=Class9|powerset=0]*/
 class Class9 {
-  /*member: Class9.field:[null|exact=Class10]*/
+  /*member: Class9.field:[null|exact=Class10|powerset=1]*/
   var field;
 }
 
-/*member: Class10.:[exact=Class10]*/
+/*member: Class10.:[exact=Class10|powerset=0]*/
 class Class10 {
-  /*member: Class10.field:[null|exact=Class9]*/
+  /*member: Class10.field:[null|exact=Class9|powerset=1]*/
   var field;
 }
 
-/*member: _whileIsNot:Union(null, [exact=Class10], [exact=Class9])*/
-_whileIsNot(/*[exact=Class9]*/ o) {
+/*member: _whileIsNot:Union(null, [exact=Class10|powerset=0], [exact=Class9|powerset=0], powerset: 1)*/
+_whileIsNot(/*[exact=Class9|powerset=0]*/ o) {
   while (o is! Class10) {
-    o = o. /*Union(null, [exact=Class10], [exact=Class9])*/ field;
+    o = o. /*Union(null, [exact=Class10|powerset=0], [exact=Class9|powerset=0], powerset: 1)*/ field;
   }
   return o;
 }
 
-/*member: whileIsNot:[null]*/
+/*member: whileIsNot:[null|powerset=1]*/
 whileIsNot() {
   var c1 = Class9();
   var c2 = Class10();
-  c1. /*update: [exact=Class9]*/ field = c2;
-  c2. /*update: [exact=Class10]*/ field = c1;
+  c1. /*update: [exact=Class9|powerset=0]*/ field = c2;
+  c2. /*update: [exact=Class10|powerset=0]*/ field = c1;
   _whileIsNot(c1);
 }
diff --git a/pkg/compiler/test/inference/data/yield.dart b/pkg/compiler/test/inference/data/yield.dart
index 3f89f21..6edc20d 100644
--- a/pkg/compiler/test/inference/data/yield.dart
+++ b/pkg/compiler/test/inference/data/yield.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
 main() {
   yieldZero();
   yieldList();
@@ -15,7 +15,7 @@
 // Yield a single integer.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: yieldZero:[exact=_SyncStarIterable]*/
+/*member: yieldZero:[exact=_SyncStarIterable|powerset=0]*/
 yieldZero() sync* {
   yield 0;
 }
@@ -24,7 +24,7 @@
 // Yield a list of integers.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: yieldList:[exact=_SyncStarIterable]*/
+/*member: yieldList:[exact=_SyncStarIterable|powerset=0]*/
 yieldList() sync* {
   yield [0, 1, 2, 3];
 }
@@ -33,7 +33,7 @@
 // Yield star of a list of integers.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: yieldStarList:[exact=_SyncStarIterable]*/
+/*member: yieldStarList:[exact=_SyncStarIterable|powerset=0]*/
 yieldStarList() sync* {
   yield* [0, 1, 2, 3];
 }
@@ -42,7 +42,7 @@
 // Yield multiple integers.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: yieldMany:[exact=_SyncStarIterable]*/
+/*member: yieldMany:[exact=_SyncStarIterable|powerset=0]*/
 yieldMany() sync* {
   yield 0;
   yield 1;
@@ -54,7 +54,7 @@
 // Yield an integer and a string.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*member: yieldIntAndString:[exact=_SyncStarIterable]*/
+/*member: yieldIntAndString:[exact=_SyncStarIterable|powerset=0]*/
 yieldIntAndString() sync* {
   yield 0;
   yield '';
