2018-12-28 15:48:37 -08:00
|
|
|
package pass
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"github.com/mmcloughlin/avo/reg"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestAllocatorSimple(t *testing.T) {
|
|
|
|
|
c := reg.NewCollection()
|
2019-01-04 18:23:44 -08:00
|
|
|
x, y := c.XMM(), c.YMM()
|
2018-12-28 15:48:37 -08:00
|
|
|
|
2018-12-30 18:40:45 -08:00
|
|
|
a, err := NewAllocatorForKind(reg.KindVector)
|
2018-12-28 15:48:37 -08:00
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
a.Add(x)
|
|
|
|
|
a.Add(y)
|
|
|
|
|
a.AddInterference(x, y)
|
|
|
|
|
|
|
|
|
|
alloc, err := a.Allocate()
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
t.Log(alloc)
|
|
|
|
|
|
|
|
|
|
if alloc[x] != reg.X0 || alloc[y] != reg.Y1 {
|
|
|
|
|
t.Fatalf("unexpected allocation")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestAllocatorImpossible(t *testing.T) {
|
2018-12-30 18:40:45 -08:00
|
|
|
a, err := NewAllocatorForKind(reg.KindVector)
|
2018-12-28 15:48:37 -08:00
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
a.AddInterference(reg.X7, reg.Z7)
|
|
|
|
|
|
|
|
|
|
_, err = a.Allocate()
|
|
|
|
|
if err == nil {
|
|
|
|
|
t.Fatal("expected allocation error")
|
|
|
|
|
}
|
|
|
|
|
}
|