Something went wrong. Try again.
🌱 A minimal programming language and compiler. git.urbach.dev/cli/q
high-performance programming-language compiler
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637package codegen
import ( "git.urbach.dev/cli/q/src/set" "git.urbach.dev/cli/q/src/ssa")
// reorderParameters reorders the sequence of parameter initialization and assigns new registers if needed.func (f *Function) reorderParameters() { usedRegisters := bitSet(0) futureRegisters := bitSet(0)
for i, step := range f.Steps { param, isParam := step.Value.(*ssa.Parameter)
if !isParam { break }
currentRegister := f.CPU.Call.In[param.Index]
if futureRegisters.Has(currentRegister) { set.BringToFront(f.Steps[:i+1], i)
for h := range i + 1 { f.Steps[h].Index = Index(h) }
if usedRegisters.Has(step.Register) { f.assignFreeRegister(step) } }
usedRegisters.Set(currentRegister) futureRegisters.Set(step.Register) }}