Removed incorrect optimization

This commit is contained in:
Eduard Urbach 2024-07-06 15:20:52 +02:00
parent 8f9481c548
commit a9f305dec2
Signed by: akyoto
GPG Key ID: C874F672B1AF20C0
7 changed files with 16 additions and 38 deletions

View File

@ -38,15 +38,6 @@ func (f *Function) CompileDefinition(node *ast.Define) error {
return err
}
if uses == 1 {
f.definitions[name] = &Definition{
Name: name,
Value: value,
}
return nil
}
return f.storeVariableInRegister(name, value, uses)
}
@ -83,12 +74,6 @@ func (f *Function) identifierExists(name string) bool {
return true
}
_, exists = f.definitions[name]
if exists {
return true
}
_, exists = f.functions[name]
return exists
}

View File

@ -36,9 +36,8 @@ func NewFunction(name string, file *fs.File, body token.List) *Function {
Syscall: x64.SyscallRegisters,
Output: x64.ReturnValueRegisters,
},
definitions: map[string]*Definition{},
variables: map[string]*Variable{},
finished: make(chan struct{}),
variables: map[string]*Variable{},
finished: make(chan struct{}),
},
}
}

View File

@ -15,12 +15,6 @@ func (f *Function) TokenToRegister(t token.Token, register cpu.Register) error {
switch t.Kind {
case token.Identifier:
name := t.Text()
constant, exists := f.definitions[name]
if exists {
return f.ExpressionToRegister(constant.Value, register)
}
variable, exists := f.variables[name]
if !exists {

View File

@ -12,9 +12,3 @@ type Variable struct {
Register cpu.Register
Alive int
}
// Definitions are single use expressions that don't reside in a register yet.
type Definition struct {
Value *expression.Expression
Name string
}

View File

@ -10,14 +10,13 @@ import (
// state is the data structure we embed in each function to preserve compilation state.
type state struct {
err error
definitions map[string]*Definition
variables map[string]*Variable
functions map[string]*Function
finished chan struct{}
assembler asm.Assembler
cpu cpu.CPU
count counter
err error
variables map[string]*Variable
functions map[string]*Function
finished chan struct{}
assembler asm.Assembler
cpu cpu.CPU
count counter
}
// counter stores how often a certain statement appeared so we can generate a unique label from it.

View File

@ -0,0 +1,6 @@
main() {
x := 1
y := x + 1
x = 2
syscall(60, y)
}

View File

@ -22,6 +22,7 @@ var programs = []struct {
{"chained-calls.q", "", 9},
{"nested-calls.q", "", 4},
{"return.q", "", 6},
{"reassign.q", "", 2},
}
func TestPrograms(t *testing.T) {