aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/tighten.go
diff options
context:
space:
mode:
authorDavid Chase <drchase@google.com>2015-10-19 11:36:07 -0400
committerDavid Chase <drchase@google.com>2015-10-23 19:32:57 +0000
commite99dd520665000dfeb848fb4ecd381314b8fe61b (patch)
treed73d4bb6f2d2d2fcd362ef25b1a47673aaeefc78 /src/cmd/compile/internal/ssa/tighten.go
parent3abb8441087dbc1f08320c40a750ac1a7209b9fe (diff)
downloadgo-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.go8
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() {