]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/cmd/compile/internal/gc/pgen.go
[dev.ssa] Merge remote-tracking branch 'origin/master' into mbranch
[gostls13.git] / src / cmd / compile / internal / gc / pgen.go
index 5d6410a09f1edec21b8c403ed4d12ae8c1df7f91..e6b670f7a29004845aa9f8fd3f05378989cde2b1 100644 (file)
@@ -5,6 +5,7 @@
 package gc
 
 import (
+       "cmd/compile/internal/ssa"
        "cmd/internal/obj"
        "crypto/md5"
        "fmt"
@@ -353,6 +354,7 @@ func compile(fn *Node) {
        var nam *Node
        var gcargs *Sym
        var gclocals *Sym
+       var ssafn *ssa.Func
        if fn.Nbody == nil {
                if pure_go != 0 || strings.HasPrefix(fn.Func.Nname.Sym.Name, "init.") {
                        Yyerror("missing function body for %q", fn.Func.Nname.Sym.Name)
@@ -404,6 +406,14 @@ func compile(fn *Node) {
                goto ret
        }
 
+       // Build an SSA backend function
+       {
+               name := Curfn.Func.Nname.Sym.Name
+               if len(name) > 4 && name[len(name)-4:] == "_ssa" {
+                       ssafn = buildssa(Curfn)
+               }
+       }
+
        continpc = nil
        breakpc = nil
 
@@ -465,6 +475,10 @@ func compile(fn *Node) {
                }
        }
 
+       if ssafn != nil {
+               genssa(ssafn, ptxt, gcargs, gclocals)
+               return
+       }
        Genlist(Curfn.Func.Enter)
        Genlist(Curfn.Nbody)
        gclean()