Index: pkg/compiler/lib/src/ssa/nodes.dart |
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart |
index a8050bd1c78f3a6333bf42f36fa065c0f43f2a34..7337b7b14c7a41568c706f8ce58ad313f60a836d 100644 |
--- a/pkg/compiler/lib/src/ssa/nodes.dart |
+++ b/pkg/compiler/lib/src/ssa/nodes.dart |
@@ -2421,12 +2421,20 @@ class HIs extends HInstruction { |
final DartType typeExpression; |
final int kind; |
+ final bool useInstanceOf; |
HIs.direct(DartType typeExpression, |
HInstruction expression, |
TypeMask type) |
: this.internal(typeExpression, [expression], RAW_CHECK, type); |
+ // Pre-verified that the check can be done using 'instanceof'. |
+ HIs.instanceOf(DartType typeExpression, |
+ HInstruction expression, |
+ TypeMask type) |
+ : this.internal(typeExpression, [expression], RAW_CHECK, type, |
+ useInstanceOf: true); |
+ |
HIs.raw(DartType typeExpression, |
HInstruction expression, |
HInterceptor interceptor, |
@@ -2446,7 +2454,8 @@ class HIs extends HInstruction { |
TypeMask type) |
: this.internal(typeExpression, [expression, call], VARIABLE_CHECK, type); |
- HIs.internal(this.typeExpression, List<HInstruction> inputs, this.kind, type) |
+ HIs.internal(this.typeExpression, List<HInstruction> inputs, this.kind, |
+ TypeMask type, {bool this.useInstanceOf: false}) |
: super(inputs, type) { |
assert(kind >= RAW_CHECK && kind <= VARIABLE_CHECK); |
setUseGvn(); |