From 99ecb82ce03e629bb25cc0ddd4b1261809a3cd0d Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 5 Aug 2014 16:10:42 +0400 Subject: [PATCH] Simpler byte code generated for comparison with null and zero. Analogous byte code is generated by Javac. --- .../jet/codegen/ExpressionCodegen.java | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 9cf62c423df..aff50c829f3 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -2849,34 +2849,46 @@ public class ExpressionCodegen extends JetVisitor implem } private StackValue genCmpWithZero(JetExpression exp, Type expType, IElementType opToken) { - v.iconst(1); gen(exp, expType); - Label ok = new Label(); + Label trueLabel = new Label(); + Label afterLabel = new Label(); if (JetTokens.EQEQ == opToken || JetTokens.EQEQEQ == opToken) { - v.ifeq(ok); + v.ifeq(trueLabel); } else { - v.ifne(ok); + v.ifne(trueLabel); } - v.pop(); + v.iconst(0); - v.mark(ok); + v.goTo(afterLabel); + + v.mark(trueLabel); + v.iconst(1); + + v.mark(afterLabel); + return StackValue.onStack(Type.BOOLEAN_TYPE); } private StackValue genCmpWithNull(JetExpression exp, Type expType, IElementType opToken) { - v.iconst(1); gen(exp, boxType(expType)); - Label ok = new Label(); + Label trueLabel = new Label(); + Label afterLabel = new Label(); if (JetTokens.EQEQ == opToken || JetTokens.EQEQEQ == opToken) { - v.ifnull(ok); + v.ifnull(trueLabel); } else { - v.ifnonnull(ok); + v.ifnonnull(trueLabel); } - v.pop(); + v.iconst(0); - v.mark(ok); + v.goTo(afterLabel); + + v.mark(trueLabel); + v.iconst(1); + + v.mark(afterLabel); + return StackValue.onStack(Type.BOOLEAN_TYPE); }