eqloop:
                        for j := 1; j < len(e); {
                                w := e[j]
+                               equivalent := true
                                for i := 0; i < len(v.Args); i++ {
-                                       if valueEqClass[v.Args[i].ID] != valueEqClass[w.Args[i].ID] || !v.Type.Equal(w.Type) {
-                                               // w is not equivalent to v.
-                                               // move it to the end and shrink e.
-                                               e[j], e[len(e)-1] = e[len(e)-1], e[j]
-                                               e = e[:len(e)-1]
-                                               valueEqClass[w.ID] = ID(len(partition))
-                                               changed = true
-                                               continue eqloop
+                                       if valueEqClass[v.Args[i].ID] != valueEqClass[w.Args[i].ID] {
+                                               equivalent = false
+                                               break
                                        }
                                }
+                               if !equivalent || !v.Type.Equal(w.Type) {
+                                       // w is not equivalent to v.
+                                       // move it to the end and shrink e.
+                                       e[j], e[len(e)-1] = e[len(e)-1], e[j]
+                                       e = e[:len(e)-1]
+                                       valueEqClass[w.ID] = ID(len(partition))
+                                       changed = true
+                                       continue eqloop
+                               }
                                // v and w are equivalent.  Keep w in e.
                                j++
                        }
                                len(v.Args) != len(w.Args) ||
                                v.Op == OpPhi && v.Block != w.Block ||
                                v.Aux != w.Aux ||
-                               len(v.Args) >= 1 && v.Args[0].Op != w.Args[0].Op ||
-                               len(v.Args) >= 2 && v.Args[1].Op != w.Args[1].Op ||
+                               len(v.Args) >= 1 && (v.Args[0].Op != w.Args[0].Op ||
+                                       v.Args[0].Aux != w.Args[0].Aux ||
+                                       v.Args[0].AuxInt != w.Args[0].AuxInt) ||
+                               len(v.Args) >= 2 && (v.Args[1].Op != w.Args[1].Op ||
+                                       v.Args[1].Aux != w.Args[1].Aux ||
+                                       v.Args[1].AuxInt != w.Args[1].AuxInt) ||
                                typNames[v.Type] != typNames[w.Type] {
                                break
                        }
                return v.Block.ID < w.Block.ID
        }
        if len(v.Args) >= 1 {
-               x := v.Args[0].Op
-               y := w.Args[0].Op
-               if x != y {
-                       return x < y
+               vOp := v.Args[0].Op
+               wOp := w.Args[0].Op
+               if vOp != wOp {
+                       return vOp < wOp
+               }
+
+               vAuxInt := v.Args[0].AuxInt
+               wAuxInt := w.Args[0].AuxInt
+               if vAuxInt != wAuxInt {
+                       return vAuxInt < wAuxInt
                }
+
                if len(v.Args) >= 2 {
-                       x = v.Args[1].Op
-                       y = w.Args[1].Op
-                       if x != y {
-                               return x < y
+                       vOp = v.Args[1].Op
+                       wOp = w.Args[1].Op
+                       if vOp != wOp {
+                               return vOp < wOp
+                       }
+
+                       vAuxInt = v.Args[1].AuxInt
+                       wAuxInt = w.Args[1].AuxInt
+                       if vAuxInt != wAuxInt {
+                               return vAuxInt < wAuxInt
                        }
                }
        }