From 996b383373711e6b3bbbbd6b965e019d60ddfe19 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 31 Jan 2024 17:12:45 +0000 Subject: Remove Patio memory-fill --- .../compiler/backends/llvm/codegen/LlvmMemset.java | 61 ---------------------- .../backends/llvm/codegen/PatioToLlvm.java | 14 +---- .../compiler/backends/wasm/PatioToWasm.java | 8 --- .../shedlang/compiler/patio/PatioSerializer.java | 8 --- .../patio/instructions/PatioInstruction.java | 2 +- .../patio/instructions/PatioMemoryFill.java | 20 ------- 6 files changed, 2 insertions(+), 111 deletions(-) delete mode 100644 src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmMemset.java delete mode 100644 src/main/java/org/shedlang/compiler/patio/instructions/PatioMemoryFill.java (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmMemset.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmMemset.java deleted file mode 100644 index 24739116..00000000 --- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmMemset.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.shedlang.compiler.backends.llvm.codegen; - -import org.shedlang.compiler.backends.llvm.LlvmTarget; -import org.shedlang.compiler.backends.llvm.ir.ast.LlvmFunctionDeclaration; -import org.shedlang.compiler.backends.llvm.ir.ast.LlvmParam; -import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmInstruction; -import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperand; -import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperandInt; -import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypes; - -import java.util.List; -import java.util.Optional; - -public class LlvmMemset { - private LlvmMemset() { - } - - private static final LlvmFunctionDeclaration MEMSET_32 = new LlvmFunctionDeclaration( - "llvm.memset.p0.i32", - LlvmTypes.VOID, - List.of( - new LlvmParam(LlvmTypes.pointer(LlvmTypes.VOID), "dest"), - new LlvmParam(LlvmTypes.INT_8, "val"), - new LlvmParam(LlvmTypes.INT_32, "len"), - new LlvmParam(LlvmTypes.INT_1, "isvolatile") - ) - ); - - private static final LlvmFunctionDeclaration MEMSET_64 = new LlvmFunctionDeclaration( - "llvm.memset.p0.i64", - LlvmTypes.VOID, - List.of( - new LlvmParam(LlvmTypes.pointer(LlvmTypes.VOID), "dest"), - new LlvmParam(LlvmTypes.INT_8, "val"), - new LlvmParam(LlvmTypes.INT_64, "len"), - new LlvmParam(LlvmTypes.INT_1, "isvolatile") - ) - ); - - public static LlvmFunctionDeclaration declaration(LlvmTarget target) { - return switch (target) { - case AMD64 -> - MEMSET_64; - - case I686 -> - MEMSET_32; - }; - } - - public static LlvmInstruction instruction( - LlvmTarget target, - LlvmOperand dest, - LlvmOperand val, - LlvmOperand len - ) { - return declaration(target).call( - Optional.empty(), - List.of(dest, val, len, new LlvmOperandInt(0)) - ); - } -} diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java index b77701e1..104080be 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java @@ -110,8 +110,7 @@ public class PatioToLlvm { .addTopLevelEntity(EXCEPTION_HANDLER_DECLARATION) .addTopLevelEntity(exceptionValueDeclaration(globalContext.target())) .addTopLevelEntity(throwDeclaration(globalContext.target())) - .addTopLevelEntity(RETHROW_DECLARATION) - .addTopLevelEntity(LlvmMemset.declaration(globalContext.target())); + .addTopLevelEntity(RETHROW_DECLARATION); for (var patioCompilationUnitElement : patioCompilationUnit.elements()) { switch (patioCompilationUnitElement) { @@ -541,17 +540,6 @@ public class PatioToLlvm { case PatioLoopContinue patioLoopContinue -> context.addTerminatorInstruction(new LlvmBrUnconditional(context.loopStartLabel())); - case PatioMemoryFill patioMemoryFill -> { - context = context.addInstruction(LlvmMemset.instruction( - context.target(), - patioOperandToLlvmOperand(patioMemoryFill.pointer(), context), - patioOperandToLlvmOperand(patioMemoryFill.value(), context), - patioOperandToLlvmOperand(patioMemoryFill.length(), context) - )); - - yield context; - } - case PatioMemoryLoad patioMemoryLoad -> { var destinationResult = context.addPatioLocalToLlvmLocal(patioMemoryLoad.destination()); var destination = destinationResult.value(); diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java index 05dd71df..6c5f96da 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java @@ -321,14 +321,6 @@ public class PatioToWasm { yield context; } - case PatioMemoryFill patioMemoryFill -> { - context = generateOperand(patioMemoryFill.pointer(), context); - context = generateOperand(patioMemoryFill.value(), context); - context = generateOperand(patioMemoryFill.length(), context); - context = context.addInstruction(new WasmMemoryFill()); - yield context; - } - case PatioMemoryLoad patioMemoryLoad -> { context = generateOperand(patioMemoryLoad.pointer(), context); diff --git a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java index eb5e2b0f..d6db62c6 100644 --- a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java +++ b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java @@ -273,14 +273,6 @@ public class PatioSerializer { treeIdentifier("continue") ); - case PatioMemoryFill memoryFill -> - treeListIndented( - treeIdentifier("memory-fill"), - operandToTree(memoryFill.pointer()), - operandToTree(memoryFill.value()), - operandToTree(memoryFill.length()) - ); - case PatioMemoryLoad memoryLoad -> treeListIndented( treeIdentifier("memory-load"), diff --git a/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java b/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java index be12070d..92119bfb 100644 --- a/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java +++ b/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java @@ -2,7 +2,7 @@ package org.shedlang.compiler.patio.instructions; import org.shedlang.compiler.sources.Source; -public sealed interface PatioInstruction permits PatioAllocStack, PatioBlock, PatioBoolToInt, PatioCall, PatioCallPointer, PatioDataPtrToInt, PatioIf, PatioIntAdd, PatioIntEquals, PatioIntNotEqual, PatioIntSub, PatioIntToBool, PatioIntToDataPtr, PatioLocalStore, PatioLoop, PatioLoopBreak, PatioLoopContinue, PatioMemoryFill, PatioMemoryLoad, PatioMemoryStore, PatioResume, PatioReturn, PatioReturnVoid, PatioSwitch, PatioThrow, PatioTry, PatioUnreachable, PatioVarLoad, PatioVarStore { +public sealed interface PatioInstruction permits PatioAllocStack, PatioBlock, PatioBoolToInt, PatioCall, PatioCallPointer, PatioDataPtrToInt, PatioIf, PatioIntAdd, PatioIntEquals, PatioIntNotEqual, PatioIntSub, PatioIntToBool, PatioIntToDataPtr, PatioLocalStore, PatioLoop, PatioLoopBreak, PatioLoopContinue, PatioMemoryLoad, PatioMemoryStore, PatioResume, PatioReturn, PatioReturnVoid, PatioSwitch, PatioThrow, PatioTry, PatioUnreachable, PatioVarLoad, PatioVarStore { boolean isBlockTerminator(); Source source(); } diff --git a/src/main/java/org/shedlang/compiler/patio/instructions/PatioMemoryFill.java b/src/main/java/org/shedlang/compiler/patio/instructions/PatioMemoryFill.java deleted file mode 100644 index 3acd9dd7..00000000 --- a/src/main/java/org/shedlang/compiler/patio/instructions/PatioMemoryFill.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.shedlang.compiler.patio.instructions; - -import org.shedlang.compiler.patio.operands.PatioOperand; -import org.shedlang.compiler.sources.Source; - -/** - * Fill the {@code length} bytes starting at the address pointed to by - * {@code pointer} with the byte {@code value}. - */ -public record PatioMemoryFill( - PatioOperand pointer, - PatioOperand value, - PatioOperand length, - Source source -) implements PatioInstruction { - @Override - public boolean isBlockTerminator() { - return false; - } -} -- cgit v1.2.3