[dev.ssa] cmd/compile/ssa: handle loops that don't loop

Loops such as

func f(c chan int) int {
	for x := range c {
		return x
	}
	return 0
}

don't loop. Remove the assumption that they must.

Partly fixes the build.

Change-Id: I766cebeec8e36d14512bea26f54c06c8eaf95e23
Reviewed-on: https://go-review.googlesource.com/11876
Reviewed-by: Keith Randall <khr@golang.org>
diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go
index b21b413..14c39d3 100644
--- a/src/cmd/compile/internal/gc/ssa.go
+++ b/src/cmd/compile/internal/gc/ssa.go
@@ -409,8 +409,11 @@
 			s.stmt(n.Right)
 		}
 		b = s.endBlock()
-		addEdge(b, bCond)
-
+		// If the body ends in a return statement,
+		// the condition check and loop are unreachable.
+		if b != nil {
+			addEdge(b, bCond)
+		}
 		s.startBlock(bEnd)
 
 	case OCALLFUNC: