| Index: pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart | 
| diff --git a/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart b/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart | 
| index bc49dc750fd47f5d27e7d8f210fd3d9f9ac60764..4f0be4ad41428b4d8f3bb5a075004aaa377178a1 100644 | 
| --- a/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart | 
| +++ b/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart | 
| @@ -335,8 +335,13 @@ class LogicalRewriter extends RecursiveTransformer | 
| return isTrue(e) || | 
| isFalse(e) || | 
| e is Not || | 
| -           e is LogicalOperator || | 
| -           e is ApplyBuiltinOperator && operatorReturnsBool(e.operator); | 
| +           e is LogicalOperator && isBooleanValuedLogicalOperator(e) || | 
| +           e is ApplyBuiltinOperator && operatorReturnsBool(e.operator) || | 
| +           e is TypeOperator && isBooleanValuedTypeOperator(e); | 
| +  } | 
| + | 
| +  bool isBooleanValuedLogicalOperator(LogicalOperator e) { | 
| +    return isBooleanValued(e.left) && isBooleanValued(e.right); | 
| } | 
|  | 
| /// True if the given operator always returns `true` or `false`. | 
| @@ -361,6 +366,10 @@ class LogicalRewriter extends RecursiveTransformer | 
| } | 
| } | 
|  | 
| +  bool isBooleanValuedTypeOperator(TypeOperator e) { | 
| +    return e.isTypeTest; | 
| +  } | 
| + | 
| BuiltinOperator negateBuiltin(BuiltinOperator operator) { | 
| switch (operator) { | 
| case BuiltinOperator.StrictEq: return BuiltinOperator.StrictNeq; | 
| @@ -552,4 +561,3 @@ class LogicalRewriter extends RecursiveTransformer | 
| --node.variable.readCount; | 
| } | 
| } | 
| - | 
|  |