JVM_IR: Optimize null checks.

Introduce lowering to remove null checks for primitive type
expressions and replace them with true/false. Side-effects
are preserved.

Generate ifnull/ifnonnull instructions for null checks instead
of materializing a null literal for an equality check.
This commit is contained in:
Mads Ager
2019-01-11 13:56:11 +01:00
committed by Mikhael Bogdanov
parent f5312f42c5
commit 690b8e0ac9
35 changed files with 240 additions and 106 deletions
@@ -12372,6 +12372,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/nullCheckOptimization/kt7774.kt");
}
@TestMetadata("primitiveCheckWithSideEffect.kt")
public void testPrimitiveCheckWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/nullCheckOptimization/primitiveCheckWithSideEffect.kt");
}
@TestMetadata("trivialInstanceOf.kt")
public void testTrivialInstanceOf() throws Exception {
runTest("compiler/testData/codegen/box/nullCheckOptimization/trivialInstanceOf.kt");
@@ -13427,6 +13427,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/nullCheckOptimization/kt7774.kt");
}
@TestMetadata("primitiveCheckWithSideEffect.kt")
public void testPrimitiveCheckWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/nullCheckOptimization/primitiveCheckWithSideEffect.kt");
}
@TestMetadata("trivialInstanceOf.kt")
public void testTrivialInstanceOf() throws Exception {
runTest("compiler/testData/codegen/box/nullCheckOptimization/trivialInstanceOf.kt");