]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/cmd/compile/internal/ssa/compile.go
all: merge dev.inline into master
[gostls13.git] / src / cmd / compile / internal / ssa / compile.go
index 02d74673348f76fd9d6e6194cb76334dfadf87e7..975845f258796c9f0c0f7d6f29832985ddcd032c 100644 (file)
@@ -5,6 +5,7 @@
 package ssa
 
 import (
+       "cmd/internal/obj"
        "cmd/internal/src"
        "fmt"
        "log"
@@ -350,6 +351,8 @@ var passes = [...]pass{
        {name: "writebarrier", fn: writebarrier, required: true}, // expand write barrier ops
        {name: "fuse", fn: fuse},
        {name: "dse", fn: dse},
+       {name: "insert resched checks", fn: insertLoopReschedChecks,
+               disabled: obj.Preemptibleloops_enabled == 0}, // insert resched checks in loops.
        {name: "tighten", fn: tighten}, // move values closer to their uses
        {name: "lower", fn: lower, required: true},
        {name: "lowered cse", fn: cse},
@@ -379,7 +382,13 @@ type constraint struct {
 }
 
 var passOrder = [...]constraint{
-       // prove reliese on common-subexpression elimination for maximum benefits.
+       // "insert resched checks" uses mem, better to clean out stores first.
+       {"dse", "insert resched checks"},
+       // insert resched checks adds new blocks containing generic instructions
+       {"insert resched checks", "lower"},
+       {"insert resched checks", "tighten"},
+
+       // prove relies on common-subexpression elimination for maximum benefits.
        {"generic cse", "prove"},
        // deadcode after prove to eliminate all new dead blocks.
        {"prove", "generic deadcode"},