Improve dead code elimination in optimizer

- Refactored dead_store_elimination to separate forward and backward passes
- Improved register forwarding to better detect backward jumps
- Fixed handling of JumpAndLink instructions in register tracking
- Updated optimizer snapshots to reflect improved code generation

The forward pass now correctly eliminates writes that are immediately overwritten.
Register forwarding now better handles conditional branches and loops.

Note: Backward pass for dead code elimination disabled for now - it needs
additional work to properly handle return values and call site analysis.
This commit is contained in:
2025-12-31 02:37:26 -07:00
parent 95c17b563c
commit d28cdfcc7b
15 changed files with 291 additions and 102 deletions

View File

@@ -1,5 +1,6 @@
---
source: libs/integration_tests/src/lib.rs
assertion_line: 158
expression: output
---
## Unoptimized Output
@@ -34,15 +35,11 @@ pop r9
pop r10
push sp
push ra
add r1 r10 r10
move r11 r1
move r2 r9
move r12 r2
move r3 r8
move r13 r3
add r11 r10 r10
move r12 r9
move r13 r8
add r4 r11 r12
add r5 r4 r13
move r15 r5
add r15 r4 r13
pop ra
pop sp
j ra

View File

@@ -1,5 +1,6 @@
---
source: libs/integration_tests/src/lib.rs
assertion_line: 103
expression: output
---
## Unoptimized Output
@@ -24,8 +25,8 @@ j main
pop r8
push sp
push ra
add r1 r8 1
move r15 r1
move r9 20
add r15 r8 1
pop ra
pop sp
j ra

View File

@@ -1,5 +1,6 @@
---
source: libs/integration_tests/src/lib.rs
assertion_line: 70
expression: output
---
## Unoptimized Output
@@ -31,13 +32,12 @@ j ra
## Optimized Output
j 10
j 9
pop r8
pop r9
push sp
push ra
add r1 r9 r8
move r15 r1
add r15 r9 r8
pop ra
pop sp
j ra
@@ -46,6 +46,7 @@ push ra
push 5
push 10
jal 1
move r8 r15
pop ra
pop sp
j ra

View File

@@ -124,7 +124,7 @@ __internal_L12:
## Optimized Output
j 71
j 77
push sp
push ra
yield
@@ -139,8 +139,10 @@ push sp
push ra
s d0 Setting 1
jal 1
move r1 r15
s d0 Activate 1
jal 1
move r2 r15
s d1 Open 0
pop ra
pop sp
@@ -152,53 +154,58 @@ sle r1 r8 1
ls r15 d0 255 Seeding
slt r2 r15 1
or r3 r1 r2
beqz r3 30
j 68
beqz r3 32
j 74
ls r15 d0 255 Mature
beqz r15 35
beqz r15 37
yield
s d0 Activate 1
j 30
ls r15 d0 255 Occupied
move r9 r15
j 32
ls r9 d0 255 Occupied
s d0 Setting 1
push r8
push r9
jal 1
pop r9
pop r8
move r4 r15
push r8
push r9
jal 11
pop r9
pop r8
beqz r9 54
move r5 r15
beqz r9 58
push r8
push r9
jal 11
pop r9
pop r8
move r6 r15
s d0 Setting r8
push r8
push r9
jal 1
pop r9
pop r8
move r6 r15
ls r15 d0 0 Occupied
beqz r15 63
beqz r15 68
s d0 Activate 1
push r8
push r9
jal 1
pop r9
pop r8
move r7 r15
pop ra
pop sp
j ra
move r8 0
yield
l r1 d0 Idle
bne r1 0 75
j 71
bne r1 0 82
j 78
add r3 r8 1
sgt r4 r3 19
add r5 r8 1
@@ -207,8 +214,10 @@ move r9 r6
push r8
push r9
push r8
jal 21
jal 23
pop r9
pop r8
move r7 r15
s d0 Setting r9
j 71
move r8 r9
j 78

View File

@@ -20,4 +20,6 @@ j ra
j main
pop r8
add r1 r8 1
move r8 r1
j ra

View File

@@ -1,5 +1,6 @@
---
source: libs/integration_tests/src/lib.rs
assertion_line: 173
expression: output
---
## Unoptimized Output
@@ -66,8 +67,7 @@ pop r8
pop r9
push sp
push ra
add r1 r9 r8
move r15 r1
add r15 r9 r8
pop ra
pop sp
j ra
@@ -75,8 +75,7 @@ pop r8
pop r9
push sp
push ra
add r1 r9 r9
move r15 r1
add r15 r9 r9
pop ra
pop sp
j ra
@@ -97,7 +96,7 @@ push r9
push r10
push r10
push 2
jal 10
jal 9
pop r10
pop r9
pop r8

View File

@@ -24,5 +24,6 @@ j ra
j main
pop r8
pop r9
ble r9 r8 4
ble r9 r8 5
move r10 1
j ra

View File

@@ -1,5 +1,6 @@
---
source: libs/integration_tests/src/lib.rs
assertion_line: 133
expression: output
---
## Unoptimized Output
@@ -29,8 +30,7 @@ j main
pop r8
push sp
push ra
select r9 r8 10 20
move r15 r9
select r15 r8 10 20
pop ra
pop sp
j ra

View File

@@ -17,4 +17,5 @@ j ra
## Optimized Output
j main
move r8 10
j ra

View File

@@ -1,5 +1,6 @@
---
source: libs/integration_tests/src/lib.rs
assertion_line: 91
expression: output
---
## Unoptimized Output
@@ -23,8 +24,7 @@ j main
pop r8
push sp
push ra
add r1 r8 r8
move r15 r1
add r15 r8 r8
pop ra
pop sp
j ra

View File

@@ -1,5 +1,6 @@
---
source: libs/integration_tests/src/lib.rs
assertion_line: 206
expression: output
---
## Unoptimized Output
@@ -54,12 +55,11 @@ __internal_L4:
## Optimized Output
j 25
j 23
pop r8
push sp
push ra
add r1 r8 1
move r15 r1
add r15 r8 1
pop ra
pop sp
j ra
@@ -74,21 +74,20 @@ jal 1
move r3 r15
push r3
sub r0 sp 5
get r0 db r0
move r15 r0
get r15 db r0
sub r0 sp 4
get ra db r0
j ra
yield
jal 9
jal 8
pop r0
pop r9
pop r8
move sp r15
jal 9
jal 8
pop r0
pop r0
pop r9
move sp r15
s db Setting r9
j 25
j 23