diff --git a/src/cmd/compile/internal/ssa/compile.go b/src/cmd/compile/internal/ssa/compile.go index cbef6ea645..8080b7aaba 100644 --- a/src/cmd/compile/internal/ssa/compile.go +++ b/src/cmd/compile/internal/ssa/compile.go @@ -183,7 +183,7 @@ var passes = [...]pass{ {name: "prove", fn: prove}, {name: "decompose builtin", fn: decomposeBuiltIn, required: true}, {name: "dec", fn: dec, required: true}, - {name: "late opt", fn: opt}, // TODO: split required rules and optimizing rules + {name: "late opt", fn: opt, required: true}, // TODO: split required rules and optimizing rules {name: "generic deadcode", fn: deadcode}, {name: "fuse", fn: fuse}, {name: "dse", fn: dse}, diff --git a/src/cmd/compile/internal/ssa/gen/generic.rules b/src/cmd/compile/internal/ssa/gen/generic.rules index cc24269418..2186d8921c 100644 --- a/src/cmd/compile/internal/ssa/gen/generic.rules +++ b/src/cmd/compile/internal/ssa/gen/generic.rules @@ -534,6 +534,9 @@ (Store [8] dst real mem)) // string ops +// Decomposing StringMake and lowering of StringPtr and StringLen +// happens in a later pass, dec, so that these operations are available +// to otherpasses for optimizations. (StringPtr (StringMake (Const64 [c]) _)) -> (Const64 [c]) (StringLen (StringMake _ (Const64 [c]))) -> (Const64 [c]) (ConstString {s}) && config.PtrSize == 4 && s.(string) == "" -> @@ -563,6 +566,9 @@ (Store [config.PtrSize] dst ptr mem)) // slice ops +// Decomposing SliceMake, and lowering of SlicePtr, SliceLen, and SliceCap +// happens in a later pass, dec, so that these operations are available +// to other passes for optimizations. (SlicePtr (SliceMake (Const64 [c]) _ _)) -> (Const64 [c]) (SliceLen (SliceMake _ (Const64 [c]) _)) -> (Const64 [c]) (SliceCap (SliceMake _ _ (Const64 [c]))) -> (Const64 [c])