From 34b83034323464929452ee2c19858af70f963bc6 Mon Sep 17 00:00:00 2001 From: James Petty Date: Fri, 17 May 2024 12:20:48 -0400 Subject: [PATCH] Reuse temp variables in InCodeGenerator --- .../main/java/io/trino/sql/gen/InCodeGenerator.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/core/trino-main/src/main/java/io/trino/sql/gen/InCodeGenerator.java b/core/trino-main/src/main/java/io/trino/sql/gen/InCodeGenerator.java index 1969bee7484d..07a91c428f80 100644 --- a/core/trino-main/src/main/java/io/trino/sql/gen/InCodeGenerator.java +++ b/core/trino-main/src/main/java/io/trino/sql/gen/InCodeGenerator.java @@ -170,10 +170,10 @@ public BytecodeNode generateExpression(BytecodeGeneratorContext generatorContext LabelNode defaultLabel = new LabelNode("default"); Scope scope = generatorContext.getScope(); - Variable value = scope.createTempVariable(javaType); + Variable value = scope.getOrCreateTempVariable(javaType); BytecodeNode switchBlock; - Variable expression = scope.createTempVariable(int.class); + Variable expression = scope.getOrCreateTempVariable(int.class); SwitchBuilder switchBuilder = new SwitchBuilder().expression(expression); switch (switchGenerationCase) { @@ -278,6 +278,9 @@ public BytecodeNode generateExpression(BytecodeGeneratorContext generatorContext block.visitLabel(end); + scope.releaseTempVariableForReuse(expression); + scope.releaseTempVariableForReuse(value); + return block; } @@ -299,7 +302,7 @@ private static BytecodeBlock buildInCase( { Variable caseWasNull = null; // caseWasNull is set to true the first time a null in `testValues` is encountered if (checkForNulls) { - caseWasNull = scope.createTempVariable(boolean.class); + caseWasNull = scope.getOrCreateTempVariable(boolean.class); } BytecodeBlock caseBlock = new BytecodeBlock(); @@ -360,6 +363,10 @@ private static BytecodeBlock buildInCase( elseLabel = testLabel; } caseBlock.append(elseNode); + + if (checkForNulls) { + scope.releaseTempVariableForReuse(caseWasNull); + } return caseBlock; }