]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: simplify shift lowering on s390x
authorMichael Munday <mike.munday@ibm.com>
Mon, 30 Apr 2018 12:27:50 +0000 (13:27 +0100)
committerMichael Munday <mike.munday@ibm.com>
Tue, 8 May 2018 16:19:56 +0000 (16:19 +0000)
commit8af0c77df34a85ada2fe7f508ffaa0e337dddccb
tree9ddd6ebb10dd05635b891496108ec26be820f82e
parent704893b16be5ab99913ee04c615d570ad5d57027
cmd/compile: simplify shift lowering on s390x

Use conditional moves instead of subtractions with borrow to handle
saturation cases. This allows us to delete the SUBE/SUBEW ops and
associated rules from the SSA backend. Using conditional moves also
means we can detect when shift values are masked so I've added some
new rules to constant fold the relevant comparisons and masking ops.

Also use the new shiftIsBounded() function to avoid generating code
to handle saturation cases where possible.

Updates #25167 for s390x.

Change-Id: Ief9991c91267c9151ce4c5ec07642abb4dcc1c0d
Reviewed-on: https://go-review.googlesource.com/110070
Run-TryBot: Michael Munday <mike.munday@ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/compile/internal/s390x/ssa.go
src/cmd/compile/internal/ssa/gen/S390X.rules
src/cmd/compile/internal/ssa/gen/S390XOps.go
src/cmd/compile/internal/ssa/opGen.go
src/cmd/compile/internal/ssa/rewriteS390X.go
test/codegen/shift.go [new file with mode: 0644]