mirror of
				https://github.com/golang/go.git
				synced 2025-10-31 08:40:55 +00:00 
			
		
		
		
	 0301c6c351
			
		
	
	
		0301c6c351
		
	
	
	
	
		
			
			Use a small python script to consolidate duplicate
ppc64/ppc64le tests into a single ppc64x codegen test.
This makes small assumption that anytime two tests with
for different arch/variant combos exists, those tests
can be combined into a single ppc64x test.
E.x:
  // ppc64le: foo
  // ppc64le/power9: foo
into
  // ppc64x: foo
or
  // ppc64: foo
  // ppc64le: foo
into
  // ppc64x: foo
import glob
import re
files = glob.glob("codegen/*.go")
for file in files:
    with open(file) as f:
        text = [l for l in f]
    i = 0
    while i < len(text):
        first = re.match("\s*// ?ppc64(le)?(/power[89])?:(.*)", text[i])
        if first:
            j = i+1
            while j < len(text):
                second = re.match("\s*// ?ppc64(le)?(/power[89])?:(.*)", text[j])
                if not second:
                    break
                if (not first.group(2) or first.group(2) == second.group(2)) and first.group(3) == second.group(3):
                    text[i] = re.sub(" ?ppc64(le|x)?"," ppc64x",text[i])
                    text=text[:j] + (text[j+1:])
                else:
                    j += 1
        i+=1
    with open(file, 'w') as f:
        f.write("".join(text))
Change-Id: Ic6b009b54eacaadc5a23db9c5a3bf7331b595821
Reviewed-on: https://go-review.googlesource.com/c/go/+/463220
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Run-TryBot: Paul Murphy <murp@ibm.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
		
	
			
		
			
				
	
	
		
			115 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // asmcheck
 | |
| 
 | |
| // Copyright 2018 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.
 | |
| 
 | |
| package codegen
 | |
| 
 | |
| import "runtime"
 | |
| 
 | |
| // This file contains code generation tests related to the use of the
 | |
| // stack.
 | |
| 
 | |
| // Check that stack stores are optimized away.
 | |
| 
 | |
| // 386:"TEXT\t.*, [$]0-"
 | |
| // amd64:"TEXT\t.*, [$]0-"
 | |
| // arm:"TEXT\t.*, [$]-4-"
 | |
| // arm64:"TEXT\t.*, [$]0-"
 | |
| // mips:"TEXT\t.*, [$]-4-"
 | |
| // ppc64x:"TEXT\t.*, [$]0-"
 | |
| // s390x:"TEXT\t.*, [$]0-"
 | |
| func StackStore() int {
 | |
| 	var x int
 | |
| 	return *(&x)
 | |
| }
 | |
| 
 | |
| type T struct {
 | |
| 	A, B, C, D int // keep exported fields
 | |
| 	x, y, z    int // reset unexported fields
 | |
| }
 | |
| 
 | |
| // Check that large structs are cleared directly (issue #24416).
 | |
| 
 | |
| // 386:"TEXT\t.*, [$]0-"
 | |
| // amd64:"TEXT\t.*, [$]0-"
 | |
| // arm:"TEXT\t.*, [$]0-" (spills return address)
 | |
| // arm64:"TEXT\t.*, [$]0-"
 | |
| // mips:"TEXT\t.*, [$]-4-"
 | |
| // ppc64x:"TEXT\t.*, [$]0-"
 | |
| // s390x:"TEXT\t.*, [$]0-"
 | |
| func ZeroLargeStruct(x *T) {
 | |
| 	t := T{}
 | |
| 	*x = t
 | |
| }
 | |
| 
 | |
| // Check that structs are partially initialised directly (issue #24386).
 | |
| 
 | |
| // Notes:
 | |
| // - 386 fails due to spilling a register
 | |
| // amd64:"TEXT\t.*, [$]0-"
 | |
| // arm:"TEXT\t.*, [$]0-" (spills return address)
 | |
| // arm64:"TEXT\t.*, [$]0-"
 | |
| // ppc64x:"TEXT\t.*, [$]0-"
 | |
| // s390x:"TEXT\t.*, [$]0-"
 | |
| // Note: that 386 currently has to spill a register.
 | |
| func KeepWanted(t *T) {
 | |
| 	*t = T{A: t.A, B: t.B, C: t.C, D: t.D}
 | |
| }
 | |
| 
 | |
| // Check that small array operations avoid using the stack (issue #15925).
 | |
| 
 | |
| // Notes:
 | |
| // - 386 fails due to spilling a register
 | |
| // - arm & mips fail due to softfloat calls
 | |
| // amd64:"TEXT\t.*, [$]0-"
 | |
| // arm64:"TEXT\t.*, [$]0-"
 | |
| // ppc64x:"TEXT\t.*, [$]0-"
 | |
| // s390x:"TEXT\t.*, [$]0-"
 | |
| func ArrayAdd64(a, b [4]float64) [4]float64 {
 | |
| 	return [4]float64{a[0] + b[0], a[1] + b[1], a[2] + b[2], a[3] + b[3]}
 | |
| }
 | |
| 
 | |
| // Check that small array initialization avoids using the stack.
 | |
| 
 | |
| // 386:"TEXT\t.*, [$]0-"
 | |
| // amd64:"TEXT\t.*, [$]0-"
 | |
| // arm:"TEXT\t.*, [$]0-" (spills return address)
 | |
| // arm64:"TEXT\t.*, [$]0-"
 | |
| // mips:"TEXT\t.*, [$]-4-"
 | |
| // ppc64x:"TEXT\t.*, [$]0-"
 | |
| // s390x:"TEXT\t.*, [$]0-"
 | |
| func ArrayInit(i, j int) [4]int {
 | |
| 	return [4]int{i, 0, j, 0}
 | |
| }
 | |
| 
 | |
| // Check that assembly output has matching offset and base register
 | |
| // (issue #21064).
 | |
| 
 | |
| func check_asmout(b [2]int) int {
 | |
| 	runtime.GC() // use some frame
 | |
| 	// amd64:`.*b\+24\(SP\)`
 | |
| 	// arm:`.*b\+4\(FP\)`
 | |
| 	return b[1]
 | |
| }
 | |
| 
 | |
| // Check that simple functions get promoted to nosplit, even when
 | |
| // they might panic in various ways. See issue 31219.
 | |
| // amd64:"TEXT\t.*NOSPLIT.*"
 | |
| func MightPanic(a []int, i, j, k, s int) {
 | |
| 	_ = a[i]     // panicIndex
 | |
| 	_ = a[i:j]   // panicSlice
 | |
| 	_ = a[i:j:k] // also panicSlice
 | |
| 	_ = i << s   // panicShift
 | |
| 	_ = i / j    // panicDivide
 | |
| }
 | |
| 
 | |
| // Put a defer in a loop, so second defer is not open-coded
 | |
| func Defer() {
 | |
| 	for i := 0; i < 2; i++ {
 | |
| 		defer func() {}()
 | |
| 	}
 | |
| 	// amd64:`CALL\truntime\.deferprocStack`
 | |
| 	defer func() {}()
 | |
| }
 |