From f4e37c8ec5f54964221fc950c2f0260140f438d8 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Fri, 7 Oct 2016 10:08:10 -0700 Subject: [PATCH] cmd/compile: use standard dom tree in nilcheckelim No need to build a bespoke dom tree here when we might have one cached already. The allocations for the dom tree were also more expensive than they needed to be. Fixes #12021 Change-Id: I6a967880aee03660ad6fc293f8fc783779cae11d Reviewed-on: https://go-review.googlesource.com/30671 Run-TryBot: Keith Randall Reviewed-by: Brad Fitzpatrick --- src/cmd/compile/internal/ssa/nilcheck.go | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/cmd/compile/internal/ssa/nilcheck.go b/src/cmd/compile/internal/ssa/nilcheck.go index dd94611e37..a89132e658 100644 --- a/src/cmd/compile/internal/ssa/nilcheck.go +++ b/src/cmd/compile/internal/ssa/nilcheck.go @@ -10,15 +10,7 @@ func nilcheckelim(f *Func) { // A nil check is redundant if the same nil check was successful in a // dominating block. The efficacy of this pass depends heavily on the // efficacy of the cse pass. - idom := f.idom() - domTree := make([][]*Block, f.NumBlocks()) - - // Create a block ID -> [dominees] mapping - for _, b := range f.Blocks { - if dom := idom[b.ID]; dom != nil { - domTree[dom.ID] = append(domTree[dom.ID], b) - } - } + sdom := f.sdom() // TODO: Eliminate more nil checks. // We can recursively remove any chain of fixed offset calculations, @@ -128,7 +120,7 @@ func nilcheckelim(f *Func) { b.Values = b.Values[:i] // Add all dominated blocks to the work list. - for _, w := range domTree[node.block.ID] { + for w := sdom[node.block.ID].child; w != nil; w = sdom[w.ID].sibling { work = append(work, bp{op: Work, block: w}) } -- 2.48.1