Similarly, the code to manage operators is also code generated from
`_gen/*Ops.go`, as it is easier to maintain a few tables than a lot of code.
-After changing the rules or operators, see [_gen/README](_gen/README) for
-instructions on how to generate the Go code again.
+After changing the rules or operators, run `go generate cmd/compile/internal/ssa`
+to generate the Go code again.
<!---
TODO: more tips and info could likely go here
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-This package generates opcode tables, rewrite rules, etc. for the ssa compiler.
-Run it with go-1.13 (or above):
- go run .
+This command generates Go code (in the parent directory) for all
+the architecture-specific opcodes, blocks, and rewrites. See the
+"Hacking on SSA" section in the parent directory's README.md for
+more information.
+
+To regenerate everything, run "go generate" on the ssa package
+in the parent directory.
}
w := new(bytes.Buffer)
- fmt.Fprintf(w, "// Code generated from _gen/allocators.go; DO NOT EDIT.\n")
+ fmt.Fprintf(w, "// Code generated from _gen/allocators.go using 'go generate'; DO NOT EDIT.\n")
fmt.Fprintln(w)
fmt.Fprintln(w, "package ssa")
func genOp() {
w := new(bytes.Buffer)
- fmt.Fprintf(w, "// Code generated from _gen/*Ops.go; DO NOT EDIT.\n")
+ fmt.Fprintf(w, "// Code generated from _gen/*Ops.go using 'go generate'; DO NOT EDIT.\n")
fmt.Fprintln(w)
fmt.Fprintln(w, "package ssa")
case *File:
file := n
seenRewrite := make(map[[3]string]string)
- fmt.Fprintf(w, "// Code generated from _gen/%s%s.rules; DO NOT EDIT.\n", n.Arch.name, n.Suffix)
- fmt.Fprintf(w, "// generated with: cd _gen; go run .\n")
+ fmt.Fprintf(w, "// Code generated from _gen/%s%s.rules using 'go generate'; DO NOT EDIT.\n", n.Arch.name, n.Suffix)
fmt.Fprintf(w, "\npackage ssa\n")
for _, path := range append([]string{
"fmt",
-// Code generated from _gen/allocators.go; DO NOT EDIT.
+// Code generated from _gen/allocators.go using 'go generate'; DO NOT EDIT.
package ssa
--- /dev/null
+// Copyright 2022 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.
+
+//go:build generate
+
+package ssa
+
+//go:generate go run -C=_gen .
-// Code generated from _gen/*Ops.go; DO NOT EDIT.
+// Code generated from _gen/*Ops.go using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/386.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/386.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/386splitload.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/386splitload.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/AMD64.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/AMD64.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/AMD64latelower.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/AMD64latelower.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/AMD64splitload.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/AMD64splitload.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/ARM.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/ARM.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/ARM64.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/ARM64.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/ARM64latelower.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/ARM64latelower.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/LOONG64.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/LOONG64.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/MIPS.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/MIPS.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/MIPS64.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/MIPS64.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/PPC64.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/PPC64.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/PPC64latelower.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/PPC64latelower.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/RISCV64.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/RISCV64.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/RISCV64latelower.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/RISCV64latelower.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/S390X.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/S390X.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/Wasm.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/Wasm.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/dec.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/dec.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/dec64.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/dec64.rules using 'go generate'; DO NOT EDIT.
package ssa
-// Code generated from _gen/generic.rules; DO NOT EDIT.
-// generated with: cd _gen; go run .
+// Code generated from _gen/generic.rules using 'go generate'; DO NOT EDIT.
package ssa