Alexander Fedotov
Alexander Fedotov
Another powerful optimisation opportunity is constant propagation. This pass should be able to simplify and optimise out as much constness out of an IR body as possible. This might include...
This will be needed for implementing custom backends like the VM and (potentially in the future other architecture backends like `x86`). It should be agnostic to a backend, and can...
This issue relates to the compiler knowing about the call graph of the program. This will enable the following: - optimise out dead code, functions which are never called and...
This pass will re-write the IR into SSA form so that things like liveness checking and register allocations can be more easily implemented.
The `analysis` phase of the compiler has several distinguished parts and phases which run. In the recent spirit of improving performance across the compiler, it would be beneficial to collect...
Currently, byte literals are being printed as standard numeric literals. To make it a bit nicer when debugging, byte literals should be printed as the raw source instead of the...
Currently, the LLVM code generation backend doesn't implement emitting debug information. This is a must-need feature of any code generation backend and should be implemented. LLVM provides a way to...
The following snippet: ```rust main := () => { buf := [1u8; 4usize + 5usize]](buf: [u8; { 1usize + 1usize }] = [1u8, 1u8]) } ``` Should produce this behaviour:...
Currently, the semantic pass doesn't generate names for monomorphised names, so for code like: ```rs main := () => { buf : [u8; 9] = [1u8; 9] mut sum :=...
Currently the sizes of `PatArgId`, `ArgId` are 16bytes which is excessively large, they can both probably be shrunk down to 8bytes. Similarly, `SomeArgId` takes up a whopping 24bytes, we could...