1
0
mirror of https://github.com/golang/go synced 2024-09-23 23:10:13 -06:00
go/test/sliceopt.go
Keith Randall c069bc4996 [dev.ssa] cmd/compile: implement GO386=387
Last part of the 386 SSA port.

Modify the x86 backend to simulate SSE registers and
instructions with 387 registers and instructions.
The simulation isn't terribly performant, but it works,
and the old implementation wasn't very performant either.
Leaving to people who care about 387 to optimize if they want.

Turn on SSA backend for 386 by default.

Fixes #16358

Change-Id: I678fb59132620b2c47e993c1c10c4c21135f70c0
Reviewed-on: https://go-review.googlesource.com/25271
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
2016-08-10 17:41:01 +00:00

61 lines
3.1 KiB
Go

// +build !amd64,!arm,!amd64p32,!386
// errorcheck -0 -d=append,slice
// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Check optimization results for append and slicing.
package main
func a1(x []int, y int) []int {
x = append(x, y) // ERROR "append: len-only update"
return x
}
func a2(x []int, y int) []int {
return append(x, y) // ERROR "append: full update"
}
func a3(x *[]int, y int) {
*x = append(*x, y) // ERROR "append: len-only update"
}
func s1(x **[]int, xs **string, i, j int) {
var z []int
z = (**x)[2:] // ERROR "slice: omit check for 2nd index"
z = (**x)[2:len(**x)] // not yet: "slice: reuse len" "slice: omit check for 2nd index"
z = (**x)[2:cap(**x)] // not yet: "slice: reuse cap" "slice: omit check for 2nd index"
z = (**x)[i:i] // ERROR "slice: reuse 1st index" "slice: omit check for 1st index" "slice: result len == 0"
z = (**x)[1:i:i] // ERROR "slice: reuse 2nd index" "slice: omit check for 2nd index" "slice: result cap == result len"
z = (**x)[i:j:0] // ERROR "slice: omit check for 3rd index"
z = (**x)[i:0:j] // ERROR "slice: omit check for 2nd index"
z = (**x)[0:i:j] // ERROR "slice: omit check for 1st index" "slice: skip base adjustment for 1st index 0"
z = (**x)[0:] // ERROR "slice: omit slice operation"
z = (**x)[2:8] // ERROR "slice: omit check for 1st index" "slice: result len == 6"
z = (**x)[2:2] // ERROR "slice: omit check for 1st index" "slice: result len == 0"
z = (**x)[0:i] // ERROR "slice: omit check for 1st index" "slice: skip base adjustment for 1st index 0"
z = (**x)[2:i:8] // ERROR "slice: result cap == 6"
z = (**x)[i:2:i] // ERROR "slice: reuse 1st index" "slice: result cap == 0" "slice: skip base adjustment for cap == 0"
z = z[0:i] // ERROR "slice: omit check for 1st index" "slice: result cap not computed" "slice: skip base adjustment for 1st index 0" "slice: len-only update"
z = z[0:i : i+1] // ERROR "slice: omit check for 1st index" "slice: skip base adjustment for 1st index 0" "slice: len/cap-only update"
z = z[i : i+1]
println(z)
var zs string
zs = (**xs)[2:] // ERROR "slice: omit check for 2nd index"
zs = (**xs)[2:len(**xs)] // not yet: "slice: reuse len" "slice: omit check for 2nd index"
zs = (**xs)[i:i] // ERROR "slice: reuse 1st index" "slice: omit check for 1st index" "slice: result len == 0" "slice: skip base adjustment for string len == 0"
zs = (**xs)[0:] // ERROR "slice: omit slice operation"
zs = (**xs)[2:8] // ERROR "slice: omit check for 1st index" "slice: result len == 6"
zs = (**xs)[2:2] // ERROR "slice: omit check for 1st index" "slice: result len == 0" "slice: skip base adjustment for string len == 0"
zs = (**xs)[0:i] // ERROR "slice: omit check for 1st index" "slice: skip base adjustment for 1st index 0"
zs = zs[0:i] // ERROR "slice: omit check for 1st index" "slice: skip base adjustment for 1st index 0" "slice: len-only update"
zs = zs[i : i+1]
println(zs)
}