cmd/compile: add support for arm64 bit-test instructions

Add support for generating TBZ/TBNZ instructions.

The bit-test-and-branch pattern shows up in a number of
important places, including the runtime (gc bitmaps).

Before this change, there were 3 TB[N]?Z instructions in the Go tool,
all of which were in hand-written assembly. After this change, there
are 285. Also, the go1 benchmark binary gets about 4.5kB smaller.

Fixes #21361

Change-Id: I170c138b852754b9b8df149966ca5e62e6dfa771
Reviewed-on: https://go-review.googlesource.com/54470
Run-TryBot: Philip Hofer <phofer@umich.edu>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
philhofer 2017-08-09 05:01:26 +00:00 committed by Cherry Zhang
parent 583a941d4e
commit c59b495963
15 changed files with 743 additions and 50 deletions

View file

@ -26475,6 +26475,7 @@ func rewriteBlockgeneric(b *Block) bool {
cond := v.Args[0]
b.Kind = BlockIf
b.SetControl(cond)
b.Aux = nil
b.swapSuccessors()
return true
}
@ -26492,6 +26493,7 @@ func rewriteBlockgeneric(b *Block) bool {
}
b.Kind = BlockFirst
b.SetControl(nil)
b.Aux = nil
return true
}
// match: (If (ConstBool [c]) yes no)
@ -26508,6 +26510,7 @@ func rewriteBlockgeneric(b *Block) bool {
}
b.Kind = BlockFirst
b.SetControl(nil)
b.Aux = nil
b.swapSuccessors()
return true
}