mirror of
https://github.com/golang/go
synced 2024-11-24 10:50:13 -07:00
[dev.ssa] fix equivalence class after aux/auxint refactor.
This caused the following code snippet to be miscompiled var f int x := g(&f) f = 10 Moving the store of 10 above the function call. Change-Id: Ic6951f5e7781b122cd881df324a38e519d6d66f0 Reviewed-on: https://go-review.googlesource.com/11073 Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
c31b6dd0be
commit
3b817ef8f8
@ -26,15 +26,16 @@ func cse(f *Func) {
|
||||
// Make initial partition based on opcode/type/aux/nargs
|
||||
// TODO(khr): types are not canonical, so we may split unnecessarily. Fix that.
|
||||
type key struct {
|
||||
op Op
|
||||
typ Type
|
||||
aux interface{}
|
||||
nargs int
|
||||
op Op
|
||||
typ Type
|
||||
aux interface{}
|
||||
auxint int64
|
||||
nargs int
|
||||
}
|
||||
m := map[key]eqclass{}
|
||||
for _, b := range f.Blocks {
|
||||
for _, v := range b.Values {
|
||||
k := key{v.Op, v.Type, v.Aux, len(v.Args)}
|
||||
k := key{v.Op, v.Type, v.Aux, v.AuxInt, len(v.Args)}
|
||||
m[k] = append(m[k], v)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user