inst,ir: cancelling inputs (#92)
Adds support for a `CancellingInputs` instruction flag, to indicate cases like `XORQ R10, R10` where the instruction actually does not depend on the value of `R10` at all. Closes #89
This commit is contained in:
committed by
GitHub
parent
8f97788836
commit
d43efabdbe
22
tests/fixedbugs/issue89/asm.go
Normal file
22
tests/fixedbugs/issue89/asm.go
Normal file
@@ -0,0 +1,22 @@
|
||||
// +build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
. "github.com/mmcloughlin/avo/build"
|
||||
. "github.com/mmcloughlin/avo/operand"
|
||||
)
|
||||
|
||||
func main() {
|
||||
TEXT("Issue89", NOSPLIT, "func() uint64")
|
||||
x := GP64()
|
||||
MOVQ(U32(42), x)
|
||||
for i := 0; i < 100; i++ {
|
||||
zero := GP64()
|
||||
XORQ(zero, zero)
|
||||
ADDQ(zero, x)
|
||||
}
|
||||
Store(x, ReturnIndex(0))
|
||||
RET()
|
||||
Generate()
|
||||
}
|
||||
2
tests/fixedbugs/issue89/doc.go
Normal file
2
tests/fixedbugs/issue89/doc.go
Normal file
@@ -0,0 +1,2 @@
|
||||
// Package issue89 tests register allocation with self-cancelling inputs.
|
||||
package issue89
|
||||
209
tests/fixedbugs/issue89/issue89.s
Normal file
209
tests/fixedbugs/issue89/issue89.s
Normal file
@@ -0,0 +1,209 @@
|
||||
// Code generated by command: go run asm.go -out issue89.s -stubs stub.go. DO NOT EDIT.
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
// func Issue89() uint64
|
||||
TEXT ·Issue89(SB), NOSPLIT, $0-8
|
||||
MOVQ $0x0000002a, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
XORQ CX, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ AX, ret+0(FP)
|
||||
RET
|
||||
13
tests/fixedbugs/issue89/issue89_test.go
Normal file
13
tests/fixedbugs/issue89/issue89_test.go
Normal file
@@ -0,0 +1,13 @@
|
||||
package issue89
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
//go:generate go run asm.go -out issue89.s -stubs stub.go
|
||||
|
||||
func TestIssue89(t *testing.T) {
|
||||
if Issue89() != 42 {
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
5
tests/fixedbugs/issue89/stub.go
Normal file
5
tests/fixedbugs/issue89/stub.go
Normal file
@@ -0,0 +1,5 @@
|
||||
// Code generated by command: go run asm.go -out issue89.s -stubs stub.go. DO NOT EDIT.
|
||||
|
||||
package issue89
|
||||
|
||||
func Issue89() uint64
|
||||
Reference in New Issue
Block a user