From 13f74db304fdf6dc6241485d6e6f3f6a0327633c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandru=20Mo=C8=99oi?= Date: Mon, 14 Mar 2016 19:11:19 +0100 Subject: [PATCH] cmd/compile: fix no-opt build after moving decomposing user functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit decompose-builtin pass requires an opt pass, but -N disables late-opt, the only opt pass (out of two) that happens after decompose-builtin. This CL enables both 'opt' and 'late opt' passes. The extra compile time for 'late opt' in negligible since most rewrites were already done in the first 'opt' (also measured before). We should put some effort in splitting the generic rules into required and optional. Also update generic.rules comments about lowering of StringMake and SliceMake. Tested with GO_GCFLAGS=-N ./all.bash Change-Id: I92999681aaa02587b6dc6e32ce997a91f1fc9499 Reviewed-on: https://go-review.googlesource.com/20682 Run-TryBot: Alexandru Moșoi Reviewed-by: Brad Fitzpatrick --- src/cmd/compile/internal/ssa/compile.go | 2 +- src/cmd/compile/internal/ssa/gen/generic.rules | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) 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])