  src/cmd/compile/internal/ssa/testdata/hist.go
55:	func test() {
57:		l := line{point{1 + zero, 2 + zero}, point{3 + zero, 4 + zero}}
58:		tinycall()                // this forces l etc to stack
57:		l := line{point{1 + zero, 2 + zero}, point{3 + zero, 4 + zero}}
59:		dx := l.end.x - l.begin.x //gdb-dbg=(l.begin.x,l.end.y)//gdb-opt=(l,dx/O,dy/O)
l = {begin = {x = 1, y = 2}, end = {x = 3, y = 4}}
dx = <Optimized out, as expected>
dy = <Optimized out, as expected>
60:		dy := l.end.y - l.begin.y //gdb-opt=(dx,dy/O)
dx = 2
dy = <Optimized out, as expected>
61:		sink = dx + dy            //gdb-opt=(dx,dy)
dx = 2
dy = 2
63:		hist := make([]int, 7)                                //gdb-opt=(dx/O,dy/O) // TODO sink is missing if this code is in 'test' instead of 'main'
dx = <Optimized out, as expected>
dy = <Optimized out, as expected>
64:		var reader io.Reader = strings.NewReader(cannedInput) //gdb-dbg=(hist/A) // TODO cannedInput/A is missing if this code is in 'test' instead of 'main'
65:		if len(os.Args) > 1 {
73:		scanner := bufio.NewScanner(reader)
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
scanner = (struct bufio.Scanner *) <A>
75:			s := scanner.Text()
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
err = {tab = 0x0, data = 0x0}
hist =  []int = {0, 0, 0, 0, 0, 0, 0}
i = 1
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
scanner = (struct bufio.Scanner *) <A>
75:			s := scanner.Text()
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
err = {tab = 0x0, data = 0x0}
hist =  []int = {0, 1, 0, 0, 0, 0, 0}
i = 1
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
scanner = (struct bufio.Scanner *) <A>
75:			s := scanner.Text()
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
err = {tab = 0x0, data = 0x0}
hist =  []int = {0, 2, 0, 0, 0, 0, 0}
i = 1
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
scanner = (struct bufio.Scanner *) <A>
75:			s := scanner.Text()
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
err = {tab = 0x0, data = 0x0}
hist =  []int = {0, 3, 0, 0, 0, 0, 0}
i = 2
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
scanner = (struct bufio.Scanner *) <A>
75:			s := scanner.Text()
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
err = {tab = 0x0, data = 0x0}
hist =  []int = {0, 3, 1, 0, 0, 0, 0}
i = 2
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
scanner = (struct bufio.Scanner *) <A>
75:			s := scanner.Text()
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
err = {tab = 0x0, data = 0x0}
hist =  []int = {0, 3, 2, 0, 0, 0, 0}
i = 2
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
scanner = (struct bufio.Scanner *) <A>
75:			s := scanner.Text()
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
err = {tab = 0x0, data = 0x0}
hist =  []int = {0, 3, 3, 0, 0, 0, 0}
i = 4
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
scanner = (struct bufio.Scanner *) <A>
75:			s := scanner.Text()
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
err = {tab = 0x0, data = 0x0}
hist =  []int = {0, 3, 3, 0, 1, 0, 0}
i = 4
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
scanner = (struct bufio.Scanner *) <A>
75:			s := scanner.Text()
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
err = {tab = 0x0, data = 0x0}
hist =  []int = {0, 3, 3, 0, 2, 0, 0}
i = 5
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
scanner = (struct bufio.Scanner *) <A>
86:		for i, a := range hist {
87:			if a == 0 { //gdb-opt=(a,n,t)
a = 0
n = 0
t = 0
88:				continue
87:			if a == 0 { //gdb-opt=(a,n,t)
a = 3
n = 0
t = 0
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
91:			n += a
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
90:			t += i * a
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
90:			t += i * a
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
86:		for i, a := range hist {
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
87:			if a == 0 { //gdb-opt=(a,n,t)
a = 3
n = 3
t = 3
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
91:			n += a
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
90:			t += i * a
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
90:			t += i * a
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
86:		for i, a := range hist {
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
87:			if a == 0 { //gdb-opt=(a,n,t)
a = 0
n = 6
t = 9
88:				continue
87:			if a == 0 { //gdb-opt=(a,n,t)
a = 2
n = 6
t = 9
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
91:			n += a
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
90:			t += i * a
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
90:			t += i * a
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
86:		for i, a := range hist {
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
87:			if a == 0 { //gdb-opt=(a,n,t)
a = 1
n = 8
t = 17
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
91:			n += a
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
90:			t += i * a
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
90:			t += i * a
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
86:		for i, a := range hist {
92:			fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
87:			if a == 0 { //gdb-opt=(a,n,t)
a = 0
n = 9
t = 22
88:				continue
98:	}
