From: Michael Munday Date: Fri, 23 Sep 2016 14:38:50 +0000 (-0400) Subject: cmd/compile: recognize OpS390XLoweredNilCheck as a nil check in the scheduler X-Git-Tag: go1.8beta1~1186 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=120e9ff34f577376f8d1c25a8966c88e0e92fee5;p=gostls13.git cmd/compile: recognize OpS390XLoweredNilCheck as a nil check in the scheduler Before this change a nil check on s390x could be scheduled after the target pointer has been dereferenced. Change-Id: I7ea40a4b52f975739f6db183a2794be4981c4e3d Reviewed-on: https://go-review.googlesource.com/29730 Run-TryBot: Michael Munday TryBot-Result: Gobot Gobot Reviewed-by: Keith Randall --- diff --git a/src/cmd/compile/internal/ssa/schedule.go b/src/cmd/compile/internal/ssa/schedule.go index 135d908259..411c09b971 100644 --- a/src/cmd/compile/internal/ssa/schedule.go +++ b/src/cmd/compile/internal/ssa/schedule.go @@ -97,7 +97,10 @@ func schedule(f *Func) { f.Fatalf("LoweredGetClosurePtr appeared outside of entry block, b=%s", b.String()) } score[v.ID] = ScorePhi - case v.Op == OpAMD64LoweredNilCheck || v.Op == OpPPC64LoweredNilCheck || v.Op == OpARMLoweredNilCheck || v.Op == OpARM64LoweredNilCheck || v.Op == Op386LoweredNilCheck || v.Op == OpMIPS64LoweredNilCheck: + case v.Op == OpAMD64LoweredNilCheck || v.Op == OpPPC64LoweredNilCheck || + v.Op == OpARMLoweredNilCheck || v.Op == OpARM64LoweredNilCheck || + v.Op == Op386LoweredNilCheck || v.Op == OpMIPS64LoweredNilCheck || + v.Op == OpS390XLoweredNilCheck: // Nil checks must come before loads from the same address. score[v.ID] = ScoreNilCheck case v.Op == OpPhi: