]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.ssa] cmd/compile/ssa: implement OLEN
authorJosh Bleecher Snyder <josharian@gmail.com>
Sat, 4 Jul 2015 01:41:28 +0000 (18:41 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Sun, 5 Jul 2015 03:52:56 +0000 (03:52 +0000)
Change-Id: Ie23b13142fd820d7071a348a8370175e58b76d64
Reviewed-on: https://go-review.googlesource.com/11878
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/gc/ssa.go

index 14c39d337f20b254d76592a97645397aa6347f2f..1be5f0cb854b232fde579f7e0cee4b9fee60b997 100644 (file)
@@ -521,6 +521,16 @@ func (s *state) expr(n *Node) *ssa.Value {
                        return s.newValue2(ssa.OpLoad, n.Left.Type.Type, p, s.mem())
                }
 
+       case OLEN:
+               switch {
+               case n.Left.Type.Bound < 0: // slice
+                       return s.newValue1(ssa.OpSliceLen, s.config.Uintptr, s.expr(n.Left))
+               case n.Left.Type.IsString(): // string
+                       return s.newValue1(ssa.OpStringLen, s.config.Uintptr, s.expr(n.Left))
+               default: // array
+                       return s.constInt(s.config.Uintptr, n.Left.Type.Bound)
+               }
+
        case OCALLFUNC:
                static := n.Left.Op == ONAME && n.Left.Class == PFUNC