From 5966b8fbed429454f9de6756fc0cb54cb9d0aafa Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 17 Jun 2023 22:04:38 +0100 Subject: Load free variables from closure --- .../backends/llvm/LlvmCompilerCallTests.java | 28 ++++------------------ .../llvm/LlvmCompilerDefineFunctionTests.java | 8 +++++-- 2 files changed, 10 insertions(+), 26 deletions(-) (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerCallTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerCallTests.java index 348fac2e..39c05179 100644 --- a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerCallTests.java +++ b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerCallTests.java @@ -48,16 +48,6 @@ public class LlvmCompilerCallTests { has("type", x -> x.type(), equalTo(LlvmCompilerClosures.CALLABLE_TYPES.closureFunctionPointer())), has("pointer", x -> x.pointer(), isLlvmVariableLocal("closureFunctionPointerPointer__0")) ), - instanceOf( - LlvmGetElementPtr.class, - has("target", x -> x.target(), isLlvmVariableLocal("closureEnvironmentPointer__0")), - has("pointerType", x -> x.pointerType(), equalTo(LlvmCompilerClosures.CALLABLE_TYPES.closurePointer())), - has("pointer", x -> x.pointer(), isLlvmVariableLocal("closurePointer__0")), - has("indexes", x -> x.indexes(), isSequence( - isLlvmTypedOperand(LlvmTypes.INT_64, isLlvmOperandInt(0)), - isLlvmTypedOperand(LlvmTypes.INT_32, isLlvmOperandInt(1)) - )) - ), instanceOf( LlvmCall.class, has("target", x -> x.target(), isLlvmVariableLocal("tmp__0")), @@ -65,8 +55,8 @@ public class LlvmCompilerCallTests { has("functionPointer", x -> x.functionPointer(), isLlvmVariableLocal("closureFunctionPointer__0")), has("args", x -> x.args(), isSequence( isLlvmTypedOperand( - LlvmCompilerClosures.CALLABLE_TYPES.closureEnvironmentPointer(), - isLlvmVariableLocal("closureEnvironmentPointer__0") + LlvmCompilerClosures.CALLABLE_TYPES.closurePointer(), + isLlvmVariableLocal("closurePointer__0") ) )) ) @@ -113,16 +103,6 @@ public class LlvmCompilerCallTests { has("type", x -> x.type(), equalTo(LlvmCompilerClosures.CALLABLE_TYPES.closureFunctionPointer())), has("pointer", x -> x.pointer(), isLlvmVariableLocal("closureFunctionPointerPointer__0")) ), - instanceOf( - LlvmGetElementPtr.class, - has("target", x -> x.target(), isLlvmVariableLocal("closureEnvironmentPointer__0")), - has("pointerType", x -> x.pointerType(), equalTo(LlvmCompilerClosures.CALLABLE_TYPES.closurePointer())), - has("pointer", x -> x.pointer(), isLlvmVariableLocal("closurePointer__0")), - has("indexes", x -> x.indexes(), isSequence( - isLlvmTypedOperand(LlvmTypes.INT_64, isLlvmOperandInt(0)), - isLlvmTypedOperand(LlvmTypes.INT_32, isLlvmOperandInt(1)) - )) - ), instanceOf( LlvmCall.class, has("target", x -> x.target(), isLlvmVariableLocal("tmp__0")), @@ -130,8 +110,8 @@ public class LlvmCompilerCallTests { has("functionPointer", x -> x.functionPointer(), isLlvmVariableLocal("closureFunctionPointer__0")), has("args", x -> x.args(), isSequence( isLlvmTypedOperand( - LlvmCompilerClosures.CALLABLE_TYPES.closureEnvironmentPointer(), - isLlvmVariableLocal("closureEnvironmentPointer__0") + LlvmCompilerClosures.CALLABLE_TYPES.closurePointer(), + isLlvmVariableLocal("closurePointer__0") ), isLlvmTypedOperand(LlvmCompilerTypes.VALUE_TYPE, isLlvmVariableLocal("positional1")), isLlvmTypedOperand(LlvmCompilerTypes.VALUE_TYPE, isLlvmVariableLocal("positional2")), diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerDefineFunctionTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerDefineFunctionTests.java index 1f4e154f..9882a7af 100644 --- a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerDefineFunctionTests.java +++ b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerDefineFunctionTests.java @@ -43,7 +43,7 @@ public class LlvmCompilerDefineFunctionTests { () -> topLevelEntities.append("\n") ); assertThat(topLevelEntities.toString(), equalTo(""" - define i64 @shed__fun__f__0(ptr %shed__env__0) { + define i64 @shed__fun__f__0(ptr %closurePointer__0) { ret i64 0 } """)); @@ -94,7 +94,11 @@ public class LlvmCompilerDefineFunctionTests { () -> topLevelEntities.append("\n") ); assertThat(topLevelEntities.toString(), equalTo(""" - define i64 @shed__fun__f__0(ptr %shed__env__0) { + define i64 @shed__fun__f__0(ptr %closurePointer__0) { + %closureFreeVariablePointer__a__0 = getelementptr {ptr, [2 x i64]}, ptr %closurePointer__0, i64 0, i32 1, i64 0 + %closureFreeVariable__a__0 = load i64, ptr %closureFreeVariablePointer__a__0 + %closureFreeVariablePointer__b__0 = getelementptr {ptr, [2 x i64]}, ptr %closurePointer__0, i64 0, i32 1, i64 1 + %closureFreeVariable__b__0 = load i64, ptr %closureFreeVariablePointer__b__0 ret i64 0 } """)); -- cgit v1.2.3