Skip to content

Commit 3601aed

Browse files
committed
all: REVERSE MERGE dev.typeparams (4d3cc84) into master
This commit is a REVERSE MERGE. It merges dev.typeparams back into its parent branch, master. This marks the end of development on dev.typeparams. Merge List: + 2021-08-12 4d3cc84774 Merge "[dev.typeparams] all: merge master (46fd547) into dev.typeparams" into dev.typeparams + 2021-08-12 a64ab8d3ec [dev.typeparams] all: merge master (46fd547) into dev.typeparams + 2021-08-12 7e9f911ec4 [dev.typeparams] cmd/compile: remove some shape checks in type substituter, other cleanups + 2021-08-12 677dfe5ad6 [dev.typeparams] cmd/compile: don't print out node pointer in ir.Dump + 2021-08-11 8ab59d812a [dev.typeparams] cmd/compile: change export version to 1.17 for testing + 2021-08-11 d7d4f28a06 [dev.typeparams] runtime, internal/bytealg: remove regabi fallback code on AMD64 + 2021-08-11 eeb7899137 [dev.typeparams] internal/buildcfg: always enable regabi on AMD64 + 2021-08-11 0888a8cd2d [dev.typeparams] cmd/compile/internal/types2: remove unused TypeParam.Bound method + 2021-08-10 7308d747e7 [dev.typeparams] cmd/compile/internal/types2: remove Named.SetTArgs + 2021-08-10 0f34a92df7 [dev.typeparams] go/types: don't expose the TypeSet API for 1.18 + 2021-08-10 40ba119e3f [dev.typeparams] cmd/compile: keep export format unchanged if no type params are exported + 2021-08-10 fb8579746c [dev.typeparams] internal/goexperiment: update comment for RegabiArgs requirements + 2021-08-10 2e250cc957 [dev.typeparams] cmd: update vendored golang.org/x/tools to 337cebd2c151 + 2021-08-10 2fbf6aafe7 [dev.typeparams] cmd/compile: handle interface type parameters in type switches + 2021-08-10 e4cfa2f6da [dev.typeparams] cmd/compile/internal/types2: parameterized functions must have a body + 2021-08-10 508624f359 [dev.typeparams] cmd/compile/internal/types2: expand is only required for *Named types + 2021-08-09 f5f79c47f9 [dev.typeparams] cmd/compile: use types2.Constraint() rather than types2.Bound() + 2021-08-09 9f4d6a8359 [dev.typeparams] cmd/compile: call transformArgs before early typecheckaste in noder + 2021-08-09 ca3c6985cd [dev.typeparams] cmd/compile: implement generic type switches + 2021-08-09 57668b84ff [dev.typeparams] cmd/compile: simplify interface conversions + 2021-08-07 d10a904712 [dev.typeparams] cmd/compile: don't export/import type parameter indices anymore + 2021-08-06 9e0ac72d68 [dev.typeparams] cmd/compile/internal/types2: remove Interface.Complete (cleanup) + 2021-08-06 9bd1817e41 [dev.typeparams] cmd/compile/internal/types2: limit termlist lengths + 2021-08-06 313924f272 [dev.typeparams] cmd/compile: swap export order of union term components (cleanup) + 2021-08-06 0d7dc417ea [dev.typeparams] cmd/compile: change types2.Union API to accept a list of Terms + 2021-08-06 09d82689ed [dev.typeparams] cmd/compile/internal/types2: add defined type to term/termlist tests + 2021-08-06 3a9fd99849 [dev.typeparams] cmd/compile/internal/syntax: cleanup panic calls + 2021-08-06 c3b57af8bc [dev.typeparams] cmd/compile/internal/types2: minor cleanup of writeTParamList + 2021-08-06 0811108670 [dev.typeparams] cmd/compile/internal/types2: fix make with type parameter argument + 2021-08-06 93285c89d1 [dev.typeparams] cmd/compile/internal/types2: fix range over exprs of type parameter type + 2021-08-06 5aac85ad5e [dev.typeparams] cmd/compile/internal/types2: better names for things (cleanup) + 2021-08-06 110343e4a2 [dev.typeparams] cmd/compile: cleanup wrapper code for generics + 2021-08-06 5e33d11e10 [dev.typeparams] cmd/compile: do transformCall with non-shape type of call + 2021-08-06 ac78501b9c [dev.typeparams] cmd/compile: make sure closures inside generic funcs are not compiled + 2021-08-05 f78d538858 [dev.typeparams] cmd/compile/internal/types2: cleanup panic calls + 2021-08-05 c5b6c36ddd [dev.typeparams] cmd/compile/internal/types2: remove TestIncompleteInterfaces (cleanup) + 2021-08-05 f14908d01b [dev.typeparams] cmd/compile/internal/types2: remove unused gcCompatibilityMode flag (cleanup) + 2021-08-05 bb5608dd5d [dev.typeparams] cmd/compile/internal/types2: implement type sets with term lists + 2021-08-05 6dadee759c [dev.typeparams] cmd/compile: unified importReader receiver name to r + 2021-08-05 5dcb5e2cea [dev.typeparams] cmd/compile: dictionary/shape cleanup + 2021-08-05 3cdf8b429e [dev.typeparams] cmd/compile: fixing case where type arg is an interface + 2021-08-04 1b708c0260 [dev.typeparams] go/types: remove a stale comment (cleanup) + 2021-08-04 0ec2a8b42d [dev.typeparams] go/types: switch the TArgs API to NumTArgs/TArg + 2021-08-04 e5fe769be1 [dev.typeparams] cmd/compile/internal/types2: implement term lists + 2021-08-04 b730a26729 [dev.typeparams] cmd/compile: put shape types in their own package + 2021-08-04 e590cb64f9 [dev.typeparams] runtime: handle d.link carefully when freeing a defer + 2021-08-04 d27a889119 [dev.typeparams] go/types: move instance.go contents into named.go (cleanup) + 2021-08-04 b01e775e9c [dev.typeparams] go/types: print constraint info for type param operands + 2021-08-04 3efc8f9a8d [dev.typeparams] go/types: (TypeParam) SetBound -> SetConstraint + 2021-08-04 ed3667d079 [dev.typeparams] go/types: use type terms to represent unions + 2021-08-04 880ab6209e [dev.typeparams] cmd/compile/internal/types2: fix a panic in missingMethod + 2021-08-04 5b51cf47dc [dev.typeparams] go/types: implement type terms + 2021-08-04 e0d0907212 [dev.typeparams] go/types: use comparable bit rather than ==() method + 2021-08-04 18e0503724 [dev.typeparams] go/types: embedded type cannot be a (pointer to) a type parameter + 2021-08-04 89897473e2 [dev.typeparams] go/types: implement TypeParam.Constraint + 2021-08-04 1ea3596b41 [dev.typeparams] go/types: adjust unsafe.Alignof/Offsetof/Sizeof + 2021-08-03 88bd92bb6d [dev.typeparams] runtime: simplify freedefer + 2021-08-03 1a0630aef4 [dev.typeparams] runtime,cmd/compile,cmd/link: replace jmpdefer with a loop + 2021-08-03 077925e2b0 [dev.typeparams] runtime: remove unnecessary split-prevention from defer code + 2021-08-03 7ab8754029 [dev.typeparams] cmd/compile: avoid redundant method wrappers in unified IR + 2021-08-03 fe73f28dc5 [dev.typeparams] cmd/compile: set sym.Def to ir.Name for method value wrappers + 2021-08-03 656f0888b7 [dev.typeparams] cmd/compile: make softfloat mode work with register ABI + 2021-08-03 1b193598b3 [dev.typeparams] cmd/compile: fail early on unexpected types2.Invalid + 2021-08-02 e56234a305 [dev.typeparams] cmd/compile: simple shape cleanups + 2021-08-02 c3c19731a9 [dev.typeparams] cmd/compile/internal/types2: move instance.go contents into named.go (cleanup) + 2021-08-02 156eeb40a6 [dev.typeparams] cmd/compile: make HasShape() more efficient by implementing with a type flag + 2021-08-02 283991bd7f [dev.typeparams] cmd/compile/internal/types2: print constraint info for type param operands + 2021-08-02 aa3d54da07 [dev.typeparams] runtime: rewrite softfloat functions to avoid using floats + 2021-07-31 0b8a9ccb25 [dev.typeparams] cmd/compile: make all pointer types have the same shape + 2021-07-30 7bed50e667 [dev.typeparams] Revert "[dev.typeparams] runtime: remove unnecessary split-prevention from defer code" + 2021-07-30 e3e9f0bb2d [dev.typeparams] Revert "[dev.typeparams] runtime,cmd/compile,cmd/link: replace jmpdefer with a loop" + 2021-07-30 40e561d933 [dev.typeparams] cmd/compile: allow types with the same underlying type to have the same shape + 2021-07-30 fd0011dca5 [dev.typeparams] runtime,cmd/compile,cmd/link: replace jmpdefer with a loop + 2021-07-30 53fd5b1b77 [dev.typeparams] runtime: remove unnecessary split-prevention from defer code + 2021-07-30 ea94e5d3c5 [dev.typeparams] runtime: use func() for deferred functions + 2021-07-30 4480e3b11a [dev.typeparams] go/types: backport lazy loading changes from CL 336252 + 2021-07-30 27283d208f [dev.typeparams] cmd/compile: remove now-unneeded check for '==' method for comparable type + 2021-07-29 3e7571f6ff [dev.typeparams] go/types,cmd/compile/internal/types2: fix TypeParams.At docs + 2021-07-29 1d35d8ffa5 [dev.typeparams] cmd/compile: switch unified IR from TypeParam.Bound to TypeParam.Constraint + 2021-07-29 35dbdda2fe [dev.typeparams] cmd/compile: remove remaining uses of Unshapify + 2021-07-29 600b7b431b [dev.typeparams] cmd/compile: handle meth expressions on typeparams + 2021-07-29 5ecbd811b5 [dev.typeparams] cmd/compile/internal/types2: (TypeParam) SetBound -> SetConstraint + 2021-07-29 46cc686381 [dev.typeparams] cmd/compile/internal/types2: use the TParams API consistently + 2021-07-29 27552e9172 [dev.typeparams] cmd/compile: set type parameter indices when they are bound + 2021-07-29 af903261e7 [dev.typeparams] go/types, types2: remove instance.verify field (cleanup) + 2021-07-29 c079b6baaa [dev.typeparams] cmd/compile/internal/types2: trigger verification while resolving instance + 2021-07-29 ff0c0dbca6 [dev.typeparams] cmd/compile/internal/types2: use type terms to represent unions + 2021-07-29 2fa8f00915 [dev.typeparams] cmd/compile/internal/types2: implement type terms + 2021-07-29 f4f503e0a3 [dev.typeparams] cmd/compile: implement generic .(T) operations + 2021-07-28 4a47e40a14 [dev.typeparams] cmd/compile: don't export blank functions in unified IR + 2021-07-28 506fd520d5 [dev.typeparams] cmd/compile: don't compile blank functions + 2021-07-28 adedf54288 [dev.typeparams] test: rename blank functions + 2021-07-28 5355753009 [dev.typeparams] test/typeparam: gofmt -w + 2021-07-28 473e493d18 [dev.typeparams] cmd/compile/internal/types2: merge instance and Named to eliminate sanitization + 2021-07-28 e00a6ec084 [dev.typeparams] cmd/compile: mark methods of instantiated interface types as used + 2021-07-27 c751e2e6ba [dev.typeparams] cmd/compile/internal/types2: use comparable bit rather than ==() method + 2021-07-27 5d8f90f904 [dev.typeparams] cmd/compile: don't need to unshapify append calls + 2021-07-27 cb14e673ec [dev.typeparams] runtime: don't keep stack uintptr across potential stack move + 2021-07-26 37d2219960 [dev.typeparams] cmd/compile/internal/types2: embedded type cannot be a (pointer to) a type parameter + 2021-07-26 d6753fd491 [dev.typeparams] cmd/compile/internal/types2: implement TypeParam.Constraint + 2021-07-26 9e3274bb3d [dev.typeparams] cmd/compile/internal/types2: import regexp/syntax instead of cmd/compile/internal/syntax + 2021-07-26 b93f646125 [dev.typeparams] cmd/compile/internal/types2: fix a bug in package qualification logic + 2021-07-26 996b0dbc65 [dev.typeparams] all: merge master (ecaa681) into dev.typeparams + 2021-07-26 bfcb7c4c8a [dev.typeparams] cmd/compile: fix unified IR support for //go:nointerface + 2021-07-24 b27c7e30dc [dev.typeparams] cmd/compile: fix HasShape, add dottype test + 2021-07-24 a2e2b0362b [dev.typeparams] transformDot() should set Selection and tc flag for added ODOTs + 2021-07-24 3dc0a0a2c5 [dev.typeparams] cmd/compile: get rid of concretify use for bounds. + 2021-07-24 77e0bf294c [dev.typeparams] cmd/compile: introduce OCONVIDATA op + 2021-07-24 9f928f9318 [dev.typeparams] go/types, types2: set tset when constructing interfaces in the universe + 2021-07-23 6992dcdad9 [dev.typeparams] cmd/compile: fix some issues with cons.go + 2021-07-23 e6d956e1c5 [dev.typeparams] cmd/compile: add CONVIFACE nodes for return values during noder2 + 2021-07-23 02c0172500 [dev.typeparams] cmd/compile: add dictionary entries for itab conversion + 2021-07-23 12866bd8ea [dev.typeparams] Add CONVIFACE nodes in noder2, where possible + 2021-07-23 4cdc65d32a [dev.typeparams] cmd/compile/internal/types: format union types + 2021-07-22 244267e8c4 Merge "[dev.typeparams] all: merge master (798ec73) into dev.typeparams" into dev.typeparams + 2021-07-22 d8ceb133ca [dev.typeparams] runtime: mark TestGcSys as flaky + 2021-07-22 a27e325c59 [dev.typeparams] all: merge master (798ec73) into dev.typeparams + 2021-07-22 5cb84f0604 [dev.typeparams] cmd/compile: make sure types added to the dictionary are instantiated correctly + 2021-07-22 73162a54c2 [dev.typeparams] cmd/compile: remove outdate TODO in escape analysis + 2021-07-22 80127a7dfe [dev.typeparams] cmd/compile/internal/types2: adjust unsafe.Alignof/Offsetof/Sizeof + 2021-07-22 fca3e5c445 [dev.typeparams] cmd/compile: fix missing condition in usemethod + 2021-07-22 5ba06495c1 [dev.typeparams] go/types: use the TParams API consistently + 2021-07-22 6f57139c7a [dev.typeparams] go/types: set type parameter indices when they are bound + 2021-07-22 311baf65f4 [dev.typeparams] test: cleanup 'go env' and -goexperiment + 2021-07-22 b7149b781f [dev.typeparams] go/types: trigger verification while resolving instance + 2021-07-22 61f69d2559 [dev.typeparams] go/types: merge instance and Named to eliminate sanitization + 2021-07-22 8e9109e95a [dev.typeparams] Fix problem with 14.go + 2021-07-22 ee20dff27d [dev.typeparams] Get dictionaryCapture.go working. + 2021-07-21 4e6836e82c [dev.typeparams] Fix the types of the OFUNCINST nodes in noder2 + 2021-07-21 dcc8350ad3 [dev.typeparams] cmd/compile: handle ++/-- in noder2 for operands with generic type + 2021-07-21 f19e49e7b1 [dev.typeparams] cmd/compile: added a builtins.go test, fixed one bug + 2021-07-21 e6a2cf233f [dev.typeparams] cmd/compile: get runtime stuff working + 2021-07-21 4a97fe8c22 [dev.typeparams] cmd/compile: avoid adding incorrectly instantiated types to the dictionary + 2021-07-21 2fe4b14795 [dev.typeparams] cmd/compile: ensure methods of generic types survive linker pruning + 2021-07-21 73af5f718f [dev.typeparams] cmd/compile: disable failing generic tests + 2021-07-21 a7a17f0ca8 [dev.typeparams] cmd/compile: introduce named gcshape types + 2021-07-21 897970688b [dev.typeparams] cmd/compile: cleanup unified IR file format a little + 2021-07-21 d5f6ba943c [dev.typeparams] test: add regression test for go/defer wrapper + 2021-07-20 6a931673f0 [dev.typeparams] cmd/compile: add base.Assertf{,At} functions + 2021-07-20 e4994e71fb [dev.typeparams] all: merge master (c8f4e61) into dev.typeparams + 2021-07-19 c6d3d0b0ad [dev.typeparams] go/types: fix the type parameter index in applyTypeFunc + 2021-07-19 6bf2667d4e [dev.typeparams] go/types: more consistent handling of predeclared "any" + 2021-07-19 7e714f448e [dev.typeparams] go/types: embedding stand-alone type parameters is not permitted + 2021-07-19 82f875d735 [dev.typeparams] go/types: fix generic type indirection + 2021-07-19 62f6f130fe [dev.typeparams] go/types: interface identity must consider full type set + 2021-07-19 baeabf3b36 [dev.typeparams] go/types: cleanups around receiver type checks + 2021-07-19 b3d91e3a24 [dev.typeparams] go/types: implement delete(m, k) where m is of type parameter type + 2021-07-19 cf7e66b7d4 [dev.typeparams] go/types: implement close(ch) where ch is of type parameter type + 2021-07-19 19b4142f24 [dev.typeparams] go/types: implement ch <- x where ch is of type parameter type + 2021-07-19 d6d7f8458e [dev.typeparams] go/types: implement <-ch where ch is of type parameter type + 2021-07-19 796ac6d5f2 [dev.typeparams] go/types: move methods on *Named into named.go + 2021-07-19 22f39ba208 [dev.typeparams] go/types: use InstantiateLazy to create instance types (cleanup) + 2021-07-19 4a72be87b3 [dev.typeparams] go/types: move instantiation code to instantiate.go (cleanup) + 2021-07-19 41ff0aac13 [dev.typeparams] go/types: replace types2.Instantiate with Checker.Instantiate + 2021-07-19 9e147c55b7 [dev.typeparams] go/types: update TypeParam APIs to match types2 + 2021-07-19 22a38ba5ca [dev.typeparams] go/types: remove unnecessary guard from NewInterfaceType + 2021-07-19 b96f1b9419 [dev.typeparams] go/types: add some missing APIs for the importer + 2021-07-19 43ad1ffa99 [dev.typeparams] go/types: recursive substitution must terminate (bug fix) + 2021-07-19 c7c13ae432 [dev.typeparams] go/types: use scope numbers to identify local types + 2021-07-19 ccf95f17dd [dev.typeparams] go/types: support local defined types + 2021-07-19 76b39959f4 [dev.typeparams] go/types: don't permit method calls on ptr to type parameter receivers + 2021-07-19 9b85985d36 [dev.typeparams] Separate out gcshape types that are instantiated types + 2021-07-17 df778e6fd9 [dev.typeparams] go/types: replace optype() with under() in various cases (cleanup) + 2021-07-17 e9836fe318 [dev.typeparams] go/types: clean up index expr implementation for type parameters + 2021-07-17 c4cd76fbbb [dev.typeparams] go/types: disallow "free" type parameter as RHS of a type declaration + 2021-07-16 521828091c [dev.typeparams] go/types: move (remaining) type decls into their own files (cleanup) + 2021-07-16 624d152db7 [dev.typeparams] go/types: move Interface type decl into interface.go (cleanup) + 2021-07-16 e12d43866d [dev.typeparams] go/types: move Signature type decl into signature.go (cleanup) + 2021-07-16 b3e7f23a48 [dev.typeparams] go/types: move Struct type decl into struct.go (cleanup) + 2021-07-16 7c35f5c2fc [dev.typeparams] go/types: rename newTypeSet -> computeTypeSet + 2021-07-16 de209e693a [dev.typeparams] go/types: make Interface.obj a *TypeName + 2021-07-16 0f4198b5e2 [dev.typeparams] go/types: delay interface check for type bounds + 2021-07-16 5f50a6442e [dev.typeparams] go/internal/typeparams: remove the Enabled guard + 2021-07-16 726ffce659 [dev.typeparams] go/types: "comparable" must not be visible before Go 1.18 + 2021-07-16 79955155e9 [dev.typeparams] go/types: move newTypeSet function into typeset.go + 2021-07-16 fe4f13404d [dev.typeparams] go/types: move embedding positions from Checker to Interface + 2021-07-16 b98b8b9b5b [dev.typeparams] go/types: remove unused *Checker arguments (cleanup) + 2021-07-16 fce6290e0a [dev.typeparams] go/types: remove typeparams wrappers and aliases + 2021-07-16 24f9eb2de3 [dev.typeparams] go/types: introduce type set abstraction for interfaces + 2021-07-16 b296e54618 [dev.typeparams] go/types: port lazy import resolution from types2 + 2021-07-16 10c8b7c1d7 [dev.typeparams] cmd/compile: use dictionary to convert arguments of ==, != to interfaces + 2021-07-16 ed9e109dc9 [dev.typeparams] cmd/compile: fix small -G=3 issues for tests disabled in run.go + 2021-07-16 3d8453e00e [dev.typeparams] cmd/compile/internal/types2: more consistent handling of predeclared "any" + 2021-07-16 334f2fc045 [dev.typeparams] go/*: switch from ListExpr to MultiIndexExpr + 2021-07-15 6b85a218b8 [dev.typeparams] cmd/compile: make TestUnifiedCompare insensitive to default -G level + 2021-07-14 4ff0e04c2e [dev.typeparams] cmd/compile/internal/types2: embedding stand-alone type parameters is not permitted + 2021-07-14 3a047326e8 [dev.typeparams] cmd/compile/internal/types2: fix generic type indirection + 2021-07-14 dd8bdf4a1f [dev.typeparams] cmd/compile/internal/types2: interface identity must consider full type set + 2021-07-14 2a8087817c [dev.typeparams] cmd/compile/internal/types2: cleanups around receiver type checks + 2021-07-14 95f8e64fc0 [dev.typeparams] cmd/compile/internal/types2: implement delete(m, k) where m is of type parameter type + 2021-07-14 5f0ea40c67 [dev.typeparams] cmd/compile/internal/types2: implement close(ch) where ch is of type parameter type + 2021-07-14 6511922a14 [dev.typeparams] cmd/compile/internal/types2: implement ch <- x where ch is of type parameter type + 2021-07-14 ff33d3dc3a [dev.typeparams] cmd/compile/internal/types2: implement <-ch where ch is of type parameter type + 2021-07-14 e3e6cd3022 [dev.typeparams] cmd/compile: fix escape printout bugs for -G=3 + 2021-07-14 2b10d7ff0b [dev.typeparams] go/types: export the Config.GoVersion field + 2021-07-14 5517053d17 [dev.typeparams] cmd/compile: record more typ/fun info for dictionaries in unified IR + 2021-07-14 82744bfbfc [dev.typeparams] cmd/compile: handle objStub earlier in reader + 2021-07-13 e5faa8d84b [dev.typeparams] cmd/compile/internal/types2: move methods on *Named into named.go (cleanup) + 2021-07-13 d0324eb8fb [dev.typeparams] cmd/compile/internal/types2: use InstantiateLazy to create instance types (cleanup) + 2021-07-13 70f1246a9f [dev.typeparams] cmd/compile/internal/types2: move instantiation code to instantiate.go (cleanup) + 2021-07-13 22e9265467 [dev.typeparams] cmd/compile/internal/types2: replace types2.Instantiate with Checker.Instantiate + 2021-07-12 1c783dc148 [dev.typeparams] Add optional sub-dict entry for typeparam bound calls + 2021-07-11 0dcab98fd8 [dev.typeparams] cmd/compile: slightly more incremental unified typecheck + 2021-07-10 3c3c1d8d28 [dev.typeparams] cmd/compile: more incremental typecheck for unified IR + 2021-07-10 a12ad27119 [dev.typeparams] cmd/compile: report functions declared in Go and assembly + 2021-07-10 5059aed9dd [dev.typeparams] internal/buildcfg: allow regabiwrappers on all GOARCH + 2021-07-09 f2ed30c31e [dev.typeparams] cmd/compile/internal/types2: recursive substitution must terminate (bug fix) + 2021-07-09 69d945fc6e [dev.typeparams] cmd/compile/internal/types2: use scope numbers to identify local types + 2021-07-09 04acb8a7b9 [dev.typeparams] cmd/compile: report mismatch between types because of //go:notinheap + 2021-07-08 2b1d70a137 [dev.typeparams] all: merge master (296ddf2) into dev.typeparams + 2021-07-08 42fe132787 [dev.typeparams] cmd/compile: cleanup ABI utils tests + 2021-07-08 d4f6d161e4 [dev.typeparams] cmd/compile: fix bunch of -G=3 bugs for test cases in test/typeparams/mdempsky + 2021-07-07 18135150b0 [dev.typeparams] cmd/compile/internal/types2: don't permit method calls on ptr to type parameter receivers + 2021-07-07 d2bf94fb86 [dev.typeparams] cmd/compile/internal/types2: replace optype() with under() in various cases (cleanup) + 2021-07-07 03ec8de24b [dev.typeparams] cmd/compile/internal/types2: clean up index expr implementation for type parameters + 2021-07-07 47547d8508 [dev.typeparams] cmd/compile/internal/types2: disallow "free" type parameter as RHS of a type declaration + 2021-07-07 60cb2cab97 [dev.typeparams] cmd/compile: fix bug with types2.Instantiate with interface type param + 2021-07-07 85267f402c [dev.typeparams] cmd/compile: move def of comparable to end of predeclared slices + 2021-07-07 c65ca97a45 [dev.typeparams] cmd/compile: fix windows longtest builder + 2021-07-07 501725032c [dev.typeparams] cmd/compile: handle derived types that are converted to interfaces + 2021-07-07 b614c05a15 [dev.typeparams] cmd/compile: add built-in name/type "comparable". + 2021-07-07 b4844c9f54 [dev.typeparams] cmd/compile: handle the (*T).M method expression with dictionaries + 2021-07-07 4676c3675e [dev.typeparams] cmd/compile: rename PartialCallType -> MethodValueType + 2021-07-07 5c42b6a953 [dev.typeparams] test: add regress tests that fail(ed) with -G=3 + 2021-07-07 49ade6b298 [dev.typeparams] test: add expected failure mechanism + 2021-07-04 cd00499c61 [dev.typeparams] cmd/compile: better Call constructor + 2021-07-04 899b158ee9 [dev.typeparams] cmd/compile: set Func.ClosureCalled in escape analysis + 2021-07-03 ea5369bac0 [dev.typeparams] cmd/compile: remove ir.CallUse + 2021-07-03 c45d0eaadb [dev.typeparams] cmd/compile: flatten OINLCALL in walk + 2021-07-03 ad2ba3ff51 [dev.typeparams] src,cmd: run 'go mod tidy' + 2021-07-03 5dac279fbd [dev.typeparams] cmd/compile: formalize "hidden parameters" idea + 2021-07-03 611056ec34 Merge "[dev.typeparams] all: merge master (912f075) into dev.typeparams" into dev.typeparams + 2021-07-02 ef39edefe1 [dev.typeparams] src,cmd: bump go.mod to 'go 1.18' + 2021-07-02 f35d86fd5f [dev.typeparams] all: merge master (912f075) into dev.typeparams + 2021-07-02 b994cc69e0 [dev.typeparams] cmd/compile: separate out creating instantiations from creating dictionaries + 2021-07-02 6dec18cc75 [dev.typeparams] cmd/compile: start using sub-dictionary entries where needed + 2021-07-02 a18726a648 [dev.typeparams] cmd/compile: incremental typecheck during unified IR + 2021-07-02 2aea44204e [dev.typeparams] cmd/compile: enable generics syntax with -lang=go1.18 + 2021-07-01 30e5f266ed [dev.typeparams] cmd/compile/internal/types2: move (remaining) type decls into their own files (cleanup) + 2021-07-01 9c1e7d9eff [dev.typeparams] cmd/compile/internal/types2: move Interface type decl into interface.go (cleanup) + 2021-07-01 838079beef [dev.typeparams] cmd/internal/dwarf: remove putInlinedFunc's callersym param + 2021-07-01 9ba294e15b [dev.typeparams] cmd/compile: fix getDictionarySym for methods references, write out sub-dictionaries + 2021-07-01 0e0b80cb56 [dev.typeparams] cmd/compile/internal/types2: move Signature type decl into signature.go (cleanup) + 2021-07-01 1aadb18f83 [dev.typeparams] cmd/compile/internal/types2: move Struct type decl into struct.go (cleanup) + 2021-07-01 fac21803ce [dev.typeparams] cmd/compile/internal/types2: rename newTypeSet -> computeTypeSet + 2021-07-01 1eb756689c [dev.typeparams] cmd/compile/internal/types2: make Interface.obj a *TypeName + 2021-07-01 9cb1b0f50b [dev.typeparams] cmd/compile/internal/types2: delay interface check for type bounds + 2021-07-01 1cd505c353 [dev.typeparams] cmd/compile/internal/types2: "comparable" must not be visible before Go 1.18 + 2021-07-01 706c580ee1 [dev.typeparams] cmd/compile: simplify autotmpname + 2021-07-01 372b312735 [dev.typeparams] cmd/compile: refactor top-level typechecking in unified IR + 2021-06-30 ad7e5b219e [dev.typeparams] all: merge master (4711bf3) into dev.typeparams + 2021-06-30 8767b87ab5 [dev.typeparams] cmd/compile: functions to create GC shape types/names for a concrete type + 2021-06-30 b47cbc2ffe [dev.typeparams] cmd/compile/internal/types2: move newTypeSet function into typeset.go + 2021-06-30 f0206e3df2 [dev.typeparams] cmd/compile/internal/types2: move embedding positions from Checker to Interface + 2021-06-30 1ff43d1b17 [dev.typeparams] cmd/compile/internal/types2: remove unused *Checker arguments (cleanup) + 2021-06-30 4b5fdb0b7a [dev.typeparams] cmd/compile/internal/types2: introduce type set abstraction for interfaces + 2021-06-30 f503740ccf [dev.typeparams] cmd/compile: add derived-type dictionaries to unified IR + 2021-06-29 6a5f7e8498 [dev.typeparams] cmd/compile: use dictionary entries for more conversion cases + 2021-06-29 5fa6bbc669 [dev.typeparams] cmd/compile: clean up instantiation and dictionary naming + 2021-06-29 dfa8fd861c [dev.typeparams] cmd/compile: add a field (method) name for function in TestABIUtilsInterfaces + 2021-06-28 64e6c75924 [dev.typeparams] cmd/compile: port fix for issue46725 to transform.go + 2021-06-28 f99b3fe2ab [dev.typeparams] cmd/compile: move MethodValueWrapper to walk + 2021-06-28 a8861b907d [dev.typeparams] cmd/compile: port CL 330838 for -G=3 + 2021-06-27 20a04f6041 [dev.typeparams] cmd/compile: delay method value wrapper generation until walk + 2021-06-27 1b995f91a5 [dev.typeparams] cmd/compile: rename OCALLPART to OMETHVALUE + 2021-06-27 d44ed5d144 [dev.typeparams] cmd/compile: add method value wrappers to unified IR + 2021-06-26 3ea0fcfe15 [dev.typeparams] cmd/compile: do not skip TestUnifiedCompare in short mode + 2021-06-26 27e3b797bb [dev.typeparams] cmd/compile: remove OCALLMETH Fatals in SSA generation + 2021-06-26 0cf71f7f92 [dev.typeparams] cmd/compile: rewrite method calls during typecheck + 2021-06-26 180c338c68 [dev.typeparams] cmd/compile: restore check for OCALLMETH in walkCall + 2021-06-26 942bcc2d4f [dev.typeparams] cmd/compile: fix wrong AST generation in devirtualization + 2021-06-26 d417b8cf87 [dev.typeparams] cmd/compile: clarify comment about checking reflect.Method in usemethod + 2021-06-25 ed647b16d0 [dev.typeparams] cmd/compile: use Type.LinkString for map keys + 2021-06-25 942edc7502 [dev.typeparams] cmd/compile: rename types.Type.{Short,Long}String to {Link,Name}String + 2021-06-25 373ca3a846 Merge "[dev.typeparams] all: merge master (37f9a8f) into dev.typeparams" into dev.typeparams + 2021-06-25 1b60284c0a [dev.typeparams] cmd/compile: simplify variable capturing in unified IR + 2021-06-25 9fe7c38d3d [dev.typeparams] cmd/compile: fix TestUnifiedCompare + 2021-06-25 f4198f85d5 [dev.typeparams] cmd/compile: generate wrappers within unified IR + 2021-06-25 3f1a517a45 [dev.typeparams] cmd/compile: refactor "need to emit" logic for types + 2021-06-25 badb98364b [dev.typeparams] cmd/compile: switch CaptureVars to use syntax.Walk + 2021-06-25 ac2de11cfb [dev.typeparams] all: merge master (37f9a8f) into dev.typeparams + 2021-06-25 2493c72742 [dev.typeparams] cmd/compile: rewrite method call into method expression during escape analysis + 2021-06-25 f190a9280d [dev.typeparams] cmd/compile: simplify usemethod + 2021-06-25 aee209c044 [dev.typeparams] cmd/compile: catch another mis-used OCALLMETH in backend + 2021-06-24 75ad323773 [dev.typeparams] test: skip -G=3 testing under GOEXPERIMENT=unified + 2021-06-24 808dca3b2d [dev.typeparams] cmd/compile: suppress liveness diagnostics of wrappers + 2021-06-24 ddb09af1b8 [dev.typeparams] cmd/compile: add derived types and subdictionaries to dictionaries + 2021-06-24 df00abc61b [dev.typeparams] cmd/compile: skip escape analysis diagnostics for wrappers + 2021-06-24 b55cc6687d [dev.typeparams] cmd/compile: use r.hasTypeParams in typIdx + 2021-06-24 9bdbf73c98 [dev.typeparams] cmd/compile: simplify writer.collectDecls + 2021-06-23 ee4fc0c1bc [dev.typeparams] Fix issues related to dictionaries and method calls with embedded fields + 2021-06-23 8165256bc2 [dev.typeparams] cmd/compile/internal/syntax: go/ast-style walk API + 2021-06-23 a72a499c24 [dev.typeparams] cmd/compile: optimize wrapping of constant arguments + 2021-06-23 eb691fdd62 [dev.typeparams] cmd/compile: escape analysis of method expression calls + 2021-06-23 0a0e3a3dea [dev.typeparams] cmd/compile: move call logic from order.go to escape + 2021-06-23 574ec1c645 [dev.typeparams] cmd/compile: desugar ORECOVER into ORECOVERFP + 2021-06-23 9be8303df9 [dev.typeparams] cmd/compile: add ORECOVERFP, OGETCALLER{PC,SP} ops + 2021-06-23 70f4ab6565 [dev.typeparams] cmd/compile: remove SetClosureCalled(false) hacks + 2021-06-23 107b1fce64 [dev.typeparams] cmd/compile: explain why expandInline needed + 2021-06-23 99732b9070 [dev.typeparams] cmd/compile: refactor escape analysis of calls + 2021-06-23 1a445dab66 [dev.typeparams] cmd/compile: remove CallExpr.PreserveClosure + 2021-06-23 e59a19cceb [dev.typeparams] cmd/compile: simplify walkGoDefer + 2021-06-23 493e177639 [dev.typeparams] cmd/compile: allow typecheck of OCHECKNIL + 2021-06-23 c4e0c652fb [dev.typeparams] cmd/compile: refactor CaptureName + 2021-06-22 62095c66e0 [dev.typeparams] go/types: adjust logic for method expression arg naming + 2021-06-22 541612b974 [dev.typeparams] cmd/gofmt: remove typeparams guards + 2021-06-22 3e6219c6a9 [dev.typeparams] cmd/compile: split package escape into multiple files + 2021-06-22 077100dfcd [dev.typeparams] cmd/compile: remove special escape analysis tags + 2021-06-22 859d903b06 [dev.typeparams] cmd/compile: add -d=unifiedquirks for quirks mode + 2021-06-22 d626ba27bb [dev.typeparams] all: merge master (16e82be) into dev.typeparams + 2021-06-21 844c076359 [dev.typeparams] cmd/compile: simplify import* functions + 2021-06-21 e57da8e53c [dev.typeparams] cmd/compile: explain why reader.funcExt need to set n.Defn + 2021-06-21 3f7f72a258 [dev.typeparams] cmd/compile: fold reader checking type params logic to separate method + 2021-06-20 d24c90a153 [dev.typeparams] cmd/compile: explain how pkgReader.typIdx handles alias cyclic + 2021-06-18 3f7a3133da [dev.typeparams] cmd/compile: add "toolstash -cmp"-like test of -d=unified + 2021-06-18 e9c01f9804 [dev.typeparams] cmd/compile: add missing copy of Field.Embedded in type substituter. + 2021-06-18 6fa0437958 [dev.typeparams] cmd/compile: add documentation for unified IR pipeline + 2021-06-18 54fe57bc22 [dev.typeparams] cmd/compile: record writer's stack at export data sync points + 2021-06-18 78aa251ace [dev.typeparams] cmd/go: include new internal packages in TestNewReleaseRebuildsStalePackagesInGOPATH + 2021-06-18 2a7900762c [dev.typeparams] go/types: report better error for invalid untyped operation + 2021-06-18 90096f445e [dev.typeparams] cmd/compile/internal/syntax: convert (most) parser tests to new type set syntax + 2021-06-17 feec53c4e5 [dev.typeparams] cmd/compile: skip types2 GC test during bootstrapping + 2021-06-17 fb84d213a8 [dev.typeparams] reflect: support big endian architectures in callMethod + 2021-06-17 9f50d9a0b4 [dev.typeparams] internal/reflectlite: remove unused ptrSize + 2021-06-17 890a8407a9 [dev.typeparams] internal/reflectlite: use goarch.PtrSize instead of the duplicated ptrSize [generated] + 2021-06-17 bfd9b63f12 [dev.typeparams] reflect: delete unused ptrSize and PtrSize + 2021-06-17 95c104ee61 [dev.typeparams] reflect: use goarch.PtrSize instead of the duplicated ptrSize [generated] + 2021-06-17 2e600fb8b3 [dev.typeparams] runtime/internal/sys: remove unused Goarch* and Goos* constants + 2021-06-17 46e1e74a86 [dev.typeparams] runtime: replace Goarch* constants with internal/goarch versions [generated] + 2021-06-17 7b0e9cae66 [dev.typeparams] runtime: replace Goos* constants with internal/goos versions [generated] + 2021-06-17 81a6a4354b [dev.typeparams] internal/goarch,internal/goos: rename Goos and Goarch constants + 2021-06-17 33d1b82d16 [dev.typeparams] runtime/internal/sys: replace ArchFamily and constants with goarch + 2021-06-17 85b12a8563 [dev.typeparams] runtime,runtime/internal/sys: remove unused BigEndian + 2021-06-17 9a93072a07 [dev.typeparams] runtime/internal/sys: replace BigEndian with goarch.BigEndian [generated] + 2021-06-17 9c58e399a4 [dev.typeparams] runtime: fix import sort order [generated] + 2021-06-17 671954e72e [dev.typeparams] runtime/internal/sys: replace GOOS with goos.GOOS + 2021-06-17 5c028751bd [dev.typeparams] runtime/internal/sys: replace uses of GOARCH with goarch.GOARCH + 2021-06-17 6d89c90fb1 [dev.typeparams] runtime/internal/sys: remove unused PtrSize + 2021-06-17 6d85891b29 [dev.typeparams] runtime: replace uses of runtime/internal/sys.PtrSize with internal/goarch.PtrSize [generated] + 2021-06-17 122f5e16d6 [dev.typeparams] internal/goarch,internal/goos: explode runtime/internal/sys into pieces + 2021-06-17 804ecc2581 [dev.typeparams] all: add GOEXPERIMENT=unified knob + 2021-06-17 b14fd720a8 [dev.typeparams] cmd/compile: make types2 report better error for invalid untyped operation + 2021-06-17 8115ae198d [dev.typeparams] go/types: disallow ~T where T is a defined type or an interface + 2021-06-17 6237e441bc [dev.typeparams] go/types: disallow type list handling + 2021-06-17 6e50f4f111 [dev.typeparams] go/types: convert testdata/check tests to type set syntax + 2021-06-17 b6fc4d01a8 [dev.typeparams] go/types: convert testdata/fixedbugs tests to type set sytax + 2021-06-17 795f4475e5 [dev.typeparams] go/types: convert testdata/examples tests to type set sytax + 2021-06-17 8e14a9cf04 [dev.typeparams] go/types: eliminate need for unpack and asUnion functions + 2021-06-17 aecfd5c29e [dev.typeparams] go/types: clean up type set/union intersection + 2021-06-17 c7a460526e [dev.typeparams] go/types: replace Sum type with Union type + 2021-06-17 e7451f6616 [dev.typeparams] go/types: accept embedded interface elements + 2021-06-17 54f854fb41 [dev.typeparams] go/parser: accept embedded type literals + 2021-06-17 ab4b3c4b15 [dev.typeparams] go/parser: accept "~" and "|" interface elements + 2021-06-17 7c5d7a4caf [dev.typeparams] go/token, go/scanner: add the "~" operator + 2021-06-17 ad59efb027 [dev.typeparams] go/ast: remove the typeparams build constraint + 2021-06-16 1ba2074440 [dev.typeparams] cmd/compile/internal/types2: support local defined types + 2021-06-16 dd95a4e3db [dev.typeparams] cmd/compile: simplify SSA devirtualization + 2021-06-16 132ea56d29 [dev.typeparams] cmd/compile: fix crawling of embeddable types + 2021-06-16 8f95eaddd3 [dev.typeparams] cmd/compile: fix missing sync implicit types + 2021-06-16 a4121d7dd6 [dev.typeparams] Revert "[dev.typeparams] runtime: make deferproc take a func() argument" + 2021-06-16 4d6f9d60cf [dev.typeparams] all: merge master (785a8f6) into dev.typeparams + 2021-06-16 ee0420d3b5 [dev.typeparams] cmd/compile: factor out implicit/explicit handling + 2021-06-15 cf1ae5fc36 [dev.typeparams] cmd/compile: add -d=unified flag to enable unified IR + 2021-06-15 79cd1687e6 [dev.typeparams] cmd/compile: unified IR construction + 2021-06-14 ea438bda85 [dev.typeparams] all: merge master (fdab5be) into dev.typeparams + 2021-06-13 8eeaf961c5 [dev.typeparams] cmd/compile: move //go:embed -lang check to noder + 2021-06-12 f1b1c2f67f [dev.typeparams] cmd/compile: simplify NewClosureFunc + 2021-06-12 db7c868307 [dev.typeparams] test: add string quoting support to test/run.go + 2021-06-12 0132b91127 [dev.typeparams] cmd/compile: refactor closure construction + 2021-06-12 8f00eb0099 [dev.typeparams] cmd/compile: avoid ir.DeepCopy in noder.constDecl + 2021-06-12 2954f11ead [dev.typeparams] cmd/compile: scaffolding for export data experiments + 2021-06-11 c93d5d1a52 [dev.typeparams] all: always enable regabig on AMD64 + 2021-06-11 2fe324858b [dev.typeparams] internal/buildcfg: always enable regabiwrappers on AMD64 + 2021-06-11 e0e9fb8aff [dev.typeparams] runtime: simplify defer record allocation + 2021-06-11 4468e1cfb9 [dev.typeparams] runtime: allow newproc split stack + 2021-06-11 ef6c5be160 [dev.typeparams] cmd/compile: fix wrapper generation for imported generics + 2021-06-11 4a735ce068 [dev.typeparams] cmd/compile: add "check" field to noder.gcimports + 2021-06-11 61888d47c4 [dev.typeparams] cmd/compile: allow embedding Type.Vargen into Sym.Name + 2021-06-11 62e32dd386 [dev.typeparams] cmd/compile: extract SetBaseTypeIndex function + 2021-06-11 18788245ea [dev.typeparams] cmd/compile: add ir.TypeNodeAt + 2021-06-09 b20747334a [dev.typeparams] cmd/compile, runtime: simplify opendefer metadata + 2021-06-09 c0a86c10f1 [dev.typeparams] cmd/compile: simplify openDeferSave + 2021-06-08 74b0b2772a [dev.typeparams] cmd/compile, runtime: remove _defer.siz field + 2021-06-08 b80a4c56f0 [dev.typeparams] runtime: allow deferproc split stack + 2021-06-08 83da32749c [dev.typeparams] runtime: make deferproc take a func() argument + 2021-06-08 8e5304f729 [dev.typeparams] cmd/compile, runtime: remove the siz argument of newproc/deferproc + 2021-06-08 00d01b5786 [dev.typeparams] runtime: remove tracebackdefers + 2021-06-08 12b37b713f [dev.typeparams] runtime: remove variadic defer/go calls + 2021-06-08 5b350505da [dev.typeparams] cmd/compile: remove variadic defer calls + 2021-06-08 a9de78ac88 [dev.typeparams] cmd/compile, runtime: always enable defer/go wrapping + 2021-06-08 e58bddde70 [dev.typeparams] internal/goexperiment: regenerate generated files + 2021-06-08 0c40cb4a07 [dev.typeparams] cmd/compile/internal/types2: provide valid signature in errors involving method expressions + 2021-06-07 74d46381b2 [dev.typeparams] cmd/compile: do extra markObjects during iexport to deal with generics + 2021-06-07 ccfb0ce8df [dev.typeparams] cmd/compile: convert generic values to interface type using dictionary + 2021-06-07 cf4b6dc48e [dev.typeparams] cmd/compile: allow conversions from type parameter to interface + 2021-06-07 bcb3927cb5 [dev.typeparams] cmd/compile: introduce IsTypeParam() helper + 2021-06-07 f0c97219a3 Merge "[dev.typeparams] all: merge master (8212707) into dev.typeparams" into dev.typeparams + 2021-06-07 201d55e637 [dev.typeparams] cmd/compile: create .dict Param in the package of the instantiated function + 2021-06-07 0e39cdc0e9 [dev.typeparams] all: merge master (8212707) into dev.typeparams + 2021-06-07 7c8a5be2d6 [dev.typeparams] go/types: factor out constraint satisfaction check + 2021-06-07 7497e57a39 [dev.typeparams] go/types: simplify Interface accessors + 2021-06-07 2f26adc232 [dev.typeparams] go/types: re-use existing code for Interface.Complete + 2021-06-07 1395952075 [dev.typeparams] go/types: add Named.SetTParams and Named.Orig methods + 2021-06-07 991dca0112 [dev.typeparams] go/types: move signature checking into separate file + 2021-06-06 c23294d6b3 [dev.typeparams] cmd/compile/internal/types2: return Universe for ((*Package)(nil)).Scope() + 2021-06-05 a5be3eaee2 [dev.typeparams] cmd/compile: refactor export writing + 2021-06-05 4c072c94dc [dev.typeparams] cmd/compile: refactor import reading + 2021-06-05 4e001a8d9e [dev.typeparams] runtime/race: make test compatible with types2 + 2021-06-05 246a5570be [dev.typeparams] cmd/compile: rename (types2.Inferred.)Targs to TArgs + 2021-06-05 692399fbaa [dev.typeparams] cmd/compile/internal/syntax: not all index expressions can be instantiated types + 2021-06-04 a94e4f5a85 [dev.typeparams] cmd/compile: point StructKeyExpr at the types.Field + 2021-06-04 bad388744b [dev.typeparams] cmd/compile: handle dictionaries for top-level instantiations + 2021-06-04 de61465156 [dev.typeparams] cmd/compile: allow inlining in instantiated functions + 2021-06-04 4cf7f5f694 [dev.typeparams] test: test regabidefers in live.go + 2021-06-04 3298c749ac [dev.typeparams] runtime: undo go'd closure argument workaround + 2021-06-04 46beeed0ac [dev.typeparams] cmd/compile: allow go'd closure to escape when compiling runtime + 2021-06-04 8e6dfe1b31 [dev.typeparams] cmd/compile: export/import of recursive generic types. + 2021-06-04 93a886a165 [dev.typeparams] go/types: move struct checking into separate file + 2021-06-04 ffc74ad5d3 [dev.typeparams] go/types: move interface checking into separate file + 2021-06-04 090a17c998 [dev.typeparams] go/types: use correct type parameter list in missingMethod + 2021-06-04 62c40878e4 [dev.typeparams] go/types: better recv Var for method expressions + 2021-06-04 e32fab145b [dev.typeparams] go/types: fix panic with nil package name + 2021-06-04 cd6e9df446 [dev.typeparams] go/types: print "incomplete" for interfaces in debug mode only + 2021-06-04 655246f99a [dev.typeparams] go/types: make TestManual work for directories + 2021-06-04 d7592ab424 [dev.typeparams] go/types: implement types.Instantiate + 2021-06-04 410fa4c75b [dev.typeparams] go/types: rename Inferred.Targs to TArgs + 2021-06-04 298149a915 [dev.typeparams] go/types: use Checker-provided type parameter IDs when possible + 2021-06-04 2175e2f573 [dev.typeparams] cmd/compile: lazy import resolution for types2 + 2021-06-03 4d2b528795 [dev.typeparams] internal/buildcfg: turn on register ABI by default on ARM64 + 2021-06-03 5f034f9b46 [dev.typeparams] internal/buildcfg: turn on regabireflect by default on ARM64 + 2021-06-03 026480d06b [dev.typeparams] cmd/compile: allow nil Syms in Sym.Less + 2021-06-03 a2d6a2caeb [dev.typeparams] internal/buildcfg: turn on regabiwrappers by default on ARM64 + 2021-06-03 55b4310acd [dev.typeparams] runtime: crash the GC at clobberdead pointer on ARM64 + 2021-06-03 6b1e4430bb [dev.typeparams] cmd/compile: implement clobberdead mode on ARM64 + 2021-06-03 1c947e4f31 [dev.typeparams] cmd/compile: properly copy tilde value for unions in types2-to-types1 conversion + 2021-06-03 e9ba0750b6 [dev.typeparams] reflect: guard abi_test.go with regabiargs build tag + 2021-06-03 28bd325e41 [dev.typeparams] runtime: use ABIInternal callbackWrap in callbackasm1 on ARM64 + 2021-06-03 3de4986852 [dev.typeparams] runtime: call cgocallbackg indirectly on ARM64 + 2021-06-03 5a40fab19f [dev.typeparams] runtime, internal/bytealg: port performance-critical functions to register ABI on ARM64 + 2021-06-03 370ff5ff96 [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax + 2021-06-03 5a008a92e8 [dev.typeparams] internal/bytealg: call memeqbody directly in memequal_varlen on ARM64 + 2021-06-03 165d39a1d4 [dev.typeparams] test: adjust codegen test for register ABI on ARM64 + 2021-06-03 b5f37faf3b [dev.typeparams] cmd/internal/goobj: add duffzero/duffcopy to builtin list + 2021-06-03 9c054f4137 [dev.typeparams] cmd/link: take function address in assembly in TestFuncAlign + 2021-06-03 95c618e99a [dev.typeparams] cmd/compile/internal/types2: add Config.AllowTypeLists to control type list handling + 2021-06-03 10d6b36ca3 [dev.typeparams] cmd/compile/internal/types2: disallow ~T where T is a defined type or an interface + 2021-06-02 8cdce85bdf [dev.typeparams] cmd/compile/internal/types2: convert testdata/check tests to type set sytax + 2021-06-02 c790964ae4 [dev.typeparams] cmd/compile/internal/types2: convert testdata/fixedbugs tests to type set sytax + 2021-06-02 9a99e728fe [dev.typeparams] cmd/compile/internal/types2: convert testdata/examples tests to type set sytax + 2021-06-02 d36b7d7bdd [dev.typeparams] cmd/compile/internal/importer: review of gcimporter_test.go + 2021-06-02 3c1d502a19 [dev.typeparams] cmd/compile/internal/types2: eliminate need for unpack and asUnion functions + 2021-06-02 848b58e473 [dev.typeparams] cmd/compile/internal/types2: clean up type set/union intersection + 2021-06-02 97cb0113a3 [dev.typeparams] cmd/compile: fix export/import of constants with typeparam type + 2021-06-02 6b1cdeaef3 [dev.typeparams] cmd/link: include "go build" output in test logs + 2021-06-02 c7b9811581 [dev.typeparams] cmd/compile/internal/importer: review of gcimporter.go + 2021-06-02 498a48327f [dev.typeparams] cmd/compile: sort iface fields before expansion + 2021-06-02 cc52fdd1f3 [dev.typeparams] cmd/compile/internal/importer: review of exportdata.go + 2021-06-02 8c5c5a9e69 [dev.typeparams] cmd/compile/internal/importer: review of support.go + 2021-06-02 589e32dbdf [dev.typeparams] cmd/compile/internal/types2: replace Sum type with Union type + 2021-06-02 7b876def6c [dev.typeparams] cmd/compile: add dictionary argument to generic functions + 2021-06-02 aa9cfdf775 [dev.typeparams] runtime: update ABIInternal assembly with register ABI on ARM64 + 2021-06-02 0c123cdf8b [dev.typeparams] reflect: implement register ABI for MakeFunc etc. on ARM64 + 2021-06-02 2e4b79949f [dev.typeparams] runtime: implement register ABI for reflectcall on ARM64 + 2021-06-02 dc2cb529a8 [dev.typeparams] runtime: mark assembly functions called directly from compiler ABIInternal + 2021-06-02 d2b435117d test: fix error check messages for 2 types2 tests + 2021-06-02 b1f48e8add [dev.typeparams] cmd/compile: fix formatting + 2021-06-01 58ad36b359 [dev.typeparams] internal/buildcfg: allow regabi GOEXPERIMENTs on ARM64 + 2021-06-01 c3639918d1 [dev.typeparams] internal/abi: define ARM64 register ABI constants + 2021-06-01 6633dc8b09 [dev.typeparams] reflect: call ABI0 spill/unspill functions on AMD64 + 2021-06-01 e4003463ff [dev.typeparams] cmd/compile: match register-ABI version of memmove call on ARM64 + 2021-06-01 8e7abefdaa [dev.typeparams] cmd/compile: update ARM64 CALL* ops for register ABI + 2021-06-01 c9d1a2bdd2 [dev.typeparams] all: merge master (2725522) into dev.typeparams + 2021-06-01 2580e9a160 [dev.typeparams] cmd/compile: refactor noder/irgen helpers + 2021-06-01 4b10e4c547 [dev.typeparams] cmd/compile: handle ONONAME in subster.node + 2021-05-31 f32f4f58d9 [dev.typeparams] cmd/compile: simplify formatting of defined types + 2021-05-27 22f5ece3b1 [dev.typeparams] cmd/compile/internal/noder: refactor irgen import handling + 2021-05-27 417955d151 [dev.typeparams] cmd/compile/internal/inline: refactor mkinlcall + 2021-05-27 88583a2a66 [dev.typeparams] test: trim list of expected -G=3 failures + 2021-05-27 ea522bc546 [dev.typeparams] cmd/compile: add and use ir.RawOrigExpr + 2021-05-27 de5d1aca5e [dev.typeparams] cmd/compile: tweaks to match types2 + 2021-05-27 c2c1b53b39 [dev.typeparams] cmd/compile: use old export format if not compiling with generics + 2021-05-27 8c99e5db43 [dev.typeparams] cmd/compile/internal/types2: ensure that Named.check is nilled out once it is expanded + 2021-05-27 963f33b03b [dev.typeparams] cmd/compile: enable register args on ARM64 + 2021-05-27 06df0ee7fa [dev.typeparams] cmd/compile: add arg/result register load/spill code on ARM64 + 2021-05-26 1ec056244e [dev.typeparams] cmd/compile: inlining tweaks for toolstash + 2021-05-26 6da1661371 [dev.typeparams] cmd/compile: simplify inlining variadic calls + 2021-05-26 e99e9a6e01 [dev.typeparams] cmd/compile: simplify ~r/~b naming + 2021-05-26 4c68edd1fe [dev.typeparams] cmd/compile: add morestack arg spilling code on ARM64 + 2021-05-26 a4b2a04bc5 [dev.typeparams] cmd/internal/obj/arm64: use ABI-compatible registers in function prologue + 2021-05-26 4bb927f82e [dev.typeparams] cmd/compile: define ARM64 parameter registers + 2021-05-26 cf23daeda3 [dev.typeparams] cmd/compile: do not schedule in-register args late, even for block control + 2021-05-26 4ed6317e73 [dev.typeparams] cmd/compile: always generate (*T).M wrappers for instantiated methods + 2021-05-26 b7f7d1cd7b [dev.typeparams] cmd/compile: get type aliases working with generic types + 2021-05-26 95748d1b74 [dev.typeparams] cmd/compile: avoid some redundant type construction + 2021-05-26 fd54ae8b0c [dev.typeparams] cmd/compile: adding union support in types1 + 2021-05-25 6c9e1c58bc [dev.typeparams] test: fix and update run.go's generics testing + 2021-05-25 5c1e119d48 [dev.typeparams] all: merge master (f22ec51) into dev.typeparams + 2021-05-24 155dc0e541 [dev.typeparams] cmd/compile/internal/types2: factor out constraint satisfaction check + 2021-05-24 5770d7a637 [dev.typeparams] cmd/compile/internal/types2: accept embedded interface elements + 2021-05-24 cc7ceea585 [dev.typeparams] cmd/compile/internal/types2: simplify Interface accessors + 2021-05-24 1608577e05 [dev.typeparams] cmd/compile/internal/types2: re-use existing code for Interface.Complete + 2021-05-24 d48f6d9f6f [dev.typeparams] Don't check typecheck(3) on transform, so no need to export/import it + 2021-05-24 4c50721cda [dev.typeparams] cmd/compile: Fix handling of Name nodes during stenciling + 2021-05-24 dcaf785add [dev.typeparams] internal/buildcfg: enable defer/go wrapping everywhere + 2021-05-24 f642742678 [dev.typeparams] reflect: use internal/abi.FuncPCABI0 to take address of assembly functions + 2021-05-24 e0844acfc8 [dev.typeparams] runtime/pprof: replace funcPC with internal/abi.FuncPCABIInternal + 2021-05-24 ae26b45113 [dev.typeparams] cmd/compile/abi-internal.md: specify ARM64 register-based ABI + 2021-05-24 b18b2d372e [dev.typeparams] cmd/compile: fix case where we were copying a raw Node + 2021-05-21 5b1120fac7 [dev.typeparams] cmd/compile: fix handling of Nname field in (*subster).tstruct. + 2021-05-21 8d2b4cb6cc [dev.typeparams] cmd/compile: fixing import of comm clauses/closures in generic functions + 2021-05-21 626e89c261 [dev.typeparams] runtime: replace funcPC with internal/abi.FuncPCABIInternal + 2021-05-21 6a81e063dd [dev.typeparams] runtime: fix misuse of funcPC + 2021-05-21 7d928460a1 [dev.typeparams] runtime: use internal/abi.FuncPCABI0 to reference ABI0 assembly symbols + 2021-05-21 0e0a1f94f3 [dev.typeparams] runtime: use ABI0 handler addresses on Windows/ARM64 + 2021-05-21 fb42fb705d [dev.typeparams] runtime: use internal/abi.FuncPCABI0 to take address of assembly functions + 2021-05-21 21db1d193c [dev.typeparams] runtime: fix newproc arg size on ARM + 2021-05-21 b1a398cf0f [dev.typeparams] cmd/compile: add import/export of calls to builtin functions + 2021-05-21 ccbfbb1c33 [dev.typeparams] cmd/compile: export OFUNCINST and OSELRECV2 nodes (for generic functions) + 2021-05-21 243076da64 [dev.typeparams] cmd/compile/internal/types2: move signature checking into separate file + 2021-05-21 cfe0250497 [dev.typeparams] cmd/compile/internal/types2: move struct checking into separate file + 2021-05-21 211244e172 [dev.typeparams] cmd/compile/internal/types2: move interface checking into separate file + 2021-05-21 7b3ee6102d [dev.typeparams] cmd/compile: move to new export version, keep reading previous version + 2021-05-21 15ad61aff5 [dev.typeparams] cmd/compile: get export/import of generic types & functions working + 2021-05-20 468efd5e2f [dev.typeparams] cmd/compile: change method instantiations back to being functions + 2021-05-20 382c5dd5f7 [dev.typeparams] internal/buildcfg: turn on register ABI on all AMD64 platforms + 2021-05-20 240d6d00ca [dev.typeparams] cmd/link: mangle symbol ABI name on Plan 9 + 2021-05-20 ed2001232a [dev.typeparams] runtime: use internal/abi.FuncPCABI0 for sigtramp PC on Plan 9 + 2021-05-20 02117775d1 [dev.typeparams] cmd/compile, runtime: do not zero X15 on Plan 9 + 2021-05-20 a5cd89b8c3 [dev.typeparams] runtime: use internal/abi.FuncPCABI0 and cgo_unsafe_args for Solaris syscall wrappers + 2021-05-19 6bdfff112f [dev.typeparams] cmd/compile/internal/types2: use correct type parameter list in missingMethod + 2021-05-19 eff66248ea [dev.typeparams] cmd/compile/internal/types2: implement package height + 2021-05-19 3f6f12972b [dev.typeparams] runtime: use internal/abi.FuncPCABI0 for sigtramp PC on DragonflyBSD + 2021-05-19 b69347d24a [dev.typeparams] cmd/compile: simplify tparam's type + 2021-05-19 701bd60646 [dev.typeparams] cmd/compile: simplify targ's type + 2021-05-19 c2966ae272 [dev.typeparams] cmd/compile/internal/ir: more position details in dump + 2021-05-19 fb79f6955e [dev.typeparams] cmd/compile/internal/importer: implement position reading + 2021-05-19 c92ae885d9 [dev.typeparams] cmd/compile/internal/types2: better recv Var for method expressions + 2021-05-19 90b6e72605 [dev.typeparams] cmd/compile/internal/types2: tweak anonymous parameter position + 2021-05-19 fc9e64cc98 [dev.typeparams] cmd/compile/internal/types2: fix types2 panic + 2021-05-19 c81562d99f [dev.typeparams] test: update regress tests for types2 + 2021-05-19 81b22480cf [dev.typeparams] cmd/compile/internal/syntax: accept embedded type literals + 2021-05-18 f3fc8b5779 [dev.typeparams] cmd/compile: simplify type alias handling for export + 2021-05-18 140cd7c1d3 [dev.typeparams] runtime: use internal/abi.FuncPCABI0 for syscall wrappers on OpenBSD + 2021-05-18 bbc0059b03 [dev.typeparams] test: run more tests with -G=3 + 2021-05-18 f208f1ac99 [dev.typeparams] cmd/compile/internal/ir: more useful Fatalfs + 2021-05-18 c7dd3e305d [dev.typeparams] all: merge master (690a8c3) into dev.typeparams + 2021-05-18 077f03f4d8 [dev.typeparams] runtime: use internal/abi.FuncPCABI0 for sigtramp PC on FreeBSD + 2021-05-17 f39200b037 [dev.typeparams] go/constant: implement Kind.String + 2021-05-14 0d1e293b23 [dev.typeparams] cmd/compile/internal/types2: print "incomplete" for interfaces in debug mode only + 2021-05-14 03ed590e51 [dev.typeparams] cmd/compile/internal/types2: use Checker-provided type parameter IDs when possible + 2021-05-13 c3fa51c9a2 cmd/compile: changed representation of typeparam bound in types1 + 2021-05-13 9daf3cca82 [dev.typeparams] cmd/compile: keep instantiated method as a method, rather than converting to function + 2021-05-12 04f65d394c [dev.typeparams] cmd/compile: fix use of method values with stenciled methods + 2021-05-11 d2b3efcb90 [dev.typeparams] all: merge master (9b84814) into dev.typeparams Updates #47351. Change-Id: Ia8a78ec0d91f11adb533a4da7047b4c05c2f0ea0
2 parents 46fd547 + 4d3cc84 commit 3601aed

File tree

924 files changed

+37250
-17414
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

924 files changed

+37250
-17414
lines changed

misc/cgo/errors/testdata/err2.go

+10-2
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,18 @@ func main() {
9191

9292
// issue 26745
9393
_ = func(i int) int {
94-
return C.i + 1 // ERROR HERE: 14
94+
// typecheck reports at column 14 ('+'), but types2 reports at
95+
// column 10 ('C').
96+
// TODO(mdempsky): Investigate why, and see if types2 can be
97+
// updated to match typecheck behavior.
98+
return C.i + 1 // ERROR HERE: \b(10|14)\b
9599
}
96100
_ = func(i int) {
97-
C.fi(i) // ERROR HERE: 7
101+
// typecheck reports at column 7 ('('), but types2 reports at
102+
// column 8 ('i'). The types2 position is more correct, but
103+
// updating typecheck here is fundamentally challenging because of
104+
// IR limitations.
105+
C.fi(i) // ERROR HERE: \b(7|8)\b
98106
}
99107

100108
C.fi = C.fi // ERROR HERE

src/cmd/compile/abi-internal.md

+122
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,128 @@ control bits specified by the ELF AMD64 ABI.
505505

506506
The x87 floating-point control word is not used by Go on amd64.
507507

508+
### arm64 architecture
509+
510+
The arm64 architecture uses R0 – R15 for integer arguments and results.
511+
512+
It uses F0 – F15 for floating-point arguments and results.
513+
514+
*Rationale*: 16 integer registers and 16 floating-point registers are
515+
more than enough for passing arguments and results for practically all
516+
functions (see Appendix). While there are more registers available,
517+
using more registers provides little benefit. Additionally, it will add
518+
overhead on code paths where the number of arguments are not statically
519+
known (e.g. reflect call), and will consume more stack space when there
520+
is only limited stack space available to fit in the nosplit limit.
521+
522+
Registers R16 and R17 are permanent scratch registers. They are also
523+
used as scratch registers by the linker (Go linker and external
524+
linker) in trampolines.
525+
526+
Register R18 is reserved and never used. It is reserved for the OS
527+
on some platforms (e.g. macOS).
528+
529+
Registers R19 – R25 are permanent scratch registers. In addition,
530+
R27 is a permanent scratch register used by the assembler when
531+
expanding instructions.
532+
533+
Floating-point registers F16 – F31 are also permanent scratch
534+
registers.
535+
536+
Special-purpose registers are as follows:
537+
538+
| Register | Call meaning | Return meaning | Body meaning |
539+
| --- | --- | --- | --- |
540+
| RSP | Stack pointer | Same | Same |
541+
| R30 | Link register | Same | Scratch (non-leaf functions) |
542+
| R29 | Frame pointer | Same | Same |
543+
| R28 | Current goroutine | Same | Same |
544+
| R27 | Scratch | Scratch | Scratch |
545+
| R26 | Closure context pointer | Scratch | Scratch |
546+
| R18 | Reserved (not used) | Same | Same |
547+
| ZR | Zero value | Same | Same |
548+
549+
*Rationale*: These register meanings are compatible with Go’s
550+
stack-based calling convention.
551+
552+
*Rationale*: The link register, R30, holds the function return
553+
address at the function entry. For functions that have frames
554+
(including most non-leaf functions), R30 is saved to stack in the
555+
function prologue and restored in the epilogue. Within the function
556+
body, R30 can be used as a scratch register.
557+
558+
*Implementation note*: Registers with fixed meaning at calls but not
559+
in function bodies must be initialized by "injected" calls such as
560+
signal-based panics.
561+
562+
#### Stack layout
563+
564+
The stack pointer, RSP, grows down and is always aligned to 16 bytes.
565+
566+
*Rationale*: The arm64 architecture requires the stack pointer to be
567+
16-byte aligned.
568+
569+
A function's stack frame, after the frame is created, is laid out as
570+
follows:
571+
572+
+------------------------------+
573+
| ... locals ... |
574+
| ... outgoing arguments ... |
575+
| return PC | ← RSP points to
576+
| frame pointer on entry |
577+
+------------------------------+ ↓ lower addresses
578+
579+
The "return PC" is loaded to the link register, R30, as part of the
580+
arm64 `CALL` operation.
581+
582+
On entry, a function subtracts from RSP to open its stack frame, and
583+
saves the values of R30 and R29 at the bottom of the frame.
584+
Specifically, R30 is saved at 0(RSP) and R29 is saved at -8(RSP),
585+
after RSP is updated.
586+
587+
A leaf function that does not require any stack space may omit the
588+
saved R30 and R29.
589+
590+
The Go ABI's use of R29 as a frame pointer register is compatible with
591+
arm64 architecture requirement so that Go can inter-operate with platform
592+
debuggers and profilers.
593+
594+
This stack layout is used by both register-based (ABIInternal) and
595+
stack-based (ABI0) calling conventions.
596+
597+
#### Flags
598+
599+
The arithmetic status flags (NZCV) are treated like scratch registers
600+
and not preserved across calls.
601+
All other bits in PSTATE are system flags and are not modified by Go.
602+
603+
The floating-point status register (FPSR) is treated like scratch
604+
registers and not preserved across calls.
605+
606+
At calls, the floating-point control register (FPCR) bits are always
607+
set as follows:
608+
609+
| Flag | Bit | Value | Meaning |
610+
| --- | --- | --- | --- |
611+
| DN | 25 | 0 | Propagate NaN operands |
612+
| FZ | 24 | 0 | Do not flush to zero |
613+
| RC | 23/22 | 0 (RN) | Round to nearest, choose even if tied |
614+
| IDE | 15 | 0 | Denormal operations trap disabled |
615+
| IXE | 12 | 0 | Inexact trap disabled |
616+
| UFE | 11 | 0 | Underflow trap disabled |
617+
| OFE | 10 | 0 | Overflow trap disabled |
618+
| DZE | 9 | 0 | Divide-by-zero trap disabled |
619+
| IOE | 8 | 0 | Invalid operations trap disabled |
620+
| NEP | 2 | 0 | Scalar operations do not affect higher elements in vector registers |
621+
| AH | 1 | 0 | No alternate handling of de-normal inputs |
622+
| FIZ | 0 | 0 | Do not zero de-normals |
623+
624+
*Rationale*: Having a fixed FPCR control configuration allows Go
625+
functions to use floating-point and vector (SIMD) operations without
626+
modifying or saving the FPCR.
627+
Functions are allowed to modify it between calls (as long as they
628+
restore it), but as of this writing Go code never does.
629+
508630
## Future directions
509631

510632
### Spill path improvements

src/cmd/compile/internal/amd64/galign.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,10 @@ func Init(arch *ssagen.ArchInfo) {
1818

1919
arch.ZeroRange = zerorange
2020
arch.Ginsnop = ginsnop
21-
arch.Ginsnopdefer = ginsnop
2221

2322
arch.SSAMarkMoves = ssaMarkMoves
2423
arch.SSAGenValue = ssaGenValue
2524
arch.SSAGenBlock = ssaGenBlock
26-
arch.LoadRegResults = loadRegResults
25+
arch.LoadRegResult = loadRegResult
2726
arch.SpillArgReg = spillArgReg
2827
}

src/cmd/compile/internal/amd64/ggen.go

-10
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ func dzDI(b int64) int64 {
5757
func zerorange(pp *objw.Progs, p *obj.Prog, off, cnt int64, state *uint32) *obj.Prog {
5858
const (
5959
r13 = 1 << iota // if R13 is already zeroed.
60-
x15 // if X15 is already zeroed. Note: in new ABI, X15 is always zero.
6160
)
6261

6362
if cnt == 0 {
@@ -85,11 +84,6 @@ func zerorange(pp *objw.Progs, p *obj.Prog, off, cnt int64, state *uint32) *obj.
8584
}
8685
p = pp.Append(p, x86.AMOVQ, obj.TYPE_REG, x86.REG_R13, 0, obj.TYPE_MEM, x86.REG_SP, off)
8786
} else if !isPlan9 && cnt <= int64(8*types.RegSize) {
88-
if !buildcfg.Experiment.RegabiG && *state&x15 == 0 {
89-
p = pp.Append(p, x86.AXORPS, obj.TYPE_REG, x86.REG_X15, 0, obj.TYPE_REG, x86.REG_X15, 0)
90-
*state |= x15
91-
}
92-
9387
for i := int64(0); i < cnt/16; i++ {
9488
p = pp.Append(p, x86.AMOVUPS, obj.TYPE_REG, x86.REG_X15, 0, obj.TYPE_MEM, x86.REG_SP, off+i*16)
9589
}
@@ -98,10 +92,6 @@ func zerorange(pp *objw.Progs, p *obj.Prog, off, cnt int64, state *uint32) *obj.
9892
p = pp.Append(p, x86.AMOVUPS, obj.TYPE_REG, x86.REG_X15, 0, obj.TYPE_MEM, x86.REG_SP, off+cnt-int64(16))
9993
}
10094
} else if !isPlan9 && (cnt <= int64(128*types.RegSize)) {
101-
if !buildcfg.Experiment.RegabiG && *state&x15 == 0 {
102-
p = pp.Append(p, x86.AXORPS, obj.TYPE_REG, x86.REG_X15, 0, obj.TYPE_REG, x86.REG_X15, 0)
103-
*state |= x15
104-
}
10595
// Save DI to r12. With the amd64 Go register abi, DI can contain
10696
// an incoming parameter, whereas R12 is always scratch.
10797
p = pp.Append(p, x86.AMOVQ, obj.TYPE_REG, x86.REG_DI, 0, obj.TYPE_REG, x86.REG_R12, 0)

src/cmd/compile/internal/amd64/ssa.go

+24-23
Original file line numberDiff line numberDiff line change
@@ -823,7 +823,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
823823
p.To.Reg = v.Args[0].Reg()
824824
ssagen.AddAux2(&p.To, v, sc.Off64())
825825
case ssa.OpAMD64MOVOstorezero:
826-
if !buildcfg.Experiment.RegabiG || s.ABI != obj.ABIInternal {
826+
if s.ABI != obj.ABIInternal {
827827
// zero X15 manually
828828
opregreg(s, x86.AXORPS, x86.REG_X15, x86.REG_X15)
829829
}
@@ -914,7 +914,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
914914
p.To.Type = obj.TYPE_REG
915915
p.To.Reg = v.Reg()
916916
case ssa.OpAMD64DUFFZERO:
917-
if !buildcfg.Experiment.RegabiG || s.ABI != obj.ABIInternal {
917+
if s.ABI != obj.ABIInternal {
918918
// zero X15 manually
919919
opregreg(s, x86.AXORPS, x86.REG_X15, x86.REG_X15)
920920
}
@@ -997,22 +997,26 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
997997
// Closure pointer is DX.
998998
ssagen.CheckLoweredGetClosurePtr(v)
999999
case ssa.OpAMD64LoweredGetG:
1000-
if buildcfg.Experiment.RegabiG && s.ABI == obj.ABIInternal {
1000+
if s.ABI == obj.ABIInternal {
10011001
v.Fatalf("LoweredGetG should not appear in ABIInternal")
10021002
}
10031003
r := v.Reg()
10041004
getgFromTLS(s, r)
10051005
case ssa.OpAMD64CALLstatic:
1006-
if buildcfg.Experiment.RegabiG && s.ABI == obj.ABI0 && v.Aux.(*ssa.AuxCall).Fn.ABI() == obj.ABIInternal {
1006+
if s.ABI == obj.ABI0 && v.Aux.(*ssa.AuxCall).Fn.ABI() == obj.ABIInternal {
10071007
// zeroing X15 when entering ABIInternal from ABI0
1008-
opregreg(s, x86.AXORPS, x86.REG_X15, x86.REG_X15)
1008+
if buildcfg.GOOS != "plan9" { // do not use SSE on Plan 9
1009+
opregreg(s, x86.AXORPS, x86.REG_X15, x86.REG_X15)
1010+
}
10091011
// set G register from TLS
10101012
getgFromTLS(s, x86.REG_R14)
10111013
}
10121014
s.Call(v)
1013-
if buildcfg.Experiment.RegabiG && s.ABI == obj.ABIInternal && v.Aux.(*ssa.AuxCall).Fn.ABI() == obj.ABI0 {
1015+
if s.ABI == obj.ABIInternal && v.Aux.(*ssa.AuxCall).Fn.ABI() == obj.ABI0 {
10141016
// zeroing X15 when entering ABIInternal from ABI0
1015-
opregreg(s, x86.AXORPS, x86.REG_X15, x86.REG_X15)
1017+
if buildcfg.GOOS != "plan9" { // do not use SSE on Plan 9
1018+
opregreg(s, x86.AXORPS, x86.REG_X15, x86.REG_X15)
1019+
}
10161020
// set G register from TLS
10171021
getgFromTLS(s, x86.REG_R14)
10181022
}
@@ -1304,9 +1308,11 @@ func ssaGenBlock(s *ssagen.State, b, next *ssa.Block) {
13041308
case ssa.BlockRet:
13051309
s.Prog(obj.ARET)
13061310
case ssa.BlockRetJmp:
1307-
if buildcfg.Experiment.RegabiG && s.ABI == obj.ABI0 && b.Aux.(*obj.LSym).ABI() == obj.ABIInternal {
1311+
if s.ABI == obj.ABI0 && b.Aux.(*obj.LSym).ABI() == obj.ABIInternal {
13081312
// zeroing X15 when entering ABIInternal from ABI0
1309-
opregreg(s, x86.AXORPS, x86.REG_X15, x86.REG_X15)
1313+
if buildcfg.GOOS != "plan9" { // do not use SSE on Plan 9
1314+
opregreg(s, x86.AXORPS, x86.REG_X15, x86.REG_X15)
1315+
}
13101316
// set G register from TLS
13111317
getgFromTLS(s, x86.REG_R14)
13121318
}
@@ -1348,20 +1354,15 @@ func ssaGenBlock(s *ssagen.State, b, next *ssa.Block) {
13481354
}
13491355
}
13501356

1351-
func loadRegResults(s *ssagen.State, f *ssa.Func) {
1352-
for _, o := range f.OwnAux.ABIInfo().OutParams() {
1353-
n := o.Name.(*ir.Name)
1354-
rts, offs := o.RegisterTypesAndOffsets()
1355-
for i := range o.Registers {
1356-
p := s.Prog(loadByType(rts[i]))
1357-
p.From.Type = obj.TYPE_MEM
1358-
p.From.Name = obj.NAME_AUTO
1359-
p.From.Sym = n.Linksym()
1360-
p.From.Offset = n.FrameOffset() + offs[i]
1361-
p.To.Type = obj.TYPE_REG
1362-
p.To.Reg = ssa.ObjRegForAbiReg(o.Registers[i], f.Config)
1363-
}
1364-
}
1357+
func loadRegResult(s *ssagen.State, f *ssa.Func, t *types.Type, reg int16, n *ir.Name, off int64) *obj.Prog {
1358+
p := s.Prog(loadByType(t))
1359+
p.From.Type = obj.TYPE_MEM
1360+
p.From.Name = obj.NAME_AUTO
1361+
p.From.Sym = n.Linksym()
1362+
p.From.Offset = n.FrameOffset() + off
1363+
p.To.Type = obj.TYPE_REG
1364+
p.To.Reg = reg
1365+
return p
13651366
}
13661367

13671368
func spillArgReg(pp *objw.Progs, p *obj.Prog, f *ssa.Func, t *types.Type, reg int16, n *ir.Name, off int64) *obj.Prog {

src/cmd/compile/internal/arm/galign.go

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ func Init(arch *ssagen.ArchInfo) {
1818
arch.SoftFloat = buildcfg.GOARM == 5
1919
arch.ZeroRange = zerorange
2020
arch.Ginsnop = ginsnop
21-
arch.Ginsnopdefer = ginsnop
2221

2322
arch.SSAMarkMoves = func(s *ssagen.State, b *ssa.Block) {}
2423
arch.SSAGenValue = ssaGenValue

src/cmd/compile/internal/arm64/galign.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ func Init(arch *ssagen.ArchInfo) {
1818
arch.PadFrame = padframe
1919
arch.ZeroRange = zerorange
2020
arch.Ginsnop = ginsnop
21-
arch.Ginsnopdefer = ginsnop
2221

2322
arch.SSAMarkMoves = func(s *ssagen.State, b *ssa.Block) {}
2423
arch.SSAGenValue = ssaGenValue
2524
arch.SSAGenBlock = ssaGenBlock
25+
arch.LoadRegResult = loadRegResult
26+
arch.SpillArgReg = spillArgReg
2627
}

src/cmd/compile/internal/arm64/ssa.go

+60-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"cmd/compile/internal/base"
1111
"cmd/compile/internal/ir"
1212
"cmd/compile/internal/logopt"
13+
"cmd/compile/internal/objw"
1314
"cmd/compile/internal/ssa"
1415
"cmd/compile/internal/ssagen"
1516
"cmd/compile/internal/types"
@@ -161,6 +162,18 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
161162
p.From.Type = obj.TYPE_REG
162163
p.From.Reg = v.Args[0].Reg()
163164
ssagen.AddrAuto(&p.To, v)
165+
case ssa.OpArgIntReg, ssa.OpArgFloatReg:
166+
// The assembler needs to wrap the entry safepoint/stack growth code with spill/unspill
167+
// The loop only runs once.
168+
for _, a := range v.Block.Func.RegArgs {
169+
// Pass the spill/unspill information along to the assembler, offset by size of
170+
// the saved LR slot.
171+
addr := ssagen.SpillSlotAddr(a, arm64.REGSP, base.Ctxt.FixedFrameSize())
172+
s.FuncInfo().AddSpill(
173+
obj.RegSpill{Reg: a.Reg, Addr: addr, Unspill: loadByType(a.Type), Spill: storeByType(a.Type)})
174+
}
175+
v.Block.Func.RegArgs = nil
176+
ssagen.CheckArgReg(v)
164177
case ssa.OpARM64ADD,
165178
ssa.OpARM64SUB,
166179
ssa.OpARM64AND,
@@ -1101,8 +1114,34 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
11011114
v.Fatalf("FlagConstant op should never make it to codegen %v", v.LongString())
11021115
case ssa.OpARM64InvertFlags:
11031116
v.Fatalf("InvertFlags should never make it to codegen %v", v.LongString())
1104-
case ssa.OpClobber, ssa.OpClobberReg:
1105-
// TODO: implement for clobberdead experiment. Nop is ok for now.
1117+
case ssa.OpClobber:
1118+
// MOVW $0xdeaddead, REGTMP
1119+
// MOVW REGTMP, (slot)
1120+
// MOVW REGTMP, 4(slot)
1121+
p := s.Prog(arm64.AMOVW)
1122+
p.From.Type = obj.TYPE_CONST
1123+
p.From.Offset = 0xdeaddead
1124+
p.To.Type = obj.TYPE_REG
1125+
p.To.Reg = arm64.REGTMP
1126+
p = s.Prog(arm64.AMOVW)
1127+
p.From.Type = obj.TYPE_REG
1128+
p.From.Reg = arm64.REGTMP
1129+
p.To.Type = obj.TYPE_MEM
1130+
p.To.Reg = arm64.REGSP
1131+
ssagen.AddAux(&p.To, v)
1132+
p = s.Prog(arm64.AMOVW)
1133+
p.From.Type = obj.TYPE_REG
1134+
p.From.Reg = arm64.REGTMP
1135+
p.To.Type = obj.TYPE_MEM
1136+
p.To.Reg = arm64.REGSP
1137+
ssagen.AddAux2(&p.To, v, v.AuxInt+4)
1138+
case ssa.OpClobberReg:
1139+
x := uint64(0xdeaddeaddeaddead)
1140+
p := s.Prog(arm64.AMOVD)
1141+
p.From.Type = obj.TYPE_CONST
1142+
p.From.Offset = int64(x)
1143+
p.To.Type = obj.TYPE_REG
1144+
p.To.Reg = v.Reg()
11061145
default:
11071146
v.Fatalf("genValue not implemented: %s", v.LongString())
11081147
}
@@ -1266,3 +1305,22 @@ func ssaGenBlock(s *ssagen.State, b, next *ssa.Block) {
12661305
b.Fatalf("branch not implemented: %s", b.LongString())
12671306
}
12681307
}
1308+
1309+
func loadRegResult(s *ssagen.State, f *ssa.Func, t *types.Type, reg int16, n *ir.Name, off int64) *obj.Prog {
1310+
p := s.Prog(loadByType(t))
1311+
p.From.Type = obj.TYPE_MEM
1312+
p.From.Name = obj.NAME_AUTO
1313+
p.From.Sym = n.Linksym()
1314+
p.From.Offset = n.FrameOffset() + off
1315+
p.To.Type = obj.TYPE_REG
1316+
p.To.Reg = reg
1317+
return p
1318+
}
1319+
1320+
func spillArgReg(pp *objw.Progs, p *obj.Prog, f *ssa.Func, t *types.Type, reg int16, n *ir.Name, off int64) *obj.Prog {
1321+
p = pp.Append(p, storeByType(t), obj.TYPE_REG, reg, 0, obj.TYPE_MEM, 0, n.FrameOffset()+off)
1322+
p.To.Name = obj.NAME_PARAM
1323+
p.To.Sym = n.Linksym()
1324+
p.Pos = p.Pos.WithNotStmt()
1325+
return p
1326+
}

0 commit comments

Comments
 (0)