diff options
author | David Chase <drchase@google.com> | 2015-10-19 11:36:07 -0400 |
---|---|---|
committer | David Chase <drchase@google.com> | 2015-10-23 19:32:57 +0000 |
commit | e99dd520665000dfeb848fb4ecd381314b8fe61b (patch) | |
tree | d73d4bb6f2d2d2fcd362ef25b1a47673aaeefc78 /src/cmd/compile/internal/ssa/tighten.go | |
parent | 3abb8441087dbc1f08320c40a750ac1a7209b9fe (diff) | |
download | go-e99dd520665000dfeb848fb4ecd381314b8fe61b.tar.gz go-e99dd520665000dfeb848fb4ecd381314b8fe61b.zip |
[dev.ssa] cmd/compile: enhance SSA filtering, add OpConvert
Modified GOSSA{HASH.PKG} environment variable filters to
make it easier to make/run with all SSA for testing.
Disable attempts at SSA for architectures that are not
amd64 (avoid spurious errors/unimplementeds.)
Removed easy out for unimplemented features.
Add convert op for proper liveness in presence of uintptr
to/from unsafe.Pointer conversions.
Tweaked stack sizes to get a pass on windows;
1024 instead 768, was observed to pass at least once.
Change-Id: Ida3800afcda67d529e3b1cf48ca4a3f0fa48b2c5
Reviewed-on: https://go-review.googlesource.com/16201
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: David Chase <drchase@google.com>
Diffstat (limited to 'src/cmd/compile/internal/ssa/tighten.go')
-rw-r--r-- | src/cmd/compile/internal/ssa/tighten.go | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/cmd/compile/internal/ssa/tighten.go b/src/cmd/compile/internal/ssa/tighten.go index 1da5071a2a..4fa26d2d18 100644 --- a/src/cmd/compile/internal/ssa/tighten.go +++ b/src/cmd/compile/internal/ssa/tighten.go @@ -54,8 +54,12 @@ func tighten(f *Func) { for _, b := range f.Blocks { for i := 0; i < len(b.Values); i++ { v := b.Values[i] - if v.Op == OpPhi || v.Op == OpGetClosurePtr { - // GetClosurePtr must stay in entry block + if v.Op == OpPhi || v.Op == OpGetClosurePtr || v.Op == OpConvert { + // GetClosurePtr must stay in entry block. + // OpConvert must not float over call sites. + // TODO do we instead need a dependence edge of some sort for OpConvert? + // Would memory do the trick, or do we need something else that relates + // to safe point operations? continue } if len(v.Args) > 0 && v.Args[len(v.Args)-1].Type.IsMemory() { |