package gc
import (
+ "cmd/compile/internal/ssa"
"cmd/internal/obj"
"crypto/md5"
"fmt"
Deferreturn = Sysfunc("deferreturn")
Panicindex = Sysfunc("panicindex")
panicslice = Sysfunc("panicslice")
+ panicdivide = Sysfunc("panicdivide")
throwreturn = Sysfunc("throwreturn")
+ growslice = Sysfunc("growslice")
+ writebarrierptr = Sysfunc("writebarrierptr")
+ typedmemmove = Sysfunc("typedmemmove")
+ panicdottype = Sysfunc("panicdottype")
}
lno := setlineno(fn)
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)
goto ret
}
+ // Build an SSA backend function.
+ if shouldssa(Curfn) {
+ ssafn = buildssa(Curfn)
+ }
+
continpc = nil
breakpc = nil
}
}
+ if ssafn != nil {
+ genssa(ssafn, ptxt, gcargs, gclocals)
+ if Curfn.Func.Endlineno != 0 {
+ lineno = Curfn.Func.Endlineno
+ }
+ ssafn.Free()
+ return
+ }
Genslice(Curfn.Func.Enter.Slice())
Genlist(Curfn.Nbody)
gclean()